Comment: | commit 1 |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk | commit1 |
Files: | files | file ages | folders |
SHA3-256: |
2fd7dc4dd557072b74bf5828ec33a392 |
User & Date: | olr on 2017-04-25 11:51:19 |
Other Links: | manifest | tags |
2017-04-25
| ||
12:09 | Python v3.6 check-in: 1b348abe60 user: olr tags: trunk | |
11:51 | commit 1 check-in: 2fd7dc4dd5 user: olr tags: trunk, commit1 | |
11:44 | initial empty check-in check-in: c902aec434 user: Z9 tags: trunk | |
Added LICENSE.fr.txt version [6c800bc372].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 | LICENCE PUBLIQUE GÉNÉRALE GNU Version 3, du 29 juin 2007. Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Chacun est autorisé à copier et distribuer des copies conformes de ce document de licence, mais toute modification en est proscrite. Traduction française par Philippe Verdy <verdy_p (à) wanadoo (point) fr>, le 30 juin 2007. _______________________________________________________________________ Avertissement important au sujet de cette traduction française. _______________________________________________________________________ Ceci est une traduction en français de la licence “GNU General Public License” (GPL). Cette traduction est fournie ici dans l’espoir qu’elle facilitera sa compréhension, mais elle ne constitue pas une traduction officielle ou approuvée d’un point de vue juridique. La Free Software Foundation (FSF) ne publie pas cette traduction et ne l’a pas approuvée en tant que substitut valide au plan légal pour la licence authentique “GNU General Public Licence”. Cette traduction n’a pas encore été passée en revue attentivement par un juriste et donc le traducteur ne peut garantir avec certitude qu’elle représente avec exactitude la signification légale des termes de la licence authentique “GNU General Public License” publiée en anglais. Cette traduction n’établit donc légalement aucun des termes et conditions d’utilisation d’un logiciel sous licence GNU GPL — seul le texte original en anglais le fait. Si vous souhaitez être sûr que les activités que vous projetez seront autorisées par la GNU General Public License, veuillez vous référer à sa seule version anglaise authentique. La FSF vous recommande fermement de ne pas utiliser cette traduction en tant que termes officiels pour vos propres programmes ; veuillez plutôt utiliser la version anglaise authentique telle que publiée par la FSF. Si vous choisissez d’acheminer cette traduction en même temps qu’un Programme sous licence GNU GPL, cela ne vous dispense pas de l’obligation d’acheminer en même temps une copie de la licence authentique en anglais, et de conserver dans la traduction cet avertissement important en français et son équivalent en anglais ci-dessous. _______________________________________________________________________ Important Warning About This French Translation. _______________________________________________________________________ This is a translation of the GNU General Public License (GPL) into French. This translation is distributed in the hope that it will facilitate understanding, but it is not an official or legally approved translation. The Free Software Foundation (FSF) is not the publisher of this translation and has not approved it as a legal substitute for the authentic GNU General Public License. The translation has not been reviewed carefully by lawyers, and therefore the translator cannot be sure that it exactly represents the legal meaning of the authentic GNU General Public License published in English. This translation does not legally state the terms and conditions of use of any Program licenced under GNU GPL — only the original English text of the GNU LGPL does that. If you wish to be sure whether your planned activities are permitted by the GNU General Public License, please refer to its sole authentic English version. The FSF strongly urges you not to use this translation as the official distribution terms for your programs; instead, please use the authentic English version published by the FSF. If you choose to convey this translation along with a Program covered by the GPL Licence, this does not remove your obligation to convey at the same time a copy of the authentic GNU GPL License in English, and you must keep in this translation this important warning in English and its equivalent in French above. _______________________________________________________________________ Préambule La Licence Publique Générale GNU (“GNU General Public License”) est une licence libre, en “copyleft”, destinée aux œuvres logicielles et d’autres types de travaux. Les licences de la plupart des œuvres logicielles et autres travaux de pratique sont conçues pour ôter votre liberté de partager et modifier ces travaux. En contraste, la Licence Publique Générale GNU a pour but de garantir votre liberté de partager et changer toutes les versions d’un programme — afin d’assurer qu’il restera libre pour tous les utilisateurs. Nous, la Free Software Foundation, utilisons la Licence Publique Générale GNU pour la plupart de nos logiciels ; cela s’applique aussi à tout autre travail édité de cette façon par ses auteurs. Vous pouvez, vous aussi, l’appliquer à vos propres programmes. Quand nous parlons de logiciel libre (“free”), nous nous référons à la liberté (“freedom”), pas au prix. Nos Licences Publiques Générales sont conçues pour assurer que vous ayez la liberté de distribuer des copies de logiciel libre (et le facturer si vous le souhaitez), que vous receviez le code source ou pouviez l’obtenir si vous le voulez, que vous pouviez modifier le logiciel ou en utiliser toute partie dans de nouveaux logiciels libres, et que vous sachiez que vous avez le droit de faire tout ceci. Pour protéger vos droits, nous avons besoin d’empêcher que d’autres vous restreignent ces droits ou vous demande de leur abandonner ces droits. En conséquence, vous avez certaines responsabilités si vous distribuez des copies d’un tel programme ou si vous le modifiez : les responsabilités de respecter la liberté des autres. Par exemple, si vous distribuez des copies d’un tel programme, que ce soit gratuit ou contre un paiement, vous devez accorder aux Destinataires les mêmes libertés que vous avez reçues. Vous devez aussi vous assurer qu’eux aussi reçoivent ou peuvent recevoir son code source. Et vous devez leur montrer les termes de cette licence afin qu’ils connaissent leurs droits. Les développeurs qui utilisent la GPL GNU protègent vos droits en deux étapes : (1) ils affirment leur droits d’auteur (“copyright”) sur le logiciel, et (2) vous accordent cette Licence qui vous donne la permission légale de le copier, le distribuer et/ou le modifier. Pour la protection des développeurs et auteurs, la GPL stipule clairement qu’il n’y a pas de garantie pour ce logiciel libre. Aux fins à la fois des utilisateurs et auteurs, la GPL requière que les versions modifiées soient marquées comme changées, afin que leurs problèmes ne soient pas attribués de façon erronée aux auteurs des versions précédentes. Certains dispositifs sont conçus pour empêcher l’accès des utilisateurs à l’installation ou l’exécution de versions modifiées du logiciel à l’intérieur de ces dispositifs, alors que les fabricants le peuvent. Ceci est fondamentalement incompatible avec le but de protéger la liberté des utilisateurs de modifier le logiciel. L’aspect systématique de tels abus se produit dans le secteur des produits destinés aux utilisateurs individuels, ce qui est précidément ce qui est le plus inacceptable. Aussi, nous avons conçu cette version de la GPL pour prohiber cette pratique pour ces produits. Si de tels problèmes surviennent dans d’autres domaines, nous nous tenons prêt à étendre cette restriction à ces domaines dans de futures versions de la GPL, autant qu’il sera nécessaire pour protéger la liberté des utilisateurs. Finalement, chaque programme est constamment menacé par les brevets logiciels. Les États ne devraient pas autoriser de tels brevets à restreindre le développement et l’utilisation de logiciels libres sur des ordinateurs d’usage général ; mais dans ceux qui le font, nous voulons spécialement éviter le danger que les brevets appliqués à un programme libre puisse le rendre effectivement propriétaire. Pour empêcher ceci, la GPL assure que les brevets ne peuvent être utilisés pour rendre le programme non-libre. Les termes précis et conditions concernant la copie, la distribution et la modification suivent. TERMES ET CONDITIONS Article 0. Définitions. « Cette Licence » se réfère à la version 3 de la “GNU General Public License” (le texte original en anglais). « Droit d’Auteur » signifie aussi les droits du “copyright” ou voisins qui s’appliquent à d’autres types de travaux, tels que ceux sur les masques de semi-conducteurs. « Le Programme » se réfère à tout travail qui peut être sujet au Droit d’Auteur (“copyright”) et dont les droits d’utilisation sont concédés en vertu de cette Licence. Chacun des Licenciés, à qui cette Licence est concédée, est désigné par « vous. » Les « Licenciés » et les « Destinataires » peuvent être des personnes physiques ou morales (individus ou organisations). « Modifier » un travail signifie en obtenir une copie et adapter tout ou partie du travail d’une façon nécessitant une autorisation d’un titulaire de Droit d’Auteur, autre que celle permettant d’en produire une copie conforme. Le travail résultant est appelé une « version modifiée » du précédent travail, ou un travail « basé sur » le précédent travail. Un « Travail Couvert » signifie soit le Programme non modifié soit un travail basé sur le Programme. « Propager » un travail signifie faire quoi que ce soit avec lui qui, sans permission, vous rendrait directement ou indirectement responsable d’un délit de contrefaçon suivant les lois relatives au Droit d’Auteur, à l’exception de son exécution sur un ordinateur ou de la modification d’une copie privée. La propagation inclue la copie, la distribution (avec ou sans modification), la mise à disposition envers le public, et aussi d'autres activités dans certains pays. « Acheminer » un travail signifie tout moyen de propagation de celui-ci qui permet à d’autres parties de réaliser ou recevoir des copies. La simple interaction d’un utilisateur à travers un réseau informatique, sans transfert effectif d’une copie, ne constitue pas un acheminement. Une interface utilisateur interactive affiche des « Notices Légales Appropriées » quand elle comprend un dispositif convenable, bien visible et évident qui (1) affiche une notice appropriée sur les droits d’auteur et (2) informe l’utilisateur qu’il n’y a pas de garantie pour le travail (sauf si des garanties ont été fournies hors du cadre de cette Licence), que les licenciés peuvent acheminer le travail sous cette Licence, et comment voir une copie de cette Licence. Si l’interface présente une liste de commandes utilisateur ou d’options, tel qu’un menu, un élément évident dans la liste présentée remplit ce critère. Article 1. Code source. Le « code source » d’un travail signifie la forme préférée du travail permettant ou facilitant les modifications de celui-ci. Le « code objet » d’un travail signifie toute forme du travail qui n’en est pas le code source. Une « Interface Standard » signifie une interface qui est soit celle d’une norme officielle définie par un organisme de normalisation reconnu ou, dans le cas des interfaces spécifiées pour un langage de programmation particulier, une interface largement utilisée parmi les développeurs travaillant dans ce langage. Les « Bibliothèques Système » d’un travail exécutable incluent tout ce qui, en dehors du travail dans son ensemble, (a) est inclus dans la forme usuelle de paquetage d’un Composant Majeur mais ne fait pas partie de ce Composant Majeur et (b) sert seulement à permettre l’utilisation du travail avec ce Composant Majeur ou à implémenter une Interface Standard pour laquelle une implémentation est disponible au public sous forme de code source ; un « Composant Majeur » signifie, dans ce contexte, un composant majeur essentiel (noyau, système de fenêtrage, etc.) du système d’exploitation (le cas échéant) d’un système sur lequel le travail exécutable fonctionne, ou bien un compilateur utilisé pour produire le code objet du travail, ou un interprète de code objet utilisé pour exécuter celui-ci. Le « Source Correspondant » d’un travail sous forme de code objet signifie l’ensemble des codes sources nécessaires pour générer, installer et (dans le cas d’un travail exécutable) exécuter le code objet et modifier le travail, y compris les scripts pour contrôler ces activités. Cependant, cela n’inclue pas les Bibliothèques Système du travail, ni les outils d’usage général ou les programmes libres généralement disponibles qui peuvent être utilisés sans modification pour achever ces activités mais ne sont pas partie de ce travail. Par exemple le Source Correspondant inclut les fichiers de définition d’interfaces associés aux fichiers sources du travail, et le code source des bibliothèques partagées et des sous-routines liées dynamiquement, pour lesquelles le travail est spécifiquement conçu pour les requérir via, par exemple, des communications de données ou contrôles de flux internes entre ces sous-programmes et d’autres parties du travail. Le Source Correspondant n’a pas besoin d’inclure tout ce que les utilisateurs peuvent regénérer automatiquement à partir d’autres parties du Source Correspondant. Le Source Correspondant pour un travail sous forme de code source est ce même travail. Article 2. Permissions de base. Tous les droits accordés suivant cette Licence le sont jusqu’au terme des Droits d’Auteur (“copyright”) sur le Programme, et sont irrévocables pourvu que les conditions établies soient remplies. Cette Licence affirme explicitement votre permission illimitée d’exécuter le Programme non modifié. La sortie produite par l’exécution d’un Travail Couvert n’est couverte par cette Licence que si cette sortie, étant donné leur contenu, constitue un Travail Couvert. Cette Licence reconnait vos propres droits d’usage raisonnable (“fair use” en législation des États-Unis d’Amérique) ou autres équivalents, tels qu’ils sont pourvus par la loi applicable sur le Droit d’Auteur (“copyright”). Vous pouvez créer, exécuter et propager sans condition des Travaux Couverts que vous n’acheminez pas, aussi longtemps que votre licence demeure en vigueur. Vous pouvez acheminer des Travaux Couverts à d’autres personnes dans le seul but de leur faire réaliser des modifications à votre usage exclusif, ou pour qu’ils vous fournissent des facilités vous permettant d’exécuter ces travaux, pourvu que vous vous conformiez aux termes de cette Licence lors de l’acheminement de tout matériel dont vous ne contrôlez pas le Droit d’Auteur (“copyright”). Ceux qui, dès lors, réalisent ou exécutent pour vous les Travaux Couverts ne doivent alors le faire qu’exclusivement pour votre propre compte, sous votre direction et votre contrôle, suivant des termes qui leur interdisent de réaliser, en dehors de leurs relations avec vous, toute copie de votre matériel soumis au Droit d’Auteur. L’acheminement dans toutes les autres circonstances n’est permis que selon les conditions établies ci-dessous. La concession de sous-licences n’est pas autorisé ; l’article 10 rend cet usage non nécessaire. Article 3. Protection des droits légaux des utilisateurs envers les lois anti-contournement. Aucun Travail Couvert ne doit être vu comme faisant partie d’une mesure technologique effective selon toute loi applicable remplissant les obligations prévues à l’article 11 du traité international sur le droit d’auteur adopté à l’OMPI le 20 décembre 1996, ou toutes lois similaires qui prohibent ou restreignent le contournement de telles mesures. Si vous acheminez un Travail Couvert, vous renoncez à tout pouvoir légal d’interdire le contournement des mesures technologiques dans tous les cas où un tel contournement serait effectué en exerçant les droits prévus dans cette Licence pour ce Travail Couvert, et vous déclarez rejeter toute intention de limiter l’opération ou la modification du Travail, en tant que moyens de renforcer, à l’encontre des utilisateurs de ce Travail, vos droits légaux ou ceux de tierces parties d’interdire le contournement des mesures technologiques. Article 4. Acheminement des copies conformes. Vous pouvez acheminer des copies conformes du code source du Programme tel que vous l’avez reçu, sur n’importe quel support, pourvu que vous publiiez scrupuleusement et de façon appropriée sur chaque copie une notice de Droit d’Auteur appropriée ; gardez intactes toutes les notices établissant que cette Licence et tous les termes additionnels non permissifs ajoutés en accord avec l’article 7 s’appliquent à ce code ; et donnez à chacun des Destinataires une copie de cette Licence en même temps que le Programme. Vous pouvez facturer à un prix quelconque, y compris gratuit, chacune des copies que vous acheminez, et vous pouvez offrir une protection additionnelle de support ou de garantie en échange d’un paiement. Article 5. Acheminement des versions sources modifiées. Vous pouvez acheminer un travail basé sur le Programme, ou bien les modifications pour le produire à partir du Programme, sous la forme de code source suivant les termes de l’article 4, pourvu que vous satisfassiez aussi à chacune des conditions requises suivantes : a) Le travail doit comporter des notices évidentes établissant que vous l’avez modifié et donnant la date correspondante. b) Le travail doit comporter des notices évidentes établissant qu’il est édité selon cette Licence et les conditions ajoutées d’après l’article 7. Cette obligation vient modifier l’obligation de l’article 4 de « garder intactes toutes les notices. » c) Vous devez licencier le travail entier, comme un tout, suivant cette Licence à quiconque entre en possession d’une copie. Cette Licence s’appliquera en conséquence, avec les termes additionnels applicables prévus par l’article 7, à la totalité du travail et chacune de ses parties, indépendamment de la façon dont ils sont empaquetés. Cette licence ne donne aucune permission de licencier le travail d’une autre façon, mais elle n’invalide pas une telle permission si vous l’avez reçue séparément. d) Si le travail a des interfaces utilisateurs interactives, chacune doit afficher les Notices Légales Appropriées ; cependant si le Programme a des interfaces qui n’affichent pas les Notices Légales Appropriées, votre travail n’a pas à les modifier pour qu’elles les affichent. Une compilation d’un Travail Couvert avec d’autres travaux séparés et indépendants, qui ne sont pas par leur nature des extensions du Travail Couvert, et qui ne sont pas combinés avec lui de façon à former un programme plus large, dans ou sur un volume de stockage ou un support de distribution, est appelé un « aggrégat » si la compilation et son Droit d’Auteur résultant ne sont pas utilisés pour limiter l’accès ou les droits légaux des utilisateurs de la compilation en deça de ce que permettent les travaux individuels. L’inclusion d’un Travail Couvert dans un aggrégat ne cause pas l’application de cette Licence aux autres parties de l’aggrégat. Article 6. Acheminement des formes non sources. Vous pouvez acheminer sous forme de code objet un Travail Couvert suivant les termes des articles 4 et 5, pourvu que vous acheminiez également suivant les termes de cette Licence le Source Correspondant lisible par une machine, d’une des façons suivantes : a) Acheminer le code objet sur, ou inclus dans, un produit physique (y compris un support de distribution physique), accompagné par le Source Correspondant fixé sur un support physique durable habituellement utilisé pour les échanges de logiciels. b) Acheminer le code objet sur, ou inclus dans, un produit physique (y compris un support de distribution physique), accompagné d’une offre écrite, valide pour au moins trois années et valide pour aussi longtemps que vous fournissez des pièces de rechange ou un support client pour ce modèle de produit, afin de donner à quiconque possède le code objet soit (1) une copie du Source Correspondant à tout logiciel dans ce produit qui est couvert par cette Licence, sur un support physique durable habituellement utilisé pour les échanges de logiciels, pour un prix non supérieur au coût raisonnable de la réalisation physique de l’acheminement de la source, ou soit (2) un accès permettant de copier le Source Correspondant depuis un serveur réseau sans frais. c) Acheminer des copies individuelles du code objet avec une copie de l’offre écrite de fournir le Source Correspondant. Cette alternative est permise seulement occasionellement et non commercialement, et seulement si vous avez reçu le code objet avec une telle offre, en accord avec l’article 6 alinéa b. d) Acheminer le code objet en offrant un accès depuis un emplacement désigné (gratuit ou contre facturation) et offrir un accès équivalent au Source Correspondant de la même façon via le même emplacement et sans facturation supplémentaire. Vous n’avez pas besoin d’obliger les Destinataires à copier le Source Correspondant en même temps que le code objet. Si l’emplacement pour copier le code objet est un serveur réseau, le Source Correspondant peut être sur un serveur différent (opéré par vous ou par un tiers) qui supporte des facilités équivalentes de copie, pourvu que vous mainteniez des directions claires à proximité du code objet indiquant où trouver le Source Correspondant. Indépendamment de quel serveur héberge le Source Correspondant, vous restez obligé de vous assurer qu’il reste disponible aussi longtemps que nécessaire pour satisfaire à ces obligations. e) Acheminer le code objet en utilisant une transmission d’égal-à-égal, pourvu que vous informiez les autres participants sur où le code objet et le Source Correspondant du travail sont offerts sans frais au public général suivant l’article 6 alinéa d. Une portion séparable du code objet, dont le code source est exclu du Source Correspondant en tant que Bibliothèque Système, n’a pas besoin d’être inclu dans l’acheminement du travail sous forme de code objet. Un « Produit Utilisateur » est soit (1) un « Produit de Consommation, » ce qui signifie toute propriété personnelle tangible normalement utilisée à des fins personnelles, familiales ou relatives au foyer, soit (2) toute chose conçue ou vendue pour l’incorporation dans un lieu d’habitation. Pour déterminer si un produit constitue un Produit de Consommation, les cas ambigus sont résolus en fonction de la couverture. Pour un produit particulier reçu par un utilisateur particulier, l’expression « normalement utilisée » ci-avant se réfère à une utilisation typique ou l’usage commun de produits de même catégorie, indépendamment du statut de cet utilisateur particulier ou de la façon spécifique dont cet utilisateur particulier utilise effectivement ou s’attend lui-même ou est attendu à utiliser ce produit. Un produit est un Produit de Consommation indépendamment du fait que ce produit a ou n’a pas d’utilisations substantielles commerciales, industrielles ou hors Consommation, à moins que de telles utilisations représentent le seul mode significatif d’utilisation du produit. Les « Informations d’Installation » d’un Produit Utilisateur signifient toutes les méthodes, procédures, clés d’autorisation ou autres informations requises pour installer et exécuter des versions modifiées d’un Travail Couvert dans ce Produit Utilisateur à partir d’une version modifiée de son Source Correspondant. Les informations qui suffisent à assurer la continuité de fonctionnement du code objet modifié ne doivent en aucun cas être empêchées ou interférées du seul fait qu’une modification a été effectuée. Si vous acheminez le code objet d’un Travail Couvert dans, ou avec, ou spécifiquement pour l’utilisation dans, un Produit Utilisateur et l’acheminement se produit en tant qu’élément d’une transaction dans laquelle le droit de possession et d’utilisation du Produit Utilisateur est transféré au Destinataire définitivement ou pour un terme fixé (indépendamment de la façon dont la transaction est caractérisée), le Source Correspondant acheminé selon cet article-ci doit être accompagné des Informations d’Installation. Mais cette obligation ne s’applique pas si ni vous ni aucune tierce partie ne détient la possibilité d’intaller un code objet modifié sur le Produit Utilisateur (par exemple, le travail a été installé en mémoire morte). L’obligation de fournir les Informations d’Installation n’inclue pas celle de continuer à fournir un service de support, une garantie ou des mises à jour pour un travail qui a été modifié ou installé par le Destinataire, ou pour le Produit Utilisateur dans lequel il a été modifié ou installé. L’accès à un réseau peut être rejeté quand la modification elle-même affecte matériellement et défavorablement les opérations du réseau ou viole les règles et protocoles de communication au travers du réseau. Le Source Correspondant acheminé et les Informations d’Installation fournies, en accord avec cet article, doivent être dans un format publiquement documenté (et dont une implémentation est disponible auprès du public sous forme de code source) et ne doit nécessiter aucune clé ou mot de passe spécial pour le dépaquetage, la lecture ou la copie. Article 7. Termes additionnels. Les « permissions additionelles » désignent les termes qui supplémentent ceux de cette Licence en émettant des exceptions à l’une ou plusieurs de ses conditions. Les permissions additionnelles qui sont applicables au Programme entier doivent être traitées comme si elles étaient incluent dans cette Licence, dans les limites de leur validité suivant la loi applicable. Si des permissions additionnelles s’appliquent seulement à une partie du Programme, cette partie peut être utilisée séparément suivant ces permissions, mais le Programme tout entier reste gouverné par cette Licence sans regard aux permissions additionelles. Quand vous acheminez une copie d’un Travail Couvert, vous pouvez à votre convenance ôter toute permission additionelle de cette copie, ou de n’importe quelle partie de celui-ci. (Des permissions additionnelles peuvent être rédigées de façon à requérir leur propre suppression dans certains cas où vous modifiez le travail.) Vous pouvez placer les permissions additionnelles sur le matériel acheminé, ajoutées par vous à un Travail Couvert pour lequel vous avez ou pouvez donner les permissions de Droit d’Auteur (“copyright”) appropriées. Nonobstant toute autre clause de cette Licence, pour tout constituant que vous ajoutez à un Travail Couvert, vous pouvez (si autorisé par les titulaires de Droit d’Auteur pour ce constituant) supplémenter les termes de cette Licence avec des termes : a) qui rejettent la garantie ou limitent la responsabilité de façon différente des termes des articles 15 et 16 de cette Licence ; ou b) qui requièrent la préservation de notices légales raisonnables spécifiées ou les attributions d’auteur dans ce constituant ou dans les Notices Légales Appropriées affichées par les travaux qui le contiennent ; ou c) qui prohibent la représentation incorrecte de l’origine de ce constituant, ou qui requièrent que les versions modifiées d’un tel constituant soit marquées par des moyens raisonnables comme différentes de la version originale ; ou d) qui limitent l’usage à but publicitaire des noms des concédants de licence et des auteurs du constituant ; ou e) qui refusent à accorder des droits selon la législation relative aux marques commerciales, pour l’utilisation dans des noms commerciaux, marques commerciales ou marques de services ; ou f) qui requièrent l’indemnisation des concédants de licences et auteurs du constituant par quiconque achemine ce constituant (ou des versions modifiées de celui-ci) en assumant contractuellement la responsabilité envers le Destinataire, pour toute responsabilité que ces engagements contractuels imposent directement à ces octroyants de licences et auteurs. Tous les autres termes additionnels non permissifs sont considérés comme des « restrictions avancées » dans le sens de l’article 10. Si le Programme tel que vous l’avez reçu, ou toute partie de celui-ci, contient une notice établissant qu’il est gouverné par cette Licence en même temps qu’un terme qui est une restriction avancée, vous pouvez ôter ce terme. Si un document de licence contient une restriction avancée mais permet la reconcession de licence ou l’acheminement suivant cette Licence, vous pouvez ajouter un Travail Couvert constituant gouverné par les termes de ce document de licence, pourvu que la restriction avancée ne survit pas à un telle cession de licence ou acheminement. Si vous ajoutez des termes à un Travail Couvert en accord avec cet article, vous devez placer, dans les fichiers sources appropriés, une déclaration des termes additionnels qui s’appliquent à ces fichiers, ou une notice indiquant où trouver les termes applicables. Les termes additionnels, qu’ils soient permissifs ou non permissifs, peuvent être établis sous la forme d’une licence écrite séparément, ou établis comme des exceptions ; les obligations ci-dessus s’appliquent dans chacun de ces cas. Article 8. Terminaison. Vous ne pouvez ni propager ni modifier un Travail Couvert autrement que suivant les termes de cette Licence. Toute autre tentative de le propager ou le modifier est nulle et terminera automatiquement vos droits selon cette Licence (y compris toute licence de brevet accordée selon le troisième paragraphe de l’article 11). Cependant, si vous cessez toute violation de cette Licence, alors votre licence depuis un titulaire de Droit d’Auteur (“copyright”) est réinstaurée (a) à titre provisoire à moins que et jusqu’à ce que le titulaire de Droit d’Auteur termine finalement et explicitement votre licence, et (b) de façon permanente si le titulaire de Droit d’Auteur ne parvient pas à vous notifier de la violation par quelque moyen raisonnable dans les soixante (60) jours après la cessation. De plus, votre licence depuis un titulaire particulier de Droit d’Auteur est réinstaurée de façon permanente si ce titulaire vous notifie de la violation par quelque moyen raisonnable, c’est la première fois que vous avez reçu une notification deviolation de cette Licence (pour un travail quelconque) depuis ce titulaire de Droit d’Auteur, et vous résolvez la violation dans les trente (30) jours qui suivent votre réception de la notification. La terminaison de vos droits suivant cette section ne terminera pas les licences des parties qui ont reçu des copies ou droits de votre part suivant cette Licence. Si vos droits ont été terminés et non réinstaurés de façon permanente, vous n’êtes plus qualifié à recevoir de nouvelles licences pour les mêmes constituants selon l’article 10. Article 9. Acceptation non requise pour obtenir des copies. Vous n’êtes pas obligé d’accepter cette licence afin de recevoir ou exécuter une copie du Programme. La propagation asservie d’un Travail Couvert qui se produit simplement en conséquence d’une transmission d’égal-à-égal pour recevoir une copie ne nécessite pas l’acceptation. Cependant, rien d’autre que cette Licence ne vous accorde la permission de propager ou modifier un quelconque Travail Couvert. Ces actions enfreignent le Droit d’Auteur si vous n’acceptez pas cette Licence. Par conséquent, en modifiant ou propageant un Travail Couvert, vous indiquez votre acceptation de cette Licence pour agir ainsi. Article 10. Cession automatique de Licence aux Destinataires et intermédiaires. Chaque fois que vous acheminez un Travail Couvert, le Destinataire reçoit automatiquement une licence depuis les concédants originaux, pour exécuter, modifier et propager ce travail, suivant les termes de cette Licence. Vous n’êtes pas responsable du renforcement de la conformation des tierces parties avec cette Licence. Une « transaction d’entité » désigne une transaction qui transfère le contrôle d’une organisation, ou de substantiellement tous ses actifs, ou la subdivision d’une organisation, ou la fusion de plusieurs organisations. Si la propagation d’un Travail Couvert résulte d’une transaction d’entité, chaque partie à cette transaction qui reçoit une copie du travail reçoit aussi les licences pour le travail que le prédécesseur intéressé à cette partie avait ou pourrait donner selon le paragraphe précédent, plus un droit de possession du Source Correspondant de ce travail depuis le prédécesseur intéressé si ce prédécesseur en dispose ou peut l’obtenir par des efforts raisonnables. Vous ne pouvez imposer aucune restriction avancée dans l’exercice des droits accordés ou affirmés selon cette Licence. Par exemple, vous ne pouvez imposer aucun paiement pour la licence, aucune royaltie, ni aucune autre charge pour l’exercice des droits accordés selon cette Licence ; et vous ne pouvez amorcer aucun litige judiciaire (y compris une réclamation croisée ou contre-réclamation dans un procès) sur l’allégation qu’une revendication de brevet est enfreinte par la réalisation, l’utilisation, la vente, l’offre de vente, ou l’importation du Programme ou d’une quelconque portion de celui-ci. Article 11. Brevets. Un « contributeur » est un titulaire de Droit d’Auteur (“copyright”) qui autorise l’utilisation selon cette Licence du Programme ou du travail sur lequel le Programme est basé. Le travail ainsi soumis à licence est appelé la « version contributive » de ce contributeur. Les « revendications de brevet essentielles » sont toutes les revendications de brevets détenues ou contrôlées par le contributeur, qu’elles soient déjà acquises par lui ou acquises subséquemment, qui pourraient être enfreintes de quelque manière, permises par cette Licence, sur la réalisation, l’utilisation ou la vente de la version contributive de celui-ci. Aux fins de cette définition, le « contrôle » inclue le droit de concéder des sous-licences de brevets d’une manière consistante, nécessaire et suffisante, avec les obligations de cette Licence. Chaque contributeur vous accorde une licence de brevet non exclusive, mondiale et libre de toute royaltie, selon les revendications de brevet essentielles, pour réaliser, utiliser, vendre, offrir à la vente, importer et autrement exécuter, modifier et propager les contenus de sa version contributive. Dans les trois paragraphes suivants, une « licence de brevet » désigne tous les accords ou engagements exprimés, quel que soit le nom que vous lui donnez, de ne pas mettre en vigueur un brevet (telle qu’une permission explicite pour mettre en pratique un brevet, ou un accord pour ne pas poursuivre un Destinataire pour cause de violation de brevet). « Accorder » une telle licence de brevet à une partie signifie conclure un tel accord ou engagement à ne pas faire appliquer le brevet à cette partie. Si vous acheminez un Travail Couvert, dépendant en connaissance d’une licence de brevet, et si le Source Correspondant du travail n’est pas disponible à quiconque copie, sans frais et suivant les termes de cette Licence, à travers un serveur réseau publiquement acessible ou tout autre moyen immédiatement accessible, alors vous devez soit (1) rendre la Source Correspondante ainsi disponible, soit (2) vous engager à vous priver pour vous-même du bénéfice de la licence de brevet pour ce travail particulier, soit (3) vous engager, d’une façon consistante avec les obligations de cette Licence, à étendre la licence de brevet aux Destinataires de ce travail. « Dépendant en connaissance » signifie que vous avez effectivement connaissance que, selon la licence de brevet, votre acheminement du Travail Couvert dans un pays, ou l’utilisation du Travail Couvert par votre Destinataire dans un pays, infreindrait un ou plusieurs brevets identifiables dans ce pays où vous avez des raisons de penser qu’ils sont valides. Si, conformément à ou en liaison avec une même transaction ou un même arrangement, vous acheminez, ou propagez en procurant un acheminement de, un Travail Couvert et accordez une licence de brevet à l’une des parties recevant le Travail Couvert pour lui permettre d’utiliser, propager, modifier ou acheminer une copie spécifique du Travail Couvert, alors votre accord est automatiquement étendu à tous les Destinataires du Travail Couvert et des travaux basés sur celui-ci. Une licence de brevet est « discriminatoire » si, dans le champ de sa couverture, elle n’inclut pas un ou plusieurs des droits qui sont spécifiquement accordés selon cette Licence, ou en prohibe l’exercice, ou est conditionnée par le non-exercice d’un ou plusieurs de ces droits. Vous ne pouvez pas acheminer un Travail Couvert si vous êtes partie à un arrangement selon lequel une partie tierce exerçant son activité dans la distribution de logiciels et à laquelle vous effectuez un paiement fondé sur l’étendue de votre activité d’acheminement du travail, et selon lequel la partie tierce accorde, à une quelconque partie qui recevrait depuis vous le Travail Couvert, une licence de brevet discriminatoire (a) en relation avec les copies du Travail Couvert acheminées par vous (ou les copies réalisées à partir de ces copies), ou (b) avant tout destinée et en relation avec des produits spécifiques ou compilations contenant le Travail Couvert, à moins que vous ayez conclu cet arrangement ou que la licence de brevet ait été accordée avant le 28 mars 2007. Rien dans cette Licence ne devrait être interprété comme devant exclure ou limiter toute licence implicite ou d’autres moyens de défense à une infraction qui vous seraient autrement disponible selon la loi applicable relative aux brevets. Article 12. Non abandon de la liberté des autres. Si des conditions vous sont imposées (que ce soit par décision judiciaire, par un accord ou autrement) qui contredisent les conditions de cette Licence, elles ne vous excusent pas des conditions de cette Licence. Si vous ne pouvez pas acheminer un Travail Couvert de façon à satisfaire simulténément vos obligations suivant cette Licence et toutes autres obligations pertinentes, alors en conséquence vous ne pouvez pas du tout l’acheminer. Par exemple, si vous avez un accord sur des termes qui vous obligent à collecter pour le réacheminement des royalties depuis ceux à qui vous acheminez le Programme, la seule façon qui puisse vous permettre de satisfaire à la fois à ces termes et ceux de cette Licence sera de vous abstenir entièrement d’acheminer le Programme. Article 13. Utilisation avec la Licence Générale Publique Affero GNU. Nonobstant toute autre clause de cette Licence, vous avez la permission de lier ou combiner tout Travail Couvert avec un travail placé sous la version 3 de la Licence Générale Publique GNU Affero (“GNU Affero General Public License”) en un seul travail combiné, et d’acheminer le travail résultant. Les termes de cette Licence continueront à s’appliquer à la partie formant un Travail Couvert, mais les obligations spéciales de la Licence Générale Publique GNU Affero, article 13, concernant l’interaction à travers un réseau s’appliqueront à la combinaison en tant que telle. Article 14. Versions révisées de cette License. La Free Software Foundation peut publier des versions révisées et/ou nouvelles de la Licence Publique Générale GNU (“GNU General Public License”) de temps en temps. De telles version nouvelles resteront similaires dans l’esprit avec la présente version, mais peuvent différer dans le détail afin de traiter de nouveaux problèmes ou préoccupations. Chaque version reçoit un numéro de version distinctif. Si le Programme indique qu’une version spécifique de la Licence Publique Générale GNU « ou toute version ultérieure » (“or any later version”) s’applique à celui-ci, vous avez le choix de suivre soit les termes et conditions de cette version numérotée, soit ceux de n’importe quelle version publiée ultérieurement par la Free Software Foundation. Si le Programme n’indique pas une version spécifique de la Licence Publique Générale GNU, vous pouvez choisir l’une quelconque des versions qui ont été publiées par la Free Software Foundation. Si le Programme spécifie qu’un intermédiaire peut décider quelles versions futures de la Licence Générale Publique GNU peut être utilisée, la déclaration publique d’acceptation d’une version par cet intermédiaire vous autorise à choisir cette version pour le Programme. Des versions ultérieures de la licence peuvent vous donner des permissions additionelles ou différentes. Cependant aucune obligation additionelle n’est imposée à l’un des auteurs ou titulaires de Droit d’Auteur du fait de votre choix de suivre une version ultérieure. Article 15. Déclaration d’absence de garantie. IL N’Y A AUCUNE GARANTIE POUR LE PROGRAMME, DANS LES LIMITES PERMISES PAR LA LOI APPLICABLE. À MOINS QUE CELA NE SOIT ÉTABLI DIFFÉREMMENT PAR ÉCRIT, LES PROPRIÉTAIRES DE DROITS ET/OU LES AUTRES PARTIES FOURNISSENT LE PROGRAMME « EN L’ÉTAT » SANS GARANTIE D’AUCUNE SORTE, QU’ELLE SOIT EXPRIMÉE OU IMPLICITE, CECI COMPRENANT, SANS SE LIMITER À CELLES-CI, LES GARANTIES IMPLICITES DE COMMERCIALISABILITÉ ET D’ADÉQUATION À UN OBJECTIF PARTICULIER. VOUS ASSUMEZ LE RISQUE ENTIER CONCERNANT LA QUALITÉ ET LES PERFORMANCES DU PROGRAMME. DANS L’ÉVENTUALITÉ OÙ LE PROGRAMME S’AVÉRERAIT DÉFECTUEUX, VOUS ASSUMEZ LES COÛTS DE TOUS LES SERVICES, RÉPARATIONS OU CORRECTIONS NÉCESSAIRES. Article 16. Limitation de responsabilité. EN AUCUNE AUTRE CIRCONSTANCE QUE CELLES REQUISES PAR LA LOI APPLICABLE OU ACCORDÉES PAR ÉCRIT, UN TITULAIRE DE DROITS SUR LE PROGRAMME, OU TOUT AUTRE PARTIE QUI MODIFIE OU ACHEMINE LE PROGRAMME COMME PERMIS CI-DESSUS, NE PEUT ÊTRE TENU POUR RESPONSABLE ENVERS VOUS POUR LES DOMMAGES, INCLUANT TOUT DOMMAGE GÉNÉRAL, SPÉCIAL, ACCIDENTEL OU INDUIT SURVENANT PAR SUITE DE L’UTILISATION OU DE L’INCAPACITÉ D’UTILISER LE PROGRAMME (Y COMPRIS, SANS SE LIMITER À CELLES-CI, LA PERTE DE DONNÉES OU L’INEXACTITUDE DES DONNÉES RETOURNÉES OU LES PERTES SUBIES PAR VOUS OU DES PARTIES TIERCES OU L’INCAPACITÉ DU PROGRAMME À FONCTIONNER AVEC TOUT AUTRE PROGRAMME), MÊME SI UN TEL TITULAIRE OU TOUTE AUTRE PARTIE A ÉTÉ AVISÉ DE LA POSSIBILITÉ DE TELS DOMMAGES. Article 17. Interprétation des sections 15 et 16. Si la déclaration d’absence de garantie et la limitation de responsabilité fournies ci-dessus ne peuvent prendre effet localement selon leurs termes, les cours de justice qui les examinent doivent appliquer la législation locale qui approche au plus près possible une levée absolue de toute responsabilité civile liée au Programme, à moins qu’une garantie ou assumation de responsabilité accompagne une copie du Programme en échange d’un paiement. FIN DES TERMES ET CONDITIONS. _______________________________________________________________________ Comment appliquer ces termes à vos nouveaux programmes Si vous développez un nouveau programme et voulez qu’il soit le plus possible utilisable par le public, la meilleure façon d’y parvenir et d’en faire un logiciel libre que chacun peut redistribuer et changer suivant ces termes-ci. Pour appliquer ces termes, attachez les notices suivantes au programme. Il est plus sûr de les attacher au début de chacun des fichiers sources afin de transporter de façon la plus effective possible l’exclusion de garantie ; et chaque fichier devrait comporter au moins la ligne de réservation de droit (“copyright”) et une indication permettant de savoir où la notice complète peut être trouvée : <une ligne donnant le nom du programme et une brève idée de ce qu’il fait.> Copyright (C) <année> <nom de l’auteur> — Tous droits réservés. Ce programme est un logiciel libre ; vous pouvez le redistribuer ou le modifier suivant les termes de la “GNU General Public License” telle que publiée par la Free Software Foundation : soit la version 3 de cette licence, soit (à votre gré) toute version ultérieure. Ce programme est distribué dans l’espoir qu’il vous sera utile, mais SANS AUCUNE GARANTIE : sans même la garantie implicite de COMMERCIALISABILITÉ ni d’ADÉQUATION À UN OBJECTIF PARTICULIER. Consultez la Licence Générale Publique GNU pour plus de détails. Vous devriez avoir reçu une copie de la Licence Générale Publique GNU avec ce programme ; si ce n’est pas le cas, consultez : <http://www.gnu.org/licenses/>. Ajoutez également les informations permettant de vous contacter par courrier électronique ou postal. Si le programme produit une interaction sur un terminal, faites lui afficher une courte notice comme celle-ci lors de son démarrage en mode interactif : <programme> Copyright (C) <année> <nom de l’auteur> Ce programme vient SANS ABSOLUMENT AUCUNE GARANTIE ; taper “affiche g” pour les détails. Ceci est un logiciel libre et vous êtes invité à le redistribuer suivant certaines conditions ; taper “affiche c” pour les détails. Les commandes hypothétiques “affiche g” and “affiche c” devrait afficher les parties appropriées de la Licence Générale Publique. Bien sûr, les commandes de votre programme peuvent être différentes ; pour une interface graphique, vous pourriez utiliser une « boîte À propos. » Vous devriez également obtenir de votre employeur (si vous travaillez en tant que programmeur) ou de votre école un « renoncement aux droits de propriété » pour ce programme, si nécessaire. Pour plus d’informations à ce sujet, et comment appliquer la GPL GNU, consultez <http://www.gnu.org/licenses/>. La Licence Générale Publique GNU ne permet pas d’incorporer votre programme dans des programmes propriétaires. Si votre programme est une bibliothèque de sous-routines, vous pourriez considérer qu’il serait plus utile de permettre de lier des applications propriétaires avec la bibliothèque. Si c’est ce que vous voulez faire, utilisez la Licence Générale Publique Limitée GNU au lieu de cette Licence ; mais d’abord, veuillez lire <http://www.gnu.org/philosophy/why-not-lgpl.html>. _______________________________________________________________________ |
Added LICENSE.txt version [040444d592].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 | GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: <program> Copyright (C) <year> <name of author> This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>. |
Added README.txt version [43cb1be5f3].
> > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | = GRAMMALECTE = Grammar checker By Olivier R. Website: http://grammalecte.net License: GPL 3 -- http://www.gnu.org/copyleft/gpl.html Grammalecte is a fork of Lightproof from László Németh (nemeth /at/ numbertext /dot/ org) http://cgit.freedesktop.org/libreoffice/lightproof/ Required : Python 3.3 |
Added bottle.py version [edaaf360b0].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 | #!/usr/bin/env python # -*- coding: utf-8 -*- """ Bottle is a fast and simple micro-framework for small web applications. It offers request dispatching (Routes) with url parameter support, templates, a built-in HTTP Server and adapters for many third party WSGI/HTTP-server and template engines - all in a single file and with no dependencies other than the Python Standard Library. Homepage and documentation: http://bottlepy.org/ Copyright (c) 2013, Marcel Hellkamp. License: MIT (see LICENSE for details) """ from __future__ import with_statement __author__ = 'Marcel Hellkamp' __version__ = '0.12.9' __license__ = 'MIT' # The gevent server adapter needs to patch some modules before they are imported # This is why we parse the commandline parameters here but handle them later if __name__ == '__main__': from optparse import OptionParser _cmd_parser = OptionParser(usage="usage: %prog [options] package.module:app") _opt = _cmd_parser.add_option _opt("--version", action="store_true", help="show version number.") _opt("-b", "--bind", metavar="ADDRESS", help="bind socket to ADDRESS.") _opt("-s", "--server", default='wsgiref', help="use SERVER as backend.") _opt("-p", "--plugin", action="append", help="install additional plugin/s.") _opt("--debug", action="store_true", help="start server in debug mode.") _opt("--reload", action="store_true", help="auto-reload on file changes.") _cmd_options, _cmd_args = _cmd_parser.parse_args() if _cmd_options.server and _cmd_options.server.startswith('gevent'): import gevent.monkey; gevent.monkey.patch_all() import base64, cgi, email.utils, functools, hmac, imp, itertools, mimetypes,\ os, re, subprocess, sys, tempfile, threading, time, warnings from datetime import date as datedate, datetime, timedelta from tempfile import TemporaryFile from traceback import format_exc, print_exc from inspect import getargspec from unicodedata import normalize try: from simplejson import dumps as json_dumps, loads as json_lds except ImportError: # pragma: no cover try: from json import dumps as json_dumps, loads as json_lds except ImportError: try: from django.utils.simplejson import dumps as json_dumps, loads as json_lds except ImportError: def json_dumps(data): raise ImportError("JSON support requires Python 2.6 or simplejson.") json_lds = json_dumps # We now try to fix 2.5/2.6/3.1/3.2 incompatibilities. # It ain't pretty but it works... Sorry for the mess. py = sys.version_info py3k = py >= (3, 0, 0) py25 = py < (2, 6, 0) py31 = (3, 1, 0) <= py < (3, 2, 0) # Workaround for the missing "as" keyword in py3k. def _e(): return sys.exc_info()[1] # Workaround for the "print is a keyword/function" Python 2/3 dilemma # and a fallback for mod_wsgi (resticts stdout/err attribute access) try: _stdout, _stderr = sys.stdout.write, sys.stderr.write except IOError: _stdout = lambda x: sys.stdout.write(x) _stderr = lambda x: sys.stderr.write(x) # Lots of stdlib and builtin differences. if py3k: import http.client as httplib import _thread as thread from urllib.parse import urljoin, SplitResult as UrlSplitResult from urllib.parse import urlencode, quote as urlquote, unquote as urlunquote urlunquote = functools.partial(urlunquote, encoding='latin1') from http.cookies import SimpleCookie from collections import MutableMapping as DictMixin import pickle from io import BytesIO from configparser import ConfigParser basestring = str unicode = str json_loads = lambda s: json_lds(touni(s)) callable = lambda x: hasattr(x, '__call__') imap = map def _raise(*a): raise a[0](a[1]).with_traceback(a[2]) else: # 2.x import httplib import thread from urlparse import urljoin, SplitResult as UrlSplitResult from urllib import urlencode, quote as urlquote, unquote as urlunquote from Cookie import SimpleCookie from itertools import imap import cPickle as pickle from StringIO import StringIO as BytesIO from ConfigParser import SafeConfigParser as ConfigParser if py25: msg = "Python 2.5 support may be dropped in future versions of Bottle." warnings.warn(msg, DeprecationWarning) from UserDict import DictMixin def next(it): return it.next() bytes = str else: # 2.6, 2.7 from collections import MutableMapping as DictMixin unicode = unicode json_loads = json_lds eval(compile('def _raise(*a): raise a[0], a[1], a[2]', '<py3fix>', 'exec')) # Some helpers for string/byte handling def tob(s, enc='utf8'): return s.encode(enc) if isinstance(s, unicode) else bytes(s) def touni(s, enc='utf8', err='strict'): return s.decode(enc, err) if isinstance(s, bytes) else unicode(s) tonat = touni if py3k else tob # 3.2 fixes cgi.FieldStorage to accept bytes (which makes a lot of sense). # 3.1 needs a workaround. if py31: from io import TextIOWrapper class NCTextIOWrapper(TextIOWrapper): def close(self): pass # Keep wrapped buffer open. # A bug in functools causes it to break if the wrapper is an instance method def update_wrapper(wrapper, wrapped, *a, **ka): try: functools.update_wrapper(wrapper, wrapped, *a, **ka) except AttributeError: pass # These helpers are used at module level and need to be defined first. # And yes, I know PEP-8, but sometimes a lower-case classname makes more sense. def depr(message, hard=False): warnings.warn(message, DeprecationWarning, stacklevel=3) def makelist(data): # This is just to handy if isinstance(data, (tuple, list, set, dict)): return list(data) elif data: return [data] else: return [] class DictProperty(object): ''' Property that maps to a key in a local dict-like attribute. ''' def __init__(self, attr, key=None, read_only=False): self.attr, self.key, self.read_only = attr, key, read_only def __call__(self, func): functools.update_wrapper(self, func, updated=[]) self.getter, self.key = func, self.key or func.__name__ return self def __get__(self, obj, cls): if obj is None: return self key, storage = self.key, getattr(obj, self.attr) if key not in storage: storage[key] = self.getter(obj) return storage[key] def __set__(self, obj, value): if self.read_only: raise AttributeError("Read-Only property.") getattr(obj, self.attr)[self.key] = value def __delete__(self, obj): if self.read_only: raise AttributeError("Read-Only property.") del getattr(obj, self.attr)[self.key] class cached_property(object): ''' A property that is only computed once per instance and then replaces itself with an ordinary attribute. Deleting the attribute resets the property. ''' def __init__(self, func): self.__doc__ = getattr(func, '__doc__') self.func = func def __get__(self, obj, cls): if obj is None: return self value = obj.__dict__[self.func.__name__] = self.func(obj) return value class lazy_attribute(object): ''' A property that caches itself to the class object. ''' def __init__(self, func): functools.update_wrapper(self, func, updated=[]) self.getter = func def __get__(self, obj, cls): value = self.getter(cls) setattr(cls, self.__name__, value) return value ############################################################################### # Exceptions and Events ######################################################## ############################################################################### class BottleException(Exception): """ A base class for exceptions used by bottle. """ pass ############################################################################### # Routing ###################################################################### ############################################################################### class RouteError(BottleException): """ This is a base class for all routing related exceptions """ class RouteReset(BottleException): """ If raised by a plugin or request handler, the route is reset and all plugins are re-applied. """ class RouterUnknownModeError(RouteError): pass class RouteSyntaxError(RouteError): """ The route parser found something not supported by this router. """ class RouteBuildError(RouteError): """ The route could not be built. """ def _re_flatten(p): ''' Turn all capturing groups in a regular expression pattern into non-capturing groups. ''' if '(' not in p: return p return re.sub(r'(\\*)(\(\?P<[^>]+>|\((?!\?))', lambda m: m.group(0) if len(m.group(1)) % 2 else m.group(1) + '(?:', p) class Router(object): ''' A Router is an ordered collection of route->target pairs. It is used to efficiently match WSGI requests against a number of routes and return the first target that satisfies the request. The target may be anything, usually a string, ID or callable object. A route consists of a path-rule and a HTTP method. The path-rule is either a static path (e.g. `/contact`) or a dynamic path that contains wildcards (e.g. `/wiki/<page>`). The wildcard syntax and details on the matching order are described in docs:`routing`. ''' default_pattern = '[^/]+' default_filter = 're' #: The current CPython regexp implementation does not allow more #: than 99 matching groups per regular expression. _MAX_GROUPS_PER_PATTERN = 99 def __init__(self, strict=False): self.rules = [] # All rules in order self._groups = {} # index of regexes to find them in dyna_routes self.builder = {} # Data structure for the url builder self.static = {} # Search structure for static routes self.dyna_routes = {} self.dyna_regexes = {} # Search structure for dynamic routes #: If true, static routes are no longer checked first. self.strict_order = strict self.filters = { 're': lambda conf: (_re_flatten(conf or self.default_pattern), None, None), 'int': lambda conf: (r'-?\d+', int, lambda x: str(int(x))), 'float': lambda conf: (r'-?[\d.]+', float, lambda x: str(float(x))), 'path': lambda conf: (r'.+?', None, None)} def add_filter(self, name, func): ''' Add a filter. The provided function is called with the configuration string as parameter and must return a (regexp, to_python, to_url) tuple. The first element is a string, the last two are callables or None. ''' self.filters[name] = func rule_syntax = re.compile('(\\\\*)'\ '(?:(?::([a-zA-Z_][a-zA-Z_0-9]*)?()(?:#(.*?)#)?)'\ '|(?:<([a-zA-Z_][a-zA-Z_0-9]*)?(?::([a-zA-Z_]*)'\ '(?::((?:\\\\.|[^\\\\>]+)+)?)?)?>))') def _itertokens(self, rule): offset, prefix = 0, '' for match in self.rule_syntax.finditer(rule): prefix += rule[offset:match.start()] g = match.groups() if len(g[0])%2: # Escaped wildcard prefix += match.group(0)[len(g[0]):] offset = match.end() continue if prefix: yield prefix, None, None name, filtr, conf = g[4:7] if g[2] is None else g[1:4] yield name, filtr or 'default', conf or None offset, prefix = match.end(), '' if offset <= len(rule) or prefix: yield prefix+rule[offset:], None, None def add(self, rule, method, target, name=None): ''' Add a new rule or replace the target for an existing rule. ''' anons = 0 # Number of anonymous wildcards found keys = [] # Names of keys pattern = '' # Regular expression pattern with named groups filters = [] # Lists of wildcard input filters builder = [] # Data structure for the URL builder is_static = True for key, mode, conf in self._itertokens(rule): if mode: is_static = False if mode == 'default': mode = self.default_filter mask, in_filter, out_filter = self.filters[mode](conf) if not key: pattern += '(?:%s)' % mask key = 'anon%d' % anons anons += 1 else: pattern += '(?P<%s>%s)' % (key, mask) keys.append(key) if in_filter: filters.append((key, in_filter)) builder.append((key, out_filter or str)) elif key: pattern += re.escape(key) builder.append((None, key)) self.builder[rule] = builder if name: self.builder[name] = builder if is_static and not self.strict_order: self.static.setdefault(method, {}) self.static[method][self.build(rule)] = (target, None) return try: re_pattern = re.compile('^(%s)$' % pattern) re_match = re_pattern.match except re.error: raise RouteSyntaxError("Could not add Route: %s (%s)" % (rule, _e())) if filters: def getargs(path): url_args = re_match(path).groupdict() for name, wildcard_filter in filters: try: url_args[name] = wildcard_filter(url_args[name]) except ValueError: raise HTTPError(400, 'Path has wrong format.') return url_args elif re_pattern.groupindex: def getargs(path): return re_match(path).groupdict() else: getargs = None flatpat = _re_flatten(pattern) whole_rule = (rule, flatpat, target, getargs) if (flatpat, method) in self._groups: if DEBUG: msg = 'Route <%s %s> overwrites a previously defined route' warnings.warn(msg % (method, rule), RuntimeWarning) self.dyna_routes[method][self._groups[flatpat, method]] = whole_rule else: self.dyna_routes.setdefault(method, []).append(whole_rule) self._groups[flatpat, method] = len(self.dyna_routes[method]) - 1 self._compile(method) def _compile(self, method): all_rules = self.dyna_routes[method] comborules = self.dyna_regexes[method] = [] maxgroups = self._MAX_GROUPS_PER_PATTERN for x in range(0, len(all_rules), maxgroups): some = all_rules[x:x+maxgroups] combined = (flatpat for (_, flatpat, _, _) in some) combined = '|'.join('(^%s$)' % flatpat for flatpat in combined) combined = re.compile(combined).match rules = [(target, getargs) for (_, _, target, getargs) in some] comborules.append((combined, rules)) def build(self, _name, *anons, **query): ''' Build an URL by filling the wildcards in a rule. ''' builder = self.builder.get(_name) if not builder: raise RouteBuildError("No route with that name.", _name) try: for i, value in enumerate(anons): query['anon%d'%i] = value url = ''.join([f(query.pop(n)) if n else f for (n,f) in builder]) return url if not query else url+'?'+urlencode(query) except KeyError: raise RouteBuildError('Missing URL argument: %r' % _e().args[0]) def match(self, environ): ''' Return a (target, url_agrs) tuple or raise HTTPError(400/404/405). ''' verb = environ['REQUEST_METHOD'].upper() path = environ['PATH_INFO'] or '/' target = None if verb == 'HEAD': methods = ['PROXY', verb, 'GET', 'ANY'] else: methods = ['PROXY', verb, 'ANY'] for method in methods: if method in self.static and path in self.static[method]: target, getargs = self.static[method][path] return target, getargs(path) if getargs else {} elif method in self.dyna_regexes: for combined, rules in self.dyna_regexes[method]: match = combined(path) if match: target, getargs = rules[match.lastindex - 1] return target, getargs(path) if getargs else {} # No matching route found. Collect alternative methods for 405 response allowed = set([]) nocheck = set(methods) for method in set(self.static) - nocheck: if path in self.static[method]: allowed.add(verb) for method in set(self.dyna_regexes) - allowed - nocheck: for combined, rules in self.dyna_regexes[method]: match = combined(path) if match: allowed.add(method) if allowed: allow_header = ",".join(sorted(allowed)) raise HTTPError(405, "Method not allowed.", Allow=allow_header) # No matching route and no alternative method found. We give up raise HTTPError(404, "Not found: " + repr(path)) class Route(object): ''' This class wraps a route callback along with route specific metadata and configuration and applies Plugins on demand. It is also responsible for turing an URL path rule into a regular expression usable by the Router. ''' def __init__(self, app, rule, method, callback, name=None, plugins=None, skiplist=None, **config): #: The application this route is installed to. self.app = app #: The path-rule string (e.g. ``/wiki/:page``). self.rule = rule #: The HTTP method as a string (e.g. ``GET``). self.method = method #: The original callback with no plugins applied. Useful for introspection. self.callback = callback #: The name of the route (if specified) or ``None``. self.name = name or None #: A list of route-specific plugins (see :meth:`Bottle.route`). self.plugins = plugins or [] #: A list of plugins to not apply to this route (see :meth:`Bottle.route`). self.skiplist = skiplist or [] #: Additional keyword arguments passed to the :meth:`Bottle.route` #: decorator are stored in this dictionary. Used for route-specific #: plugin configuration and meta-data. self.config = ConfigDict().load_dict(config, make_namespaces=True) def __call__(self, *a, **ka): depr("Some APIs changed to return Route() instances instead of"\ " callables. Make sure to use the Route.call method and not to"\ " call Route instances directly.") #0.12 return self.call(*a, **ka) @cached_property def call(self): ''' The route callback with all plugins applied. This property is created on demand and then cached to speed up subsequent requests.''' return self._make_callback() def reset(self): ''' Forget any cached values. The next time :attr:`call` is accessed, all plugins are re-applied. ''' self.__dict__.pop('call', None) def prepare(self): ''' Do all on-demand work immediately (useful for debugging).''' self.call @property def _context(self): depr('Switch to Plugin API v2 and access the Route object directly.') #0.12 return dict(rule=self.rule, method=self.method, callback=self.callback, name=self.name, app=self.app, config=self.config, apply=self.plugins, skip=self.skiplist) def all_plugins(self): ''' Yield all Plugins affecting this route. ''' unique = set() for p in reversed(self.app.plugins + self.plugins): if True in self.skiplist: break name = getattr(p, 'name', False) if name and (name in self.skiplist or name in unique): continue if p in self.skiplist or type(p) in self.skiplist: continue if name: unique.add(name) yield p def _make_callback(self): callback = self.callback for plugin in self.all_plugins(): try: if hasattr(plugin, 'apply'): api = getattr(plugin, 'api', 1) context = self if api > 1 else self._context callback = plugin.apply(callback, context) else: callback = plugin(callback) except RouteReset: # Try again with changed configuration. return self._make_callback() if not callback is self.callback: update_wrapper(callback, self.callback) return callback def get_undecorated_callback(self): ''' Return the callback. If the callback is a decorated function, try to recover the original function. ''' func = self.callback func = getattr(func, '__func__' if py3k else 'im_func', func) closure_attr = '__closure__' if py3k else 'func_closure' while hasattr(func, closure_attr) and getattr(func, closure_attr): func = getattr(func, closure_attr)[0].cell_contents return func def get_callback_args(self): ''' Return a list of argument names the callback (most likely) accepts as keyword arguments. If the callback is a decorated function, try to recover the original function before inspection. ''' return getargspec(self.get_undecorated_callback())[0] def get_config(self, key, default=None): ''' Lookup a config field and return its value, first checking the route.config, then route.app.config.''' for conf in (self.config, self.app.conifg): if key in conf: return conf[key] return default def __repr__(self): cb = self.get_undecorated_callback() return '<%s %r %r>' % (self.method, self.rule, cb) ############################################################################### # Application Object ########################################################### ############################################################################### class Bottle(object): """ Each Bottle object represents a single, distinct web application and consists of routes, callbacks, plugins, resources and configuration. Instances are callable WSGI applications. :param catchall: If true (default), handle all exceptions. Turn off to let debugging middleware handle exceptions. """ def __init__(self, catchall=True, autojson=True): #: A :class:`ConfigDict` for app specific configuration. self.config = ConfigDict() self.config._on_change = functools.partial(self.trigger_hook, 'config') self.config.meta_set('autojson', 'validate', bool) self.config.meta_set('catchall', 'validate', bool) self.config['catchall'] = catchall self.config['autojson'] = autojson #: A :class:`ResourceManager` for application files self.resources = ResourceManager() self.routes = [] # List of installed :class:`Route` instances. self.router = Router() # Maps requests to :class:`Route` instances. self.error_handler = {} # Core plugins self.plugins = [] # List of installed plugins. if self.config['autojson']: self.install(JSONPlugin()) self.install(TemplatePlugin()) #: If true, most exceptions are caught and returned as :exc:`HTTPError` catchall = DictProperty('config', 'catchall') __hook_names = 'before_request', 'after_request', 'app_reset', 'config' __hook_reversed = 'after_request' @cached_property def _hooks(self): return dict((name, []) for name in self.__hook_names) def add_hook(self, name, func): ''' Attach a callback to a hook. Three hooks are currently implemented: before_request Executed once before each request. The request context is available, but no routing has happened yet. after_request Executed once after each request regardless of its outcome. app_reset Called whenever :meth:`Bottle.reset` is called. ''' if name in self.__hook_reversed: self._hooks[name].insert(0, func) else: self._hooks[name].append(func) def remove_hook(self, name, func): ''' Remove a callback from a hook. ''' if name in self._hooks and func in self._hooks[name]: self._hooks[name].remove(func) return True def trigger_hook(self, __name, *args, **kwargs): ''' Trigger a hook and return a list of results. ''' return [hook(*args, **kwargs) for hook in self._hooks[__name][:]] def hook(self, name): """ Return a decorator that attaches a callback to a hook. See :meth:`add_hook` for details.""" def decorator(func): self.add_hook(name, func) return func return decorator def mount(self, prefix, app, **options): ''' Mount an application (:class:`Bottle` or plain WSGI) to a specific URL prefix. Example:: root_app.mount('/admin/', admin_app) :param prefix: path prefix or `mount-point`. If it ends in a slash, that slash is mandatory. :param app: an instance of :class:`Bottle` or a WSGI application. All other parameters are passed to the underlying :meth:`route` call. ''' if isinstance(app, basestring): depr('Parameter order of Bottle.mount() changed.', True) # 0.10 segments = [p for p in prefix.split('/') if p] if not segments: raise ValueError('Empty path prefix.') path_depth = len(segments) def mountpoint_wrapper(): try: request.path_shift(path_depth) rs = HTTPResponse([]) def start_response(status, headerlist, exc_info=None): if exc_info: try: _raise(*exc_info) finally: exc_info = None rs.status = status for name, value in headerlist: rs.add_header(name, value) return rs.body.append body = app(request.environ, start_response) if body and rs.body: body = itertools.chain(rs.body, body) rs.body = body or rs.body return rs finally: request.path_shift(-path_depth) options.setdefault('skip', True) options.setdefault('method', 'PROXY') options.setdefault('mountpoint', {'prefix': prefix, 'target': app}) options['callback'] = mountpoint_wrapper self.route('/%s/<:re:.*>' % '/'.join(segments), **options) if not prefix.endswith('/'): self.route('/' + '/'.join(segments), **options) def merge(self, routes): ''' Merge the routes of another :class:`Bottle` application or a list of :class:`Route` objects into this application. The routes keep their 'owner', meaning that the :data:`Route.app` attribute is not changed. ''' if isinstance(routes, Bottle): routes = routes.routes for route in routes: self.add_route(route) def install(self, plugin): ''' Add a plugin to the list of plugins and prepare it for being applied to all routes of this application. A plugin may be a simple decorator or an object that implements the :class:`Plugin` API. ''' if hasattr(plugin, 'setup'): plugin.setup(self) if not callable(plugin) and not hasattr(plugin, 'apply'): raise TypeError("Plugins must be callable or implement .apply()") self.plugins.append(plugin) self.reset() return plugin def uninstall(self, plugin): ''' Uninstall plugins. Pass an instance to remove a specific plugin, a type object to remove all plugins that match that type, a string to remove all plugins with a matching ``name`` attribute or ``True`` to remove all plugins. Return the list of removed plugins. ''' removed, remove = [], plugin for i, plugin in list(enumerate(self.plugins))[::-1]: if remove is True or remove is plugin or remove is type(plugin) \ or getattr(plugin, 'name', True) == remove: removed.append(plugin) del self.plugins[i] if hasattr(plugin, 'close'): plugin.close() if removed: self.reset() return removed def reset(self, route=None): ''' Reset all routes (force plugins to be re-applied) and clear all caches. If an ID or route object is given, only that specific route is affected. ''' if route is None: routes = self.routes elif isinstance(route, Route): routes = [route] else: routes = [self.routes[route]] for route in routes: route.reset() if DEBUG: for route in routes: route.prepare() self.trigger_hook('app_reset') def close(self): ''' Close the application and all installed plugins. ''' for plugin in self.plugins: if hasattr(plugin, 'close'): plugin.close() self.stopped = True def run(self, **kwargs): ''' Calls :func:`run` with the same parameters. ''' run(self, **kwargs) def match(self, environ): """ Search for a matching route and return a (:class:`Route` , urlargs) tuple. The second value is a dictionary with parameters extracted from the URL. Raise :exc:`HTTPError` (404/405) on a non-match.""" return self.router.match(environ) def get_url(self, routename, **kargs): """ Return a string that matches a named route """ scriptname = request.environ.get('SCRIPT_NAME', '').strip('/') + '/' location = self.router.build(routename, **kargs).lstrip('/') return urljoin(urljoin('/', scriptname), location) def add_route(self, route): ''' Add a route object, but do not change the :data:`Route.app` attribute.''' self.routes.append(route) self.router.add(route.rule, route.method, route, name=route.name) if DEBUG: route.prepare() def route(self, path=None, method='GET', callback=None, name=None, apply=None, skip=None, **config): """ A decorator to bind a function to a request URL. Example:: @app.route('/hello/:name') def hello(name): return 'Hello %s' % name The ``:name`` part is a wildcard. See :class:`Router` for syntax details. :param path: Request path or a list of paths to listen to. If no path is specified, it is automatically generated from the signature of the function. :param method: HTTP method (`GET`, `POST`, `PUT`, ...) or a list of methods to listen to. (default: `GET`) :param callback: An optional shortcut to avoid the decorator syntax. ``route(..., callback=func)`` equals ``route(...)(func)`` :param name: The name for this route. (default: None) :param apply: A decorator or plugin or a list of plugins. These are applied to the route callback in addition to installed plugins. :param skip: A list of plugins, plugin classes or names. Matching plugins are not installed to this route. ``True`` skips all. Any additional keyword arguments are stored as route-specific configuration and passed to plugins (see :meth:`Plugin.apply`). """ if callable(path): path, callback = None, path plugins = makelist(apply) skiplist = makelist(skip) def decorator(callback): # TODO: Documentation and tests if isinstance(callback, basestring): callback = load(callback) for rule in makelist(path) or yieldroutes(callback): for verb in makelist(method): verb = verb.upper() route = Route(self, rule, verb, callback, name=name, plugins=plugins, skiplist=skiplist, **config) self.add_route(route) return callback return decorator(callback) if callback else decorator def get(self, path=None, method='GET', **options): """ Equals :meth:`route`. """ return self.route(path, method, **options) def post(self, path=None, method='POST', **options): """ Equals :meth:`route` with a ``POST`` method parameter. """ return self.route(path, method, **options) def put(self, path=None, method='PUT', **options): """ Equals :meth:`route` with a ``PUT`` method parameter. """ return self.route(path, method, **options) def delete(self, path=None, method='DELETE', **options): """ Equals :meth:`route` with a ``DELETE`` method parameter. """ return self.route(path, method, **options) def error(self, code=500): """ Decorator: Register an output handler for a HTTP error code""" def wrapper(handler): self.error_handler[int(code)] = handler return handler return wrapper def default_error_handler(self, res): return tob(template(ERROR_PAGE_TEMPLATE, e=res)) def _handle(self, environ): path = environ['bottle.raw_path'] = environ['PATH_INFO'] if py3k: try: environ['PATH_INFO'] = path.encode('latin1').decode('utf8') except UnicodeError: return HTTPError(400, 'Invalid path string. Expected UTF-8') try: environ['bottle.app'] = self request.bind(environ) response.bind() try: self.trigger_hook('before_request') route, args = self.router.match(environ) environ['route.handle'] = route environ['bottle.route'] = route environ['route.url_args'] = args return route.call(**args) finally: self.trigger_hook('after_request') except HTTPResponse: return _e() except RouteReset: route.reset() return self._handle(environ) except (KeyboardInterrupt, SystemExit, MemoryError): raise except Exception: if not self.catchall: raise stacktrace = format_exc() environ['wsgi.errors'].write(stacktrace) return HTTPError(500, "Internal Server Error", _e(), stacktrace) def _cast(self, out, peek=None): """ Try to convert the parameter into something WSGI compatible and set correct HTTP headers when possible. Support: False, str, unicode, dict, HTTPResponse, HTTPError, file-like, iterable of strings and iterable of unicodes """ # Empty output is done here if not out: if 'Content-Length' not in response: response['Content-Length'] = 0 return [] # Join lists of byte or unicode strings. Mixed lists are NOT supported if isinstance(out, (tuple, list))\ and isinstance(out[0], (bytes, unicode)): out = out[0][0:0].join(out) # b'abc'[0:0] -> b'' # Encode unicode strings if isinstance(out, unicode): out = out.encode(response.charset) # Byte Strings are just returned if isinstance(out, bytes): if 'Content-Length' not in response: response['Content-Length'] = len(out) return [out] # HTTPError or HTTPException (recursive, because they may wrap anything) # TODO: Handle these explicitly in handle() or make them iterable. if isinstance(out, HTTPError): out.apply(response) out = self.error_handler.get(out.status_code, self.default_error_handler)(out) return self._cast(out) if isinstance(out, HTTPResponse): out.apply(response) return self._cast(out.body) # File-like objects. if hasattr(out, 'read'): if 'wsgi.file_wrapper' in request.environ: return request.environ['wsgi.file_wrapper'](out) elif hasattr(out, 'close') or not hasattr(out, '__iter__'): return WSGIFileWrapper(out) # Handle Iterables. We peek into them to detect their inner type. try: iout = iter(out) first = next(iout) while not first: first = next(iout) except StopIteration: return self._cast('') except HTTPResponse: first = _e() except (KeyboardInterrupt, SystemExit, MemoryError): raise except Exception: if not self.catchall: raise first = HTTPError(500, 'Unhandled exception', _e(), format_exc()) # These are the inner types allowed in iterator or generator objects. if isinstance(first, HTTPResponse): return self._cast(first) elif isinstance(first, bytes): new_iter = itertools.chain([first], iout) elif isinstance(first, unicode): encoder = lambda x: x.encode(response.charset) new_iter = imap(encoder, itertools.chain([first], iout)) else: msg = 'Unsupported response type: %s' % type(first) return self._cast(HTTPError(500, msg)) if hasattr(out, 'close'): new_iter = _closeiter(new_iter, out.close) return new_iter def wsgi(self, environ, start_response): """ The bottle WSGI-interface. """ try: out = self._cast(self._handle(environ)) # rfc2616 section 4.3 if response._status_code in (100, 101, 204, 304)\ or environ['REQUEST_METHOD'] == 'HEAD': if hasattr(out, 'close'): out.close() out = [] start_response(response._status_line, response.headerlist) return out except (KeyboardInterrupt, SystemExit, MemoryError): raise except Exception: if not self.catchall: raise err = '<h1>Critical error while processing request: %s</h1>' \ % html_escape(environ.get('PATH_INFO', '/')) if DEBUG: err += '<h2>Error:</h2>\n<pre>\n%s\n</pre>\n' \ '<h2>Traceback:</h2>\n<pre>\n%s\n</pre>\n' \ % (html_escape(repr(_e())), html_escape(format_exc())) environ['wsgi.errors'].write(err) headers = [('Content-Type', 'text/html; charset=UTF-8')] start_response('500 INTERNAL SERVER ERROR', headers, sys.exc_info()) return [tob(err)] def __call__(self, environ, start_response): ''' Each instance of :class:'Bottle' is a WSGI application. ''' return self.wsgi(environ, start_response) ############################################################################### # HTTP and WSGI Tools ########################################################## ############################################################################### class BaseRequest(object): """ A wrapper for WSGI environment dictionaries that adds a lot of convenient access methods and properties. Most of them are read-only. Adding new attributes to a request actually adds them to the environ dictionary (as 'bottle.request.ext.<name>'). This is the recommended way to store and access request-specific data. """ __slots__ = ('environ') #: Maximum size of memory buffer for :attr:`body` in bytes. MEMFILE_MAX = 102400 def __init__(self, environ=None): """ Wrap a WSGI environ dictionary. """ #: The wrapped WSGI environ dictionary. This is the only real attribute. #: All other attributes actually are read-only properties. self.environ = {} if environ is None else environ self.environ['bottle.request'] = self @DictProperty('environ', 'bottle.app', read_only=True) def app(self): ''' Bottle application handling this request. ''' raise RuntimeError('This request is not connected to an application.') @DictProperty('environ', 'bottle.route', read_only=True) def route(self): """ The bottle :class:`Route` object that matches this request. """ raise RuntimeError('This request is not connected to a route.') @DictProperty('environ', 'route.url_args', read_only=True) def url_args(self): """ The arguments extracted from the URL. """ raise RuntimeError('This request is not connected to a route.') @property def path(self): ''' The value of ``PATH_INFO`` with exactly one prefixed slash (to fix broken clients and avoid the "empty path" edge case). ''' return '/' + self.environ.get('PATH_INFO','').lstrip('/') @property def method(self): ''' The ``REQUEST_METHOD`` value as an uppercase string. ''' return self.environ.get('REQUEST_METHOD', 'GET').upper() @DictProperty('environ', 'bottle.request.headers', read_only=True) def headers(self): ''' A :class:`WSGIHeaderDict` that provides case-insensitive access to HTTP request headers. ''' return WSGIHeaderDict(self.environ) def get_header(self, name, default=None): ''' Return the value of a request header, or a given default value. ''' return self.headers.get(name, default) @DictProperty('environ', 'bottle.request.cookies', read_only=True) def cookies(self): """ Cookies parsed into a :class:`FormsDict`. Signed cookies are NOT decoded. Use :meth:`get_cookie` if you expect signed cookies. """ cookies = SimpleCookie(self.environ.get('HTTP_COOKIE','')).values() return FormsDict((c.key, c.value) for c in cookies) def get_cookie(self, key, default=None, secret=None): """ Return the content of a cookie. To read a `Signed Cookie`, the `secret` must match the one used to create the cookie (see :meth:`BaseResponse.set_cookie`). If anything goes wrong (missing cookie or wrong signature), return a default value. """ value = self.cookies.get(key) if secret and value: dec = cookie_decode(value, secret) # (key, value) tuple or None return dec[1] if dec and dec[0] == key else default return value or default @DictProperty('environ', 'bottle.request.query', read_only=True) def query(self): ''' The :attr:`query_string` parsed into a :class:`FormsDict`. These values are sometimes called "URL arguments" or "GET parameters", but not to be confused with "URL wildcards" as they are provided by the :class:`Router`. ''' get = self.environ['bottle.get'] = FormsDict() pairs = _parse_qsl(self.environ.get('QUERY_STRING', '')) for key, value in pairs: get[key] = value return get @DictProperty('environ', 'bottle.request.forms', read_only=True) def forms(self): """ Form values parsed from an `url-encoded` or `multipart/form-data` encoded POST or PUT request body. The result is returned as a :class:`FormsDict`. All keys and values are strings. File uploads are stored separately in :attr:`files`. """ forms = FormsDict() for name, item in self.POST.allitems(): if not isinstance(item, FileUpload): forms[name] = item return forms @DictProperty('environ', 'bottle.request.params', read_only=True) def params(self): """ A :class:`FormsDict` with the combined values of :attr:`query` and :attr:`forms`. File uploads are stored in :attr:`files`. """ params = FormsDict() for key, value in self.query.allitems(): params[key] = value for key, value in self.forms.allitems(): params[key] = value return params @DictProperty('environ', 'bottle.request.files', read_only=True) def files(self): """ File uploads parsed from `multipart/form-data` encoded POST or PUT request body. The values are instances of :class:`FileUpload`. """ files = FormsDict() for name, item in self.POST.allitems(): if isinstance(item, FileUpload): files[name] = item return files @DictProperty('environ', 'bottle.request.json', read_only=True) def json(self): ''' If the ``Content-Type`` header is ``application/json``, this property holds the parsed content of the request body. Only requests smaller than :attr:`MEMFILE_MAX` are processed to avoid memory exhaustion. ''' ctype = self.environ.get('CONTENT_TYPE', '').lower().split(';')[0] if ctype == 'application/json': b = self._get_body_string() if not b: return None return json_loads(b) return None def _iter_body(self, read, bufsize): maxread = max(0, self.content_length) while maxread: part = read(min(maxread, bufsize)) if not part: break yield part maxread -= len(part) def _iter_chunked(self, read, bufsize): err = HTTPError(400, 'Error while parsing chunked transfer body.') rn, sem, bs = tob('\r\n'), tob(';'), tob('') while True: header = read(1) while header[-2:] != rn: c = read(1) header += c if not c: raise err if len(header) > bufsize: raise err size, _, _ = header.partition(sem) try: maxread = int(tonat(size.strip()), 16) except ValueError: raise err if maxread == 0: break buff = bs while maxread > 0: if not buff: buff = read(min(maxread, bufsize)) part, buff = buff[:maxread], buff[maxread:] if not part: raise err yield part maxread -= len(part) if read(2) != rn: raise err @DictProperty('environ', 'bottle.request.body', read_only=True) def _body(self): body_iter = self._iter_chunked if self.chunked else self._iter_body read_func = self.environ['wsgi.input'].read body, body_size, is_temp_file = BytesIO(), 0, False for part in body_iter(read_func, self.MEMFILE_MAX): body.write(part) body_size += len(part) if not is_temp_file and body_size > self.MEMFILE_MAX: body, tmp = TemporaryFile(mode='w+b'), body body.write(tmp.getvalue()) del tmp is_temp_file = True self.environ['wsgi.input'] = body body.seek(0) return body def _get_body_string(self): ''' read body until content-length or MEMFILE_MAX into a string. Raise HTTPError(413) on requests that are to large. ''' clen = self.content_length if clen > self.MEMFILE_MAX: raise HTTPError(413, 'Request to large') if clen < 0: clen = self.MEMFILE_MAX + 1 data = self.body.read(clen) if len(data) > self.MEMFILE_MAX: # Fail fast raise HTTPError(413, 'Request to large') return data @property def body(self): """ The HTTP request body as a seek-able file-like object. Depending on :attr:`MEMFILE_MAX`, this is either a temporary file or a :class:`io.BytesIO` instance. Accessing this property for the first time reads and replaces the ``wsgi.input`` environ variable. Subsequent accesses just do a `seek(0)` on the file object. """ self._body.seek(0) return self._body @property def chunked(self): ''' True if Chunked transfer encoding was. ''' return 'chunked' in self.environ.get('HTTP_TRANSFER_ENCODING', '').lower() #: An alias for :attr:`query`. GET = query @DictProperty('environ', 'bottle.request.post', read_only=True) def POST(self): """ The values of :attr:`forms` and :attr:`files` combined into a single :class:`FormsDict`. Values are either strings (form values) or instances of :class:`cgi.FieldStorage` (file uploads). """ post = FormsDict() # We default to application/x-www-form-urlencoded for everything that # is not multipart and take the fast path (also: 3.1 workaround) if not self.content_type.startswith('multipart/'): pairs = _parse_qsl(tonat(self._get_body_string(), 'latin1')) for key, value in pairs: post[key] = value return post safe_env = {'QUERY_STRING':''} # Build a safe environment for cgi for key in ('REQUEST_METHOD', 'CONTENT_TYPE', 'CONTENT_LENGTH'): if key in self.environ: safe_env[key] = self.environ[key] args = dict(fp=self.body, environ=safe_env, keep_blank_values=True) if py31: args['fp'] = NCTextIOWrapper(args['fp'], encoding='utf8', newline='\n') elif py3k: args['encoding'] = 'utf8' data = cgi.FieldStorage(**args) self['_cgi.FieldStorage'] = data #http://bugs.python.org/issue18394#msg207958 data = data.list or [] for item in data: if item.filename: post[item.name] = FileUpload(item.file, item.name, item.filename, item.headers) else: post[item.name] = item.value return post @property def url(self): """ The full request URI including hostname and scheme. If your app lives behind a reverse proxy or load balancer and you get confusing results, make sure that the ``X-Forwarded-Host`` header is set correctly. """ return self.urlparts.geturl() @DictProperty('environ', 'bottle.request.urlparts', read_only=True) def urlparts(self): ''' The :attr:`url` string as an :class:`urlparse.SplitResult` tuple. The tuple contains (scheme, host, path, query_string and fragment), but the fragment is always empty because it is not visible to the server. ''' env = self.environ http = env.get('HTTP_X_FORWARDED_PROTO') or env.get('wsgi.url_scheme', 'http') host = env.get('HTTP_X_FORWARDED_HOST') or env.get('HTTP_HOST') if not host: # HTTP 1.1 requires a Host-header. This is for HTTP/1.0 clients. host = env.get('SERVER_NAME', '127.0.0.1') port = env.get('SERVER_PORT') if port and port != ('80' if http == 'http' else '443'): host += ':' + port path = urlquote(self.fullpath) return UrlSplitResult(http, host, path, env.get('QUERY_STRING'), '') @property def fullpath(self): """ Request path including :attr:`script_name` (if present). """ return urljoin(self.script_name, self.path.lstrip('/')) @property def query_string(self): """ The raw :attr:`query` part of the URL (everything in between ``?`` and ``#``) as a string. """ return self.environ.get('QUERY_STRING', '') @property def script_name(self): ''' The initial portion of the URL's `path` that was removed by a higher level (server or routing middleware) before the application was called. This script path is returned with leading and tailing slashes. ''' script_name = self.environ.get('SCRIPT_NAME', '').strip('/') return '/' + script_name + '/' if script_name else '/' def path_shift(self, shift=1): ''' Shift path segments from :attr:`path` to :attr:`script_name` and vice versa. :param shift: The number of path segments to shift. May be negative to change the shift direction. (default: 1) ''' script = self.environ.get('SCRIPT_NAME','/') self['SCRIPT_NAME'], self['PATH_INFO'] = path_shift(script, self.path, shift) @property def content_length(self): ''' The request body length as an integer. The client is responsible to set this header. Otherwise, the real length of the body is unknown and -1 is returned. In this case, :attr:`body` will be empty. ''' return int(self.environ.get('CONTENT_LENGTH') or -1) @property def content_type(self): ''' The Content-Type header as a lowercase-string (default: empty). ''' return self.environ.get('CONTENT_TYPE', '').lower() @property def is_xhr(self): ''' True if the request was triggered by a XMLHttpRequest. This only works with JavaScript libraries that support the `X-Requested-With` header (most of the popular libraries do). ''' requested_with = self.environ.get('HTTP_X_REQUESTED_WITH','') return requested_with.lower() == 'xmlhttprequest' @property def is_ajax(self): ''' Alias for :attr:`is_xhr`. "Ajax" is not the right term. ''' return self.is_xhr @property def auth(self): """ HTTP authentication data as a (user, password) tuple. This implementation currently supports basic (not digest) authentication only. If the authentication happened at a higher level (e.g. in the front web-server or a middleware), the password field is None, but the user field is looked up from the ``REMOTE_USER`` environ variable. On any errors, None is returned. """ basic = parse_auth(self.environ.get('HTTP_AUTHORIZATION','')) if basic: return basic ruser = self.environ.get('REMOTE_USER') if ruser: return (ruser, None) return None @property def remote_route(self): """ A list of all IPs that were involved in this request, starting with the client IP and followed by zero or more proxies. This does only work if all proxies support the ```X-Forwarded-For`` header. Note that this information can be forged by malicious clients. """ proxy = self.environ.get('HTTP_X_FORWARDED_FOR') if proxy: return [ip.strip() for ip in proxy.split(',')] remote = self.environ.get('REMOTE_ADDR') return [remote] if remote else [] @property def remote_addr(self): """ The client IP as a string. Note that this information can be forged by malicious clients. """ route = self.remote_route return route[0] if route else None def copy(self): """ Return a new :class:`Request` with a shallow :attr:`environ` copy. """ return Request(self.environ.copy()) def get(self, value, default=None): return self.environ.get(value, default) def __getitem__(self, key): return self.environ[key] def __delitem__(self, key): self[key] = ""; del(self.environ[key]) def __iter__(self): return iter(self.environ) def __len__(self): return len(self.environ) def keys(self): return self.environ.keys() def __setitem__(self, key, value): """ Change an environ value and clear all caches that depend on it. """ if self.environ.get('bottle.request.readonly'): raise KeyError('The environ dictionary is read-only.') self.environ[key] = value todelete = () if key == 'wsgi.input': todelete = ('body', 'forms', 'files', 'params', 'post', 'json') elif key == 'QUERY_STRING': todelete = ('query', 'params') elif key.startswith('HTTP_'): todelete = ('headers', 'cookies') for key in todelete: self.environ.pop('bottle.request.'+key, None) def __repr__(self): return '<%s: %s %s>' % (self.__class__.__name__, self.method, self.url) def __getattr__(self, name): ''' Search in self.environ for additional user defined attributes. ''' try: var = self.environ['bottle.request.ext.%s'%name] return var.__get__(self) if hasattr(var, '__get__') else var except KeyError: raise AttributeError('Attribute %r not defined.' % name) def __setattr__(self, name, value): if name == 'environ': return object.__setattr__(self, name, value) self.environ['bottle.request.ext.%s'%name] = value def _hkey(s): return s.title().replace('_','-') class HeaderProperty(object): def __init__(self, name, reader=None, writer=str, default=''): self.name, self.default = name, default self.reader, self.writer = reader, writer self.__doc__ = 'Current value of the %r header.' % name.title() def __get__(self, obj, cls): if obj is None: return self value = obj.headers.get(self.name, self.default) return self.reader(value) if self.reader else value def __set__(self, obj, value): obj.headers[self.name] = self.writer(value) def __delete__(self, obj): del obj.headers[self.name] class BaseResponse(object): """ Storage class for a response body as well as headers and cookies. This class does support dict-like case-insensitive item-access to headers, but is NOT a dict. Most notably, iterating over a response yields parts of the body and not the headers. :param body: The response body as one of the supported types. :param status: Either an HTTP status code (e.g. 200) or a status line including the reason phrase (e.g. '200 OK'). :param headers: A dictionary or a list of name-value pairs. Additional keyword arguments are added to the list of headers. Underscores in the header name are replaced with dashes. """ default_status = 200 default_content_type = 'text/html; charset=UTF-8' # Header blacklist for specific response codes # (rfc2616 section 10.2.3 and 10.3.5) bad_headers = { 204: set(('Content-Type',)), 304: set(('Allow', 'Content-Encoding', 'Content-Language', 'Content-Length', 'Content-Range', 'Content-Type', 'Content-Md5', 'Last-Modified'))} def __init__(self, body='', status=None, headers=None, **more_headers): self._cookies = None self._headers = {} self.body = body self.status = status or self.default_status if headers: if isinstance(headers, dict): headers = headers.items() for name, value in headers: self.add_header(name, value) if more_headers: for name, value in more_headers.items(): self.add_header(name, value) def copy(self, cls=None): ''' Returns a copy of self. ''' cls = cls or BaseResponse assert issubclass(cls, BaseResponse) copy = cls() copy.status = self.status copy._headers = dict((k, v[:]) for (k, v) in self._headers.items()) if self._cookies: copy._cookies = SimpleCookie() copy._cookies.load(self._cookies.output(header='')) return copy def __iter__(self): return iter(self.body) def close(self): if hasattr(self.body, 'close'): self.body.close() @property def status_line(self): ''' The HTTP status line as a string (e.g. ``404 Not Found``).''' return self._status_line @property def status_code(self): ''' The HTTP status code as an integer (e.g. 404).''' return self._status_code def _set_status(self, status): if isinstance(status, int): code, status = status, _HTTP_STATUS_LINES.get(status) elif ' ' in status: status = status.strip() code = int(status.split()[0]) else: raise ValueError('String status line without a reason phrase.') if not 100 <= code <= 999: raise ValueError('Status code out of range.') self._status_code = code self._status_line = str(status or ('%d Unknown' % code)) def _get_status(self): return self._status_line status = property(_get_status, _set_status, None, ''' A writeable property to change the HTTP response status. It accepts either a numeric code (100-999) or a string with a custom reason phrase (e.g. "404 Brain not found"). Both :data:`status_line` and :data:`status_code` are updated accordingly. The return value is always a status string. ''') del _get_status, _set_status @property def headers(self): ''' An instance of :class:`HeaderDict`, a case-insensitive dict-like view on the response headers. ''' hdict = HeaderDict() hdict.dict = self._headers return hdict def __contains__(self, name): return _hkey(name) in self._headers def __delitem__(self, name): del self._headers[_hkey(name)] def __getitem__(self, name): return self._headers[_hkey(name)][-1] def __setitem__(self, name, value): self._headers[_hkey(name)] = [str(value)] def get_header(self, name, default=None): ''' Return the value of a previously defined header. If there is no header with that name, return a default value. ''' return self._headers.get(_hkey(name), [default])[-1] def set_header(self, name, value): ''' Create a new response header, replacing any previously defined headers with the same name. ''' self._headers[_hkey(name)] = [str(value)] def add_header(self, name, value): ''' Add an additional response header, not removing duplicates. ''' self._headers.setdefault(_hkey(name), []).append(str(value)) def iter_headers(self): ''' Yield (header, value) tuples, skipping headers that are not allowed with the current response status code. ''' return self.headerlist @property def headerlist(self): ''' WSGI conform list of (header, value) tuples. ''' out = [] headers = list(self._headers.items()) if 'Content-Type' not in self._headers: headers.append(('Content-Type', [self.default_content_type])) if self._status_code in self.bad_headers: bad_headers = self.bad_headers[self._status_code] headers = [h for h in headers if h[0] not in bad_headers] out += [(name, val) for name, vals in headers for val in vals] if self._cookies: for c in self._cookies.values(): out.append(('Set-Cookie', c.OutputString())) return out content_type = HeaderProperty('Content-Type') content_length = HeaderProperty('Content-Length', reader=int) expires = HeaderProperty('Expires', reader=lambda x: datetime.utcfromtimestamp(parse_date(x)), writer=lambda x: http_date(x)) @property def charset(self, default='UTF-8'): """ Return the charset specified in the content-type header (default: utf8). """ if 'charset=' in self.content_type: return self.content_type.split('charset=')[-1].split(';')[0].strip() return default def set_cookie(self, name, value, secret=None, **options): ''' Create a new cookie or replace an old one. If the `secret` parameter is set, create a `Signed Cookie` (described below). :param name: the name of the cookie. :param value: the value of the cookie. :param secret: a signature key required for signed cookies. Additionally, this method accepts all RFC 2109 attributes that are supported by :class:`cookie.Morsel`, including: :param max_age: maximum age in seconds. (default: None) :param expires: a datetime object or UNIX timestamp. (default: None) :param domain: the domain that is allowed to read the cookie. (default: current domain) :param path: limits the cookie to a given path (default: current path) :param secure: limit the cookie to HTTPS connections (default: off). :param httponly: prevents client-side javascript to read this cookie (default: off, requires Python 2.6 or newer). If neither `expires` nor `max_age` is set (default), the cookie will expire at the end of the browser session (as soon as the browser window is closed). Signed cookies may store any pickle-able object and are cryptographically signed to prevent manipulation. Keep in mind that cookies are limited to 4kb in most browsers. Warning: Signed cookies are not encrypted (the client can still see the content) and not copy-protected (the client can restore an old cookie). The main intention is to make pickling and unpickling save, not to store secret information at client side. ''' if not self._cookies: self._cookies = SimpleCookie() if secret: value = touni(cookie_encode((name, value), secret)) elif not isinstance(value, basestring): raise TypeError('Secret key missing for non-string Cookie.') if len(value) > 4096: raise ValueError('Cookie value to long.') self._cookies[name] = value for key, value in options.items(): if key == 'max_age': if isinstance(value, timedelta): value = value.seconds + value.days * 24 * 3600 if key == 'expires': if isinstance(value, (datedate, datetime)): value = value.timetuple() elif isinstance(value, (int, float)): value = time.gmtime(value) value = time.strftime("%a, %d %b %Y %H:%M:%S GMT", value) self._cookies[name][key.replace('_', '-')] = value def delete_cookie(self, key, **kwargs): ''' Delete a cookie. Be sure to use the same `domain` and `path` settings as used to create the cookie. ''' kwargs['max_age'] = -1 kwargs['expires'] = 0 self.set_cookie(key, '', **kwargs) def __repr__(self): out = '' for name, value in self.headerlist: out += '%s: %s\n' % (name.title(), value.strip()) return out def local_property(name=None): if name: depr('local_property() is deprecated and will be removed.') #0.12 ls = threading.local() def fget(self): try: return ls.var except AttributeError: raise RuntimeError("Request context not initialized.") def fset(self, value): ls.var = value def fdel(self): del ls.var return property(fget, fset, fdel, 'Thread-local property') class LocalRequest(BaseRequest): ''' A thread-local subclass of :class:`BaseRequest` with a different set of attributes for each thread. There is usually only one global instance of this class (:data:`request`). If accessed during a request/response cycle, this instance always refers to the *current* request (even on a multithreaded server). ''' bind = BaseRequest.__init__ environ = local_property() class LocalResponse(BaseResponse): ''' A thread-local subclass of :class:`BaseResponse` with a different set of attributes for each thread. There is usually only one global instance of this class (:data:`response`). Its attributes are used to build the HTTP response at the end of the request/response cycle. ''' bind = BaseResponse.__init__ _status_line = local_property() _status_code = local_property() _cookies = local_property() _headers = local_property() body = local_property() Request = BaseRequest Response = BaseResponse class HTTPResponse(Response, BottleException): def __init__(self, body='', status=None, headers=None, **more_headers): super(HTTPResponse, self).__init__(body, status, headers, **more_headers) def apply(self, response): response._status_code = self._status_code response._status_line = self._status_line response._headers = self._headers response._cookies = self._cookies response.body = self.body class HTTPError(HTTPResponse): default_status = 500 def __init__(self, status=None, body=None, exception=None, traceback=None, **options): self.exception = exception self.traceback = traceback super(HTTPError, self).__init__(body, status, **options) ############################################################################### # Plugins ###################################################################### ############################################################################### class PluginError(BottleException): pass class JSONPlugin(object): name = 'json' api = 2 def __init__(self, json_dumps=json_dumps): self.json_dumps = json_dumps def apply(self, callback, route): dumps = self.json_dumps if not dumps: return callback def wrapper(*a, **ka): try: rv = callback(*a, **ka) except HTTPError: rv = _e() if isinstance(rv, dict): #Attempt to serialize, raises exception on failure json_response = dumps(rv) #Set content type only if serialization succesful response.content_type = 'application/json' return json_response elif isinstance(rv, HTTPResponse) and isinstance(rv.body, dict): rv.body = dumps(rv.body) rv.content_type = 'application/json' return rv return wrapper class TemplatePlugin(object): ''' This plugin applies the :func:`view` decorator to all routes with a `template` config parameter. If the parameter is a tuple, the second element must be a dict with additional options (e.g. `template_engine`) or default variables for the template. ''' name = 'template' api = 2 def apply(self, callback, route): conf = route.config.get('template') if isinstance(conf, (tuple, list)) and len(conf) == 2: return view(conf[0], **conf[1])(callback) elif isinstance(conf, str): return view(conf)(callback) else: return callback #: Not a plugin, but part of the plugin API. TODO: Find a better place. class _ImportRedirect(object): def __init__(self, name, impmask): ''' Create a virtual package that redirects imports (see PEP 302). ''' self.name = name self.impmask = impmask self.module = sys.modules.setdefault(name, imp.new_module(name)) self.module.__dict__.update({'__file__': __file__, '__path__': [], '__all__': [], '__loader__': self}) sys.meta_path.append(self) def find_module(self, fullname, path=None): if '.' not in fullname: return packname = fullname.rsplit('.', 1)[0] if packname != self.name: return return self def load_module(self, fullname): if fullname in sys.modules: return sys.modules[fullname] modname = fullname.rsplit('.', 1)[1] realname = self.impmask % modname __import__(realname) module = sys.modules[fullname] = sys.modules[realname] setattr(self.module, modname, module) module.__loader__ = self return module ############################################################################### # Common Utilities ############################################################# ############################################################################### class MultiDict(DictMixin): """ This dict stores multiple values per key, but behaves exactly like a normal dict in that it returns only the newest value for any given key. There are special methods available to access the full list of values. """ def __init__(self, *a, **k): self.dict = dict((k, [v]) for (k, v) in dict(*a, **k).items()) def __len__(self): return len(self.dict) def __iter__(self): return iter(self.dict) def __contains__(self, key): return key in self.dict def __delitem__(self, key): del self.dict[key] def __getitem__(self, key): return self.dict[key][-1] def __setitem__(self, key, value): self.append(key, value) def keys(self): return self.dict.keys() if py3k: def values(self): return (v[-1] for v in self.dict.values()) def items(self): return ((k, v[-1]) for k, v in self.dict.items()) def allitems(self): return ((k, v) for k, vl in self.dict.items() for v in vl) iterkeys = keys itervalues = values iteritems = items iterallitems = allitems else: def values(self): return [v[-1] for v in self.dict.values()] def items(self): return [(k, v[-1]) for k, v in self.dict.items()] def iterkeys(self): return self.dict.iterkeys() def itervalues(self): return (v[-1] for v in self.dict.itervalues()) def iteritems(self): return ((k, v[-1]) for k, v in self.dict.iteritems()) def iterallitems(self): return ((k, v) for k, vl in self.dict.iteritems() for v in vl) def allitems(self): return [(k, v) for k, vl in self.dict.iteritems() for v in vl] def get(self, key, default=None, index=-1, type=None): ''' Return the most recent value for a key. :param default: The default value to be returned if the key is not present or the type conversion fails. :param index: An index for the list of available values. :param type: If defined, this callable is used to cast the value into a specific type. Exception are suppressed and result in the default value to be returned. ''' try: val = self.dict[key][index] return type(val) if type else val except Exception: pass return default def append(self, key, value): ''' Add a new value to the list of values for this key. ''' self.dict.setdefault(key, []).append(value) def replace(self, key, value): ''' Replace the list of values with a single value. ''' self.dict[key] = [value] def getall(self, key): ''' Return a (possibly empty) list of values for a key. ''' return self.dict.get(key) or [] #: Aliases for WTForms to mimic other multi-dict APIs (Django) getone = get getlist = getall class FormsDict(MultiDict): ''' This :class:`MultiDict` subclass is used to store request form data. Additionally to the normal dict-like item access methods (which return unmodified data as native strings), this container also supports attribute-like access to its values. Attributes are automatically de- or recoded to match :attr:`input_encoding` (default: 'utf8'). Missing attributes default to an empty string. ''' #: Encoding used for attribute values. input_encoding = 'utf8' #: If true (default), unicode strings are first encoded with `latin1` #: and then decoded to match :attr:`input_encoding`. recode_unicode = True def _fix(self, s, encoding=None): if isinstance(s, unicode) and self.recode_unicode: # Python 3 WSGI return s.encode('latin1').decode(encoding or self.input_encoding) elif isinstance(s, bytes): # Python 2 WSGI return s.decode(encoding or self.input_encoding) else: return s def decode(self, encoding=None): ''' Returns a copy with all keys and values de- or recoded to match :attr:`input_encoding`. Some libraries (e.g. WTForms) want a unicode dictionary. ''' copy = FormsDict() enc = copy.input_encoding = encoding or self.input_encoding copy.recode_unicode = False for key, value in self.allitems(): copy.append(self._fix(key, enc), self._fix(value, enc)) return copy def getunicode(self, name, default=None, encoding=None): ''' Return the value as a unicode string, or the default. ''' try: return self._fix(self[name], encoding) except (UnicodeError, KeyError): return default def __getattr__(self, name, default=unicode()): # Without this guard, pickle generates a cryptic TypeError: if name.startswith('__') and name.endswith('__'): return super(FormsDict, self).__getattr__(name) return self.getunicode(name, default=default) class HeaderDict(MultiDict): """ A case-insensitive version of :class:`MultiDict` that defaults to replace the old value instead of appending it. """ def __init__(self, *a, **ka): self.dict = {} if a or ka: self.update(*a, **ka) def __contains__(self, key): return _hkey(key) in self.dict def __delitem__(self, key): del self.dict[_hkey(key)] def __getitem__(self, key): return self.dict[_hkey(key)][-1] def __setitem__(self, key, value): self.dict[_hkey(key)] = [str(value)] def append(self, key, value): self.dict.setdefault(_hkey(key), []).append(str(value)) def replace(self, key, value): self.dict[_hkey(key)] = [str(value)] def getall(self, key): return self.dict.get(_hkey(key)) or [] def get(self, key, default=None, index=-1): return MultiDict.get(self, _hkey(key), default, index) def filter(self, names): for name in [_hkey(n) for n in names]: if name in self.dict: del self.dict[name] class WSGIHeaderDict(DictMixin): ''' This dict-like class wraps a WSGI environ dict and provides convenient access to HTTP_* fields. Keys and values are native strings (2.x bytes or 3.x unicode) and keys are case-insensitive. If the WSGI environment contains non-native string values, these are de- or encoded using a lossless 'latin1' character set. The API will remain stable even on changes to the relevant PEPs. Currently PEP 333, 444 and 3333 are supported. (PEP 444 is the only one that uses non-native strings.) ''' #: List of keys that do not have a ``HTTP_`` prefix. cgikeys = ('CONTENT_TYPE', 'CONTENT_LENGTH') def __init__(self, environ): self.environ = environ def _ekey(self, key): ''' Translate header field name to CGI/WSGI environ key. ''' key = key.replace('-','_').upper() if key in self.cgikeys: return key return 'HTTP_' + key def raw(self, key, default=None): ''' Return the header value as is (may be bytes or unicode). ''' return self.environ.get(self._ekey(key), default) def __getitem__(self, key): return tonat(self.environ[self._ekey(key)], 'latin1') def __setitem__(self, key, value): raise TypeError("%s is read-only." % self.__class__) def __delitem__(self, key): raise TypeError("%s is read-only." % self.__class__) def __iter__(self): for key in self.environ: if key[:5] == 'HTTP_': yield key[5:].replace('_', '-').title() elif key in self.cgikeys: yield key.replace('_', '-').title() def keys(self): return [x for x in self] def __len__(self): return len(self.keys()) def __contains__(self, key): return self._ekey(key) in self.environ class ConfigDict(dict): ''' A dict-like configuration storage with additional support for namespaces, validators, meta-data, on_change listeners and more. This storage is optimized for fast read access. Retrieving a key or using non-altering dict methods (e.g. `dict.get()`) has no overhead compared to a native dict. ''' __slots__ = ('_meta', '_on_change') class Namespace(DictMixin): def __init__(self, config, namespace): self._config = config self._prefix = namespace def __getitem__(self, key): depr('Accessing namespaces as dicts is discouraged. ' 'Only use flat item access: ' 'cfg["names"]["pace"]["key"] -> cfg["name.space.key"]') #0.12 return self._config[self._prefix + '.' + key] def __setitem__(self, key, value): self._config[self._prefix + '.' + key] = value def __delitem__(self, key): del self._config[self._prefix + '.' + key] def __iter__(self): ns_prefix = self._prefix + '.' for key in self._config: ns, dot, name = key.rpartition('.') if ns == self._prefix and name: yield name def keys(self): return [x for x in self] def __len__(self): return len(self.keys()) def __contains__(self, key): return self._prefix + '.' + key in self._config def __repr__(self): return '<Config.Namespace %s.*>' % self._prefix def __str__(self): return '<Config.Namespace %s.*>' % self._prefix # Deprecated ConfigDict features def __getattr__(self, key): depr('Attribute access is deprecated.') #0.12 if key not in self and key[0].isupper(): self[key] = ConfigDict.Namespace(self._config, self._prefix + '.' + key) if key not in self and key.startswith('__'): raise AttributeError(key) return self.get(key) def __setattr__(self, key, value): if key in ('_config', '_prefix'): self.__dict__[key] = value return depr('Attribute assignment is deprecated.') #0.12 if hasattr(DictMixin, key): raise AttributeError('Read-only attribute.') if key in self and self[key] and isinstance(self[key], self.__class__): raise AttributeError('Non-empty namespace attribute.') self[key] = value def __delattr__(self, key): if key in self: val = self.pop(key) if isinstance(val, self.__class__): prefix = key + '.' for key in self: if key.startswith(prefix): del self[prefix+key] def __call__(self, *a, **ka): depr('Calling ConfDict is deprecated. Use the update() method.') #0.12 self.update(*a, **ka) return self def __init__(self, *a, **ka): self._meta = {} self._on_change = lambda name, value: None if a or ka: depr('Constructor does no longer accept parameters.') #0.12 self.update(*a, **ka) def load_config(self, filename): ''' Load values from an *.ini style config file. If the config file contains sections, their names are used as namespaces for the values within. The two special sections ``DEFAULT`` and ``bottle`` refer to the root namespace (no prefix). ''' conf = ConfigParser() conf.read(filename) for section in conf.sections(): for key, value in conf.items(section): if section not in ('DEFAULT', 'bottle'): key = section + '.' + key self[key] = value return self def load_dict(self, source, namespace='', make_namespaces=False): ''' Import values from a dictionary structure. Nesting can be used to represent namespaces. >>> ConfigDict().load_dict({'name': {'space': {'key': 'value'}}}) {'name.space.key': 'value'} ''' stack = [(namespace, source)] while stack: prefix, source = stack.pop() if not isinstance(source, dict): raise TypeError('Source is not a dict (r)' % type(key)) for key, value in source.items(): if not isinstance(key, basestring): raise TypeError('Key is not a string (%r)' % type(key)) full_key = prefix + '.' + key if prefix else key if isinstance(value, dict): stack.append((full_key, value)) if make_namespaces: self[full_key] = self.Namespace(self, full_key) else: self[full_key] = value return self def update(self, *a, **ka): ''' If the first parameter is a string, all keys are prefixed with this namespace. Apart from that it works just as the usual dict.update(). Example: ``update('some.namespace', key='value')`` ''' prefix = '' if a and isinstance(a[0], basestring): prefix = a[0].strip('.') + '.' a = a[1:] for key, value in dict(*a, **ka).items(): self[prefix+key] = value def setdefault(self, key, value): if key not in self: self[key] = value return self[key] def __setitem__(self, key, value): if not isinstance(key, basestring): raise TypeError('Key has type %r (not a string)' % type(key)) value = self.meta_get(key, 'filter', lambda x: x)(value) if key in self and self[key] is value: return self._on_change(key, value) dict.__setitem__(self, key, value) def __delitem__(self, key): dict.__delitem__(self, key) def clear(self): for key in self: del self[key] def meta_get(self, key, metafield, default=None): ''' Return the value of a meta field for a key. ''' return self._meta.get(key, {}).get(metafield, default) def meta_set(self, key, metafield, value): ''' Set the meta field for a key to a new value. This triggers the on-change handler for existing keys. ''' self._meta.setdefault(key, {})[metafield] = value if key in self: self[key] = self[key] def meta_list(self, key): ''' Return an iterable of meta field names defined for a key. ''' return self._meta.get(key, {}).keys() # Deprecated ConfigDict features def __getattr__(self, key): depr('Attribute access is deprecated.') #0.12 if key not in self and key[0].isupper(): self[key] = self.Namespace(self, key) if key not in self and key.startswith('__'): raise AttributeError(key) return self.get(key) def __setattr__(self, key, value): if key in self.__slots__: return dict.__setattr__(self, key, value) depr('Attribute assignment is deprecated.') #0.12 if hasattr(dict, key): raise AttributeError('Read-only attribute.') if key in self and self[key] and isinstance(self[key], self.Namespace): raise AttributeError('Non-empty namespace attribute.') self[key] = value def __delattr__(self, key): if key in self: val = self.pop(key) if isinstance(val, self.Namespace): prefix = key + '.' for key in self: if key.startswith(prefix): del self[prefix+key] def __call__(self, *a, **ka): depr('Calling ConfDict is deprecated. Use the update() method.') #0.12 self.update(*a, **ka) return self class AppStack(list): """ A stack-like list. Calling it returns the head of the stack. """ def __call__(self): """ Return the current default application. """ return self[-1] def push(self, value=None): """ Add a new :class:`Bottle` instance to the stack """ if not isinstance(value, Bottle): value = Bottle() self.append(value) return value class WSGIFileWrapper(object): def __init__(self, fp, buffer_size=1024*64): self.fp, self.buffer_size = fp, buffer_size for attr in ('fileno', 'close', 'read', 'readlines', 'tell', 'seek'): if hasattr(fp, attr): setattr(self, attr, getattr(fp, attr)) def __iter__(self): buff, read = self.buffer_size, self.read while True: part = read(buff) if not part: return yield part class _closeiter(object): ''' This only exists to be able to attach a .close method to iterators that do not support attribute assignment (most of itertools). ''' def __init__(self, iterator, close=None): self.iterator = iterator self.close_callbacks = makelist(close) def __iter__(self): return iter(self.iterator) def close(self): for func in self.close_callbacks: func() class ResourceManager(object): ''' This class manages a list of search paths and helps to find and open application-bound resources (files). :param base: default value for :meth:`add_path` calls. :param opener: callable used to open resources. :param cachemode: controls which lookups are cached. One of 'all', 'found' or 'none'. ''' def __init__(self, base='./', opener=open, cachemode='all'): self.opener = open self.base = base self.cachemode = cachemode #: A list of search paths. See :meth:`add_path` for details. self.path = [] #: A cache for resolved paths. ``res.cache.clear()`` clears the cache. self.cache = {} def add_path(self, path, base=None, index=None, create=False): ''' Add a new path to the list of search paths. Return False if the path does not exist. :param path: The new search path. Relative paths are turned into an absolute and normalized form. If the path looks like a file (not ending in `/`), the filename is stripped off. :param base: Path used to absolutize relative search paths. Defaults to :attr:`base` which defaults to ``os.getcwd()``. :param index: Position within the list of search paths. Defaults to last index (appends to the list). The `base` parameter makes it easy to reference files installed along with a python module or package:: res.add_path('./resources/', __file__) ''' base = os.path.abspath(os.path.dirname(base or self.base)) path = os.path.abspath(os.path.join(base, os.path.dirname(path))) path += os.sep if path in self.path: self.path.remove(path) if create and not os.path.isdir(path): os.makedirs(path) if index is None: self.path.append(path) else: self.path.insert(index, path) self.cache.clear() return os.path.exists(path) def __iter__(self): ''' Iterate over all existing files in all registered paths. ''' search = self.path[:] while search: path = search.pop() if not os.path.isdir(path): continue for name in os.listdir(path): full = os.path.join(path, name) if os.path.isdir(full): search.append(full) else: yield full def lookup(self, name): ''' Search for a resource and return an absolute file path, or `None`. The :attr:`path` list is searched in order. The first match is returend. Symlinks are followed. The result is cached to speed up future lookups. ''' if name not in self.cache or DEBUG: for path in self.path: fpath = os.path.join(path, name) if os.path.isfile(fpath): if self.cachemode in ('all', 'found'): self.cache[name] = fpath return fpath if self.cachemode == 'all': self.cache[name] = None return self.cache[name] def open(self, name, mode='r', *args, **kwargs): ''' Find a resource and return a file object, or raise IOError. ''' fname = self.lookup(name) if not fname: raise IOError("Resource %r not found." % name) return self.opener(fname, mode=mode, *args, **kwargs) class FileUpload(object): def __init__(self, fileobj, name, filename, headers=None): ''' Wrapper for file uploads. ''' #: Open file(-like) object (BytesIO buffer or temporary file) self.file = fileobj #: Name of the upload form field self.name = name #: Raw filename as sent by the client (may contain unsafe characters) self.raw_filename = filename #: A :class:`HeaderDict` with additional headers (e.g. content-type) self.headers = HeaderDict(headers) if headers else HeaderDict() content_type = HeaderProperty('Content-Type') content_length = HeaderProperty('Content-Length', reader=int, default=-1) @cached_property def filename(self): ''' Name of the file on the client file system, but normalized to ensure file system compatibility. An empty filename is returned as 'empty'. Only ASCII letters, digits, dashes, underscores and dots are allowed in the final filename. Accents are removed, if possible. Whitespace is replaced by a single dash. Leading or tailing dots or dashes are removed. The filename is limited to 255 characters. ''' fname = self.raw_filename if not isinstance(fname, unicode): fname = fname.decode('utf8', 'ignore') fname = normalize('NFKD', fname).encode('ASCII', 'ignore').decode('ASCII') fname = os.path.basename(fname.replace('\\', os.path.sep)) fname = re.sub(r'[^a-zA-Z0-9-_.\s]', '', fname).strip() fname = re.sub(r'[-\s]+', '-', fname).strip('.-') return fname[:255] or 'empty' def _copy_file(self, fp, chunk_size=2**16): read, write, offset = self.file.read, fp.write, self.file.tell() while 1: buf = read(chunk_size) if not buf: break write(buf) self.file.seek(offset) def save(self, destination, overwrite=False, chunk_size=2**16): ''' Save file to disk or copy its content to an open file(-like) object. If *destination* is a directory, :attr:`filename` is added to the path. Existing files are not overwritten by default (IOError). :param destination: File path, directory or file(-like) object. :param overwrite: If True, replace existing files. (default: False) :param chunk_size: Bytes to read at a time. (default: 64kb) ''' if isinstance(destination, basestring): # Except file-likes here if os.path.isdir(destination): destination = os.path.join(destination, self.filename) if not overwrite and os.path.exists(destination): raise IOError('File exists.') with open(destination, 'wb') as fp: self._copy_file(fp, chunk_size) else: self._copy_file(destination, chunk_size) ############################################################################### # Application Helper ########################################################### ############################################################################### def abort(code=500, text='Unknown Error.'): """ Aborts execution and causes a HTTP error. """ raise HTTPError(code, text) def redirect(url, code=None): """ Aborts execution and causes a 303 or 302 redirect, depending on the HTTP protocol version. """ if not code: code = 303 if request.get('SERVER_PROTOCOL') == "HTTP/1.1" else 302 res = response.copy(cls=HTTPResponse) res.status = code res.body = "" res.set_header('Location', urljoin(request.url, url)) raise res def _file_iter_range(fp, offset, bytes, maxread=1024*1024): ''' Yield chunks from a range in a file. No chunk is bigger than maxread.''' fp.seek(offset) while bytes > 0: part = fp.read(min(bytes, maxread)) if not part: break bytes -= len(part) yield part def static_file(filename, root, mimetype='auto', download=False, charset='UTF-8'): """ Open a file in a safe way and return :exc:`HTTPResponse` with status code 200, 305, 403 or 404. The ``Content-Type``, ``Content-Encoding``, ``Content-Length`` and ``Last-Modified`` headers are set if possible. Special support for ``If-Modified-Since``, ``Range`` and ``HEAD`` requests. :param filename: Name or path of the file to send. :param root: Root path for file lookups. Should be an absolute directory path. :param mimetype: Defines the content-type header (default: guess from file extension) :param download: If True, ask the browser to open a `Save as...` dialog instead of opening the file with the associated program. You can specify a custom filename as a string. If not specified, the original filename is used (default: False). :param charset: The charset to use for files with a ``text/*`` mime-type. (default: UTF-8) """ root = os.path.abspath(root) + os.sep filename = os.path.abspath(os.path.join(root, filename.strip('/\\'))) headers = dict() if not filename.startswith(root): return HTTPError(403, "Access denied.") if not os.path.exists(filename) or not os.path.isfile(filename): return HTTPError(404, "File does not exist.") if not os.access(filename, os.R_OK): return HTTPError(403, "You do not have permission to access this file.") if mimetype == 'auto': mimetype, encoding = mimetypes.guess_type(filename) if encoding: headers['Content-Encoding'] = encoding if mimetype: if mimetype[:5] == 'text/' and charset and 'charset' not in mimetype: mimetype += '; charset=%s' % charset headers['Content-Type'] = mimetype if download: download = os.path.basename(filename if download == True else download) headers['Content-Disposition'] = 'attachment; filename="%s"' % download stats = os.stat(filename) headers['Content-Length'] = clen = stats.st_size lm = time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime(stats.st_mtime)) headers['Last-Modified'] = lm ims = request.environ.get('HTTP_IF_MODIFIED_SINCE') if ims: ims = parse_date(ims.split(";")[0].strip()) if ims is not None and ims >= int(stats.st_mtime): headers['Date'] = time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime()) return HTTPResponse(status=304, **headers) body = '' if request.method == 'HEAD' else open(filename, 'rb') headers["Accept-Ranges"] = "bytes" ranges = request.environ.get('HTTP_RANGE') if 'HTTP_RANGE' in request.environ: ranges = list(parse_range_header(request.environ['HTTP_RANGE'], clen)) if not ranges: return HTTPError(416, "Requested Range Not Satisfiable") offset, end = ranges[0] headers["Content-Range"] = "bytes %d-%d/%d" % (offset, end-1, clen) headers["Content-Length"] = str(end-offset) if body: body = _file_iter_range(body, offset, end-offset) return HTTPResponse(body, status=206, **headers) return HTTPResponse(body, **headers) ############################################################################### # HTTP Utilities and MISC (TODO) ############################################### ############################################################################### def debug(mode=True): """ Change the debug level. There is only one debug level supported at the moment.""" global DEBUG if mode: warnings.simplefilter('default') DEBUG = bool(mode) def http_date(value): if isinstance(value, (datedate, datetime)): value = value.utctimetuple() elif isinstance(value, (int, float)): value = time.gmtime(value) if not isinstance(value, basestring): value = time.strftime("%a, %d %b %Y %H:%M:%S GMT", value) return value def parse_date(ims): """ Parse rfc1123, rfc850 and asctime timestamps and return UTC epoch. """ try: ts = email.utils.parsedate_tz(ims) return time.mktime(ts[:8] + (0,)) - (ts[9] or 0) - time.timezone except (TypeError, ValueError, IndexError, OverflowError): return None def parse_auth(header): """ Parse rfc2617 HTTP authentication header string (basic) and return (user,pass) tuple or None""" try: method, data = header.split(None, 1) if method.lower() == 'basic': user, pwd = touni(base64.b64decode(tob(data))).split(':',1) return user, pwd except (KeyError, ValueError): return None def parse_range_header(header, maxlen=0): ''' Yield (start, end) ranges parsed from a HTTP Range header. Skip unsatisfiable ranges. The end index is non-inclusive.''' if not header or header[:6] != 'bytes=': return ranges = [r.split('-', 1) for r in header[6:].split(',') if '-' in r] for start, end in ranges: try: if not start: # bytes=-100 -> last 100 bytes start, end = max(0, maxlen-int(end)), maxlen elif not end: # bytes=100- -> all but the first 99 bytes start, end = int(start), maxlen else: # bytes=100-200 -> bytes 100-200 (inclusive) start, end = int(start), min(int(end)+1, maxlen) if 0 <= start < end <= maxlen: yield start, end except ValueError: pass def _parse_qsl(qs): r = [] for pair in qs.replace(';','&').split('&'): if not pair: continue nv = pair.split('=', 1) if len(nv) != 2: nv.append('') key = urlunquote(nv[0].replace('+', ' ')) value = urlunquote(nv[1].replace('+', ' ')) r.append((key, value)) return r def _lscmp(a, b): ''' Compares two strings in a cryptographically safe way: Runtime is not affected by length of common prefix. ''' return not sum(0 if x==y else 1 for x, y in zip(a, b)) and len(a) == len(b) def cookie_encode(data, key): ''' Encode and sign a pickle-able object. Return a (byte) string ''' msg = base64.b64encode(pickle.dumps(data, -1)) sig = base64.b64encode(hmac.new(tob(key), msg).digest()) return tob('!') + sig + tob('?') + msg def cookie_decode(data, key): ''' Verify and decode an encoded string. Return an object or None.''' data = tob(data) if cookie_is_encoded(data): sig, msg = data.split(tob('?'), 1) if _lscmp(sig[1:], base64.b64encode(hmac.new(tob(key), msg).digest())): return pickle.loads(base64.b64decode(msg)) return None def cookie_is_encoded(data): ''' Return True if the argument looks like a encoded cookie.''' return bool(data.startswith(tob('!')) and tob('?') in data) def html_escape(string): ''' Escape HTML special characters ``&<>`` and quotes ``'"``. ''' return string.replace('&','&').replace('<','<').replace('>','>')\ .replace('"','"').replace("'",''') def html_quote(string): ''' Escape and quote a string to be used as an HTTP attribute.''' return '"%s"' % html_escape(string).replace('\n',' ')\ .replace('\r',' ').replace('\t','	') def yieldroutes(func): """ Return a generator for routes that match the signature (name, args) of the func parameter. This may yield more than one route if the function takes optional keyword arguments. The output is best described by example:: a() -> '/a' b(x, y) -> '/b/<x>/<y>' c(x, y=5) -> '/c/<x>' and '/c/<x>/<y>' d(x=5, y=6) -> '/d' and '/d/<x>' and '/d/<x>/<y>' """ path = '/' + func.__name__.replace('__','/').lstrip('/') spec = getargspec(func) argc = len(spec[0]) - len(spec[3] or []) path += ('/<%s>' * argc) % tuple(spec[0][:argc]) yield path for arg in spec[0][argc:]: path += '/<%s>' % arg yield path def path_shift(script_name, path_info, shift=1): ''' Shift path fragments from PATH_INFO to SCRIPT_NAME and vice versa. :return: The modified paths. :param script_name: The SCRIPT_NAME path. :param script_name: The PATH_INFO path. :param shift: The number of path fragments to shift. May be negative to change the shift direction. (default: 1) ''' if shift == 0: return script_name, path_info pathlist = path_info.strip('/').split('/') scriptlist = script_name.strip('/').split('/') if pathlist and pathlist[0] == '': pathlist = [] if scriptlist and scriptlist[0] == '': scriptlist = [] if shift > 0 and shift <= len(pathlist): moved = pathlist[:shift] scriptlist = scriptlist + moved pathlist = pathlist[shift:] elif shift < 0 and shift >= -len(scriptlist): moved = scriptlist[shift:] pathlist = moved + pathlist scriptlist = scriptlist[:shift] else: empty = 'SCRIPT_NAME' if shift < 0 else 'PATH_INFO' raise AssertionError("Cannot shift. Nothing left from %s" % empty) new_script_name = '/' + '/'.join(scriptlist) new_path_info = '/' + '/'.join(pathlist) if path_info.endswith('/') and pathlist: new_path_info += '/' return new_script_name, new_path_info def auth_basic(check, realm="private", text="Access denied"): ''' Callback decorator to require HTTP auth (basic). TODO: Add route(check_auth=...) parameter. ''' def decorator(func): def wrapper(*a, **ka): user, password = request.auth or (None, None) if user is None or not check(user, password): err = HTTPError(401, text) err.add_header('WWW-Authenticate', 'Basic realm="%s"' % realm) return err return func(*a, **ka) return wrapper return decorator # Shortcuts for common Bottle methods. # They all refer to the current default application. def make_default_app_wrapper(name): ''' Return a callable that relays calls to the current default app. ''' @functools.wraps(getattr(Bottle, name)) def wrapper(*a, **ka): return getattr(app(), name)(*a, **ka) return wrapper route = make_default_app_wrapper('route') get = make_default_app_wrapper('get') post = make_default_app_wrapper('post') put = make_default_app_wrapper('put') delete = make_default_app_wrapper('delete') error = make_default_app_wrapper('error') mount = make_default_app_wrapper('mount') hook = make_default_app_wrapper('hook') install = make_default_app_wrapper('install') uninstall = make_default_app_wrapper('uninstall') url = make_default_app_wrapper('get_url') ############################################################################### # Server Adapter ############################################################### ############################################################################### class ServerAdapter(object): quiet = False def __init__(self, host='127.0.0.1', port=8080, **options): self.options = options self.host = host self.port = int(port) def run(self, handler): # pragma: no cover pass def __repr__(self): args = ', '.join(['%s=%s'%(k,repr(v)) for k, v in self.options.items()]) return "%s(%s)" % (self.__class__.__name__, args) class CGIServer(ServerAdapter): quiet = True def run(self, handler): # pragma: no cover from wsgiref.handlers import CGIHandler def fixed_environ(environ, start_response): environ.setdefault('PATH_INFO', '') return handler(environ, start_response) CGIHandler().run(fixed_environ) class FlupFCGIServer(ServerAdapter): def run(self, handler): # pragma: no cover import flup.server.fcgi self.options.setdefault('bindAddress', (self.host, self.port)) flup.server.fcgi.WSGIServer(handler, **self.options).run() class WSGIRefServer(ServerAdapter): def run(self, app): # pragma: no cover from wsgiref.simple_server import WSGIRequestHandler, WSGIServer from wsgiref.simple_server import make_server import socket class FixedHandler(WSGIRequestHandler): def address_string(self): # Prevent reverse DNS lookups please. return self.client_address[0] def log_request(*args, **kw): if not self.quiet: return WSGIRequestHandler.log_request(*args, **kw) handler_cls = self.options.get('handler_class', FixedHandler) server_cls = self.options.get('server_class', WSGIServer) if ':' in self.host: # Fix wsgiref for IPv6 addresses. if getattr(server_cls, 'address_family') == socket.AF_INET: class server_cls(server_cls): address_family = socket.AF_INET6 srv = make_server(self.host, self.port, app, server_cls, handler_cls) srv.serve_forever() class CherryPyServer(ServerAdapter): def run(self, handler): # pragma: no cover from cherrypy import wsgiserver self.options['bind_addr'] = (self.host, self.port) self.options['wsgi_app'] = handler certfile = self.options.get('certfile') if certfile: del self.options['certfile'] keyfile = self.options.get('keyfile') if keyfile: del self.options['keyfile'] server = wsgiserver.CherryPyWSGIServer(**self.options) if certfile: server.ssl_certificate = certfile if keyfile: server.ssl_private_key = keyfile try: server.start() finally: server.stop() class WaitressServer(ServerAdapter): def run(self, handler): from waitress import serve serve(handler, host=self.host, port=self.port) class PasteServer(ServerAdapter): def run(self, handler): # pragma: no cover from paste import httpserver from paste.translogger import TransLogger handler = TransLogger(handler, setup_console_handler=(not self.quiet)) httpserver.serve(handler, host=self.host, port=str(self.port), **self.options) class MeinheldServer(ServerAdapter): def run(self, handler): from meinheld import server server.listen((self.host, self.port)) server.run(handler) class FapwsServer(ServerAdapter): """ Extremely fast webserver using libev. See http://www.fapws.org/ """ def run(self, handler): # pragma: no cover import fapws._evwsgi as evwsgi from fapws import base, config port = self.port if float(config.SERVER_IDENT[-2:]) > 0.4: # fapws3 silently changed its API in 0.5 port = str(port) evwsgi.start(self.host, port) # fapws3 never releases the GIL. Complain upstream. I tried. No luck. if 'BOTTLE_CHILD' in os.environ and not self.quiet: _stderr("WARNING: Auto-reloading does not work with Fapws3.\n") _stderr(" (Fapws3 breaks python thread support)\n") evwsgi.set_base_module(base) def app(environ, start_response): environ['wsgi.multiprocess'] = False return handler(environ, start_response) evwsgi.wsgi_cb(('', app)) evwsgi.run() class TornadoServer(ServerAdapter): """ The super hyped asynchronous server by facebook. Untested. """ def run(self, handler): # pragma: no cover import tornado.wsgi, tornado.httpserver, tornado.ioloop container = tornado.wsgi.WSGIContainer(handler) server = tornado.httpserver.HTTPServer(container) server.listen(port=self.port,address=self.host) tornado.ioloop.IOLoop.instance().start() class AppEngineServer(ServerAdapter): """ Adapter for Google App Engine. """ quiet = True def run(self, handler): from google.appengine.ext.webapp import util # A main() function in the handler script enables 'App Caching'. # Lets makes sure it is there. This _really_ improves performance. module = sys.modules.get('__main__') if module and not hasattr(module, 'main'): module.main = lambda: util.run_wsgi_app(handler) util.run_wsgi_app(handler) class TwistedServer(ServerAdapter): """ Untested. """ def run(self, handler): from twisted.web import server, wsgi from twisted.python.threadpool import ThreadPool from twisted.internet import reactor thread_pool = ThreadPool() thread_pool.start() reactor.addSystemEventTrigger('after', 'shutdown', thread_pool.stop) factory = server.Site(wsgi.WSGIResource(reactor, thread_pool, handler)) reactor.listenTCP(self.port, factory, interface=self.host) reactor.run() class DieselServer(ServerAdapter): """ Untested. """ def run(self, handler): from diesel.protocols.wsgi import WSGIApplication app = WSGIApplication(handler, port=self.port) app.run() class GeventServer(ServerAdapter): """ Untested. Options: * `fast` (default: False) uses libevent's http server, but has some issues: No streaming, no pipelining, no SSL. * See gevent.wsgi.WSGIServer() documentation for more options. """ def run(self, handler): from gevent import wsgi, pywsgi, local if not isinstance(threading.local(), local.local): msg = "Bottle requires gevent.monkey.patch_all() (before import)" raise RuntimeError(msg) if not self.options.pop('fast', None): wsgi = pywsgi self.options['log'] = None if self.quiet else 'default' address = (self.host, self.port) server = wsgi.WSGIServer(address, handler, **self.options) if 'BOTTLE_CHILD' in os.environ: import signal signal.signal(signal.SIGINT, lambda s, f: server.stop()) server.serve_forever() class GeventSocketIOServer(ServerAdapter): def run(self,handler): from socketio import server address = (self.host, self.port) server.SocketIOServer(address, handler, **self.options).serve_forever() class GunicornServer(ServerAdapter): """ Untested. See http://gunicorn.org/configure.html for options. """ def run(self, handler): from gunicorn.app.base import Application config = {'bind': "%s:%d" % (self.host, int(self.port))} config.update(self.options) class GunicornApplication(Application): def init(self, parser, opts, args): return config def load(self): return handler GunicornApplication().run() class EventletServer(ServerAdapter): """ Untested """ def run(self, handler): from eventlet import wsgi, listen try: wsgi.server(listen((self.host, self.port)), handler, log_output=(not self.quiet)) except TypeError: # Fallback, if we have old version of eventlet wsgi.server(listen((self.host, self.port)), handler) class RocketServer(ServerAdapter): """ Untested. """ def run(self, handler): from rocket import Rocket server = Rocket((self.host, self.port), 'wsgi', { 'wsgi_app' : handler }) server.start() class BjoernServer(ServerAdapter): """ Fast server written in C: https://github.com/jonashaag/bjoern """ def run(self, handler): from bjoern import run run(handler, self.host, self.port) class AutoServer(ServerAdapter): """ Untested. """ adapters = [WaitressServer, PasteServer, TwistedServer, CherryPyServer, WSGIRefServer] def run(self, handler): for sa in self.adapters: try: return sa(self.host, self.port, **self.options).run(handler) except ImportError: pass server_names = { 'cgi': CGIServer, 'flup': FlupFCGIServer, 'wsgiref': WSGIRefServer, 'waitress': WaitressServer, 'cherrypy': CherryPyServer, 'paste': PasteServer, 'fapws3': FapwsServer, 'tornado': TornadoServer, 'gae': AppEngineServer, 'twisted': TwistedServer, 'diesel': DieselServer, 'meinheld': MeinheldServer, 'gunicorn': GunicornServer, 'eventlet': EventletServer, 'gevent': GeventServer, 'geventSocketIO':GeventSocketIOServer, 'rocket': RocketServer, 'bjoern' : BjoernServer, 'auto': AutoServer, } ############################################################################### # Application Control ########################################################## ############################################################################### def load(target, **namespace): """ Import a module or fetch an object from a module. * ``package.module`` returns `module` as a module object. * ``pack.mod:name`` returns the module variable `name` from `pack.mod`. * ``pack.mod:func()`` calls `pack.mod.func()` and returns the result. The last form accepts not only function calls, but any type of expression. Keyword arguments passed to this function are available as local variables. Example: ``import_string('re:compile(x)', x='[a-z]')`` """ module, target = target.split(":", 1) if ':' in target else (target, None) if module not in sys.modules: __import__(module) if not target: return sys.modules[module] if target.isalnum(): return getattr(sys.modules[module], target) package_name = module.split('.')[0] namespace[package_name] = sys.modules[package_name] return eval('%s.%s' % (module, target), namespace) def load_app(target): """ Load a bottle application from a module and make sure that the import does not affect the current default application, but returns a separate application object. See :func:`load` for the target parameter. """ global NORUN; NORUN, nr_old = True, NORUN try: tmp = default_app.push() # Create a new "default application" rv = load(target) # Import the target module return rv if callable(rv) else tmp finally: default_app.remove(tmp) # Remove the temporary added default application NORUN = nr_old _debug = debug def run(app=None, server='wsgiref', host='127.0.0.1', port=8080, interval=1, reloader=False, quiet=False, plugins=None, debug=None, **kargs): """ Start a server instance. This method blocks until the server terminates. :param app: WSGI application or target string supported by :func:`load_app`. (default: :func:`default_app`) :param server: Server adapter to use. See :data:`server_names` keys for valid names or pass a :class:`ServerAdapter` subclass. (default: `wsgiref`) :param host: Server address to bind to. Pass ``0.0.0.0`` to listens on all interfaces including the external one. (default: 127.0.0.1) :param port: Server port to bind to. Values below 1024 require root privileges. (default: 8080) :param reloader: Start auto-reloading server? (default: False) :param interval: Auto-reloader interval in seconds (default: 1) :param quiet: Suppress output to stdout and stderr? (default: False) :param options: Options passed to the server adapter. """ if NORUN: return if reloader and not os.environ.get('BOTTLE_CHILD'): try: lockfile = None fd, lockfile = tempfile.mkstemp(prefix='bottle.', suffix='.lock') os.close(fd) # We only need this file to exist. We never write to it while os.path.exists(lockfile): args = [sys.executable] + sys.argv environ = os.environ.copy() environ['BOTTLE_CHILD'] = 'true' environ['BOTTLE_LOCKFILE'] = lockfile p = subprocess.Popen(args, env=environ) while p.poll() is None: # Busy wait... os.utime(lockfile, None) # I am alive! time.sleep(interval) if p.poll() != 3: if os.path.exists(lockfile): os.unlink(lockfile) sys.exit(p.poll()) except KeyboardInterrupt: pass finally: if os.path.exists(lockfile): os.unlink(lockfile) return try: if debug is not None: _debug(debug) app = app or default_app() if isinstance(app, basestring): app = load_app(app) if not callable(app): raise ValueError("Application is not callable: %r" % app) for plugin in plugins or []: app.install(plugin) if server in server_names: server = server_names.get(server) if isinstance(server, basestring): server = load(server) if isinstance(server, type): server = server(host=host, port=port, **kargs) if not isinstance(server, ServerAdapter): raise ValueError("Unknown or unsupported server: %r" % server) server.quiet = server.quiet or quiet if not server.quiet: _stderr("Bottle v%s server starting up (using %s)...\n" % (__version__, repr(server))) _stderr("Listening on http://%s:%d/\n" % (server.host, server.port)) _stderr("Hit Ctrl-C to quit.\n\n") if reloader: lockfile = os.environ.get('BOTTLE_LOCKFILE') bgcheck = FileCheckerThread(lockfile, interval) with bgcheck: server.run(app) if bgcheck.status == 'reload': sys.exit(3) else: server.run(app) except KeyboardInterrupt: pass except (SystemExit, MemoryError): raise except: if not reloader: raise if not getattr(server, 'quiet', quiet): print_exc() time.sleep(interval) sys.exit(3) class FileCheckerThread(threading.Thread): ''' Interrupt main-thread as soon as a changed module file is detected, the lockfile gets deleted or gets to old. ''' def __init__(self, lockfile, interval): threading.Thread.__init__(self) self.lockfile, self.interval = lockfile, interval #: Is one of 'reload', 'error' or 'exit' self.status = None def run(self): exists = os.path.exists mtime = lambda path: os.stat(path).st_mtime files = dict() for module in list(sys.modules.values()): path = getattr(module, '__file__', '') if path[-4:] in ('.pyo', '.pyc'): path = path[:-1] if path and exists(path): files[path] = mtime(path) while not self.status: if not exists(self.lockfile)\ or mtime(self.lockfile) < time.time() - self.interval - 5: self.status = 'error' thread.interrupt_main() for path, lmtime in list(files.items()): if not exists(path) or mtime(path) > lmtime: self.status = 'reload' thread.interrupt_main() break time.sleep(self.interval) def __enter__(self): self.start() def __exit__(self, exc_type, exc_val, exc_tb): if not self.status: self.status = 'exit' # silent exit self.join() return exc_type is not None and issubclass(exc_type, KeyboardInterrupt) ############################################################################### # Template Adapters ############################################################ ############################################################################### class TemplateError(HTTPError): def __init__(self, message): HTTPError.__init__(self, 500, message) class BaseTemplate(object): """ Base class and minimal API for template adapters """ extensions = ['tpl','html','thtml','stpl'] settings = {} #used in prepare() defaults = {} #used in render() def __init__(self, source=None, name=None, lookup=[], encoding='utf8', **settings): """ Create a new template. If the source parameter (str or buffer) is missing, the name argument is used to guess a template filename. Subclasses can assume that self.source and/or self.filename are set. Both are strings. The lookup, encoding and settings parameters are stored as instance variables. The lookup parameter stores a list containing directory paths. The encoding parameter should be used to decode byte strings or files. The settings parameter contains a dict for engine-specific settings. """ self.name = name self.source = source.read() if hasattr(source, 'read') else source self.filename = source.filename if hasattr(source, 'filename') else None self.lookup = [os.path.abspath(x) for x in lookup] self.encoding = encoding self.settings = self.settings.copy() # Copy from class variable self.settings.update(settings) # Apply if not self.source and self.name: self.filename = self.search(self.name, self.lookup) if not self.filename: raise TemplateError('Template %s not found.' % repr(name)) if not self.source and not self.filename: raise TemplateError('No template specified.') self.prepare(**self.settings) @classmethod def search(cls, name, lookup=[]): """ Search name in all directories specified in lookup. First without, then with common extensions. Return first hit. """ if not lookup: depr('The template lookup path list should not be empty.') #0.12 lookup = ['.'] if os.path.isabs(name) and os.path.isfile(name): depr('Absolute template path names are deprecated.') #0.12 return os.path.abspath(name) for spath in lookup: spath = os.path.abspath(spath) + os.sep fname = os.path.abspath(os.path.join(spath, name)) if not fname.startswith(spath): continue if os.path.isfile(fname): return fname for ext in cls.extensions: if os.path.isfile('%s.%s' % (fname, ext)): return '%s.%s' % (fname, ext) @classmethod def global_config(cls, key, *args): ''' This reads or sets the global settings stored in class.settings. ''' if args: cls.settings = cls.settings.copy() # Make settings local to class cls.settings[key] = args[0] else: return cls.settings[key] def prepare(self, **options): """ Run preparations (parsing, caching, ...). It should be possible to call this again to refresh a template or to update settings. """ raise NotImplementedError def render(self, *args, **kwargs): """ Render the template with the specified local variables and return a single byte or unicode string. If it is a byte string, the encoding must match self.encoding. This method must be thread-safe! Local variables may be provided in dictionaries (args) or directly, as keywords (kwargs). """ raise NotImplementedError class MakoTemplate(BaseTemplate): def prepare(self, **options): from mako.template import Template from mako.lookup import TemplateLookup options.update({'input_encoding':self.encoding}) options.setdefault('format_exceptions', bool(DEBUG)) lookup = TemplateLookup(directories=self.lookup, **options) if self.source: self.tpl = Template(self.source, lookup=lookup, **options) else: self.tpl = Template(uri=self.name, filename=self.filename, lookup=lookup, **options) def render(self, *args, **kwargs): for dictarg in args: kwargs.update(dictarg) _defaults = self.defaults.copy() _defaults.update(kwargs) return self.tpl.render(**_defaults) class CheetahTemplate(BaseTemplate): def prepare(self, **options): from Cheetah.Template import Template self.context = threading.local() self.context.vars = {} options['searchList'] = [self.context.vars] if self.source: self.tpl = Template(source=self.source, **options) else: self.tpl = Template(file=self.filename, **options) def render(self, *args, **kwargs): for dictarg in args: kwargs.update(dictarg) self.context.vars.update(self.defaults) self.context.vars.update(kwargs) out = str(self.tpl) self.context.vars.clear() return out class Jinja2Template(BaseTemplate): def prepare(self, filters=None, tests=None, globals={}, **kwargs): from jinja2 import Environment, FunctionLoader if 'prefix' in kwargs: # TODO: to be removed after a while raise RuntimeError('The keyword argument `prefix` has been removed. ' 'Use the full jinja2 environment name line_statement_prefix instead.') self.env = Environment(loader=FunctionLoader(self.loader), **kwargs) if filters: self.env.filters.update(filters) if tests: self.env.tests.update(tests) if globals: self.env.globals.update(globals) if self.source: self.tpl = self.env.from_string(self.source) else: self.tpl = self.env.get_template(self.filename) def render(self, *args, **kwargs): for dictarg in args: kwargs.update(dictarg) _defaults = self.defaults.copy() _defaults.update(kwargs) return self.tpl.render(**_defaults) def loader(self, name): fname = self.search(name, self.lookup) if not fname: return with open(fname, "rb") as f: return f.read().decode(self.encoding) class SimpleTemplate(BaseTemplate): def prepare(self, escape_func=html_escape, noescape=False, syntax=None, **ka): self.cache = {} enc = self.encoding self._str = lambda x: touni(x, enc) self._escape = lambda x: escape_func(touni(x, enc)) self.syntax = syntax if noescape: self._str, self._escape = self._escape, self._str @cached_property def co(self): return compile(self.code, self.filename or '<string>', 'exec') @cached_property def code(self): source = self.source if not source: with open(self.filename, 'rb') as f: source = f.read() try: source, encoding = touni(source), 'utf8' except UnicodeError: depr('Template encodings other than utf8 are no longer supported.') #0.11 source, encoding = touni(source, 'latin1'), 'latin1' parser = StplParser(source, encoding=encoding, syntax=self.syntax) code = parser.translate() self.encoding = parser.encoding return code def _rebase(self, _env, _name=None, **kwargs): if _name is None: depr('Rebase function called without arguments.' ' You were probably looking for {{base}}?', True) #0.12 _env['_rebase'] = (_name, kwargs) def _include(self, _env, _name=None, **kwargs): if _name is None: depr('Rebase function called without arguments.' ' You were probably looking for {{base}}?', True) #0.12 env = _env.copy() env.update(kwargs) if _name not in self.cache: self.cache[_name] = self.__class__(name=_name, lookup=self.lookup) return self.cache[_name].execute(env['_stdout'], env) def execute(self, _stdout, kwargs): env = self.defaults.copy() env.update(kwargs) env.update({'_stdout': _stdout, '_printlist': _stdout.extend, 'include': functools.partial(self._include, env), 'rebase': functools.partial(self._rebase, env), '_rebase': None, '_str': self._str, '_escape': self._escape, 'get': env.get, 'setdefault': env.setdefault, 'defined': env.__contains__ }) eval(self.co, env) if env.get('_rebase'): subtpl, rargs = env.pop('_rebase') rargs['base'] = ''.join(_stdout) #copy stdout del _stdout[:] # clear stdout return self._include(env, subtpl, **rargs) return env def render(self, *args, **kwargs): """ Render the template using keyword arguments as local variables. """ env = {}; stdout = [] for dictarg in args: env.update(dictarg) env.update(kwargs) self.execute(stdout, env) return ''.join(stdout) class StplSyntaxError(TemplateError): pass class StplParser(object): ''' Parser for stpl templates. ''' _re_cache = {} #: Cache for compiled re patterns # This huge pile of voodoo magic splits python code into 8 different tokens. # 1: All kinds of python strings (trust me, it works) _re_tok = '((?m)[urbURB]?(?:\'\'(?!\')|""(?!")|\'{6}|"{6}' \ '|\'(?:[^\\\\\']|\\\\.)+?\'|"(?:[^\\\\"]|\\\\.)+?"' \ '|\'{3}(?:[^\\\\]|\\\\.|\\n)+?\'{3}' \ '|"{3}(?:[^\\\\]|\\\\.|\\n)+?"{3}))' _re_inl = _re_tok.replace('|\\n','') # We re-use this string pattern later # 2: Comments (until end of line, but not the newline itself) _re_tok += '|(#.*)' # 3,4: Open and close grouping tokens _re_tok += '|([\[\{\(])' _re_tok += '|([\]\}\)])' # 5,6: Keywords that start or continue a python block (only start of line) _re_tok += '|^([ \\t]*(?:if|for|while|with|try|def|class)\\b)' \ '|^([ \\t]*(?:elif|else|except|finally)\\b)' # 7: Our special 'end' keyword (but only if it stands alone) _re_tok += '|((?:^|;)[ \\t]*end[ \\t]*(?=(?:%(block_close)s[ \\t]*)?\\r?$|;|#))' # 8: A customizable end-of-code-block template token (only end of line) _re_tok += '|(%(block_close)s[ \\t]*(?=$))' # 9: And finally, a single newline. The 10th token is 'everything else' _re_tok += '|(\\r?\\n)' # Match the start tokens of code areas in a template _re_split = '(?m)^[ \t]*(\\\\?)((%(line_start)s)|(%(block_start)s))(%%?)' # Match inline statements (may contain python strings) _re_inl = '%%(inline_start)s((?:%s|[^\'"\n]*?)+)%%(inline_end)s' % _re_inl default_syntax = '<% %> % {{ }}' def __init__(self, source, syntax=None, encoding='utf8'): self.source, self.encoding = touni(source, encoding), encoding self.set_syntax(syntax or self.default_syntax) self.code_buffer, self.text_buffer = [], [] self.lineno, self.offset = 1, 0 self.indent, self.indent_mod = 0, 0 self.paren_depth = 0 def get_syntax(self): ''' Tokens as a space separated string (default: <% %> % {{ }}) ''' return self._syntax def set_syntax(self, syntax): self._syntax = syntax self._tokens = syntax.split() if not syntax in self._re_cache: names = 'block_start block_close line_start inline_start inline_end' etokens = map(re.escape, self._tokens) pattern_vars = dict(zip(names.split(), etokens)) patterns = (self._re_split, self._re_tok, self._re_inl) patterns = [re.compile(p%pattern_vars) for p in patterns] self._re_cache[syntax] = patterns self.re_split, self.re_tok, self.re_inl = self._re_cache[syntax] syntax = property(get_syntax, set_syntax) def translate(self): if self.offset: raise RuntimeError('Parser is a one time instance.') while True: m = self.re_split.search(self.source[self.offset:]) if m: text = self.source[self.offset:self.offset+m.start()] self.text_buffer.append(text) self.offset += m.end() if m.group(1): # New escape syntax line, sep, _ = self.source[self.offset:].partition('\n') self.text_buffer.append(m.group(2)+m.group(5)+line+sep) self.offset += len(line+sep)+1 continue elif m.group(5): # Old escape syntax depr('Escape code lines with a backslash.') #0.12 line, sep, _ = self.source[self.offset:].partition('\n') self.text_buffer.append(m.group(2)+line+sep) self.offset += len(line+sep)+1 continue self.flush_text() self.read_code(multiline=bool(m.group(4))) else: break self.text_buffer.append(self.source[self.offset:]) self.flush_text() return ''.join(self.code_buffer) def read_code(self, multiline): code_line, comment = '', '' while True: m = self.re_tok.search(self.source[self.offset:]) if not m: code_line += self.source[self.offset:] self.offset = len(self.source) self.write_code(code_line.strip(), comment) return code_line += self.source[self.offset:self.offset+m.start()] self.offset += m.end() _str, _com, _po, _pc, _blk1, _blk2, _end, _cend, _nl = m.groups() if (code_line or self.paren_depth > 0) and (_blk1 or _blk2): # a if b else c code_line += _blk1 or _blk2 continue if _str: # Python string code_line += _str elif _com: # Python comment (up to EOL) comment = _com if multiline and _com.strip().endswith(self._tokens[1]): multiline = False # Allow end-of-block in comments elif _po: # open parenthesis self.paren_depth += 1 code_line += _po elif _pc: # close parenthesis if self.paren_depth > 0: # we could check for matching parentheses here, but it's # easier to leave that to python - just check counts self.paren_depth -= 1 code_line += _pc elif _blk1: # Start-block keyword (if/for/while/def/try/...) code_line, self.indent_mod = _blk1, -1 self.indent += 1 elif _blk2: # Continue-block keyword (else/elif/except/...) code_line, self.indent_mod = _blk2, -1 elif _end: # The non-standard 'end'-keyword (ends a block) self.indent -= 1 elif _cend: # The end-code-block template token (usually '%>') if multiline: multiline = False else: code_line += _cend else: # \n self.write_code(code_line.strip(), comment) self.lineno += 1 code_line, comment, self.indent_mod = '', '', 0 if not multiline: break def flush_text(self): text = ''.join(self.text_buffer) del self.text_buffer[:] if not text: return parts, pos, nl = [], 0, '\\\n'+' '*self.indent for m in self.re_inl.finditer(text): prefix, pos = text[pos:m.start()], m.end() if prefix: parts.append(nl.join(map(repr, prefix.splitlines(True)))) if prefix.endswith('\n'): parts[-1] += nl parts.append(self.process_inline(m.group(1).strip())) if pos < len(text): prefix = text[pos:] lines = prefix.splitlines(True) if lines[-1].endswith('\\\\\n'): lines[-1] = lines[-1][:-3] elif lines[-1].endswith('\\\\\r\n'): lines[-1] = lines[-1][:-4] parts.append(nl.join(map(repr, lines))) code = '_printlist((%s,))' % ', '.join(parts) self.lineno += code.count('\n')+1 self.write_code(code) def process_inline(self, chunk): if chunk[0] == '!': return '_str(%s)' % chunk[1:] return '_escape(%s)' % chunk def write_code(self, line, comment=''): line, comment = self.fix_backward_compatibility(line, comment) code = ' ' * (self.indent+self.indent_mod) code += line.lstrip() + comment + '\n' self.code_buffer.append(code) def fix_backward_compatibility(self, line, comment): parts = line.strip().split(None, 2) if parts and parts[0] in ('include', 'rebase'): depr('The include and rebase keywords are functions now.') #0.12 if len(parts) == 1: return "_printlist([base])", comment elif len(parts) == 2: return "_=%s(%r)" % tuple(parts), comment else: return "_=%s(%r, %s)" % tuple(parts), comment if self.lineno <= 2 and not line.strip() and 'coding' in comment: m = re.match(r"#.*coding[:=]\s*([-\w.]+)", comment) if m: depr('PEP263 encoding strings in templates are deprecated.') #0.12 enc = m.group(1) self.source = self.source.encode(self.encoding).decode(enc) self.encoding = enc return line, comment.replace('coding','coding*') return line, comment def template(*args, **kwargs): ''' Get a rendered template as a string iterator. You can use a name, a filename or a template string as first parameter. Template rendering arguments can be passed as dictionaries or directly (as keyword arguments). ''' tpl = args[0] if args else None adapter = kwargs.pop('template_adapter', SimpleTemplate) lookup = kwargs.pop('template_lookup', TEMPLATE_PATH) tplid = (id(lookup), tpl) if tplid not in TEMPLATES or DEBUG: settings = kwargs.pop('template_settings', {}) if isinstance(tpl, adapter): TEMPLATES[tplid] = tpl if settings: TEMPLATES[tplid].prepare(**settings) elif "\n" in tpl or "{" in tpl or "%" in tpl or '$' in tpl: TEMPLATES[tplid] = adapter(source=tpl, lookup=lookup, **settings) else: TEMPLATES[tplid] = adapter(name=tpl, lookup=lookup, **settings) if not TEMPLATES[tplid]: abort(500, 'Template (%s) not found' % tpl) for dictarg in args[1:]: kwargs.update(dictarg) return TEMPLATES[tplid].render(kwargs) mako_template = functools.partial(template, template_adapter=MakoTemplate) cheetah_template = functools.partial(template, template_adapter=CheetahTemplate) jinja2_template = functools.partial(template, template_adapter=Jinja2Template) def view(tpl_name, **defaults): ''' Decorator: renders a template for a handler. The handler can control its behavior like that: - return a dict of template vars to fill out the template - return something other than a dict and the view decorator will not process the template, but return the handler result as is. This includes returning a HTTPResponse(dict) to get, for instance, JSON with autojson or other castfilters. ''' def decorator(func): @functools.wraps(func) def wrapper(*args, **kwargs): result = func(*args, **kwargs) if isinstance(result, (dict, DictMixin)): tplvars = defaults.copy() tplvars.update(result) return template(tpl_name, **tplvars) elif result is None: return template(tpl_name, defaults) return result return wrapper return decorator mako_view = functools.partial(view, template_adapter=MakoTemplate) cheetah_view = functools.partial(view, template_adapter=CheetahTemplate) jinja2_view = functools.partial(view, template_adapter=Jinja2Template) ############################################################################### # Constants and Globals ######################################################## ############################################################################### TEMPLATE_PATH = ['./', './views/'] TEMPLATES = {} DEBUG = False NORUN = False # If set, run() does nothing. Used by load_app() #: A dict to map HTTP status codes (e.g. 404) to phrases (e.g. 'Not Found') HTTP_CODES = httplib.responses HTTP_CODES[418] = "I'm a teapot" # RFC 2324 HTTP_CODES[422] = "Unprocessable Entity" # RFC 4918 HTTP_CODES[428] = "Precondition Required" HTTP_CODES[429] = "Too Many Requests" HTTP_CODES[431] = "Request Header Fields Too Large" HTTP_CODES[511] = "Network Authentication Required" _HTTP_STATUS_LINES = dict((k, '%d %s'%(k,v)) for (k,v) in HTTP_CODES.items()) #: The default template used for error pages. Override with @error() ERROR_PAGE_TEMPLATE = """ %%try: %%from %s import DEBUG, HTTP_CODES, request, touni <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html> <head> <title>Error: {{e.status}}</title> <style type="text/css"> html {background-color: #eee; font-family: sans;} body {background-color: #fff; border: 1px solid #ddd; padding: 15px; margin: 15px;} pre {background-color: #eee; border: 1px solid #ddd; padding: 5px;} </style> </head> <body> <h1>Error: {{e.status}}</h1> <p>Sorry, the requested URL <tt>{{repr(request.url)}}</tt> caused an error:</p> <pre>{{e.body}}</pre> %%if DEBUG and e.exception: <h2>Exception:</h2> <pre>{{repr(e.exception)}}</pre> %%end %%if DEBUG and e.traceback: <h2>Traceback:</h2> <pre>{{e.traceback}}</pre> %%end </body> </html> %%except ImportError: <b>ImportError:</b> Could not generate the error page. Please add bottle to the import path. %%end """ % __name__ #: A thread-safe instance of :class:`LocalRequest`. If accessed from within a #: request callback, this instance always refers to the *current* request #: (even on a multithreaded server). request = LocalRequest() #: A thread-safe instance of :class:`LocalResponse`. It is used to change the #: HTTP response for the *current* request. response = LocalResponse() #: A thread-safe namespace. Not used by Bottle. local = threading.local() # Initialize app stack (create first empty Bottle app) # BC: 0.6.4 and needed for run() app = default_app = AppStack() app.push() #: A virtual package that redirects import statements. #: Example: ``import bottle.ext.sqlite`` actually imports `bottle_sqlite`. ext = _ImportRedirect('bottle.ext' if __name__ == '__main__' else __name__+".ext", 'bottle_%s').module if __name__ == '__main__': opt, args, parser = _cmd_options, _cmd_args, _cmd_parser if opt.version: _stdout('Bottle %s\n'%__version__) sys.exit(0) if not args: parser.print_help() _stderr('\nError: No application specified.\n') sys.exit(1) sys.path.insert(0, '.') sys.modules.setdefault('bottle', sys.modules['__main__']) host, port = (opt.bind or 'localhost'), 8080 if ':' in host and host.rfind(']') < host.rfind(':'): host, port = host.rsplit(':', 1) host = host.strip('[]') run(args[0], host=host, port=int(port), server=opt.server, reloader=opt.reload, plugins=opt.plugin, debug=opt.debug) # THE END |
Added changelog.txt version [b2b4236d65].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | # CHANGELOG OF GRAMMALECTE ## 0.0 Alpha version, similar to Lightproof (a grammar checker for LibreOffice) ## 0.1 Lexical analysis commands with disambiguation by pattern exclusion Optional suggestions Back reference groups within error messages ## 0.2 Bi-passes engine Pass 1: paragraph by paragraph Pass 2: sentence by sentence Text preprocessor between the two passes Error positioning (by group selection) ## 0.3 Multi-passes engine Dictionary switcher Text formatter Lexicographer French Conjugueur ## 0.4 Suggestion mechanisms Simplier user options writing Application Launcher Author field edition ## 0.5 Grammalecte is an autonomous package, free from Hunspell and LibreOffice Indexable binary dictionary (DAWG-FSA) generator Disambiguator Multi-actions rules (bi-passes engine again) Simplier options for word boundaries Unit tests |
Added cli.py version [844acbe744].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 | #!python3 import sys import os.path import argparse import json import grammalecte.fr as gce import grammalecte.fr.lexicographe as lxg import grammalecte.fr.textformatter as tf import grammalecte.text as txt import grammalecte.tokenizer as tkz from grammalecte.echo import echo _EXAMPLE = "Quoi ? Racontes ! Racontes-moi ! Bon sangg, parles ! Oui. Il y a des menteur partout. " \ "Je suit sidéré par la brutales arrogance de cette homme-là. Quelle salopard ! Un escrocs de la pire espece. " \ "Quant sera t’il châtiés pour ses mensonge ? Merde ! J’en aie marre." _HELP = """ /help /h show this text ?word1 [word2] ... words analysis /lopt /lo list options /+ option1 [option2] ... activate grammar checking options /- option1 [option2] ... deactivate grammar checking options /lrules [pattern] /lr list rules /--rule1 [rule2] ... deactivate grammar checking rule /++rule1 [rule2] ... reactivate grammar checking rule /quit /q exit """ def _getText (sInputText): sText = input(sInputText) if sText == "*": return _EXAMPLE if sys.platform == "win32": # Apparently, the console transforms «’» in «'». # So we reverse it to avoid many useless warnings. sText = sText.replace("'", "’") return sText def _getErrors (sText, oTokenizer, oDict, bContext=False, bDebug=False): "returns a tuple: (grammar errors, spelling errors)" aGrammErrs = gce.parse(sText, "FR", bDebug=bDebug, bContext=bContext) aSpellErrs = [] for dToken in oTokenizer.genTokens(sText): if dToken['sType'] == "WORD" and not oDict.isValidToken(dToken['sValue']): aSpellErrs.append(dToken) return aGrammErrs, aSpellErrs def generateText (sText, oTokenizer, oDict, bDebug=False, bEmptyIfNoErrors=False, nWidth=100): aGrammErrs, aSpellErrs = _getErrors(sText, oTokenizer, oDict, False, bDebug) if bEmptyIfNoErrors and not aGrammErrs and not aSpellErrs: return "" return txt.generateParagraph(sText, aGrammErrs, aSpellErrs, nWidth) def generateJSON (iIndex, sText, oTokenizer, oDict, bContext=False, bDebug=False, bEmptyIfNoErrors=False, lLineSet=None, bReturnText=False): aGrammErrs, aSpellErrs = _getErrors(sText, oTokenizer, oDict, bContext, bDebug) aGrammErrs = list(aGrammErrs) if bEmptyIfNoErrors and not aGrammErrs and not aSpellErrs: return "" if lLineSet: aGrammErrs, aSpellErrs = txt.convertToXY(aGrammErrs, aSpellErrs, lLineSet) return json.dumps({ "lGrammarErrors": aGrammErrs, "lSpellingErrors": aSpellErrs }, ensure_ascii=False) if bReturnText: return json.dumps({ "iParagraph": iIndex, "sText": sText, "lGrammarErrors": aGrammErrs, "lSpellingErrors": aSpellErrs }, ensure_ascii=False) return json.dumps({ "iParagraph": iIndex, "lGrammarErrors": aGrammErrs, "lSpellingErrors": aSpellErrs }, ensure_ascii=False) def readfile (spf): "generator: returns file line by line" if os.path.isfile(spf): with open(spf, "r", encoding="utf-8") as hSrc: for sLine in hSrc: yield sLine else: print("# Error: file not found.") def readfileAndConcatLines (spf): "generator: returns text by list of lines not separated by an empty line" lLine = [] for i, sLine in enumerate(readfile(spf), 1): if sLine.strip(): lLine.append((i, sLine)) elif lLine: yield lLine lLine = [] if lLine: yield lLine def output (sText, hDst=None): if not hDst: echo(sText, end="") else: hDst.write(sText) def main (): xParser = argparse.ArgumentParser() xParser.add_argument("-f", "--file", help="parse file (UTF-8 required!) [on Windows, -f is similar to -ff]", type=str) xParser.add_argument("-ff", "--file_to_file", help="parse file (UTF-8 required!) and create a result file (*.res.txt)", type=str) xParser.add_argument("-owe", "--only_when_errors", help="display results only when there are errors", action="store_true") xParser.add_argument("-j", "--json", help="generate list of errors in JSON (only with option --file or --file_to_file)", action="store_true") xParser.add_argument("-cl", "--concat_lines", help="concatenate lines not separated by an empty paragraph (only with option --file or --file_to_file)", action="store_true") xParser.add_argument("-tf", "--textformatter", help="auto-format text according to typographical rules (unavailable with option --concat_lines)", action="store_true") xParser.add_argument("-tfo", "--textformatteronly", help="auto-format text and disable grammar checking (only with option --file or --file_to_file)", action="store_true") xParser.add_argument("-ctx", "--context", help="return errors with context (only with option --json)", action="store_true") xParser.add_argument("-w", "--width", help="width in characters (40 < width < 200; default: 100)", type=int, choices=range(40,201,10), default=100) xParser.add_argument("-lo", "--list_options", help="list options", action="store_true") xParser.add_argument("-lr", "--list_rules", nargs="?", help="list rules [regex pattern as filter]", const="*") xParser.add_argument("-on", "--opt_on", nargs="+", help="activate options") xParser.add_argument("-off", "--opt_off", nargs="+", help="deactivate options") xParser.add_argument("-roff", "--rule_off", nargs="+", help="deactivate rules") xParser.add_argument("-d", "--debug", help="debugging mode (only in interactive mode)", action="store_true") xArgs = xParser.parse_args() gce.load() if not xArgs.json: echo("Grammalecte v{}".format(gce.version)) oDict = gce.getDictionary() oTokenizer = tkz.Tokenizer("fr") oLexGraphe = lxg.Lexicographe(oDict) if xArgs.textformatter or xArgs.textformatteronly: oTF = tf.TextFormatter() if xArgs.list_options or xArgs.list_rules: if xArgs.list_options: gce.displayOptions("fr") if xArgs.list_rules: gce.displayRules(None if xArgs.list_rules == "*" else xArgs.list_rules) exit() if not xArgs.json: xArgs.context = False gce.setOptions({"html": True, "latex": True}) if xArgs.opt_on: gce.setOptions({ opt:True for opt in xArgs.opt_on if opt in gce.getOptions() }) if xArgs.opt_off: gce.setOptions({ opt:False for opt in xArgs.opt_off if opt in gce.getOptions() }) if xArgs.rule_off: for sRule in xArgs.rule_off: gce.ignoreRule(sRule) sFile = xArgs.file or xArgs.file_to_file if sFile: # file processing hDst = open(sFile[:sFile.rfind(".")]+".res.txt", "w", encoding="utf-8", newline="\n") if xArgs.file_to_file or sys.platform == "win32" else None bComma = False if xArgs.json: output('{ "grammalecte": "'+gce.version+'", "lang": "'+gce.lang+'", "data" : [\n', hDst) if not xArgs.concat_lines: # pas de concaténation des lignes for i, sText in enumerate(readfile(sFile), 1): if xArgs.textformatter or xArgs.textformatteronly: sText = oTF.formatText(sText) if xArgs.textformatteronly: output(sText, hDst) else: if xArgs.json: sText = generateJSON(i, sText, oTokenizer, oDict, bContext=xArgs.context, bDebug=False, bEmptyIfNoErrors=xArgs.only_when_errors, bReturnText=xArgs.textformatter) else: sText = generateText(sText, oTokenizer, oDict, bDebug=False, bEmptyIfNoErrors=xArgs.only_when_errors, nWidth=xArgs.width) if sText: if xArgs.json and bComma: output(",\n", hDst) output(sText, hDst) bComma = True if hDst: echo("§ %d\r" % i, end="", flush=True) else: # concaténation des lignes non séparées par une ligne vide for i, lLine in enumerate(readfileAndConcatLines(sFile), 1): sText, lLineSet = txt.createParagraphWithLines(lLine) if xArgs.json: sText = generateJSON(i, sText, oTokenizer, oDict, bContext=xArgs.context, bDebug=False, bEmptyIfNoErrors=xArgs.only_when_errors, lLineSet=lLineSet) else: sText = generateText(sText, oTokenizer, oDict, bDebug=False, bEmptyIfNoErrors=xArgs.only_when_errors, nWidth=xArgs.width) if sText: if xArgs.json and bComma: output(",\n", hDst) output(sText, hDst) bComma = True if hDst: echo("§ %d\r" % i, end="", flush=True) if xArgs.json: output("\n]}\n", hDst) else: # pseudo-console sInputText = "\n~==========~ Enter your text [/h /q] ~==========~\n" sText = _getText(sInputText) while True: if sText.startswith("?"): for sWord in sText[1:].strip().split(): if sWord: echo("* {}".format(sWord)) for sMorph in oDict.getMorph(sWord): echo(" {:<32} {}".format(sMorph, oLexGraphe.formatTags(sMorph))) elif sText.startswith("/+ "): gce.setOptions({ opt:True for opt in sText[3:].strip().split() if opt in gce.getOptions() }) echo("done") elif sText.startswith("/- "): gce.setOptions({ opt:False for opt in sText[3:].strip().split() if opt in gce.getOptions() }) echo("done") elif sText.startswith("/-- "): for sRule in sText[3:].strip().split(): gce.ignoreRule(sRule) echo("done") elif sText.startswith("/++ "): for sRule in sText[3:].strip().split(): gce.reactivateRule(sRule) echo("done") elif sText == "/debug" or sText == "/d": xArgs.debug = not(xArgs.debug) echo("debug mode on" if xArgs.debug else "debug mode off") elif sText == "/textformatter" or sText == "/tf": xArgs.textformatter = not(xArgs.textformatter) echo("textformatter on" if xArgs.debug else "textformatter off") elif sText == "/help" or sText == "/h": echo(_HELP) elif sText == "/lopt" or sText == "/l": gce.displayOptions("fr") elif sText.startswith("/lr"): sText = sText.strip() sFilter = sText[sText.find(" "):].strip() if sText != "/lr" and sText != "/rules" else None gce.displayRules(sFilter) elif sText == "/quit" or sText == "/q": break elif sText.startswith("/rl"): # reload (todo) pass else: for sParagraph in txt.getParagraph(sText): if xArgs.textformatter: sText = oTF.formatText(sText) sRes = generateText(sText, oTokenizer, oDict, bDebug=xArgs.debug, bEmptyIfNoErrors=xArgs.only_when_errors, nWidth=xArgs.width) if sRes: echo("\n" + sRes) else: echo("\nNo error found.") sText = _getText(sInputText) if __name__ == '__main__': main() |
Added compile_rules.py version [7ac4ebe558].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 | import re import sys import traceback import copy import json from distutils import file_util DEF = {} FUNCTIONS = [] JSREGEXES = {} WORDLIMITLEFT = r"(?<![\w.,–-])" # r"(?<![-.,—])\b" seems slower WORDLIMITRIGHT = r"(?![\w–-])" # r"\b(?!-—)" seems slower def prepareFunction (s): s = s.replace("__also__", "bCondMemo") s = s.replace("__else__", "not bCondMemo") s = re.sub(r"(select|exclude)[(][\\](\d+)", '\\1(dDA, m.start(\\2), m.group(\\2)', s) s = re.sub(r"define[(][\\](\d+)", 'define(dDA, m.start(\\1)', s) s = re.sub(r"(morph|morphex|displayInfo)[(][\\](\d+)", '\\1((m.start(\\2), m.group(\\2))', s) s = re.sub(r"(morph|morphex|displayInfo)[(]", '\\1(dDA, ', s) s = re.sub(r"(sugg\w+|switch\w+)\(@", '\\1(m.group(i[4])', s) s = re.sub(r"word\(\s*1\b", 'nextword1(s, m.end()', s) # word(1) s = re.sub(r"word\(\s*-1\b", 'prevword1(s, m.start()', s) # word(-1) s = re.sub(r"word\(\s*(\d)", 'nextword(s, m.end(), \\1', s) # word(n) s = re.sub(r"word\(\s*-(\d)", 'prevword(s, m.start(), \\1', s) # word(-n) s = re.sub(r"before\(\s*", 'look(s[:m.start()], ', s) # before(s) s = re.sub(r"after\(\s*", 'look(s[m.end():], ', s) # after(s) s = re.sub(r"textarea\(\s*", 'look(s, ', s) # textarea(s) s = re.sub(r"before_chk1\(\s*", 'look_chk1(dDA, s[:m.start()], 0, ', s) # before_chk1(s) s = re.sub(r"after_chk1\(\s*", 'look_chk1(dDA, s[m.end():], m.end(), ', s) # after_chk1(s) s = re.sub(r"textarea_chk1\(\s*", 'look_chk1(dDA, s, 0, ', s) # textarea_chk1(s) s = re.sub(r"/0", 'sx[m.start():m.end()]', s) # /0 s = re.sub(r"before0\(\s*", 'look(sx[:m.start()], ', s) # before0(s) s = re.sub(r"after0\(\s*", 'look(sx[m.end():], ', s) # after0(s) s = re.sub(r"textarea0\(\s*", 'look(sx, ', s) # textarea0(s) s = re.sub(r"before0_chk1\(\s*", 'look_chk1(dDA, sx[:m.start()], 0, ', s) # before0_chk1(s) s = re.sub(r"after0_chk1\(\s*", 'look_chk1(dDA, sx[m.end():], m.end(), ', s) # after0_chk1(s) s = re.sub(r"textarea0_chk1\(\s*", 'look_chk1(dDA, sx, 0, ', s) # textarea0_chk1(s) s = re.sub(r"isEndOfNG\(\s*\)", 'isEndOfNG(dDA, s[m.end():], m.end())', s) # isEndOfNG(s) s = re.sub(r"isNextNotCOD\(\s*\)", 'isNextNotCOD(dDA, s[m.end():], m.end())', s) # isNextNotCOD(s) s = re.sub(r"isNextVerb\(\s*\)", 'isNextVerb(dDA, s[m.end():], m.end())', s) # isNextVerb(s) s = re.sub(r"\bspell *[(]", '_oDict.isValid(', s) s = re.sub(r"[\\](\d+)", 'm.group(\\1)', s) return s def py2js (sCode): "convert Python code to JavaScript code" # Python 2.x unicode strings sCode = re.sub('\\b[ur]"', '"', sCode) sCode = re.sub("\\b[ur]'", "'", sCode) # operators sCode = sCode.replace(" and ", " && ") sCode = sCode.replace(" or ", " || ") sCode = re.sub("\\bnot\\b", "!", sCode) sCode = re.sub("(.+) if (.+) else (.+)", "(\\2) ? \\1 : \\3", sCode) # boolean sCode = sCode.replace("False", "false") sCode = sCode.replace("True", "true") sCode = sCode.replace("bool", "Boolean") # methods sCode = sCode.replace(".__len__()", ".length") sCode = sCode.replace(".endswith", ".endsWith") sCode = sCode.replace(".find", ".indexOf") sCode = sCode.replace(".startswith", ".startsWith") sCode = sCode.replace(".lower", ".toLowerCase") sCode = sCode.replace(".upper", ".toUpperCase") sCode = sCode.replace(".isdigit", "._isDigit") sCode = sCode.replace(".isupper", "._isUpperCase") sCode = sCode.replace(".islower", "._isLowerCase") sCode = sCode.replace(".istitle", "._isTitle") sCode = sCode.replace(".capitalize", "._toCapitalize") sCode = sCode.replace(".strip", "._trim") sCode = sCode.replace(".lstrip", "._trimLeft") sCode = sCode.replace(".rstrip", "._trimRight") sCode = sCode.replace('.replace("."', ".replace(/\./g") sCode = sCode.replace('.replace("..."', ".replace(/\.\.\./g") sCode = re.sub('.replace\("([^"]+)" ?,', ".replace(/\\1/g,", sCode) # regex sCode = re.sub('re.search\("([^"]+)", *(m.group\(\\d\))\)', "(\\2.search(/\\1/) >= 0)", sCode) sCode = re.sub(".search\\(/\\(\\?i\\)([^/]+)/\\) >= 0\\)", ".search(/\\1/i) >= 0)", sCode) sCode = re.sub('(look\\(sx?[][.a-z:()]*), "\\(\\?i\\)([^"]+)"', "\\1, /\\2/i", sCode) sCode = re.sub('(look\\(sx?[][.a-z:()]*), "([^"]+)"', "\\1, /\\2/", sCode) sCode = re.sub('(look_chk1\\(dDA, sx?[][.a-z:()]*, [0-9a-z.()]+), "\\(\\?i\\)([^"]+)"', "\\1, /\\2/i", sCode) sCode = re.sub('(look_chk1\\(dDA, sx?[][.a-z:()]*, [0-9a-z.()]+), "([^"]+)"', "\\1, /\\2/i", sCode) sCode = sCode.replace("(?<!-)", "") # todo # slices sCode = sCode.replace("[:m.start()]", ".slice(0,m.index)") sCode = sCode.replace("[m.end():]", ".slice(m.end[0])") sCode = sCode.replace("[m.start():m.end()]", ".slice(m.index, m.end[0])") sCode = re.sub("\\[(-?\\d+):(-?\\d+)\\]", ".slice(\\1,\\2)", sCode) sCode = re.sub("\\[(-?\\d+):\\]", ".slice(\\1)", sCode) sCode = re.sub("\\[:(-?\\d+)\\]", ".slice(0,\\1)", sCode) # regex matches sCode = sCode.replace(".end()", ".end[0]") sCode = sCode.replace(".start()", ".index") sCode = sCode.replace("m.group()", "m[0]") sCode = re.sub("\\.start\\((\\d+)\\)", ".start[\\1]", sCode) sCode = re.sub("m\\.group\\((\\d+)\\)", "m[\\1]", sCode) # tuples -> lists sCode = re.sub("\((m\.start\[\\d+\], m\[\\d+\])\)", "[\\1]", sCode) # regex sCode = sCode.replace("\w[\w-]+", "[a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯfi-st][a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯfi-st-]+") sCode = sCode.replace(r"/\w/", "/[a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯfi-st]/") sCode = sCode.replace(r"[\w-]", "[a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯfi-st-]") sCode = sCode.replace(r"[\w,]", "[a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯfi-st,]") return sCode def uppercase (s, sLang): "(flag i is not enough): converts regex to uppercase regex: 'foo' becomes '[Ff][Oo][Oo]', but 'Bar' becomes 'B[Aa][Rr]'." sUp = "" nState = 0 for i in range(0, len(s)): c = s[i] if c == "[": nState = 1 if nState == 1 and c == "]": nState = 0 if c == "<" and i > 3 and s[i-3:i] == "(?P": nState = 2 if nState == 2 and c == ">": nState = 0 if c == "?" and i > 0 and s[i-1:i] == "(" and s[i+1:i+2] != ":": nState = 5 if nState == 5 and c == ")": nState = 0 if c.isalpha() and c.islower() and nState == 0: if c == "i" and (sLang == "tr" or sLang == "az"): sUp += "[İ" + c + "]" else: sUp += "[" + c.upper() + c + "]" elif c.isalpha() and c.islower() and nState == 1 and s[i+1:i+2] != "-": if s[i-1:i] == "-" and s[i-2:i-1].islower(): # [a-z] -> [a-zA-Z] sUp += c + s[i-2:i-1].upper() + "-" + c.upper() elif c == "i" and (sLang == "tr" or sLang == "az"): sUp += "İ" + c else: sUp += c.upper() + c else: sUp += c if c == "\\": nState = 4 elif nState == 4: nState = 0 return sUp def countGroupInRegex (sRegex): try: return re.compile(sRegex).groups except: traceback.print_exc() print(sRegex) return 0 def createRule (s, nIdLine, sLang, bParagraph, dOptPriority): "returns rule as list [option name, regex, bCaseInsensitive, identifier, list of actions]" global JSREGEXES #### OPTIONS sLineId = str(nIdLine) + ("p" if bParagraph else "s") sRuleId = sLineId sOption = False # False or [a-z0-9]+ name nPriority = 4 # Default is 4, value must be between 0 and 9 tGroups = None # code for groups positioning (only useful for JavaScript) cCaseMode = 'i' # i: case insensitive, s: case sensitive, u: uppercasing allowed cWordLimitLeft = '[' # [: word limit, <: no specific limit cWordLimitRight = ']' # ]: word limit, >: no specific limit m = re.match("^__([[<]\\w[]>])(/[a-zA-Z0-9]+|)(\\(\\w+\\)|)(![0-9]|)__ *", s) if m: cWordLimitLeft = m.group(1)[0] cCaseMode = m.group(1)[1] cWordLimitRight = m.group(1)[2] sOption = m.group(2)[1:] if m.group(2) else False if m.group(3): sRuleId = m.group(3)[1:-1] nPriority = dOptPriority.get(sOption, 4) if m.group(4): nPriority = int(m.group(4)[1:]) s = s[m.end(0):] else: print("Warning. No option defined at line: " + sLineId) #### REGEX TRIGGER i = s.find(" <<-") if i == -1: print("# Error: no condition at line " + sLineId) return None sRegex = s[:i].strip() s = s[i+4:] # JS groups positioning codes m = re.search("@@\\S+", sRegex) if m: tGroups = groupsPositioningCodeToList(sRegex[m.start()+2:]) sRegex = sRegex[:m.start()].strip() # JS regex m = re.search("<js>.+</js>i?", sRegex) if m: JSREGEXES[sLineId] = m.group(0) sRegex = sRegex[:m.start()].strip() if "<js>" in sRegex or "</js>" in sRegex: print("# Error: JavaScript regex not delimited at line " + sLineId) return None # quotes ? if sRegex.startswith('"') and sRegex.endswith('"'): sRegex = sRegex[1:-1] ## definitions for sDef, sRepl in DEF.items(): sRegex = sRegex.replace(sDef, sRepl) ## count number of groups (must be done before modifying the regex) nGroup = countGroupInRegex(sRegex) if nGroup > 0: if not tGroups: print("# warning: groups positioning code for JavaScript should be defined at line " + sLineId) else: if nGroup != len(tGroups): print("# error: groups positioning code irrelevant at line " + sLineId) ## word limit if cWordLimitLeft == '[' and not sRegex.startswith(("^", '’', "'", ",")): sRegex = WORDLIMITLEFT + sRegex if cWordLimitRight == ']' and not sRegex.endswith(("$", '’', "'", ",")): sRegex = sRegex + WORDLIMITRIGHT ## casing mode if cCaseMode == "i": bCaseInsensitive = True if not sRegex.startswith("(?i)"): sRegex = "(?i)" + sRegex elif cCaseMode == "s": bCaseInsensitive = False sRegex = sRegex.replace("(?i)", "") elif cCaseMode == "u": bCaseInsensitive = False sRegex = sRegex.replace("(?i)", "") sRegex = uppercase(sRegex, sLang) else: print("# Unknown case mode [" + cCaseMode + "] at line " + sLineId) ## check regex try: z = re.compile(sRegex) except: print("# Regex error at line ", nIdLine) print(sRegex) traceback.print_exc() return None ## groups in non grouping parenthesis for x in re.finditer("\(\?:[^)]*\([[\w -]", sRegex): print("# Warning: groups inside non grouping parenthesis in regex at line " + sLineId) #### PARSE ACTIONS lActions = [] nAction = 1 for sAction in s.split(" <<- "): t = createAction(sLineId + "_" + str(nAction), sAction, nGroup) nAction += 1 if t: lActions.append(t) if not lActions: return None return [sOption, sRegex, bCaseInsensitive, sLineId, sRuleId, nPriority, lActions, tGroups] def createAction (sIdAction, sAction, nGroup): "returns an action to perform as a tuple (condition, action type, action[, iGroup [, message, URL ]])" global FUNCTIONS m = re.search(r"([-~=>])(\d*|)>>", sAction) if not m: print("# No action at line " + sIdAction) return None #### CONDITION sCondition = sAction[:m.start()].strip() if sCondition: sCondition = prepareFunction(sCondition) FUNCTIONS.append(("c"+sIdAction, sCondition)) for x in re.finditer("[.](?:group|start|end)[(](\d+)[)]", sCondition): if int(x.group(1)) > nGroup: print("# Error in groups in condition at line " + sIdAction + " ("+str(nGroup)+" groups only)") if ".match" in sCondition: print("# Error. JS compatibility. Don't use .match() in condition, use .search()") sCondition = "c"+sIdAction else: sCondition = None #### iGroup / positioning iGroup = int(m.group(2)) if m.group(2) else 0 if iGroup > nGroup: print("# Selected group > group number in regex at line " + sIdAction) #### ACTION sAction = sAction[m.end():].strip() cAction = m.group(1) if cAction == "-": ## error iMsg = sAction.find(" # ") sMsg = sAction[iMsg+3:].strip() sAction = sAction[:iMsg].strip() sURL = "" mURL = re.search("[|] *(https?://.*)", sMsg) if mURL: sURL = mURL.group(1).strip() sMsg = sMsg[:mURL.start(0)].strip() if sMsg[0:1] == "=": sMsg = prepareFunction(sMsg[1:]) FUNCTIONS.append(("m"+sIdAction, sMsg)) for x in re.finditer("group[(](\d+)[)]", sMsg): if int(x.group(1)) > nGroup: print("# error in groups in message at line " + sIdAction + " ("+str(nGroup)+" groups only)") sMsg = "=m"+sIdAction else: for x in re.finditer(r"\\(\d+)", sMsg): if int(x.group(1)) > nGroup: print("# error in groups in message at line " + sIdAction + " ("+str(nGroup)+" groups only)") if re.search("[.]\\w+[(]", sMsg): print("# error in message at line " + sIdAction + ": This message looks like code. Line should begin with =") if sAction[0:1] == "=" or cAction == "=": if "define" in sAction and not re.search(r"define\(\\\d+ *, *\[.*\] *\)", sAction): print("# error in action at line " + sIdAction + ": second argument for define must be a list of strings") sAction = prepareFunction(sAction) sAction = sAction.replace("m.group(i[4])", "m.group("+str(iGroup)+")") for x in re.finditer("group[(](\d+)[)]", sAction): if int(x.group(1)) > nGroup: print("# error in groups in replacement at line " + sIdAction + " ("+str(nGroup)+" groups only)") else: for x in re.finditer(r"\\(\d+)", sAction): if int(x.group(1)) > nGroup: print("# error in groups in replacement at line " + sIdAction + " ("+str(nGroup)+" groups only)") if re.search("[.]\\w+[(]", sAction): print("# error in action at line " + sIdAction + ": This action looks like code. Line should begin with =") if cAction == "-": ## error detected if not sAction: print("# error in action at line " + sIdAction + ": This action is empty.") if sAction[0:1] == "=": FUNCTIONS.append(("s"+sIdAction, sAction[1:])) sAction = "=s"+sIdAction elif sAction.startswith('"') and sAction.endswith('"'): sAction = sAction[1:-1] if not sMsg: print("# error in action at line " + sIdAction + ": the message is empty.") return [sCondition, cAction, sAction, iGroup, sMsg, sURL] elif cAction == "~": ## text preprocessor if not sAction: print("# error in action at line " + sIdAction + ": This action is empty.") if sAction[0:1] == "=": FUNCTIONS.append(("p"+sIdAction, sAction[1:])) sAction = "=p"+sIdAction elif sAction.startswith('"') and sAction.endswith('"'): sAction = sAction[1:-1] return [sCondition, cAction, sAction, iGroup] elif cAction == "=": ## disambiguator if sAction[0:1] == "=": sAction = sAction[1:] if not sAction: print("# error in action at line " + sIdAction + ": This action is empty.") FUNCTIONS.append(("d"+sIdAction, sAction)) sAction = "d"+sIdAction return [sCondition, cAction, sAction] elif cAction == ">": ## no action, break loop if condition is False return [sCondition, cAction, ""] else: print("# Unknown action at line " + sIdAction) return None def regex2js (sRegex): "converts Python regex to JS regex and returns JS regex and list of negative lookbefore assertions" # Latin letters: http://unicode-table.com/fr/ # 0-9 and _ # A-Z # a-z # À-Ö 00C0-00D6 (upper case) # Ø-ß 00D8-00DF (upper case) # à-ö 00E0-00F6 (lower case) # ø-ÿ 00F8-00FF (lower case) # Ā-ʯ 0100-02AF (mixed) # -> a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯ bCaseInsensitive = False if "(?i)" in sRegex: sRegex = sRegex.replace("(?i)", "") bCaseInsensitive = True lNegLookBeforeRegex = [] if WORDLIMITLEFT in sRegex: sRegex = sRegex.replace(WORDLIMITLEFT, "") lNegLookBeforeRegex = ["[a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯ.,–-]$"] sRegex = sRegex.replace("[\\w", "[a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯ") sRegex = sRegex.replace("\\w", "[a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯ]") sRegex = sRegex.replace("[.]", r"\.") if not sRegex.startswith("<js>"): sRegex = sRegex.replace("/", r"\/") m = re.search(r"\(\?<!([^()]+)\)", sRegex) # Negative lookbefore assertion should always be at the beginning of regex if m: lNegLookBeforeRegex.append(m.group(1)+"$") sRegex = sRegex.replace(m.group(0), "") if "(?<" in sRegex: print("# Warning. Lookbefore assertion not changed in:\n ") print(sRegex) if sRegex.startswith("<js>"): sRegex = sRegex.replace('<js>', '/').replace('</js>i', '/ig').replace('</js>', '/g') else: sRegex = "/" + sRegex + "/g" if bCaseInsensitive and not sRegex.endswith("/ig"): sRegex = sRegex + "i" if not lNegLookBeforeRegex: lNegLookBeforeRegex = None return (sRegex, lNegLookBeforeRegex) def pyRuleToJS (lRule): lRuleJS = copy.deepcopy(lRule) del lRule[-1] # tGroups positioning codes are useless for Python # error messages for aAction in lRuleJS[6]: if aAction[1] == "-": aAction[4] = aAction[4].replace("« ", "« ").replace(" »", " »") # js regexes lRuleJS[1], lNegLookBehindRegex = regex2js( JSREGEXES.get(lRuleJS[3], lRuleJS[1]) ) lRuleJS.append(lNegLookBehindRegex) return lRuleJS def writeRulesToJSArray (lRules): sArray = "[\n" for sOption, aRuleGroup in lRules: sArray += ' ["' + sOption + '", [\n' if sOption else " [false, [\n" for sRegex, bCaseInsensitive, sLineId, sRuleId, nPriority, lActions, aGroups, aNegLookBehindRegex in aRuleGroup: sArray += ' [' + sRegex + ", " sArray += "true, " if bCaseInsensitive else "false, " sArray += '"' + sLineId + '", ' sArray += '"' + sRuleId + '", ' sArray += str(nPriority) + ", " sArray += json.dumps(lActions, ensure_ascii=False) + ", " sArray += json.dumps(aGroups, ensure_ascii=False) + ", " sArray += json.dumps(aNegLookBehindRegex, ensure_ascii=False) + "],\n" sArray += " ]],\n" sArray += "]" return sArray def groupsPositioningCodeToList (sGroupsPositioningCode): if not sGroupsPositioningCode: return None return [ int(sCode) if sCode.isdigit() or (sCode[0:1] == "-" and sCode[1:].isdigit()) else sCode \ for sCode in sGroupsPositioningCode.split(",") ] def _calcRulesStats (lRules): d = {'=':0, '~': 0, '-': 0, '>': 0} for aRule in lRules: for aAction in aRule[6]: d[aAction[1]] = d[aAction[1]] + 1 return (d, len(lRules)) def displayStats (lParagraphRules, lSentenceRules): print(" {:>18} {:>18} {:>18} {:>18}".format("DISAMBIGUATOR", "TEXT PROCESSOR", "GRAMMAR CHECKING", "REGEX")) d, nRule = _calcRulesStats(lParagraphRules) print("§ {:>10} actions {:>10} actions {:>10} actions in {:>8} rules".format(d['='], d['~'], d['-'], nRule)) d, nRule = _calcRulesStats(lSentenceRules) print("s {:>10} actions {:>10} actions {:>10} actions in {:>8} rules".format(d['='], d['~'], d['-'], nRule)) def mergeRulesByOption (lRules): "returns a list of tuples [option, list of rules] keeping the rules order" lFinal = [] lTemp = [] sOption = None for aRule in lRules: if aRule[0] != sOption: if sOption != None: lFinal.append([sOption, lTemp]) # new tuple sOption = aRule[0] lTemp = [] lTemp.append(aRule[1:]) lFinal.append([sOption, lTemp]) return lFinal def prepareOptions (lOptionLines): "returns a dictionary with data about options" sLang = "" lStructOpt = [] lOpt = [] dOptLabel = {} dOptPriority = {} for sLine in lOptionLines: sLine = sLine.strip() if sLine.startswith("OPTGROUP/"): m = re.match("OPTGROUP/([a-z0-9]+):(.+)$", sLine) lStructOpt.append( (m.group(1), list(map(str.split, m.group(2).split(",")))) ) elif sLine.startswith("OPTSOFTWARE:"): lOpt = [ [s, {}] for s in sLine[12:].strip().split() ] # don’t use tuples (s, {}), because unknown to JS elif sLine.startswith("OPT/"): m = re.match("OPT/([a-z0-9]+):(.+)$", sLine) for i, sOpt in enumerate(m.group(2).split()): lOpt[i][1][m.group(1)] = eval(sOpt) elif sLine.startswith("OPTPRIORITY/"): m = re.match("OPTPRIORITY/([a-z0-9]+): *([0-9])$", sLine) dOptPriority[m.group(1)] = int(m.group(2)) elif sLine.startswith("OPTLANG/"): m = re.match("OPTLANG/([a-z][a-z](?:_[A-Z][A-Z]|)):(.+)$", sLine) sLang = m.group(1)[:2] dOptLabel[sLang] = { "__optiontitle__": m.group(2).strip() } elif sLine.startswith("OPTLABEL/"): m = re.match("OPTLABEL/([a-z0-9]+):(.+)$", sLine) dOptLabel[sLang][m.group(1)] = list(map(str.strip, m.group(2).split("|"))) if "|" in m.group(2) else [m.group(2).strip(), ""] else: print("# Error. Wrong option line in:\n ") print(sLine) print(" options defined for: " + ", ".join([ t[0] for t in lOpt ])) dOptions = { "lStructOpt": lStructOpt, "dOptLabel": dOptLabel } dOptions.update({ "dOpt"+k: v for k, v in lOpt }) return dOptions, dOptPriority def make (lRules, sLang, bJavaScript): "compile rules" # removing comments, zeroing empty lines, creating definitions, storing tests, merging rule lines print(" parsing rules...") global DEF lLine = [] lRuleLine = [] lTest = [] lOpt = [] for i, sLine in enumerate(lRules, 1): if sLine.startswith('#END'): break elif sLine.startswith("#"): pass elif sLine.startswith("DEF:"): m = re.match("DEF: +([a-zA-Z_][a-zA-Z_0-9]*) +(.+)$", sLine.strip()) if m: DEF["{"+m.group(1)+"}"] = m.group(2) else: print("Error in definition: ", end="") print(sLine.strip()) elif sLine.startswith("TEST:"): lTest.append("{:<8}".format(i) + " " + sLine[5:].lstrip()) elif sLine.startswith("TODO:"): pass elif sLine.startswith(("OPTGROUP/", "OPTSOFTWARE:", "OPT/", "OPTLANG/", "OPTLABEL/", "OPTPRIORITY/")): lOpt.append(sLine) elif re.match("[ \t]*$", sLine): pass elif sLine.startswith((" ", "\t")): lRuleLine[len(lRuleLine)-1][1] += " " + sLine.strip() else: lRuleLine.append([i, sLine.strip()]) # generating options files print(" parsing options...") try: dOptions, dOptPriority = prepareOptions(lOpt) except: traceback.print_exc() exit() # generating test files print(" generating test files...") with open("tests/"+sLang+"/gc_test.txt", "w", encoding="utf-8", newline="\n") as hDstPy, \ open("gc_lang/"+sLang+"/modules-js/tests_data.json", "w", encoding="utf-8", newline="\n") as hDstJS: hDstPy.write("# TESTS FOR LANG ["+sLang+"]\n\n") for sLine in lTest: hDstPy.write(sLine) hDstJS.write('{ "aData": ' + json.dumps(lTest, ensure_ascii=False) + " }\n") # processing print(" preparing rules...") bParagraph = True lParagraphRules = [] lSentenceRules = [] lParagraphRulesJS = [] lSentenceRulesJS = [] for nLine, sLine in lRuleLine: if sLine: if sLine == "[++]": bParagraph = False else: aRule = createRule(sLine, nLine, sLang, bParagraph, dOptPriority) if aRule: if bParagraph: lParagraphRules.append(aRule) lParagraphRulesJS.append(pyRuleToJS(aRule)) else: lSentenceRules.append(aRule) lSentenceRulesJS.append(pyRuleToJS(aRule)) # creating file with all functions callable by rules print(" creating callables...") sPyCallables = "# generated code, do not edit\n" sJSCallables = "// generated code, do not edit\nconst oEvalFunc = {\n" for sFuncName, sReturn in FUNCTIONS: cType = sFuncName[0:1] if cType == "c": # condition sParams = "s, sx, m, dDA, sCountry, bCondMemo" elif cType == "m": # message sParams = "s, m" elif cType == "s": # suggestion sParams = "s, m" elif cType == "p": # preprocessor sParams = "s, m" elif cType == "d": # disambiguator sParams = "s, m, dDA" else: print("# Unknown function type in [" + sFuncName + "]") continue sPyCallables += "def {} ({}):\n".format(sFuncName, sParams) sPyCallables += " return " + sReturn + "\n" sJSCallables += " {}: function ({})".format(sFuncName, sParams) + " {\n" sJSCallables += " return " + py2js(sReturn) + ";\n" sJSCallables += " },\n" sJSCallables += "}\n" displayStats(lParagraphRules, lSentenceRules) d = { "callables": sPyCallables, "callablesJS": sJSCallables, "paragraph_rules": mergeRulesByOption(lParagraphRules), "sentence_rules": mergeRulesByOption(lSentenceRules), "paragraph_rules_JS": writeRulesToJSArray(mergeRulesByOption(lParagraphRulesJS)), "sentence_rules_JS": writeRulesToJSArray(mergeRulesByOption(lSentenceRulesJS)) } d.update(dOptions) return d |
Added dialog_bundled.py version [00d8c7ccc2].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 | # -*- encoding: UTF-8 -*- import sys import re import os comment = re.compile(r"[\n#]") ids = re.compile(r"\w+:\s*\*?\w+(,\s*\*?\w+)*") langu = re.compile(r"\[.+=.+\]\s*") titl = re.compile(r"\w+\s*=\s*") helptexts = [] # XDL file xdl_header = """<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd"> <dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="%s" dlg:left="101" dlg:top="52" dlg:width="196" dlg:height="72" dlg:closeable="true" dlg:moveable="true" dlg:withtitlebar="false"> <dlg:bulletinboard> """ xdl_footer = """</dlg:bulletinboard> </dlg:window> """ xdl_group = '<dlg:fixedline dlg:id="%s" dlg:tab-index="%d" dlg:left="5" dlg:top="%d" dlg:width="240" dlg:height="10" dlg:value="&%s"/>\n' xdl_item = '<dlg:checkbox dlg:id="%s" dlg:tab-index="%d" dlg:left="%d" dlg:top="%d" dlg:width="%d" dlg:height="10" dlg:value="&%s" dlg:checked="%s" %s/>\n' # XCS file xcs_header = """<?xml version="1.0" encoding="UTF-8"?> <oor:component-schema xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" oor:name="%s" oor:package="org.openoffice" xml:lang="en-US"> <info> <desc>Contains the options data used for the test extensions.</desc> </info> <templates> """ xcs_leaf_header = """ <group oor:name="%s"> <info> <desc>The data for one leaf.</desc> </info> """ xcs_leaf = """<prop oor:name="%s" oor:type="xs:string"> <value></value> </prop> """ xcs_leaf_footer = """ </group> """ xcs_component_header = """ </templates> <component> <group oor:name="Leaves"> """ xcs_component = """ <node-ref oor:name="%s" oor:node-type="%s"/> """ xcs_footer = """ </group> </component> </oor:component-schema> """ # XCU file xcu_header = u"""<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE oor:component-data SYSTEM "../../../../component-update.dtd"> <oor:component-data oor:name="OptionsDialog" oor:package="org.openoffice.Office" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <node oor:name="Nodes"> <!--<node oor:name="org.openoffice.lightproof" oor:op="fuse"> <prop oor:name="Label"> <value xml:lang="en">Dictionaries</value> <value xml:lang="hu">Szótárak</value> </prop>--> <node oor:name="LanguageSettings" oor:op="fuse"> <prop oor:name="Label"> <value xml:lang="en-US">Language Settings</value> <value xml:lang="fr-FR">Paramètres linguistiques</value> </prop> <node oor:name="Leaves"> """ xcu_node_header = """ <node oor:name="org.openoffice.lightproof.%s" oor:op="fuse"> <prop oor:name="Id"> <!--<value>org.openoffice.comp.pyuno.lightproof.oxt.%s</value>--> <value>French.linguistic.resources.from.Dicollecte.by.OlivierR</value> </prop> <prop oor:name="Label"> """ xcu_node = """ <value xml:lang="%s">%s</value> """ xcu_node_footer = """ </prop> <prop oor:name="OptionsPage"> <value>%%origin%%/%s.xdl</value> </prop> <prop oor:name="EventHandlerService"> <value>org.openoffice.comp.pyuno.LightproofOptionsEventHandler.%s</value> </prop> </node> """ xcu_footer = """ </node> </node> </node> </oor:component-data> """ indexes = {} indexes_def = {} modules = {} def create_xdl (pkg, lLineOptions, hZip, lang): global indexes global indexes_def global modules indexes[lang] = [] indexes_def[lang] = [] modules[lang] = [] f2 = "" state = 0 f2n = "dialog/" + lang + ".xdl" f2 = f2 + xdl_header%lang k = 0 k2 = 0 lin = 0 ok = False for i in lLineOptions: i = i.strip() if "=" in i and r"\n" in i: helptexts.append(i.split("=")[0]) for i in lLineOptions: i = i.strip().replace(r"\n", "@#@") + "\n" lin = lin + 1 if not comment.match(i): if state == 0: ok = True if ids.match(i.strip()): j = i.strip().split(":") f2 = f2 + xdl_group%(j[0].strip(), k, k2 * 10 + 5, j[0].strip()) for l in j[1].split(","): k = k + 1 k2 = k2 + 1 l = l.strip() la = l.split(" ") l3 = 0 itemlen = int(240 / len(la)) for l2 in la: if l2 != "-": checked = "false" if l2[0] == '*': checked = "true" l2 = l2[1:] indexes_def[lang] += [l2] indexes[lang] += [l2] helptext = "" if l2 in helptexts: helptext = "dlg:help-text=\"&hlp_" + l2 + "\"" f2 = f2 + xdl_item%(l2, k, 10 + itemlen * l3, k2 * 10 + 5, itemlen, l2, checked, helptext) l3 = l3 + 1 k = k + 1 k2 = k2 + 1 k = k + 1 else: ok = False if langu.match(i.strip()): if "xdl" in f2n: f2 = f2 + xdl_footer hZip.writestr(f2n, f2) f2 = "" i = i.strip() langname = i[1:i.find("=")] modules[lang] += [langname[:langname.find("_")], i[i.find("=")+1:-1]] f2n = "dialog/" + lang + "_" + langname + ".properties" state = state + 1 if state == 1: hZip.writestr("dialog/" + lang + "_" + langname + ".default", "") elif titl.match(i.strip()): hlp = i.encode("unicode-escape").decode('ascii').replace(r"\n","\n").replace(r"\t","\t").replace(r"\x","\\u00").split("@#@", 1) if len(hlp) > 1: helptexts.append(hlp[0].split("=")[0]) f2 = f2 + "hlp_" + hlp[0].split("=")[0] + "=" + hlp[1] hlp[0] = hlp[0] + "\n" f2 = f2 + hlp[0] elif not ok: print ("Syntax error in line %d: %s" %(lin, i)) if "xdl" in f2n: f2 = f2 + xdl_footer hZip.writestr(f2n, f2) def c (sImplname, lLineOptions, hZip, sLang): # create xdl dialog data files create_xdl(sImplname, lLineOptions, hZip, sLang) #print(indexes) # create xcs file s = xcs_header% ("Lightproof_" + sImplname) for i in indexes: s = s + xcs_leaf_header%i + \ xcs_leaf*len(indexes[i])%tuple(indexes[i]) + xcs_leaf_footer s = s + xcs_component_header for i in indexes: s = s + xcs_component%(i,i) hZip.writestr("dialog/OptionsDialog.xcs", s + xcs_footer) # create xcu (bundled dialog in LO options) s = "" for i in indexes: s = s + xcu_node_header%(sImplname, sImplname) + \ xcu_node*(len(modules[i])//2)%tuple(modules[i]) + \ xcu_node_footer%(i, sImplname) hZip.writestr("dialog/OptionsDialog.xcu", (xcu_header + s + xcu_footer).encode("utf-8")) # python resource file s = "lopts = {}\nlopts_default = {}\n" for i in indexes: s = s + "lopts['" + i + "'] = " + str(indexes[i]) + "\n" for i in indexes: s = s + "lopts_default['" + i + "'] = " + str(indexes_def[i]) + "\n" hZip.writestr("pythonpath/lightproof_opts_%s.py"%sImplname, s) |
Added doc/API.txt version [74d38805d7].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | = Grammalecte API = Sorry, PEP8. CamelCase here. Writer legacy & JavaScript. == grammalecte.ibdawg == .IBDAWG .__init__(dic_name) Loads the dictionary dic_name from the folder _dictionaries. .lookup(word) Returns True if word is in the dictionary else False. .isValid(word) Returns True if word is in the dictionary else False. Several casing tried. .isValidToken(token) Returns True if token (combination of words) is valid. Several casing tried. .getMorph(word) Returns the list of morphologies of word. == grammalecte.fr == Grammar checker for French language .load() Initialize the grammar checker. .parse(paragraph) Returns a list of errors found in the paragraph. .setOptions(dict_options) Change the grammar checking options. .getDictionary() Returns the dictionary (IBDAWG) == grammalecte.fr.conj == .isVerb(word) Returns True is word exists in the list of verb (infinite form) .getConj(verb, tense, who) Returns conjugation of verb with subject who at tense (can be an empty string) tense has to be: :Y infinitif :PQ participes passés et présent :Ip indicatif présent :Iq imparfait :Is passé simple :If futur :K conditionnel :Sp subjonctif présent :Sq subjonctif imparfait :E impératif who has to be: :P participe présent :Q1 participe passé masculin singulier ou invariable :Q2 participe passé masculin pluriel :Q3 participe passé féminin singulier :Q4 participe passé féminin pluriel :1s première personne au singulier (1ś pour une éventuelle forme interrogative spécifique) :2s deuxième personne au singulier :3s troisième personne au singulier :1p première personne au pluriel :2p deuxième personne au pluriel :3p troisième personne au pluriel Exception ValueError is raised if failed to retrieve information. .hasConj(verb, tense, who) Returns False if no conjugation with subject who at tense else True. Exception ValueError is raised if failed to retrieve information. .Verb .__init__(verb) .dConj Attribute. Dictionary of all conjugations. .sInfo Attribute. Readable informations about the verb. .infinitif(bPro, bNeg, bTpsCo, bInt, bFem) .participePasse(sWho) .participePresent(bPro, bNeg, bTpsCo, bInt, bFem) .conjugue(sTemps, sWho, bPro, bNeg, bTpsCo, bInt, bFem) .imperatif(sWho, bPro, bNeg, bTpsCo, bFem) |
Added doc/build.txt version [a7ffc6f8bf].
Added doc/options.txt version [dc0618d03e].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | # 1. Copy this template to the data folder. # # 2. Define your group ids and option ids and the localized title # texts (see later for the syntax). # # Syntax of the dialog data file: # # Options and title texts for the Settings and conditional rules # # Format of the dialog definition: # # GroupID: OptionID [OptionsInTheSameLines_or_hyphen_placeholder], OptionID ... # Group2ID: OptionID, OptionID ... # ... # [Language_code=title of the window] # GroupID=title of the group # OptionID=title of the option [\n tooltip] # Option2ID=title of the option [\n tooltip] # # The first language is the default language for the other locales # (use en_US or the common language of your country) # # The OptionIDs are used in the rules, too. For example: # # foo <<- option("style") ->> bar # bar is far better # # or # # __[i]/style__ foo <<- ->> bar # bar is far better # # these rule depends from the state of the "style" option. # options spelling: comma, hyphen proofreading: style, moregrammar # titles [en_US=Hungarian grammar checking] spelling=Spelling comma=Comma usage hyphen=Check compound words with hyphen proofreading=Proofreading style=Style checking moregrammar=Use grammar rules with ambiguous word analysis [yourlocale=yourtitle] spelling=... wordpart=... ... |
Added doc/syntax.txt version [ee9590ca86].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 | WRITING RULES FOR GRAMMALECTE = Principles = Grammalecte is a multi-passes grammar checker engine. On the first pass, the engine checks the text paragraph by paragraph. On the next passes, the engine check the text sentence by sentence. The command to add a new pass is: [++] You shoudn’t need more than two passes, but you can create as many passes as you wish. In each pass, you can write as many rules as you need. A rule is defined by: - a regex pattern trigger - a list of actions (can’t be empty) - [optional] flags “LCR” for the regex word boundaries and case sensitiveness - [optional] user option name for activating/disactivating the rule There is no limit to the number of actions and the type of actions a rule can launch. Each action has its own condition to be triggered. There are three kind of actions: - Error warning, with a message and optionaly suggestions and optionally an URL - Text transformation, modifying internally the checked text - Disambigation action, setting tags on a position The rules file for your language must be named “rules.grx”. The options file must be named “option.txt”. The settings file must be named “config.ini”. All these files are simple utf-8 text file. UTF-8 is mandatory. = Rule syntax = __LCR__ pattern <<- condition ->> error_suggestions # message_error|http://awebsite.net... <<- condition ~>> text_rewriting <<- condition =>> commands_for_disambigation ... Patterns are written with the Python syntax for regular expressions: http://docs.python.org/library/re.html There can be one or several actions for each rule, executed the order they are written. Conditions are optional, i.e.: <<- ~>> replacement LCR flags means: - Left boundary for the regex - Case sensitiveness - Right boundary for the regex Left boundary: [ word boundary or < no word boundary right boundary: ] word boundary or > no word boundary Case sensitiveness: i: case insensitive s: case sensitive u: uppercase allowed for lowercased characters i.e.: "Word" becomes "W[oO][rR][dD]" Examples: __[i]__ pattern __<s]__ pattern __[u>__ pattern __<s>__ pattern ... User option activating/disactivating is possible with an option name placed just after the LCR flags, i.e.: __[i]/useroption1__ pattern __[u]/useroption2__ pattern __[s>/useroption1__ pattern __<u>/useroption3__ pattern __<i>/useroption3__ pattern ... The LCR flags are also optional. If you don’t set these flags, the default LCR flags will be: __[i]__ Example. Report “foo” in the text and suggest "bar": foo <<- ->> bar # Use bar instead of foo. Example. Recognize and suggest missing hyphen and rewrite internally the text with the hyphen: __[s]__ foo bar <<- ->> foo-bar # Missing hyphen. <<- ~>> foo-bar == Simple-line or multi-line rules == Rules can be break to multiple lines by leading tabulators or spaces. You should use 4 spaces. Examples: __<s>__ pattern <<- condition ->> replacement # message <<- condition ->> suggestion # message <<- condition ~>> text_rewriting <<- =>> disambiguation __<s>__ pattern <<- condition ->> replacement # message == Comments == Lines beginning with # are comments. Example. No action done. # pattern <<- ->> foo bar # message == End of file == With the command: #END the compiler won’t go further. Whatever is written after will be considered as comments. == Whitespaces at the border of patterns or suggestions == Example. Recognize double or more spaces and suggests a single space: __<s>__ " +" <<- ->> " " # Extra space(s). ASCII " characters protect spaces in the pattern and in the replacement text. == Pattern groups and back references == It is usually useful to retrieve parts of the matched pattern. We simply use parenthesis in pattern to get groups with back references. Example. Suggest a word with correct quotation marks: \"(\w+)\" <<- ->> “\1” # Correct quotation marks. Example. Suggest the missing space after the !, ? or . signs: __<i]__ \b([?!.])([A-Z]+) <<- ->> \1 \2 # Missing space? Example. Back reference in messages. (fooo) bar <<- ->> foo bar # “\1” should be: == Name definitions == Grammalecte supports name definitions to simplify the description of the complex rules. Example. DEF: name pattern Usage in the rules: ({name}) (\w+) ->> "\1-\2" # Missing hyphen? == Multiple suggestions == Use | in the replacement text to add multiple suggestions: Example 7. Foo, FOO, Bar and BAR suggestions for the input word "foo". foo <<- ->> Foo|FOO|Bar|BAR # Did you mean: == No suggestion == You can display message without making suggestions. For this purpose, use a single character _ in the suggestion field. Example. No suggestion. foobar <<- ->> _ # Message == Positioning == Positioning is valid only for error creation and text rewriting. By default, the full pattern will be underlined with blue. You can shorten the underlined text area by specifying a back reference group of the pattern. Instead of writing ->>, write -n>> n being the number of a back reference group. Actually, ->> is similar to -0>> Example. (ying) and yang <<- -1>> yin # Did you mean: __[s]__ (Mr.) [A-Z]\w+ <<- ~1>> Mr === Comparison === Rule A: ying and yang <<- ->> yin and yang # Did you mean: Rule B: (ying) and yang <<- -1>> yin # Did you mean: With the rule A, the full pattern is underlined: ying and yang ^^^^^^^^^^^^^ With the rule B, only the first group is underlined: ying and yang ^^^^ == Longer explanations with URLs == Warning messages can contain optional URL for longer explanations separated by "|": (your|her|our|their)['’]s <<- ->> \1s # Possessive pronoun:|http://en.wikipedia.org/wiki/Possessive_pronoun = Text rewriting = Example. Replacing a string by another Mr. [A-Z]\w+ <<- ~>> Mister WARNING: The replacing text must be shorter than the replaced text or have the same length. Breaking this rule will misplace following error reports. You have to ensure yourself the rules comply with this constraint, Grammalecte won’t do it for you. Specific commands for text rewriting ~>> * replace by whitespaces ~>> @ replace by arobases, useful mostly at firt pass, where it is advised to check usage of punctuations and whitespaces. @ are automatically removed at the beginning of the second pass. You can use positioning with text rewriting actions. Mr(. [A-Z]\w+) <<- ~1>> * You can also call Python expressions. __[s]__ Mr. ([a-z]\w+) <<- ~1>> =\1.upper() = Disambiguation = When Grammalecte analyses a word with morph or morphex, before requesting the POS tags to the dictionary, it checks if there is a stored marker for the position where the word is. If there is a marker, Grammalecte uses the stored data and don’t make request to the dictionary. The disambigation commands store POS tags at the position of a word. There is 3 commands for disambigation. - select(n, pattern) stores at position n only the POS tags of the word matching the pattern. - exclude(n, pattern) stores at position n the POS tags of the word, except those matching the pattern. - define(n, definition) stores at position n the POS tags in definition. Examples. =>> select(\1, "po:noun is:pl") =>> exclude(\1, "po:verb") =>> define(\1, "po:adv") =>> exclude(\1, "po:verb") and define(\2, "po:adv") and select(\3, "po:adv") Note: select, exclude and define ALWAYS return True. If select and exclude generate an empty list, no marker is set. With define, you can set a list of POS tags. Example: define(\1, "po:nom is:plur|po:adj is:sing|po:adv") This will store a list of tags at the position of the first group: ["po:nom is:plur", "po:adj is:sing", "po:adv"] = Conditions = Conditions are Python expressions, they must return a value, which will be evaluated as boolean. You can use the usual Python syntax and libraries. You can call pattern subgroups via \0, \1, \2… Example: these (\w+) <<- \1 == "man" -1>> men # Man is a singular noun. Use the plural form: You can also apply functions to subgroups like: \1.startswith("a") \3.islower() re.match("pattern", \2) … == Standard functions == word(n) catches the nth next word after the pattern (separated only by white spaces). returns None if no word catched word(-n) catches the nth next word before the pattern (separated only by white spaces). returns None if no word catched after(regex[, neg_regex]) checks if the text after the pattern matches the regex. before(regex[, neg_regex]) checks if the text before the pattern matches the regex. textarea(regex[, neg_regex]) checks if the full text of the checked area (paragraph or sentence) matches the regex. morph(n, regex[, strict=True][, noword=False]) checks if all tags of the word in group n match the regex. if strict = False, returns True only if one of tags matches the regex. if there is no word at position n, returns the value of noword. morphex(n, regex, neg_regex[, noword=False]) checks if one of the tags of the word in group n match the regex and if no tags matches the neg_regex. if there is no word at position n, returns the value of noword. option(option_name) returns True if option_name is activated else False Note: the analysis is done on the preprocessed text. == Default variables == sCountry It contains the current country locale of the checked paragraph. colour <<- sCountry == "US" ->> color # Use American English spelling. = Expressions in the suggestions = Suggestions (and warning messages) started by an equal sign are Python string expressions extended with possible back references and named definitions: Example: foo\w+ ->> = '"' + \0.upper() + '"' # With uppercase letters and quoation marks All words beginning with "foo" will be recognized, and the suggestion is the uppercase form of the string with ASCII quoation marks: eg. foom ->> "FOOM". //////////////////////////////// OLD /////////////////////////////////////// = Text preprocessing and multi-passes checking = On each pass, Lightproof uses rules written in the text preprocessor to modify internally the text before checking the text. The text preprocessor is useful to simplify texts and write simplier checking rules. For example, sentences with the same grammar mistake: These “cats” are blacks. These cats are “blacks”. These cats are absolutely blacks. These stupid “cats” are all blacks. These unknown cats are as per usual blacks. Instead of writting complex rules or several rules to find mistakes for all possible cases, you can use the text preprocessor to simplify the text. To remove the chars “”, write: [“”] ->> * The * means: replace text by whitespaces. as per usual ->> * Similarly to grammar rules, you can add conditions: \w+ly <<- morph(\0, "adverb") ->> * You can also remove a group reference: these (\w+) (\w+) <<- morph(\1, "adjective") and morph(\2, "noun") -1>> * (am|are|is|were|was) (all) -2>> * With these rules, you get the following sentences: These cats are blacks. These cats are blacks . These cats are blacks. These cats are blacks. These cats are blacks. These grammar mistakes can be detected with one simple rule: these +(\w+) +are +(\w+s) <<- morph(\1, "noun") and morph(\2, "plural") -2>> _ # Adjectives are invariable. Instead of replacing text with whitespaces, you can replace text with @. https?://\S+ ->> @ This is useful if at first pass you write rules to check successive whitespaces. @ are automatically removed at the second pass. You can also replace any text as you wish. Mister ->> Mr (Mrs?)[.] ->> \1 With the multi-passes checking and the text preprocessor, it is advised to remove or simplify the text which has been checked on the previous pass. = Typical problems = == Pattern matching == Repeating pattern matching of a single rule continues after the previous matching, so instead of general multiword patterns, like (\w+) (\w+) <<- some_check(\1, \2) ->> \1, \2 # foo use (\w+) <<- some_check(\1, word(1)) ->> \1, # foo |
Added gc_core/js/README.txt version [05ae253824].
> > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 | = GRAMMALECTE = Grammar checker By Olivier R. Website: http://grammalecte.net License: GPL 3 -- http://www.gnu.org/copyleft/gpl.html |
Added gc_core/js/helpers.js version [6c4ecd114f].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | // HELPERS "use strict"; // In Firefox, there is no console.log in PromiseWorker, but there is worker.log. // In Thunderbird, you can’t access to console directly. So it’s required to pass a log function. let funcOutput = null; function setLogOutput (func) { funcOutput = func; } function echo (obj) { if (funcOutput !== null) { funcOutput(obj); } else { console.log(obj); } return true; } function logerror (e, bStack=false) { let sMsg = "\n" + e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message; if (bStack) { sMsg += "\n--- Stack ---\n" + e.stack; } if (funcOutput !== null) { funcOutput(sMsg); } else { console.error(sMsg); } } // load ressources in workers (suggested by Mozilla extensions reviewers) // for more options have a look here: https://gist.github.com/Noitidart/ec1e6b9a593ec7e3efed // if not in workers, use sdk/data.load() instead function loadFile (spf) { try { let xRequest; if (typeof XMLHttpRequest !== "undefined") { xRequest = new XMLHttpRequest(); } else { // JS bullshit again… necessary for Thunderbird let { Cc, Ci } = require("chrome"); xRequest = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(); xRequest.QueryInterface(Ci.nsIXMLHttpRequest); } xRequest.open('GET', spf, false); // 3rd arg is false for synchronous, sync is acceptable in workers xRequest.send(); return xRequest.responseText; } catch (e) { logerror(e); return null } } // conversions function objectToMap (obj) { let m = new Map(); for (let param in obj) { //console.log(param + " " + obj[param]); m.set(param, obj[param]); } return m; } function mapToObject (m) { let obj = {}; for (let [k, v] of m) { obj[k] = v; } return obj; } exports.echo = echo; exports.logerror = logerror; exports.objectToMap = objectToMap; exports.mapToObject = mapToObject; exports.setLogOutput = setLogOutput; exports.loadFile = loadFile; |
Added gc_core/js/ibdawg.js version [2d42754063].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 | //// IBDAWG "use strict"; const st = require("resource://grammalecte/str_transform.js"); const helpers = require("resource://grammalecte/helpers.js"); // String // Don’t remove. Necessary in TB. ${string} class IBDAWG { // INDEXABLE BINARY DIRECT ACYCLIC WORD GRAPH constructor (sDicName) { try { const dict = JSON.parse(helpers.loadFile("resource://grammalecte/_dictionaries/"+sDicName)); Object.assign(this, dict); //const dict = require("resource://grammalecte/"+sLang+"/dictionary.js"); //Object.assign(this, dict.dictionary); } catch (e) { throw Error("# Error. File not found or not loadable.\n" + e.message + "\n"); } /* Properties: sName, nVersion, sHeader, lArcVal, nArcVal, byDic, sLang, nChar, nBytesArc, nBytesNodeAddress, nEntries, nNode, nArc, nAff, cStemming, nTag, dChar, _arcMask, _finalNodeMask, _lastArcMask, _addrBitMask, nBytesOffset, */ if (!this.sHeader.startsWith("/pyfsa/")) { throw TypeError("# Error. Not a pyfsa binary dictionary. Header: " + this.sHeader); } if (!(this.nVersion == "1" || this.nVersion == "2" || this.nVersion == "3")) { throw RangeError("# Error. Unknown dictionary version: " + this.nVersion); } this.dChar = helpers.objectToMap(this.dChar); //this.byDic = new Uint8Array(this.byDic); // not quicker, even slower if (this.cStemming == "S") { this.funcStemming = st.getStemFromSuffixCode; } else if (this.cStemming == "A") { this.funcStemming = st.getStemFromAffixCode; } else { this.funcStemming = st.noStemming; } // Configuring DAWG functions according to nVersion switch (this.nVersion) { case 1: this.morph = this._morph1; this.stem = this._stem1; this._lookupArcNode = this._lookupArcNode1; this._writeNodes = this._writeNodes1; break; case 2: this.morph = this._morph2; this.stem = this._stem2; this._lookupArcNode = this._lookupArcNode2; this._writeNodes = this._writeNodes2; break; case 3: this.morph = this._morph3; this.stem = this._stem3; this._lookupArcNode = this._lookupArcNode3; this._writeNodes = this._writeNodes3; break; default: throw ValueError("# Error: unknown code: " + this.nVersion); } //console.log(this.getInfo()); this.bOptNumSigle = true; this.bOptNumAtLast = false; }; getInfo () { return ` Language: ${this.sLang} Version: ${this.nVersion} Stemming: ${this.cStemming}FX\n` + ` Arcs values: ${this.nArcVal} = ${this.nChar} characters, ${this.nAff} affixes, ${this.nTag} tags\n` + ` Dictionary: ${this.nEntries} entries, ${this.nNode} nodes, ${this.nArc} arcs\n` + ` Address size: ${this.nBytesNodeAddress} bytes, Arc size: ${this.nBytesArc} bytes\n`; }; isValidToken (sToken) { // checks if sToken is valid (if there is hyphens in sToken, sToken is split, each part is checked) if (this.isValid(sToken)) { return true; } if (sToken.includes("-")) { if (sToken._count("-") > 4) { return true; } return sToken.split("-").every(sWord => this.isValid(sWord)); } return false; }; isValid (sWord) { // checks if sWord is valid (different casing tested if the first letter is a capital) if (!sWord) { return null; } if (sWord.includes("’")) { // ugly hack sWord = sWord.replace("’", "'"); } if (this.lookup(sWord)) { return true; } if (sWord.charAt(0)._isUpperCase()) { if (sWord.length > 1) { if (sWord._isTitle()) { return !!this.lookup(sWord.toLowerCase()); } if (sWord._isUpperCase()) { if (this.bOptNumSigle) { return true; } return !!(this.lookup(sWord.toLowerCase()) || this.lookup(sWord._toCapitalize())); } return !!this.lookup(sWord.slice(0, 1).toLowerCase() + sWord.slice(1)); } else { return !!this.lookup(sWord.toLowerCase()); } } return false; }; _convBytesToInteger (aBytes) { // Byte order = Big Endian (bigger first) let nVal = 0; let nWeight = (aBytes.length - 1) * 8; for (let n of aBytes) { nVal += n << nWeight; nWeight = nWeight - 8; } return nVal; }; lookup (sWord) { // returns true if sWord in dictionary (strict verification) let iAddr = 0; for (let c of sWord) { if (!this.dChar.has(c)) { return false; } iAddr = this._lookupArcNode(this.dChar.get(c), iAddr); if (iAddr === null) { return false; } } return Boolean(this._convBytesToInteger(this.byDic.slice(iAddr, iAddr+this.nBytesArc)) & this._finalNodeMask); }; getMorph (sWord) { // retrieves morphologies list, different casing allowed let l = this.morph(sWord); if (sWord[0]._isUpperCase()) { l = l.concat(this.morph(sWord.toLowerCase())); if (sWord._isUpperCase() && sWord.length > 1) { l = l.concat(this.morph(sWord._toCapitalize())); } } return l; }; // morph (sWord) { // is defined in constructor // }; // VERSION 1 _morph1 (sWord) { // returns morphologies of sWord let iAddr = 0; for (let c of sWord) { if (!this.dChar.has(c)) { return []; } iAddr = this._lookupArcNode(this.dChar.get(c), iAddr); if (iAddr === null) { return []; } } if (this._convBytesToInteger(this.byDic.slice(iAddr, iAddr+this.nBytesArc)) & this._finalNodeMask) { let l = []; let nRawArc = 0; while (!(nRawArc & this._lastArcMask)) { var iEndArcAddr = iAddr + this.nBytesArc; nRawArc = this._convBytesToInteger(this.byDic.slice(iAddr, iEndArcAddr)); var nArc = nRawArc & this._arcMask; if (nArc >= this.nChar) { // This value is not a char, this is a stemming code var sStem = ">" + this.funcStemming(sWord, this.lArcVal[nArc]); // Now , we go to the next node and retrieve all following arcs values, all of them are tags var iAddr2 = this._convBytesToInteger(this.byDic.slice(iEndArcAddr, iEndArcAddr+this.nBytesNodeAddress)); var nRawArc2 = 0; while (!(nRawArc2 & this._lastArcMask)) { var iEndArcAddr2 = iAddr2 + this.nBytesArc; nRawArc2 = this._convBytesToInteger(this.byDic.slice(iAddr2, iEndArcAddr2)); l.push(sStem + " " + this.lArcVal[nRawArc2 & this._arcMask]); iAddr2 = iEndArcAddr2+this.nBytesNodeAddress; } } iAddr = iEndArcAddr + this.nBytesNodeAddress; } return l; } return []; }; _stem1 (sWord) { // returns stems list of sWord let iAddr = 0; for (let c of sWord) { if (!this.dChar.has(c)) { return []; } iAddr = this._lookupArcNode(this.dChar.get(c), iAddr); if (iAddr === null) { return []; } } if (this._convBytesToInteger(this.byDic.slice(iAddr, iAddr+this.nBytesArc)) & this._finalNodeMask) { let l = []; let nRawArc = 0; while (!(nRawArc & this._lastArcMask)) { var iEndArcAddr = iAddr + this.nBytesArc; nRawArc = this._convBytesToInteger(this.byDic.slice(iAddr, iEndArcAddr)); var nArc = nRawArc & this._arcMask; if (nArc >= this.nChar) { // This value is not a char, this is a stemming code l.push(this.funcStemming(sWord, this.lArcVal[nArc])); } iAddr = iEndArcAddr + this.nBytesNodeAddress; } return l; } return []; }; _lookupArcNode1 (nVal, iAddr) { // looks if nVal is an arc at the node at iAddr, if yes, returns address of next node else None while (true) { let iEndArcAddr = iAddr+this.nBytesArc; let nRawArc = this._convBytesToInteger(this.byDic.slice(iAddr, iEndArcAddr)); if (nVal == (nRawArc & this._arcMask)) { // the value we are looking for // we return the address of the next node return this._convBytesToInteger(this.byDic.slice(iEndArcAddr, iEndArcAddr+this.nBytesNodeAddress)); } else { // value not found if (nRawArc & this._lastArcMask) { return null; } iAddr = iEndArcAddr + this.nBytesNodeAddress; } } }; // VERSION 2 _morph2 (sWord) { // to do }; _stem2 (sWord) { // to do }; _lookupArcNode2 (nVal, iAddr) { // to do }; // VERSION 3 _morph3 (sWord) { // to do }; _stem3 (sWord) { // to do }; _lookupArcNode3 (nVal, iAddr) { // to do }; } exports.IBDAWG = IBDAWG; |
Added gc_core/js/jsex_map.js version [975706110f].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | // Map Map.prototype._shallowCopy = function () { let oNewMap = new Map(); for (let [key, val] of this.entries()) { oNewMap.set(key, val); } return oNewMap; } Map.prototype._get = function (key, defaultValue) { let res = this.get(key); if (res !== undefined) { return res; } return defaultValue; } Map.prototype._toString = function () { // Default .toString() gives nothing useful let sRes = "{ "; for (let [k, v] of this.entries()) { sRes += (typeof k === "string") ? '"' + k + '": ' : k.toString() + ": "; sRes += (typeof v === "string") ? '"' + v + '", ' : v.toString() + ", "; } sRes = sRes.slice(0, -2) + " }" return sRes; } Map.prototype._update = function (dDict) { for (let [k, v] of dDict.entries()) { this.set(k, v); } } Map.prototype._updateOnlyExistingKeys = function (dDict) { for (let [k, v] of dDict.entries()) { if (this.has(k)){ this.set(k, v); } } } |
Added gc_core/js/jsex_regex.js version [35ff67872c].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | // regex RegExp.prototype._exec2 = function (sText, aGroupsPos, aNegLookBefore=null) { let m; while ((m = this.exec(sText)) !== null) { // we have to iterate over sText here too // because first match doesn’t imply it’s a valid match according to negative lookbefore assertions, // and even if first match is finally invalid, it doesn’t mean the following eligible matchs would be invalid too. if (aNegLookBefore !== null) { // check negative look before assertions if ( !aNegLookBefore.some(sRegEx => (RegExp.leftContext.search(sRegEx) >= 0)) ) { break; } } else { break; } } if (m === null) { return null; } let codePos; let iPos = 0; m.start = [m.index]; m.end = [this.lastIndex]; if (m.length > 1) { // there is subgroup(s) if (aGroupsPos !== null) { // aGroupsPos is defined for (let i = 1; i <= m.length-1; i++) { codePos = aGroupsPos[i-1]; if (typeof codePos === "number") { // position as a number m.start.push(m.index + codePos); m.end.push(m.index + codePos + m[i].length); } else if (codePos === "$") { // at the end of the pattern m.start.push(this.lastIndex - m[i].length); m.end.push(this.lastIndex); } else if (codePos === "w") { // word in the middle of the pattern iPos = m[0].search("[ ~’,()«»“”]"+m[i]+"[ ,’~()«»“”]") + 1 + m.index m.start.push(iPos); m.end.push(iPos + m[i].length) } else if (codePos === "*") { // anywhere iPos = m[0].indexOf(m[i]) + m.index; m.start.push(iPos); m.end.push(iPos + m[i].length) } else if (codePos === "**") { // anywhere after previous group iPos = m[0].indexOf(m[i], m.end[i-1]-m.index) + m.index; m.start.push(iPos); m.end.push(iPos + m[i].length) } else if (codePos.startsWith(">")) { // >x:_ // todo: look in substring x iPos = m[0].indexOf(m[i]) + m.index; m.start.push(iPos); m.end.push(iPos + m[i].length); } else { console.error("# Error: unknown positioning code in regex [" + this.source + "], for group[" + i.toString() +"], code: [" + codePos + "]"); } } } else { // no aGroupsPos for (let subm of m.slice(1)) { iPos = m[0].indexOf(subm) + m.index; m.start.push(iPos); m.end.push(iPos + subm.length); } } } return m; } |
Added gc_core/js/jsex_string.js version [c771aa921e].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | // String String.prototype._count = function (sSearch, bOverlapping) { // http://jsperf.com/string-ocurrence-split-vs-match/8 if (sSearch.length <= 0) { return this.length + 1; } let nOccur = 0; let iPos = 0; let nStep = (bOverlapping) ? 1 : sSearch.length; while ((iPos = this.indexOf(sSearch, iPos)) >= 0) { nOccur++; iPos += nStep; } return nOccur; } String.prototype._isDigit = function () { return (this.search(/^[0-9⁰¹²³⁴⁵⁶⁷⁸⁹]+$/) !== -1); } String.prototype._isLowerCase = function () { return (this.search(/^[a-zà-öø-ÿ0-9-]+$/) !== -1); } String.prototype._isUpperCase = function () { return (this.search(/^[A-ZÀ-ÖØ-ߌ0-9-]+$/) !== -1); } String.prototype._isTitle = function () { return (this.search(/^[A-ZÀ-ÖØ-ߌ][a-zà-öø-ÿ'’-]+$/) !== -1); } String.prototype._toCapitalize = function () { return this.slice(0,1).toUpperCase() + this.slice(1).toLowerCase(); } String.prototype._expand = function (oMatch) { let sNew = this; for (let i = 0; i < oMatch.length ; i++) { let z = new RegExp("\\\\"+parseInt(i), "g"); sNew = sNew.replace(z, oMatch[i]); } return sNew; } String.prototype._trimRight = function (sChars) { let z = new RegExp("["+sChars+"]+$"); return this.replace(z, ""); } String.prototype._trimLeft = function (sChars) { let z = new RegExp("^["+sChars+"]+"); return this.replace(z, ""); } String.prototype._trim = function (sChars) { let z1 = new RegExp("^["+sChars+"]+"); let z2 = new RegExp("["+sChars+"]+$"); return this.replace(z1, "").replace(z2, ""); } |
Added gc_core/js/lang_core/gc_engine.js version [b4d754f9e9].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 | // Grammar checker engine ${string} ${regex} ${map} function capitalizeArray (aArray) { // can’t map on user defined function?? let aNew = []; for (let i = 0; i < aArray.length; i = i + 1) { aNew[i] = aArray[i]._toCapitalize(); } return aNew; } const ibdawg = require("resource://grammalecte/ibdawg.js"); const helpers = require("resource://grammalecte/helpers.js"); const gc_options = require("resource://grammalecte/${lang}/gc_options.js"); const cr = require("resource://grammalecte/${lang}/cregex.js"); const text = require("resource://grammalecte/text.js"); const echo = require("resource://grammalecte/helpers.js").echo; const lang = "${lang}"; const locales = ${loc}; const pkg = "${implname}"; const name = "${name}"; const version = "${version}"; const author = "${author}"; // commons regexes const _zEndOfSentence = new RegExp ('([.?!:;…][ .?!… »”")]*|.$)', "g"); const _zBeginOfParagraph = new RegExp ("^[- –—.,;?!…]*", "ig"); const _zEndOfParagraph = new RegExp ("[- .,;?!…–—]*$", "ig"); // grammar rules and dictionary //const _rules = require("./gc_rules.js"); const _rules = require("resource://grammalecte/${lang}/gc_rules.js"); let _dOptions = gc_options.dOpt._shallowCopy(); // duplication necessary, to be able to reset to default let _aIgnoredRules = new Set(); let _oDict = null; let _dAnalyses = new Map(); // cache for data from dictionary ///// Parsing function parse (sText, sCountry="${country_default}", bDebug=false, bContext=false) { // analyses the paragraph sText and returns list of errors let dErrors; let errs; let sAlt = sText; let dDA = new Map(); // Disamnbiguator let dPriority = new Map(); // Key = position; value = priority let sNew = ""; // parse paragraph try { [sNew, dErrors] = _proofread(sText, sAlt, 0, true, dDA, dPriority, sCountry, bDebug, bContext); if (sNew) { sText = sNew; } } catch (e) { helpers.logerror(e); } // cleanup if (sText.includes(" ")) { sText = sText.replace(/ /g, ' '); // nbsp } if (sText.includes(" ")) { sText = sText.replace(/ /g, ' '); // snbsp } if (sText.includes("'")) { sText = sText.replace(/'/g, "’"); } if (sText.includes("‑")) { sText = sText.replace(/‑/g, "-"); // nobreakdash } // parse sentence for (let [iStart, iEnd] of _getSentenceBoundaries(sText)) { if (4 < (iEnd - iStart) < 2000) { dDA.clear(); //echo(sText.slice(iStart, iEnd)); try { [_, errs] = _proofread(sText.slice(iStart, iEnd), sAlt.slice(iStart, iEnd), iStart, false, dDA, dPriority, sCountry, bDebug, bContext); dErrors._update(errs); } catch (e) { helpers.logerror(e); } } } return Array.from(dErrors.values()); } function* _getSentenceBoundaries (sText) { let mBeginOfSentence = _zBeginOfParagraph.exec(sText) let iStart = _zBeginOfParagraph.lastIndex; let m; while ((m = _zEndOfSentence.exec(sText)) !== null) { yield [iStart, _zEndOfSentence.lastIndex]; iStart = _zEndOfSentence.lastIndex; } } function _proofread (s, sx, nOffset, bParagraph, dDA, dPriority, sCountry, bDebug, bContext) { let dErrs = new Map(); let bChange = false; let bIdRule = option('idrule'); let m; let bCondMemo; let nErrorStart; for (let [sOption, lRuleGroup] of _getRules(bParagraph)) { if (!sOption || option(sOption)) { for (let [zRegex, bUppercase, sLineId, sRuleId, nPriority, lActions, lGroups, lNegLookBefore] of lRuleGroup) { if (!_aIgnoredRules.has(sRuleId)) { while ((m = zRegex._exec2(s, lGroups, lNegLookBefore)) !== null) { bCondMemo = null; /*if (bDebug) { echo(">>>> Rule # " + sLineId + " - Text: " + s + " opt: "+ sOption); }*/ for (let [sFuncCond, cActionType, sWhat, ...eAct] of lActions) { // action in lActions: [ condition, action type, replacement/suggestion/action[, iGroup[, message, URL]] ] try { //echo(oEvalFunc[sFuncCond]); bCondMemo = (!sFuncCond || oEvalFunc[sFuncCond](s, sx, m, dDA, sCountry, bCondMemo)) if (bCondMemo) { switch (cActionType) { case "-": // grammar error //echo("-> error detected in " + sLineId + "\nzRegex: " + zRegex.source); nErrorStart = nOffset + m.start[eAct[0]]; if (!dErrs.has(nErrorStart) || nPriority > dPriority.get(nErrorStart)) { dErrs.set(nErrorStart, _createError(s, sx, sWhat, nOffset, m, eAct[0], sLineId, sRuleId, bUppercase, eAct[1], eAct[2], bIdRule, sOption, bContext)); dPriority.set(nErrorStart, nPriority); } break; case "~": // text processor //echo("-> text processor by " + sLineId + "\nzRegex: " + zRegex.source); s = _rewrite(s, sWhat, eAct[0], m, bUppercase); bChange = true; if (bDebug) { echo("~ " + s + " -- " + m[eAct[0]] + " # " + sLineId); } break; case "=": // disambiguation //echo("-> disambiguation by " + sLineId + "\nzRegex: " + zRegex.source); oEvalFunc[sWhat](s, m, dDA); if (bDebug) { echo("= " + m[0] + " # " + sLineId + "\nDA: " + dDA._toString()); } break; case ">": // we do nothing, this test is just a condition to apply all following actions break; default: echo("# error: unknown action at " + sLineId); } } else { if (cActionType == ">") { break; } } } catch (e) { echo(s); echo("# id-rule:" + sLineId); helpers.logerror(e); } } } } } } } if (bChange) { return [s, dErrs]; } return [false, dErrs]; } function _createError (s, sx, sRepl, nOffset, m, iGroup, sLineId, sRuleId, bUppercase, sMsg, sURL, bIdRule, sOption, bContext) { let oErr = {}; oErr["nStart"] = nOffset + m.start[iGroup]; oErr["nEnd"] = nOffset + m.end[iGroup]; oErr["sLineId"] = sLineId; oErr["sRuleId"] = sRuleId; oErr["sType"] = (sOption) ? sOption : "notype"; // suggestions if (sRepl[0] === "=") { let sugg = oEvalFunc[sRepl.slice(1)](s, m); if (sugg) { if (bUppercase && m[iGroup].slice(0,1)._isUpperCase()) { oErr["aSuggestions"] = capitalizeArray(sugg.split("|")); } else { oErr["aSuggestions"] = sugg.split("|"); } } else { oErr["aSuggestions"] = []; } } else if (sRepl == "_") { oErr["aSuggestions"] = []; } else { if (bUppercase && m[iGroup].slice(0,1)._isUpperCase()) { oErr["aSuggestions"] = capitalizeArray(sRepl._expand(m).split("|")); } else { oErr["aSuggestions"] = sRepl._expand(m).split("|"); } } // Message if (sMsg[0] === "=") { sMessage = oEvalFunc[sMsg.slice(1)](s, m) } else { sMessage = sMsg._expand(m); } if (bIdRule) { sMessage += " #" + sLineId + " #" + sRuleId; } oErr["sMessage"] = sMessage; // URL oErr["URL"] = sURL || ""; // Context if (bContext) { oErr["sUnderlined"] = sx.slice(m.start[iGroup], m.end[iGroup]); oErr["sBefore"] = sx.slice(Math.max(0, m.start[iGroup]-80), m.start[iGroup]); oErr["sAfter"] = sx.slice(m.end[iGroup], m.end[iGroup]+80); } return oErr; } function _rewrite (s, sRepl, iGroup, m, bUppercase) { // text processor: write sRepl in s at iGroup position" let ln = m.end[iGroup] - m.start[iGroup]; let sNew = ""; if (sRepl === "*") { sNew = " ".repeat(ln); } else if (sRepl === ">" || sRepl === "_" || sRepl === "~") { sNew = sRepl + " ".repeat(ln-1); } else if (sRepl === "@") { sNew = "@".repeat(ln); } else if (sRepl.slice(0,1) === "=") { sNew = oEvalFunc[sRepl.slice(1)](s, m); sNew = sNew + " ".repeat(ln-sNew.length); if (bUppercase && m[iGroup].slice(0,1)._isUpperCase()) { sNew = sNew._toCapitalize(); } } else { sNew = sRepl._expand(m); sNew = sNew + " ".repeat(ln-sNew.length); } //echo("\n"+s+"\nstart: "+m.start[iGroup]+" end:"+m.end[iGroup]) return s.slice(0, m.start[iGroup]) + sNew + s.slice(m.end[iGroup]); } function ignoreRule (sRuleId) { _aIgnoredRules.add(sRuleId); } function resetIgnoreRules () { _aIgnoredRules.clear(); } function reactivateRule (sRuleId) { _aIgnoredRules.delete(sRuleId); } function listRules (sFilter=null) { // generator: returns tuple (sOption, sLineId, sRuleId) try { for ([sOption, lRuleGroup] of _getRules(true)) { for ([_, _, sLineId, sRuleId, _, _] of lRuleGroup) { if (!sFilter || sRuleId.test(sFilter)) { yield [sOption, sLineId, sRuleId]; } } } for ([sOption, lRuleGroup] of _getRules(false)) { for ([_, _, sLineId, sRuleId, _, _] of lRuleGroup) { if (!sFilter || sRuleId.test(sFilter)) { yield [sOption, sLineId, sRuleId]; } } } } catch (e) { helpers.logerror(e); } } //////// init function load () { try { _oDict = new ibdawg.IBDAWG("${js_binary_dic}"); } catch (e) { helpers.logerror(e); } } function setOption (sOpt, bVal) { if (_dOptions.has(sOpt)) { _dOptions.set(sOpt, bVal); } } function setOptions (dOpt) { _dOptions._updateOnlyExistingKeys(dOpt); } function getOptions () { return _dOptions; } function getDefaultOptions () { return gc_options.dOpt._shallowCopy(); } function resetOptions () { _dOptions = gc_options.dOpt._shallowCopy(); } function getDictionary () { return _oDict; } function _getRules (bParagraph) { if (!bParagraph) { return _rules.lSentenceRules; } return _rules.lParagraphRules; } //////// common functions function option (sOpt) { // return true if option sOpt is active return _dOptions.get(sOpt); } function displayInfo (dDA, aWord) { // for debugging: info of word if (!aWord) { echo("> nothing to find"); return true; } if (!_dAnalyses.has(aWord[1]) && !_storeMorphFromFSA(aWord[1])) { echo("> not in FSA"); return true; } if (dDA.has(aWord[0])) { echo("DA: " + dDA.get(aWord[0])); } echo("FSA: " + _dAnalyses.get(aWord[1])); return true; } function _storeMorphFromFSA (sWord) { // retrieves morphologies list from _oDict -> _dAnalyses //echo("register: "+sWord + " " + _oDict.getMorph(sWord).toString()) _dAnalyses.set(sWord, _oDict.getMorph(sWord)); return !!_dAnalyses.get(sWord); } function morph (dDA, aWord, sPattern, bStrict=true, bNoWord=false) { // analyse a tuple (position, word), return true if sPattern in morphologies (disambiguation on) if (!aWord) { //echo("morph: noword, returns " + bNoWord); return bNoWord; } //echo("aWord: "+aWord.toString()); if (!_dAnalyses.has(aWord[1]) && !_storeMorphFromFSA(aWord[1])) { return false; } let lMorph = dDA.has(aWord[0]) ? dDA.get(aWord[0]) : _dAnalyses.get(aWord[1]); //echo("lMorph: "+lMorph.toString()); if (lMorph.length === 0) { return false; } //echo("***"); if (bStrict) { return lMorph.every(s => (s.search(sPattern) !== -1)); } return lMorph.some(s => (s.search(sPattern) !== -1)); } function morphex (dDA, aWord, sPattern, sNegPattern, bNoWord=false) { // analyse a tuple (position, word), returns true if not sNegPattern in word morphologies and sPattern in word morphologies (disambiguation on) if (!aWord) { //echo("morph: noword, returns " + bNoWord); return bNoWord; } //echo("aWord: "+aWord.toString()); if (!_dAnalyses.has(aWord[1]) && !_storeMorphFromFSA(aWord[1])) { return false; } let lMorph = dDA.has(aWord[0]) ? dDA.get(aWord[0]) : _dAnalyses.get(aWord[1]); //echo("lMorph: "+lMorph.toString()); if (lMorph.length === 0) { return false; } //echo("***"); // check negative condition if (lMorph.some(s => (s.search(sNegPattern) !== -1))) { return false; } // search sPattern return lMorph.some(s => (s.search(sPattern) !== -1)); } function analyse (sWord, sPattern, bStrict=true) { // analyse a word, return true if sPattern in morphologies (disambiguation off) if (!_dAnalyses.has(sWord) && !_storeMorphFromFSA(sWord)) { return false; } if (bStrict) { return _dAnalyses.get(sWord).every(s => (s.search(sPattern) !== -1)); } return _dAnalyses.get(sWord).some(s => (s.search(sPattern) !== -1)); } function analysex (sWord, sPattern, sNegPattern) { // analyse a word, returns True if not sNegPattern in word morphologies and sPattern in word morphologies (disambiguation off) if (!_dAnalyses.has(sWord) && !_storeMorphFromFSA(sWord)) { return false; } // check negative condition if (_dAnalyses.get(sWord).some(s => (s.search(sNegPattern) !== -1))) { return false; } // search sPattern return _dAnalyses.get(sWord).some(s => (s.search(sPattern) !== -1)); } function stem (sWord) { // returns a list of sWord's stems if (!sWord) { return []; } if (!_dAnalyses.has(sWord) && !_storeMorphFromFSA(sWord)) { return []; } return [ for (s of _dAnalyses.get(sWord)) s.slice(1, s.indexOf(" ")) ]; } //// functions to get text outside pattern scope // warning: check compile_rules.py to understand how it works function nextword (s, iStart, n) { // get the nth word of the input string or empty string let z = new RegExp("^( +[a-zà-öA-Zø-ÿÀ-Ö0-9Ø-ßĀ-ʯfi-st%_-]+){" + (n-1).toString() + "} +([a-zà-öA-Zø-ÿÀ-Ö0-9Ø-ßĀ-ʯfi-st%_-]+)", "i"); let m = z.exec(s.slice(iStart)); if (!m) { return null; } return [iStart + RegExp.lastIndex - m[2].length, m[2]]; } function prevword (s, iEnd, n) { // get the (-)nth word of the input string or empty string let z = new RegExp("([a-zà-öA-Zø-ÿÀ-Ö0-9Ø-ßĀ-ʯfi-st%_-]+) +([a-zà-öA-Zø-ÿÀ-Ö0-9Ø-ßĀ-ʯfi-st%_-]+ +){" + (n-1).toString() + "}$", "i"); let m = z.exec(s.slice(0, iEnd)); if (!m) { return null; } return [m.index, m[1]]; } const _zNextWord = new RegExp ("^ +([a-zà-öA-Zø-ÿÀ-Ö0-9Ø-ßĀ-ʯfi-st_][a-zà-öA-Zø-ÿÀ-Ö0-9Ø-ßĀ-ʯfi-st_-]*)", "i"); const _zPrevWord = new RegExp ("([a-zà-öA-Zø-ÿÀ-Ö0-9Ø-ßĀ-ʯfi-st_][a-zà-öA-Zø-ÿÀ-Ö0-9Ø-ßĀ-ʯfi-st_-]*) +$", "i"); function nextword1 (s, iStart) { // get next word (optimization) let m = _zNextWord.exec(s.slice(iStart)); if (!m) { return null; } return [iStart + RegExp.lastIndex - m[1].length, m[1]]; } function prevword1 (s, iEnd) { // get previous word (optimization) //echo("prev1, s:"+s); //echo("prev1, s.slice(0, iEnd):"+s.slice(0, iEnd)); let m = _zPrevWord.exec(s.slice(0, iEnd)); //echo("prev1, m:"+m); if (!m) { return null; } //echo("prev1: " + m.index + " " + m[1]); return [m.index, m[1]]; } function look (s, zPattern, zNegPattern=null) { // seek zPattern in s (before/after/fulltext), if antipattern zNegPattern not in s try { if (zNegPattern && zNegPattern.test(s)) { return false; } return zPattern.test(s); } catch (e) { helpers.logerror(e); } return false; } function look_chk1 (dDA, s, nOffset, zPattern, sPatternGroup1, sNegPatternGroup1=null) { // returns True if s has pattern zPattern and m.group(1) has pattern sPatternGroup1 let m = zPattern._exec2(s, null); if (!m) { return false; } try { let sWord = m[1]; let nPos = m.start[1] + nOffset; if (sNegPatternGroup1) { return morphex(dDA, [nPos, sWord], sPatternGroup1, sNegPatternGroup1); } return morph(dDA, [nPos, sWord], sPatternGroup1, false); } catch (e) { helpers.logerror(e); return false; } } //////// Disambiguator function select (dDA, nPos, sWord, sPattern, lDefault=null) { if (!sWord) { return true; } if (dDA.has(nPos)) { return true; } if (!_dAnalyses.has(sWord) && !_storeMorphFromFSA(sWord)) { return true; } //echo("morph: "+_dAnalyses.get(sWord).toString()); if (_dAnalyses.get(sWord).length === 1) { return true; } let lSelect = [ for (sMorph of _dAnalyses.get(sWord)) if (sMorph.search(sPattern) !== -1) sMorph ]; //echo("lSelect: "+lSelect.toString()); if (lSelect.length > 0) { if (lSelect.length != _dAnalyses.get(sWord).length) { dDA.set(nPos, lSelect); } } else if (lDefault) { dDA.set(nPos, lDefaul); } return true; } function exclude (dDA, nPos, sWord, sPattern, lDefault=null) { if (!sWord) { return true; } if (dDA.has(nPos)) { return true; } if (!_dAnalyses.has(sWord) && !_storeMorphFromFSA(sWord)) { return true; } if (_dAnalyses.get(sWord).length === 1) { return true; } let lSelect = [ for (sMorph of _dAnalyses.get(sWord)) if (sMorph.search(sPattern) === -1) sMorph ]; //echo("lSelect: "+lSelect.toString()); if (lSelect.length > 0) { if (lSelect.length != _dAnalyses.get(sWord).length) { dDA.set(nPos, lSelect); } } else if (lDefault) { dDA.set(nPos, lDefault); } return true; } function define (dDA, nPos, lMorph) { dDA.set(nPos, lMorph); return true; } //////// GRAMMAR CHECKER PLUGINS ${pluginsJS} ${callablesJS} exports.load = load; exports.parse = parse; exports.lang = lang; exports.version = version; exports.getDictionary = getDictionary; exports.setOption = setOption; exports.setOptions = setOptions; exports.getOptions = getOptions; exports.getDefaultOptions = getDefaultOptions; exports.resetOptions = resetOptions; exports.ignoreRule = ignoreRule; exports.reactivateRule = reactivateRule; exports.resetIgnoreRules = resetIgnoreRules; exports.listRules = listRules; |
Added gc_core/js/lang_core/gc_options.js version [3105c2862f].
> > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | // Options for Grammalecte ${map} const lStructOpt = ${lStructOpt}; const dOpt = new Map (${dOptJavaScript}); const dOptLabel = ${dOptLabel}; exports.lStructOpt = lStructOpt; exports.dOpt = dOpt; exports.dOptLabel = dOptLabel; |
Added gc_core/js/lang_core/gc_rules.js version [c85bd666a1].
> > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | // Grammar checker rules "use strict"; ${string} ${regex} const lParagraphRules = ${paragraph_rules_JS}; const lSentenceRules = ${sentence_rules_JS}; exports.lParagraphRules = lParagraphRules; exports.lSentenceRules = lSentenceRules; |
Added gc_core/js/str_transform.js version [572c35f46a].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | //// STRING TRANSFORMATION var dSimilarChars = new Map ([ ["a", "aàâáä"], ["à", "aàâáä"], ["â", "aàâáä"], ["á", "aàâáä"], ["ä", "aàâáä"], ["c", "cç"], ["ç", "cç"], ["e", "eéêèë"], ["é", "eéêèë"], ["ê", "eéêèë"], ["è", "eéêèë"], ["ë", "eéêèë"], ["i", "iîïíì"], ["î", "iîïíì"], ["ï", "iîïíì"], ["í", "iîïíì"], ["ì", "iîïíì"], ["o", "oôóòö"], ["ô", "oôóòö"], ["ó", "oôóòö"], ["ò", "oôóòö"], ["ö", "oôóòö"], ["u", "uûùüú"], ["û", "uûùüú"], ["ù", "uûùüú"], ["ü", "uûùüú"], ["ú", "uûùüú"] ]); // Note: 48 is the ASCII code for "0" // Suffix only function getStemFromSuffixCode (sFlex, sSfxCode) { if (sSfxCode == "0") { return sFlex; } return sSfxCode[0] == '0' ? sFlex + sSfxCode.slice(1) : sFlex.slice(0, -(sSfxCode.charCodeAt(0)-48)) + sSfxCode.slice(1); } // Prefix and suffix function getStemFromAffixCode (sFlex, sAffCode) { if (sAffCode == "0") { return sFlex; } if (!sAffCode.includes("/")) { return "# error #"; } var [sPfxCode, sSfxCode] = sAffCode.split('/'); sFlex = sPfxCode.slice(1) + sFlex.slice(sPfxCode.charCodeAt(0)-48); return sSfxCode[0] == '0' ? sFlex + sSfxCode.slice(1) : sFlex.slice(0, -(sSfxCode.charCodeAt(0)-48)) + sSfxCode.slice(1); } exports.getStemFromSuffixCode = getStemFromSuffixCode; exports.getStemFromAffixCode = getStemFromAffixCode; |
Added gc_core/js/tests.js version [1893d7a17d].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | // JavaScript "use strict"; const helpers = require("resource://grammalecte/helpers.js"); class TestGrammarChecking { constructor (gce) { this.gce = gce; this._aRuleTested = new Set(); }; * testParse (bDebug=false) { const t0 = Date.now(); const aData = JSON.parse(helpers.loadFile("resource://grammalecte/"+this.gce.lang+"/tests_data.json")).aData; //const aData = require("resource://grammalecte/"+this.gce.lang+"/tests_data.js").aData; let nInvalid = 0 let nTotal = 0 let sErrorText; let sSugg; let sExpectedErrors; let sTextToCheck; let sFoundErrors; let sListErr; let sLineNum; let i = 1; let sUntestedRules = ""; let bShowUntested = false; let zOption = /^__([a-zA-Z0-9]+)__ /; let sOption; let m; yield "Tests [" + this.gce.lang + "]: " + aData.length.toString(); try { for (let sLine of aData) { sLineNum = sLine.slice(0,10).trim(); sLine = sLine.slice(10).trim(); if (sLine.length > 0 && !sLine.startsWith("#")) { sOption = false; m = zOption.exec(sLine); if (m) { sLine = sLine.slice(sLine.indexOf(" ")+1); sOption = m[1]; } if (sLine.includes("->>")) { [sErrorText, sSugg] = sLine.split("->>"); sErrorText = sErrorText.trim(); sSugg = sSugg.trim(); } else { sErrorText = sLine.trim(); } sExpectedErrors = this._getExpectedErrors(sErrorText); sTextToCheck = sErrorText.replace(/\{\{/g, "").replace(/\}\}/g, ""); [sFoundErrors, sListErr] = this._getFoundErrors(sTextToCheck, bDebug, sOption); if (sExpectedErrors !== sFoundErrors) { yield "\n" + i.toString() + "\n# Line num: " + sLineNum + "\n> to check: " + sTextToCheck + "\n expected: " + sExpectedErrors + "\n found: " + sFoundErrors + "\n errors: \n" + sListErr; nInvalid = nInvalid + 1 } nTotal = nTotal + 1; } i = i + 1; if (i % 100 === 0) { yield i.toString(); } } bShowUntested = true; } catch (e) { helpers.logerror(e); } if (bShowUntested) { i = 0; for (let [sOpt, sLineId, sRuleId] of gce.listRules()) { if (!this._aRuleTested.has(sLineId) && !/^[0-9]+[sp]$/.test(sRuleId)) { sUntestedRules += sRuleId + ", "; i += 1; } } if (i > 0) { yield sUntestedRules + "\n[" + i.toString() + " untested rules]"; } } const t1 = Date.now(); yield "Tests parse finished in " + ((t1-t0)/1000).toString() + " s\nTotal errors: " + nInvalid.toString() + " / " + nTotal.toString(); }; _getExpectedErrors (sLine) { try { let sRes = " ".repeat(sLine.length); let z = /\{\{.+?\}\}/g; let m; let i = 0; while ((m = z.exec(sLine)) !== null) { let nStart = m.index - (4 * i); let nEnd = m.index + m[0].length - (4 * (i+1)); sRes = sRes.slice(0, nStart) + "~".repeat(nEnd - nStart) + sRes.slice(nEnd, -4); i = i + 1; // Warning! JS sucks: infinite loop if writing directly /\{\{.+?\}\}/g.exec(sLine) // lines below to remove when I know why. if (i > 10) { console.log("\ninfinite loop?\nline:"+sLine+"\nm: "+ m.toString()); break; } } return sRes; } catch (e) { helpers.logerror(e); } return " ".repeat(sLine.length); }; _getFoundErrors (sLine, bDebug, sOption) { try { let aErrs = []; if (sOption) { gce.setOption(sOption, true); aErrs = this.gce.parse(sLine, "FR", bDebug); gce.setOption(sOption, false); } else { aErrs = this.gce.parse(sLine, "FR", bDebug); } let sRes = " ".repeat(sLine.length); let sListErr = ""; for (let dErr of aErrs) { sRes = sRes.slice(0, dErr["nStart"]) + "~".repeat(dErr["nEnd"] - dErr["nStart"]) + sRes.slice(dErr["nEnd"]); sListErr += " * {" + dErr['sLineId'] + " / " + dErr['sRuleId'] + "} at " + dErr['nStart'] + ":" + dErr['nEnd'] + "\n"; this._aRuleTested.add(dErr["sLineId"]); } return [sRes, sListErr]; } catch (e) { helpers.logerror(e); } return [" ".repeat(sLine.length), ""]; }; } exports.TestGrammarChecking = TestGrammarChecking; |
Added gc_core/js/text.js version [0a62428d8c].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 | // JavaScript "use strict"; const helpers = require("resource://grammalecte/helpers.js"); function* getParagraph (sText) { // generator: returns paragraphs of text let iStart = 0; let iEnd = 0; sText = sText.replace("\r", ""); while ((iEnd = sText.indexOf("\n", iStart)) !== -1) { yield sText.slice(iStart, iEnd); iStart = iEnd + 1; } yield sText.slice(iStart); } function* wrap (sText, nWidth=80) { // generator: returns text line by line while (sText) { if (sText.length >= nWidth) { let nEnd = sText.lastIndexOf(" ", nWidth) + 1; if (nEnd > 0) { yield sText.slice(0, nEnd); sText = sText.slice(nEnd); } else { yield sText.slice(0, nWidth); sText = sText.slice(nWidth); } } else { break; } } yield sText; } function getReadableError (oErr) { // Returns an error oErr as a readable error try { let s = "\n* " + oErr['nStart'] + ":" + oErr['nEnd'] + " # " + oErr['sRuleId']+" : "; s += oErr["sMessage"]; if (oErr["aSuggestions"].length > 0) { s += "\n > Suggestions : " + oErr["aSuggestions"].join(" | "); } if (oErr["URL"] !== "") { s += "\n > URL: " + oErr["URL"]; } return s; } catch (e) { helpers.logerror(e); return "\n# Error. Data: " + oErr.toString(); } } function addHtmlEntities (sParagraph) { if (sParagraph.includes("&")) { sParagraph = sParagraph.replace(/&/g, "&"); } if (sParagraph.includes("<")) { sParagraph = sParagraph.replace(/</g, "<").replace(/>/g, ">"); } return sParagraph; } function createHTMLBlock (sParagraph, iParagraph) { let sClassName = (sParagraph.includes('<u id="err')) ? " softred" : ""; return '<p id="paragr'+iParagraph.toString()+'" class="paragraph' + sClassName + '" lang="fr" spellcheck="false">' + sParagraph + '</p>\n' + '<div class="actions"><div id="end'+iParagraph.toString()+'" class="button red">×</div>' + '<div id="edit'+iParagraph.toString()+'" class="button">Éditer</div>' + '<div id="check'+iParagraph.toString()+'" class="button green">Réanalyser</div> </div>\n'; } function tagParagraph (sParagraph, iParagraph, aGrammErr, aSpellErr, bDebug=false) { // Returns a text with with underlined errors and messages in tooltip try { if (aGrammErr.length === 0 && aSpellErr.length === 0) { return sParagraph; } aGrammErr.push(...aSpellErr); aGrammErr.sort(function (a, b) { if (a["nStart"] < b["nStart"]) return 1; if (a["nStart"] > b["nStart"]) return -1; return 0; }); let nErr = aGrammErr.length - 1; // we count errors to give them an identifier let nStartLastErr = sParagraph.length; for (let oErr of aGrammErr) { let sErrId = iParagraph.toString() + "_" + nErr.toString(); let nStart = oErr["nStart"]; let nEnd = oErr["nEnd"]; if (nEnd <= nStartLastErr) { oErr["sId"] = sErrId; if (oErr['sType'] !== 'WORD') { // Grammar Error sParagraph = sParagraph.slice(0, nStart) + '<u id="err' + sErrId + '" class="error '+oErr['sType']+'" href="#" onclick="return false;">' + sParagraph.slice(nStart, nEnd) + '<span id="tooltip' + sErrId + '" class="tooltip" contenteditable="false">' + getGrammarErrorHTML(oErr, bDebug) + '</span>' + "</u><!-- err_end -->" + sParagraph.slice(nEnd); } else { // Spelling error sParagraph = sParagraph.slice(0, nStart) + '<u id="err' + sErrId + '" class="error spell" href="#" onclick="return false;">' + sParagraph.slice(nStart, nEnd) + '<span id="tooltip' + sErrId + '" class="tooltip" contenteditable="false">' + getSpellingErrorHTML(oErr) + '</span>' + "</u><!-- err_end -->" + sParagraph.slice(nEnd); } nStartLastErr = nStart; } nErr -= 1; } return sParagraph; } catch (e) { helpers.logerror(e); return "# Error."; } } function getGrammarErrorHTML (oErr, bDebug=false) { // Returns an error oErr as a readable error in HTML try { let sErr = ''; if (bDebug) { sErr += '<em class="debug">' + '<i id="data'+oErr['sId']+'" class="data" hidden>' + oErr['nStart'] + ":" + oErr['nEnd'] + ' · #' + oErr['sRuleId'] + " </i>+</em>"; } sErr += oErr["sMessage"]; sErr += ' <a id="ignore'+oErr['sId']+'" class="ignore" href="#" onclick="return false;">IGNORER</a>'; if (oErr["URL"] !== "") { sErr += ' <a href="' + oErr["URL"] + '" onclick="return false;">Infos…</a>'; } if (oErr["aSuggestions"].length > 0) { sErr += '<br/><s>Suggestions :</s><br/>'; let iSugg = 0; for (let sSugg of oErr["aSuggestions"]) { sErr += '<a id="sugg' + oErr['sId'] + "-" + iSugg + '" class="sugg" href="#" onclick="return false;">' + sSugg + '</a> '; iSugg += 1; } } return sErr; } catch (e) { helpers.logerror(e); return '# Error. Data: ' + oErr.toString(); } } function getSpellingErrorHTML (oErr) { // Returns an error oErr as a readable error in HTML try { let sErr = 'Mot inconnu du dictionnaire.'; sErr += ' <a id="ignore' + oErr['sId'] + '" class="ignore" href="#" onclick="return false;">IGNORER</a>'; sErr += '<br/><s>Suggestions :</s><br/>'; return sErr; } catch (e) { helpers.logerror(e); return '# Error. Data: ' + oErr.toString(); } } exports.getParagraph = getParagraph; exports.addHtmlEntities = addHtmlEntities; exports.createHTMLBlock = createHTMLBlock; exports.tagParagraph = tagParagraph; exports.getReadableError = getReadableError; |
Added gc_core/js/tokenizer.js version [d06151ccd7].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | // JavaScript // Very simple tokenizer "use strict"; const helpers = require("resource://grammalecte/helpers.js"); const aPatterns = { // All regexps must start with ^. "default": [ [/^[ \t]+/, 'SPACE'], [/^[,.;:!?…«»“”"()/·]+/, 'SEPARATOR'], [/^(?:https?:\/\/|www[.]|[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st_]+[@.][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st_]+[@.])[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st_.\/?&!%=+*"'@$#-]+/, 'LINK'], [/^[#@][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st_-]+/, 'TAG'], [/^<[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st]+.*?>|<\/[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st]+ *>/, 'HTML'], [/^\[\/?[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st]+\]/, 'PSEUDOHTML'], [/^&\w+;(?:\w+;|)/, 'HTMLENTITY'], [/^\d\d?h\d\d\b/, 'HOUR'], [/^-?\d+(?:[.,]\d+|)/, 'NUM'], [/^[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st]+(?:[’'`-][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st]+)*/, 'WORD'] ], "fr": [ [/^[ \t]+/, 'SPACE'], [/^[,.;:!?…«»“”"()/·]+/, 'SEPARATOR'], [/^(?:https?:\/\/|www[.]|[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st_]+[@.][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st_]+[@.])[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st_.\/?&!%=+*"'@$#-]+/, 'LINK'], [/^[#@][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st_-]+/, 'TAG'], [/^<[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st]+.*?>|<\/[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st]+ *>/, 'HTML'], [/^\[\/?[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st]+\]/, 'PSEUDOHTML'], [/^&\w+;(?:\w+;|)/, 'HTMLENTITY'], [/^(?:l|d|n|m|t|s|j|c|ç|lorsqu|puisqu|jusqu|quoiqu|qu)['’`]/i, 'ELPFX'], [/^\d\d?[hm]\d\d\b/, 'HOUR'], [/^\d+(?:er|nd|e|de|ième|ème|eme)\b/, 'ORDINAL'], [/^-?\d+(?:[.,]\d+|)/, 'NUM'], [/^[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st]+(?:[’'`-][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯfi-st]+)*/, 'WORD'] ] } class Tokenizer { constructor (sLang) { this.sLang = sLang; if (!aPatterns.hasOwnProperty(sLang)) { this.sLang = "default"; } this.aRules = aPatterns[sLang]; }; * genTokens (sText) { let m; let i = 0; while (sText) { let nCut = 1; for (let [zRegex, sType] of this.aRules) { try { if ((m = zRegex.exec(sText)) !== null) { yield { "sType": sType, "sValue": m[0], "nStart": i, "nEnd": i + m[0].length } nCut = m[0].length; break; } } catch (e) { helpers.logerror(e); } } i += nCut; sText = sText.slice(nCut); } } } exports.Tokenizer = Tokenizer; |
Added gc_core/py/README.txt version [ffaeafbfd2].
> > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | = GRAMMALECTE = Grammar checker By Olivier R. Website: http://grammalecte.net License: GPL 3 -- http://www.gnu.org/copyleft/gpl.html Grammalecte is a fork of Lightproof from László Németh (nemeth /at/ numbertext /dot/ org) http://cgit.freedesktop.org/libreoffice/lightproof/ Required : Python 3.3 |
Added gc_core/py/__init__.py version [a7ffc6f8bf].
Added gc_core/py/dawg.py version [a9c487538f].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 | #!python3 # FSA DICTIONARY BUILDER # # by Olivier R. # License: MPL 2 # # This tool encodes lexicon into an indexable binary dictionary # Input files MUST be encoded in UTF-8. import sys import os import collections from . import str_transform as st from .progressbar import ProgressBar class DAWG: """DIRECT ACYCLIC WORD GRAPH""" # This code is inspired from Steve Hanov’s DAWG, 2011. (http://stevehanov.ca/blog/index.php?id=115) # We store suffix/affix codes and tags within the graph after the “real” word. # A word is a list of numbers [ c1, c2, c3 . . . cN, iAffix, iTags] # Each arc is an index in self.lArcVal, where are stored characters, suffix/affix codes for stemming and tags. # Important: As usual, the last node (after ‘iTags’) is tagged final, AND the node after ‘cN’ is ALSO tagged final. def __init__ (self, spfSrc, sLangName, cStemming): print("===== Direct Acyclic Word Graph - Minimal Acyclic Finite State Automaton =====") cStemming = cStemming.upper() if cStemming == "A": funcStemmingGen = st.defineAffixCode elif cStemming == "S": funcStemmingGen = st.defineSuffixCode elif cStemming == "N": funcStemmingGen = st.noStemming else: print("# Error code: {}".format(cStemming)) exit() lEntry = [] lChar = ['']; dChar = {}; nChar = 1; dCharOccur = {} lAff = []; dAff = {}; nAff = 0; dAffOccur = {} lTag = []; dTag = {}; nTag = 0; dTagOccur = {} nErr = 0 # read lexicon with open(spfSrc, 'r', encoding='utf-8') as hSrc: print(" > Reading lexicon: " + spfSrc + " ...") for line in hSrc: line = line.strip() if not (line.startswith('#') or line == ''): try: flex, stem, tag = line.split("\t") except: nErr += 1 continue # chars for c in flex: if c not in dChar: dChar[c] = nChar lChar.append(c) nChar += 1 dCharOccur[c] = dCharOccur.get(c, 0) + 1 # affixes to find stem from flexion aff = funcStemmingGen(flex, stem) if aff not in dAff: dAff[aff] = nAff lAff.append(aff) nAff += 1 dAffOccur[aff] = dCharOccur.get(aff, 0) + 1 # tags if tag not in dTag: dTag[tag] = nTag lTag.append(tag) nTag += 1 dTagOccur[tag] = dTagOccur.get(tag, 0) + 1 lEntry.append((flex, dAff[aff], dTag[tag])) hSrc.close() if nErr: print(" # Lines ignored: {:>10}".format(nErr)) if not(lEntry): print(" # Empty lexicon") exit() # Preparing DAWG print(" > Preparing list of words") lVal = lChar + lAff + lTag lWord = [ [dChar[c] for c in sFlex] + [iAff+nChar] + [iTag+nChar+nAff] for sFlex, iAff, iTag in lEntry ] lEntry = None # Dictionary of arc values occurrency, to sort arcs of each node dValOccur = dict( [ (dChar[c], dCharOccur[c]) for c in dChar ] \ + [ (dAff[aff]+nChar, dAffOccur[aff]) for aff in dAff ] \ + [ (dTag[tag]+nChar+nAff, dTagOccur[tag]) for tag in dTag ] ) #with open(spfSrc[:-8]+".valuesfreq.txt", 'w', encoding='utf-8') as hFreqDst: # DEBUG # for iKey, nOcc in sorted(dValOccur.items(), key=lambda t: t[1], reverse=True): # hFreqDst.write("{}: {}\n".format(lVal[iKey], nOcc)) # hFreqDst.close() self.sFile = spfSrc self.sLang = sLangName self.nEntry = len(lWord) self.previousWord = [] DawgNode.resetNextId() self.root = DawgNode() self.uncheckedNodes = [] # list of nodes that have not been checked for duplication. self.minimizedNodes = {} # list of unique nodes that have been checked for duplication. self.sortedNodes = [] # version 2 and 3 self.nNode = 0 self.nArc = 0 self.dChar = dChar self.nChar = len(dChar) self.nAff = nAff self.lArcVal = lVal self.nArcVal = len(lVal) self.nTag = self.nArcVal - self.nChar - nAff self.cStemming = cStemming.upper() if cStemming == "A": self.funcStemming = st.getStemFromAffixCode elif cStemming == "S": self.funcStemming = st.getStemFromSuffixCode else: self.funcStemming = st.noStemming # build lWord.sort() oProgBar = ProgressBar(0, len(lWord)) for word in lWord: self.insert(word) oProgBar.increment(1) oProgBar.done() self.finish() self.countNodes() self.countArcs() self.sortNodes() self.sortNodeArcs(dValOccur) self.displayInfo() # BUILD DAWG def insert (self, word): if word < self.previousWord: sys.exit("# Error: Words must be inserted in alphabetical order.") # find common prefix between word and previous word commonPrefix = 0 for i in range(min(len(word), len(self.previousWord))): if word[i] != self.previousWord[i]: break commonPrefix += 1 # Check the uncheckedNodes for redundant nodes, proceeding from last # one down to the common prefix size. Then truncate the list at that point. self._minimize(commonPrefix) # add the suffix, starting from the correct node mid-way through the graph if len(self.uncheckedNodes) == 0: oNode = self.root else: oNode = self.uncheckedNodes[-1][2] iChar = commonPrefix for c in word[commonPrefix:]: oNextNode = DawgNode() oNode.arcs[c] = oNextNode self.uncheckedNodes.append((oNode, c, oNextNode)) if iChar == (len(word) - 2): oNode.final = True iChar += 1 oNode = oNextNode oNode.final = True self.previousWord = word def finish (self): "minimize unchecked nodes" self._minimize(0) def _minimize (self, downTo): # proceed from the leaf up to a certain point for i in range( len(self.uncheckedNodes)-1, downTo-1, -1 ): (parent, char, child) = self.uncheckedNodes[i] if child in self.minimizedNodes: # replace the child with the previously encountered one parent.arcs[char] = self.minimizedNodes[child] else: # add the state to the minimized nodes. self.minimizedNodes[child] = child self.uncheckedNodes.pop() def countNodes (self): self.nNode = len(self.minimizedNodes) def countArcs (self): self.nArc = 0 for node in self.minimizedNodes: self.nArc += len(node.arcs) def sortNodeArcs (self, dValOccur): print(" > Sort node arcs") self.root.sortArcs(dValOccur) for oNode in self.minimizedNodes: oNode.sortArcs(dValOccur) def sortNodes (self): print(" > Sort nodes") for oNode in self.root.arcs.values(): self._parseNodes(oNode) def _parseNodes (self, oNode): # Warning: recursive method if oNode.pos > 0: return oNode.setPos() self.sortedNodes.append(oNode) for oNextNode in oNode.arcs.values(): self._parseNodes(oNextNode) def lookup (self, sWord): oNode = self.root for c in sWord: if self.dChar.get(c, '') not in oNode.arcs: return False oNode = oNode.arcs[self.dChar[c]] return oNode.final def morph (self, sWord): oNode = self.root for c in sWord: if self.dChar.get(c, '') not in oNode.arcs: return '' oNode = oNode.arcs[self.dChar[c]] if oNode.final: s = "* " for arc in oNode.arcs: if arc >= self.nChar: s += " [" + self.funcStemming(sWord, self.lArcVal[arc]) oNode2 = oNode.arcs[arc] for arc2 in oNode2.arcs: s += " / " + self.lArcVal[arc2] s += "]" return s return '' def displayInfo (self): print(" * {:<12} {:>16,}".format("Entries:", self.nEntry)) print(" * {:<12} {:>16,}".format("Characters:", self.nChar)) print(" * {:<12} {:>16,}".format("Affixes:", self.nAff)) print(" * {:<12} {:>16,}".format("Tags:", self.nTag)) print(" * {:<12} {:>16,}".format("Arc values:", self.nArcVal)) print(" * {:<12} {:>16,}".format("Nodes:", self.nNode)) print(" * {:<12} {:>16,}".format("Arcs:", self.nArc)) print(" * {:<12} {:>16}".format("Stemming:", self.cStemming + "FX")) def getArcStats (self): d = {} for oNode in self.minimizedNodes: n = len(oNode.arcs) d[n] = d.get(n, 0) + 1 s = " * Nodes:\n" for n in d: s = s + " {:>9} nodes have {:>3} arcs\n".format(d[n], n) return s def writeInfo (self, sPathFile): print(" > Write informations") with open(sPathFile, 'w', encoding='utf-8', newline="\n") as hDst: hDst.write(self.getArcStats()) hDst.write("\n * Values:\n") for i, s in enumerate(self.lArcVal): hDst.write(" {:>6}. {}\n".format(i, s)) hDst.close() # BINARY CONVERSION def createBinary (self, sPathFile, nMethod, bDebug=False): print(" > Write DAWG as an indexable binary dictionary [method: %d]" % nMethod) if nMethod == 1: self.nBytesArc = ( ( (self.nArcVal).bit_length() + 2 ) // 8 ) + 1 # We add 2 bits. See DawgNode.convToBytes1() self._calcNumBytesNodeAddress() self._calcNodesAddress1() elif nMethod == 2: self.nBytesArc = ( ( (self.nArcVal).bit_length() + 3 ) // 8 ) + 1 # We add 3 bits. See DawgNode.convToBytes2() self._calcNumBytesNodeAddress() self._calcNodesAddress2() elif nMethod == 3: self.nBytesArc = ( ( (self.nArcVal).bit_length() + 3 ) // 8 ) + 1 # We add 3 bits. See DawgNode.convToBytes3() self.nBytesOffset = 1 self.nMaxOffset = (2 ** (self.nBytesOffset * 8)) - 1 self._calcNumBytesNodeAddress() self._calcNodesAddress3() else: print(" # Error: unknown compression method") print(" Arc values (chars, affixes and tags): {} -> {} bytes".format( self.nArcVal, len("\t".join(self.lArcVal).encode("utf-8")) )) print(" Arc size: {} bytes, Address size: {} bytes -> {} * {} = {} bytes".format( self.nBytesArc, self.nBytesNodeAddress, \ self.nBytesArc+self.nBytesNodeAddress, self.nArc, \ (self.nBytesArc+self.nBytesNodeAddress)*self.nArc )) self._writeBinary(sPathFile, nMethod) if bDebug: self._writeNodes(sPathFile, nMethod) def _calcNumBytesNodeAddress (self): "how many bytes needed to store all nodes/arcs in the binary dictionary" self.nBytesNodeAddress = 1 while ((self.nBytesArc + self.nBytesNodeAddress) * self.nArc) > (2 ** (self.nBytesNodeAddress * 8)): self.nBytesNodeAddress += 1 def _calcNodesAddress1 (self): nBytesNode = self.nBytesArc + self.nBytesNodeAddress iAddr = len(self.root.arcs) * nBytesNode for oNode in self.minimizedNodes: oNode.addr = iAddr iAddr += max(len(oNode.arcs), 1) * nBytesNode def _calcNodesAddress2 (self): nBytesNode = self.nBytesArc + self.nBytesNodeAddress iAddr = len(self.root.arcs) * nBytesNode for oNode in self.sortedNodes: oNode.addr = iAddr iAddr += max(len(oNode.arcs), 1) * nBytesNode for oNextNode in oNode.arcs.values(): if (oNode.pos + 1) == oNextNode.pos: iAddr -= self.nBytesNodeAddress #break def _calcNodesAddress3 (self): nBytesNode = self.nBytesArc + self.nBytesNodeAddress # theorical nodes size if only addresses and no offset self.root.size = len(self.root.arcs) * nBytesNode for oNode in self.sortedNodes: oNode.size = max(len(oNode.arcs), 1) * nBytesNode # rewind and calculate dropdown from the end, several times nDiff = self.nBytesNodeAddress - self.nBytesOffset bEnd = False while not bEnd: bEnd = True # recalculate addresses iAddr = self.root.size for oNode in self.sortedNodes: oNode.addr = iAddr iAddr += oNode.size # rewind and calculate dropdown from the end, several times for i in range(self.nNode-1, -1, -1): nSize = max(len(self.sortedNodes[i].arcs), 1) * nBytesNode for oNextNode in self.sortedNodes[i].arcs.values(): if 1 < (oNextNode.addr - self.sortedNodes[i].addr) < self.nMaxOffset: nSize -= nDiff if self.sortedNodes[i].size != nSize: self.sortedNodes[i].size = nSize bEnd = False def _writeBinary (self, sPathFile, nMethod): """ Format of the binary indexable dictionary: Each section is separated with 4 bytes of \0 - Section Header: /pyfsa/[version] * version is an ASCII string - Section Informations: /[tag_lang] /[number of chars] /[number of bytes for each arc] /[number of bytes for each address node] /[number of entries] /[number of nodes] /[number of arcs] /[number of affixes] * each field is a ASCII string /[stemming code] * "S" means stems are generated by /suffix_code/, "A" means they are generated by /affix_code/ See defineSuffixCode() and defineAffixCode() for details. "N" means no stemming - Section Values: * a list of strings encoded in binary from utf-8, each value separated with a tabulation - Section Word Graph (nodes / arcs) * A list of nodes which are a list of arcs with an address of the next node. See DawgNode.convToBytes() for details. """ if not sPathFile.endswith(".bdic"): sPathFile += "."+str(nMethod)+".bdic" with open(sPathFile, 'wb') as hDst: # header hDst.write("/pyfsa/{}/".format(nMethod).encode("utf-8")) hDst.write(b"\0\0\0\0") # infos hDst.write("{}/{}/{}/{}/{}/{}/{}/{}/{}".format(self.sLang, self.nChar, self.nBytesArc, self.nBytesNodeAddress, \ self.nEntry, self.nNode, self.nArc, self.nAff, self.cStemming).encode("utf-8")) hDst.write(b"\0\0\0\0") # lArcVal hDst.write("\t".join(self.lArcVal).encode("utf-8")) hDst.write(b"\0\0\0\0") # DAWG: nodes / arcs if nMethod == 1: hDst.write(self.root.convToBytes1(self.nBytesArc, self.nBytesNodeAddress)) for oNode in self.minimizedNodes: hDst.write(oNode.convToBytes1(self.nBytesArc, self.nBytesNodeAddress)) elif nMethod == 2: hDst.write(self.root.convToBytes2(self.nBytesArc, self.nBytesNodeAddress)) for oNode in self.sortedNodes: hDst.write(oNode.convToBytes2(self.nBytesArc, self.nBytesNodeAddress)) elif nMethod == 3: hDst.write(self.root.convToBytes3(self.nBytesArc, self.nBytesNodeAddress, self.nBytesOffset)) for oNode in self.sortedNodes: hDst.write(oNode.convToBytes3(self.nBytesArc, self.nBytesNodeAddress, self.nBytesOffset)) hDst.close() def _writeNodes (self, sPathFile, nMethod): "for debugging only" print(" > Write nodes") with open(sPathFile+".nodes."+str(nMethod)+".txt", 'w', encoding='utf-8', newline="\n") as hDst: if nMethod == 1: hDst.write(self.root.getTxtRepr1(self.nBytesArc, self.nBytesNodeAddress, self.lArcVal)+"\n") #hDst.write( ''.join( [ "%02X " % z for z in self.root.convToBytes1(self.nBytesArc, self.nBytesNodeAddress) ] ).strip() ) for oNode in self.minimizedNodes: hDst.write(oNode.getTxtRepr1(self.nBytesArc, self.nBytesNodeAddress, self.lArcVal)+"\n") if nMethod == 2: hDst.write(self.root.getTxtRepr2(self.nBytesArc, self.nBytesNodeAddress, self.lArcVal)+"\n") for oNode in self.sortedNodes: hDst.write(oNode.getTxtRepr2(self.nBytesArc, self.nBytesNodeAddress, self.lArcVal)+"\n") if nMethod == 3: hDst.write(self.root.getTxtRepr3(self.nBytesArc, self.nBytesNodeAddress, self.nBytesOffset, self.lArcVal)+"\n") #hDst.write( ''.join( [ "%02X " % z for z in self.root.convToBytes3(self.nBytesArc, self.nBytesNodeAddress, self.nBytesOffset) ] ).strip() ) for oNode in self.sortedNodes: hDst.write(oNode.getTxtRepr3(self.nBytesArc, self.nBytesNodeAddress, self.nBytesOffset, self.lArcVal)+"\n") hDst.close() def writeResults (self, sPathFile): bFileExits = os.path.isfile("_lexicons.res.txt") with open("_lexicons.res.txt", "a", encoding='utf-8', newline="\n") as hDst: sFormat1 = "{:<12} {:>12} {:>5} {:>8} {:>8} {:>6} {:>8} {:>9} {:>9} {:>15} {:>12} {:>12}\n" sFormat2 = "{:<12} {:>12,} {:>5,} {:>8,} {:>8} {:>6,} {:>8,} {:>9,} {:>9,} {:>15,} {:>12,} {:>12,}\n" if not bFileExits: hDst.write(sFormat1.format("Lexicon", "Entries", "Chars", "Affixes", "Stemming", "Tags", "Values", "Nodes", "Arcs", "Lexicon (Kb)", "Dict (Kb)", "LT Dict (Kb)")) hDst.write(sFormat2.format(self.sLang, self.nEntry, self.nChar, self.nAff, self.cStemming + "FX", self.nTag, self.nArcVal, \ self.nNode, self.nArc, os.path.getsize(self.sFile), os.path.getsize(sPathFile), \ os.path.getsize("cfsa/dict/{}.dict".format(self.sLang)) if os.path.isfile("cfsa/dict/{}.dict".format(self.sLang)) else 0)) hDst.close() class DawgNode: NextId = 0 NextPos = 1 # (version 2) def __init__ (self): self.i = DawgNode.NextId DawgNode.NextId += 1 self.final = False self.arcs = {} # key: arc value; value: a node self.addr = 0 # address in the binary dictionary self.pos = 0 # position in the binary dictionary (version 2) self.size = 0 # size of node in bytes (version 3) @classmethod def resetNextId (cls): cls.NextId = 0 def setPos (self): # version 2 self.pos = DawgNode.NextPos DawgNode.NextPos += 1 def __str__ (self): # Caution! this function is used for hashing and comparison! l = [] if self.final: l.append("1") else: l.append("0") for (key, node) in self.arcs.items(): l.append(str(key)) l.append(str(node.i)) return "_".join(l) def __hash__ (self): # Used as a key in a python dictionary. return self.__str__().__hash__() def __eq__ (self, other): # Used as a key in a python dictionary. # Nodes are equivalent if they have identical arcs, and each identical arc leads to identical states. return self.__str__() == other.__str__() def sortArcs (self, dValOccur): self.arcs = collections.OrderedDict(sorted(self.arcs.items(), key=lambda t: dValOccur[t[0]], reverse=True)) # VERSION 1 ===================================================================================================== def convToBytes1 (self, nBytesArc, nBytesNodeAddress): """ Node scheme: - Arc length is defined by nBytesArc - Address length is defined by nBytesNodeAddress | Arc | Address of next node | | | | /---------------\ /---------------\ /---------------\ /---------------\ /---------------\ /---------------\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \---------------/ \---------------/ \---------------/ \---------------/ \---------------/ \---------------/ [...] /---------------\ /---------------\ /---------------\ /---------------\ /---------------\ /---------------\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \---------------/ \---------------/ \---------------/ \---------------/ \---------------/ \---------------/ ^ ^ | | | | | \___ if 1, last arc of this node \_____ if 1, this node is final (only on the first arc) """ nArc = len(self.arcs) nFinalNodeMask = 1 << ((nBytesArc*8)-1) nFinalArcMask = 1 << ((nBytesArc*8)-2) if len(self.arcs) == 0: val = nFinalNodeMask | nFinalArcMask by = val.to_bytes(nBytesArc, byteorder='big') by += (0).to_bytes(nBytesNodeAddress, byteorder='big') return by by = b"" for i, arc in enumerate(self.arcs, 1): val = arc if i == 1 and self.final: val = val | nFinalNodeMask if i == nArc: val = val | nFinalArcMask by += val.to_bytes(nBytesArc, byteorder='big') by += self.arcs[arc].addr.to_bytes(nBytesNodeAddress, byteorder='big') return by def getTxtRepr1 (self, nBytesArc, nBytesNodeAddress, lVal): nArc = len(self.arcs) nFinalNodeMask = 1 << ((nBytesArc*8)-1) nFinalArcMask = 1 << ((nBytesArc*8)-2) s = "i{:_>10} -- #{:_>10}\n".format(self.i, self.addr) if len(self.arcs) == 0: s += " {:<20} {:0>16} i{:_>10} #{:_>10}\n".format("", bin(nFinalNodeMask | nFinalArcMask)[2:], "0", "0") return s for i, arc in enumerate(self.arcs, 1): val = arc if i == 1 and self.final: val = val | nFinalNodeMask if i == nArc: val = val | nFinalArcMask s += " {:<20} {:0>16} i{:_>10} #{:_>10}\n".format(lVal[arc], bin(val)[2:], self.arcs[arc].i, self.arcs[arc].addr) return s # VERSION 2 ===================================================================================================== def convToBytes2 (self, nBytesArc, nBytesNodeAddress): """ Node scheme: - Arc length is defined by nBytesArc - Address length is defined by nBytesNodeAddress | Arc | Address of next node | | | | /---------------\ /---------------\ /---------------\ /---------------\ /---------------\ /---------------\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \---------------/ \---------------/ \---------------/ \---------------/ \---------------/ \---------------/ [...] /---------------\ /---------------\ /---------------\ /---------------\ /---------------\ /---------------\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \---------------/ \---------------/ \---------------/ \---------------/ \---------------/ \---------------/ ^ ^ ^ | | | | | \_ if 1, caution, no address: next node is the following node | \___ if 1, last arc of this node \_____ if 1, this node is final (only on the first arc) """ nArc = len(self.arcs) nFinalNodeMask = 1 << ((nBytesArc*8)-1) nFinalArcMask = 1 << ((nBytesArc*8)-2) nNextNodeMask = 1 << ((nBytesArc*8)-3) if len(self.arcs) == 0: val = nFinalNodeMask | nFinalArcMask by = val.to_bytes(nBytesArc, byteorder='big') by += (0).to_bytes(nBytesNodeAddress, byteorder='big') return by by = b"" for i, arc in enumerate(self.arcs, 1): val = arc if i == 1 and self.final: val = val | nFinalNodeMask if i == nArc: val = val | nFinalArcMask if (self.pos + 1) == self.arcs[arc].pos and self.i != 0: val = val | nNextNodeMask by += val.to_bytes(nBytesArc, byteorder='big') else: by += val.to_bytes(nBytesArc, byteorder='big') by += self.arcs[arc].addr.to_bytes(nBytesNodeAddress, byteorder='big') return by def getTxtRepr2 (self, nBytesArc, nBytesNodeAddress, lVal): nArc = len(self.arcs) nFinalNodeMask = 1 << ((nBytesArc*8)-1) nFinalArcMask = 1 << ((nBytesArc*8)-2) nNextNodeMask = 1 << ((nBytesArc*8)-3) s = "i{:_>10} -- #{:_>10}\n".format(self.i, self.addr) if nArc == 0: s += " {:<20} {:0>16} i{:_>10} #{:_>10}\n".format("", bin(nFinalNodeMask | nFinalArcMask)[2:], "0", "0") return s for i, arc in enumerate(self.arcs, 1): val = arc if i == 1 and self.final: val = val | nFinalNodeMask if i == nArc: val = val | nFinalArcMask if (self.pos + 1) == self.arcs[arc].pos and self.i != 0: val = val | nNextNodeMask s += " {:<20} {:0>16}\n".format(lVal[arc], bin(val)[2:], "") else: s += " {:<20} {:0>16} i{:_>10} #{:_>10}\n".format(lVal[arc], bin(val)[2:], self.arcs[arc].i, self.arcs[arc].addr) return s # VERSION 3 ===================================================================================================== def convToBytes3 (self, nBytesArc, nBytesNodeAddress, nBytesOffset): """ Node scheme: - Arc length is defined by nBytesArc - Address length is defined by nBytesNodeAddress - Offset length is defined by nBytesOffset | Arc | Address of next node or offset to next node | | | | /---------------\ /---------------\ /---------------\ /---------------\ /---------------\ /---------------\ |1|0|0| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \---------------/ \---------------/ \---------------/ \---------------/ \---------------/ \---------------/ [...] /---------------\ /---------------\ /---------------\ |0|0|1| | | | | | | | | | | | | | | | | | | | | | | | Offsets are shorter than addresses \---------------/ \---------------/ \---------------/ /---------------\ /---------------\ /---------------\ /---------------\ /---------------\ /---------------\ |0|1|0| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | \---------------/ \---------------/ \---------------/ \---------------/ \---------------/ \---------------/ ^ ^ ^ | | | | | \_ if 1, offset instead of address of next node | \___ if 1, last arc of this node \_____ if 1, this node is final (only on the first arc) """ nArc = len(self.arcs) nFinalNodeMask = 1 << ((nBytesArc*8)-1) nFinalArcMask = 1 << ((nBytesArc*8)-2) nNextNodeMask = 1 << ((nBytesArc*8)-3) nMaxOffset = (2 ** (nBytesOffset * 8)) - 1 if nArc == 0: val = nFinalNodeMask | nFinalArcMask by = val.to_bytes(nBytesArc, byteorder='big') by += (0).to_bytes(nBytesNodeAddress, byteorder='big') return by by = b"" for i, arc in enumerate(self.arcs, 1): val = arc if i == 1 and self.final: val = val | nFinalNodeMask if i == nArc: val = val | nFinalArcMask if 1 < (self.arcs[arc].addr - self.addr) < nMaxOffset and self.i != 0: val = val | nNextNodeMask by += val.to_bytes(nBytesArc, byteorder='big') by += (self.arcs[arc].addr-self.addr).to_bytes(nBytesOffset, byteorder='big') else: by += val.to_bytes(nBytesArc, byteorder='big') by += self.arcs[arc].addr.to_bytes(nBytesNodeAddress, byteorder='big') return by def getTxtRepr3 (self, nBytesArc, nBytesNodeAddress, nBytesOffset, lVal): nArc = len(self.arcs) nFinalNodeMask = 1 << ((nBytesArc*8)-1) nFinalArcMask = 1 << ((nBytesArc*8)-2) nNextNodeMask = 1 << ((nBytesArc*8)-3) nMaxOffset = (2 ** (nBytesOffset * 8)) - 1 s = "i{:_>10} -- #{:_>10} ({})\n".format(self.i, self.addr, self.size) if nArc == 0: s += " {:<20} {:0>16} i{:_>10} #{:_>10}\n".format("", bin(nFinalNodeMask | nFinalArcMask)[2:], "0", "0") return s for i, arc in enumerate(self.arcs, 1): val = arc if i == 1 and self.final: val = val | nFinalNodeMask if i == nArc: val = val | nFinalArcMask if 1 < (self.arcs[arc].addr - self.addr) < nMaxOffset and self.i != 0: val = val | nNextNodeMask s += " {:<20} {:0>16} i{:_>10} +{:_>10}\n".format(lVal[arc], bin(val)[2:], self.arcs[arc].i, self.arcs[arc].addr - self.addr) else: s += " {:<20} {:0>16} i{:_>10} #{:_>10}\n".format(lVal[arc], bin(val)[2:], self.arcs[arc].i, self.arcs[arc].addr) return s |
Added gc_core/py/echo.py version [6d11a5dda8].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #!python3 # The most boring yet indispensable function: print! import sys _CHARMAP = str.maketrans({ 'œ': 'ö', 'Œ': 'Ö', 'ʳ': "r", 'ᵉ': "e", '…': "_", \ '“': '"', '”': '"', '„': '"', '‘': "'", '’': "'", \ 'ā': 'â', 'Ā': 'Â', 'ē': 'ê', 'Ē': 'Ê', 'ī': 'î', 'Ī': 'Î', \ 'ō': 'ô', 'Ō': 'Ô', 'ū': 'û', 'Ū': 'Û', 'Ÿ': 'Y', \ 'ś': 's', 'ŝ': 's', \ '—': '-', '–': '-' }) def echo (obj, sep=' ', end='\n', file=sys.stdout, flush=False): """ Print for Windows to avoid Python crashes. Encoding depends on Windows locale. No useful standard. Always returns True (useful for debugging).""" if sys.platform != "win32": print(obj, sep=sep, end=end, file=file, flush=flush) return True try: print(str(obj).translate(_CHARMAP), sep=sep, end=end, file=file, flush=flush) except: print(str(obj).encode('ascii', 'replace').decode('ascii', 'replace'), sep=sep, end=end, file=file, flush=flush) return True |
Added gc_core/py/ibdawg.py version [9ce1ce821d].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 | #!python3 # -*- coding: UTF-8 -*- import os import traceback import pkgutil from . import str_transform as st from .echo import echo class IBDAWG: """INDEXABLE BINARY DIRECT ACYCLIC WORD GRAPH""" def __init__ (self, sDicName): self.by = pkgutil.get_data(__package__, "_dictionaries/" + sDicName) if not self.by: raise OSError("# Error. File not found or not loadable: "+sDicName) if self.by[0:7] != b"/pyfsa/": raise TypeError("# Error. Not a pyfsa binary dictionary. Header: {}".format(self.by[0:9])) if not(self.by[7:8] == b"1" or self.by[7:8] == b"2" or self.by[7:8] == b"3"): raise ValueError("# Error. Unknown dictionary version: {}".format(self.by[7:8])) try: header, info, values, bdic = self.by.split(b"\0\0\0\0", 3) except Exception: raise Exception self.sName = sDicName self.nVersion = int(self.by[7:8].decode("utf-8")) self.sHeader = header.decode("utf-8") self.lArcVal = values.decode("utf-8").split("\t") self.nArcVal = len(self.lArcVal) self.byDic = bdic l = info.decode("utf-8").split("/") self.sLang = l[0] self.nChar = int(l[1]) self.nBytesArc = int(l[2]) self.nBytesNodeAddress = int(l[3]) self.nEntries = int(l[4]) self.nNode = int(l[5]) self.nArc = int(l[6]) self.nAff = int(l[7]) self.cStemming = l[8] if self.cStemming == "S": self.funcStemming = st.getStemFromSuffixCode elif self.cStemming == "A": self.funcStemming = st.getStemFromAffixCode else: self.funcStemming = st.noStemming self.nTag = self.nArcVal - self.nChar - self.nAff self.dChar = {} for i in range(1, self.nChar): self.dChar[self.lArcVal[i]] = i self._arcMask = (2 ** ((self.nBytesArc * 8) - 3)) - 1 self._finalNodeMask = 1 << ((self.nBytesArc * 8) - 1) self._lastArcMask = 1 << ((self.nBytesArc * 8) - 2) self._addrBitMask = 1 << ((self.nBytesArc * 8) - 3) # version 2 self.nBytesOffset = 1 # version 3 # Configuring DAWG functions according to nVersion if self.nVersion == 1: self.morph = self._morph1 self.stem = self._stem1 self._lookupArcNode = self._lookupArcNode1 self._writeNodes = self._writeNodes1 elif self.nVersion == 2: self.morph = self._morph2 self.stem = self._stem2 self._lookupArcNode = self._lookupArcNode2 self._writeNodes = self._writeNodes2 elif self.nVersion == 3: self.morph = self._morph3 self.stem = self._stem3 self._lookupArcNode = self._lookupArcNode3 self._writeNodes = self._writeNodes3 else: raise ValueError(" # Error: unknown code: {}".format(self.nVersion)) self.bOptNumSigle = False self.bOptNumAtLast = False def getInfo (self): return " Language: {0.sLang:>10} Version: {0.nVersion:>2} Stemming: {0.cStemming}FX\n" \ " Arcs values: {0.nArcVal:>10,} = {0.nChar:>5,} characters, {0.nAff:>6,} affixes, {0.nTag:>6,} tags\n" \ " Dictionary: {0.nEntries:>12,} entries, {0.nNode:>11,} nodes, {0.nArc:>11,} arcs\n" \ " Address size: {0.nBytesNodeAddress:>1} bytes, Arc size: {0.nBytesArc:>1} bytes\n".format(self) def writeAsJSObject (self, spfDest, bInJSModule=False): "write IBDAWG as a JavaScript object in a JavaScript module" import json with open(spfDest, "w", encoding="utf-8", newline="\n") as hDst: if bInJSModule: hDst.write('// JavaScript\n// Generated data (do not edit)\n\n"use strict";\n\nconst dictionary = ') hDst.write(json.dumps({ "sName": self.sName, "nVersion": self.nVersion, "sHeader": self.sHeader, "lArcVal": self.lArcVal, "nArcVal": self.nArcVal, "byDic": [ e for e in self.byDic ], "sLang": self.sLang, "nChar": self.nChar, "nBytesArc": self.nBytesArc, "nBytesNodeAddress": self.nBytesNodeAddress, "nEntries": self.nEntries, "nNode": self.nNode, "nArc": self.nArc, "nAff": self.nAff, "cStemming": self.cStemming, "nTag": self.nTag, "dChar": self.dChar, "_arcMask": self._arcMask, "_finalNodeMask": self._finalNodeMask, "_lastArcMask": self._lastArcMask, "_addrBitMask": self._addrBitMask, "nBytesOffset": self.nBytesOffset }, ensure_ascii=False)) if bInJSModule: hDst.write(";\n\nexports.dictionary = dictionary;\n") def isValidToken (self, sToken): "checks if sToken is valid (if there is hyphens in sToken, sToken is split, each part is checked)" if self.isValid(sToken): return True if "-" in sToken: if sToken.count("-") > 4: return True return all(self.isValid(sWord) for sWord in sToken.split("-")) return False def isValid (self, sWord): "checks if sWord is valid (different casing tested if the first letter is a capital)" if not sWord: return None if "’" in sWord: # ugly hack sWord = sWord.replace("’", "'") if self.lookup(sWord): return True if sWord[0:1].isupper(): if len(sWord) > 1: if sWord.istitle(): return bool(self.lookup(sWord.lower())) if sWord.isupper(): if self.bOptNumSigle: return True return bool(self.lookup(sWord.lower()) or self.lookup(sWord.capitalize())) return bool(self.lookup(sWord[:1].lower() + sWord[1:])) else: return bool(self.lookup(sWord.lower())) return False def lookup (self, sWord): "returns True if sWord in dictionary (strict verification)" iAddr = 0 for c in sWord: if c not in self.dChar: return False iAddr = self._lookupArcNode(self.dChar[c], iAddr) if iAddr == None: return False return int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask def getSugg (self, sWord, iAddr=0, sNewWord=""): "not finished" # RECURSIVE FUNCTION if not sWord: if int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask: return [sNewWord] return [] lSugg = [] lArc = self._getSimilarArcs(sWord[0:1], iAddr) if lArc: for t in lArc: lSugg.extend(self._lookupAndSuggest(sWord[1:], t[1], sNewWord+t[0])) else: pass return lSugg def _getSimilarArcs (self, cChar, iAddr): lArc = [] for c in st.dSimilarChars.get(cChar, cChar): jAddr = self._lookupArcNode(self.dChar[c], iAddr) if jAddr: lArc.append((c, iAddr)) return lArc def getMorph (self, sWord): "retrieves morphologies list, different casing allowed" l = self.morph(sWord) if sWord[0:1].isupper(): l.extend(self.morph(sWord.lower())) if sWord.isupper() and len(sWord) > 1: l.extend(self.morph(sWord.capitalize())) return l # def morph (self, sWord): # is defined in __init__ # VERSION 1 def _morph1 (self, sWord): "returns morphologies of sWord" iAddr = 0 for c in sWord: if c not in self.dChar: return [] iAddr = self._lookupArcNode(self.dChar[c], iAddr) if iAddr == None: return [] if (int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask): l = [] nRawArc = 0 while not (nRawArc & self._lastArcMask): iEndArcAddr = iAddr + self.nBytesArc nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big') nArc = nRawArc & self._arcMask if nArc >= self.nChar: # This value is not a char, this is a stemming code sStem = ">" + self.funcStemming(sWord, self.lArcVal[nArc]) # Now , we go to the next node and retrieve all following arcs values, all of them are tags iAddr2 = int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesNodeAddress], byteorder='big') nRawArc2 = 0 while not (nRawArc2 & self._lastArcMask): iEndArcAddr2 = iAddr2 + self.nBytesArc nRawArc2 = int.from_bytes(self.byDic[iAddr2:iEndArcAddr2], byteorder='big') l.append(sStem + " " + self.lArcVal[nRawArc2 & self._arcMask]) iAddr2 = iEndArcAddr2+self.nBytesNodeAddress iAddr = iEndArcAddr+self.nBytesNodeAddress return l return [] def _stem1 (self, sWord): "returns stems list of sWord" iAddr = 0 for c in sWord: if c not in self.dChar: return [] iAddr = self._lookupArcNode(self.dChar[c], iAddr) if iAddr == None: return [] if (int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask): l = [] nRawArc = 0 while not (nRawArc & self._lastArcMask): iEndArcAddr = iAddr + self.nBytesArc nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big') nArc = nRawArc & self._arcMask if nArc >= self.nChar: # This value is not a char, this is a stemming code l.append(self.funcStemming(sWord, self.lArcVal[nArc])) iAddr = iEndArcAddr+self.nBytesNodeAddress return l return [] def _lookupArcNode1 (self, nVal, iAddr): "looks if nVal is an arc at the node at iAddr, if yes, returns address of next node else None" while True: iEndArcAddr = iAddr+self.nBytesArc nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big') if nVal == (nRawArc & self._arcMask): # the value we are looking for # we return the address of the next node return int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesNodeAddress], byteorder='big') else: # value not found if (nRawArc & self._lastArcMask): return None iAddr = iEndArcAddr+self.nBytesNodeAddress def _writeNodes1 (self, spfDest): "for debugging only" print(" > Write binary nodes") with codecs.open(spfDest, 'w', 'utf-8', newline="\n") as hDst: iAddr = 0 hDst.write("i{:_>10} -- #{:_>10}\n".format("0", iAddr)) while iAddr < len(self.byDic): iEndArcAddr = iAddr+self.nBytesArc nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big') nArc = nRawArc & self._arcMask hDst.write(" {:<20} {:0>16} i{:>10} #{:_>10}\n".format(self.lArcVal[nArc], bin(nRawArc)[2:], "?", \ int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesNodeAddress], \ byteorder='big'))) iAddr = iEndArcAddr+self.nBytesNodeAddress if (nRawArc & self._lastArcMask) and iAddr < len(self.byDic): hDst.write("\ni{:_>10} -- #{:_>10}\n".format("?", iAddr)) hDst.close() # VERSION 2 def _morph2 (self, sWord): "returns morphologies of sWord" iAddr = 0 for c in sWord: if c not in self.dChar: return [] iAddr = self._lookupArcNode(self.dChar[c], iAddr) if iAddr == None: return [] if (int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask): l = [] nRawArc = 0 while not (nRawArc & self._lastArcMask): iEndArcAddr = iAddr + self.nBytesArc nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big') nArc = nRawArc & self._arcMask if nArc >= self.nChar: # This value is not a char, this is a stemming code sStem = ">" + self.funcStemming(sWord, self.lArcVal[nArc]) # Now , we go to the next node and retrieve all following arcs values, all of them are tags if not (nRawArc & self._addrBitMask): iAddr2 = int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesNodeAddress], byteorder='big') else: # we go to the end of the node iAddr2 = iEndArcAddr while not (nRawArc & self._lastArcMask): nRawArc = int.from_bytes(self.byDic[iAddr2:iAddr2+self.nBytesArc], byteorder='big') iAddr2 += self.nBytesArc + self.nBytesNodeAddress nRawArc2 = 0 while not (nRawArc2 & self._lastArcMask): iEndArcAddr2 = iAddr2 + self.nBytesArc nRawArc2 = int.from_bytes(self.byDic[iAddr2:iEndArcAddr2], byteorder='big') l.append(sStem + " " + self.lArcVal[nRawArc2 & self._arcMask]) iAddr2 = iEndArcAddr2+self.nBytesNodeAddress if not (nRawArc2 & self._addrBitMask) else iEndArcAddr2 iAddr = iEndArcAddr+self.nBytesNodeAddress if not (nRawArc & self._addrBitMask) else iEndArcAddr return l return [] def _stem2 (self, sWord): "returns stems list of sWord" iAddr = 0 for c in sWord: if c not in self.dChar: return [] iAddr = self._lookupArcNode(self.dChar[c], iAddr) if iAddr == None: return [] if (int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask): l = [] nRawArc = 0 while not (nRawArc & self._lastArcMask): iEndArcAddr = iAddr + self.nBytesArc nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big') nArc = nRawArc & self._arcMask if nArc >= self.nChar: # This value is not a char, this is a stemming code l.append(self.funcStemming(sWord, self.lArcVal[nArc])) # Now , we go to the next node if not (nRawArc & self._addrBitMask): iAddr2 = int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesNodeAddress], byteorder='big') else: # we go to the end of the node iAddr2 = iEndArcAddr while not (nRawArc & self._lastArcMask): nRawArc = int.from_bytes(self.byDic[iAddr2:iAddr2+self.nBytesArc], byteorder='big') iAddr2 += self.nBytesArc + self.nBytesNodeAddress iAddr = iEndArcAddr+self.nBytesNodeAddress if not (nRawArc & self._addrBitMask) else iEndArcAddr return l return [] def _lookupArcNode2 (self, nVal, iAddr): "looks if nVal is an arc at the node at iAddr, if yes, returns address of next node else None" while True: iEndArcAddr = iAddr+self.nBytesArc nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big') if nVal == (nRawArc & self._arcMask): # the value we are looking for if not (nRawArc & self._addrBitMask): # we return the address of the next node return int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesNodeAddress], byteorder='big') else: # we go to the end of the node iAddr = iEndArcAddr while not (nRawArc & self._lastArcMask): nRawArc = int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') iAddr += self.nBytesArc + self.nBytesNodeAddress if not (nRawArc & self._addrBitMask) else self.nBytesArc return iAddr else: # value not found if (nRawArc & self._lastArcMask): return None iAddr = iEndArcAddr+self.nBytesNodeAddress if not (nRawArc & self._addrBitMask) else iEndArcAddr def _writeNodes2 (self, spfDest): "for debugging only" print(" > Write binary nodes") with codecs.open(spfDest, 'w', 'utf-8', newline="\n") as hDst: iAddr = 0 hDst.write("i{:_>10} -- #{:_>10}\n".format("0", iAddr)) while iAddr < len(self.byDic): iEndArcAddr = iAddr+self.nBytesArc nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big') nArc = nRawArc & self._arcMask if not (nRawArc & self._addrBitMask): iNextNodeAddr = int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesNodeAddress], byteorder='big') hDst.write(" {:<20} {:0>16} i{:>10} #{:_>10}\n".format(self.lArcVal[nArc], bin(nRawArc)[2:], "?", iNextNodeAddr)) iAddr = iEndArcAddr+self.nBytesNodeAddress else: hDst.write(" {:<20} {:0>16}\n".format(self.lArcVal[nArc], bin(nRawArc)[2:])) iAddr = iEndArcAddr if (nRawArc & self._lastArcMask): hDst.write("\ni{:_>10} -- #{:_>10}\n".format("?", iAddr)) hDst.close() # VERSION 3 def _morph3 (self, sWord): "returns morphologies of sWord" iAddr = 0 for c in sWord: if c not in self.dChar: return [] iAddr = self._lookupArcNode(self.dChar[c], iAddr) if iAddr == None: return [] if (int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask): l = [] nRawArc = 0 iAddrNode = iAddr while not (nRawArc & self._lastArcMask): iEndArcAddr = iAddr + self.nBytesArc nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big') nArc = nRawArc & self._arcMask if nArc >= self.nChar: # This value is not a char, this is a stemming code sStem = ">" + self.funcStemming(sWord, self.lArcVal[nArc]) # Now , we go to the next node and retrieve all following arcs values, all of them are tags if not (nRawArc & self._addrBitMask): iAddr2 = int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesNodeAddress], byteorder='big') else: iAddr2 = iAddrNode + int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesOffset], byteorder='big') nRawArc2 = 0 while not (nRawArc2 & self._lastArcMask): iEndArcAddr2 = iAddr2 + self.nBytesArc nRawArc2 = int.from_bytes(self.byDic[iAddr2:iEndArcAddr2], byteorder='big') l.append(sStem + " " + self.lArcVal[nRawArc2 & self._arcMask]) iAddr2 = iEndArcAddr2+self.nBytesNodeAddress if not (nRawArc2 & self._addrBitMask) else iEndArcAddr2+self.nBytesOffset iAddr = iEndArcAddr+self.nBytesNodeAddress if not (nRawArc & self._addrBitMask) else iEndArcAddr+self.nBytesOffset return l return [] def _stem3 (self, sWord): "returns stems list of sWord" iAddr = 0 for c in sWord: if c not in self.dChar: return [] iAddr = self._lookupArcNode(self.dChar[c], iAddr) if iAddr == None: return [] if (int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask): l = [] nRawArc = 0 iAddrNode = iAddr while not (nRawArc & self._lastArcMask): iEndArcAddr = iAddr + self.nBytesArc nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big') nArc = nRawArc & self._arcMask if nArc >= self.nChar: # This value is not a char, this is a stemming code l.append(self.funcStemming(sWord, self.lArcVal[nArc])) iAddr = iEndArcAddr+self.nBytesNodeAddress if not (nRawArc & self._addrBitMask) else iEndArcAddr+self.nBytesOffset return l return [] def _lookupArcNode3 (self, nVal, iAddr): "looks if nVal is an arc at the node at iAddr, if yes, returns address of next node else None" iAddrNode = iAddr while True: iEndArcAddr = iAddr+self.nBytesArc nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big') if nVal == (nRawArc & self._arcMask): # the value we are looking for if not (nRawArc & self._addrBitMask): return int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesNodeAddress], byteorder='big') else: return iAddrNode + int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesOffset], byteorder='big') else: # value not found if (nRawArc & self._lastArcMask): return None iAddr = iEndArcAddr+self.nBytesNodeAddress if not (nRawArc & self._addrBitMask) else iEndArcAddr+self.nBytesOffset def _writeNodes3 (self, spfDest): "for debugging only" print(" > Write binary nodes") with codecs.open(spfDest, 'w', 'utf-8', newline="\n") as hDst: iAddr = 0 hDst.write("i{:_>10} -- #{:_>10}\n".format("0", iAddr)) while iAddr < len(self.byDic): iEndArcAddr = iAddr+self.nBytesArc nRawArc = int.from_bytes(self.byDic[iAddr:iEndArcAddr], byteorder='big') nArc = nRawArc & self._arcMask if not (nRawArc & self._addrBitMask): iNextNodeAddr = int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesNodeAddress], byteorder='big') hDst.write(" {:<20} {:0>16} i{:>10} #{:_>10}\n".format(self.lArcVal[nArc], bin(nRawArc)[2:], "?", iNextNodeAddr)) iAddr = iEndArcAddr+self.nBytesNodeAddress else: iNextNodeAddr = int.from_bytes(self.byDic[iEndArcAddr:iEndArcAddr+self.nBytesOffset], byteorder='big') hDst.write(" {:<20} {:0>16} i{:>10} +{:_>10}\n".format(self.lArcVal[nArc], bin(nRawArc)[2:], "?", iNextNodeAddr)) iAddr = iEndArcAddr+self.nBytesOffset if (nRawArc & self._lastArcMask): hDst.write("\ni{:_>10} -- #{:_>10}\n".format("?", iAddr)) hDst.close() |
Added gc_core/py/lang_core/__init__.py version [0ee899897d].
> > | 1 2 | from .gc_engine import * |
Added gc_core/py/lang_core/gc_engine.py version [e65591d48d].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 | # Grammalecte # Grammar checker engine import re import sys import os import traceback #import unicodedata from itertools import chain from ..ibdawg import IBDAWG from ..echo import echo from . import gc_options __all__ = [ "lang", "locales", "pkg", "name", "version", "author", \ "load", "parse", "getDictionary", \ "setOption", "setOptions", "getOptions", "getDefaultOptions", "getOptionsLabels", "resetOptions", "displayOptions", \ "ignoreRule", "resetIgnoreRules", "reactivateRule", "listRules", "displayRules" ] __version__ = "${version}" lang = "${lang}" locales = ${loc} pkg = "${implname}" name = "${name}" version = "${version}" author = "${author}" # grammar rules and dictionary _rules = None _dOptions = dict(gc_options.dOpt) # duplication necessary, to be able to reset to default _aIgnoredRules = set() _oDict = None _dAnalyses = {} # cache for data from dictionary #### Parsing def parse (sText, sCountry="${country_default}", bDebug=False, dOptions=None, bContext=False): "analyses the paragraph sText and returns list of errors" #sText = unicodedata.normalize("NFC", sText) aErrors = None sAlt = sText dDA = {} # Disambiguisator. Key = position; value = list of morphologies dPriority = {} # Key = position; value = priority dOpt = _dOptions if not dOptions else dOptions # parse paragraph try: sNew, aErrors = _proofread(sText, sAlt, 0, True, dDA, dPriority, sCountry, dOpt, bDebug, bContext) if sNew: sText = sNew except: raise # cleanup if " " in sText: sText = sText.replace(" ", ' ') # nbsp if " " in sText: sText = sText.replace(" ", ' ') # nnbsp if "'" in sText: sText = sText.replace("'", "’") if "‑" in sText: sText = sText.replace("‑", "-") # nobreakdash # parse sentences for iStart, iEnd in _getSentenceBoundaries(sText): if 4 < (iEnd - iStart) < 2000: dDA.clear() try: _, errs = _proofread(sText[iStart:iEnd], sAlt[iStart:iEnd], iStart, False, dDA, dPriority, sCountry, dOpt, bDebug, bContext) aErrors.update(errs) except: raise return aErrors.values() # this is a view (iterable) def _getSentenceBoundaries (sText): iStart = _zBeginOfParagraph.match(sText).end() for m in _zEndOfSentence.finditer(sText): yield (iStart, m.end()) iStart = m.end() def _proofread (s, sx, nOffset, bParagraph, dDA, dPriority, sCountry, dOptions, bDebug, bContext): dErrs = {} bChange = False bIdRule = option('idrule') for sOption, lRuleGroup in _getRules(bParagraph): if not sOption or dOptions.get(sOption, False): for zRegex, bUppercase, sLineId, sRuleId, nPriority, lActions in lRuleGroup: if sRuleId not in _aIgnoredRules: for m in zRegex.finditer(s): bCondMemo = None for sFuncCond, cActionType, sWhat, *eAct in lActions: # action in lActions: [ condition, action type, replacement/suggestion/action[, iGroup[, message, URL]] ] try: bCondMemo = not sFuncCond or globals()[sFuncCond](s, sx, m, dDA, sCountry, bCondMemo) if bCondMemo: if cActionType == "-": # grammar error nErrorStart = nOffset + m.start(eAct[0]) if nErrorStart not in dErrs or nPriority > dPriority[nErrorStart]: dErrs[nErrorStart] = _createError(s, sx, sWhat, nOffset, m, eAct[0], sLineId, sRuleId, bUppercase, eAct[1], eAct[2], bIdRule, sOption, bContext) dPriority[nErrorStart] = nPriority elif cActionType == "~": # text processor s = _rewrite(s, sWhat, eAct[0], m, bUppercase) bChange = True if bDebug: echo("~ " + s + " -- " + m.group(eAct[0]) + " # " + sLineId) elif cActionType == "=": # disambiguation globals()[sWhat](s, m, dDA) if bDebug: echo("= " + m.group(0) + " # " + sLineId + "\nDA: " + str(dDA)) elif cActionType == ">": # we do nothing, this test is just a condition to apply all following actions pass else: echo("# error: unknown action at " + sLineId) elif cActionType == ">": break except Exception as e: raise Exception(str(e), sLineId) if bChange: return (s, dErrs) return (False, dErrs) def _createWriterError (s, sx, sRepl, nOffset, m, iGroup, sLineId, sRuleId, bUppercase, sMsg, sURL, bIdRule, sOption, bContext): "error for Writer (LO/OO)" xErr = SingleProofreadingError() #xErr = uno.createUnoStruct( "com.sun.star.linguistic2.SingleProofreadingError" ) xErr.nErrorStart = nOffset + m.start(iGroup) xErr.nErrorLength = m.end(iGroup) - m.start(iGroup) xErr.nErrorType = PROOFREADING xErr.aRuleIdentifier = sRuleId # suggestions if sRepl[0:1] == "=": sugg = globals()[sRepl[1:]](s, m) if sugg: if bUppercase and m.group(iGroup)[0:1].isupper(): xErr.aSuggestions = tuple(map(str.capitalize, sugg.split("|"))) else: xErr.aSuggestions = tuple(sugg.split("|")) else: xErr.aSuggestions = () elif sRepl == "_": xErr.aSuggestions = () else: if bUppercase and m.group(iGroup)[0:1].isupper(): xErr.aSuggestions = tuple(map(str.capitalize, m.expand(sRepl).split("|"))) else: xErr.aSuggestions = tuple(m.expand(sRepl).split("|")) # Message if sMsg[0:1] == "=": sMessage = globals()[sMsg[1:]](s, m) else: sMessage = m.expand(sMsg) xErr.aShortComment = sMessage # sMessage.split("|")[0] # in context menu xErr.aFullComment = sMessage # sMessage.split("|")[-1] # in dialog if bIdRule: xErr.aShortComment += " # " + sLineId + " # " + sRuleId # URL if sURL: p = PropertyValue() p.Name = "FullCommentURL" p.Value = sURL xErr.aProperties = (p,) else: xErr.aProperties = () return xErr def _createDictError (s, sx, sRepl, nOffset, m, iGroup, sLineId, sRuleId, bUppercase, sMsg, sURL, bIdRule, sOption, bContext): "error as a dictionary" dErr = {} dErr["nStart"] = nOffset + m.start(iGroup) dErr["nEnd"] = nOffset + m.end(iGroup) dErr["sLineId"] = sLineId dErr["sRuleId"] = sRuleId dErr["sType"] = sOption if sOption else "notype" # suggestions if sRepl[0:1] == "=": sugg = globals()[sRepl[1:]](s, m) if sugg: if bUppercase and m.group(iGroup)[0:1].isupper(): dErr["aSuggestions"] = list(map(str.capitalize, sugg.split("|"))) else: dErr["aSuggestions"] = sugg.split("|") else: dErr["aSuggestions"] = () elif sRepl == "_": dErr["aSuggestions"] = () else: if bUppercase and m.group(iGroup)[0:1].isupper(): dErr["aSuggestions"] = list(map(str.capitalize, m.expand(sRepl).split("|"))) else: dErr["aSuggestions"] = m.expand(sRepl).split("|") # Message if sMsg[0:1] == "=": sMessage = globals()[sMsg[1:]](s, m) else: sMessage = m.expand(sMsg) dErr["sMessage"] = sMessage if bIdRule: dErr["sMessage"] += " # " + sLineId + " # " + sRuleId # URL dErr["URL"] = sURL if sURL else "" # Context if bContext: dErr['sUnderlined'] = sx[m.start(iGroup):m.end(iGroup)] dErr['sBefore'] = sx[max(0,m.start(iGroup)-80):m.start(iGroup)] dErr['sAfter'] = sx[m.end(iGroup):m.end(iGroup)+80] return dErr def _rewrite (s, sRepl, iGroup, m, bUppercase): "text processor: write sRepl in s at iGroup position" nLen = m.end(iGroup) - m.start(iGroup) if sRepl == "*": sNew = " " * nLen elif sRepl == ">" or sRepl == "_" or sRepl == "~": sNew = sRepl + " " * (nLen-1) elif sRepl == "@": sNew = "@" * nLen elif sRepl[0:1] == "=": sNew = globals()[sRepl[1:]](s, m) sNew = sNew + " " * (nLen-len(sNew)) if bUppercase and m.group(iGroup)[0:1].isupper(): sNew = sNew.capitalize() else: sNew = m.expand(sRepl) sNew = sNew + " " * (nLen-len(sNew)) return s[0:m.start(iGroup)] + sNew + s[m.end(iGroup):] def ignoreRule (sRuleId): _aIgnoredRules.add(sRuleId) def resetIgnoreRules (): _aIgnoredRules.clear() def reactivateRule (sRuleId): _aIgnoredRules.discard(sRuleId) def listRules (sFilter=None): "generator: returns typle (sOption, sLineId, sRuleId)" if sFilter: try: zFilter = re.compile(sFilter) except: echo("# Error. List rules: wrong regex.") sFilter = None for sOption, lRuleGroup in chain(_getRules(True), _getRules(False)): for _, _, sLineId, sRuleId, _, _ in lRuleGroup: if not sFilter or zFilter.search(sRuleId): yield (sOption, sLineId, sRuleId) def displayRules (sFilter=None): echo("List of rules. Filter: << " + str(sFilter) + " >>") for sOption, sLineId, sRuleId in listRules(sFilter): echo("{:<10} {:<10} {}".format(sOption, sLineId, sRuleId)) #### init try: # LibreOffice / OpenOffice from com.sun.star.linguistic2 import SingleProofreadingError from com.sun.star.text.TextMarkupType import PROOFREADING from com.sun.star.beans import PropertyValue #import lightproof_handler_${implname} as opt _createError = _createWriterError except ImportError: _createError = _createDictError def load (): global _oDict try: _oDict = IBDAWG("${py_binary_dic}") except: traceback.print_exc() def setOption (sOpt, bVal): if sOpt in _dOptions: _dOptions[sOpt] = bVal def setOptions (dOpt): for sKey, bVal in dOpt.items(): if sKey in _dOptions: _dOptions[sKey] = bVal def getOptions (): return _dOptions def getDefaultOptions (): return dict(gc_options.dOpt) def getOptionsLabels (sLang): return gc_options.getUI(sLang) def displayOptions (sLang): echo("List of options") echo("\n".join( [ k+":\t"+str(v)+"\t"+gc_options.getUI(sLang).get(k, ("?", ""))[0] for k, v in sorted(_dOptions.items()) ] )) echo("") def resetOptions (): global _dOptions _dOptions = dict(gc_options.dOpt) def getDictionary (): return _oDict def _getRules (bParagraph): try: if not bParagraph: return _rules.lSentenceRules return _rules.lParagraphRules except: _loadRules() if not bParagraph: return _rules.lSentenceRules return _rules.lParagraphRules def _loadRules (): from . import gc_rules global _rules _rules = gc_rules # compile rules regex for lRuleGroup in chain(_rules.lParagraphRules, _rules.lSentenceRules): for rule in lRuleGroup[1]: try: rule[0] = re.compile(rule[0]) except: echo("Bad regular expression in # " + str(rule[2])) rule[0] = "(?i)<Grammalecte>" def _getPath (): return os.path.join(os.path.dirname(sys.modules[__name__].__file__), __name__ + ".py") #### common functions # common regexes _zEndOfSentence = re.compile('([.?!:;…][ .?!… »”")]*|.$)') _zBeginOfParagraph = re.compile("^\W*") _zEndOfParagraph = re.compile("\W*$") _zNextWord = re.compile(" +(\w[\w-]*)") _zPrevWord = re.compile("(\w[\w-]*) +$") def option (sOpt): "return True if option sOpt is active" return _dOptions.get(sOpt, False) def displayInfo (dDA, tWord): "for debugging: retrieve info of word" if not tWord: echo("> nothing to find") return True if tWord[1] not in _dAnalyses and not _storeMorphFromFSA(tWord[1]): echo("> not in FSA") return True if tWord[0] in dDA: echo("DA: " + str(dDA[tWord[0]])) echo("FSA: " + str(_dAnalyses[tWord[1]])) return True def _storeMorphFromFSA (sWord): "retrieves morphologies list from _oDict -> _dAnalyses" global _dAnalyses _dAnalyses[sWord] = _oDict.getMorph(sWord) return True if _dAnalyses[sWord] else False def morph (dDA, tWord, sPattern, bStrict=True, bNoWord=False): "analyse a tuple (position, word), return True if sPattern in morphologies (disambiguation on)" if not tWord: return bNoWord if tWord[1] not in _dAnalyses and not _storeMorphFromFSA(tWord[1]): return False lMorph = dDA[tWord[0]] if tWord[0] in dDA else _dAnalyses[tWord[1]] if not lMorph: return False p = re.compile(sPattern) if bStrict: return all(p.search(s) for s in lMorph) return any(p.search(s) for s in lMorph) def morphex (dDA, tWord, sPattern, sNegPattern, bNoWord=False): "analyse a tuple (position, word), returns True if not sNegPattern in word morphologies and sPattern in word morphologies (disambiguation on)" if not tWord: return bNoWord if tWord[1] not in _dAnalyses and not _storeMorphFromFSA(tWord[1]): return False lMorph = dDA[tWord[0]] if tWord[0] in dDA else _dAnalyses[tWord[1]] # check negative condition np = re.compile(sNegPattern) if any(np.search(s) for s in lMorph): return False # search sPattern p = re.compile(sPattern) return any(p.search(s) for s in lMorph) def analyse (sWord, sPattern, bStrict=True): "analyse a word, return True if sPattern in morphologies (disambiguation off)" if sWord not in _dAnalyses and not _storeMorphFromFSA(sWord): return False if not _dAnalyses[sWord]: return False p = re.compile(sPattern) if bStrict: return all(p.search(s) for s in _dAnalyses[sWord]) return any(p.search(s) for s in _dAnalyses[sWord]) def analysex (sWord, sPattern, sNegPattern): "analyse a word, returns True if not sNegPattern in word morphologies and sPattern in word morphologies (disambiguation off)" if sWord not in _dAnalyses and not _storeMorphFromFSA(sWord): return False # check negative condition np = re.compile(sNegPattern) if any(np.search(s) for s in _dAnalyses[sWord]): return False # search sPattern p = re.compile(sPattern) return any(p.search(s) for s in _dAnalyses[sWord]) def stem (sWord): "returns a list of sWord's stems" if not sWord: return [] if sWord not in _dAnalyses and not _storeMorphFromFSA(sWord): return [] return [ s[1:s.find(" ")] for s in _dAnalyses[sWord] ] ## functions to get text outside pattern scope # warning: check compile_rules.py to understand how it works def nextword (s, iStart, n): "get the nth word of the input string or empty string" m = re.match("( +[\\w%-]+){" + str(n-1) + "} +([\\w%-]+)", s[iStart:]) if not m: return None return (iStart+m.start(2), m.group(2)) def prevword (s, iEnd, n): "get the (-)nth word of the input string or empty string" m = re.search("([\\w%-]+) +([\\w%-]+ +){" + str(n-1) + "}$", s[:iEnd]) if not m: return None return (m.start(1), m.group(1)) def nextword1 (s, iStart): "get next word (optimization)" m = _zNextWord.match(s[iStart:]) if not m: return None return (iStart+m.start(1), m.group(1)) def prevword1 (s, iEnd): "get previous word (optimization)" m = _zPrevWord.search(s[:iEnd]) if not m: return None return (m.start(1), m.group(1)) def look (s, sPattern, sNegPattern=None): "seek sPattern in s (before/after/fulltext), if sNegPattern not in s" if sNegPattern and re.search(sNegPattern, s): return False if re.search(sPattern, s): return True return False def look_chk1 (dDA, s, nOffset, sPattern, sPatternGroup1, sNegPatternGroup1=None): "returns True if s has pattern sPattern and m.group(1) has pattern sPatternGroup1" m = re.search(sPattern, s) if not m: return False try: sWord = m.group(1) nPos = m.start(1) + nOffset except: return False if sNegPatternGroup1: return morphex(dDA, (nPos, sWord), sPatternGroup1, sNegPatternGroup1) return morph(dDA, (nPos, sWord), sPatternGroup1, False) #### Disambiguator def select (dDA, nPos, sWord, sPattern, lDefault=None): if not sWord: return True if nPos in dDA: return True if sWord not in _dAnalyses and not _storeMorphFromFSA(sWord): return True if len(_dAnalyses[sWord]) == 1: return True lSelect = [ sMorph for sMorph in _dAnalyses[sWord] if re.search(sPattern, sMorph) ] if lSelect: if len(lSelect) != len(_dAnalyses[sWord]): dDA[nPos] = lSelect #echo("= "+sWord+" "+str(dDA.get(nPos, "null"))) elif lDefault: dDA[nPos] = lDefault #echo("= "+sWord+" "+str(dDA.get(nPos, "null"))) return True def exclude (dDA, nPos, sWord, sPattern, lDefault=None): if not sWord: return True if nPos in dDA: return True if sWord not in _dAnalyses and not _storeMorphFromFSA(sWord): return True if len(_dAnalyses[sWord]) == 1: return True lSelect = [ sMorph for sMorph in _dAnalyses[sWord] if not re.search(sPattern, sMorph) ] if lSelect: if len(lSelect) != len(_dAnalyses[sWord]): dDA[nPos] = lSelect #echo("= "+sWord+" "+str(dDA.get(nPos, "null"))) elif lDefault: dDA[nPos] = lDefault #echo("= "+sWord+" "+str(dDA.get(nPos, "null"))) return True def define (dDA, nPos, lMorph): dDA[nPos] = lMorph #echo("= "+str(nPos)+" "+str(dDA[nPos])) return True #### GRAMMAR CHECKER PLUGINS ${plugins} ${callables} |
Added gc_core/py/lang_core/gc_options.py version [383a99acb3].
> > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 | # generated code, do not edit def getUI (sLang): if sLang in _dOptLabel: return _dOptLabel[sLang] return _dOptLabel["fr"] lStructOpt = ${lStructOpt} dOpt = ${dOptPython} _dOptLabel = ${dOptLabel} |
Added gc_core/py/lang_core/gc_rules.py version [3cf95f4a21].
> > > > > | 1 2 3 4 5 | # generated code, do not edit lParagraphRules = ${paragraph_rules} lSentenceRules = ${sentence_rules} |
Added gc_core/py/oxt/Grammalecte.py version [f962117745].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | # -*- encoding: UTF-8 -*- # Grammalecte for Writer # License: MPL 2 # A derivative work of Lightproof from László Németh (http://cgit.freedesktop.org/libreoffice/lightproof/) import uno import unohelper import sys import traceback from collections import deque from com.sun.star.linguistic2 import XProofreader, XSupportedLocales from com.sun.star.linguistic2 import ProofreadingResult from com.sun.star.lang import XServiceInfo, XServiceName, XServiceDisplayName from com.sun.star.lang import Locale import grammalecte.${lang} as gce #import lightproof_handler_${implname} as opt_handler import Options class Grammalecte (unohelper.Base, XProofreader, XServiceInfo, XServiceName, XServiceDisplayName, XSupportedLocales): def __init__ (self, ctx, *args): self.ctx = ctx self.ServiceName = "com.sun.star.linguistic2.Proofreader" self.ImplementationName = "org.openoffice.comp.pyuno.Lightproof." + gce.pkg self.SupportedServiceNames = (self.ServiceName, ) self.locales = [] for i in gce.locales: l = gce.locales[i] self.locales.append(Locale(l[0], l[1], l[2])) self.locales = tuple(self.locales) xCurCtx = uno.getComponentContext() # init gce.load() # GC options # opt_handler.load(xCurCtx) dOpt = Options.load(xCurCtx) gce.setOptions(dOpt) # store for results of big paragraphs self.dResult = {} self.nMaxRes = 1500 self.lLastRes = deque(maxlen=self.nMaxRes) self.nRes = 0 # XServiceName method implementations def getServiceName (self): return self.ImplementationName # XServiceInfo method implementations def getImplementationName (self): return self.ImplementationName def supportsService (self, ServiceName): return (ServiceName in self.SupportedServiceNames) def getSupportedServiceNames (self): return self.SupportedServiceNames # XSupportedLocales def hasLocale (self, aLocale): if aLocale in self.locales: return True for i in self.locales: if (i.Country == aLocale.Country or i.Country == "") and aLocale.Language == i.Language: return True return False def getLocales (self): return self.locales # XProofreader def isSpellChecker (self): return False def doProofreading (self, nDocId, rText, rLocale, nStartOfSentencePos, nSuggestedSentenceEndPos, rProperties): xRes = ProofreadingResult() #xRes = uno.createUnoStruct("com.sun.star.linguistic2.ProofreadingResult") xRes.aDocumentIdentifier = nDocId xRes.aText = rText xRes.aLocale = rLocale xRes.nStartOfSentencePosition = nStartOfSentencePos xRes.nStartOfNextSentencePosition = nSuggestedSentenceEndPos xRes.aProperties = () xRes.xProofreader = self xRes.aErrors = () # PATCH FOR LO 4 # Fix for http://nabble.documentfoundation.org/Grammar-checker-Undocumented-change-in-the-API-for-LO-4-td4030639.html if nStartOfSentencePos != 0: return xRes xRes.nStartOfNextSentencePosition = len(rText) # END OF PATCH # WORKAROUND FOR AVOIDING REPEATED ACTIONS ON HEAVY PARAGRAPHS if xRes.nStartOfNextSentencePosition > 3000: nHashedVal = hash(rText) if nHashedVal in self.dResult: return self.dResult[nHashedVal] # WORKAROUND ->>> xRes.nBehindEndOfSentencePosition = xRes.nStartOfNextSentencePosition try: xRes.aErrors = tuple(gce.parse(rText, rLocale.Country)) # ->>> WORKAROUND if xRes.nStartOfNextSentencePosition > 3000: self.dResult[nHashedVal] = xRes self.nRes += 1 if self.nRes > self.nMaxRes: del self.dResult[self.lLastRes.popleft()] self.nRes = self.nMaxRes self.lLastRes.append(nHashedVal) # END OF WORKAROUND except Exception as e: if sys.version_info.major == 3: traceback.print_exc() return xRes def ignoreRule (self, rid, aLocale): gce.ignoreRule(rid) def resetIgnoreRules (self): gce.resetIgnoreRules() # XServiceDisplayName def getServiceDisplayName (self, aLocale): return gce.name # Grammalecte def getDictionary (self): return gce.getDictionary() g_ImplementationHelper = unohelper.ImplementationHelper() g_ImplementationHelper.addImplementation(Grammalecte, "org.openoffice.comp.pyuno.Lightproof."+gce.pkg, ("com.sun.star.linguistic2.Proofreader",),) # g_ImplementationHelper.addImplementation( opt_handler.LightproofOptionsEventHandler, \ # "org.openoffice.comp.pyuno.LightproofOptionsEventHandler." + gce.pkg, ("com.sun.star.awt.XContainerWindowEventHandler",),) |
Added gc_core/py/oxt/Linguistic.xcu version [ff91c8d07f].
> > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?xml version="1.0" encoding="UTF-8"?> <oor:component-data oor:name="Linguistic" oor:package="org.openoffice.Office" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <node oor:name="ServiceManager"> <node oor:name="GrammarCheckers"> <node oor:name="org.openoffice.comp.pyuno.Lightproof.${implname}" oor:op="fuse"> <prop oor:name="Locales" oor:type="oor:string-list"> <value>${locales}</value> </prop> </node> </node> </node> </oor:component-data> |
Added gc_core/py/oxt/Options.py version [f3a8765730].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | # -*- coding: utf8 -*- # Options Dialog # by Olivier R. # License: MPL 2 import unohelper import uno import traceback from com.sun.star.awt import XActionListener from com.sun.star.beans import PropertyValue import helpers import op_strings try: import grammalecte.${lang} as gce except: traceback.print_exc() options = {} def load (ctx): try: oGCO = GC_Options(ctx) oGCO.load("${lang}") except: print("# Error. Unable to load options of language: ${lang}") return options class GC_Options (unohelper.Base, XActionListener): def __init__ (self, ctx): self.ctx = ctx self.xSvMgr = self.ctx.ServiceManager self.xContainer = None #self.xNode = helpers.getConfigSetting("/org.openoffice.Lightproof_%s/Leaves"%pkg, True) self.xNode = helpers.getConfigSetting("/org.openoffice.Lightproof_grammalecte/Leaves", True) self.nSecret = 0 def _addWidget (self, name, wtype, x, y, w, h, **kwargs): xWidget = self.xDialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype) xWidget.Name = name xWidget.PositionX = x xWidget.PositionY = y xWidget.Width = w xWidget.Height = h for k, w in kwargs.items(): setattr(xWidget, k, w) self.xDialog.insertByName(name, xWidget) return xWidget def run (self, sUI): try: dUI = op_strings.getUI(sUI) dUI2 = gce.gc_options.getUI(sUI) # fonts xFDTitle = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFDTitle.Height = 9 xFDTitle.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD") xFDTitle.Name = "Verdana" xFDBut = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFDBut.Height = 10 xFDBut.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD") xFDBut.Name = "Verdana" # dialog self.xDialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx) self.xDialog.Width = 300 self.xDialog.Height = 400 self.xDialog.Title = dUI.get('title', "#err") # build y = 0 nWidth = self.xDialog.Width - 20 nHeight = 10 self.lxOptions = [] for t in gce.gc_options.lStructOpt: x = 10 y += 10 self._addWidget(t[0], 'FixedLine', x, y, nWidth, nHeight, Label = dUI2.get(t[0], "#err")[0], FontDescriptor= xFDTitle) y += 3 for lOptLine in t[1]: x = 15 y += 10 n = len(lOptLine) for sOpt in lOptLine: w = self._addWidget(sOpt, 'CheckBox', x, y, nWidth/n, nHeight, State = options.get(sOpt, False), \ Label = dUI2.get(sOpt, "#err")[0], HelpText = dUI2.get(sOpt, "#err")[1]) self.lxOptions.append(w) x += nWidth / n self.xDialog.Height = y + 40 xWindowSize = helpers.getWindowSize() self.xDialog.PositionX = int((xWindowSize.Width / 2) - (self.xDialog.Width / 2)) self.xDialog.PositionY = int((xWindowSize.Height / 2) - (self.xDialog.Height / 2)) but0 = self._addWidget('default', 'Button', 10, self.xDialog.Height-20, 50, 14, \ Label = dUI.get('default', "#err"), FontDescriptor = xFDBut, TextColor = 0x000044) but1 = self._addWidget('apply', 'Button', self.xDialog.Width-115, self.xDialog.Height-20, 50, 14, \ Label = dUI.get('apply', "#err"), FontDescriptor = xFDBut, TextColor = 0x004400) but2 = self._addWidget('cancel', 'Button', self.xDialog.Width-60, self.xDialog.Height-20, 50, 14, Label = dUI.get('cancel', "#err"), FontDescriptor = xFDBut, TextColor = 0x440000) # container self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx) self.xContainer.setModel(self.xDialog) self.xContainer.getControl('default').addActionListener(self) self.xContainer.getControl('default').setActionCommand('Default') self.xContainer.getControl('apply').addActionListener(self) self.xContainer.getControl('apply').setActionCommand('Apply') self.xContainer.getControl('cancel').addActionListener(self) self.xContainer.getControl('cancel').setActionCommand('Cancel') self.xContainer.setVisible(False) xToolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx) self.xContainer.createPeer(xToolkit, None) self.xContainer.execute() except: traceback.print_exc() # XActionListener def actionPerformed (self, xActionEvent): try: if xActionEvent.ActionCommand == 'Default': self._setDefault() elif xActionEvent.ActionCommand == 'Apply': self._save("fr") self.xContainer.endExecute() elif xActionEvent.ActionCommand == 'Cancel': self.xContainer.endExecute() else: print("Wrong command: " + xActionEvent.ActionCommand) except: traceback.print_exc() def _setDefault (self): for w in self.lxOptions: w.State = gce.gc_options.dOpt.get(w.Name, False) def load (self, sLang): try: xChild = self.xNode.getByName(sLang) for sKey in gce.gc_options.dOpt: sValue = xChild.getPropertyValue(sKey) if sValue == '': if gce.gc_options.dOpt[sKey]: sValue = 1 else: sValue = 0 options[sKey] = bool(int(sValue)) except: traceback.print_exc() def _save (self, sLang): try: xChild = self.xNode.getByName(sLang) for w in self.lxOptions: sKey = w.Name bValue = w.State xChild.setPropertyValue(sKey, str(bValue)) options[sKey] = bValue gce.setOptions(options) self.xNode.commitChanges() except: traceback.print_exc() |
Added gc_core/py/oxt/OptionsDialog.xcs version [bfbbfee5a6].
> > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?xml version="1.0" encoding="UTF-8"?> <oor:component-schema oor:name="Lightproof_${implname}" oor:package="org.openoffice" xml:lang="en-US" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <info> <desc>Contains the options data used for the extension.</desc> </info> <templates> <group oor:name="${lang}"> <info> <desc>The data for one leaf.</desc> </info> ${xcs_options} </group> </templates> <component> <group oor:name="Leaves"> <node-ref oor:name="${lang}" oor:node-type="${lang}" /> </group> </component> </oor:component-schema> |
Added gc_core/py/oxt/OptionsDialog.xcu version [91cca1fa1e].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE oor:component-data SYSTEM "../../../../component-update.dtd"> <oor:component-data oor:name="OptionsDialog" oor:package="org.openoffice.Office" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <node oor:name="Nodes"> <!--<node oor:name="org.openoffice.lightproof" oor:op="fuse"> <prop oor:name="Label"> <value xml:lang="en">Dictionaries</value> <value xml:lang="hu">Szótárak</value> </prop>--> <node oor:name="LanguageSettings" oor:op="fuse"> <prop oor:name="Label"> <value xml:lang="en-US">Language Settings</value> <value xml:lang="fr-FR">Paramètres linguistiques</value> </prop> <node oor:name="Leaves"> <node oor:name="org.openoffice.lightproof.${implname}" oor:op="fuse"> <prop oor:name="Id"> <!--<value>org.openoffice.comp.pyuno.lightproof.oxt.${implname}</value>--> <value>${oxt_identifier}</value> </prop> <prop oor:name="Label"> ${xcu_label_values} </prop> <prop oor:name="OptionsPage"> <value>%origin%/options_page.xdl</value> </prop> <prop oor:name="EventHandlerService"> <value>org.openoffice.comp.pyuno.LightproofOptionsEventHandler.${implname}</value> </prop> </node> </node> </node> </node> </oor:component-data> |
Added gc_core/py/oxt/description.xml version [53ef60ca5d].
> > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?xml version="1.0" encoding="UTF-8"?> <description xmlns="http://openoffice.org/extensions/description/2006" xmlns:d="http://openoffice.org/extensions/description/2006" xmlns:l="http://libreoffice.org/extensions/description/2011" xmlns:xlink="http://www.w3.org/1999/xlink"> <!--<identifier value="org.openoffice.comp.pyuno.lightproof.oxt.${implname}" />--> <identifier value="${oxt_identifier}" /> <display-name> <name lang="en-US">${name} (pack)</name> </display-name> <version value="${oxt_version}" /> <publisher> <name lang="en" xlink:href="${link}">${provider}</name> </publisher> <icon> <default xlink:href="${logo}" /> </icon> <dependencies> <l:LibreOffice-minimal-version value="4.2" l:name="LibreOffice 4.2" /> <!--<d:OpenOffice.org-minimal-version value="4.0" d:name="OpenOffice.org 4.0" />--> </dependencies> <!--<update-information> <src xlink:href="http://www.dicollecte.org/grammalecte/oxt/grammalecte.update03.xml" /> </update-information>--> </description> |
Added gc_core/py/oxt/lightproof_handler_grammalecte.py version [f322664f2e].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | import uno import unohelper import lightproof_opts_${implname} as lp_opt from gc_engine_${implname} import pkg from com.sun.star.lang import XServiceInfo from com.sun.star.awt import XContainerWindowEventHandler options = {} def load (context): try: l = LightproofOptionsEventHandler(context) for sLang in lp_opt.lopts: l.load(sLang) except: pass class LightproofOptionsEventHandler (unohelper.Base, XServiceInfo, XContainerWindowEventHandler): def __init__ (self, ctx): p = uno.createUnoStruct("com.sun.star.beans.PropertyValue") p.Name = "nodepath" p.Value = "/org.openoffice.Lightproof_%s/Leaves"%pkg self.xConfig = ctx.ServiceManager.createInstance('com.sun.star.configuration.ConfigurationProvider') self.node = self.xConfig.createInstanceWithArguments('com.sun.star.configuration.ConfigurationUpdateAccess', (p, )) self.service = "org.openoffice.comp.pyuno.LightproofOptionsEventHandler." + pkg self.ImplementationName = self.service self.services = (self.service, ) # XContainerWindowEventHandler def callHandlerMethod (self, aWindow, aEventObject, sMethod): if sMethod == "external_event": return self._handleExternalEvent(aWindow, aEventObject) def getSupportedMethodNames (self): return ("external_event", ) def _handleExternalEvent (self, aWindow, aEventObject): #aEventObject = str(aEventObject) # unnecessary in Python if aEventObject == "ok": self._saveData(aWindow) elif aEventObject == "back" or aEventObject == "initialize": self._loadData(aWindow) return True def load (self, sWindowName): child = self.getChild(sWindowName) for i in lp_opt.lopts[sWindowName]: sValue = child.getPropertyValue(i) if sValue == '': if i in lp_opt.lopts_default[sWindowName]: sValue = 1 else: sValue = 0 options[i] = bool(int(sValue)) def _loadData (self, aWindow): sWindowName = self.getWindowName(aWindow) if (sWindowName == None): return child = self.getChild(sWindowName) for i in lp_opt.lopts[sWindowName]: sValue = child.getPropertyValue(i) if sValue == '': if i in lp_opt.lopts_default[sWindowName]: sValue = 1 else: sValue = 0 xControl = aWindow.getControl(i) xControl.State = sValue options[i] = bool(int(sValue)) def _saveData (self, aWindow): sWindowName = self.getWindowName(aWindow) if (sWindowName == None): return child = self.getChild(sWindowName) for i in lp_opt.lopts[sWindowName]: xControl = aWindow.getControl(i) sValue = xControl.State child.setPropertyValue(i, str(sValue)) options[i] = bool(int(sValue)) self.commitChanges() def getWindowName (self, aWindow): sName = aWindow.getModel().Name if sName in lp_opt.lopts: return sName return None # XServiceInfo def getImplementationName (self): return self.ImplementationName def supportsService (self, ServiceName): return (ServiceName in self.services) def getSupportedServiceNames (self): return self.services def getChild (self, name): return self.node.getByName(name) def commitChanges (self): self.node.commitChanges() return True |
Added gc_core/py/oxt/manifest.xml version [a65b8c3dc8].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <?xml version="1.0" encoding="UTF-8"?> <manifest:manifest> <!-- Dictionaries --> <manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data" manifest:full-path="dictionaries.xcu"/> <!-- Grammalecte --> <manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-schema" manifest:full-path="dialog/OptionsDialog.xcs"/> <!--<manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data" manifest:full-path="dialog/OptionsDialog.xcu"/>--> <manifest:file-entry manifest:media-type="application/vnd.sun.star.uno-component;type=Python" manifest:full-path="Grammalecte.py"/> <manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data" manifest:full-path="Linguistic.xcu"/> <manifest:file-entry manifest:media-type="application/vnd.sun.star.package-bundle-description" manifest:full-path="package-description.txt"/> <!-- Application laucher --> <manifest:file-entry manifest:media-type="application/vnd.sun.star.uno-component;type=Python" manifest:full-path="AppLauncher.py"/> <!-- Context Menu --> <manifest:file-entry manifest:media-type="application/vnd.sun.star.uno-component;type=Python" manifest:full-path="ContextMenu.py"/> <manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data" manifest:full-path="config/jobs.xcu"/> <!-- common --> <manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data" manifest:full-path="addons.xcu"/> </manifest:manifest> |
Added gc_core/py/oxt/op_strings.py version [7b0a214eba].
> > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # -*- encoding: UTF-8 -*- def getUI (sLang): if sLang in dStrings: return dStrings[sLang] return dStrings["fr"] dStrings = { "fr": { "title": u"Grammalecte · Options du contrôle grammatical", "default": u"Par ~défaut", "apply": u"~OK", "cancel": u"~Annuler" }, "en": { "title": u"Grammalecte · Grammar checking options", "default": u"~Default", "apply": u"~OK", "cancel": u"~Cancel" } } |
Added gc_core/py/oxt/options_page.xdl version [b5343d8dd9].
> > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd"> <dlg:window xmlns:dlg="http://openoffice.org/2000/dialog" xmlns:script="http://openoffice.org/2000/script" dlg:id="${lang}" dlg:left="101" dlg:top="52" dlg:width="196" dlg:height="72" dlg:closeable="true" dlg:moveable="true" dlg:withtitlebar="false"> <dlg:bulletinboard> ${xdl_dialog_options} </dlg:bulletinboard> </dlg:window> |
Added gc_core/py/progressbar.py version [5def72a6ce].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | # Textual progressbar # by Olivier R. # License: MPL 2 import time class ProgressBar: "Textual progressbar" def __init__ (self, nMin=0, nMax=100, nWidth=78): "initiate with minimum nMin to maximum nMax" self.nMin = nMin self.nMax = nMax self.nSpan = nMax - nMin self.nWidth = nWidth-9 self.nAdvance = -1 self.nCurVal = nMin self.startTime = time.time() self._update() def _update (self): fDone = ((self.nCurVal - self.nMin) / self.nSpan) nAdvance = int(fDone * self.nWidth) if (nAdvance > self.nAdvance): self.nAdvance = nAdvance print("\r[ {}{} {}% ] ".format('>'*nAdvance, ' '*(self.nWidth-nAdvance), round(fDone*100)), end="") def increment (self, n=1): "increment value by n (1 by default)" self.nCurVal += n self._update() def done (self): "to call when it’s finished" print("\r[ task done in {:.1f} s ] ".format(time.time() - self.startTime)) |
Added gc_core/py/str_transform.py version [e86906e5ce].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | #!python3 # -*- coding: UTF-8 -*- dSimilarChars = { "a": "aàâáä", "à": "aàâáä", "â": "aàâáä", "á": "aàâáä", "ä": "aàâáä", "c": "cç", "ç": "cç", "e": "eéêèë", "é": "eéêèë", "ê": "eéêèë", "è": "eéêèë", "ë": "eéêèë", "i": "iîïíì", "î": "iîïíì", "ï": "iîïíì", "í": "iîïíì", "ì": "iîïíì", "o": "oôóòö", "ô": "oôóòö", "ó": "oôóòö", "ò": "oôóòö", "ö": "oôóòö", "u": "uûùüú", "û": "uûùüú", "ù": "uûùüú", "ü": "uûùüú", "ú": "uûùüú", } ## No stemming def noStemming (sFlex, sStem): return sStem def rebuildWord (sFlex, cmd1, cmd2): if cmd1 == "_": return sFlex n, c = cmd1.split(":") s = s[:n] + c + s[n:] if cmd2 == "_": return s n, c = cmd2.split(":") return s[:n] + c + s[n:] ## Define affixes for stemming # Note: 48 is the ASCII code for "0" # Suffix only def defineSuffixCode (sFlex, sStem): """ Returns a string defining how to get stem from flexion "n(sfx)" with n: a char with numeric meaning, "0" = 0, "1" = 1, ... ":" = 10, etc. (See ASCII table.) Says how many letters to strip from flexion. sfx [optional]: string to add on flexion Examples: "0": strips nothing, adds nothing "1er": strips 1 letter, adds "er" "2": strips 2 letters, adds nothing """ if sFlex == sStem: return "0" jSfx = 0 for i in range(min(len(sFlex), len(sStem))): if sFlex[i] != sStem[i]: break jSfx += 1 return chr(len(sFlex)-jSfx+48) + sStem[jSfx:] def getStemFromSuffixCode (sFlex, sSfxCode): if sSfxCode == "0": return sFlex return sFlex[:-(ord(sSfxCode[0])-48)] + sSfxCode[1:] if sSfxCode[0] != '0' else sFlex + sSfxCode[1:] # Prefix and suffix def defineAffixCode (sFlex, sStem): """ Returns a string defining how to get stem from flexion. Examples: "0" if stem = flexion "stem" if no common substring "n(pfx)/m(sfx)" with n and m: chars with numeric meaning, "0" = 0, "1" = 1, ... ":" = 10, etc. (See ASCII table.) Says how many letters to strip from flexion. pfx [optional]: string to add before the flexion sfx [optional]: string to add after the flexion """ if sFlex == sStem: return "0" # is stem a substring of flexion? n = sFlex.find(sStem) if n >= 0: return "{}/{}".format(chr(n+48), chr(len(sFlex)-(len(sStem)+n)+48)) # no, so we are looking for common substring sSubs = longestCommonSubstring(sFlex, sStem) if len(sSubs) > 1: iPos = sStem.find(sSubs) sPfx = sStem[:iPos] sSfx = sStem[iPos+len(sSubs):] n = sFlex.find(sSubs) m = len(sFlex) - (len(sSubs)+n) sAff = "{}/".format(chr(n+48)) if not sPfx else "{}{}/".format(chr(n+48), sPfx) sAff += chr(m+48) if not sSfx else "{}{}".format(chr(m+48), sSfx) return sAff return sStem def longestCommonSubstring (s1, s2): # http://en.wikipedia.org/wiki/Longest_common_substring_problem # http://en.wikibooks.org/wiki/Algorithm_implementation/Strings/Longest_common_substring M = [ [0]*(1+len(s2)) for i in range(1+len(s1)) ] longest, x_longest = 0, 0 for x in range(1, 1+len(s1)): for y in range(1, 1+len(s2)): if s1[x-1] == s2[y-1]: M[x][y] = M[x-1][y-1] + 1 if M[x][y] > longest: longest = M[x][y] x_longest = x else: M[x][y] = 0 return s1[x_longest-longest : x_longest] def getStemFromAffixCode (sFlex, sAffCode): if sAffCode == "0": return sFlex if '/' not in sAffCode: return "# error #" sPfxCode, sSfxCode = sAffCode.split('/') sFlex = sPfxCode[1:] + sFlex[(ord(sPfxCode[0])-48):] return sFlex[:-(ord(sSfxCode[0])-48)] + sSfxCode[1:] if sSfxCode[0] != '0' else sFlex + sSfxCode[1:] |
Added gc_core/py/text.py version [af72c36707].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | #!python3 import textwrap from itertools import chain def getParagraph (sText): "generator: returns paragraphs of text" iStart = 0 iEnd = sText.find("\n", iStart) while iEnd != -1: yield sText[iStart:iEnd] iStart = iEnd + 1 iEnd = sText.find("\n", iStart) yield sText[iStart:] def wrap (sText, nWidth=80): "generator: returns text line by line" sText = sText.rstrip("\r\n") while sText: if len(sText) > nWidth: nEnd = sText.rfind(" ", 0, nWidth) + 1 if nEnd > 0: yield sText[0:nEnd] sText = sText[nEnd:] else: yield sText[0:nWidth] sText = sText[nWidth:] else: break yield sText def generateParagraph (sParagraph, aGrammErrs, aSpellErrs, nWidth=100): "Returns a text with readable errors" if not sParagraph: return "" lGrammErrs = sorted(aGrammErrs, key=lambda d: d["nStart"]) lSpellErrs = sorted(aSpellErrs, key=lambda d: d['nStart']) sText = "" nOffset = 0 for sLine in wrap(sParagraph, nWidth): # textwrap.wrap(sParagraph, nWidth, drop_whitespace=False) sText += sLine + "\n" ln = len(sLine) sErrLine = "" nLenErrLine = 0 nGrammErr = 0 nSpellErr = 0 for dErr in lGrammErrs: nStart = dErr["nStart"] - nOffset if nStart < ln: nGrammErr += 1 if nStart >= nLenErrLine: sErrLine += " " * (nStart - nLenErrLine) + "^" * (dErr["nEnd"] - dErr["nStart"]) nLenErrLine = len(sErrLine) else: break for dErr in lSpellErrs: nStart = dErr['nStart'] - nOffset if nStart < ln: nSpellErr += 1 nEnd = dErr['nEnd'] - nOffset if nEnd > len(sErrLine): sErrLine += " " * (nEnd - len(sErrLine)) sErrLine = sErrLine[:nStart] + "°" * (nEnd - nStart) + sErrLine[nEnd:] else: break if sErrLine: sText += sErrLine + "\n" if nGrammErr: for dErr in lGrammErrs[:nGrammErr]: sMsg, *others = getReadableError(dErr).split("\n") sText += "\n".join(textwrap.wrap(sMsg, nWidth, subsequent_indent=" ")) + "\n" for arg in others: sText += "\n".join(textwrap.wrap(arg, nWidth, subsequent_indent=" ")) + "\n" sText += "\n" del lGrammErrs[0:nGrammErr] if nSpellErr: del lSpellErrs[0:nSpellErr] nOffset += ln return sText def getReadableError (dErr): "Returns an error dErr as a readable error" try: s = u"* {nStart}:{nEnd} # {sLineId} / {sRuleId} : ".format(**dErr) s += dErr.get("sMessage", "# error : message not found") if dErr.get("aSuggestions", None): s += "\n > Suggestions : " + " | ".join(dErr.get("aSuggestions", "# error : suggestions not found")) if dErr.get("URL", None): s += "\n > URL: " + dErr["URL"] return s except KeyError: return u"* Non-compliant error: {}".format(dErr) def createParagraphWithLines (lLine): "Returns a text as merged lines and a set of data about lines (line_number_y, start_x, end_x)" sText = "" lLineSet = [] nLine = 1 n = 0 for iLineNumber, sLine in lLine: sLine = sLine.rstrip("\r\n") if nLine < len(lLine) and not sLine.endswith((" ", " ", "-", "–", "—")): sLine += " " lLineSet.append((iLineNumber, n, n + len(sLine))) n += len(sLine) sText += sLine nLine += 1 return sText, lLineSet def convertToXY (aGrammErrs, aSpellErrs, lLineSet): """Converts errors position as an y and x position in a text (y is line number, x is row number). lLineSet is a list of sets (line_number_y, start_x, end_x) describing how the paragraph is divided.""" for dErr in chain(aGrammErrs, aSpellErrs): for i, elem in enumerate(lLineSet, 1): if dErr['nEnd'] <= elem[2]: dErr['nEndY'] = elem[0] dErr['nEndX'] = dErr['nEnd'] - elem[1] break for elem in reversed(lLineSet[:i]): if dErr['nStart'] >= elem[1]: dErr['nStartY'] = elem[0] dErr['nStartX'] = dErr['nStart'] - elem[1] break del dErr['nStart'] del dErr['nEnd'] return aGrammErrs, aSpellErrs |
Added gc_core/py/tokenizer.py version [27b6fefad2].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | # Very simple tokenizer import re _PATTERNS = { "default": ( r'(?P<PUNC>[.,?!:;…«»“”"()/·]+)', r'(?P<LINK>(?:https?://|www[.]|\w+[@.]\w+[@.])[\w./?&!%=+*"\'@$#-]+)', r'(?P<HASHTAG>[#@][\w-]+)', r'(?P<HTML><\w+.*?>|</\w+ *>)', r'(?P<PSEUDOHTML>\[/?\w+\])', r'(?P<HOUR>\d\d?h\d\d\b)', r'(?P<NUM>-?\d+(?:[.,]\d+))', r"(?P<WORD>\w+(?:[’'`-]\w+)*)" ), "fr": ( r'(?P<PUNC>[.,?!:;…«»“”"()/·]+)', r'(?P<LINK>(?:https?://|www[.]|\w+[@.]\w+[@.])[\w./?&!%=+*"\'@$#-]+)', r'(?P<HASHTAG>[#@][\w-]+)', r'(?P<HTML><\w+.*?>|</\w+ *>)', r'(?P<PSEUDOHTML>\[/?\w+\])', r"(?P<ELPFX>(?:l|d|n|m|t|s|j|c|ç|lorsqu|puisqu|jusqu|quoiqu|qu)['’`])", r'(?P<ORDINAL>\d+(?:er|nd|e|de|ième|ème|eme)\b)', r'(?P<HOUR>\d\d?h\d\d\b)', r'(?P<NUM>-?\d+(?:[.,]\d+|))', r"(?P<WORD>\w+(?:[’'`-]\w+)*)" ) } class Tokenizer: def __init__ (self, sLang): self.sLang = sLang if sLang not in _PATTERNS: self.sLang = "default" self.zToken = re.compile( "(?i)" + '|'.join(sRegex for sRegex in _PATTERNS[sLang]) ) def genTokens (self, sText): for m in self.zToken.finditer(sText): yield { "sType": m.lastgroup, "sValue": m.group(), "nStart": m.start(), "nEnd": m.end() } |
Added gc_lang/fr/README_fr.txt version [459df4560b].
> > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | GRAMMALECTE Correcteur grammatical pour le français version ${version} _______________________________________________________________________________ Basé sur Lightproof de László Németh http://numbertext.org/lightproof/ Modifications de Lightproof et règles grammaticales : Olivier R. - olivier<at>grammalecte<dot>net Dicollecte : http://www.dicollecte.org/ Certaines des règles grammaticales sont reprises du correcteur LanguageTool, notamment celles de Dominique Pellé. Licence : GPL : GNU General Public License version 3 ou supérieure -- http://www.gnu.org/licenses/gpl-3.0.html Ce correcteur emploie le dictionnaire Hunspell créé par Dicollecte : http://www.dicollecte.org/home.php?prj=fr |
Added gc_lang/fr/build_data.py version [5eaa962f47].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 | #!python3 # FRENCH DATA BUILDER # # by Olivier R. # License: MPL 2 import json import os import grammalecte.ibdawg as ibdawg from grammalecte.echo import echo from grammalecte.str_transform import defineSuffixCode class cd: """Context manager for changing the current working directory""" def __init__ (self, newPath): self.newPath = os.path.expanduser(newPath) def __enter__ (self): self.savedPath = os.getcwd() os.chdir(self.newPath) def __exit__ (self, etype, value, traceback): os.chdir(self.savedPath) def makeDictionaries (sp, sVersion): with cd(sp+"/dictionnaire"): os.system("genfrdic.py -s -v "+sVersion) def makeConj (sp, bJS=False): print("> Conjugaisons ", end="") print("(Python et JavaScript)" if bJS else "(Python seulement)") dVerb = {} lVtyp = []; dVtyp = {}; nVtyp = 0 lTags = []; dTags = {}; nTags = 0 dPatternList = { ":PQ": [], ":Ip": [], ":Iq": [], ":Is": [], ":If": [], ":K": [], ":Sp": [], ":Sq": [], ":E": [] } dTrad = { "infi": ":Y", "ppre": ":PQ", "ppas": ":PQ", "ipre": ":Ip", "iimp": ":Iq", "ipsi": ":Is", "ifut": ":If", "spre": ":Sp", "simp": ":Sq", "cond": ":K", "impe": ":E", "1sg": ":1s", "2sg": ":2s", "3sg": ":3s", "1pl": ":1p", "2pl": ":2p", "3pl": ":3p", "1isg": ":1ś", "mas sg": ":Q1", "mas pl": ":Q2", "mas inv": ":Q1", "fem sg": ":Q3", "fem pl": ":Q4", "epi inv": ":Q1" } # read lexicon with open(sp+"/data/dictConj.txt", 'r', encoding='utf-8') as hSrc: nStop = 0 for n, line in enumerate(hSrc.readlines()): line = line.strip() nTab = line.count("\t") if nTab == 1: # new entry sLemma, sVtyp = line.split("\t") dConj = { ":PQ": { ":P": "", ":Q1": "", ":Q2": "", ":Q3": "", ":Q4": ""}, ":Ip": { ":1s": "", ":2s": "", ":3s": "", ":1p": "", ":2p": "", ":3p": "", ":1ś": "" }, ":Iq": { ":1s": "", ":2s": "", ":3s": "", ":1p": "", ":2p": "", ":3p": "" }, ":Is": { ":1s": "", ":2s": "", ":3s": "", ":1p": "", ":2p": "", ":3p": "" }, ":If": { ":1s": "", ":2s": "", ":3s": "", ":1p": "", ":2p": "", ":3p": "" }, ":K": { ":1s": "", ":2s": "", ":3s": "", ":1p": "", ":2p": "", ":3p": "" }, ":Sp": { ":1s": "", ":2s": "", ":3s": "", ":1p": "", ":2p": "", ":3p": "", ":1ś": "" }, ":Sq": { ":1s": "", ":2s": "", ":3s": "", ":1p": "", ":2p": "", ":3p": "", ":1ś": "" }, ":E": { ":2s": "", ":1p": "", ":2p": "" } } if sVtyp not in lVtyp: dVtyp[sVtyp] = nVtyp lVtyp.append(sVtyp) nVtyp += 1 elif nTab == 2: # flexion _, sTag, sFlex = line.split("\t") if sTag.count(" ") == 0: if sTag == "ppre": dConj[":PQ"][":P"] = defineSuffixCode(sLemma, sFlex) else: mode, g = sTag.split(maxsplit=1) try: mode = dTrad[mode] g = dTrad[g] if dConj[mode][g] == "": dConj[mode][g] = defineSuffixCode(sLemma, sFlex) else: # comment gérer les autres graphies ? pass except: print(sLemma.encode("utf-8").decode("ascii"), " - non géré: ", mode, " / ", g) elif line == "$": # we store the dictionary of rules for this lemma if dConj[":Ip"][":1ś"] == "2è": dConj[":Ip"][":1ś"] = "2é" elif sLemma == "pouvoir": dConj[":Ip"][":1ś"] = "6uis" lConjTags = [] for key in [":PQ", ":Ip", ":Iq", ":Is", ":If", ":K", ":Sp", ":Sq", ":E"]: bFound = False for i, d in enumerate(dPatternList[key]): if dConj[key] == d: bFound = True lConjTags.append(i) break if not bFound: lConjTags.append(len(dPatternList[key])) dPatternList[key].append(dConj[key]) tConjTags = tuple(lConjTags) if tConjTags not in lTags: dTags[tConjTags] = nTags lTags.append(tConjTags) nTags += 1 dVerb[sLemma] = (dVtyp[sVtyp], dTags[tConjTags]) else: print("# Error - unknown line #", n) # convert tuples to bytes string # si ça merde, toute la partie conversion peut être supprimée # lBytesTags = [] # for t in lTags: # b = b"" # for n in t: # if n > 255: # print("Erreur : l'indice ne peut être supérieur à 256 pour utiliser des chaînes d'octets (bytes strings)") # exit() # b += n.to_bytes(1, byteorder="big") # lBytesTags.append(b) # lTags = lBytesTags # for key in dVerb.keys(): # b = b"" # for n in dVerb[key]: # if n > 255: # print("Erreur : l'indice ne peut être supérieur à 256 pour utiliser des chaînes d'octets (bytes strings)") # exit() # b += n.to_bytes(1, byteorder="big") # dVerb[key] = b # end conversion ## write file for Python sCode = "## generated data (do not edit)\n\n" + \ "# Informations about verbs\n" + \ "lVtyp = " + str(lVtyp) + "\n\n" + \ "# indexes of tenses in _dPatternConj\n" + \ "lTags = " + str(lTags) + "\n\n" + \ "# lists of affix codes to generate inflected forms\n" + \ "dPatternConj = " + str(dPatternList) + "\n\n" + \ "# dictionary of verbs : (index of Vtyp, index of Tags)\n" + \ "dVerb = " + str(dVerb) + "\n" open(sp+"/modules/conj_data.py", "w", encoding="utf-8", newline="\n").write(sCode) if bJS: ## write file for JavaScript with open(sp+"/modules-js/conj_data.json", "w", encoding="utf-8", newline="\n") as hDst: hDst.write("{\n") hDst.write(' "lVtyp": ' + json.dumps(lVtyp, ensure_ascii=False) + ",\n") hDst.write(' "lTags": ' + json.dumps(lTags, ensure_ascii=False) + ",\n") hDst.write(' "dPatternConj": ' + json.dumps(dPatternList, ensure_ascii=False) + ",\n") hDst.write(' "dVerb": ' + json.dumps(dVerb, ensure_ascii=False) + "\n") hDst.write("}\n") def makeMfsp (sp, bJS=False): print("> Pluriel/singulier/masculin/féminin ", end="") print("(Python et JavaScript)" if bJS else "(Python seulement)") aPlurS = set() dTag = {} lTagMasForm = [] lTagMiscPlur = [] dMiscPlur = {} dMasForm = {} # read lexicon with open(sp+"/data/dictDecl.txt", 'r', encoding='utf-8') as hSrc: lTag = [] lTagMasPl = [] for n, line in enumerate(hSrc.readlines()): line = line.strip() nTab = line.count("\t") if nTab == 1: # new entry lTag.clear() lTagMasPl.clear() sLemma, sFlags = line.split("\t") if sFlags.startswith("S"): cType = "s" elif sFlags.startswith("X"): cType = "p" elif sFlags.startswith("A"): cType = "p" elif sFlags.startswith("I"): cType = "p" elif sFlags.startswith("F"): cType = "m" elif sFlags.startswith("W"): cType = "m" else: cType = "?" print(" > inconnu : " + sFlags) elif nTab == 2: if cType == "s": continue _, sFlexTags, sFlex = line.split("\t") if cType == "p": if sFlexTags.endswith("pl"): lTag.append(defineSuffixCode(sLemma, sFlex)) elif cType == "m": if sFlexTags.endswith("mas sg") or sFlexTags.endswith("mas inv"): lTag.append(defineSuffixCode(sLemma, sFlex)) if sFlexTags.endswith("mas pl"): lTagMasPl.append(defineSuffixCode(sLemma, sFlex)) else: print("erreur: " + cType) elif line == "$": if cType == "s": aPlurS.add(sLemma) elif cType == "p": sTag = "|".join(lTag) if sTag not in dTag: dTag[sTag] = len(lTagMiscPlur) lTagMiscPlur.append(sTag) dMiscPlur[sLemma] = dTag[sTag] elif cType == "m": sTag = "|".join(lTag) if lTagMasPl: sTag += "/" + "|".join(lTagMasPl) if sTag not in dTag: dTag[sTag] = len(lTagMasForm) lTagMasForm.append(sTag) dMasForm[sLemma] = dTag[sTag] else: print("unknown tag: " + ctype) else: print("# Error - unknown line #", n) ## write file for Python sCode = "# generated data (do not edit)\n\n" + \ "# list of affix codes\n" + \ "lTagMiscPlur = " + str(lTagMiscPlur) + "\n" + \ "lTagMasForm = " + str(lTagMasForm) + "\n\n" + \ "# dictionary of words with uncommon plurals (-x, -ux, english, latin and italian plurals) and tags to generate them\n" + \ "dMiscPlur = " + str(dMiscPlur) + "\n\n" + \ "# dictionary of feminine forms and tags to generate masculine forms (singular and plural)\n" + \ "dMasForm = " + str(dMasForm) + "\n" open(sp+"/modules/mfsp_data.py", "w", encoding="utf-8", newline="\n").write(sCode) if bJS: ## write file for JavaScript sCode = '{\n' + \ ' "lTagMiscPlur": ' + json.dumps(lTagMiscPlur, ensure_ascii=False) + ",\n" + \ ' "lTagMasForm": ' + json.dumps(lTagMasForm, ensure_ascii=False) + ",\n" + \ ' "dMiscPlur": ' + json.dumps(dMiscPlur, ensure_ascii=False) + ",\n" + \ ' "dMasForm": ' + json.dumps(dMasForm, ensure_ascii=False) + "\n}" open(sp+"/modules-js/mfsp_data.json", "w", encoding="utf-8", newline="\n").write(sCode) def makePhonetTable (sp, bJS=False): print("> Correspondances phonétiques ", end="") print("(Python et JavaScript)" if bJS else "(Python seulement)") try: oDict = ibdawg.IBDAWG("French.bdic") except: traceback.print_exc() return with open(sp+"/data/phonet_simil.txt", 'r', encoding='utf-8') as hSrc: # set of homophonic words lSet = [] for sLine in hSrc.readlines(): if not sLine.startswith("#") and sLine.strip(): lSet.append(sorted(sLine.strip().split())) # dictionary of words dWord = {} for i, aSet in enumerate(lSet): for sWord in aSet: if oDict.lookup(sWord): dWord[sWord] = i # warning, what if word in several sets? else: echo("Mot inconnu : " + sWord) # dictionary of morphologies dMorph = {} for sWord in dWord: dMorph[sWord] = oDict.getMorph(sWord) # write file for Python sCode = "# generated data (do not edit)\n\n" + \ "dWord = " + str(dWord) + "\n\n" + \ "lSet = " + str(lSet) + "\n\n" + \ "dMorph = " + str(dMorph) + "\n" open(sp+"/modules/phonet_data.py", "w", encoding="utf-8", newline="\n").write(sCode) if bJS: ## write file for JavaScript sCode = "{\n" + \ ' "dWord": ' + json.dumps(dWord, ensure_ascii=False) + ",\n" + \ ' "lSet": ' + json.dumps(lSet, ensure_ascii=False) + ",\n" + \ ' "dMorph": ' + json.dumps(dMorph, ensure_ascii=False) + "\n}" open(sp+"/modules-js/phonet_data.json", "w", encoding="utf-8", newline="\n").write(sCode) def before (spLaunch, dVars, bJS=False): print("========== Build Hunspell dictionaries ==========") makeDictionaries(spLaunch, dVars['oxt_version']) def after (spLaunch, dVars, bJS=False): print("========== Build French data ==========") makeMfsp(spLaunch, bJS) makeConj(spLaunch, bJS) makePhonetTable(spLaunch, bJS) |
Added gc_lang/fr/config.ini version [af08a98257].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | [args] lang = fr lang_name = French locales = fr_FR fr_BE fr_CA fr_CH fr_LU fr_MC fr_BF fr_CI fr_SN fr_ML fr_NE fr_TG fr_BJ country_default = FR name = Grammalecte implname = grammalecte version = 0.5.16 author = Olivier R. provider = Dicollecte link = http://grammalecte.net description = Correcteur grammatical pour le français. extras = README_fr.txt logo = logo.png # lexicon source lexicon_src = lexicons/French.lex # binary dictionary name py_binary_dic = French.bdic js_binary_dic = French.json # Finite state automaton compression: 1, 2 (experimental) or 3 (experimental) fsa_method = 1 # stemming method: S for suffixes only, A for prefixes and suffixes stemming_method = S # LibreOffice unopkg = C:/Program Files/LibreOffice 5/program/unopkg.com oxt_version = 6.0.3 oxt_identifier = French.linguistic.resources.from.Dicollecte.by.OlivierR # Firefox fx_identifier = French-GC@grammalecte.net fx_name = Grammalecte [fr] # Thunderbird tb_identifier = French-GC-TB@grammalecte.net tb_name = Grammalecte [fr] tb_debug_extension_path = _build/tb-debug.profile/extensions/French-GC-TB@grammalecte.net # Set Thunderbird folder in your PATH variable # Create a local profile: # thunderbird -CreateProfile "debug _build\tb-debug.profile" # Or you can use the GUI with: # thunderbird -P # To launch Thunderbird with the profile debug, type: # thunderbird -P debug # Then, install the extension (.xpi) the first time. # Then, you can build Grammalecte and launch Thunderbird automatically with `make.py [lang] -js -tb` [oxt] # the following files must be in your project folder, files will be copied into the zip archive rules.grx = fr-rules.txt oxt/addons.xcu = addons.xcu oxt/package-description.txt = package-description.txt # images oxt/_img/logo100.png = img/logo100.png oxt/_img/LaMouette_small.png = img/LaMouette_small.png oxt/_img/grammalecte_16.bmp = img/grammalecte_16.bmp oxt/_img/french_flag_16.bmp = img/french_flag_16.bmp # AppLauncher oxt/AppLauncher.py = AppLauncher.py oxt/helpers.py = pythonpath/helpers.py # About oxt/About/About.py = pythonpath/About.py oxt/About/ab_strings.py = pythonpath/ab_strings.py # Dictionaries oxt/Dictionnaires/dictionaries = dictionaries oxt/Dictionnaires/dictionaries.xcu = dictionaries.xcu oxt/Dictionnaires/DictionarySwitcher.py = pythonpath/DictionarySwitcher.py oxt/Dictionnaires/ds_strings.py = pythonpath/ds_strings.py # ContextMenu oxt/ContextMenu/ContextMenu.py = ContextMenu.py oxt/ContextMenu/jobs.xcu = config/jobs.xcu # TextFormatter oxt/TextFormatter/TextFormatter.py = pythonpath/TextFormatter.py oxt/TextFormatter/tf_strings.py = pythonpath/tf_strings.py oxt/TextFormatter/tf_options.py = pythonpath/tf_options.py # Conjugueur oxt/Conjugueur/Conjugueur.py = pythonpath/Conjugueur.py # Modify author oxt/ChangeAuthor/Author.py = pythonpath/Author.py oxt/ChangeAuthor/ca_strings.py = pythonpath/ca_strings.py |
Added gc_lang/fr/data/dictConj.txt version [72c1a37e0e].
more than 10,000 changes
Added gc_lang/fr/data/dictDecl.txt version [b83c3ed7ca].
more than 10,000 changes
Added gc_lang/fr/data/phonet_simil.txt version [316dba4c75].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 | # Homophonies a as à ha ah abaisse abaisses abaissent abbesse abbesses abord abord abhorre abhorres abhorrent accueil accueils accueille accueilles accueillent acre acres âcre âcres adhérant adhérent adhérents ai ait aie aies aient ais hé eh es haie haies hais est et air airs aire aires ère ères hère hères erre erres errent ers haire haires ail aille ailles aillent aïe aile ailes elle elles aller allers allée allées allé allés allez allais allait allaient amen amène amènes amènent an ans en antre antres entre entres entrent appareil appareils appareille appareilles appareillent appel appels appelle appelles appellent appui appuis appuie appuies appuient archée archées archer archers archet archets arête arêtes arrête arrêtes arrêtent assassinat assassinats assassina assassinas assassinât assignat assignats assigna assignas assignât assimilat assimilats assimila assimilas assimilât atèle atèles attelle attelles attellent attentat attentats attenta attentas attentât attribut attributs attribue attribues attribuent au aux ô eau eaux haut hauts auteur auteurs auteure auteures hauteur hauteurs avait avais avaient avez avé aval avals avale avales avalent bail baille bailles baillent bâille bâilles bâillent bâillent baye bayes bayent bâillon bâillons baillons bayons bal bals balle balles balai balais balaie balaies balaient ballet ballets bar bars barre barres barrent bard bards bas bât bâts bah bassinet bassinets bassiner bassinais bassinait bassinaient bassinez basilic basilics basilique basiliques beau beaux baux beur beurs beurre beurre beurrent bit bits bite bites bitent bitte bittes bittent bloc blocs bloque bloques bloquent bois boit boîte boîtes boite boite boitent boss bosse bosses bossent bourg bourgs bourre bourres bourrent bous boue boues bout bouts box boxe boxes boxent bric brick bricks brique briques briquent bure bures burent but buts bute butes butent butte buttes buttent bûtes cal cals cale cales calent calcul calculs calcule calcules calculent camouflet camouflets camoufler camouflais camouflaient camouflez camp camps quand quant khan khans cap caps cape capes cache caches cachent cash cachet cachets cacher cachais cachait cachaient cachez cadran cadrans cadrant caret carets carré carrés carrais carrait carraient carrez ce se céleri céleris sellerie selleries celle celles sel sels selle selles sellent cèle cèles cèlent scelle scelles scellent cendre cendres sandre sandres cène saine saines scène scènes senne sennes sen Seine centon centons santon santons sentons cerf cerfs serre serres serrent sers sert serf serfs ces ses sais sait cet cette sept set sets chant chants champ champs chaud chauds chaux show shows chaut chic chics chique chiques chiquent choc chocs choque choques choquent choix choie choies choient choral chorals chorale chorales corral corrals ci si scie scies scient six sis cilice cilices silice silices cire cires cirent sire sires cirre cirres cirrhe cirrhes cite cites citent site sites scythe scythes clair clairs claire claires clerc clercs clic clics clique cliques cliquent cliquet cliquets cliquer cliquais cliquait cliquaient cliquez coffret coffrets coffrer coffrais coffrait coffraient coffrez coïncidant coïncident coïncidents col cols colle colles collent khôl khôls collet collets coller collais collait collaient collez combinat combinats combina combinas combinât communicant communicants communiquant complet complets complais complait complaît connexion connexions connections conseil conseils conseille conseilles conseillent conseiller conseillers conseiller conseillais conseillait conseillaient conseillez consonne consonnes consone consones consonent contact contacts contacte contactes contactent conte contes content compte comptes comptent comte comtes continu continus continue continues continuent convaincant convaincants convainquant convergeant convergent convergents convoi convois convoie convoies convoient cool cools coule coules coulent coq coqs coque coques coke cokes cote cotes cotent côte côtes cotte cottes coter coté cotais cotait cotaient côté côtés cou cous coût coûts coup coups coud couds couplet couplets coupler couplais couplait couplaient couplez cour cours court courts coure coures courent courre crachat crachats cracha crachas crachât crack cracks craque craques craquent krak kraks crac créer créé créés créée créées crée crées créent créais créait créaient créez crème crèmes chrême chrêmes creuset creusets creuser creusais creusait creusaient creusez cri cris crie cries crient crois croit croient croîs croît croix cuir cuirs cuire cumul cumuls cumule cumules cumulent cumulet cumulets cumuler cumulais cumulait cumulaient cumulez cygne cygnes signe signes signent dans dent dents danse danses dansent dense denses dé dés dès dais des deal deals deale deales dealent défi défis défie défies défient dégel dégels dégèle dégèles dégèlent délégant délégants déléguant dépens dépends dépend desceller déceler desseller désir désirs désire désires désirent détail détails détaille détailles détaillent diagnostic diagnostics diagnostique diagnostiques diagnostiquent différant différent différents dîne dînes dînent dyne dynes dis dit dît dix divergeant divergent divergents doigt doigts dois doit don dons dont doublet doublets doubler doublais doublait doublaient doublez du dû dus due dues dialysat dialysats dialysa dialysas dialysât éclair éclairs éclaire éclaires éclairent égal égale égales éjaculat éjaculats éjacula éjaculas éjaculât élisais élisait élisaient élisez Élysée Élysées emploi emplois emploie emploies emploient empreinte empreintes emprunte empruntes empruntent ennui ennuis ennuie ennuies ennuient entretien entretiens entretient entrée entrées entrer entrais entrait entrez entraient envoi envois envoie envoies envoient envol envols envole envoles envolent épais épée épées équivalant équivalent équivalents essai essais essaie essaies essaient essaye essayes essayent étai étais était étaient été étés étain étains éteint éteins étal étals étale étales étalent étang étangs étant étends étend être êtres hêtre hêtres eusse eusses eussent us éveil éveils éveille éveilles éveillent excellant excellent excellents exsudat exsudats exsuda exsudas exsudât extravagant extravagants extravaguant fabriquant fabricant fabricants face faces fasse fasses fassent fasce fasces faire fer fers ferre ferres ferrent faisan faisans faisant fait faits fée fées far fard fards phare phares fatigant fatigants fatiguant fausse fausses faussent fosses fosses fausset faussets fossé fossés fausser faussais faussait faussaient faussez faux faut faîte faîtes fait faits faite faites fête fêtes fêtent fèces fesse fesses fessent feuillet feuillets feuillée feuillées fi fis fit fît fief fiefs fieffe fieffes fieffent fil fils file files filent filet filets filer filais filait filaient filez film films filme filmes filment filtrat filtrats filtra filtras filtrât fin fins faim faims feins feint flan flan flanc flancs flic flics flique fliques fliquent flou flous floue floues flouent foi fois foie foies font fonts fond fonds forçat forçats força forças forçât foret forets forer forais forait foraient forêt forêts format formats forma formas formât fort forts for fore fores forent fors fou fous fout four fours fourre fourres fourrent fumée fumées fumet fumets fumer fumais fumait fumaient fumez fus fut fût gal gals gale gales galle galles gang gangs gangue gangues garantie garanties garantis garantit gaule gaules goal goals gaz gaze gazes gazent gel gels gèle gèles gèlent gène gènes gêne gênes gênent golf golfs golfe golfes golfent gosse gosses gausse gausses gaussent gauss Gauss goulet goulets goulée goulées gré grès guère guerre guerres hâle hâles halle halles hall halls haltère haltères altère altères altèrent harde hardes arde ardes ardent hausse hausses haussent os haute hautes hôte hôtes hotte hotte ôte ôtes ôtent héro héros héraut hérauts heur heure heures heurt heurts hochet hochets hocher hochais hochait hochaient hochez homme hommes ohm ohms heaume heaumes hydrolysat hydrolysats hydrolysa hydrolysas hydrolysât hyène hyènes yen yens i y il ils île îles incarnat incarnats incarna incarnas incarnât indic indics indique indiques indiquent infiltrat infiltrats infiltra infiltras infiltrât institut instituts institue institues instituent internat internats interna internas internât intriguant intrigant intrigants jar jars jard jards jarre jarres jardinet jardinets jardiner jardinais jardinait jardinaient jardinez jet jets jette jettes jettent jeune jeunes jeûne jeûnes jeûnent joue joues jouent joug jougs jouer jouais jouait jouaient jouet jouets jouez kermès kermesse kermesses la là las lac lacs laque laques laquent lacet lacets lacer laçais laçait laçaient lacez lasser lassais lassait lassaient lassez legs lègue lègues lèguent les laid laids lait laits laie laies lai levée levées lever levers levais levait levaient levez lieu lieux lieue lieues lice lices lisse lisses lissent lys lis lit lits lie lies lient lire lires lyre lyres livret livrets livrer livrais livrait livraient livrez loch lochs loque loques loir loirs Loir Loire loup loups loue loues louent luth luths luttes luttes luttent lut lute lutes lutent lyophilisat lyophilisats lyophilisa lyophilisas lyophilisât ma mas mât mâts macro macros maquereau maquereaux magazine magazines magasine magasines magasinent mai mais mes met mets main mains maint maints maintien maintiens maintient maire maires mer mers mère mères maison maisons méson mésons maître maîtres mètre mètres mettre mal mâle mâles malle malles mante mantes mente mentes mentent menthe menthes marais marée marées marrais marrait marraient marché marchés marcher marchais marchait marchez marchaient mare mares marre marres marrent marc marcs mark marks marque marques marquent mec mecs Mecque mél mêle mêles mêlent mess messe messes meurs meurt mœurs mi mie mies mis mit mît mir mirs mire mires myrrhe myrrhes mite mites mythe mythes mol mols mole moles molle molles môle môles mon mont monts monitorat monitorats monitora monitoras monitorât mort morts mors mords mord maure maures mot mots maux moi mois mou mous moult moût moûts mouds moud moue moues mur murs mûr mûrs mûre mûres mure mures murent muret murets murer murais murait muraient murez mu mus mû mue mues muent nais nait nez navigant navigants naviguant négligeant négligent négligents ni nid nids nie nies nient noix noie noies noient notre nôtre nôtres nous noue noues nouent nui nuis nuit nuits octroi octrois octroie octroies octroient on ont or ors hors ou où houx houe houes hou oubli oublis oublie oublies oublient pain pains pin pins peins peint pair pairs paire paires père pères perds perd pers paix pet pets paie paies paient pal pals pale pales pâle pâles palier paliers pallier palliais palliait palliez palliaient pan pans pend pends panse panses pansent pense penses pensent pansé pansés pansée pansées pensé pensés pensée pensées penser pensais pensait pensaient pensez pansais pensez pansait pansaient par part parts par pare pares parent pars parait paraît parais parer parez parant parent parents parc parcs parque parques parquent Parque Parques parquet parquets parquer parquais parquait parquaient parquez pari paris parie paries parient Paris parquet parquets parquer parquais parquait parquaient parquez parti partis partit partie parties pause pauses pose poses posent peau peaux pot pots Po Pau pêche pêches pèche pèches pèchent péché péchés pêcher pêchers péchais péchait péchaient pêchais pêchait pêchaient peine peines peinent penne pennes pêne pênes pèle pèles pèlent pelle pelles pellent pellet pellets peler pelait pelais pelaient peller pellait pellais pellaient pensionnat pensionnats pensionna pensionnas pensionnât peu peux peut pic pics pique piques piquent pinson pinsons pinçons piquer piquais piquait piquaient piqué piqués piquée piquées piquet piquets pissat pissats pissa pissas pissât plagiat plagiats plagia plagias plagiât plaid plaids plaide plaides plaident plain plains plaint plaints plein pleins plais plaît plaie plaies plan plans plant plants pli plis plie plies plient police polices policent polisse polisses polissent poêle poêles poil poils poignée poignées poignet poignets poids pois poix pouah point points poing poings polissoir polissoirs polissoire polissoires porc porcs port ports pore pores pool pools poule poules post poste postes postent pou poux pouls pouf poufs pouffe pouffes pouffent pouce pouces pousse pousses poussent précédant précédent précédents prêt prêts près pré prés primat primats prima primas primât prix pris prit prît prie pries prient profil profils profile profiles profilent pronostic pronostics pronostique pronostiques pronostiquent provoc provocs provoque provoques provoquent provocant provocants provoquant pu pue pues pus put puce puces pucent pusse pusses pussent puis puits quadruplet quadruplets quadrupler quadruplais quadruplait quadruplaient quadruplez quintuplet quintuplets quintupler quintuplais quintuplait quintuplaient quintuplez rappel rappels rappelle rappelles rappellent racket rackets raquette raquettes rackette rackettes rackettent raffinat raffinats raffina raffinas raffinât rauque rauques roc rocs roque roques roquent recel recels recèle recèles recèlent recueil recueils recueille recueilles recueillent recul reculs recule recules reculent régal régals régale régale régalent reine reines renne rennes rêne rênes relai relais relaye relayes relayent remblai remblais remblaie remblaies remblaient renvoi renvois renvoie renvoies renvoient ressenti ressentis ressentit restaurant restaurants restaurent résultat résultats résulta résultât réveil réveils réveille réveilles réveillent ris rit rient rie ries riz roue roues rouent roux sac sacs saque saques saquent sachet sachets sachez sacret sacrets sacré sacrés sacrée sacrées sacrer sacrais sacrait sacraient sacrez salariat salariats salaria salarias salariât sale sales salent salles salles salut saluts salue salues saluent sang sangs sans cent cents sens sent cens saoul saouls saoule saoules saoulent soûl soûls soûle soûles soûlent soul souls soule soules soulent saké sakés saquer saquais saquait saquaient saquez satire satires satyre satyres saut sauts sot sots sceau sceaux seau seaux saute sautes sautent sotte sottes savon savons sein seins saint saints sain sains ceins ceint ceints ses ces sais sait shoot shoots shoote shootes shootent sifflet sifflets siffler sifflais sifflait sifflaient sifflez signal signale signales signalent signet signets signer signais signait signaient signez soi soie soies soit sois soient sol sols sole soles saule saules somme sommes somment sommeil sommeils sommeille sommeilles sommeillent sommet sommets sommer sommais sommait sommaient sommez son sons sont sonnet sonnets sonner sonnais sonnait sonnaient sonnez sors sort sorts sortie sorties sortis sortit souci soucis soucie soucies soucient soutien soutiens soutient soufflet soufflets soufflé soufflés souffler soufflais soufflait soufflaient soufflez soufre soufres souffre souffres souffrent stress stresse stresses stressent substitut substituts substitue substitues substituent sui suis suit suie suies survie survies survis survit survol survols survole survoles survolent ta tas taie taies tes thé thés tain teint teints thym thyms tin tins tint teins tant temps tends tend tante tantes tente tentes tentent tapis tapit tapît tare tares tard teinte teintes teintent tinte tintes tintent test tests teste testes testent tête têtes tète tètes tètent tic tics tique tiques tiquent tir tirs tire tires tirent tien tiens tient toc toque toques toquent toi toit toits ton tons thon thons tond tonds tort torts tore tores taure taures tord tords tors tournoi tournois tournoie tournoies tournoient tout toux tous tousse tousses toussent trafic trafics trafique trafiques trafiquent tram trams trame trames trament travail travaille travailles travaillent treuil treuils treuille treuilles treuillent tri tris trie tries trient triplet triplets tripler triplais triplait triplaient triplez troc trocs troque troques troquent troquet troquets troquer troquais troquait troquaient troquez troll trolls trolle trolles trollent troller trolley trolleys trollais trollait trollaient trollez trou trous troue troues trouent truc trucs truque truques truquent tu tus tue tues tuent tutorat tutorats tutora tutoras tutorât usa usas USA vacant vacants vaquant vais vé vés vain vains vin vins vint vingt vaincs vainc val vals valent valet valets valais valait valaient valez vallée vallées vaux vaut vau veau veaux vos vent vents vend vends van vans ver vers verre verres vert verts vair verrat verrats verra verras verset versets verser versais versait versaient versez veule veules veulent veux veut vœu vœux vil vils vile viles ville villes vie vies vis vit vis vice vices visse visses vissent viol viols viole violes violent violant violent violents violat violats viola violas violât violet violets violer violais violait violaient violez violé violés violée violées voix voie voies voient vois voit voir voire vol vols vole voles volent volet volets voler volais volait volaient volez vomi vomis vomit vous voue voues vouent zigzagant zigzagants zigzaguant |
Added gc_lang/fr/dictionnaire/_templates/moz-snapshot.png version [8dc8870d7e].
cannot compute difference between binary files
Added gc_lang/fr/dictionnaire/_templates/moz/install.rdf version [349100bbce].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | <?xml version="1.0"?> <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#"> <Description about="urn:mozilla:install-manifest"> <!-- https://developer.mozilla.org/en-US/docs/Install_Manifests --> <em:id>${mozId}@dictionaries.addons.mozilla.org</em:id> <em:version>${version}</em:version> <em:unpack>true</em:unpack> <em:type>64</em:type> <!-- dictionary --> <!-- Front End MetaData --> <em:name>Dictionnaire français</em:name> <em:description>${description}</em:description> <em:creator>Olivier R.</em:creator> <em:contributor>Olivier R.</em:contributor> <em:contributor>Sylvain P.</em:contributor> <em:contributor>Jean-Luc T.</em:contributor> <em:contributor>Laurent Dubois</em:contributor> <em:contributor>Dominique Pellé</em:contributor> <em:contributor>Pierre Poisson</em:contributor> <em:contributor>Pierre-Yves</em:contributor> <em:contributor>Renouvo</em:contributor> <em:homepageURL>http://www.dicollecte.org/</em:homepageURL> <em:targetApplication> <Description> <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <!-- Firefox --> <em:minVersion>14.0</em:minVersion> <em:maxVersion>*</em:maxVersion> </Description> </em:targetApplication> <em:targetApplication> <Description> <em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id> <!-- Thunderbird --> <em:minVersion>14.0</em:minVersion> <em:maxVersion>53.*</em:maxVersion> </Description> </em:targetApplication> <em:targetApplication> <Description> <em:id>{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}</em:id> <!-- SeaMonkey --> <em:minVersion>2.12</em:minVersion> <em:maxVersion>*</em:maxVersion> </Description> </em:targetApplication> </Description> </RDF> |
Added gc_lang/fr/dictionnaire/_templates/ooo/DictionarySwitcher.py version [9680ccdc4b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 | # -*- coding: utf8 -*- # French Dictionary Switcher # by Olivier R. # License: MPL 2 import unohelper import uno import re import traceback import ds_strings from com.sun.star.task import XJobExecutor from com.sun.star.awt import XActionListener from com.sun.star.beans import PropertyValue def getWindowSize (): "return main window size" xCurCtx = uno.getComponentContext() xDesktop = xCurCtx.getServiceManager().createInstanceWithContext('com.sun.star.frame.Desktop', xCurCtx) xContainerWindow = xDesktop.getCurrentComponent().CurrentController.Frame.ContainerWindow xWindowSize = xContainerWindow.convertSizeToLogic(xContainerWindow.Size, uno.getConstantByName("com.sun.star.util.MeasureUnit.POINT")) #print(xContainerWindow.Size.Width, ">", xWindowSize.Width) #print(xContainerWindow.Size.Height, ">", xWindowSize.Height) xWindowSize.Width = xWindowSize.Width * 0.666 xWindowSize.Height = xWindowSize.Height * 0.666 return xWindowSize class FrenchDictionarySwitcher (unohelper.Base, XActionListener, XJobExecutor): def __init__ (self, ctx): self.ctx = ctx self.xSvMgr = self.ctx.ServiceManager self.xContainer = None self.dialog = None self.xRB_m = None self.xRB_c = None self.xRB_r = None self.xRB_f = None self.sCurrentDic = '' self.sSelectedDic = '' # In this extension, French is default language. # It is assumed that those who need to use the French dictionaries understand French and may not understand English. xSettings = getConfigSetting("/org.openoffice.Setup/L10N", False) sLocale = xSettings.getByName("ooLocale") # Note: look at ooSetupSystemLocale value ? if sLocale[0:2] in ds_strings.dStrings: self.dUI = ds_strings.dStrings[sLocale[0:2]] else: self.dUI = ds_strings.dStrings["fr"] def addWidget (self, name, wtype, x, y, w, h, **kwargs): xWidget = self.dialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype) xWidget.Name = name xWidget.PositionX = x xWidget.PositionY = y xWidget.Width = w xWidget.Height = h for k, w in kwargs.items(): setattr(xWidget, k, w) self.dialog.insertByName(name, xWidget) return xWidget def run (self): # what is the current dictionary xSettings = getConfigSetting("/org.openoffice.Office.Linguistic/ServiceManager/Dictionaries/HunSpellDic_fr", False) xLocations = xSettings.getByName("Locations") m = re.search(r"fr-(\w*)\.(?:dic|aff)", xLocations[0]) self.sCurrentDic = m.group(1) # dialog self.dialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx) self.dialog.Width = 200 self.dialog.Height = 290 self.dialog.Title = self.dUI.get('title', "#title#") xWindowSize = getWindowSize() self.dialog.PositionX = int((xWindowSize.Width / 2) - (self.dialog.Width / 2)) self.dialog.PositionY = int((xWindowSize.Height / 2) - (self.dialog.Height / 2)) # xWidgets padding = 10 hspace = 60 posY1 = 20; posY2 = posY1 + hspace; posY3 = posY2 + hspace; posY4 = posY3 + hspace; posY5 = posY4 + hspace + 10; nLblWidth = 170 nLblHeight = 20 nDescWidth = 170 nDescHeight = 40 xFD1 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFD1.Height = 12 xFD1.Name = "Verdana" xFD2 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFD2.Height = 11 xFD2.Name = "Verdana" xFD3 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFD3.Height = 10 xFD3.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD") xFD3.Name = "Verdana" gbm = self.addWidget('groupbox', 'GroupBox', 5, 5, 190, 260, Label = self.dUI.get('choose', "#choose#"), FontDescriptor = xFD1, FontRelief = 1, TextColor = 0xAA2200) # Note: the only way to group RadioButtons is to create them successively rbm_m = self.addWidget('rb-moderne', 'RadioButton', padding, posY1, nLblWidth, nLblHeight, Label = self.dUI.get('moderne', "#moderne#"), FontDescriptor = xFD2, FontRelief = 1, TextColor = 0x0022AA) self.xRB_m = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx) self.xRB_m.setModel(rbm_m) rbm_c = self.addWidget('rb-classique', 'RadioButton', padding, posY2, nLblWidth, nLblHeight, Label = self.dUI.get('classique', "#classique#"), FontDescriptor = xFD2, FontRelief = 1, TextColor = 0x0022AA) self.xRB_c = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx) self.xRB_c.setModel(rbm_c) rbm_r = self.addWidget('rb-reforme1990', 'RadioButton', padding, posY3, nLblWidth, nLblHeight, Label = self.dUI.get('reforme1990', "#reforme1990#"), FontDescriptor = xFD2, FontRelief = 1, TextColor = 0x0022AA) self.xRB_r = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx) self.xRB_r.setModel(rbm_r) rbm_t = self.addWidget('rb-toutesvariantes', 'RadioButton', padding, posY4, nLblWidth, nLblHeight, Label = self.dUI.get('toutesvariantes', "#toutesvariantes#"), FontDescriptor = xFD2, FontRelief = 1, TextColor = 0x0022AA) self.xRB_t = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx) self.xRB_t.setModel(rbm_t) label_m = self.addWidget('label_m', 'FixedText', 20, posY1+10, nDescWidth, nDescHeight, Label = self.dUI.get('descModern', "#descModern#"), MultiLine = True) label_c = self.addWidget('label_c', 'FixedText', 20, posY2+10, nDescWidth, nDescHeight, Label = self.dUI.get('descClassic', "#descClassic#"), MultiLine = True) label_r = self.addWidget('label_r', 'FixedText', 20, posY3+10, nDescWidth, nDescHeight, Label = self.dUI.get('descReform', "#descReform#"), MultiLine = True) label_t = self.addWidget('label_t', 'FixedText', 20, posY4+10, nDescWidth, nDescHeight, Label = self.dUI.get('descAllvar', "#descAllvar#"), MultiLine = True) if self.sCurrentDic: self.setRadioButton(self.sCurrentDic) sMsgLabel = self.dUI.get('restart', "#restart#") bButtonActive = True else: sMsgLabel = self.dUI.get('error', "#error#") bButtonActive = False label_info = self.addWidget('label_info', 'FixedText', 10, posY4+50, 180, 10, Label = sMsgLabel, TextColor = 0xAA2200, MultiLine = True) button = self.addWidget('select', 'Button', padding+40, posY5, 100, 14, Label = self.dUI.get('select', "#select#"), FontDescriptor = xFD3, TextColor = 0x004400, Enabled = bButtonActive) # container self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx) self.xContainer.setModel(self.dialog) self.xContainer.getControl('select').addActionListener(self) self.xContainer.setVisible(False) toolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx) self.xContainer.createPeer(toolkit, None) self.xContainer.execute() def setRadioButton (self, sDic): if sDic == 'moderne': self.xRB_m.setState(True) elif sDic == 'classique': self.xRB_c.setState(True) elif sDic == 'reforme1990': self.xRB_r.setState(True) elif sDic == 'toutesvariantes': self.xRB_t.setState(True) else: pass def actionPerformed (self, actionEvent): try: if self.xRB_m.getState(): self.sSelectedDic = 'moderne' elif self.xRB_c.getState(): self.sSelectedDic = 'classique' elif self.xRB_r.getState(): self.sSelectedDic = 'reforme1990' elif self.xRB_t.getState(): self.sSelectedDic = 'toutesvariantes' else: # no dictionary selected pass self.xContainer.endExecute() except: traceback.print_exc() def trigger (self, args): try: dialog = FrenchDictionarySwitcher(self.ctx) dialog.run() if dialog.sSelectedDic and dialog.sSelectedDic != dialog.sCurrentDic : # Modify the registry xSettings = getConfigSetting("/org.openoffice.Office.Linguistic/ServiceManager/Dictionaries/HunSpellDic_fr", True) xLocations = xSettings.getByName("Locations") v1 = xLocations[0].replace(dialog.sCurrentDic, dialog.sSelectedDic) v2 = xLocations[1].replace(dialog.sCurrentDic, dialog.sSelectedDic) #xSettings.replaceByName("Locations", xLocations) # doesn't work, see line below uno.invoke(xSettings, "replaceByName", ("Locations", uno.Any("[]string", (v1, v2)))) xSettings.commitChanges() except: traceback.print_exc() def getConfigSetting (sNodeConfig, bUpdate): # get a configuration node # example: aSettings = getConfigSetting( "/org.openoffice.Office.Common/Path/Current", false) xSvMgr = uno.getComponentContext().ServiceManager xConfigProvider = xSvMgr.createInstanceWithContext("com.sun.star.configuration.ConfigurationProvider", uno.getComponentContext()) xPropertyValue = PropertyValue() xPropertyValue.Name = "nodepath" xPropertyValue.Value = sNodeConfig if bUpdate: sService = "com.sun.star.configuration.ConfigurationUpdateAccess" else: sService = "com.sun.star.configuration.ConfigurationAccess" xSettings = xConfigProvider.createInstanceWithArguments(sService, (xPropertyValue,)) return xSettings g_ImplementationHelper = unohelper.ImplementationHelper() g_ImplementationHelper.addImplementation(FrenchDictionarySwitcher, 'dicollecte.FrenchDictionarySwitcher', ('com.sun.star.task.Job',)) |
Added gc_lang/fr/dictionnaire/_templates/ooo/DictionarySwitcher.save.py version [8b30bb88f9].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 | # -*- coding: utf8 -*- # French Dictionary Switcher # by Olivier R. # License: MPL 2 import unohelper import uno import sys import re #import os.path from com.sun.star.task import XJobExecutor from com.sun.star.awt import XActionListener from com.sun.star.awt import WindowDescriptor from com.sun.star.awt.WindowClass import MODALTOP from com.sun.star.awt.VclWindowPeerAttribute import OK, OK_CANCEL, YES_NO, YES_NO_CANCEL, RETRY_CANCEL, DEF_OK, DEF_CANCEL, DEF_RETRY, DEF_YES, DEF_NO from com.sun.star.beans import PropertyValue # XRay - API explorer from com.sun.star.uno import RuntimeException as _rtex def xray(myObject): try: sm = uno.getComponentContext().ServiceManager mspf = sm.createInstanceWithContext("com.sun.star.script.provider.MasterScriptProviderFactory", uno.getComponentContext()) scriptPro = mspf.createScriptProvider("") xScript = scriptPro.getScript("vnd.sun.star.script:XrayTool._Main.Xray?language=Basic&location=application") xScript.invoke((myObject,), (), ()) return except: raise _rtex("\nBasic library Xray is not installed", uno.getComponentContext()) # END Xray DEBUG = False if DEBUG and sys.platform.startswith('win'): import codecs sys.stdout = codecs.open("C:\_multidict_stdout.txt", "w", "utf-8") def handleException (ctx=None): import traceback '''Display exception in a message dialog''' s = '\n'.join(traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback)) if not sys.platform.startswith('win'): # also print trace on stdout/stderr on non-Windows platform traceback.print_exc() else: # no default stdout/stderr on Windows print(s) if not ctx: return xSvMgr = ctx.ServiceManager xDesktop = xSvMgr.createInstanceWithContext('com.sun.star.frame.Desktop', ctx) xDoc = xDesktop.getCurrentComponent() xWindow = xDoc.CurrentController.Frame.ContainerWindow MessageBox(xWindow, s, 'Exception', 'errorbox') def MessageBox (xParentWin, sMsg, sTitle, sBoxType="messbox", MsgButtons=OK): if sBoxType not in ("messbox", "infobox", "errorbox", "warningbox", "querybox"): sBoxType = "messbox" # window properties aDescriptor = WindowDescriptor() aDescriptor.Type = MODALTOP aDescriptor.WindowServiceName = sBoxType aDescriptor.ParentIndex = -1 aDescriptor.Parent = xParentWin #aDescriptor.Bounds = Rectangle() aDescriptor.WindowAttributes = MsgButtons xTK = xParentWin.getToolkit() msgbox = xTK.createWindow(aDescriptor) msgbox.setMessageText(sMsg) msgbox.setCaptionText(sTitle) return msgbox.execute() LABELDICT = { "moderne": u"Moderne", "classique": u"Classique", "reforme1990": u"Réforme 1990", "toutesvariantes": u"Toutes variantes" } class FrenchDictionarySwitcher (unohelper.Base, XActionListener, XJobExecutor): def __init__ (self, ctx): self.ctx = ctx self.xSvMgr = self.ctx.ServiceManager self.container = None self.dialog = None self.xRB_m = None self.xRB_c = None self.xRB_r = None self.xRB_f = None self.sCurrentDic = '' self.sSelectedDic = '' def addWidget (self, name, wtype, x, y, w, h, **kwargs): widget = self.dialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype) widget.Name = name widget.PositionX = x widget.PositionY = y widget.Width = w widget.Height = h for k, w in kwargs.items(): setattr(widget, k, w) self.dialog.insertByName(name, widget) return widget def run (self): # what is the current dictionary xSettings = getConfigSetting("/org.openoffice.Office.Linguistic/ServiceManager/Dictionaries/HunSpellDic_fr", True) xLocations = xSettings.getByName("Locations") m = re.search(r"fr-(\w*)\.(?:dic|aff)", xLocations[0]) self.sCurrentDic = m.group(1) # dialog self.dialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx) self.dialog.Width = 200 self.dialog.Height = 280 self.dialog.Title = u"Orthographe française" # blabla sSubTitle = u"Choisissez un dictionnaire" sDicLabel_m = u"“Moderne”" sDicDescr_m = u"Ce dictionnaire propose l’orthographe telle qu’elle est écrite aujourd’hui le plus couramment. C’est le dictionnaire recommandé si le français n’est pas votre langue maternelle ou si vous ne désirez qu’une seule graphie correcte par mot." sDicLabel_c = u"“Classique” (recommandé)" sDicDescr_c = u"Il s’agit du dictionnaire “Moderne”, avec des graphies classiques en sus, certaines encore communément utilisées, d’autres désuètes. C’est le dictionnaire recommandé si le français est votre langue maternelle." sDicLabel_r = u"“Réforme 1990”" sDicDescr_r = u"Avec ce dictionnaire, seule l’orthographe réformée est reconnue. Attendu que bon nombre de graphies réformées sont considérées comme erronées par beaucoup, ce dictionnaire est déconseillé. Les graphies passées dans l’usage sont déjà incluses dans le dictionnaire “Moderne”." sDicLabel_t = u"“Toutes variantes”" sDicDescr_t = u"Ce dictionnaire contient les variantes graphiques, classiques, réformées, ainsi que d’autres plus rares encore. Ce dictionnaire est déconseillé à ceux qui ne connaissent pas très bien la langue française." # widgets padding = 10 hspace = 60 posY1 = 20; posY2 = posY1 + hspace; posY3 = posY2 + hspace; posY4 = posY3 + hspace; posY5 = posY4 + hspace; wwidth = 170 wheight = 20 wwidthdescr = 170 wheightdescr = 40 xFD1 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFD1.Height = 12 xFD1.Name = "Verdana" xFD2 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFD2.Height = 11 xFD2.Name = "Verdana" gbm = self.addWidget('groupbox', 'GroupBox', 5, 5, 190, 250, Label = sSubTitle, FontDescriptor = xFD1) # Note: the only way to group RadioButtons is to create them successively rbm_m = self.addWidget('rb-moderne', 'RadioButton', padding, posY1, wwidth, wheight, Label = sDicLabel_m, FontDescriptor = xFD2) self.xRB_m = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx) self.xRB_m.setModel(rbm_m) rbm_c = self.addWidget('rb-classique', 'RadioButton', padding, posY2, wwidth, wheight, Label = sDicLabel_c, FontDescriptor = xFD2) self.xRB_c = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx) self.xRB_c.setModel(rbm_c) rbm_r = self.addWidget('rb-reforme1990', 'RadioButton', padding, posY3, wwidth, wheight, Label = sDicLabel_r, FontDescriptor = xFD2) self.xRB_r = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx) self.xRB_r.setModel(rbm_r) rbm_t = self.addWidget('rb-toutesvariantes', 'RadioButton', padding, posY4, wwidth, wheight, Label = sDicLabel_t, FontDescriptor = xFD2) self.xRB_t = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx) self.xRB_t.setModel(rbm_t) label_m = self.addWidget('label_m', 'FixedText', 20, posY1+10, wwidthdescr, wheightdescr, Label = sDicDescr_m, MultiLine = True) label_c = self.addWidget('label_c', 'FixedText', 20, posY2+10, wwidthdescr, wheightdescr, Label = sDicDescr_c, MultiLine = True) label_r = self.addWidget('label_r', 'FixedText', 20, posY3+10, wwidthdescr, wheightdescr, Label = sDicDescr_r, MultiLine = True) label_t = self.addWidget('label_t', 'FixedText', 20, posY4+10, wwidthdescr, wheightdescr, Label = sDicDescr_t, MultiLine = True) self.setRadioButton(self.sCurrentDic) button = self.addWidget('select', 'Button', padding+50, posY5, 80, 14, Label = 'Utiliser ce dictionnaire') # container self.container = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx) self.container.setModel(self.dialog) self.container.getControl('select').addActionListener(self) # if self.sCurrentDic != "moderne": # self.container.getControl('rb-moderne').addActionListener(self) # if self.sCurrentDic != "classique": # self.container.getControl('rb-classique').addActionListener(self) # if self.sCurrentDic != "reforme1990": # self.container.getControl('rb-reforme1990').addActionListener(self) # if self.sCurrentDic != "toutesvariantes": # self.container.getControl('rb-toutesvariantes').addActionListener(self) self.container.setVisible(False) toolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx) self.container.createPeer(toolkit, None) self.container.execute() def setRadioButton (self, sDic): if sDic == 'moderne': self.xRB_m.setState(True) elif sDic == 'classique': self.xRB_c.setState(True) elif sDic == 'reforme1990': self.xRB_r.setState(True) elif sDic == 'toutesvariantes': self.xRB_t.setState(True) else: pass def actionPerformed (self, actionEvent): try: if self.xRB_m.getState(): self.sSelectedDic = 'moderne' elif self.xRB_c.getState(): self.sSelectedDic = 'classique' elif self.xRB_r.getState(): self.sSelectedDic = 'reforme1990' elif self.xRB_t.getState(): self.sSelectedDic = 'toutesvariantes' else: # no dictionary selected pass self.container.endExecute() except: handleException(self.ctx) def trigger (self, args): try: dialog = FrenchDictionarySwitcher(self.ctx) dialog.run() if dialog.sSelectedDic and dialog.sCurrentDic != dialog.sSelectedDic: xSvMgr = uno.getComponentContext().ServiceManager xDesktop = xSvMgr.createInstanceWithContext('com.sun.star.frame.Desktop', self.ctx) xDoc = xDesktop.getCurrentComponent() xWindow = xDoc.CurrentController.Frame.ContainerWindow if dialog.sCurrentDic: # Modify the registry xSettings = getConfigSetting("/org.openoffice.Office.Linguistic/ServiceManager/Dictionaries/HunSpellDic_fr", True) xLocations = xSettings.getByName("Locations") v1 = xLocations[0].replace(dialog.sCurrentDic, dialog.sSelectedDic) v2 = xLocations[1].replace(dialog.sCurrentDic, dialog.sSelectedDic) #xSettings.replaceByName("Locations", xLocations) # ERROR, see line below uno.invoke(xSettings, "replaceByName", ("Locations", uno.Any("[]string", (v1, v2)))) xSettings.commitChanges() # message box sMsg = u"Vous avez choisi un nouveau dictionnaire\northographique pour la langue française.\n\n“%s” ⇒ “%s”\n\nFermez le logiciel (y compris le démarrage rapide)\net relancez-le." % (LABELDICT[dialog.sCurrentDic], LABELDICT[dialog.sSelectedDic]) MessageBox(xWindow, sMsg, u"Sélection d’un nouveau dictionnaire", "infobox") # # get package location (URL of this extension) # xCompCtx = uno.getComponentContext() # xPackageInformationProvider = xCompCtx.getByName("/singletons/com.sun.star.deployment.PackageInformationProvider") # sURL = xPackageInformationProvider.getPackageLocation("French.linguistic.resources.from.Dicollecte.by.OlivierR") # sDstFile = sURL + '/dictionaries.xcu' # sDstFile = sDstFile.replace('file:///', '').replace('%20', ' ') # sDstFile = os.path.normpath(sDstFile) # sTplFile = sDstFile + '.tpl.xml' # # # rewrite dictionaries.xcu # if os.path.isfile(sTplFile) and os.path.isfile(sDstFile): # with open(sTplFile, 'r') as hFile: # content = hFile.read() # hFile.close() # content = content.replace('{{dictionaryName}}', dialog.sSelectedDic) # with open(sDstFile, 'w') as hFile: # hFile.write(content) # hFile.close() # else: # sErrMsg = "" # if not os.path.isfile(sTplFile): # sErrMsg += u"File not found: %s\n" % sTplFile # if not os.path.isfile(sDstFile): # sErrMsg += u"File not found: %s\n" % sDstFile # if sErrMsg: # MessageBox(xWindow, sErrMsg, "ERROR", "error") else: MessageBox(xWindow, u"Couldn’t retrieve informations\nabout the current dictionary.", "ERROR", "errorbox") # xSpellChecker = xSvMgr.createInstanceWithContext('com.sun.star.linguistic2.SpellChecker', self.ctx) # xLocale = uno.createUnoStruct('com.sun.star.lang.Locale') # xLocale.Language = "fr" # xLocale.Country = "FR" # l = xSpellChecker.getSupportedServiceNames() # MessageBox(xWindow, " ".join(l), "DEBUG", "infobox") except: handleException(self.ctx) def getConfigSetting (sNodeConfig, bForUpdate): if bForUpdate: sService = "com.sun.star.configuration.ConfigurationUpdateAccess" else: sService = "com.sun.star.configuration.ConfigurationAccess" xConfigProvider = createUnoService("com.sun.star.configuration.ConfigurationProvider") xPropertyValue = PropertyValue() xPropertyValue.Name = "nodepath" xPropertyValue.Value = sNodeConfig xSettings = xConfigProvider.createInstanceWithArguments(sService, (xPropertyValue,)) return xSettings def createUnoService (serviceName): xSvMgr = uno.getComponentContext().ServiceManager return xSvMgr.createInstanceWithContext(serviceName, uno.getComponentContext()) g_ImplementationHelper = unohelper.ImplementationHelper() g_ImplementationHelper.addImplementation(FrenchDictionarySwitcher, 'dicollecte.FrenchDictionarySwitcher', ('com.sun.star.task.Job',)) |
Added gc_lang/fr/dictionnaire/_templates/ooo/README_fr.txt version [74069c5cbf].
> > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | _______________________________________________________________________________ RESSOURCES LINGUISTIQUES POUR LE FRANÇAIS version ${version} Olivier R. - dicollecte<at>free<dot>fr Dicollecte : http://www.dicollecte.org/ _______________________________________________________________________________ Cette extension contient plusieurs dictionnaires : - des dictionnaires orthographiques, - un thésaurus (dictionnaire des synonymes), - une table des règles de division des mots. Ces dictionnaires sont fournis sous des licences différentes. Lisez les différents fichiers README dans le répertoire /dictionaries pour en prendre connaissance. Pour participer à l’amélioration des dictionnaires, allez sur : http://www.dicollecte.org/home.php?prj=fr _______________________________________________________________________________ |
Added gc_lang/fr/dictionnaire/_templates/ooo/addons.xcu version [c46cc36987].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | <?xml version="1.0" encoding="UTF-8"?> <oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:package="org.openoffice.Office" oor:name="Addons"> <node oor:name="AddonUI"> <node oor:name="OfficeMenuBarMerging"> <node oor:name="org.openoffice.Office.addon.FrenchDictionarySwitcher" oor:op="replace"> <node oor:name="S1" oor:op="replace"> <prop oor:name="MergePoint"> <value>.uno:ToolsMenu\.uno:LanguageMenu\.uno:Hyphenate</value> </prop> <prop oor:name="MergeCommand"> <value>AddAfter</value> </prop> <prop oor:name="MergeFallback"> <value>AddPath</value> </prop> <node oor:name="MenuItems"> <node oor:name="M1" oor:op="replace"> <prop oor:name="Context" oor:type="xs:string"> <value>com.sun.star.text.TextDocument</value> </prop> <prop oor:name="Title" oor:type="xs:string"> <value/> <value xml:lang="en-US">French spelling dictionaries…</value> <value xml:lang="fr">Dictionnaires orthographiques français…</value> <value xml:lang="ar">قواميس الهجاء الفرنسية</value> <value xml:lang="be">Французскія слоўнікі правапісу…</value> <value xml:lang="cs">Francouzské hláskování slovníky…</value> <value xml:lang="de">Französisch Rechtschreibwörterbücher…</value> <value xml:lang="eo">Franca ortografio vortaroj…</value> <value xml:lang="es">Diccionarios ortográfico francés…</value> <value xml:lang="da">Franske stavemåde ordbøger…</value> <value xml:lang="el">Γαλλικά λεξικά ορθογραφίας…</value> <value xml:lang="et">Prantsuse keele sõnastikud…</value> <value xml:lang="fi">Ranskan oikeinkirjoitus sanakirjoja…</value> <value xml:lang="he">מילוני איות צרפתים</value> <value xml:lang="hi">फ्रांसीसी वर्तनी शब्दकोशों</value> <value xml:lang="hu">French helyesírási szótárak…</value> <value xml:lang="id">Perancis ejaan kamus…</value> <value xml:lang="is">Franska orðabækur stafsetningu…</value> <value xml:lang="it">Dizionari ortografici francesi…</value> <value xml:lang="ko">프랑스어 맞춤법 사전</value> <value xml:lang="lv">Franču pareizrakstības vārdnīcas…</value> <value xml:lang="lt">Prancūzijos rašybos žodynai…</value> <value xml:lang="ja">フランス語のスペルチェック辞書</value> <value xml:lang="ms">Ejaan kamus Perancis…</value> <value xml:lang="nl">Franse spellingwoordenboeken…</value> <value xml:lang="no">Franske stavemåten ordbøker…</value> <value xml:lang="pl">Francuskie słowniki ortograficzne…</value> <value xml:lang="pt">Franceses dicionários de ortografia…</value> <value xml:lang="ro">Dicționare de ortografie franceză…</value> <value xml:lang="ru">Французские словари правописания…</value> <value xml:lang="sr">Француски правопис речници…</value> <value xml:lang="sv">Franska stavningsordlistor…</value> <value xml:lang="sw">Kifaransa spelling kamusi…</value> <value xml:lang="ta">பிரஞ்சு எழுத்துப்பிழை அகராதிகள்</value> <value xml:lang="th">พจนานุกรมการสะกดภาษาฝรั่งเศส</value> <value xml:lang="tr">Fransızca yazım denetimi sözlükleri…</value> <value xml:lang="uk">Французькі словники правопису…</value> <value xml:lang="vi">Pháp chính tả từ điển…</value> <value xml:lang="zh">法语拼写字典</value> </prop> <prop oor:name="URL" oor:type="xs:string"> <value>service:dicollecte.FrenchDictionarySwitcher</value> </prop> <prop oor:name="Target" oor:type="xs:string"> <value>_self</value> </prop> <prop oor:name="ImageIdentifier" oor:type="xs:string"> <value>%origin%/ui/french_flag_16.bmp</value> </prop> </node> </node> </node> </node> </node> </node> </oor:component-data> |
Added gc_lang/fr/dictionnaire/_templates/ooo/description.xml version [3615b9d98b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?xml version="1.0" encoding="UTF-8"?> <description xmlns="http://openoffice.org/extensions/description/2006" xmlns:d="http://openoffice.org/extensions/description/2006" xmlns:xlink="http://www.w3.org/1999/xlink"> <!-- http://wiki.services.openoffice.org/wiki/Extension_Dictionaries --> <!--<registration> <simple-license accept-by="admin" suppress-on-update="false" > <license-text xlink:href="dictionaries/README_fr.txt" lang="fr" /> </simple-license> </registration>--> <version value="${version}" /> <identifier value="French.linguistic.resources.from.Dicollecte.by.OlivierR" /> <display-name> <name lang="fr">Dictionnaires français.</name> </display-name> <platform value="all" /> <dependencies> <OpenOffice.org-minimal-version value="3.2" d:name="OpenOffice.org 3.2" /> </dependencies> <icon> <default xlink:href="french_flag.png" /> </icon> <publisher> <name xlink:href="http://www.dicollecte.org/" lang="fr">Dicollecte</name> </publisher> <!--<update-information> <src xlink:href="http://www.dicollecte.org/grammalecte/oxt/dictionaries.update.xml" /> </update-information>--> </description> |
Added gc_lang/fr/dictionnaire/_templates/ooo/dictionaries.xcu version [fb466201bf].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | <?xml version="1.0" encoding="UTF-8"?> <oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="Linguistic" oor:package="org.openoffice.Office"> <node oor:name="ServiceManager"> <node oor:name="Dictionaries"> <node oor:name="HunSpellDic_fr" oor:op="fuse"> <prop oor:name="Locations" oor:type="oor:string-list"> <value>%origin%/dictionaries/fr-classique.aff %origin%/dictionaries/fr-classique.dic</value> </prop> <prop oor:name="Format" oor:type="xs:string"> <value>DICT_SPELL</value> </prop> <prop oor:name="Locales" oor:type="oor:string-list"> <value>fr-FR fr-BE fr-CA fr-CH fr-LU fr-MC fr-BF fr-CI fr-SN fr-ML fr-NE fr-TG fr-BJ</value> <!-- France, Belgique, Canada, Suisse, Luxembourg, Monaco --> <!-- Burkina Faso, Côte d’Ivoire, Sénégal, Mali, Niger, Togo, Benin --> </prop> </node> <node oor:name="HyphDic_fr" oor:op="fuse"> <prop oor:name="Locations" oor:type="oor:string-list"> <value>%origin%/dictionaries/hyph_fr.dic</value> </prop> <prop oor:name="Format" oor:type="xs:string"> <value>DICT_HYPH</value> </prop> <prop oor:name="Locales" oor:type="oor:string-list"> <value>fr-FR fr-BE fr-CA fr-CH fr-LU fr-MC fr-BF fr-CI fr-SN fr-ML fr-NE fr-TG fr-BJ</value> </prop> </node> <node oor:name="ThesDic_fr" oor:op="fuse"> <prop oor:name="Locations" oor:type="oor:string-list"> <value>%origin%/dictionaries/thes_fr.dat %origin%/dictionaries/thes_fr.idx</value> </prop> <prop oor:name="Format" oor:type="xs:string"> <value>DICT_THES</value> </prop> <prop oor:name="Locales" oor:type="oor:string-list"> <value>fr-FR fr-BE fr-CA fr-CH fr-LU fr-MC fr-BF fr-CI fr-SN fr-ML fr-NE fr-TG fr-BJ</value> </prop> </node> </node> </node> </oor:component-data> |
Added gc_lang/fr/dictionnaire/_templates/ooo/dictionaries.xcu.tpl.xml version [240ddc48f8].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | <?xml version="1.0" encoding="UTF-8"?> <oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="Linguistic" oor:package="org.openoffice.Office"> <node oor:name="ServiceManager"> <node oor:name="Dictionaries"> <node oor:name="HunSpellDic_fr-multidict" oor:op="fuse"> <prop oor:name="Locations" oor:type="oor:string-list"> <value>%origin%/dictionaries/fr-{{dictionaryName}}.aff %origin%/dictionaries/fr-{{dictionaryName}}.dic</value> </prop> <prop oor:name="Format" oor:type="xs:string"> <value>DICT_SPELL</value> </prop> <prop oor:name="Locales" oor:type="oor:string-list"> <value>fr-FR fr-BE fr-CA fr-CH fr-LU fr-MC fr-BF fr-CI fr-SN fr-ML fr-NE fr-TG fr-BJ</value> <!-- France, Belgique, Canada, Suisse, Luxembourg, Monaco --> <!-- Burkina Faso, Côte d’Ivoire, Sénégal, Mali, Niger, Togo, Benin --> </prop> </node> <node oor:name="HyphDic_fr" oor:op="fuse"> <prop oor:name="Locations" oor:type="oor:string-list"> <value>%origin%/dictionaries/hyph_fr.dic</value> </prop> <prop oor:name="Format" oor:type="xs:string"> <value>DICT_HYPH</value> </prop> <prop oor:name="Locales" oor:type="oor:string-list"> <value>fr-FR fr-BE fr-CA fr-CH fr-LU fr-MC fr-BF fr-CI fr-SN fr-ML fr-NE fr-TG fr-BJ</value> </prop> </node> <node oor:name="ThesDic_fr" oor:op="fuse"> <prop oor:name="Locations" oor:type="oor:string-list"> <value>%origin%/dictionaries/thes_fr.dat %origin%/dictionaries/thes_fr.idx</value> </prop> <prop oor:name="Format" oor:type="xs:string"> <value>DICT_THES</value> </prop> <prop oor:name="Locales" oor:type="oor:string-list"> <value>fr-FR fr-BE fr-CA fr-CH fr-LU fr-MC fr-BF fr-CI fr-SN fr-ML fr-NE fr-TG fr-BJ</value> </prop> </node> </node> </node> </oor:component-data> |
Added gc_lang/fr/dictionnaire/_templates/ooo/ds_strings.py version [b148ee2b72].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | # -*- encoding: UTF-8 -*- dStrings = { "fr": { "title": u"Orthographe française", "choose": u"Choisissez un dictionnaire", "select": u"Utiliser ce dictionnaire", "moderne": u"“Moderne”", "classique": u"“Classique” (recommandé)", "reforme1990": u"“Réforme 1990”", "toutesvariantes": u"“Toutes variantes”", "descModern": u"Ce dictionnaire propose l’orthographe telle qu’elle est écrite aujourd’hui le plus couramment. C’est le dictionnaire recommandé si le français n’est pas votre langue maternelle ou si vous ne désirez qu’une seule graphie correcte par mot.", "descClassic": u"Il s’agit du dictionnaire “Moderne”, avec des graphies classiques en sus, certaines encore communément utilisées, d’autres désuètes. C’est le dictionnaire recommandé si le français est votre langue maternelle.", "descReform": u"Avec ce dictionnaire, seule l’orthographe réformée est reconnue. Attendu que bon nombre de graphies réformées sont considérées comme erronées par beaucoup, ce dictionnaire est déconseillé. Les graphies passées dans l’usage sont déjà incluses dans le dictionnaire “Moderne”.", "descAllvar": u"Ce dictionnaire contient les variantes graphiques, classiques, réformées, ainsi que d’autres plus rares encore. Ce dictionnaire est déconseillé à ceux qui ne connaissent pas très bien la langue française.", "restart": u"Le changement ne sera effectif qu’après le redémarrage du logiciel.", "error": u"Erreur : impossible de savoir quel dictionnaire est actif." }, "en": { "title": u"French spelling", "choose": u"Choose a dictionary", "select": u"Use this dictionary", "moderne": u"“Modern”", "classique": u"“Classic” (recommended)", "reforme1990": u"“Reform 1990”", "toutesvariantes": u"“All variants”", "descModern": u"This dictionary offers the French spelling as it is written nowadays most often. This is the recommended dictionary if French is not your mother tongue or if you want only one correct spelling per word.", "descClassic": u"This is the “Modern” dictionary plus classical spellings, some of them still widely used, others obsolete. This is the recommended dictionary if French is your native language.", "descReform": u"With this dictionary, only the reformed spelling is recognized. As many of reformed spellings are considered erronous for many people, this dictionary is unadvised. Reformed spellings commonly used are already included in the “Modern” dictionary.", "descAllvar": u"This dictionary contains all spelling variants, classical and reformed, and some others even rarer. This dictionary is unadvised for those who doesn’t know very well the French language.", "restart": u"The modification will be effective only after restarting the software.", "error": u"Error: enable to retrieve information about the current dictionary." } } |
Added gc_lang/fr/dictionnaire/_templates/ooo/french_flag.png version [960f4814b1].
cannot compute difference between binary files
Added gc_lang/fr/dictionnaire/_templates/ooo/french_flag_16.bmp version [f86cbbe4c8].
cannot compute difference between binary files
Added gc_lang/fr/dictionnaire/_templates/ooo/french_flag_16.png version [d1c910d71d].
cannot compute difference between binary files
Added gc_lang/fr/dictionnaire/_templates/ooo/manifest.xml version [d52a9a2be4].
> > > > > > > > | 1 2 3 4 5 6 7 8 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd"> <manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest"> <manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data" manifest:full-path="dictionaries.xcu"/> <manifest:file-entry manifest:media-type="application/vnd.sun.star.package-bundle-description" manifest:full-path="package-description.txt"/> <manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data" manifest:full-path="ui/addons.xcu"/> <manifest:file-entry manifest:media-type="application/vnd.sun.star.uno-component;type=Python" manifest:full-path="DictionarySwitcher.py"/> </manifest:manifest> |
Added gc_lang/fr/dictionnaire/_templates/ooo/package-description.txt version [00d0e64611].
> > > | 1 2 3 | Dictionnaires ${version} • Synonymes 2.3 • Césures 3.0 Quatre dictionnaires orthographiques existent : “Moderne”, “Classique”, “Réforme 1990”, “Toutes variantes”. Pour changer de dictionnaire, allez dans le menu Outils > Langue > Dictionnaires français. |
Added gc_lang/fr/dictionnaire/césures/README_hyph_fr-2.9.txt version [ffc9ffe80a].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | _____________________________________________________________________________ Motifs de division des mots pour le français (fr) Version 2.9 Licence : GNU LGPL. Origine : Basé sur les motifs de division de TeX *hyph-fr.tex*, version renommée (juin 2008) du fichier *frhyph.tex* (V2.12, 2002/12/11) pour la cohérence avec d'autres fichiers de motifs de division de la collection hyph-utf8. Voir http://tug.org/tex-hyphen pour plus d'informations. Les motifs de division de TeX sont publiés sous la licence LaTeX Project Public License (LPPL) -- http://www.latex-project.org/lppl.txt Licence : Les adaptations pour OpenOffice.org sont publiées sous la licence GNU Lesser General Public License (LGPL) version 2.1 ou supérieure -- http://www.gnu.org/licenses/ Auteurs : 2.9 Marc Lodewijck <mlodewijck@gmail.com> 2.0 Paul Pichaureau <paul.pichaureau@alcandre.net> 1.0 Blaise Drayer <blaise@drayer.ch> Journal : 2.9 Nouvelle version révisée et augmentée : + Traitement des noms composés à trait d'union + Redressement de motifs altérés 2.0 Traitement des mots avec apostrophe 1.0 Première conversion Ce dictionnaire devrait être conforme à toutes les variantes régionales du français. _____________________________________________________________________ French word hyphenation patterns Version 2.9 Language: French (fr). License: GNU LGPL. Origin: Based on the TeX hyphenation tables *hyph-fr.tex*, renamed (June 2008) from *frhyph.tex* (V2.12, 2002/12/11) for consistency with other files with hyphenation patterns in hyph-utf8 package. See http://tug.org/tex-hyphen for more details. The TeX hyphenation tables are released under the LaTeX Project Public License (LPPL) -- http://www.latex-project.org/lppl.txt License: OpenOffice.org adaptions of this package are licensed under the GNU Lesser General Public License (LGPL) version 2.1 or higher -- http://www.gnu.org/licenses/ Authors: 2.9 Marc Lodewijck <mlodewijck@gmail.com> 2.0 Paul Pichaureau <paul.pichaureau@alcandre.net> 1.0 Blaise Drayer <blaise@drayer.ch> Log: 2.9 New revised and expanded version: + Processing of hyphenated compounds + Correction of altered patterns 2.0 Fix for words with apostrophe 1.0 First conversion This dictionary is based on syllable matching patterns and therefore should be usable under other variations of French. |
Added gc_lang/fr/dictionnaire/césures/README_hyph_fr-3.0.txt version [b9b9e15d66].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | _____________________________________________________________________________ Motifs de division des mots pour le français (fr) Version 3.0.1 Licence : GNU LGPL. Origine : Basé sur les motifs de division de TeX *hyph-fr.tex*, version renommée (juin 2008) du fichier *frhyph.tex* (V2.12, 2002/12/11) pour la cohérence avec d'autres fichiers de motifs de division de la collection hyph-utf8. Voir http://tug.org/tex-hyphen pour plus d'informations. Les motifs de division de TeX sont publiés sous la licence LaTeX Project Public License (LPPL) -- http://www.latex-project.org/lppl.txt Licence : Les adaptations pour OpenOffice.org sont publiées sous la licence GNU Lesser General Public License (LGPL) version 2.1 ou supérieure -- http://www.gnu.org/licenses/ Auteurs : 3.0 Marc Lodewijck <mlodewijck@gmail.com> 2.0 Paul Pichaureau <paul.pichaureau@alcandre.net> 1.0 Blaise Drayer <blaise@drayer.ch> Journal : 3.0.1 Correction d’un bug: COUMPOUNDLEFTHYPHENMIN -> COMPOUNDLEFTHYPHENMIN 3.0 Nouvelle version révisée et augmentée : + Conversion au format de codage Unicode UTF-8 + Traitement des noms composés à trait d'union + Redressement de motifs altérés 2.0 Traitement des mots avec apostrophe 1.0 Première conversion Ce dictionnaire devrait être conforme à toutes les variantes régionales du français. _____________________________________________________________________ French word hyphenation patterns Version 3.0 Language: French (fr). License: GNU LGPL. Origin: Based on the TeX hyphenation tables *hyph-fr.tex*, renamed (June 2008) from *frhyph.tex* (V2.12, 2002/12/11) for consistency with other files with hyphenation patterns in hyph-utf8 package. See http://tug.org/tex-hyphen for more details. The TeX hyphenation tables are released under the LaTeX Project Public License (LPPL) -- http://www.latex-project.org/lppl.txt License: OpenOffice.org adaptions of this package are licensed under the GNU Lesser General Public License (LGPL) version 2.1 or higher -- http://www.gnu.org/licenses/ Authors: 3.0 Marc Lodewijck <mlodewijck@gmail.com> 2.0 Paul Pichaureau <paul.pichaureau@alcandre.net> 1.0 Blaise Drayer <blaise@drayer.ch> Log: 3.0.1 Bug fix: COUMPOUNDLEFTHYPHENMIN -> COMPOUNDLEFTHYPHENMIN 3.0 New revised and expanded version: + Conversion to UTF-8 Unicode encoding + Processing of hyphenated compounds + Correction of altered patterns 2.0 Fix for words with apostrophe 1.0 First conversion This dictionary is based on syllable matching patterns and therefore should be usable under other variations of French. |
Added gc_lang/fr/dictionnaire/césures/frhyph.tex version [c1857b37d2].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 | % frhyph.tex % French hyphenation patterns %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This file is available for free and can used and redistributed % asis for free. Modified versions should have another name. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \message{frhyph.tex - French hyphenation patterns (V2.12) <2002/12/11>} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *BEFORE* using this file *PLEASE* run checksum on it: % % checksum -v frhyph.tex % % to make sure that it hasn't been damaged. % % Then if you notice anything wrong in french hyphenation please report to % % R. Bastian, D. Flipo, B. Gaulle at the email address: % % cesure-l@gutenberg.eu.org % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% checksum = "37208 1458 3078 34821" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%% The most famous good guys who worked hard to obtain something usable. % Jacques Desarmenien, Universite de Strasbourg : % - << how to run TeX in a French environment: hyphenation, fonts, % typography. >> in Tugboat, 5 (1984) 91-102. and TeX85 conference % - << La division par ordinateur des mots francais : % application a TeX >> in TSI vol. 5 No 4, 1986 (C) AFCET- % Gauthier-Villars % Norman Buckle, UQAH (nb; many additions) % Michael Ferguson, INRS-Telecommunications (mjf) June 1988 % Justin Bur, Universite de Montreal (jbb; checked against original list) % all patterns including apostrophe missing from nb list % after that, GUTenberg and specially Daniel Flipo and Bernard Gaulle % did their best effort to improve the list of patterns. % % ----------------------------------------------------------------- % % Adaption of these patterns for % - TeX Version 3.x and MLTeX 3.x (2.x) % and % - all fonts in T1/`Cork' and/or CM/OT1 encoding % by Bernd Raichle 1996/08/28 (using ideas from `ghyph31.tex' % as of 1994-02-13 maintained by Bernd Raichle). % (An adaption for the old MLTeX 2.x exists but can not be % tested in lack of an executable.) % % ----------------------------------------------------------------- % % The LaTeX2e identification of this file is done with the % \ProvidesFile declaration. The group and \expandafter % constructions keep \ProvidesFile undefined if this file % is not used with LaTeX2e. % \begingroup \expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname ProvidesFile\endcsname\relax \else % unfortnately Babel 3.6 destroys standard LaTeX \ProvidesFile command % thus i check if it's still the good one. --bg 97/04/08 \def\PFnormaldef#1{% \begingroup \catcode`\ 10 % \@makeother\/% \@ifnextchar[{\@providesfile{#1}}{\@providesfile{#1}[]}} \ifx\PFnormaldef\ProvidesFile \ProvidesFile{frhyph.tex}[2002/12/11 % French hyphenation patterns v2.12] \fi \fi % % Next we define some commands which are used inside the patterns. % To keep them local, we enclose the rest of the file in a group % (The \patterns command globally changes the hyphenation trie!). % \begingroup % % Make sure that neither quote nor doublequote are active: \catcode`\'=12 \catcode`\"=12 % % % Because ^^e4 is used in the following macros which is read by % TeX 2.x as ^^e or %, the comment character of TeX, some trick % has to be found to avoid this problem. The same is true for % the normally illegal character ^^? in the TeX 2.x code. % Therefore in the code the exclamationmark ! is used instead of % the circumflex ^ and its \catcode is set appropriately % (normally \catcode`\!=12, in the code \catcode`\!=7). % % The following \catcode, \lccode assignments and macro definitions % are defined in such a way that the following \pattern{...} list % can be used for both, (ML)TeX 2.x and (ML)TeX 3.x. % To implement this, distinguish version 2.x and 3.x of TeX: % \ifnum`\@=`\^^40 % true => TeX 3.x % % Assign appropriate \catcode and \lccode values for all % accented characters used in the patterns: \catcode"E0=11 \lccode"E0="E0 % \`a \catcode"E2=11 \lccode"E2="E2 % \^a \catcode"E7=11 \lccode"E7="E7 % \c{c} \catcode"E8=11 \lccode"E8="E8 % \`e \catcode"E9=11 \lccode"E9="E9 % \'e \catcode"EA=11 \lccode"EA="EA % \^e \catcode"EB=11 \lccode"EB="EB % \"e (*unused*) \catcode"EE=11 \lccode"EE="EE % \^{\i} \catcode"EF=11 \lccode"EF="EF % \"{\i} \catcode"F4=11 \lccode"F4="F4 % \^o \catcode"F7=11 \lccode"F7="F7 % \oe{} \catcode"F9=11 \lccode"F9="F9 % \`u (*unused*) \catcode"FB=11 \lccode"FB="FB % \^u \catcode"FC=11 \lccode"FC="FC % \"u (*unused*) \catcode"B8=11 \lccode"B8="B8 % \"y (*unused*) % \catcode`\!=7 % use !!xy instead of ^^xy % % Define the accent macros in such a way that they % expand to single letters in font encoding T1. \def\E{\errmessage{Hyphenation pattern file corrupted}} \def\`#1{\ifx#1a!!e0\else \ifx#1e!!e8\else \E \fi\fi} \def\'#1{\ifx#1e!!e9\else \E \fi} \def\^#1{\ifx#1a!!e2\else \ifx#1e!!ea% \else \ifx#1i!!ee\else \ifx#1o!!f4% \else \ifx#1u!!fb\else \E \fi\fi\fi\fi\fi} \def\"#1{\ifx#1i!!ef\else \ifx#1e!!eb% \else \ifx#1o!!f6\else \E \fi\fi\fi} \def\c#1{\ifx#1c!!e7\else \E \fi} \def\oe{!!f7}% T1 encoded \oe % For \oe which exists in T1 _and_ OT1 encoded fonts but with % different glyph codes, patterns for both glyphs are included. % Thus you can use either T1 encoded fonts, or OT1 encoded fonts % and MLTeX's character substitution definition. \def\n#1{#1} \catcode'33=11 \lccode'33='33 % \oe \def\oeOT{!![}% OT1 encoded \oe %{]} brace hack % \catcode`\!=12 % \else % TeX 2 % \expandafter\ifx\csname starthyph\endcsname\relax % MLTeX 2.x? \message{This is TeX version 2.x without the MLTeX extensions.} \message{I'm sorry, you cannot use these hyphenation patterns.} \message{To process the french hyphenation patterns you need either} \message{TeX version 3.x, MLTeX 3.x, or MLTeX based on TeX 2.x.} \errmessage{I will ignore the hyphenation patterns.} \endgroup \csname fi\endcsname\csname fi\endcsname\endinput \fi % % Untested macros for MLTeX v2.x replaced by the following message: \message{This is MLTeX based on TeX version 2.x. To use these} \message{patterns please get in contact with the maintainers} \message{mentioned in the comment at the top of this file.} \errmessage{I will ignore the hyphenation patterns.} \endgroup \csname fi\endcsname\endinput % \fi % \lccode`\'=`\' % \patterns{ %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%* 2'2 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%a .a4 'a4 .\^a4 '\^a4 ab2h % df-bg 1998/02/07 for abhorrer .ab3r\'ea 'ab3r\'ea ad2h % df-bg 1998/02/07 for adh\`esion & co a1\`e2dre .ae3s4ch 'ae3s4ch 1alcool a2l1algi .amino1a2c 'amino1a2c .ana3s4tr 'ana3s4tr 1a2nesth\'esi .anti1a2 'anti1a2 .anti1e2 'anti1e2 .anti1\'e2 .anti2enne 'anti2enne 'anti1\'e2 .anti1s2 'anti1s2 .apo2s3ta 'apo2s3ta apo2s3tr archi1\'e2pis .as2ta 'as2ta a2s3tro %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%b 1ba 1b\^a .bai2se3main % hyphen disappeared from french 5/2/94 1be 1b\'e 1b\`e 1b\^e 4be. 4bes. 2bent. % mute syllable: tombent (df) 22/02/94 1bi 1b\^i .bi1a2c .bi1a2t % like .tri1a2t for tri-athlon bg 12/27/93 .bi1au .bio1a2 .bi2s1a2 .bi1u2 1b2l 4ble. 4bles. 2blent. % mute syllable: troublent (df) 28/02/94 1bo 1b\^o 1b2r 4bre. 4bres. 2brent. % mute syllable: palabrent (df) 28/02/94 1bu 1b\^u 1by %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%c 1\c{c} 1ca 1c\^a ca3ou3t2 % for caoutchou... added 3/1/94 df-bg 1ce 1c\'e 1c\`e 1c\^e 4ce. 4ces. % words ending with -cent (df) 22/02/94 2cent. ja3cent. ac3cent. \'e3cent. munifi3cent. r\'eti3cent. privatdo3cent. inno3cent. es3cent. acquies4cent. is3cent. immis4cent. % .ch4 1c2h 4ch. 2chb 4che. 4ches. 2chent. % mute syllable: touchent (df) 22/02/94 .ch\`e2vre3feuille % hyphen disappeared from french 5/2/94 2chg ch2l 4chle. 4chles. chlo2r3a2c chlo2r3\'e2t 2chm 2chn 2chp ch2r 4chre. 4chres. 2chs 2cht 2chw 1ci 1c\^i .ci2s1alp 1c2k 4ck. 2ckb 4cke. 4ckes. 2ckent. % mute syllable: stockent (df) 22/02/94 2ckf 2ckg 2ck3h 2ckp 2cks 2ckt 1c2l 4cle. 4cles. 2clent. % mute syllable: encerclent (df) 28/02/94 1co 1c\^o co1acc co1acq co1a2d co1ap co1ar co1assoc co1assur co1au co1ax 1c\oe0 % final zero essential to terminate cs \n{1c\oeOT} % for \oe in OT1 _and_ T1 font encoding co1\'e2 co1ef co1en co1ex .con4 % missing from nb list .cons4 % missing from nb list .contre1s2c .contre3ma\^itre % hyphen disappeared from french 5/2/94 co2nurb .co1o2 .co2o3lie 1c2r 4cre. 4cres. 2crent. % mute syllable: massacrent (df) 28/02/94 1cu 1c\^u 1cy .cul4 % -- as .con4 .cons4 (march 92) %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%d 1d' 1da 1d\^a .dacryo1a2 d1d2h 1de 1d\'e 1d\`e 1d\^e 4de. 4des. % words ending with -dent (df) 22/02/94 2dent. d\'eca3dent. \'e3dent. cci3dent. inci3dent. confi3dent. tri3dent. dissi3dent. chien3dent. .ar3dent. impu3dent. pru3dent. % .d\'e1a2 .d\'e1io .d\'e1o2 .d\'e2s % originaly in JD file %.d\'e2s1a2 removed 09/17/92 because wrong for the % original JD 500 words test .d\'e3s2a3cr .d\'es2a3m % .d\'es2a2mi introduced 09/17/92 bec. i % can't see why d\'esamidonner ran in JD. % Moved to .d\'es2a3m df 12/27/93. .d\'e3s2a3tell .d\'e3s2astr .d\'e3s2c % 1 moved 3 due to .d\'e2s 09/17/92 %.d\'e2s1e2 removed 09/17/92 because wrong for the % original JD 500 words test .d\'e2s1\'e2 .d\'e3s2\'e3gr .d\'e3s2ensib .d\'e3s2ert .d\'e3s2exu %.d\'e2s3h removed 09/17/92 because wrong for the % original JD 500 words test .d\'e2s1i2 .d\'e3s2i3d .d\'e3s2i3gn .d\'e3s2i3li .d\'e3s2i3nen .d\'e3s2invo .d\'e3s2i3r .d\'e3s2ist %.d\'e2s1o2 removed 09/17/92 because wrong for the % original JD 500 words test .d\'e3s2o3d\'e .d\'e2s1\oe0 % final zero essential to terminate cs \n{.d\'e2s1\oeOT} % for \oe in OT1 _and_ T1 font encoding .d\'e3s2o3l .d\'e3s2o3pil .d\'e3s2orm .d\'e3s2orp .d\'e3s2oufr .d\'e3s2p % 1 moved 3 due to .d\'e2s 09/17/92 .d\'e3s2t % 1 moved 3 due to .d\'e2s 09/17/92 .d\'e2s1u2n 3d2hal 3d2houd 1di 1d\^i di2s3cop .di1a2c\'e .di1a2cid .di1ald .di1a2mi .di1a2tom .di1e2n .di2s3h 2dlent. % mute syllable: jodlent (df) 28/02/94 1do 1d\^o 1d2r 4dre. 4dres. 2drent. % mute syllable: engendrent (df) 28/02/94 d1s2 1du 1d\^u 1dy .dy2s3 .dy2s1a2 .dy2s1i2 .dy2s1o2 % missing from nb list .dy2s1u2 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%e .e4 'e4 .\^e4 '\^e4 .\'e4 '\'e4 .\`e4 '\`e4 \'ed2hi % df-bg 1998/02/07 for r\'edhibitoire 1\'e2drie 1\'e2drique 1\'e2lectr 1\'e2l\'ement .en1a2 'en1a2 1\'e2nerg e2n1i2vr .en1o2 'en1o2 \'epi2s3cop \'epi3s4cope e2s3cop .eu2r1a2 'eu2r1a2 eu1s2tat extra1 extra2c extra2i %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%f 1fa 1f\^a 1fe 1f\'e 1f\`e 1f\^e 4fe. 4fes. 2fent. % mute syllable: agrafent chauffent (df) 22/02/94 % 1fi 1f\^i 1f2l 4fle. 4fles. 2flent. % mute syllable: gonflent (df) 28/02/94 1fo 1f\^o 1f2r 4fre. 4fres. 2frent. % mute syllable: balafrent (df) 28/02/94 f1s2 1fu 1f\^u 1fy %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%g 1ga 1g\^a 1ge 1g\'e 1g\`e 1g\^e 4ge. 4ges. % words ending with -gent (df) 22/02/94 2gent. r\'e3gent. entre3gent. indi3gent. dili3gent. intelli3gent. indul3gent. tan3gent. rin3gent. contin3gent. .ar3gent. 'ar3gent. ser3gent. ter3gent. r\'esur3gent. % 1g2ha 1g2he 1g2hi 1g2ho 1g2hy 1gi 1g\^i 1g2l 4gle. 4gles. 2glent. % mute syllable: meuglent (df) 28/02/94 1g2n 'a2g3nat % (df) 16/01/02 .a2g3nat % (df) 16/01/02 a2g3nos % (df) 16/01/02 (pattern dia2g3n deleted) co2g3niti % (df) 16/01/02 'i2g3n\'e % (df) 16/01/02 .i2g3n\'e % (df) 16/01/02 'i2g3ni % (df) 16/01/02 .i2g3ni % (df) 16/01/02 .ma2g3nicide % (df) 16/01/02 .ma2g3nificat % (df) 16/01/02 .ma2g3num % (df) 16/01/02 o2g3nomoni % (df) 16/01/02 o2g3nosi % (df) 16/01/02 .pro2g3nath % (df) 16/01/02 pu2g3nable % (df) 16/01/02 pu2g3nac % (df) 16/01/02 .sta2g3n .syn2g3nath % (df) 16/01/02 wa2g3n 4gne. 4gnes. 2gnent. % mute syllable: accompagnent (df) 28/02/94 1go 1g\^o 1g2r 4gre. 4gres. 2grent. % mute syllable: immigrent (df) 28/02/94 1gu 1g\^u g1s2 4gue. 4gues. % words ending with -guent (df) 22/02/94 2guent. .on3guent. 'on3guent. % 1gy %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%h 1ha 1h\^a 1he 1h\'e 1h\`e 1h\^e h\'emi1\'e h\'emo1p2t 4he. 4hes. 1hi 1h\^i 1ho 1h\^o 1hu 1h\^u 1hy hypera2 hypere2 hyper\'e2 hyperi2 hypero2 hypers2 hype4r1 hyperu2 hypo1a2 hypo1e2 % missing from nb list hypo1\'e2 hypo1i2 hypo1o2 hypo1s2 hypo1u2 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%i .i4 'i4 .\^i4 '\^i4 i1algi i1arthr i1\`e2dre % ill patterns missing from nb list il2l cil3l rcil4l ucil4l vacil4l gil3l hil3l lil3l l3lion mil3l mil4let \'emil4l semil4l rmil4l armil5l capil3l papil3la papil3le papil3li papil3lom pupil3l piril3l thril3l cyril3l ibril3l pusil3l .stil3l distil3l instil3l fritil3l boutil3l vanil3lin vanil3lis vil3l avil4l chevil4l uevil4l uvil4l xil3l % end of ill patterns 1informat % missing from nb list .in1a2 'in1a2 .in2a3nit 'in2a3nit .in2augur 'in2augur .in1e2 'in1e2 .in1\'e2 'in1\'e2 .in2effab % missing from nb list 'in2effab .in2\'e3lucta 'in2\'e3lucta .in2\'e3narra 'in2\'e3narra .in2ept 'in2ept .in2er 'in2er .in2exora % missing from nb list 'in2exora .in1i2 'in1i2 .in2i3miti 'in2i3miti .in2i3q 'in2i3q .in2i3t 'in2i3t .in1o2 'in1o2 .in2o3cul 'in2o3cul .in2ond 'in2ond .in1s2tab 'in1s2tab 'inte4r3 .intera2 'intera2 .intere2 'intere2 .inter\'e2 'inter\'e2 .interi2 'interi2 .intero2 'intero2 .inte4r3 .interu2 'interu2 .inters2 'inters2 .in1u2 'in1u2 .in2uit 'in2uit .in2u3l 'in2u3l io1a2ct i1oxy i1s2tat %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%j 1j 2jk 4je. 4jes. 2jent. % mute syllable: gal\`ejent (df) 22/02/94 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%k 1ka 1k\^a 1ke 1k\'e 1k\`e 1k\^e 4ke. 4kes. 2kent. % mute syllable: jerkent (df) 22/02/94 1k2h 4kh. .kh4 1ki 1k\^i 1ko 1k\^o 1k2r 1ku 1k\^u 1ky %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%l 1la 1l\^a 1l\`a la2w3re 1le 1l\'e 1l\`e 1l\^e 4le. 4les. % words ending with -lent (df) 22/02/94 2lent. .ta3lent. iva3lent. \'equiva4lent. monova3lent. polyva3lent. re3lent. .do3lent. indo3lent. inso3lent. turbu3lent. succu3lent. f\'ecu3lent. trucu3lent. opu3lent. corpu3lent. ru3lent. sporu4lent. % 1li 1l\^i 1lo 1l\^o l1s2t 1lu 1l\^u 1ly %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%m 1ma 1m\^a .ma2c3k .macro1s2c .ma2l1a2dres .ma2l1a2dro .ma2l1ais\'e .ma2l1ap .ma2l1a2v .ma2l1en .ma2l1int .ma2l1oc .ma2l1o2d .ma2r1x % nb (jbb: ?) 1me 1m\'e 1m\`e 1m\^e .m\'e2g1oh .m\'e2sa % missing from nb list .m\'e3san % missing from nb list .m\'e2s1es .m\'e2s1i .m\'e2s1u2s .m\'eta1s2ta 4me. 4mes. % words ending with -ment (df) 22/02/94 \^a2ment. da2ment. fa2ment. amalga2ment. cla2ment. ra2ment. temp\'era3ment. ta2ment. testa3ment. qua2ment. \`e2ment. car\^e2ment. diaphrag2ment. ryth2ment. ai2ment. rai3ment. ab\^i2ment. \'eci2ment. vidi2ment. subli2ment. \'eli2ment. reli2ment. mi2ment. ani2ment. veni2ment. ri2ment. d\'etri3ment. nutri3ment. inti2ment. esti2ment. l2ment. flam2ment. gram2ment. .gem2ment. om2ment. .com3ment. \^o2ment. slalo2ment. chro2ment. to2ment. ar2ment. .sar3ment. er2ment. antifer3ment. .ser3ment. fir2ment. or2ment. as2ment. au2ment. \'ecu2ment. fu2ment. hu2ment. fichu3ment. llu2ment. plu2ment. bou2ment. bru2ment. su2ment. tu2ment. % 1mi 1m\^i .milli1am 1m2n\'emo 1m2n\`es 1m2n\'esi 1mo 1m\^o 1m\oe0 % final zero essential to terminate cs \n{1m\oeOT} % for \oe in OT1 _and_ T1 font encoding .mono1a2 .mono1e2 .mono1\'e2 .mono1i2 .mono1\"i2d\'e .mono1o2 .mono1u2 .mono1s2 mon2t3r\'eal % missing from nb list m1s2 1mu 1m\^u 1my moye2n1\^a2g %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%n 1na 1n\^a 1ne 1n\'e 1n\`e 1n\^e 4ne. 4nes. % words ending with -nent (df) 22/02/94 2nent. % fric-tionnent - syllable muette - bg 27/12/93 r\'ema3nent. imma3nent. perma3nent. .\'emi3nent. pr\'e\'emi3nent. pro\'emi3nent. sur\'emi3nent. immi3nent. conti3nent. perti3nent. absti3nent. % 1ni 1n\^i 1no 1n\^o 1n\oe0 % final zero essential to terminate cs \n{1n\oeOT} % for \oe in OT1 _and_ T1 font encoding .no2n1obs 1nu 1n\^u n3s2at. n3s2ats. n1x 1ny %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%o .o4 'o4 '\^o4 .\^o4 %'\"o2 % mjf % deleted 3/1/94 df-bg o2b3long 1octet % missing from nb list o1d2l o1\`e2dre o1ioni ombud2s3 omni1s2 o1s2tas o1s2tat o1s2t\'ero o1s2tim o1s2tom o1s2trad o1s2tratu o1s2triction .oua1ou 'oua1ou .ovi1s2c 'ovi1s2c oxy1a2 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%p 1pa 1p\^a pal\'eo1\'e2 .pa2n1a2f .pa2n1a2m\'e .pa2n1a2ra .pa2n1is .pa2n1o2ph .pa2n1opt .pa2r1a2che .pa2r1a2ch\`e .para1s2 .pa2r3h\'e 1pe 1p\'e 1p\`e 1p\^e 4pe. 4pes. % words ending with -pent (df) 22/02/94 2pent. re3pent. .ar3pent. 'ar3pent. ser3pent. % .pen2ta % pent- or penta- but never pen-ta bg 12/27/93 per3h p\'e2nul % p\'e2n1ul moved back 09/17/92 to JD def. .pe4r .per1a2 .per1e2 .per1\'e2 .per1i2 .per1o2 .per1u2 p\'e1r2\'e2q % 2r1 moved 09/17/92 to 1r2(it was a typo) .p\'eri1os .p\'eri1s2 .p\'eri2s3s .p\'eri2s3ta .p\'eri1u2 1p2h .ph4 4ph. .phalan3s2t 4phe. 4phes. 2phent. % mute syllable: triomphent (df) 22/02/94 ph2l 4phle. 4phles. 2phn photo1s2 ph2r 4phre. 4phres. 2phs 2pht 3ph2tal\'e 3ph2tis %%%% Here is an example of a pb involving phonetic and etymologic patterns 5/94 %%%% .phyto3ph2 % originaly, but wrong for phy-toph-thora 9/92 %%%% .phy2topha % for -pharmacie but wrong for phyto-biol.. 5/94 1pi 1p\^i 1p2l 4ple. 4ples. 2plent. % mute syllable: accouplent (df) 28/02/94 .pluri1a 1p2n\'e 1p2neu 1po 1p\^o po1astre poly1a2 poly1e2 poly1\'e2 poly1\`e2 poly1i2 poly1o2 poly1s2 poly1u2 .pon2tet % JD hypenated it asis 09/17/92, exception .pos2t3h .pos2t1in .pos2t1o2 .pos2t3r .post1s2 1p2r 4pre. 4pres. 2prent. % mute syllable: empourprent (df) 28/02/94 .pr\'e1a2 .pr\'e2a3la % missing from nb list .pr\'e2au .pr\'e1\'e2 .pr\'e1e2 .pr\'e1i2 .pr\'e1o2 .pr\'e1u2 .pr\'e1s2 .pro1\'e2 .pro1s2c\'e pro2s3tat .prou3d2h 1p2sych .psycho1a2n 1p2t\`er 1p2t\'er 1pu .pud1d2l 1p\^u 1py %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%q 1q 4que. 4ques. % words ending with -quent (df) 22/02/94 2quent. \'e3quent. \'elo3quent. grandilo3quent. %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%r 1ra 1r\^a radio1a2 % missing from nb list 1re 1r\'e 1r\`e 1r\^e .r\'e1a2 .r\'e2a3le .r\'e2a3lis .r\'e2a3lit .r\'e2aux .r\'e1\'e2 .r\'e1e2 .r\'e2el .r\'e2er .r\'e2\`er .r\'e1i2 .r\'e2i3fi .r\'e1o2 .re1s2 .re2s3cap .re2s3cisi % for res-cision 09/17/92 (missing from nb) .re2s3ciso % for res-cisoire 09/17/92(missing from nb) .re2s3cou .re2s3cri .re2s3pect .re2s3pir .re2s3plend .re2s3pons .re2s3quil .re2s3s .re2s3t .re3s4tab .re3s4tag .re3s4tand .re3s4tat .re3s4t\'en .re3s4t\'er .re3s4tim .re3s4tip .re3s4toc .re3s4top .re3s4tr .re4s5trein .re4s5trict .re4s5trin .re3s4tu .re3s4ty .r\'eu2 %.r\'e1u2 % pattern rejected 12/2/92 % (don't hyphenate as r\'e-union nor r\'eu-nion) .r\'e2uss .r\'etro1a2 4re. 4res. % words ending with -rent (df) 22/02/94 2rent. % es-p\`erent - syllable muette - bg 27/12/93 .pa3rent. appa3rent. transpa3rent. \'e3rent. tor3rent. cur3rent. % 1r2h 4rhe. 4rhes. 2r3heur 2r3hydr 1ri 1r\^i 1ro 1r\^o 1ru 1r\^u 1ry %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%s 1sa 1s\^a .sch4 1s2caph 1s2cl\'er 1s2cop 1s2ch e2s3ch i2s3ch\'e i2s3chia i2s3chio 4sch. 4sche. 4sches. 2schs 1se 1s\'e 1s\`e 1s\^e sesqui1a2 4se. 4ses. % words ending with -sent (df) 22/02/94 2sent. % massent - syllable muette - bg 27/12/93 ab3sent. pr\'e3sent. .res3sent. % .seu2le % jbb .sh4 1s2h 4sh. 4she. 4shes. 2shent. % mute syllable: smashent (df) 22/02/94 2shm 2s3hom 2shr 2shs 1si 1s\^i 1s2lav 1s2lov 1so 1s\^o 1s\oe0 % final zero essential to terminate cs \n{1s\oeOT} % for \oe in OT1 _and_ T1 font encoding 1s2patia 1s2perm 1s2por 1s2ph\`er 1s2ph\'er 1s2piel 1s2piros 1s2tandard 1s2tein st\'er\'eo1s2 1s2tigm 1s2tock 1s2tomos 1s2troph 1s2tructu 1s2tyle 1su 1s\^u .su2b1a2 .su3b2alt .su2b1\'e2 .su3b2\'e3r .su2b1in .su2b3limin .su2b3lin .su2b3lu sub1s2 .su2b1ur supero2 supe4r1 supers2 .su2r1a2 su3r2ah .su3r2a3t .su2r1e2 .su3r2eau .su3r2ell .su3r2et .su2r1\'e2 .su2r3h .su2r1i2m .su2r1inf .su2r1int .su2r1of .su2r1ox 1sy %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%t 1ta 1t\^a 1t\`a tachy1a2 tchin3t2 1te 1t\'e 1t\`e 1t\^e t\'el\'e1e2 t\'el\'e1i2 t\'el\'e1o2b t\'el\'e1o2p t\'el\'e1s2 4te. 4tes. % words ending with -tent (df) 22/02/94 2tent. % mentent - syllable muette - bg 27/12/93 .la3tent. .pa3tent. comp\'e3tent. \'eni3tent. m\'econ3tent. omnipo3tent. ventripo3tent. \'equipo3tent. impo3tent. mit3tent. % .th4 1t2h 4th. 4the. 4thes. thermo1s2 2t3heur 2thl % th2l was wrong for ...ath-lon (jd said 2thl) df 12/27/93 2thm 2thn th2r 4thre. 4thres. 2ths 1ti 1t\^i 1to 1t\^o 1t2r tran2s1a2 tran3s2act tran3s2ats tran2s3h tran2s1o2 tran2s3p tran2s1u2 4tre. 4tres. 2trent. % mute syllable: infiltrent (df) 28/02/94 .tri1a2c .tri1a2n .tri1a2t .tri1o2n t1t2l 1tu 1t\^u tung2s3 1ty %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%u .u4 'u4 .\^u4 '\^u4 uni1o2v uni1a2x u2s3tr %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%v 1va 1v\^a 1ve 1v\'e 1v\`e 1v\^e v\'elo1s2ki 4ve. 4ves. % words ending with -vent (df) 22/02/94 2vent. conni3vent. .sou3vent. % 1vi 1v\^i 1vo 1v\^o vol2t1amp 1v2r 4vre. 4vres. 2vrent. % mute syllable: recouvrent (df) 28/02/94 1vu 1v\^u 1vy %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%w 1wa 1we 4we. 4wes. 2went. % mute syllable: interviewent (df) 22/02/94 1wi 1wo 1wu 1w2r %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%x 2xent. % mute syllable: malaxent (df) 22/02/94 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%y .y4 'y4 y1asth y1s2tom y1algi %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%z 1za 1ze 1z\'e 1z\`e 4ze. 4zes. % words ending with -zent (df) 22/02/94 2zent. privatdo3zent. % 1zi 1zo 1zu 1zy } \endgroup \endinput %% %% End of file `frhyph.tex'. |
Added gc_lang/fr/dictionnaire/césures/hyph-fr.tex version [394d4d9505].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 | % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: frhyph.tex <2006-10-20> % Author: R. Bastian, D. Flipo, B. Gaulle <cesure-l at gutenberg.eu.org> % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % % French hyphenation patterns %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This file is available for free and can used and redistributed % asis for free. Modified versions should have another name. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \message{frhyph.tex - French hyphenation patterns (V2.12) <2002/12/11>} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *BEFORE* using this file *PLEASE* run checksum on it: % % checksum -v frhyph.tex % % to make sure that it hasn't been damaged. % % Then if you notice anything wrong in french hyphenation please report to % % R. Bastian, D. Flipo, B. Gaulle at the email address: % % cesure-l@gutenberg.eu.org % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% checksum = "37208 1458 3078 34821" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%% The most famous good guys who worked hard to obtain something usable. % Jacques Desarmenien, Universite de Strasbourg : % - << how to run TeX in a French environment: hyphenation, fonts, % typography. >> in Tugboat, 5 (1984) 91-102. and TeX85 conference % - << La division par ordinateur des mots francais : % application a TeX >> in TSI vol. 5 No 4, 1986 (C) AFCET- % Gauthier-Villars % Norman Buckle, UQAH (nb; many additions) % Michael Ferguson, INRS-Telecommunications (mjf) June 1988 % Justin Bur, Universite de Montreal (jbb; checked against original list) % all patterns including apostrophe missing from nb list % after that, GUTenberg and specially Daniel Flipo and Bernard Gaulle % did their best effort to improve the list of patterns. % % ----------------------------------------------------------------- % % Adaption of these patterns for % - TeX Version 3.x and MLTeX 3.x (2.x) % and % - all fonts in T1/`Cork' and/or CM/OT1 encoding % by Bernd Raichle 1996/08/28 (using ideas from `ghyph31.tex' % as of 1994-02-13 maintained by Bernd Raichle). % (An adaption for the old MLTeX 2.x exists but can not be % tested in lack of an executable.) % % ----------------------------------------------------------------- % \patterns{ %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%* 2'2 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%a .a4 'a4 .â4 'â4 ab2h % df-bg 1998/02/07 for abhorrer .ab3réa 'ab3réa ad2h % df-bg 1998/02/07 for adhèsion & co a1è2dre .ae3s4ch 'ae3s4ch 1alcool a2l1algi .amino1a2c 'amino1a2c .ana3s4tr 'ana3s4tr 1a2nesthési .anti1a2 'anti1a2 .anti1e2 'anti1e2 .anti1é2 .anti2enne 'anti2enne 'anti1é2 .anti1s2 'anti1s2 .apo2s3ta 'apo2s3ta apo2s3tr archi1é2pis .as2ta 'as2ta a2s3tro %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%b 1ba 1bâ .bai2se3main % hyphen disappeared from french 5/2/94 1be 1bé 1bè 1bê 4be. 4bes. 2bent. % mute syllable: tombent (df) 22/02/94 1bi 1bî .bi1a2c .bi1a2t % like .tri1a2t for tri-athlon bg 12/27/93 .bi1au .bio1a2 .bi2s1a2 .bi1u2 1b2l 4ble. 4bles. 2blent. % mute syllable: troublent (df) 28/02/94 1bo 1bô 1b2r 4bre. 4bres. 2brent. % mute syllable: palabrent (df) 28/02/94 1bu 1bû 1by %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%c 1ç 1ca 1câ ca3ou3t2 % for caoutchou... added 3/1/94 df-bg 1ce 1cé 1cè 1cê 4ce. 4ces. % words ending with -cent (df) 22/02/94 2cent. ja3cent. ac3cent. é3cent. munifi3cent. réti3cent. privatdo3cent. inno3cent. es3cent. acquies4cent. is3cent. immis4cent. % .ch4 1c2h 4ch. 2chb 4che. 4ches. 2chent. % mute syllable: touchent (df) 22/02/94 .chè2vre3feuille % hyphen disappeared from french 5/2/94 2chg ch2l 4chle. 4chles. chlo2r3a2c chlo2r3é2t 2chm 2chn 2chp ch2r 4chre. 4chres. 2chs 2cht 2chw 1ci 1cî .ci2s1alp 1c2k 4ck. 2ckb 4cke. 4ckes. 2ckent. % mute syllable: stockent (df) 22/02/94 2ckf 2ckg 2ck3h 2ckp 2cks 2ckt 1c2l 4cle. 4cles. 2clent. % mute syllable: encerclent (df) 28/02/94 1co 1cô co1acc co1acq co1a2d co1ap co1ar co1assoc co1assur co1au co1ax 1cœ co1é2 co1ef co1en co1ex .con4 % missing from nb list .cons4 % missing from nb list .contre1s2c .contre3maître % hyphen disappeared from french 5/2/94 co2nurb .co1o2 .co2o3lie 1c2r 4cre. 4cres. 2crent. % mute syllable: massacrent (df) 28/02/94 1cu 1cû 1cy .cul4 % -- as .con4 .cons4 (march 92) %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%d 1d' 1da 1dâ .dacryo1a2 d1d2h 1de 1dé 1dè 1dê 4de. 4des. % words ending with -dent (df) 22/02/94 2dent. déca3dent. é3dent. cci3dent. inci3dent. confi3dent. tri3dent. dissi3dent. chien3dent. .ar3dent. impu3dent. pru3dent. % .dé1a2 .dé1io .dé1o2 .dé2s % originaly in JD file %.dé2s1a2 removed 09/17/92 because wrong for the % original JD 500 words test .dé3s2a3cr .dés2a3m % .dés2a2mi introduced 09/17/92 bec. i % can't see why désamidonner ran in JD. % Moved to .dés2a3m df 12/27/93. .dé3s2a3tell .dé3s2astr .dé3s2c % 1 moved 3 due to .dé2s 09/17/92 %.dé2s1e2 removed 09/17/92 because wrong for the % original JD 500 words test .dé2s1é2 .dé3s2é3gr .dé3s2ensib .dé3s2ert .dé3s2exu %.dé2s3h removed 09/17/92 because wrong for the % original JD 500 words test .dé2s1i2 .dé3s2i3d .dé3s2i3gn .dé3s2i3li .dé3s2i3nen .dé3s2invo .dé3s2i3r .dé3s2ist %.dé2s1o2 removed 09/17/92 because wrong for the % original JD 500 words test .dé3s2o3dé .dé2s1œ .dé3s2o3l .dé3s2o3pil .dé3s2orm .dé3s2orp .dé3s2oufr .dé3s2p % 1 moved 3 due to .dé2s 09/17/92 .dé3s2t % 1 moved 3 due to .dé2s 09/17/92 .dé2s1u2n 3d2hal 3d2houd 1di 1dî di2s3cop .di1a2cé .di1a2cid .di1ald .di1a2mi .di1a2tom .di1e2n .di2s3h 2dlent. % mute syllable: jodlent (df) 28/02/94 1do 1dô 1d2r 4dre. 4dres. 2drent. % mute syllable: engendrent (df) 28/02/94 d1s2 1du 1dû 1dy .dy2s3 .dy2s1a2 .dy2s1i2 .dy2s1o2 % missing from nb list .dy2s1u2 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%e .e4 'e4 .ê4 'ê4 .é4 'é4 .è4 'è4 éd2hi % df-bg 1998/02/07 for rédhibitoire 1é2drie 1é2drique 1é2lectr 1é2lément .en1a2 'en1a2 1é2nerg e2n1i2vr .en1o2 'en1o2 épi2s3cop épi3s4cope e2s3cop .eu2r1a2 'eu2r1a2 eu1s2tat extra1 extra2c extra2i %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%f 1fa 1fâ 1fe 1fé 1fè 1fê 4fe. 4fes. 2fent. % mute syllable: agrafent chauffent (df) 22/02/94 % 1fi 1fî 1f2l 4fle. 4fles. 2flent. % mute syllable: gonflent (df) 28/02/94 1fo 1fô 1f2r 4fre. 4fres. 2frent. % mute syllable: balafrent (df) 28/02/94 f1s2 1fu 1fû 1fy %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%g 1ga 1gâ 1ge 1gé 1gè 1gê 4ge. 4ges. % words ending with -gent (df) 22/02/94 2gent. ré3gent. entre3gent. indi3gent. dili3gent. intelli3gent. indul3gent. tan3gent. rin3gent. contin3gent. .ar3gent. 'ar3gent. ser3gent. ter3gent. résur3gent. % 1g2ha 1g2he 1g2hi 1g2ho 1g2hy 1gi 1gî 1g2l 4gle. 4gles. 2glent. % mute syllable: meuglent (df) 28/02/94 1g2n 'a2g3nat % (df) 16/01/02 .a2g3nat % (df) 16/01/02 a2g3nos % (df) 16/01/02 (pattern dia2g3n deleted) co2g3niti % (df) 16/01/02 'i2g3né % (df) 16/01/02 .i2g3né % (df) 16/01/02 'i2g3ni % (df) 16/01/02 .i2g3ni % (df) 16/01/02 .ma2g3nicide % (df) 16/01/02 .ma2g3nificat % (df) 16/01/02 .ma2g3num % (df) 16/01/02 o2g3nomoni % (df) 16/01/02 o2g3nosi % (df) 16/01/02 .pro2g3nath % (df) 16/01/02 pu2g3nable % (df) 16/01/02 pu2g3nac % (df) 16/01/02 .sta2g3n .syn2g3nath % (df) 16/01/02 wa2g3n 4gne. 4gnes. 2gnent. % mute syllable: accompagnent (df) 28/02/94 1go 1gô 1g2r 4gre. 4gres. 2grent. % mute syllable: immigrent (df) 28/02/94 1gu 1gû g1s2 4gue. 4gues. % words ending with -guent (df) 22/02/94 2guent. .on3guent. 'on3guent. % 1gy %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%h 1ha 1hâ 1he 1hé 1hè 1hê hémi1é hémo1p2t 4he. 4hes. 1hi 1hî 1ho 1hô 1hu 1hû 1hy hypera2 hypere2 hyperé2 hyperi2 hypero2 hypers2 hype4r1 hyperu2 hypo1a2 hypo1e2 % missing from nb list hypo1é2 hypo1i2 hypo1o2 hypo1s2 hypo1u2 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%i .i4 'i4 .î4 'î4 i1algi i1arthr i1è2dre % ill patterns missing from nb list il2l cil3l rcil4l ucil4l vacil4l gil3l hil3l lil3l l3lion mil3l mil4let émil4l semil4l rmil4l armil5l capil3l papil3la papil3le papil3li papil3lom pupil3l piril3l thril3l cyril3l ibril3l pusil3l .stil3l distil3l instil3l fritil3l boutil3l vanil3lin vanil3lis vil3l avil4l chevil4l uevil4l uvil4l xil3l % end of ill patterns 1informat % missing from nb list .in1a2 'in1a2 .in2a3nit 'in2a3nit .in2augur 'in2augur .in1e2 'in1e2 .in1é2 'in1é2 .in2effab % missing from nb list 'in2effab .in2é3lucta 'in2é3lucta .in2é3narra 'in2é3narra .in2ept 'in2ept .in2er 'in2er .in2exora % missing from nb list 'in2exora .in1i2 'in1i2 .in2i3miti 'in2i3miti .in2i3q 'in2i3q .in2i3t 'in2i3t .in1o2 'in1o2 .in2o3cul 'in2o3cul .in2ond 'in2ond .in1s2tab 'in1s2tab 'inte4r3 .intera2 'intera2 .intere2 'intere2 .interé2 'interé2 .interi2 'interi2 .intero2 'intero2 .inte4r3 .interu2 'interu2 .inters2 'inters2 .in1u2 'in1u2 .in2uit 'in2uit .in2u3l 'in2u3l io1a2ct i1oxy i1s2tat %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%j 1j 2jk 4je. 4jes. 2jent. % mute syllable: galèjent (df) 22/02/94 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%k 1ka 1kâ 1ke 1ké 1kè 1kê 4ke. 4kes. 2kent. % mute syllable: jerkent (df) 22/02/94 1k2h 4kh. .kh4 1ki 1kî 1ko 1kô 1k2r 1ku 1kû 1ky %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%l 1la 1lâ 1là la2w3re 1le 1lé 1lè 1lê 4le. 4les. % words ending with -lent (df) 22/02/94 2lent. .ta3lent. iva3lent. équiva4lent. monova3lent. polyva3lent. re3lent. .do3lent. indo3lent. inso3lent. turbu3lent. succu3lent. fécu3lent. trucu3lent. opu3lent. corpu3lent. ru3lent. sporu4lent. % 1li 1lî 1lo 1lô l1s2t 1lu 1lû 1ly %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%m 1ma 1mâ .ma2c3k .macro1s2c .ma2l1a2dres .ma2l1a2dro .ma2l1aisé .ma2l1ap .ma2l1a2v .ma2l1en .ma2l1int .ma2l1oc .ma2l1o2d .ma2r1x % nb (jbb: ?) 1me 1mé 1mè 1mê .mé2g1oh .mé2sa % missing from nb list .mé3san % missing from nb list .mé2s1es .mé2s1i .mé2s1u2s .méta1s2ta 4me. 4mes. % words ending with -ment (df) 22/02/94 â2ment. da2ment. fa2ment. amalga2ment. cla2ment. ra2ment. tempéra3ment. ta2ment. testa3ment. qua2ment. è2ment. carê2ment. diaphrag2ment. ryth2ment. ai2ment. rai3ment. abî2ment. éci2ment. vidi2ment. subli2ment. éli2ment. reli2ment. mi2ment. ani2ment. veni2ment. ri2ment. détri3ment. nutri3ment. inti2ment. esti2ment. l2ment. flam2ment. gram2ment. .gem2ment. om2ment. .com3ment. ô2ment. slalo2ment. chro2ment. to2ment. ar2ment. .sar3ment. er2ment. antifer3ment. .ser3ment. fir2ment. or2ment. as2ment. au2ment. écu2ment. fu2ment. hu2ment. fichu3ment. llu2ment. plu2ment. bou2ment. bru2ment. su2ment. tu2ment. % 1mi 1mî .milli1am 1m2némo 1m2nès 1m2nési 1mo 1mô 1mœ .mono1a2 .mono1e2 .mono1é2 .mono1i2 .mono1ï2dé .mono1o2 .mono1u2 .mono1s2 mon2t3réal % missing from nb list m1s2 1mu 1mû 1my moye2n1â2g %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%n 1na 1nâ 1ne 1né 1nè 1nê 4ne. 4nes. % words ending with -nent (df) 22/02/94 2nent. % fric-tionnent - syllable muette - bg 27/12/93 réma3nent. imma3nent. perma3nent. .émi3nent. préémi3nent. proémi3nent. surémi3nent. immi3nent. conti3nent. perti3nent. absti3nent. % 1ni 1nî 1no 1nô 1nœ .no2n1obs 1nu 1nû n3s2at. n3s2ats. n1x 1ny %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%o .o4 'o4 'ô4 .ô4 %'\"o2 % mjf % deleted 3/1/94 df-bg o2b3long 1octet % missing from nb list o1d2l o1è2dre o1ioni ombud2s3 omni1s2 o1s2tas o1s2tat o1s2téro o1s2tim o1s2tom o1s2trad o1s2tratu o1s2triction .oua1ou 'oua1ou .ovi1s2c 'ovi1s2c oxy1a2 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%p 1pa 1pâ paléo1é2 .pa2n1a2f .pa2n1a2mé .pa2n1a2ra .pa2n1is .pa2n1o2ph .pa2n1opt .pa2r1a2che .pa2r1a2chè .para1s2 .pa2r3hé 1pe 1pé 1pè 1pê 4pe. 4pes. % words ending with -pent (df) 22/02/94 2pent. re3pent. .ar3pent. 'ar3pent. ser3pent. % .pen2ta % pent- or penta- but never pen-ta bg 12/27/93 per3h pé2nul % pé2n1ul moved back 09/17/92 to JD def. .pe4r .per1a2 .per1e2 .per1é2 .per1i2 .per1o2 .per1u2 pé1r2é2q % 2r1 moved 09/17/92 to 1r2(it was a typo) .péri1os .péri1s2 .péri2s3s .péri2s3ta .péri1u2 1p2h .ph4 4ph. .phalan3s2t 4phe. 4phes. 2phent. % mute syllable: triomphent (df) 22/02/94 ph2l 4phle. 4phles. 2phn photo1s2 ph2r 4phre. 4phres. 2phs 2pht 3ph2talé 3ph2tis %%%% Here is an example of a pb involving phonetic and etymologic patterns 5/94 %%%% .phyto3ph2 % originaly, but wrong for phy-toph-thora 9/92 %%%% .phy2topha % for -pharmacie but wrong for phyto-biol.. 5/94 1pi 1pî 1p2l 4ple. 4ples. 2plent. % mute syllable: accouplent (df) 28/02/94 .pluri1a 1p2né 1p2neu 1po 1pô po1astre poly1a2 poly1e2 poly1é2 poly1è2 poly1i2 poly1o2 poly1s2 poly1u2 .pon2tet % JD hypenated it asis 09/17/92, exception .pos2t3h .pos2t1in .pos2t1o2 .pos2t3r .post1s2 1p2r 4pre. 4pres. 2prent. % mute syllable: empourprent (df) 28/02/94 .pré1a2 .pré2a3la % missing from nb list .pré2au .pré1é2 .pré1e2 .pré1i2 .pré1o2 .pré1u2 .pré1s2 .pro1é2 .pro1s2cé pro2s3tat .prou3d2h 1p2sych .psycho1a2n 1p2tèr 1p2tér 1pu .pud1d2l 1pû 1py %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%q 1q 4que. 4ques. % words ending with -quent (df) 22/02/94 2quent. é3quent. élo3quent. grandilo3quent. %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%r 1ra 1râ radio1a2 % missing from nb list 1re 1ré 1rè 1rê .ré1a2 .ré2a3le .ré2a3lis .ré2a3lit .ré2aux .ré1é2 .ré1e2 .ré2el .ré2er .ré2èr .ré1i2 .ré2i3fi .ré1o2 .re1s2 .re2s3cap .re2s3cisi % for res-cision 09/17/92 (missing from nb) .re2s3ciso % for res-cisoire 09/17/92(missing from nb) .re2s3cou .re2s3cri .re2s3pect .re2s3pir .re2s3plend .re2s3pons .re2s3quil .re2s3s .re2s3t .re3s4tab .re3s4tag .re3s4tand .re3s4tat .re3s4tén .re3s4tér .re3s4tim .re3s4tip .re3s4toc .re3s4top .re3s4tr .re4s5trein .re4s5trict .re4s5trin .re3s4tu .re3s4ty .réu2 %.ré1u2 % pattern rejected 12/2/92 % (don't hyphenate as ré-union nor réu-nion) .ré2uss .rétro1a2 4re. 4res. % words ending with -rent (df) 22/02/94 2rent. % es-pèrent - syllable muette - bg 27/12/93 .pa3rent. appa3rent. transpa3rent. é3rent. tor3rent. cur3rent. % 1r2h 4rhe. 4rhes. 2r3heur 2r3hydr 1ri 1rî 1ro 1rô 1ru 1rû 1ry %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%s 1sa 1sâ .sch4 1s2caph 1s2clér 1s2cop 1s2ch e2s3ch i2s3ché i2s3chia i2s3chio 4sch. 4sche. 4sches. 2schs 1se 1sé 1sè 1sê sesqui1a2 4se. 4ses. % words ending with -sent (df) 22/02/94 2sent. % massent - syllable muette - bg 27/12/93 ab3sent. pré3sent. .res3sent. % .seu2le % jbb .sh4 1s2h 4sh. 4she. 4shes. 2shent. % mute syllable: smashent (df) 22/02/94 2shm 2s3hom 2shr 2shs 1si 1sî 1s2lav 1s2lov 1so 1sô 1sœ 1s2patia 1s2perm 1s2por 1s2phèr 1s2phér 1s2piel 1s2piros 1s2tandard 1s2tein stéréo1s2 1s2tigm 1s2tock 1s2tomos 1s2troph 1s2tructu 1s2tyle 1su 1sû .su2b1a2 .su3b2alt .su2b1é2 .su3b2é3r .su2b1in .su2b3limin .su2b3lin .su2b3lu sub1s2 .su2b1ur supero2 supe4r1 supers2 .su2r1a2 su3r2ah .su3r2a3t .su2r1e2 .su3r2eau .su3r2ell .su3r2et .su2r1é2 .su2r3h .su2r1i2m .su2r1inf .su2r1int .su2r1of .su2r1ox 1sy %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%t 1ta 1tâ 1tà tachy1a2 tchin3t2 1te 1té 1tè 1tê télé1e2 télé1i2 télé1o2b télé1o2p télé1s2 4te. 4tes. % words ending with -tent (df) 22/02/94 2tent. % mentent - syllable muette - bg 27/12/93 .la3tent. .pa3tent. compé3tent. éni3tent. mécon3tent. omnipo3tent. ventripo3tent. équipo3tent. impo3tent. mit3tent. % .th4 1t2h 4th. 4the. 4thes. thermo1s2 2t3heur 2thl % th2l was wrong for ...ath-lon (jd said 2thl) df 12/27/93 2thm 2thn th2r 4thre. 4thres. 2ths 1ti 1tî 1to 1tô 1t2r tran2s1a2 tran3s2act tran3s2ats tran2s3h tran2s1o2 tran2s3p tran2s1u2 4tre. 4tres. 2trent. % mute syllable: infiltrent (df) 28/02/94 .tri1a2c .tri1a2n .tri1a2t .tri1o2n t1t2l 1tu 1tû tung2s3 1ty %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%u .u4 'u4 .û4 'û4 uni1o2v uni1a2x u2s3tr %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%v 1va 1vâ 1ve 1vé 1vè 1vê vélo1s2ki 4ve. 4ves. % words ending with -vent (df) 22/02/94 2vent. conni3vent. .sou3vent. % 1vi 1vî 1vo 1vô vol2t1amp 1v2r 4vre. 4vres. 2vrent. % mute syllable: recouvrent (df) 28/02/94 1vu 1vû 1vy %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%w 1wa 1we 4we. 4wes. 2went. % mute syllable: interviewent (df) 22/02/94 1wi 1wo 1wu 1w2r %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%x 2xent. % mute syllable: malaxent (df) 22/02/94 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%y .y4 'y4 y1asth y1s2tom y1algi %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%z 1za 1ze 1zé 1zè 4ze. 4zes. % words ending with -zent (df) 22/02/94 2zent. privatdo3zent. % 1zi 1zo 1zu 1zy } |
Added gc_lang/fr/dictionnaire/césures/hyph_fr.dic version [dcb79e8ef8].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 | UTF-8 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LEFTHYPHENMIN 2 RIGHTHYPHENMIN 2 COMPOUNDLEFTHYPHENMIN 2 COMPOUNDRIGHTHYPHENMIN 2 %%% Do not remove the following line %%% NEXTLEVEL %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2'2 .a4 'a4 .â4 'â4 ab2h a1bî abî1me abî2ment. .a1b2r 'a1b2r .ab1ré 'ab1ré .ab3réa 'ab3réa ab1se ab3sent. abs1ti absti1ne absti3nent. ac1ce ac3cent. ac1q acquies1ce acquies4cent. ad2h aè1d2r a1è2d1re .ae3s4c2h 'ae3s4c2h a1g2n .a1g2n 'a1g2n .ag1na 'ag1na .a2g3nat 'a2g3nat ag1no a2g3nos ai1me ai2ment. a1la a2l1al1gi al1co 1alcool a1ma amal1ga amalga1me amalga2ment. â1me â2ment. .a1mi 'a1mi .ami1no 'ami1no .amino1a2c 'amino1a2c .a1na 'a1na .ana3s4t2r 'ana3s4t2r a1ne anes1t2h anest1hé 1a2nesthé1si a1ni ani1me ani2ment. an1ti .an1ti 'an1ti .anti1a2 'anti1a2 .anti1e2 'anti1e2 .anti1é2 'anti1é2 .anti2en1ne 'anti2en1ne anti1fe antifer1me antifer3ment. .anti1s2 'anti1s2 a1po .a1po 'a1po .apo2s3ta 'apo2s3ta apo2s3t2r ap1pa appa1re appa3rent. ar1c2h arc1hi archié1pi archi1é2pis .ar1de .ar3dent. .ar1ge 'ar1ge .ar3gent. 'ar3gent. ar1me ar2ment. ar1mi armil5l .ar1pe 'ar1pe .ar3pent. 'ar3pent. as1me as2ment. .as2ta 'as2ta as1t2r a2s3t1ro au1me au2ment. a1vi avil4l 1ba .1ba 1bâ .bai1se .baise1ma .bai2se3main 1be 1bé 1bè 1bê 4be. 2bent. 4bes. 1bi .1bi 1bî .bi1a2c .bi1a2t .bi1au .bio1a2 .bi2s1a2 .bi1u2 1b2l b1le 4b4le. 2b2lent. 4b4les. 1bo 1bô bou1me bou2ment. bou1ti boutil3l 1b2r b1re 4b4re. 2b2rent. 4b4res. b1ru bru1me bru2ment. 1bu 1bû 1by 1ç 1ca 1câ ca3ou3t2 ca1pi capil3l ca1rê carê1me carê2ment. c1ci cci1de cci3dent. 1ce 1cé 1cè 1cê 4ce. 2cent. 4ces. 1c2h .1c2h4 4ch. 2chb c1he .c1hè 4c4he. 2chent. 4c4hes. che1vi chevil4l .chè1v2r .chèv1re .chèvre1fe .chèvrefeuil2l .chè2vre3feuil1le 2chg c1hi chien1de chien3dent. ch2l ch1le 4ch4le. 4ch4les. ch1lo chlo1ra chlo2r3a2c chlo1ré chlo2r3é2t 2chm 2chn 2chp ch2r ch1re 4ch4re. 4ch4res. ch1ro chro1me chro2ment. 2chs 2cht 2chw 1ci .1ci 1cî cil3l .ci1sa .ci2s1alp 1c2k 4ck. 2ckb c1ke 4c4ke. 2c2kent. 4c4kes. 2ckf 2ckg 2c1k3h 2ckp 2cks 2ckt 1c2l c1la cla1me cla2ment. c1le 4c4le. 2c2lent. 4c4les. 1co .1co 1cô co1acc co1ac1q co1a2d co1ap co1ar coas1so co1assoc coas1su co1assur co1au co1ax 1cœ co1é2 co1ef co1en co1ex co1g2n cog1ni co2g3ni1ti .com1me .com3ment. com1pé compé1te compé3tent. .con4 con1fi confi1de confi3dent. con1ni conni1ve conni3vent. .cons4 con1ti conti1ne conti3nent. contin1ge contin3gent. .con1t2r .cont1re .contre1ma .contremaî1t2r .cont1re3maît1re .contre1s2c co1nu co2nurb .co1o2 .coo1li .co2o3lie cor1pu corpu1le corpu3lent. 1c2r c1re 4c4re. 2c2rent. 4c4res. 1cu .1cu 1cû .cul4 cur1re cur3rent. 1cy cy1ri cyril3l 1d2'2 1da .1da 1dâ .da1c2r .dac1ry .dacryo1a2 da1me da2ment. d1d2h 1de 1dé .1dé 1dè 1dê 4de. .dé1a2 dé1ca déca1de déca3dent. .dé1io 2dent. .dé1o2 .dé2s 4des. .dé1sa .dé3s2a3c2r .dés2a3m .dé3s2as1t2r .désa1te .dé3s2a3tell .dé3s2c .dé1se .dé2s1é2 .dé3s2é3g2r .désen1si .dé3s2ensib .dé3s2ert .dé3s2exu .dé2s1i2 .dé3s2i3d .dé3s2i3g2n .dé3s2i3li .dési1ne .dé3s2i3nen .dé3s2in1vo .dé3s2i3r .dé3s2ist .dé1so .1dé3s2o3dé .dé2s1œ .dé3s2o3l .déso1pi .dé3s2o3pil .dé3s2orm .dé3s2orp .dé3s2ou1f2r .dé3s2p .dé3s2t .dé1su .dé2s1u2n dé1t2r dét1ri détri1me détri3ment. d1ha 3d2hal d1ho 3d2houd 1di .1di 1dî .di1a2cé .dia1ci .di1a2cid .di1ald .di1a2mi dia1p2h diaph2r diaph1ra diaphrag1me diaphrag2ment. .dia1to .di1a2tom .di1e2n di1li dili1ge dili3gent. dis1co di2s3cop .di2s3h dis1si dissi1de dissi3dent. dis1ti distil3l d1le 2d2lent. 1do .1do 1dô .do1le .do3lent. 1d2r d1re 4d4re. 2d2rent. 4d4res. d1s2 1du 1dû 1dy .1dy .dy2s3 .dy2s1a2 .dy2s1i2 .dy2s1o2 .dy2s1u2 .e4 'e4 .é4 'é4 .è4 'è4 .ê4 'ê4 é1ce é3cent. é1ci éci1me éci2ment. é1cu écu1me écu2ment. é1de é3dent. éd2hi é1d2r éd1ri 1é2drie édri1q 1é2drique é1le é1lé 1é2lec1t2r élé1me 1é2lément é1li éli1me éli2ment. é1lo élo1q élo3quent. è1me è2ment. é1mi .é1mi émil4l .émi1ne .émi3nent. .e1n1a2 'e1n1a2 é1ne 1é2nerg e1ni é1ni éni1te éni3tent. e2n1i2v2r .e1n1o2 'e1n1o2 en1t2r ent1re entre1ge entre3gent. é1pi épis1co épi2s3cop épi3s4co1pe é1q é3quent. équi1po équipo1te équipo3tent. équi1va équiva1le équiva4lent. é1re é3rent. er1me er2ment. es1ce es3cent. e2s3c2h es1co e2s3cop es1ti esti1me esti2ment. .eu2r1a2 'eu2r1a2 eus1ta eu1s2tat ex1t2r ext1ra1 extra2c extra2i 1fa 1fâ fa1me fa2ment. 1fe 1fé 1fè 1fê 4fe. fé1cu fécu1le fécu3lent. 2fent. 4fes. 1fi 1fî fi1c2h fic1hu fichu1me fichu3ment. fir1me fir2ment. 1f2l f1la flam1me flam2ment. f1le 4f4le. 2f2lent. 4f4les. 1fo 1fô 1f2r f1re 4f4re. 2f2rent. 4f4res. f1ri fri1ti fritil3l f1s2 1fu 1fû fu1me fu2ment. 1fy 1ga 1gâ 1ge .1ge 1gé 1gè 1gê 4ge. .gem1me .gem2ment. 2gent. 4ges. 1g2ha 1g2he 1g2hi 1g2ho 1g2hy 1gi 1gî gil3l 1g2l g1le 4g4le. 2g2lent. 4g4les. 1g2n g1ne 4g4ne. 2g2nent. 4g4nes. 1go 1gô 1g2r g1ra gram1me gram2ment. gran1di grandi1lo grandilo1q grandilo3quent. g1re 4g4re. 2g2rent. 4g4res. g1s2 1gu 1gû 4gue. 2guent. 4gues. 1gy 1ha 1hâ 1he 1hé 1hè 1hê 4he. hé1mi hémi1é hé1mo hémo1p2t 4hes. 1hi 1hî hil3l 1ho 1hô 1hu 1hû hu1me hu2ment. 1hy hy1pe hype4r1 hype1ra2 hype1re2 hype1ré2 hype1ri2 hype1ro2 hypers2 hype1ru2 hy1po hypo1a2 hypo1e2 hypo1é2 hypo1i2 hypo1o2 hypo1s2 hypo1u2 .i4 'i4 .î4 'î4 i1al1gi iar1t2h i1arth2r i1b2r ib1ri ibril3l iè1d2r i1è2d1re .i1g2n 'i1g2n .i2g3né 'i2g3né .i2g3ni 'i2g3ni il2l im1ma imma1ne imma3nent. im1mi immi1ne immi3nent. immis1ce immis4cent. im1po impo1te impo3tent. im1pu impu1de impu3dent. .i1n1a2 'i1n1a2 .ina1ni 'ina1ni .in2a3nit 'in2a3nit .inau1gu 'inau1gu .in2augur 'in2augur in1ci inci1de inci3dent. in1di indi1ge indi3gent. in1do indo1le indo3lent. in1du indul1ge indul3gent. .i1n1e2 'i1n1e2 .i1n1é2 'i1n1é2 .inef1fa 'inef1fa .in2effab 'in2effab .iné1lu 'iné1lu .in2é3luc1ta 'in2é3luc1ta .iné1na 'iné1na .in2é3nar1ra 'in2é3nar1ra .in2ept 'in2ept .in2er 'in2er .in2exo1ra 'in2exo1ra in1fo infor1ma 1informat .i1n1i2 'i1n1i2 .ini1mi 'ini1mi .in2i3mi1ti 'in2i3mi1ti .in2i3q 'in2i3q .in2i3t 'in2i3t in1no inno1ce inno3cent. .i1n1o2 'i1n1o2 .ino1cu 'ino1cu .in2o3cul 'in2o3cul .in2ond 'in2ond in1so inso1le inso3lent. .ins1ta 'ins1ta .in1s2tab 'in1s2tab ins1ti instil3l in1te .in1te 'in1te intel1li intelli1ge intelli3gent. .inte4r3 'inte4r3 .inte1ra2 'inte1ra2 .inte1re2 'inte1re2 .inte1ré2 'inte1ré2 .inte1ri2 'inte1ri2 .inte1ro2 'inte1ro2 .inters2 'inters2 .inte1ru2 'inte1ru2 in1ti inti1me inti2ment. .i1n1u2 'i1n1u2 .in2uit 'in2uit .in2u3l 'in2u3l io1a2ct i1oxy is1ce is3cent. i1s2c2h i2s3c1hé isc1hi i2s3chia i2s3chio is1ta i1s2tat i1va iva1le iva3lent. 1j ja1ce ja3cent. 4je. 2jent. 4jes. 2jk 1ka 1kâ 1ke 1ké 1kè 1kê 4ke. 2kent. 4kes. 1k2h .1k2h4 4kh. 1ki 1kî 1ko 1kô 1k2r 1ku 1kû 1ky 1la .1la 1là 1lâ .la1te .la3tent. la1w2r la2w3re 1le 1lé 1lè 1lê 4le. 2lent. 4les. 1li 1lî lil3l l1li l3lion l1lu llu1me llu2ment. l1me l2ment. 1lo 1lô l1s2t 1lu 1lû 1ly 1ma .1ma 1mâ .ma2c3k .ma1c2r .mac1ro .macro1s2c .ma1g2n .mag1ni .magni1ci .ma2g3nici1de .magni1fi .magnifi1ca .ma2g3nificat .mag1nu .ma2g3num .ma1la .mala1d2r .malad1re .ma2l1a2dres .ma2l1a2d1ro .ma2l1ai1sé .ma2l1ap .ma2l1a2v .ma1le .ma2l1en .ma1li .ma2l1int .ma1lo .ma2l1oc .ma2l1o2d .ma2r1x 1me 1mé .1mé 1mè 1mê 4me. mé1co mécon1te mécon3tent. .mé1go .mé2g1oh 4mes. .mé2sa .mé3san .mé1se .mé2s1es .mé2s1i .mé1su .mé2s1u2s .mé1ta .mé1ta1s2ta 1mi .1mi 1mî mil3l .mil3l mil1le mil4let .mil1li .milli1am mi1me mi2ment. mit1te mit3tent. m1né m1nè 1m2né1mo 1m2nès 1m2né1si 1mo .1mo 1mô 1mœ mo1no .mo1no .mono1a2 .mono1e2 .mono1é2 .mono1i2 .mono1ï2dé .mono1o2 .mono1s2 .mono1u2 mono1va monova1le monova3lent. mon1t2r mont1ré mon2t3réal moye1nâ moye2n1â2g m1s2 1mu 1mû mu1ni muni1fi munifi1ce munifi3cent. 1my 1na 1nâ 1ne 1né 1nè 1nê 4ne. 2nent. 4nes. 1ni 1nî 1no .1no 1nô 1nœ .no1no .no2n1obs n1sa n3s2at. n3s2ats. 1nu 1nû nu1t2r nut1ri nutri1me nutri3ment. n1x 1ny .o4 'o4 .ô4 'ô4 o1b2l ob1lo o2b3long oc1te 1octet o1d2l oè1d2r o1è2d1re o1g2n og1no ogno1mo o2g3nomo1ni o2g3no1si o1io1ni om1bu ombud2s3 ô1me ô2ment. om1me om2ment. om1ni omni1po omnipo1te omnipo3tent. omni1s2 .on1gu 'on1gu .on3guent. 'on3guent. o1pu opu1le opu3lent. or1me or2ment. os1ta o1s2tas o1s2tat os1té o1s2té1ro os1ti o1s2tim os1to o1s2tom os1t2r ost1ra o1s2trad o1s2tra1tu ost1ri ostric1ti o1s2triction .oua1ou 'oua1ou .o1vi 'o1vi .ovi1s2c 'ovi1s2c oxy1a2 1pa .1pa 1pâ pa1lé paléo1é2 .pa1na .pa2n1a2f .pa2n1a2mé .pa2n1a2ra .pa1ni .pa2n1is .pa1no .pa2n1o2p2h .pa2n1opt pa1pi papil2l papil3la papil3le papil3li papil1lo papil3lom .pa1ra .para1c2h .pa2r1a2c1he .pa2r1a2c1hè .para1s2 .pa1re .pa3rent. .pa1r2h .pa2r3hé .pa1te .pa3tent. 1pe .1pe 1pé .1pé 1pè 1pê 4pe. 2pent. .pen2ta pé1nu pé2nul .pe4r .pe1r1a2 pé1ré .pe1r1e2 .pe1r1é2 pé1r2é2q pe1r3h .pé1ri .pe1r1i2 .péri1os .péri1s2 .péri2s3s .péri2s3ta .péri1u2 per1ma perma1ne perma3nent. .pe1r1o2 per1ti perti1ne perti3nent. .pe1r1u2 4pes. 1p2h .1p2h4 4ph. .p1ha .pha1la .phalan3s2t p1he 4p4he. 2phent. 4p4hes. ph2l ph1le 4ph4le. 4ph4les. 2phn p1ho pho1to photo1s2 ph2r ph1re 4ph4re. 4ph4res. 2phs 2pht ph1ta 3ph2ta1lé ph1ti 3ph2tis 1pi 1pî pi1ri piril3l 1p2l .1p2l p1le 4p4le. 2p2lent. 4p4les. p1lu .p1lu plu1me plu2ment. .plu1ri .pluri1a p1ne 1p2né 1p2neu 1po .1po 1pô poas1t2r po1ast1re po1ly poly1a2 poly1e2 poly1é2 poly1è2 poly1i2 poly1o2 poly1s2 poly1u2 poly1va polyva1le polyva3lent. .pon1te .pon2tet .pos2t3h .pos1ti .pos2t1in .pos2t1o2 .pos2t3r .post1s2 1p2r .1p2r p1re p1ré .p1ré 4p4re. .pré1a2 .pré2a3la .pré2au .pré1e2 .pré1é2 préé1mi préémi1ne préémi3nent. .pré1i2 2p2rent. .pré1o2 .pré1s2 4p4res. pré1se pré3sent. .pré1u2 p1ri pri1va privat1do privatdo1ce privatdo3cent. privatdo1ze privatdo3zent. p1ro .p1ro .pro1é2 proé1mi proémi1ne proémi3nent. .pro1g2n .prog1na .pro2g3na1t2h .pro1s2cé pros1ta pro2s3tat .prou3d2h p1ru pru1de pru3dent. p1sy .p1sy 1p2sy1c2h .1p2sy1c2h .psyc1ho .psycho1a2n p1té p1tè 1p2tér 1p2tèr 1pu .1pu 1pû .pud1d2l pu1g2n pug1na pugna1b2l pu2g3nab1le pu2g3nac pu1pi pupil3l pu1si pusil3l 1py 1q qua1me qua2ment. 4que. 2quent. 4ques. 1ra 1râ ra1di radio1a2 rai1me rai3ment. ra1me ra2ment. r1ci rcil4l 1re .1re 1ré .1ré 1rè 1rê 4re. .ré1a2 .ré2a3le .réa1li .ré2a3lis .ré2a3lit .ré2aux .ré1e2 .ré1é2 .ré2el .ré2er .ré2èr ré1ge ré3gent. .ré1i2 .ré2i3fi re1le re3lent. re1li reli1me reli2ment. ré1ma réma1ne réma3nent. 2rent. .ré1o2 re1pe re3pent. .re1s2 4res. .res1ca .re2s3cap .res1ci .re2s3ci1si .re2s3ci1so .res1co .re2s3cou .res1c2r .re2s3c1ri .res1pe .re2s3pect .res1pi .re2s3pir .res1p2l .resp1le .re2s3plend .res1po .re2s3pons .res1q .re2s3quil .re2s3s .res1se .res3sent. .re2s3t .res1ta .re3s4tab .re3s4tag .re3s4tand .re3s4tat .res1té .re3s4tén .re3s4tér .res1ti .re3s4tim .re3s4tip .res1to .re3s4toc .re3s4top .re3s4t2r .rest1re .re4s5trein .rest1ri .re4s5trict .re4s5trin .re3s4tu .re3s4ty ré1su résur1ge résur3gent. ré1ti réti1ce réti3cent. .ré1t2r .rét1ro .rétro1a2 .réu2 .ré2uss 1r2h r1he 4r4he. 4r4hes. 2r3heur r1hy 2r3hy1d2r 1ri 1rî ri1me ri2ment. rin1ge rin3gent. r1mi rmil4l 1ro 1rô 1ru 1rû ru1le ru3lent. 1ry ry1t2h ry2thm ryth1me ryth2ment. 1sa .1sa 1sâ .sar1me .sar3ment. s1ca 1s2ca1p2h 1s2c2h .1s2c2h4 4s4ch. sc1he 4s4c4he. 4s4c4hes. 2s2chs s1c2l sc1lé 1s2clér s1co 1s2cop 1se .1se 1sé 1sè 1sê 4se. se1mi semil4l 2sent. ser1ge ser3gent. .ser1me .ser3ment. ser1pe ser3pent. 4ses. ses1q sesqui1a2 .seu2le 1s2h .1s2h4 4sh. s1he 4s4he. 2shent. 4s4hes. 2shm s1ho 2s3hom 2shr 2shs 1si 1sî s1la sla1lo slalo1me slalo2ment. 1s2lav s1lo 1s2lov 1so .1so 1sô 1sœ .sou1ve .sou3vent. s1pa spa1ti 1s2patia s1pe 1s2perm s1p2h sp1hé sp1hè 1s2phér 1s2phèr s1pi 1s2piel spi1ro 1s2piros s1po 1s2por spo1ru sporu1le sporu4lent. s1ta .s1ta .sta2g3n stan1da 1s2tandard s1te s1té 1s2tein sté1ré stéréo1s2 s1ti .s1ti 1s2tigm .stil3l s1to 1s2to1c2k sto1mo 1s2tomos s1t2r st1ro 1s2tro1p2h st1ru 1s2truc1tu s1ty 1s2ty1le 1su .1su 1sû .su2b1a2 .su3b2alt .su2b1é2 .su3b2é3r .su1bi .su2b1in su1b2l .su1b2l sub1li .sub1li subli1me subli2ment. .subli1mi .su2b3limin .su2b3lin .su2b3lu sub1s2 .su1bu .su2b1ur suc1cu succu1le succu3lent. su1me su2ment. su1pe supe4r1 supe1ro2 supers2 su1ra .su2r1a2 su3r2ah .su3r2a3t su1ré .su2r1e2 .su2r1é2 .su3r2eau .su3r2ell suré1mi surémi1ne surémi3nent. .su3r2et .su2r3h .su1ri .su2r1i2m .su2r1inf .su2r1int .su1ro .su2r1of .su2r1ox 1sy .1sy .syn1g2n .syng1na .syn2g3na1t2h 1ta .1ta 1tà 1tâ ta1c2h tac1hy tachy1a2 .ta1le .ta3lent. ta1me ta2ment. tan1ge tan3gent. t1c2h tc1hi tchin3t2 1te 1té 1tè 1tê 4te. té1lé télé1e2 télé1i2 télé1o2b télé1o2p télé1s2 tem1pé tempé1ra tempéra1me tempéra3ment. 2tent. ter1ge ter3gent. 4tes. tes1ta testa1me testa3ment. 1t2h .1t2h4 4th. t1he 4t4he. ther1mo thermo1s2 4t4hes. 2t3heur 2thl 2thm 2thn th2r th1re 4th4re. 4th4res. th1ri thril3l 2ths 1ti 1tî 1to 1tô to1me to2ment. tor1re tor3rent. 1t2r .1t2r t1ra tran2s1a2 tran3s2act tran3s2ats tran2s3h tran2s1o2 tran2s3p trans1pa transpa1re transpa3rent. tran2s1u2 t1re 4t4re. 2t2rent. 4t4res. t1ri .t1ri .tri1a2c .tri1a2n .tri1a2t tri1de tri3dent. .tri1o2n t1ru tru1cu trucu1le trucu3lent. t1t2l 1tu 1tû tu1me tu2ment. tung2s3 tur1bu turbu1le turbu3lent. 1ty .u4 'u4 .û4 'û4 u1ci ucil4l ue1vi uevil4l u1ni uni1a2x uni1o2v u2s3t2r u1vi uvil4l 1va 1vâ va1ci vacil4l va1ni vanil2l vanil1li vanil3lin vanil3lis 1ve 1vé 1vè 1vê 4ve. vé1lo vélo1s2ki ve1ni veni1me veni2ment. 2vent. ven1t2r vent1ri ventri1po ventripo1te ventripo3tent. 4ves. 1vi 1vî vi1di vidi1me vidi2ment. vil3l 1vo 1vô vol1ta vol2t1amp 1v2r v1re 4v4re. 2v2rent. 4v4res. 1vu 1vû 1vy 1wa wa2g3n 1we 4we. 2went. 4wes. 1wi 1wo 1w2r 1wu 2xent. xil3l .y4 'y4 y1al1gi y1as1t2h ys1to y1s2tom 1za 1ze 1zé 1zè 4ze. 2zent. 4zes. 1zi 1zo 1zu 1zy % % Additional patterns start here: % 2’2 ’a4 4a- .á4 'á4 ’á4 4á- .à4 'à4 ’à4 4à- ’â4 4â- .å4 'å4 ’å4 4å- .ä4 'ä4 ’ä4 4ä- .ã4 'ã4 ’ã4 4ã- -5a4 -5á4 -5à4 -5â4 -5å4 -5ä4 -5ã4 abî2ment- ’a1b2r -5a1b2r ’ab1ré -5ab1ré ’ab3réa -5ab3réa ab3sent- absti3nent- ac3cent- acquies4cent- .æ4 'æ4 ’æ4 4æ- -5æ4 ’ae3s4c2h -5ae3s4c2h ’a1g2n -5a1g2n ’ag1na -5ag1na ’a2g3nat -5a2g3nat ai2ment- amalga2ment- â2ment- ’a1mi -5a1mi ’ami1no -5ami1no ’amino1a2c -5amino1a2c ’a1na -5a1na ’ana3s4t2r -5ana3s4t2r ani2ment- ’an1ti -5an1ti ’anti1a2 -5anti1a2 ’anti1e2 ’anti1é2 -5anti1e2 -5anti1é2 ’anti2en1ne -5anti2en1ne antifer3ment- ’anti1s2 -5anti1s2 ’a1po -5a1po ’apo2s3ta -5apo2s3ta appa3rent- -5ar1de -ar3dent- .ar3dent- -5ar3dent. ’ar1ge -5ar1ge -ar3gent- .ar3gent- 'ar3gent- ’ar3gent- ’ar3gent. -5ar3gent. ar2ment- ’ar1pe -5ar1pe -ar3pent- .ar3pent- 'ar3pent- ’ar3pent- ’ar3pent. -5ar3pent. as2ment- ’as2ta -5as2ta au2ment- .b4 'b4 ’b4 4b- -5b4 -5bai1se -5baise1ma -5bai2se3main 4be- 2bent- 4bes- -5bi1a2c -5bi1a2t -5bi1au -5bio1a2 -5bi2s1a2 -5bi1u2 4b4le- 2b2lent- 4b4les- bou2ment- 4b4re- 2b2rent- 4b4res- bru2ment- .c4 'c4 ’c4 4c- .ç4 'ç4 ’ç4 4ç- -5c4 -5ç4 carê2ment- cci3dent- 4ce- 2cent- 4ces- 4ch- 4c4he- -5c1hè 2chent- 4c4hes- -5chè1v2r -5chèv1re -5chèvre1fe -5chèvrefeuil2l -5chè2vre3feuil1le chien3dent- 4ch4le- 4ch4les- 4ch4re- 4ch4res- chro2ment- -5ci1sa -5ci2s1alp 4ck- 4c4ke- 2c2kent- 4c4kes- cla2ment- 4c4le- 2c2lent- 4c4les- -5com1me -com3ment- .com3ment- -5com3ment. compé3tent- -5con4 confi3dent- conni3vent- -5cons4 conti3nent- contin3gent- -5con1t2r -5cont1re -5contre1ma -5contremaî1t2r -5cont1re3maît1re -5contre1s2c -5co1o2 -5coo1li -5co2o3lie corpu3lent- 4c4re- 2c2rent- 4c4res- -5cul4 cur3rent- 1d2’2 .d4 'd4 ’d4 4d- .ð4 'ð4 ’ð4 4ð- -5d4 -5ð4 -5da1c2r -5dac1ry -5dacryo1a2 da2ment- 4de- -5dé1a2 déca3dent- -5dé1io 2dent- -5dé1o2 4des- -5dé2s -5dé1sa -5dé3s2a3c2r -5dés2a3m -5dé3s2as1t2r -5désa1te -5dé3s2a3tell -5dé3s2c -5dé1se -5dé2s1é2 -5dé3s2é3g2r -5désen1si -5dé3s2ensib -5dé3s2ert -5dé3s2exu -5dé2s1i2 -5dé3s2i3d -5dé3s2i3g2n -5dé3s2i3li -5dési1ne -5dé3s2i3nen -5dé3s2in1vo -5dé3s2i3r -5dé3s2ist -5dé1so -5dé2s1œ -5dé3s2o3l -5déso1pi -5dé3s2o3pil -5dé3s2orm -5dé3s2orp -5dé3s2ou1f2r -5dé3s2p -5dé3s2t -5dé1su -5dé2s1u2n détri3ment- -5di1a2cé -5dia1ci -5di1a2cid -5di1ald -5di1a2mi diaphrag2ment- -5dia1to -5di1a2tom -5di1e2n dili3gent- -5di2s3h dissi3dent- 2d2lent- -5do1le -do3lent- .do3lent- -5do3lent. 4d4re- 2d2rent- 4d4res- -5dy2s3 -5dy2s1a2 -5dy2s1i2 -5dy2s1o2 -5dy2s1u2 ’e4 4e- ’é4 4é- ’è4 4è- ’ê4 4ê- .ë4 'ë4 ’ë4 4ë- -5e4 -5é4 -5è4 -5ê4 -5ë4 é3cent- éci2ment- écu2ment- é3dent- éli2ment- élo3quent- è2ment- -5é1mi -5émi1ne -émi3nent- .émi3nent- -5émi3nent. ’e1n1a2 -5e1n1a2 éni3tent- ’e1n1o2 -5e1n1o2 entre3gent- é3quent- équipo3tent- équiva4lent- é3rent- er2ment- es3cent- esti2ment- ’eu2r1a2 -5eu2r1a2 .f4 'f4 ’f4 4f- -5f4 fa2ment- 4fe- fécu3lent- 2fent- 4fes- fichu3ment- fir2ment- flam2ment- 4f4le- 2f2lent- 4f4les- 4f4re- 2f2rent- 4f4res- fu2ment- .g4 'g4 ’g4 4g- -5g4 4ge- -5gem1me -gem2ment- .gem2ment- -5gem2ment. 2gent- 4ges- 4g4le- 2g2lent- 4g4les- 4g4ne- 2g2nent- 4g4nes- gram2ment- grandilo3quent- 4g4re- 2g2rent- 4g4res- 4gue- 2guent- 4gues- .h4 'h4 ’h4 4h- -5h4 4he- 4hes- hu2ment- ’i4 4i- .í4 'í4 ’í4 4í- .ì4 'ì4 ’ì4 4ì- ’î4 4î- .ï4 'ï4 ’ï4 4ï- -5i4 -5í4 -5ì4 -5î4 -5ï4 ’i1g2n -5i1g2n ’i2g3né -5i2g3né ’i2g3ni -5i2g3ni imma3nent- immi3nent- immis4cent- impo3tent- impu3dent- ’i1n1a2 -5i1n1a2 ’ina1ni -5ina1ni ’in2a3nit -5in2a3nit ’inau1gu -5inau1gu ’in2augur -5in2augur inci3dent- indi3gent- indo3lent- indul3gent- ’i1n1e2 ’i1n1é2 -5i1n1e2 -5i1n1é2 ’inef1fa -5inef1fa ’in2effab -5in2effab ’iné1lu -5iné1lu ’in2é3luc1ta -5in2é3luc1ta ’iné1na -5iné1na ’in2é3nar1ra -5in2é3nar1ra ’in2ept -5in2ept ’in2er -5in2er ’in2exo1ra -5in2exo1ra ’i1n1i2 -5i1n1i2 ’ini1mi -5ini1mi ’in2i3mi1ti -5in2i3mi1ti ’in2i3q -5in2i3q ’in2i3t -5in2i3t inno3cent- ’i1n1o2 -5i1n1o2 ’ino1cu -5ino1cu ’in2o3cul -5in2o3cul ’in2ond -5in2ond inso3lent- ’ins1ta -5ins1ta ’in1s2tab -5in1s2tab ’in1te -5in1te intelli3gent- ’inte4r3 -5inte4r3 ’inte1ra2 -5inte1ra2 ’inte1re2 ’inte1ré2 -5inte1re2 -5inte1ré2 ’inte1ri2 -5inte1ri2 ’inte1ro2 -5inte1ro2 ’inters2 -5inters2 ’inte1ru2 -5inte1ru2 inti2ment- ’i1n1u2 -5i1n1u2 ’in2uit -5in2uit ’in2u3l -5in2u3l is3cent- iva3lent- .j4 'j4 ’j4 4j- -5j4 ja3cent- 4je- 2jent- 4jes- .k4 'k4 ’k4 4k- -5k4 4ke- 2kent- 4kes- 4kh- .l4 'l4 ’l4 4l- -5l4 -5la1te -la3tent- .la3tent- -5la3tent. 4le- 2lent- 4les- llu2ment- l2ment- .m4 'm4 ’m4 4m- -5m4 -5ma2c3k -5ma1c2r -5mac1ro -5macro1s2c -5ma1g2n -5mag1ni -5magni1ci -5ma2g3nici1de -5magni1fi -5magnifi1ca -5ma2g3nificat -5mag1nu -5ma2g3num -5ma1la -5mala1d2r -5malad1re -5ma2l1a2dres -5ma2l1a2d1ro -5ma2l1ai1sé -5ma2l1ap -5ma2l1a2v -5ma1le -5ma2l1en -5ma1li -5ma2l1int -5ma1lo -5ma2l1oc -5ma2l1o2d -5ma2r1x 4me- mécon3tent- -5mé1go -5mé2g1oh 4mes- -5mé2sa -5mé3san -5mé1se -5mé2s1es -5mé2s1i -5mé1su -5mé2s1u2s -5mé1ta -5mé1ta1s2ta -5mil3l -5mil1li -5milli1am mi2ment- mit3tent- -5mo1no -5mono1a2 -5mono1e2 -5mono1é2 -5mono1i2 -5mono1ï2dé -5mono1o2 -5mono1s2 -5mono1u2 monova3lent- munifi3cent- .n4 'n4 ’n4 4n- .ñ4 'ñ4 ’ñ4 4ñ- -5n4 -5ñ4 4ne- 2nent- 4nes- -5no1no -5no2n1obs n3s2at- n3s2ats- nutri3ment- ’o4 4o- .ó4 'ó4 ’ó4 4ó- .ò4 'ò4 ’ò4 4ò- ’ô4 4ô- .õ4 'õ4 ’õ4 4õ- .ø4 'ø4 ’ø4 4ø- -5o4 -5ó4 -5ò4 -5ô4 -5õ4 -5ø4 .œ4 'œ4 ’œ4 4œ- -5œ4 ô2ment- om2ment- omnipo3tent- ’on1gu -5on1gu -on3guent- .on3guent- 'on3guent- ’on3guent- ’on3guent. -5on3guent. opu3lent- or2ment- ’oua1ou -5oua1ou ’o1vi -5o1vi ’ovi1s2c -5ovi1s2c .p4 'p4 ’p4 4p- -5p4 -5pa1na -5pa2n1a2f -5pa2n1a2mé -5pa2n1a2ra -5pa1ni -5pa2n1is -5pa1no -5pa2n1o2p2h -5pa2n1opt -5pa1ra -5para1c2h -5pa2r1a2c1he -5pa2r1a2c1hè -5para1s2 -5pa1re -pa3rent- .pa3rent- -5pa3rent. -5pa1r2h -5pa2r3hé -5pa1te -pa3tent- .pa3tent- -5pa3tent. 4pe- 2pent- -5pen2ta -5pe4r -5pe1r1a2 -5pe1r1e2 -5pe1r1é2 -5pé1ri -5pe1r1i2 -5péri1os -5péri1s2 -5péri2s3s -5péri2s3ta -5péri1u2 perma3nent- -5pe1r1o2 perti3nent- -5pe1r1u2 4pes- 4ph- -5p1ha -5pha1la -5phalan3s2t 4p4he- 2phent- 4p4hes- 4ph4le- 4ph4les- 4ph4re- 4ph4res- 4p4le- 2p2lent- 4p4les- -5p1lu plu2ment- -5plu1ri -5pluri1a polyva3lent- -5pon1te -5pon2tet -5pos2t3h -5pos1ti -5pos2t1in -5pos2t1o2 -5pos2t3r -5post1s2 4p4re- -5p1ré -5pré1a2 -5pré2a3la -5pré2au -5pré1e2 -5pré1é2 préémi3nent- -5pré1i2 2p2rent- -5pré1o2 4p4res- -5pré1s2 pré3sent- -5pré1u2 privatdo3cent- privatdo3zent- -5p1ro -5pro1é2 proémi3nent- -5pro1g2n -5prog1na -5pro2g3na1t2h -5pro1s2cé -5prou3d2h pru3dent- -5p1sy -5psyc1ho -5psycho1a2n -5pud1d2l .q4 'q4 ’q4 4q- -5q4 qua2ment- 4que- 2quent- 4ques- .r4 'r4 ’r4 4r- -5r4 rai3ment- ra2ment- 4re- -5ré1a2 -5ré2a3le -5réa1li -5ré2a3lis -5ré2a3lit -5ré2aux -5ré1e2 -5ré1é2 -5ré2el -5ré2er -5ré2èr ré3gent- -5ré1i2 -5ré2i3fi re3lent- reli2ment- réma3nent- 2rent- -5ré1o2 re3pent- 4res- -5re1s2 -5res1ca -5re2s3cap -5res1ci -5re2s3ci1si -5re2s3ci1so -5res1co -5re2s3cou -5res1c2r -5re2s3c1ri -5res1pe -5re2s3pect -5res1pi -5re2s3pir -5res1p2l -5resp1le -5re2s3plend -5res1po -5re2s3pons -5res1q -5re2s3quil -5re2s3s -5res1se -res3sent- .res3sent- -5res3sent. -5re2s3t -5res1ta -5re3s4tab -5re3s4tag -5re3s4tand -5re3s4tat -5res1té -5re3s4tén -5re3s4tér -5res1ti -5re3s4tim -5re3s4tip -5res1to -5re3s4toc -5re3s4top -5re3s4t2r -5rest1re -5re4s5trein -5rest1ri -5re4s5trict -5re4s5trin -5re3s4tu -5re3s4ty résur3gent- réti3cent- -5ré1t2r -5rét1ro -5rétro1a2 -5réu2 -5ré2uss 4r4he- 4r4hes- ri2ment- rin3gent- ru3lent- ryth2ment- .s4 's4 ’s4 4s- .š4 'š4 ’š4 4š- -5s4 -5š4 -5sar1me -sar3ment- .sar3ment- -5sar3ment. 4s4ch- 4s4c4he- 4s4c4hes- 4se- 2sent- ser3gent- -5ser1me -ser3ment- .ser3ment- -5ser3ment. ser3pent- 4ses- -5seu2le 4sh- 4s4he- 2shent- 4s4hes- slalo2ment- -5sou1ve -sou3vent- .sou3vent- -5sou3vent. sporu4lent- -5s1ta -5sta2g3n -5s1ti -5stil3l -5su2b1a2 -5su3b2alt -5su2b1é2 -5su3b2é3r -5su1bi -5su2b1in -5su1b2l -5sub1li subli2ment- -5subli1mi -5su2b3limin -5su2b3lin -5su2b3lu -5su1bu -5su2b1ur succu3lent- su2ment- -5su2r1a2 -5su3r2a3t -5su2r1e2 -5su2r1é2 -5su3r2eau -5su3r2ell surémi3nent- -5su3r2et -5su2r3h -5su1ri -5su2r1i2m -5su2r1inf -5su2r1int -5su1ro -5su2r1of -5su2r1ox -5syn1g2n -5syng1na -5syn2g3na1t2h .t4 't4 ’t4 4t- -5t4 -5ta1le -ta3lent- .ta3lent- -5ta3lent. ta2ment- tan3gent- 4te- tempéra3ment- 2tent- ter3gent- 4tes- testa3ment- 4th- .þ4 'þ4 ’þ4 4þ- -5þ4 4t4he- 4t4hes- 4th4re- 4th4res- to2ment- tor3rent- transpa3rent- 4t4re- 2t2rent- 4t4res- -5t1ri -5tri1a2c -5tri1a2n -5tri1a2t tri3dent- -5tri1o2n trucu3lent- tu2ment- turbu3lent- ’u4 4u- .ú4 'ú4 ’ú4 4ú- .ù4 'ù4 ’ù4 4ù- ’û4 4û- .ü4 'ü4 ’ü4 4ü- -5u4 -5ú4 -5ù4 -5û4 -5ü4 .v4 'v4 ’v4 4v- -5v4 4ve- veni2ment- 2vent- ventripo3tent- 4ves- vidi2ment- 4v4re- 2v2rent- 4v4res- .w4 'w4 ’w4 4w- -5w4 4we- 2went- 4wes- .x4 'x4 ’x4 4x- -5x4 2xent- ’y4 4y- .ý4 'ý4 ’ý4 4ý- .ÿ4 'ÿ4 ’ÿ4 4ÿ- -5y4 -5ý4 -5ÿ4 .z4 'z4 ’z4 4z- .ž4 'ž4 ’ž4 4ž- -5z4 -5ž4 4ze- 2zent- 4zes- |
Added gc_lang/fr/dictionnaire/césures/hyph_fr.iso8859-1.dic version [ffb0b705c5].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 | ISO8859-1 2'2 .a4 'a4 .4 '4 ab2h a1b ab1me ab2ment. .a1b2r 'a1b2r .ab1r 'ab1r .ab3ra 'ab3ra ab1se ab3sent. abs1ti absti1ne absti3nent. ac1ce ac3cent. ac1q acquies1ce acquies4cent. ad2h a1d2r a12d1re .ae3s4c2h 'ae3s4c2h a1g2n .a1g2n 'a1g2n .ag1na 'ag1na .a2g3nat 'a2g3nat ag1no a2g3nos ai1me ai2ment. a1la a2l1al1gi al1co 1alcool a1ma amal1ga amalga1me amalga2ment. 1me 2ment. .a1mi 'a1mi .ami1no 'ami1no .amino1a2c 'amino1a2c .a1na 'a1na .ana3s4t2r 'ana3s4t2r a1ne anes1t2h anest1h 1a2nesth1si a1ni ani1me ani2ment. an1ti .an1ti 'an1ti .anti1a2 'anti1a2 .anti1e2 'anti1e2 .anti12 'anti12 .anti2en1ne 'anti2en1ne anti1fe antifer1me antifer3ment. .anti1s2 'anti1s2 a1po .a1po 'a1po .apo2s3ta 'apo2s3ta apo2s3t2r ap1pa appa1re appa3rent. ar1c2h arc1hi archi1pi archi12pis .ar1de .ar3dent. .ar1ge 'ar1ge .ar3gent. 'ar3gent. ar1me ar2ment. ar1mi armil5l .ar1pe 'ar1pe .ar3pent. 'ar3pent. as1me as2ment. .as2ta 'as2ta as1t2r a2s3t1ro au1me au2ment. a1vi avil4l 1ba .1ba 1b .bai1se .baise1ma .bai2se3main 1be 1b 1b 1b 4be. 2bent. 4bes. 1bi .1bi 1b .bi1a2c .bi1a2t .bi1au .bio1a2 .bi2s1a2 .bi1u2 1b2l b1le 4b4le. 2b2lent. 4b4les. 1bo 1b bou1me bou2ment. bou1ti boutil3l 1b2r b1re 4b4re. 2b2rent. 4b4res. b1ru bru1me bru2ment. 1bu 1b 1by 1 1ca 1c ca3ou3t2 ca1pi capil3l ca1r car1me car2ment. c1ci cci1de cci3dent. 1ce 1c 1c 1c 4ce. 2cent. 4ces. 1c2h .1c2h4 4ch. 2chb c1he .c1h 4c4he. 2chent. 4c4hes. che1vi chevil4l .ch1v2r .chv1re .chvre1fe .chvrefeuil2l .ch2vre3feuil1le 2chg c1hi chien1de chien3dent. ch2l ch1le 4ch4le. 4ch4les. ch1lo chlo1ra chlo2r3a2c chlo1r chlo2r32t 2chm 2chn 2chp ch2r ch1re 4ch4re. 4ch4res. ch1ro chro1me chro2ment. 2chs 2cht 2chw 1ci .1ci 1c cil3l .ci1sa .ci2s1alp 1c2k 4ck. 2ckb c1ke 4c4ke. 2c2kent. 4c4kes. 2ckf 2ckg 2c1k3h 2ckp 2cks 2ckt 1c2l c1la cla1me cla2ment. c1le 4c4le. 2c2lent. 4c4les. 1co .1co 1c co1acc co1ac1q co1a2d co1ap co1ar coas1so co1assoc coas1su co1assur co1au co1ax 1c co12 co1ef co1en co1ex co1g2n cog1ni co2g3ni1ti .com1me .com3ment. com1p comp1te comp3tent. .con4 con1fi confi1de confi3dent. con1ni conni1ve conni3vent. .cons4 con1ti conti1ne conti3nent. contin1ge contin3gent. .con1t2r .cont1re .contre1ma .contrema1t2r .cont1re3mat1re .contre1s2c co1nu co2nurb .co1o2 .coo1li .co2o3lie cor1pu corpu1le corpu3lent. 1c2r c1re 4c4re. 2c2rent. 4c4res. 1cu .1cu 1c .cul4 cur1re cur3rent. 1cy cy1ri cyril3l 1d2'2 1da .1da 1d .da1c2r .dac1ry .dacryo1a2 da1me da2ment. d1d2h 1de 1d .1d 1d 1d 4de. .d1a2 d1ca dca1de dca3dent. .d1io 2dent. .d1o2 .d2s 4des. .d1sa .d3s2a3c2r .ds2a3m .d3s2as1t2r .dsa1te .d3s2a3tell .d3s2c .d1se .d2s12 .d3s23g2r .dsen1si .d3s2ensib .d3s2ert .d3s2exu .d2s1i2 .d3s2i3d .d3s2i3g2n .d3s2i3li .dsi1ne .d3s2i3nen .d3s2in1vo .d3s2i3r .d3s2ist .d1so .1d3s2o3d .d2s1 .d3s2o3l .dso1pi .d3s2o3pil .d3s2orm .d3s2orp .d3s2ou1f2r .d3s2p .d3s2t .d1su .d2s1u2n d1t2r dt1ri dtri1me dtri3ment. d1ha 3d2hal d1ho 3d2houd 1di .1di 1d .di1a2c .dia1ci .di1a2cid .di1ald .di1a2mi dia1p2h diaph2r diaph1ra diaphrag1me diaphrag2ment. .dia1to .di1a2tom .di1e2n di1li dili1ge dili3gent. dis1co di2s3cop .di2s3h dis1si dissi1de dissi3dent. dis1ti distil3l d1le 2d2lent. 1do .1do 1d .do1le .do3lent. 1d2r d1re 4d4re. 2d2rent. 4d4res. d1s2 1du 1d 1dy .1dy .dy2s3 .dy2s1a2 .dy2s1i2 .dy2s1o2 .dy2s1u2 .e4 'e4 .4 '4 .4 '4 .4 '4 1ce 3cent. 1ci ci1me ci2ment. 1cu cu1me cu2ment. 1de 3dent. d2hi 1d2r d1ri 12drie dri1q 12drique 1le 1l 12lec1t2r l1me 12lment 1li li1me li2ment. 1lo lo1q lo3quent. 1me 2ment. 1mi .1mi mil4l .mi1ne .mi3nent. .e1n1a2 'e1n1a2 1ne 12nerg e1ni 1ni ni1te ni3tent. e2n1i2v2r .e1n1o2 'e1n1o2 en1t2r ent1re entre1ge entre3gent. 1pi pis1co pi2s3cop pi3s4co1pe 1q 3quent. qui1po quipo1te quipo3tent. qui1va quiva1le quiva4lent. 1re 3rent. er1me er2ment. es1ce es3cent. e2s3c2h es1co e2s3cop es1ti esti1me esti2ment. .eu2r1a2 'eu2r1a2 eus1ta eu1s2tat ex1t2r ext1ra1 extra2c extra2i 1fa 1f fa1me fa2ment. 1fe 1f 1f 1f 4fe. f1cu fcu1le fcu3lent. 2fent. 4fes. 1fi 1f fi1c2h fic1hu fichu1me fichu3ment. fir1me fir2ment. 1f2l f1la flam1me flam2ment. f1le 4f4le. 2f2lent. 4f4les. 1fo 1f 1f2r f1re 4f4re. 2f2rent. 4f4res. f1ri fri1ti fritil3l f1s2 1fu 1f fu1me fu2ment. 1fy 1ga 1g 1ge .1ge 1g 1g 1g 4ge. .gem1me .gem2ment. 2gent. 4ges. 1g2ha 1g2he 1g2hi 1g2ho 1g2hy 1gi 1g gil3l 1g2l g1le 4g4le. 2g2lent. 4g4les. 1g2n g1ne 4g4ne. 2g2nent. 4g4nes. 1go 1g 1g2r g1ra gram1me gram2ment. gran1di grandi1lo grandilo1q grandilo3quent. g1re 4g4re. 2g2rent. 4g4res. g1s2 1gu 1g 4gue. 2guent. 4gues. 1gy 1ha 1h 1he 1h 1h 1h 4he. h1mi hmi1 h1mo hmo1p2t 4hes. 1hi 1h hil3l 1ho 1h 1hu 1h hu1me hu2ment. 1hy hy1pe hype4r1 hype1ra2 hype1re2 hype1r2 hype1ri2 hype1ro2 hypers2 hype1ru2 hy1po hypo1a2 hypo1e2 hypo12 hypo1i2 hypo1o2 hypo1s2 hypo1u2 .i4 'i4 .4 '4 i1al1gi iar1t2h i1arth2r i1b2r ib1ri ibril3l i1d2r i12d1re .i1g2n 'i1g2n .i2g3n 'i2g3n .i2g3ni 'i2g3ni il2l im1ma imma1ne imma3nent. im1mi immi1ne immi3nent. immis1ce immis4cent. im1po impo1te impo3tent. im1pu impu1de impu3dent. .i1n1a2 'i1n1a2 .ina1ni 'ina1ni .in2a3nit 'in2a3nit .inau1gu 'inau1gu .in2augur 'in2augur in1ci inci1de inci3dent. in1di indi1ge indi3gent. in1do indo1le indo3lent. in1du indul1ge indul3gent. .i1n1e2 'i1n1e2 .i1n12 'i1n12 .inef1fa 'inef1fa .in2effab 'in2effab .in1lu 'in1lu .in23luc1ta 'in23luc1ta .in1na 'in1na .in23nar1ra 'in23nar1ra .in2ept 'in2ept .in2er 'in2er .in2exo1ra 'in2exo1ra in1fo infor1ma 1informat .i1n1i2 'i1n1i2 .ini1mi 'ini1mi .in2i3mi1ti 'in2i3mi1ti .in2i3q 'in2i3q .in2i3t 'in2i3t in1no inno1ce inno3cent. .i1n1o2 'i1n1o2 .ino1cu 'ino1cu .in2o3cul 'in2o3cul .in2ond 'in2ond in1so inso1le inso3lent. .ins1ta 'ins1ta .in1s2tab 'in1s2tab ins1ti instil3l in1te .in1te 'in1te intel1li intelli1ge intelli3gent. .inte4r3 'inte4r3 .inte1ra2 'inte1ra2 .inte1re2 'inte1re2 .inte1r2 'inte1r2 .inte1ri2 'inte1ri2 .inte1ro2 'inte1ro2 .inters2 'inters2 .inte1ru2 'inte1ru2 in1ti inti1me inti2ment. .i1n1u2 'i1n1u2 .in2uit 'in2uit .in2u3l 'in2u3l io1a2ct i1oxy is1ce is3cent. i1s2c2h i2s3c1h isc1hi i2s3chia i2s3chio is1ta i1s2tat i1va iva1le iva3lent. 1j ja1ce ja3cent. 4je. 2jent. 4jes. 2jk 1ka 1k 1ke 1k 1k 1k 4ke. 2kent. 4kes. 1k2h .1k2h4 4kh. 1ki 1k 1ko 1k 1k2r 1ku 1k 1ky 1la .1la 1l 1l .la1te .la3tent. la1w2r la2w3re 1le 1l 1l 1l 4le. 2lent. 4les. 1li 1l lil3l l1li l3lion l1lu llu1me llu2ment. l1me l2ment. 1lo 1l l1s2t 1lu 1l 1ly 1ma .1ma 1m .ma2c3k .ma1c2r .mac1ro .macro1s2c .ma1g2n .mag1ni .magni1ci .ma2g3nici1de .magni1fi .magnifi1ca .ma2g3nificat .mag1nu .ma2g3num .ma1la .mala1d2r .malad1re .ma2l1a2dres .ma2l1a2d1ro .ma2l1ai1s .ma2l1ap .ma2l1a2v .ma1le .ma2l1en .ma1li .ma2l1int .ma1lo .ma2l1oc .ma2l1o2d .ma2r1x 1me 1m .1m 1m 1m 4me. m1co mcon1te mcon3tent. .m1go .m2g1oh 4mes. .m2sa .m3san .m1se .m2s1es .m2s1i .m1su .m2s1u2s .m1ta .m1ta1s2ta 1mi .1mi 1m mil3l .mil3l mil1le mil4let .mil1li .milli1am mi1me mi2ment. mit1te mit3tent. m1n m1n 1m2n1mo 1m2ns 1m2n1si 1mo .1mo 1m 1m mo1no .mo1no .mono1a2 .mono1e2 .mono12 .mono1i2 .mono12d .mono1o2 .mono1s2 .mono1u2 mono1va monova1le monova3lent. mon1t2r mont1r mon2t3ral moye1n moye2n12g m1s2 1mu 1m mu1ni muni1fi munifi1ce munifi3cent. 1my 1na 1n 1ne 1n 1n 1n 4ne. 2nent. 4nes. 1ni 1n 1no .1no 1n 1n .no1no .no2n1obs n1sa n3s2at. n3s2ats. 1nu 1n nu1t2r nut1ri nutri1me nutri3ment. n1x 1ny .o4 'o4 .4 '4 o1b2l ob1lo o2b3long oc1te 1octet o1d2l o1d2r o12d1re o1g2n og1no ogno1mo o2g3nomo1ni o2g3no1si o1io1ni om1bu ombud2s3 1me 2ment. om1me om2ment. om1ni omni1po omnipo1te omnipo3tent. omni1s2 .on1gu 'on1gu .on3guent. 'on3guent. o1pu opu1le opu3lent. or1me or2ment. os1ta o1s2tas o1s2tat os1t o1s2t1ro os1ti o1s2tim os1to o1s2tom os1t2r ost1ra o1s2trad o1s2tra1tu ost1ri ostric1ti o1s2triction .oua1ou 'oua1ou .o1vi 'o1vi .ovi1s2c 'ovi1s2c oxy1a2 1pa .1pa 1p pa1l palo12 .pa1na .pa2n1a2f .pa2n1a2m .pa2n1a2ra .pa1ni .pa2n1is .pa1no .pa2n1o2p2h .pa2n1opt pa1pi papil2l papil3la papil3le papil3li papil1lo papil3lom .pa1ra .para1c2h .pa2r1a2c1he .pa2r1a2c1h .para1s2 .pa1re .pa3rent. .pa1r2h .pa2r3h .pa1te .pa3tent. 1pe .1pe 1p .1p 1p 1p 4pe. 2pent. .pen2ta p1nu p2nul .pe4r .pe1r1a2 p1r .pe1r1e2 .pe1r12 p1r22q pe1r3h .p1ri .pe1r1i2 .pri1os .pri1s2 .pri2s3s .pri2s3ta .pri1u2 per1ma perma1ne perma3nent. .pe1r1o2 per1ti perti1ne perti3nent. .pe1r1u2 4pes. 1p2h .1p2h4 4ph. .p1ha .pha1la .phalan3s2t p1he 4p4he. 2phent. 4p4hes. ph2l ph1le 4ph4le. 4ph4les. 2phn p1ho pho1to photo1s2 ph2r ph1re 4ph4re. 4ph4res. 2phs 2pht ph1ta 3ph2ta1l ph1ti 3ph2tis 1pi 1p pi1ri piril3l 1p2l .1p2l p1le 4p4le. 2p2lent. 4p4les. p1lu .p1lu plu1me plu2ment. .plu1ri .pluri1a p1ne 1p2n 1p2neu 1po .1po 1p poas1t2r po1ast1re po1ly poly1a2 poly1e2 poly12 poly12 poly1i2 poly1o2 poly1s2 poly1u2 poly1va polyva1le polyva3lent. .pon1te .pon2tet .pos2t3h .pos1ti .pos2t1in .pos2t1o2 .pos2t3r .post1s2 1p2r .1p2r p1re p1r .p1r 4p4re. .pr1a2 .pr2a3la .pr2au .pr1e2 .pr12 pr1mi prmi1ne prmi3nent. .pr1i2 2p2rent. .pr1o2 .pr1s2 4p4res. pr1se pr3sent. .pr1u2 p1ri pri1va privat1do privatdo1ce privatdo3cent. privatdo1ze privatdo3zent. p1ro .p1ro .pro12 pro1mi promi1ne promi3nent. .pro1g2n .prog1na .pro2g3na1t2h .pro1s2c pros1ta pro2s3tat .prou3d2h p1ru pru1de pru3dent. p1sy .p1sy 1p2sy1c2h .1p2sy1c2h .psyc1ho .psycho1a2n p1t p1t 1p2tr 1p2tr 1pu .1pu 1p .pud1d2l pu1g2n pug1na pugna1b2l pu2g3nab1le pu2g3nac pu1pi pupil3l pu1si pusil3l 1py 1q qua1me qua2ment. 4que. 2quent. 4ques. 1ra 1r ra1di radio1a2 rai1me rai3ment. ra1me ra2ment. r1ci rcil4l 1re .1re 1r .1r 1r 1r 4re. .r1a2 .r2a3le .ra1li .r2a3lis .r2a3lit .r2aux .r1e2 .r12 .r2el .r2er .r2r r1ge r3gent. .r1i2 .r2i3fi re1le re3lent. re1li reli1me reli2ment. r1ma rma1ne rma3nent. 2rent. .r1o2 re1pe re3pent. .re1s2 4res. .res1ca .re2s3cap .res1ci .re2s3ci1si .re2s3ci1so .res1co .re2s3cou .res1c2r .re2s3c1ri .res1pe .re2s3pect .res1pi .re2s3pir .res1p2l .resp1le .re2s3plend .res1po .re2s3pons .res1q .re2s3quil .re2s3s .res1se .res3sent. .re2s3t .res1ta .re3s4tab .re3s4tag .re3s4tand .re3s4tat .res1t .re3s4tn .re3s4tr .res1ti .re3s4tim .re3s4tip .res1to .re3s4toc .re3s4top .re3s4t2r .rest1re .re4s5trein .rest1ri .re4s5trict .re4s5trin .re3s4tu .re3s4ty r1su rsur1ge rsur3gent. r1ti rti1ce rti3cent. .r1t2r .rt1ro .rtro1a2 .ru2 .r2uss 1r2h r1he 4r4he. 4r4hes. 2r3heur r1hy 2r3hy1d2r 1ri 1r ri1me ri2ment. rin1ge rin3gent. r1mi rmil4l 1ro 1r 1ru 1r ru1le ru3lent. 1ry ry1t2h ry2thm ryth1me ryth2ment. 1sa .1sa 1s .sar1me .sar3ment. s1ca 1s2ca1p2h 1s2c2h .1s2c2h4 4s4ch. sc1he 4s4c4he. 4s4c4hes. 2s2chs s1c2l sc1l 1s2clr s1co 1s2cop 1se .1se 1s 1s 1s 4se. se1mi semil4l 2sent. ser1ge ser3gent. .ser1me .ser3ment. ser1pe ser3pent. 4ses. ses1q sesqui1a2 .seu2le 1s2h .1s2h4 4sh. s1he 4s4he. 2shent. 4s4hes. 2shm s1ho 2s3hom 2shr 2shs 1si 1s s1la sla1lo slalo1me slalo2ment. 1s2lav s1lo 1s2lov 1so .1so 1s 1s .sou1ve .sou3vent. s1pa spa1ti 1s2patia s1pe 1s2perm s1p2h sp1h sp1h 1s2phr 1s2phr s1pi 1s2piel spi1ro 1s2piros s1po 1s2por spo1ru sporu1le sporu4lent. s1ta .s1ta .sta2g3n stan1da 1s2tandard s1te s1t 1s2tein st1r stro1s2 s1ti .s1ti 1s2tigm .stil3l s1to 1s2to1c2k sto1mo 1s2tomos s1t2r st1ro 1s2tro1p2h st1ru 1s2truc1tu s1ty 1s2ty1le 1su .1su 1s .su2b1a2 .su3b2alt .su2b12 .su3b23r .su1bi .su2b1in su1b2l .su1b2l sub1li .sub1li subli1me subli2ment. .subli1mi .su2b3limin .su2b3lin .su2b3lu sub1s2 .su1bu .su2b1ur suc1cu succu1le succu3lent. su1me su2ment. su1pe supe4r1 supe1ro2 supers2 su1ra .su2r1a2 su3r2ah .su3r2a3t su1r .su2r1e2 .su2r12 .su3r2eau .su3r2ell sur1mi surmi1ne surmi3nent. .su3r2et .su2r3h .su1ri .su2r1i2m .su2r1inf .su2r1int .su1ro .su2r1of .su2r1ox 1sy .1sy .syn1g2n .syng1na .syn2g3na1t2h 1ta .1ta 1t 1t ta1c2h tac1hy tachy1a2 .ta1le .ta3lent. ta1me ta2ment. tan1ge tan3gent. t1c2h tc1hi tchin3t2 1te 1t 1t 1t 4te. t1l tl1e2 tl1i2 tl1o2b tl1o2p tl1s2 tem1p temp1ra tempra1me tempra3ment. 2tent. ter1ge ter3gent. 4tes. tes1ta testa1me testa3ment. 1t2h .1t2h4 4th. t1he 4t4he. ther1mo thermo1s2 4t4hes. 2t3heur 2thl 2thm 2thn th2r th1re 4th4re. 4th4res. th1ri thril3l 2ths 1ti 1t 1to 1t to1me to2ment. tor1re tor3rent. 1t2r .1t2r t1ra tran2s1a2 tran3s2act tran3s2ats tran2s3h tran2s1o2 tran2s3p trans1pa transpa1re transpa3rent. tran2s1u2 t1re 4t4re. 2t2rent. 4t4res. t1ri .t1ri .tri1a2c .tri1a2n .tri1a2t tri1de tri3dent. .tri1o2n t1ru tru1cu trucu1le trucu3lent. t1t2l 1tu 1t tu1me tu2ment. tung2s3 tur1bu turbu1le turbu3lent. 1ty .u4 'u4 .4 '4 u1ci ucil4l ue1vi uevil4l u1ni uni1a2x uni1o2v u2s3t2r u1vi uvil4l 1va 1v va1ci vacil4l va1ni vanil2l vanil1li vanil3lin vanil3lis 1ve 1v 1v 1v 4ve. v1lo vlo1s2ki ve1ni veni1me veni2ment. 2vent. ven1t2r vent1ri ventri1po ventripo1te ventripo3tent. 4ves. 1vi 1v vi1di vidi1me vidi2ment. vil3l 1vo 1v vol1ta vol2t1amp 1v2r v1re 4v4re. 2v2rent. 4v4res. 1vu 1v 1vy 1wa wa2g3n 1we 4we. 2went. 4wes. 1wi 1wo 1w2r 1wu 2xent. xil3l .y4 'y4 y1al1gi y1as1t2h ys1to y1s2tom 1za 1ze 1z 1z 4ze. 2zent. 4zes. 1zi 1zo 1zu 1zy % % Additional patterns start here: % 22 a4 4a- .4 '4 4 4- .4 '4 4 4- 4 4- .4 '4 4 4- .4 '4 4 4- .4 '4 4 4- -5a4 -54 -54 -54 -54 -54 -54 ab2ment- a1b2r -5a1b2r ab1r -5ab1r ab3ra -5ab3ra ab3sent- absti3nent- ac3cent- acquies4cent- .4 '4 4 4- -54 ae3s4c2h -5ae3s4c2h a1g2n -5a1g2n ag1na -5ag1na a2g3nat -5a2g3nat ai2ment- amalga2ment- 2ment- a1mi -5a1mi ami1no -5ami1no amino1a2c -5amino1a2c a1na -5a1na ana3s4t2r -5ana3s4t2r ani2ment- an1ti -5an1ti anti1a2 -5anti1a2 anti1e2 anti12 -5anti1e2 -5anti12 anti2en1ne -5anti2en1ne antifer3ment- anti1s2 -5anti1s2 a1po -5a1po apo2s3ta -5apo2s3ta appa3rent- -5ar1de -ar3dent- .ar3dent- -5ar3dent. ar1ge -5ar1ge -ar3gent- .ar3gent- 'ar3gent- ar3gent- ar3gent. -5ar3gent. ar2ment- ar1pe -5ar1pe -ar3pent- .ar3pent- 'ar3pent- ar3pent- ar3pent. -5ar3pent. as2ment- as2ta -5as2ta au2ment- .b4 'b4 b4 4b- -5b4 -5bai1se -5baise1ma -5bai2se3main 4be- 2bent- 4bes- -5bi1a2c -5bi1a2t -5bi1au -5bio1a2 -5bi2s1a2 -5bi1u2 4b4le- 2b2lent- 4b4les- bou2ment- 4b4re- 2b2rent- 4b4res- bru2ment- .c4 'c4 c4 4c- .4 '4 4 4- -5c4 -54 car2ment- cci3dent- 4ce- 2cent- 4ces- 4ch- 4c4he- -5c1h 2chent- 4c4hes- -5ch1v2r -5chv1re -5chvre1fe -5chvrefeuil2l -5ch2vre3feuil1le chien3dent- 4ch4le- 4ch4les- 4ch4re- 4ch4res- chro2ment- -5ci1sa -5ci2s1alp 4ck- 4c4ke- 2c2kent- 4c4kes- cla2ment- 4c4le- 2c2lent- 4c4les- -5com1me -com3ment- .com3ment- -5com3ment. comp3tent- -5con4 confi3dent- conni3vent- -5cons4 conti3nent- contin3gent- -5con1t2r -5cont1re -5contre1ma -5contrema1t2r -5cont1re3mat1re -5contre1s2c -5co1o2 -5coo1li -5co2o3lie corpu3lent- 4c4re- 2c2rent- 4c4res- -5cul4 cur3rent- 1d22 .d4 'd4 d4 4d- .4 '4 4 4- -5d4 -54 -5da1c2r -5dac1ry -5dacryo1a2 da2ment- 4de- -5d1a2 dca3dent- -5d1io 2dent- -5d1o2 4des- -5d2s -5d1sa -5d3s2a3c2r -5ds2a3m -5d3s2as1t2r -5dsa1te -5d3s2a3tell -5d3s2c -5d1se -5d2s12 -5d3s23g2r -5dsen1si -5d3s2ensib -5d3s2ert -5d3s2exu -5d2s1i2 -5d3s2i3d -5d3s2i3g2n -5d3s2i3li -5dsi1ne -5d3s2i3nen -5d3s2in1vo -5d3s2i3r -5d3s2ist -5d1so -5d2s1 -5d3s2o3l -5dso1pi -5d3s2o3pil -5d3s2orm -5d3s2orp -5d3s2ou1f2r -5d3s2p -5d3s2t -5d1su -5d2s1u2n dtri3ment- -5di1a2c -5dia1ci -5di1a2cid -5di1ald -5di1a2mi diaphrag2ment- -5dia1to -5di1a2tom -5di1e2n dili3gent- -5di2s3h dissi3dent- 2d2lent- -5do1le -do3lent- .do3lent- -5do3lent. 4d4re- 2d2rent- 4d4res- -5dy2s3 -5dy2s1a2 -5dy2s1i2 -5dy2s1o2 -5dy2s1u2 e4 4e- 4 4- 4 4- 4 4- .4 '4 4 4- -5e4 -54 -54 -54 -54 3cent- ci2ment- cu2ment- 3dent- li2ment- lo3quent- 2ment- -51mi -5mi1ne -mi3nent- .mi3nent- -5mi3nent. e1n1a2 -5e1n1a2 ni3tent- e1n1o2 -5e1n1o2 entre3gent- 3quent- quipo3tent- quiva4lent- 3rent- er2ment- es3cent- esti2ment- eu2r1a2 -5eu2r1a2 .f4 'f4 f4 4f- -5f4 fa2ment- 4fe- fcu3lent- 2fent- 4fes- fichu3ment- fir2ment- flam2ment- 4f4le- 2f2lent- 4f4les- 4f4re- 2f2rent- 4f4res- fu2ment- .g4 'g4 g4 4g- -5g4 4ge- -5gem1me -gem2ment- .gem2ment- -5gem2ment. 2gent- 4ges- 4g4le- 2g2lent- 4g4les- 4g4ne- 2g2nent- 4g4nes- gram2ment- grandilo3quent- 4g4re- 2g2rent- 4g4res- 4gue- 2guent- 4gues- .h4 'h4 h4 4h- -5h4 4he- 4hes- hu2ment- i4 4i- .4 '4 4 4- .4 '4 4 4- 4 4- .4 '4 4 4- -5i4 -54 -54 -54 -54 i1g2n -5i1g2n i2g3n -5i2g3n i2g3ni -5i2g3ni imma3nent- immi3nent- immis4cent- impo3tent- impu3dent- i1n1a2 -5i1n1a2 ina1ni -5ina1ni in2a3nit -5in2a3nit inau1gu -5inau1gu in2augur -5in2augur inci3dent- indi3gent- indo3lent- indul3gent- i1n1e2 i1n12 -5i1n1e2 -5i1n12 inef1fa -5inef1fa in2effab -5in2effab in1lu -5in1lu in23luc1ta -5in23luc1ta in1na -5in1na in23nar1ra -5in23nar1ra in2ept -5in2ept in2er -5in2er in2exo1ra -5in2exo1ra i1n1i2 -5i1n1i2 ini1mi -5ini1mi in2i3mi1ti -5in2i3mi1ti in2i3q -5in2i3q in2i3t -5in2i3t inno3cent- i1n1o2 -5i1n1o2 ino1cu -5ino1cu in2o3cul -5in2o3cul in2ond -5in2ond inso3lent- ins1ta -5ins1ta in1s2tab -5in1s2tab in1te -5in1te intelli3gent- inte4r3 -5inte4r3 inte1ra2 -5inte1ra2 inte1re2 inte1r2 -5inte1re2 -5inte1r2 inte1ri2 -5inte1ri2 inte1ro2 -5inte1ro2 inters2 -5inters2 inte1ru2 -5inte1ru2 inti2ment- i1n1u2 -5i1n1u2 in2uit -5in2uit in2u3l -5in2u3l is3cent- iva3lent- .j4 'j4 j4 4j- -5j4 ja3cent- 4je- 2jent- 4jes- .k4 'k4 k4 4k- -5k4 4ke- 2kent- 4kes- 4kh- .l4 'l4 l4 4l- -5l4 -5la1te -la3tent- .la3tent- -5la3tent. 4le- 2lent- 4les- llu2ment- l2ment- .m4 'm4 m4 4m- -5m4 -5ma2c3k -5ma1c2r -5mac1ro -5macro1s2c -5ma1g2n -5mag1ni -5magni1ci -5ma2g3nici1de -5magni1fi -5magnifi1ca -5ma2g3nificat -5mag1nu -5ma2g3num -5ma1la -5mala1d2r -5malad1re -5ma2l1a2dres -5ma2l1a2d1ro -5ma2l1ai1s -5ma2l1ap -5ma2l1a2v -5ma1le -5ma2l1en -5ma1li -5ma2l1int -5ma1lo -5ma2l1oc -5ma2l1o2d -5ma2r1x 4me- mcon3tent- -5m1go -5m2g1oh 4mes- -5m2sa -5m3san -5m1se -5m2s1es -5m2s1i -5m1su -5m2s1u2s -5m1ta -5m1ta1s2ta -5mil3l -5mil1li -5milli1am mi2ment- mit3tent- -5mo1no -5mono1a2 -5mono1e2 -5mono12 -5mono1i2 -5mono12d -5mono1o2 -5mono1s2 -5mono1u2 monova3lent- munifi3cent- .n4 'n4 n4 4n- .4 '4 4 4- -5n4 -54 4ne- 2nent- 4nes- -5no1no -5no2n1obs n3s2at- n3s2ats- nutri3ment- o4 4o- .4 '4 4 4- .4 '4 4 4- 4 4- .4 '4 4 4- .4 '4 4 4- -5o4 -54 -54 -54 -54 -54 .4 '4 4 4- -54 2ment- om2ment- omnipo3tent- on1gu -5on1gu -on3guent- .on3guent- 'on3guent- on3guent- on3guent. -5on3guent. opu3lent- or2ment- oua1ou -5oua1ou o1vi -5o1vi ovi1s2c -5ovi1s2c .p4 'p4 p4 4p- -5p4 -5pa1na -5pa2n1a2f -5pa2n1a2m -5pa2n1a2ra -5pa1ni -5pa2n1is -5pa1no -5pa2n1o2p2h -5pa2n1opt -5pa1ra -5para1c2h -5pa2r1a2c1he -5pa2r1a2c1h -5para1s2 -5pa1re -pa3rent- .pa3rent- -5pa3rent. -5pa1r2h -5pa2r3h -5pa1te -pa3tent- .pa3tent- -5pa3tent. 4pe- 2pent- -5pen2ta -5pe4r -5pe1r1a2 -5pe1r1e2 -5pe1r12 -5p1ri -5pe1r1i2 -5pri1os -5pri1s2 -5pri2s3s -5pri2s3ta -5pri1u2 perma3nent- -5pe1r1o2 perti3nent- -5pe1r1u2 4pes- 4ph- -5p1ha -5pha1la -5phalan3s2t 4p4he- 2phent- 4p4hes- 4ph4le- 4ph4les- 4ph4re- 4ph4res- 4p4le- 2p2lent- 4p4les- -5p1lu plu2ment- -5plu1ri -5pluri1a polyva3lent- -5pon1te -5pon2tet -5pos2t3h -5pos1ti -5pos2t1in -5pos2t1o2 -5pos2t3r -5post1s2 4p4re- -5p1r -5pr1a2 -5pr2a3la -5pr2au -5pr1e2 -5pr12 prmi3nent- -5pr1i2 2p2rent- -5pr1o2 4p4res- -5pr1s2 pr3sent- -5pr1u2 privatdo3cent- privatdo3zent- -5p1ro -5pro12 promi3nent- -5pro1g2n -5prog1na -5pro2g3na1t2h -5pro1s2c -5prou3d2h pru3dent- -5p1sy -5psyc1ho -5psycho1a2n -5pud1d2l .q4 'q4 q4 4q- -5q4 qua2ment- 4que- 2quent- 4ques- .r4 'r4 r4 4r- -5r4 rai3ment- ra2ment- 4re- -5r1a2 -5r2a3le -5ra1li -5r2a3lis -5r2a3lit -5r2aux -5r1e2 -5r12 -5r2el -5r2er -5r2r r3gent- -5r1i2 -5r2i3fi re3lent- reli2ment- rma3nent- 2rent- -5r1o2 re3pent- 4res- -5re1s2 -5res1ca -5re2s3cap -5res1ci -5re2s3ci1si -5re2s3ci1so -5res1co -5re2s3cou -5res1c2r -5re2s3c1ri -5res1pe -5re2s3pect -5res1pi -5re2s3pir -5res1p2l -5resp1le -5re2s3plend -5res1po -5re2s3pons -5res1q -5re2s3quil -5re2s3s -5res1se -res3sent- .res3sent- -5res3sent. -5re2s3t -5res1ta -5re3s4tab -5re3s4tag -5re3s4tand -5re3s4tat -5res1t -5re3s4tn -5re3s4tr -5res1ti -5re3s4tim -5re3s4tip -5res1to -5re3s4toc -5re3s4top -5re3s4t2r -5rest1re -5re4s5trein -5rest1ri -5re4s5trict -5re4s5trin -5re3s4tu -5re3s4ty rsur3gent- rti3cent- -5r1t2r -5rt1ro -5rtro1a2 -5ru2 -5r2uss 4r4he- 4r4hes- ri2ment- rin3gent- ru3lent- ryth2ment- .s4 's4 s4 4s- .4 '4 4 4- -5s4 -54 -5sar1me -sar3ment- .sar3ment- -5sar3ment. 4s4ch- 4s4c4he- 4s4c4hes- 4se- 2sent- ser3gent- -5ser1me -ser3ment- .ser3ment- -5ser3ment. ser3pent- 4ses- -5seu2le 4sh- 4s4he- 2shent- 4s4hes- slalo2ment- -5sou1ve -sou3vent- .sou3vent- -5sou3vent. sporu4lent- -5s1ta -5sta2g3n -5s1ti -5stil3l -5su2b1a2 -5su3b2alt -5su2b12 -5su3b23r -5su1bi -5su2b1in -5su1b2l -5sub1li subli2ment- -5subli1mi -5su2b3limin -5su2b3lin -5su2b3lu -5su1bu -5su2b1ur succu3lent- su2ment- -5su2r1a2 -5su3r2a3t -5su2r1e2 -5su2r12 -5su3r2eau -5su3r2ell surmi3nent- -5su3r2et -5su2r3h -5su1ri -5su2r1i2m -5su2r1inf -5su2r1int -5su1ro -5su2r1of -5su2r1ox -5syn1g2n -5syng1na -5syn2g3na1t2h .t4 't4 t4 4t- -5t4 -5ta1le -ta3lent- .ta3lent- -5ta3lent. ta2ment- tan3gent- 4te- tempra3ment- 2tent- ter3gent- 4tes- testa3ment- 4th- .4 '4 4 4- -54 4t4he- 4t4hes- 4th4re- 4th4res- to2ment- tor3rent- transpa3rent- 4t4re- 2t2rent- 4t4res- -5t1ri -5tri1a2c -5tri1a2n -5tri1a2t tri3dent- -5tri1o2n trucu3lent- tu2ment- turbu3lent- u4 4u- .4 '4 4 4- .4 '4 4 4- 4 4- .4 '4 4 4- -5u4 -54 -54 -54 -54 .v4 'v4 v4 4v- -5v4 4ve- veni2ment- 2vent- ventripo3tent- 4ves- vidi2ment- 4v4re- 2v2rent- 4v4res- .w4 'w4 w4 4w- -5w4 4we- 2went- 4wes- .x4 'x4 x4 4x- -5x4 2xent- y4 4y- .4 '4 4 4- .4 '4 4 4- -5y4 -54 -54 .z4 'z4 z4 4z- .4 '4 4 4- -5z4 -54 4ze- 2zent- 4zes- |
Added gc_lang/fr/dictionnaire/genfrdic.py version [d35ae27b29].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 | #!python3 __author__ = "Olivier R." __license__ = "MPL 2" import os import sys import time import re import collections import zipfile import math import argparse from enum import Enum from distutils import dir_util from distutils import file_util from string import Template import metagraphe import metaphone2 # Dictionnaire des caractères pour le tri naturel. # Ordre souhaitable, mais pose problème pour la recherche, car engendre des égalités de lemmes différents. # Il faut donc travailler sur un dictionnaire trié *numériquement* et le sauvegarder selon le tri *naturel* CHARMAP = str.maketrans({ 'à': 'a', 'À': 'A', 'â': 'a', 'Â': 'A', 'ä': 'a', 'Ä': 'A', 'å': 'a', 'Å': 'A', 'ā': 'a', 'Ā': 'A', 'ç': 'c', 'Ç': 'C', 'é': 'e', 'É': 'E', 'è': 'e', 'È': 'E', 'ê': 'e', 'Ê': 'E', 'ë': 'e', 'Ë': 'E', 'ē': 'e', 'Ē': 'E', 'î': 'i', 'Î': 'I', 'ï': 'i', 'Ï': 'I', 'ī': 'i', 'Ī': 'I', 'ñ': 'n', 'ô': 'o', 'Ô': 'O', 'ö': 'o', 'Ö': 'O', 'ō': 'o', 'Ō': 'O', 'ù': 'u', 'Ù': 'U', 'û': 'u', 'Û': 'U', 'ü': 'u', 'Ü': 'U', 'ū': 'u', 'Ū': 'U', 'ÿ': 'y', 'æ': 'ae', 'Æ': 'AE', 'œ':'oe', 'Œ': 'OE', '-': None, '.': None, "'": None }) # Les dictionnaires dSUBDIC = { '*': 'Commun', 'R': 'Réforme1990', 'M': 'Moderne', 'C': 'Classique', 'A': 'Annexe', 'P': 'Multimots', 'X': 'Contributeurs' } dMODERNE = { 'name': 'DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “MODERNE”', 'shortname': '“Moderne”', 'asciiName': 'fr-moderne', 'mozAsciiName': 'fr-FR-modern', 'subDicts': '*MX', 'mozId': 'fr-dicollecte-moderne', 'description': "Dictionnaire français “Moderne”" } dCLASSIQUE = { 'name': 'DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “CLASSIQUE”', 'shortname': '“Classique”', 'asciiName': 'fr-classique', 'mozAsciiName': 'fr-FR-classic', 'subDicts': '*MCX', 'mozId': 'fr-dicollecte-classique', 'description': "Dictionnaire français “Classique”" } dCLASSIQUEX = { 'name': 'DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “CLASSIQUE ÉTENDU”', 'shortname': '“Classique étendu”', 'asciiName': 'fr-classique-ext', 'mozAsciiName': 'fr-FR-classic-ext', 'subDicts': '*MCX', 'mozId': 'fr-dicollecte-classique-ext', 'description': "Dictionnaire français “Classique étendu”" } dREFORME1990 = { 'name': 'DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “RÉFORME 1990”', 'shortname': '“Réforme 1990”', 'asciiName': 'fr-reforme1990', 'mozAsciiName': 'fr-FR-reform', 'subDicts': '*RX', 'mozId': 'fr-dicollecte-reforme1990', 'description': "Dictionnaire français “Réforme 1990”" } dTOUTESVAR = { 'name': 'DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “TOUTES VARIANTES”', 'shortname': '“Toutes variantes”', 'asciiName': 'fr-toutesvariantes', 'mozAsciiName': 'fr-FR-classic-reform', 'subDicts': '*MCRAX', 'mozId': 'fr-dicollecte-toutesvariantes', 'description': "Dictionnaire français “Toutes variantes”" } dMOZEXT = { 'name': 'DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS', 'mozId': 'fr-dicollecte', 'description': "Dictionnaire orthographique de la langue française" } BUILD_PATH = '_build' PREFIX_DICT_PATH = 'hunspell-french-dictionaries-v' EXT_PREFIX_OOO = 'lo-oo-ressources-linguistiques-fr-v' EXT_PREFIX_MOZ = 'moz-hunspell-fr-dicollecte-v' LEX_PREFIX = 'lexique-dicollecte-fr-v' STATS_NAME = 'statistiques-v' MPLHEADER = "# This Source Code Form is subject to the terms of the Mozilla Public\n" + \ "# License, v. 2.0. If a copy of the MPL was not distributed with this\n" + \ "# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n" def echo (obj, sep=' ', end='\n', file=sys.stdout, flush=False): """ Print for Windows to avoid Python crashes. Encoding depends on Windows locale. No useful standard. Always returns True (useful for debugging).""" if sys.platform != "win32": print(obj, sep=sep, end=end, file=file, flush=flush) return True try: print(str(obj).replace("œ", "oe"), sep=sep, end=end, file=file, flush=flush) except: try: print(str(obj).translate(CHARMAP), sep=sep, end=end, file=file, flush=flush) except: print(str(obj).encode('ascii', 'replace').decode('ascii', 'replace'), sep=sep, end=end, file=file, flush=flush) return True def makeLongFlags (sFlags): "renvoie la liste des drapeaux, créés à partir de la chaîne" if len(sFlags) % 2 != 0: echo(">| erreur: %s" % sFlags) sFlags = sFlags + ' ' return [ sFlags[i:i+2] for i in range(0, len(sFlags), 2) ] def makeNumFlags (sFlags): return sFlags.split(',') def makeOneCharFlags (sFlags): return list(sFlags) def fieldToHunspell (sFieldName, sFieldValue): "renvoie le texte pour Hunspell de la valeur d’un champ" sSep = ' ' + sFieldName + ':' return sSep + sFieldValue.replace(' ', sSep) def getListNgrams (sWord, n): return [ sWord[i:i+n] for i in range(len(sWord)-n-1) ] def createZipFiles (spSrc, spDst, zipFileName): echo(' > Zip [ {} ]'.format(spSrc)) def _addDir (_spSrc, _subPath, _zipFile): for _fileToZip in os.listdir(_spSrc): if os.path.isdir(_spSrc+'/'+_fileToZip): _addDir(_spSrc+'/'+_fileToZip, _fileToZip, _zipFile) else: zipFile.write(_spSrc+'/'+_fileToZip, _subPath+'/'+_fileToZip) # zipFile = zipfile.ZipFile(spDst+'/'+zipFileName, 'w', zipfile.ZIP_DEFLATED) for fileToZip in os.listdir(spSrc): if os.path.isdir(spSrc+'/'+fileToZip): _addDir(spSrc+'/'+fileToZip, fileToZip, zipFileName) else: zipFile.write(spSrc+'/'+fileToZip, fileToZip) zipFile.close() def copyTemplate (spSrc, spDst, spf, dVars): if spf.endswith('xml') or spf.endswith('rdf'): for key in dVars: dVars[key] = dVars[key].replace('&', '&') xTemplate = Template( open(spSrc+'/'+spf, 'r', encoding='utf-8').read() ) open(spDst+'/'+spf, 'w', encoding='utf-8', newline="\n").write(xTemplate.safe_substitute(dVars)) def getIfq (f): "renvoie l’indice de fréquence (un caractère)" if f == 0: return '0' if f < 0.00000001: return '1' if f < 0.0000001: return '2' if f < 0.000001: return '3' if f < 0.00001: return '4' if f < 0.0001: return '5' if f < 0.001: return '6' if f < 0.01: return '7' if f < 0.1: return '8' return '9' def getVerbMultiMorph (s): "renvoie la liste des morphologies fusionnées" lTag = s.split() lRes = [] for n, sTag in enumerate(lTag, 1): if not sTag[0].isdigit(): sMorph = sTag for sTag2 in lTag[n:]: if sTag2[0].isdigit(): lRes.append(sMorph + " " + sTag2) else: break return lRes def readfile (spf): "generator: returns file line by line" if os.path.isfile(spf): with open(spf, "r", encoding="utf-8") as hSrc: for sLine in hSrc: yield sLine else: print("# Error: file not found.") class Dictionnaire: def __init__ (self, version, name): # Dictionary self.sName = name self.lEntry = [] self.nEntry = 0 self.sVersion = version # Affixes self.sSettings = '' # enregistre tout avant la ligne # END self.dFlags = collections.OrderedDict() self.bShortenTags = False self.dAM = collections.OrderedDict() # étiquettes morphologiques self.dAF = collections.OrderedDict() # étiquettes drapeaux # Flexions self.lFlexions = [] # liste des flexions avec lemme, morphologie et occurrences self.lStatsLex = [] self.nTotOccurRecognizedWords = 0 self.aFlexions = None def readDictionary (self, spf): "Lecture du dictionnaire" echo('Dictionnaire << [ {} ]'.format(spf), end=' ') for sLine in readfile(spf): sLine = sLine.strip() if not sLine.isdigit() and not sLine.startswith("#"): self.lEntry.append(Entree(sLine)) self.nEntry = len(self.lEntry) echo('- {} entrées'.format(self.nEntry)) def readAffixes (self, spf): "Lecture du fichier des affixes" echo("Dictionnaire << [ {} ]".format(spf)) bSettings = True for sLine in readfile(spf): if sLine.startswith("# END"): bSettings = False elif sLine.startswith("#"): pass elif sLine.startswith(("PFX", "SFX")): sLine = re.sub(" *#.*$", "", sLine.rstrip(" \n")) lElem = sLine.split() if len(lElem) >= 4: if lElem[1] not in self.dFlags: # nouveau drapeau oFlag = Flag(lElem[0], lElem[1], lElem[2]) self.dFlags[lElem[1]] = oFlag else: # nouvelle règle oFlag.addAffixRule(sLine) else: echo(" # erreur de lecture: {}".format(sLine)) elif bSettings: # toutes les lignes non-commentaires avant # END sont enregistrées dans self.sSettings self.sSettings += sLine def defineAbreviatedTags (self, nMode, spDst): "Abrégé des étiquettes grammaticales et des drapeaux" echo(" * Dictionnaire - compression Hunspell... ") self.bShortenTags = True dAF = {} dAM = {} for oFlag in self.dFlags.values(): for oRule in oFlag.lRules: if oRule.flags: dAF[oRule.flags] = dAF.get(oRule.flags, 0) + 1 sMorph = oRule.getMorph(nMode).strip() if sMorph: dAM[sMorph] = dAM.get(sMorph, 0) + 1 for oEntry in self.lEntry: if oEntry.flags: dAF[oEntry.flags] = dAF.get(oEntry.flags, 0) + 1 sMorph = oEntry.getMorph(nMode).strip() if sMorph: dAM[sMorph] = dAM.get(sMorph, 0) + 1 lAF = sorted(dAF.items(), key = lambda x: (x[1], x[0]), reverse=True) lAM = sorted(dAM.items(), key = lambda x: (x[1], x[0]), reverse=True) with open(spDst, 'a', encoding='utf-8', newline="\n") as hDst: hDst.write("\n\nDrapeaux :\n") for nAF, elem in enumerate(lAF, 1): self.dAF[elem[0]] = str(nAF) hDst.write(" > {0[1]:>8} : {0[0]}\n".format(elem)) hDst.write("\n\nMorphologies :\n") for nAM, elem in enumerate(lAM, 1): self.dAM[elem[0]] = str(nAM) hDst.write(" > {0[1]:>8} : {0[0]}\n".format(elem)) def writeDictionary (self, spDst, dTplVars, nMode, bSimplified): "Écrire le fichier dictionnaire (.dic)" echo(' * Dictionnaire >> [ {}.dic ] ({})'.format(dTplVars['asciiName'], dTplVars['subDicts'])) nEntry = 0 for oEntry in self.lEntry: if oEntry.di in dTplVars['subDicts']: nEntry += 1 with open(spDst+'/'+dTplVars['asciiName']+'.dic', 'w', encoding='utf-8', newline="\n") as hDst: hDst.write(str(nEntry)+"\n") for oEntry in self.lEntry: if oEntry.di in dTplVars['subDicts']: hDst.write(oEntry.getEntryLine(self, nMode, bSimplified)) def writeAffixes (self, spDst, dTplVars, nMode, bSimplified): "Écrire le fichier des affixes (.aff)" echo(' * Dictionnaire >> [ {}.aff ]'.format(dTplVars['asciiName'])) info = "# This Source Code Form is subject to the terms of the Mozilla Public\n" + \ "# License, v. 2.0. If a copy of the MPL was not distributed with this\n" + \ "# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n" + \ "# AFFIXES DU {} v{}\n".format(dTplVars['name'], self.sVersion) + \ "# par Olivier R. -- licence MPL 2.0\n" + \ "# Généré le " + time.strftime("%d-%m-%Y à %H:%M") + "\n" \ "# Pour améliorer le dictionnaire, allez sur http://www.dicollecte.org/\n\n" with open(spDst+'/'+dTplVars['asciiName']+'.aff', 'w', encoding='utf-8', newline="\n") as hDst: hDst.write(info) hDst.write(self.sSettings + "\n") if self.bShortenTags: hDst.write("AM {}\n".format(len(self.dAM))) for item in self.dAM.items(): hDst.write("AM {}\n".format(item[0])) hDst.write("\n") hDst.write("AF {}\n".format(len(self.dAF))) for item in self.dAF.items(): hDst.write("AF {}\n".format(item[0])) hDst.write("\n") for oFlag in self.dFlags.values(): hDst.write(oFlag.getFlag(dTplVars['subDicts'], self, nMode, bSimplified)) def sortEntriesNatural (self): echo(' * Dictionnaire - Tri naturel des entrées...') self.lEntry = sorted(self.lEntry, key=Entree.keyTriNat) def sortEntriesNumerical (self): echo(' * Dictionnaire - Tri numérique des entrées...') self.lEntry = sorted(self.lEntry, key=Entree.keyTriNum) def sortLexiconByFlexion (self): echo(' * Dictionnaire - tri du lexique (par flexion)...') self.lFlexions = sorted(self.lFlexions, key=Flexion.keyFlexion) def sortLexiconByFreq (self): echo(' * Dictionnaire - tri du lexique (par fréquence)...') self.lFlexions = sorted(self.lFlexions, key=Flexion.keyFreq) def sortLexiconByIdx (self): echo(' * Dictionnaire - tri du lexique (par index)...') self.lFlexions = sorted(self.lFlexions, key=Flexion.keyIdx) def checkEntries (self): echo(' * Dictionnaire - contrôle des entrées...') for e in self.lEntry: e.check() def generateFlexions (self): echo(' * Lexique - genèse des formes fléchies...') for oEntry in self.lEntry: oEntry.generateFlexions(self.dFlags) self.lFlexions.extend(oEntry.lFlexions) # Count flexions in multiple entries d = {} for oFlex in self.lFlexions: if oFlex.sFlexion in d: if oFlex.oEntry not in d[oFlex.sFlexion]: d[oFlex.sFlexion].append(oFlex.oEntry) else: d[oFlex.sFlexion] = [oFlex.oEntry] for oFlex in self.lFlexions: oFlex.lMulti = list(d[oFlex.sFlexion]) oFlex.nMulti = len(oFlex.lMulti) for oFlex in self.lFlexions: oFlex.lMulti.remove(oFlex.oEntry) oFlex.nMulti -= 1 def setTagsFrom (self, other): echo(' * Dictionnaire - copie des tags...') for i in range(self.nEntry): for oEntry in other.lEntry: if self.lEntry[i].lemma == oEntry.lemma and self.lEntry[i].flags == oEntry.flags: self.lEntry[i].setTagsFrom(oEntry) def calculateStats (self, oStatsLex, spfDst): echo(" * Dictionnaire - calculs...") with open(spfDst, 'w', encoding='utf-8', newline="\n") as hDst: # Occurrences brutes des formes fléchies echo(" comptage des occurrences...") hDst.write(oStatsLex.getInfo()) for oFlex in self.lFlexions: oFlex.setOccur(oStatsLex.getFlexionOccur(oFlex.sFlexion)) self.nTotOccurRecognizedWords = 0 for oFlex in self.lFlexions: oFlex.calcOccur() self.nTotOccurRecognizedWords += oFlex.nOccur # Report des occurrences echo(" report des occurrences des formes fléchies multiples...") hDst.write("Report des occurrences des formes fléchies multiples :\n") hDst.write(" Légende :\n") hDst.write(" >> le nombre d’occurrences de la flexion est ramené à la moyenne.\n") hDst.write(" +> le nombre d’occurrences de la flexion est augmenté avec le surplus d’occurrences des flexions ramenées à la moyenne.\n") hDst.write(" %> le nombre d’occurrences de la flexion est pondéré avec le poids de la moyenne de l’entrée.\n\n") for oEntry in self.lEntry: oEntry.calcOccurFromFlexions() oEntry.calcAverageKnownOccurrence() oEntry.solveOccurMultipleFlexions(hDst, oStatsLex) oEntry.calcOccurFromFlexions() # Fréquences echo(" calcul des fréquences et indices de fréquence...") for oFlex in self.lFlexions: oFlex.calcFreq(self.nTotOccurRecognizedWords) for oEntry in self.lEntry: oEntry.calcFreq(self.nTotOccurRecognizedWords) # Entrées, statistiques echo(" statistiques...") hDst.write("\n\nNatures grammaticales :\n") d = {} for oEntry in self.lEntry: po = re.sub("(?<=v[0-3])[itnpqrmaezx_]+", "", oEntry.po) d[po] = d.get(po, 0) + 1 for e in sorted(d.items(), key = lambda x: (x[1], x[0]), reverse=True): hDst.write(" * {0[1]:<15} : {0[0]}\n".format(e)) hDst.write("\n\nVentilation des entrées par indice de fréquence :\n") d1 = {} d2 = {} for oEntry in self.lEntry: d1[oEntry.fq] = d1.get(oEntry.fq, 0) + 1 d2[oEntry.fq] = d2.get(oEntry.fq, 0) + oEntry.fFreq for k in sorted(d1.keys()): hDst.write(" * {} : {} entrées ({:.2f} %) → {:.9f} %\n".format(k, d1[k], (d1[k]*100)/self.nEntry, d2[k])) hDst.write("\n\nRépartition des entrées par sous-dictionnaire :\n") d = {} for oEntry in self.lEntry: d[oEntry.di] = d.get(oEntry.di, 0) + 1 for sKey, nVal in d.items(): hDst.write(" * {0:<15} : {1} entrées ({2:.2f} %)\n".format(dSUBDIC[sKey], nVal, (nVal*100)/self.nEntry)) # Occurrences des lettres echo(" occurrences des lettres...") d = {} for oFlex in self.lFlexions: for c in oFlex.sFlexion: d[c] = d.get(c, 0) + oFlex.nOccur nTot = 0 for k in d: nTot += d[k] hDst.write("\n\nOccurrences des lettres dans le corpus :\n") for sKey, nVal in sorted(d.items(), key = lambda x: (x[1], x[0]), reverse=True): hDst.write(" {} : {:>16,.0f} / {:.8f} %\n".format(sKey, nVal, nVal*100/nTot)) # Mots par nombre de lettres echo(" Nombre de lettres dans les mots...") if not self.aFlexions: self.aFlexions = set([e.sFlexion for e in self.lFlexions]) d = {} for sFlex in self.aFlexions: n = len(sFlex) d[n] = d.get(n, 0) + 1 hDst.write("\n\nNombre de lettres dans les graphies :\n") for sKey, nVal in sorted(d.items()): hDst.write(" {:>2} lettres : {:>8} graphies\n".format(sKey, nVal)) hDst.write("\n\nNombre de formes fléchies : {}\n".format(len(self.lFlexions))) hDst.write("\n\nNombre de graphies : {}\n".format(len(self.aFlexions))) def calcMetagraphe (self): echo(" * Lexique - Metagraphe") for oFlex in self.lFlexions: oFlex.calcMetagraphe() def calcMetaphone2 (self): echo(" * Lexique - Metaphone 2") for oFlex in self.lFlexions: oFlex.calcMetaphone2() def createNgrams (self, spDest, n): echo(" * Lexique - Ngrams " + str(n)) if n < 2: echo("erreur: n = " + str(n)) return dOccur = {} # ngram:n dRefW = {} # ngram:set(idx) dWords = {} # word:idx for oFlex in self.lFlexions: for sNgram in getListNgrams(oFlex.sFlexion, n): # words list if oFlex.sFlexion not in dWords: dWords[oFlex.sFlexion] = len(dWords) idx = dWords[oFlex.sFlexion] # ngram occurrence dOccur[sNgram] = dOccur.get(sNgram, 0) + 1 if sNgram not in dRefW: dRefW[sNgram] = set() # ngram word reference dRefW[sNgram].add(idx) with open(spDest+"/ngrams-%d.txt"%n, 'w', encoding='utf-8', newline="\n") as hDst: for key, value in dWords.items(): hDst.write("%d: %s\n"% (value, key)) for key, value in dOccur.items(): if value > 1: hDst.write("%s: %d -- "% (key, value)) hDst.write(str(dRefW[key])) hDst.write("\n") def writeLexicon (self, spfDst, version, oStatsLex): echo(' * Lexique >> [ {} ] '.format(spfDst)) with open(spfDst, 'w', encoding='utf-8', newline="\n") as hDst: hDst.write(MPLHEADER) hDst.write("# Lexique des formes fléchies du français - Dicollecte v{}\n# Licence : MPL v2.0\n\n".format(version)) hDst.write(oStatsLex.getInfo()) hDst.write(Flexion.header(oStatsLex)) for oFlex in self.lFlexions: hDst.write(oFlex.__str__(oStatsLex)) def writeGrammarCheckerLexicon (self, spfDst, version): echo(' * Lexique simplifié >> [ {} ] '.format(spfDst)) with open(spfDst[:-4]+".lex", 'w', encoding='utf-8', newline="\n") as hDst: hDst.write(MPLHEADER) hDst.write("# Lexique simplifié pour Grammalecte - Dicollecte v{}\n# Licence : MPL v2.0\n\n".format(version)) hDst.write(Flexion.simpleHeader()) for oFlex in self.lFlexions: hDst.write(oFlex.getGrammarCheckerRepr()) def createFiles (self, spDst, lDictVars, nMode, bSimplified): sDicName = PREFIX_DICT_PATH + self.sVersion spDic = spDst + '/' + sDicName dir_util.mkpath(spDic) for dVars in lDictVars: # template vars dVars['version'] = self.sVersion # Dictionaries files (.dic) (.aff) self.writeAffixes(spDic, dVars, nMode, bSimplified) self.writeDictionary(spDic, dVars, nMode, bSimplified) copyTemplate('orthographe', spDic, 'README_dict_fr.txt', dVars) createZipFiles(spDic, spDst, sDicName + '.zip') def createLibreOfficeExtension (self, spBuild, dTplVars, lDictVars, spGL): # LibreOffice extension echo(" * Dictionnaire >> extension pour LibreOffice") dTplVars['version'] = self.sVersion sExtensionName = EXT_PREFIX_OOO + self.sVersion spExt = spBuild + '/' + sExtensionName dir_util.mkpath(spExt+'/META-INF') dir_util.mkpath(spExt+'/ui') dir_util.mkpath(spExt+'/dictionaries') dir_util.mkpath(spExt+'/pythonpath') file_util.copy_file('_templates/ooo/manifest.xml', spExt+'/META-INF') file_util.copy_file('_templates/ooo/DictionarySwitcher.py', spExt) file_util.copy_file('_templates/ooo/ds_strings.py', spExt+'/pythonpath') file_util.copy_file('_templates/ooo/addons.xcu', spExt+'/ui') file_util.copy_file('_templates/ooo/french_flag.png', spExt) file_util.copy_file('_templates/ooo/french_flag_16.bmp', spExt+'/ui') copyTemplate('_templates/ooo', spExt, 'description.xml', dTplVars) copyTemplate('_templates/ooo', spExt, 'dictionaries.xcu', dTplVars) #file_util.copy_file('_templates/ooo/dictionaries.xcu.tpl.xml', spExt) copyTemplate('_templates/ooo', spExt, 'package-description.txt', dTplVars) for dVars in lDictVars: dicPath = spBuild + '/' + PREFIX_DICT_PATH + self.sVersion file_util.copy_file(dicPath+'/'+dVars['asciiName']+'.dic', spExt+'/dictionaries/'+dVars['asciiName']+'.dic') file_util.copy_file(dicPath+'/'+dVars['asciiName']+'.aff', spExt+'/dictionaries/'+dVars['asciiName']+'.aff') copyTemplate('orthographe', spExt+'/dictionaries', 'README_dict_fr.txt', dTplVars) # thesaurus file_util.copy_file('thesaurus/thes_fr.dat', spExt+'/dictionaries') file_util.copy_file('thesaurus/thes_fr.idx', spExt+'/dictionaries') file_util.copy_file('thesaurus/README_thes_fr.txt', spExt+'/dictionaries') # hyphenation file_util.copy_file('césures/hyph_fr.dic', spExt+'/dictionaries') file_util.copy_file('césures/hyph_fr.iso8859-1.dic', spExt+'/dictionaries') file_util.copy_file('césures/frhyph.tex', spExt+'/dictionaries') file_util.copy_file('césures/hyph-fr.tex', spExt+'/dictionaries') file_util.copy_file('césures/README_hyph_fr-3.0.txt', spExt+'/dictionaries') file_util.copy_file('césures/README_hyph_fr-2.9.txt', spExt+'/dictionaries') # zip createZipFiles(spExt, spBuild, sExtensionName + '.oxt') # copy to Grammalecte Project if spGL: echo(" extension copiée dans Grammalecte...") dir_util.copy_tree(spExt+'/dictionaries', spGL) def createMozillaExtensions (self, spBuild, dTplVars, lDictVars, spDestGL): # Mozilla extension 1 echo(" * Dictionnaire >> extension pour Mozilla") dTplVars['version'] = self.sVersion sExtensionName = EXT_PREFIX_MOZ + self.sVersion spExt = spBuild + '/' + sExtensionName dir_util.mkpath(spExt+'/dictionaries') copyTemplate('_templates/moz', spExt, 'install.rdf', dTplVars) spDict = spBuild + '/' + PREFIX_DICT_PATH + self.sVersion file_util.copy_file(spDict+'/fr-classique.dic', spExt+'/dictionaries/fr-classic.dic') file_util.copy_file(spDict+'/fr-classique.aff', spExt+'/dictionaries/fr-classic.aff') copyTemplate('orthographe', spExt, 'README_dict_fr.txt', dTplVars) createZipFiles(spExt, spBuild, sExtensionName + '.xpi') # Grammalecte echo(" * Dictionnaire >> copie des dicos dans Grammalecte") for dVars in lDictVars: file_util.copy_file(spDict+'/'+dVars['asciiName']+'.dic', spDestGL+'/'+dVars['mozAsciiName']+"/"+dVars['mozAsciiName']+'.dic') file_util.copy_file(spDict+'/'+dVars['asciiName']+'.aff', spDestGL+'/'+dVars['mozAsciiName']+"/"+dVars['mozAsciiName']+'.aff') def createFileIfqForDB (self, spBuild): echo(" * Dictionnaire >> indices de fréquence pour la DB...") with open(spBuild+'/dictIdxIfq-'+self.sVersion+'.diff.txt', 'w', encoding='utf-8', newline="\n") as hDiff, \ open(spBuild+'/dictIdxIfq-'+self.sVersion+'.notes.txt', 'w', encoding='utf-8', newline="\n") as hNotes: for oEntry in self.lEntry: if oEntry.fq != oEntry.oldFq: hDiff.write("{0.iD}\t{0.fq}\n".format(oEntry)) hNotes.write("{0.lemma}/{0.flags}\t{0.oldFq} > {0.fq}\n".format(oEntry)) def createLexiconPackages (self, spBuild, version, oStatsLex, spLexGL): sLexName = LEX_PREFIX + version spLex = spBuild + '/' + sLexName dir_util.mkpath(spLex) # write Dicollecte lexicon self.sortLexiconByFreq() self.writeLexicon(spLex + '/' + sLexName + '.txt', version, oStatsLex) self.writeGrammarCheckerLexicon(spBuild + '/' + sLexName + '.lex', version) copyTemplate('lexique', spLex, 'README_lexique.txt', {'version': version}) # zip createZipFiles(spLex, spBuild, sLexName + '.zip') # copy GC lexicon to Grammalecte file_util.copy_file(spBuild + '/' + sLexName + '.lex', spLexGL + '/French.lex') file_util.copy_file('lexique/French.tagset.txt', spLexGL) def createDictConj (self, spBuild, spCopy): echo(" * Dictionnaire >> fichier de conjugaison...") with open(spBuild+'/dictConj.txt', 'w', encoding='utf-8', newline="\n") as hDst: for oEntry in self.lEntry: if oEntry.po.startswith("v"): hDst.write(oEntry.getConjugation()) echo(" Fichier de conjugaison copié dans Grammalecte...") file_util.copy_file(spBuild+'/dictConj.txt', spCopy) def createDictDecl (self, spBuild, spCopy): echo(" * Dictionnaire >> fichier de déclinaison...") with open(spBuild+'/dictDecl.txt', 'w', encoding='utf-8', newline="\n") as hDst: for oEntry in self.lEntry: if re.match("[SXFWIA]", oEntry.flags) and (oEntry.po.startswith("nom") or oEntry.po.startswith("adj")): hDst.write(oEntry.getDeclination()) echo(" Fichier de déclinaison copié dans Grammalecte...") file_util.copy_file(spBuild+'/dictDecl.txt', spCopy) def generateSpellVariants (self, nReq, spBuild): if nReq < 1: nReq = 1 if nReq > 2: nReq = 2 echo(" * Lexique >> variantes par suppression... n = " + str(nReq)) with open(spBuild+'/dictSpellVariants-'+str(nReq)+'.txt', 'w', encoding='utf-8', newline="\n") as hDst: for oFlex in frozenset(self.lFlexions): hDst.write(oFlex.sFlexion+"\t_\t_\n") if len(oFlex.sFlexion) <= 2: n = 0 elif len(oFlex.sFlexion) <= 5: n = 1 else: n = nReq #lTup = self._generatePhonetVariants(oFlex.sFlexion) lTup = self._generateDeleteVariants(oFlex.sFlexion, oFlex.sFlexion, n) for t in lTup: sTag = t[1] if "\t" in t[1] else t[1]+"\t_" hDst.write(t[0]+"\t"+sTag+"\n") _lTupPhonet = [ ("ph", "f"), ("qu", "k"), ("ss", "c"), ("ss", "ç"), ("ct", "x"), ("oe", "œ"), ("ae", "æ"), ("ei", "é"), ("ai", "é"), ("au", "o"), ("eau", "o"), ] def _generatePhonetVariants (self, s): l = [] for torep, rep in self._lTupPhonet(): for m in torep.finditer(s): l.append( (s[:m.start(0)] + rep + s[m.end(0):], str(m.start(0))+":"+str(m.start(0)+len(rep))+">"+torep) ) return l def _generateDeleteVariants (self, sWord0, sWordCur, n): "renvoie une liste de tuples : (forme dégradée de sWord, code de genèse de sWord)" # caution: recursive function if n == 0: return [] lTup = [] for i in range(len(sWordCur)): sNew = sWordCur[0:i]+sWordCur[i+1:] lTup.append( ( sNew, self._generateAddCode(sWord0, sNew) ) ) lTup += self._generateDeleteVariants(sWord0, sNew, n-1) return lTup def _generateAddCode (self, sWord, sCrippled): "returns addCode to generate sWord from sCrippled" sAdd = "" for i in range(len(sWord)): if sWord[i] != sCrippled[i:i+1]: sCrippled = sCrippled[:i] + sWord[i] + sCrippled[i:] if sAdd: sAdd += "\t" sAdd += str(i)+"+"+sWord[i] return sAdd if sAdd else "0" class Entree: def __init__ (self, sLine): self.lemma = '' self.flags = '' # champs morphologiques Hunspell self.po = '' self.iz = '' self.ds = '' self.ts = '' self.ip = '' self.dp = '' self.tp = '' self.sp = '' self.pa = '' self.st = '' self.al = '' self.ph = '' # champs annexes self.lx = '' self.se = '' self.et = '' self.di = '*' self.fq = '' self.iD = '0' # autres self.comment = '' self.err = '' self.nFlexions = 0 self.lFlexions = [] self.sRadical = '' self.nOccur = 0 self.nAKO = -1 # Average known occurrences self.fFreq = 0 self.oldFq = '' sLine = sLine.rstrip(" \n") # commentaire if '#' in sLine: sLine, comment = sLine.split('#', 1) self.comment = comment.strip() # éléments de la ligne elems = sLine.split() nElems = len(elems) # lemme et drapeaux firstElems = elems[0].split('/') self.lemma = firstElems[0] self.flags = firstElems[1] if len(firstElems) > 1 else '' # morph for i in range(1, nElems): if len(elems[i]) > 3 and elems[i][2] == ':': fields = elems[i].split(':', 1) if fields[0] == 'po': self.po = fields[1] if self.po == '' else self.po + ' ' + fields[1] elif fields[0] == 'is': self.iz = fields[1] if self.iz == '' else self.iz + ' ' + fields[1] elif fields[0] == 'ds': self.ds = fields[1] if self.ds == '' else self.ds + ' ' + fields[1] elif fields[0] == 'ts': self.ts = fields[1] if self.ts == '' else self.ts + ' ' + fields[1] elif fields[0] == 'ip': self.ip = fields[1] if self.ip == '' else self.ip + ' ' + fields[1] elif fields[0] == 'dp': self.dp = fields[1] if self.dp == '' else self.dp + ' ' + fields[1] elif fields[0] == 'tp': self.tp = fields[1] if self.tp == '' else self.tp + ' ' + fields[1] elif fields[0] == 'sp': self.sp = fields[1] if self.sp == '' else self.sp + ' ' + fields[1] elif fields[0] == 'pa': self.pa = fields[1] if self.pa == '' else self.pa + ' ' + fields[1] elif fields[0] == 'st': self.st = fields[1] if self.st == '' else self.st + ' ' + fields[1] elif fields[0] == 'al': self.al = fields[1] if self.al == '' else self.al + ' ' + fields[1] elif fields[0] == 'ph': self.ph = fields[1] if self.ph == '' else self.ph + ' ' + fields[1] elif fields[0] == 'lx': self.lx = fields[1] if self.lx == '' else self.lx + ' ' + fields[1] elif fields[0] == 'se': self.se = fields[1] if self.se == '' else self.se + ' ' + fields[1] elif fields[0] == 'et': self.et = fields[1] if self.et == '' else self.et + ' ' + fields[1] elif fields[0] == 'di': self.di = fields[1] elif fields[0] == 'fq': self.fq = fields[1] elif fields[0] == 'id': self.iD = fields[1] else: echo(' ## Champ inconnu: {} dans {}/{}'.format(fields[0], self.lemma, self.flags)) else: self.err = self.err + elems[i] if self.err: echo("\n## Erreur dans le dictionnaire : {}".format(self.err)) echo(" dans : " + self.lemma) def __str__ (self): return "{0.lemma}/{0.flags} {1}".format(self, self.getMorph(2)) def display (self): echo(self.__str__()) def check (self): sErr = '' if self.lemma == '': sErr += 'lemme vide' if not re.match(r"[a-zA-ZéÉôÔàâÂîÎïèÈêÊÜœŒæÆçÇ0-9µåÅΩ&αβγδεζηθικλμνξοπρστυφχψωΔℓΩ_]", self.lemma): sErr += 'premier caractère inconnu: ' + self.lemma[0] if re.search(r"\s$", self.lemma): sErr += 'espace en fin de lemme' if re.match(r"v[0123]", self.po) and not re.match(r"[ea_][ix_][tx_][nx_][pqrex_][mx_][ex_z][ax_z]", self.po[2:10]): sErr += 'verbe inconnu: ' + self.po if (re.match(r"S[*.]", self.flags) and re.search("[sxz]$", self.lemma)) or (re.match(r"X[*.]", self.flags) and not re.search("[ul]$", self.lemma)): sErr += 'drapeau inutile' if self.iz == '' and re.match(r"[SXAI](?!=)", self.flags) and self.po: sErr += '[is]' if re.match(r"pl|sg|inv", self.iz): sErr += '[is]' if re.match(r"[FW]", self.flags) and re.search(r"epi|mas|fem|inv|sg|pl", self.iz): sErr += '[is]' if re.match(r"[FW]", self.flags) and re.search(r"[^eë]$", self.lemma): sErr += "fin de lemme inapproprié" if re.match(r".\*", self.flags) and re.match(r"[bcdfgjklmnpqrstvwxz]", self.lemma): sErr += 'drapeau pour lemme commençant par une voyelle' if re.search(r"pl|sg|inv", self.iz) and re.match(r"[SXAIFW](?!=)", self.flags): sErr += '[is]' if re.search(r"nom|adj", self.po) and re.match(r"(?i)[aâàäáeéèêëiîïíìoôöóòuûüúù]", self.lemma) and re.match("[SFWXAI][.]", self.flags) \ and "pel" not in self.lx: sErr += 'le drapeau derait finir avec *' if not self.flags and self.iz.endswith(("mas", "fem", "epi")): sErr += '[is] incomplet' if sErr: echo(' error - id: ' + self.iD, end = "") echo(' ' + sErr + ' in ' + self.__str__()) def setTagsFrom (self, oEnt): self.po = oEnt.po self.iz = oEnt.iz self.ds = oEnt.ds self.ts = oEnt.ts self.ip = oEnt.ip self.dp = oEnt.dp self.tp = oEnt.tp self.sp = oEnt.sp self.pa = oEnt.pa self.st = oEnt.st self.al = oEnt.al self.ph = oEnt.ph self.lx = oEnt.lx self.se = oEnt.se self.et = oEnt.et self.di = oEnt.di self.fq = oEnt.fq def keyTriNat (self): return (self.lemma.translate(CHARMAP), self.flags, self.po) def keyTriNum (self): return (self.lemma, self.flags, self.po) def getEntryLine (self, oDict, nMode, bSimplified=False): sLine = self.lemma if self.flags: sLine += '/' sLine += self.flags if not oDict.bShortenTags or bSimplified else oDict.dAF[self.flags] if bSimplified: return sLine.replace("()", "") + "\n" if nMode > 0: sMorph = self.getMorph(nMode) if sMorph: sLine += sMorph if not oDict.bShortenTags else "\t" + oDict.dAM[sMorph.strip()] return sLine + "\n" def getMorph (self, nMode): txt = '' if self.po: txt += fieldToHunspell('po', self.po) if self.iz: txt += fieldToHunspell('is', self.iz) if self.ds: txt += fieldToHunspell('ds', self.ds) if self.ts: txt += fieldToHunspell('ts', self.ts) if self.ip: txt += fieldToHunspell('ip', self.ip) if self.dp: txt += fieldToHunspell('dp', self.dp) if self.tp: txt += fieldToHunspell('tp', self.tp) if self.sp: txt += fieldToHunspell('sp', self.sp) if self.pa: txt += fieldToHunspell('pa', self.pa) if self.al: txt += fieldToHunspell('al', self.al) if self.st: txt += fieldToHunspell('st', self.st) if self.ph: txt += fieldToHunspell('ph', self.ph) if nMode > 1: if self.lx: txt += fieldToHunspell('lx', self.lx) if self.se: txt += fieldToHunspell('se', self.se) if self.et: txt += fieldToHunspell('et', self.et) if self.fq: txt += ' fq:' + self.fq if self.di != '*': txt += ' di:' + self.di return txt def getShortDescr (self): txt = self.lemma if self.flags: txt += '/' + self.flags if self.di != '*': txt += ' di:' + self.di return txt def generateFlexions (self, dFlags): lTuples = self._flechir(dFlags) # création des objects flexions self.nFlexions = 0 self.lFlexions = [] sReject = "" for sFlex, sMorph, sDic in lTuples: if '+' not in sMorph: sMorph = self.clean(sMorph) if not sMorph.endswith((" mas", " fem", " epi")): self.lFlexions.append( Flexion(self, sFlex, sMorph, sDic) ) self.nFlexions += 1 else: #echo(sFlex + " " + sMorph + ", ") pass # Drapeaux dont le lemme féminin doit être remplacé par le masculin dans la gestion des formes fléchies if self.flags.startswith(("F.", "F*", "W.", "W*")): # recherche de la forme masculine for t in lTuples: sMorph = self.clean(t[1]) if sMorph.endswith('mas') or sMorph.endswith('mas sg') or sMorph.endswith('mas inv'): self.sRadical = t[0] else: self.sRadical = self.lemma # Tag duplicates d = {} for oFlex in self.lFlexions: d[oFlex.sFlexion] = d.get(oFlex.sFlexion, 0) + 1 for oFlex in self.lFlexions: oFlex.nDup = d[oFlex.sFlexion] def _flechir (self, dFlags, morph='', iPR=0): # recursive function! "renvoie une liste de tuples (déclinaisons, morphologie), formes fléchies du lemme" if iPR == 2: return [] if iPR == 0: morph = self.lexMorph() lFlexions = [(self.lemma, morph, self.di)] if iPR == 0 and not self.flags.endswith('()') else [] lFlexPrefix = [] lFlexSuffix = [] for sFlag in makeLongFlags(self.flags): if sFlag not in dFlags: if sFlag not in ['**', '()', '||', '--']: lFlexions.append( (self.lemma, '[unknown flag: {}]'.format(sFlag)) ) echo("ERROR: " + self.lemma + ' - unknown flag: ' + sFlag) else: oFlag = dFlags[sFlag] if not oFlag.bSfx: # cas des préfixes for oRule in oFlag.lRules: if oRule.motif.search(self.lemma): ruleMorph = oRule.lexMorph() if oRule.cut == '0': flexion = (oRule.add+self.lemma, ruleMorph+morph, oRule.di) if oFlag.bMix: lFlexPrefix.append(flexion) for flex in lFlexSuffix: lFlexions.append( (oRule.add+flex[0], flex[1]+ruleMorph) ) else: lFlexions.append(flexion) else: flexion = (self.lemma.replace(oRule.cut, oRule.add, 1), ruleMorph+morph, oRule.di) if oFlag.bMix: lFlexPrefix.append(flexion) for flex in lFlexSuffix: lFlexions.append( (flex[0].replace(oRule.cut, oRule.add, 1), flex[1]+ruleMorph) ) else: lFlexions.append(flexion) if oRule.flags != '' and oRule.flags != '**': lFlexions.extend(Entree(flexion[0]+'/'+oRule.flags)._flechir(dFlags, flexion[1], iPR+1)) else: # cas des suffixes for oRule in oFlag.lRules: if oRule.motif.search(self.lemma): ruleMorph = oRule.lexMorph() if not oRule.flags.endswith('**') or oRule.flags == '**': # règle ordinaire, pas de circumfix if oRule.cut == '0': flexion = (self.lemma+oRule.add, morph+ruleMorph, oRule.di) if oFlag.bMix: lFlexSuffix.append(flexion) for flex in lFlexPrefix: lFlexions.append( (flex[0]+oRule.add, flex[1]+ruleMorph) ) else: lFlexions.append(flexion) else: nCut = len(oRule.cut) flexion = (self.lemma[:-nCut]+oRule.add, morph+ruleMorph, oRule.di) if oFlag.bMix: lFlexSuffix.append(flexion) for flex in lFlexPrefix: lFlexions.append( (flex[0][:-nCut]+oRule.add, flex[1]+ruleMorph) ) else: lFlexions.append(flexion) if oRule.flags != '' and oRule.flags != '**': lFlexions.extend(Entree(flexion[0]+'/'+oRule.flags)._flechir(dFlags, flexion[1], iPR+1)) else: # la règle impose un circumfix if oRule.cut == '0': flexion = (self.lemma+oRule.add, morph+ruleMorph, oRule.di) else: flexion = (self.lemma[:-len(oRule.cut)]+oRule.add, morph+ruleMorph, oRule.di) lFlexions.extend(Entree(flexion[0]+'/'+oRule.flags)._flechir(dFlags, flexion[1], iPR+1)) lFlexions = lFlexions + lFlexPrefix + lFlexSuffix return lFlexions def clean (self, s): return s.replace(' ', ' ').strip(' ') def lexMorph (self): # morphology for lexicon txt = ' ' if self.po: txt += self.po + ' ' if self.iz: txt += self.iz + ' ' if self.ds: txt += self.ds + ' ' if self.ts: txt += self.ts + ' ' if self.ip: txt += self.ip + ' ' if self.dp: txt += self.dp + ' ' if self.tp: txt += self.tp + ' ' if self.sp: txt += self.sp + ' ' return txt def getConjugation (self): sRes = self.lemma + "\t" + self.po[1:10] + "\n" for oFlex in self.lFlexions: sMorph = oFlex.sMorph[11:].rstrip("!").replace("ppas adj", "ppas").replace("ppas 1jsg", "ppas") if not sMorph.startswith("ppas") and sMorph.find(" ") > 1: # complex tags for s in getVerbMultiMorph(sMorph): sRes += "_\t" + s + "\t" + oFlex.sFlexion + "\n" else: sRes += "_\t" + sMorph + "\t" + oFlex.sFlexion + "\n" return sRes + "$\n" def getDeclination (self): sRes = self.lemma + "\t" + self.flags + "\n" for oFlex in self.lFlexions: if "ppas" in oFlex.sMorph: sMorph = oFlex.sMorph.replace("ppas adj", "adj").replace("ppas 1jsg", "adj") sRes += "_\t" + sMorph + "\t" + oFlex.sFlexion + "\n" elif "adj" in oFlex.sMorph or "nom" in oFlex.sMorph: sRes += "_\t" + oFlex.sMorph + "\t" + oFlex.sFlexion + "\n" return sRes + "$\n" def calcOccurFromFlexions (self): self.nOccur = 0 for o in self.lFlexions: self.nOccur += o.nOccur def calcAverageKnownOccurrence (self): # nous calculons la moyenne des occurrences des formes fléchies # qui n’ont pas d’équivalent dans les autres entrées (nMulti = 0) nOccur = 0 nFlex = 0 for oFlex in self.lFlexions: if oFlex.nMulti == 0: nOccur += oFlex.nOccur nFlex += 1 # moyenne des formes fléchies sans équivalent ou -1 self.nAKO = math.ceil(nOccur / nFlex) if nFlex > 0 else -1 def solveOccurMultipleFlexions (self, hDst, oStatsLex): sBlank = " " if self.nAKO >= 0: for oFlex in self.lFlexions: if oFlex.nMulti > 0 and not oFlex.bFixed: # on trie les entrées avec AKO et sans AKO lEntWithAKO = [] lEntNoAKO = [] for oEntry in oFlex.lMulti: if oEntry.nAKO >= 0: lEntWithAKO.append(oEntry) else: lEntNoAKO.append(oEntry) if lEntNoAKO: # on calcule la différence totale occasionnée par du passage des flexions appartenant à des entrées avec AKO au niveau AKO nDiff = (oFlex.nOccur - self.nAKO) * oFlex.nDup for oEntry in lEntWithAKO: for oFlexM in oEntry.lFlexions: if oFlex.sFlexion == oFlexM.sFlexion: nDiff += oFlexM.nOccur - oEntry.nAKO if nDiff > 0: # on peut passer à les formes fléchies à AKO hDst.write(" * {0.sFlexion}\n".format(oFlex)) hDst.write(" moyenne connue\n") for oFlexD in self.lFlexions: if oFlex.sFlexion == oFlexD.sFlexion: hDst.write(sBlank + "{2:<30} {0.sMorph:<30} {0.nOccur:>10} >> {1:>10}\n".format(oFlexD, self.nAKO, self.getShortDescr())) oFlexD.setOccur(self.nAKO) for oEntry in lEntWithAKO: hDst.write(" moyenne connue\n") for oFlexM in oEntry.lFlexions: if oFlex.sFlexion == oFlexM.sFlexion: hDst.write(sBlank + "{2:<30} {0.sMorph:<30} {0.nOccur:>10} >> {1:>10}\n".format(oFlexM, oEntry.nAKO, oEntry.getShortDescr())) oFlexM.setOccur(oEntry.nAKO) # on répercute nDiff sur les flexions sans AKO for oEntry in lEntNoAKO: hDst.write(" sans moyenne connue\n") for oFlexM in oEntry.lFlexions: if oFlex.sFlexion == oFlexM.sFlexion: nNewOccur = oFlexM.nOccur + math.ceil((nDiff / len(lEntNoAKO)) / oFlexM.nDup) hDst.write(sBlank + "{2:<30} {0.sMorph:<30} {0.nOccur:>10} +> {1:>10}\n".format(oFlexM, nNewOccur, oEntry.getShortDescr())) oFlexM.setOccur(nNewOccur) else: # Toutes les entrées sont avec AKO : on pondère nFlexOccur = oStatsLex.getFlexionOccur(oFlex.sFlexion) nTotAKO = self.nAKO for oEnt in oFlex.lMulti: nTotAKO += oEnt.nAKO hDst.write(" = {0.sFlexion}\n".format(oFlex)) hDst.write(" moyennes connues\n") for oFlexD in self.lFlexions: if oFlex.sFlexion == oFlexD.sFlexion: nNewOccur = math.ceil((nFlexOccur * (self.nAKO / nTotAKO)) / oFlexD.nDup) if nTotAKO else 0 hDst.write(sBlank + "{2:<30} {0.sMorph:<30} {0.nOccur:>10} %> {1:>10}\n".format(oFlexD, nNewOccur, self.getShortDescr())) oFlexD.setOccur(nNewOccur) for oEntry in oFlex.lMulti: for oFlexM in oEntry.lFlexions: if oFlex.sFlexion == oFlexM.sFlexion: nNewOccur = math.ceil((nFlexOccur * (oEntry.nAKO / nTotAKO)) / oFlexM.nDup) if nTotAKO else 0 hDst.write(sBlank + "{2:<30} {0.sMorph:<30} {0.nOccur:>10} %> {1:>10}\n".format(oFlexM, nNewOccur, oEntry.getShortDescr())) oFlexM.setOccur(nNewOccur) def calcFreq (self, nTot): self.fFreq = (self.nOccur * 100) / nTot self.oldFq = self.fq self.fq = getIfq(self.fFreq) class Flexion: def __init__ (self, oEntry, sFlex='', sMorph='', cDic=''): self.oEntry = oEntry self.sFlexion = sFlex self.sMorph = sMorph self.cDic = cDic self.nOccur = 0 self.bFixed = False self.nDup = 0 # duplicates in the same entry self.nMulti = 0 # duplicates with other entries self.lMulti = [] # list of similar flexions self.fFreq = 0 self.cFq = '' self.metagfx = '' # métagraphe self.metaph2 = '' # métaphone 2 def setOccur (self, n): self.nOccur = n self.bFixed = True def calcOccur (self): self.nOccur = math.ceil((self.nOccur / (self.nMulti+1)) / self.nDup) def calcFreq (self, nTot): self.fFreq = (self.nOccur * 100) / nTot self.cFq = getIfq(self.fFreq) def calcMetagraphe (self): t = metagraphe.getMetagraphe(self.sFlexion, self.sMorph) self.metagfx = t[0] if not t[1] else t[0]+"/"+t[1] def calcMetaphone2 (self): t = metaphone2.dm(self.sFlexion) self.metaph2 = t[0] if not t[1] else t[0]+"/"+t[1] @classmethod def header (cls, oStatsLex): sOccurs = '' for t in oStatsLex.lLex: sOccurs += t[1] + "\t" return "id\tFlexion\tLemme\tÉtiquettes\tMétagraphe (β)\tMetaphone2\tNotes\tSémantique\tÉtymologie\tSous-dictionnaire\t" + sOccurs + "Total occurrences\tDoublons\tMultiples\tFréquence\tIndice de fréquence\n" def __str__ (self, oStatsLex): sOccurs = '' for v in oStatsLex.dFlexions[self.sFlexion]: sOccurs += str(v) + "\t" return "{0.oEntry.iD}\t{0.sFlexion}\t{0.oEntry.sRadical}\t{0.sMorph}\t{0.metagfx}\t{0.metaph2}\t{0.oEntry.lx}\t{0.oEntry.se}\t{0.oEntry.et}\t{0.oEntry.di}{2}\t{1}{0.nOccur}\t{0.nDup}\t{0.nMulti}\t{0.fFreq:.15f}\t{0.cFq}\n".format(self, sOccurs, "/"+self.cDic if self.cDic != "*" else "") def display (self): echo(self.__str__()) @classmethod def simpleHeader (cls): return "# :POS ;LEX ~SEM =FQ /DIC\n" def getGrammarCheckerRepr (self): return "{0.sFlexion}\t{0.oEntry.lemma}\t{1}\n".format(self, self._getSimpleTags()) _dTagReplacement = { # POS "nom": ":N", "adj": ":A", "adv": ":W", "negadv": ":X", "mg": ":G", "nb": ":B", "loc.nom": ":Ñ", "loc.adj": ":Â", "loc.adv": ":Ŵ", "loc.verb": ":Ṽ", "interj": ":J", "loc.interj": ":Ĵ", "titr": ":T", "mas": ":m", "fem": ":f", "epi": ":e", "sg": ":s", "pl": ":p", "inv": ":i", "infi": ":Y", "ppre": ":P", "ppas": ":Q", "ipre": ":Ip", "iimp": ":Iq", "ipsi": ":Is", "ifut": ":If", "spre": ":Sp", "simp": ":Sq", "cond": ":K", "impe": ":E", "1sg": ":1s", "1isg": ":1ś", "1jsg": ":1ŝ", "2sg": ":2s", "3sg": ":3s", "1pl": ":1p", "2pl": ":2p", "3pl": ":3p", "3pl!": ":3p!", "prepv": ":Rv", "prep": ":R", "loc.prep": ":Ŕ", "detpos": ":Dp", "detdem": ":Dd", "detind": ":Di", "detneg": ":Dn", "detex": ":De", "det": ":D", "advint": ":U", "prodem": ":Od", "proind": ":Oi", "proint": ":Ot", "proneg": ":On", "prorel": ":Or", "proadv": ":Ow", "properobj": ":Oo", "propersuj": ":Os", "1pe": ":O1", "2pe": ":O2", "3pe": ":O3", "cjco": ":Cc", "cjsub": ":Cs", "cj": ":C", "loc.cj": ":Ĉ", "loc.cjsub": ":Ĉs", "prn": ":M1", "patr": ":M2", "npr": ":MP", "nompr": ":NM", "pfx": ":Zp", "sfx": ":Zs", "div": ":H", "err": ":#", # LEX "symb": ";S" } def _getSimpleTags (self): s = "" # POS for sTag in self.sMorph.split(): if sTag.startswith("v"): s += ":V" + sTag[1:] else: if sTag in self._dTagReplacement: s += self._dTagReplacement[sTag] else: echo(" # unknown tag: " + sTag + " on: " + self.oEntry.lemma) # LEX for sTag in self.oEntry.lx.split(): if sTag in self._dTagReplacement: s += self._dTagReplacement[sTag] # SEM #s += "~" + self.oEntry.se if self.oEntry.se and self.oEntry.se != "@" else "" # ETY #s += "<" + self.oEntry.et if self.oEntry.et and self.oEntry.et != "@" else "" # IFQ #s += "=" + self.cFq # DIC s += "/" + self.cDic return s def keyTriNat (self): return (self.sFlexion.translate(CHARMAP), self.sMorph) def keyFreq (self): return (100-self.fFreq, self.oEntry.sRadical, self.sFlexion) def keyOcc (self): return (self.nOccur, self.oEntry.sRadical, self.sFlexion) def keyIdx (self): return self.oEntry.iD def keyFlexion (self): return self.sFlexion class Flag: def __init__ (self, sFlagType, sFlagName, sMix): self.sFlagName = sFlagName self.bSfx = True if sFlagType == 'SFX' else False self.bMix = True if sMix == 'Y' else False self.lRules = [] self.nRules = 0 self.nOccur = 0 def addAffixRule (self, line): "ajoute une règle au drapeau" oRule = AffixRule(line) self.lRules.append(oRule) self.nRules += 1 def getFlag (self, subDicts, oDict, nMode, bSimplified): nRules = 0 sRules = '' for oRule in self.lRules: if oRule.di in subDicts: if not (bSimplified and oRule.isReplicationRule()): sRules += oRule.getRuleLine(oDict, nMode, bSimplified) nRules += 1 if nRules: txt = "\n" txt += 'SFX' if self.bSfx else 'PFX' txt += ' ' + self.sFlagName + ' ' txt += 'Y' if self.bMix else 'N' txt += ' ' + str(nRules) + "\n" txt += sRules return txt else: return '' class AffixRule: def __init__ (self, sLine): self.sFlagName = '' self.bSfx = True self.comment = '' # Règle self.cut = '' self.add = '' self.flags = '' self.cond = '' self.motif = '' # champs morphologiques de Hunspell self.po = '' self.iz = '' self.ds = '' self.ts = '' self.ip = '' self.dp = '' self.tp = '' self.sp = '' self.pa = '' self.ph = '' # champs de Dicollecte self.lx = '' self.di = '*' # erreurs self.err = '' # autres champs self.nOccur = 0 sLine = sLine.rstrip(" \n") # commentaire if '#' in sLine: sLine, comment = sLine.split('#', 1) self.comment = comment.strip() # éléments de la ligne elems = sLine.split() nElems = len(elems) # type et nom self.bSfx = True if elems[0] == "SFX" else False self.sFlagName = elems[1] # lemme et drapeaux self.cut = elems[2] if '/' in elems[3]: self.add, self.flags = elems[3].split('/') else: self.add = elems[3] self.flags = '' if self.add == '0': self.add = '' self.cond = elems[4] try: self.motif = re.compile(self.cond+'$') if self.bSfx else re.compile('^'+self.cond) except: echo("error:"+self.cond) # morph for i in range(5, nElems): if len(elems[i]) > 3 and elems[i][2] == ':': fields = elems[i].split(':',1) if fields[0] == 'po': self.po = fields[1] if self.po == '' else self.po + ' ' + fields[1] elif fields[0] == 'is': self.iz = fields[1] if self.iz == '' else self.iz + ' ' + fields[1] elif fields[0] == 'ds': self.ds = fields[1] if self.ds == '' else self.ds + ' ' + fields[1] elif fields[0] == 'ts': self.ts = fields[1] if self.ts == '' else self.ts + ' ' + fields[1] elif fields[0] == 'ip': self.ip = fields[1] if self.ip == '' else self.ip + ' ' + fields[1] elif fields[0] == 'dp': self.dp = fields[1] if self.dp == '' else self.dp + ' ' + fields[1] elif fields[0] == 'tp': self.tp = fields[1] if self.tp == '' else self.tp + ' ' + fields[1] elif fields[0] == 'sp': self.sp = fields[1] if self.sp == '' else self.sp + ' ' + fields[1] elif fields[0] == 'pa': self.pa = fields[1] if self.pa == '' else self.pa + ' ' + fields[1] elif fields[0] == 'ph': self.ph = fields[1] if self.pa == '' else self.pa + ' ' + fields[1] elif fields[0] == 'lx': self.lx = fields[1] if self.lx == '' else self.lx + ' ' + fields[1] elif fields[0] == 'di': self.di = fields[1] else: echo('Champ inconnu: {} dans {}'.format(fields[0], self.sFlagName)) else: echo(" # Erreur affixe : {}".format(line)) def isReplicationRule (self): "is this rule used for replication of a virtual lemma" return self.flags == "" and ((self.cut == "0" and self.add == "") or self.cut == self.add) def getRuleLine (self, oDict, nMode, bSimplified=False): sLine = 'SFX' if self.bSfx else 'PFX' sLine += ' ' + self.sFlagName + ' ' + self.cut + ' ' sLine += self.add if self.add else '0' if self.flags != '': sLine += '/' sLine += self.flags if not oDict.bShortenTags or bSimplified else oDict.dAF[self.flags] if bSimplified: sLine = sLine.replace("()", "") sLine += ' ' + self.cond if not bSimplified and nMode > 0: sMorph = self.getMorph(nMode) if sMorph: sLine += sMorph if not oDict.bShortenTags or bSimplified else ' ' + oDict.dAM[sMorph.strip()] return sLine + "\n" def getMorph (self, nMode): # morphology for Hunspell txt = '' if self.po: txt += fieldToHunspell('po', self.po) if self.iz: txt += fieldToHunspell('is', self.iz) if self.ds: txt += fieldToHunspell('ds', self.ds) if self.ts: txt += fieldToHunspell('ts', self.ts) if self.ip: txt += fieldToHunspell('ip', self.ip) if self.dp: txt += fieldToHunspell('dp', self.dp) if self.tp: txt += fieldToHunspell('tp', self.tp) if self.sp: txt += fieldToHunspell('sp', self.sp) if self.pa: txt += fieldToHunspell('pa', self.pa) if self.ph: txt += fieldToHunspell('ph', self.ph) if nMode > 1: if self.lx: txt += fieldToHunspell('lx', self.lx) if self.di != '*': txt += ' di:' + self.di return txt def lexMorph (self): # morphology for lexicon txt = ' ' if self.po: txt += self.po + ' ' if self.iz: txt += self.iz + ' ' if self.ds: txt += self.ds + ' ' if self.ts: txt += self.ts + ' ' if self.ip: txt += self.ip + ' ' if self.dp: txt += self.dp + ' ' if self.tp: txt += self.tp + ' ' if self.sp: txt += self.sp + ' ' return txt class StatsLex: def __init__ (self, oDict): echo("Lexique statistique") self.dFlexions = { oFlex.sFlexion: [] for oFlex in oDict.lFlexions } self.lLex = [] def addLexFromFile (self, sPathFile, cLexID, sLexName): if not os.path.isfile(sPathFile): echo(' * Lexique statistique - fichier {} introuvable'.format(sPathFile)) return None if len(cLexID) != 1: echo(' * Lexique statistique - fichier {} - identifiant incorrect, 1 caractère requis'.format(sPathFile)) return None echo(" * Lexique statistique << [ {} ]".format(sPathFile)) nTotKnownOccur = 0 nTotOccur = 0 for sLine in readfile(sPathFile): sWord, sVal = sLine.rstrip().split() n = int(sVal) if sWord in self.dFlexions: self.dFlexions[sWord].append(n) nTotKnownOccur += n nTotOccur += n self.lLex.append((cLexID, sLexName, nTotKnownOccur, nTotOccur)) # we fill gaps nLex = len(self.lLex) for sFlex in self.dFlexions: if len(self.dFlexions[sFlex]) < nLex: self.dFlexions[sFlex].append(0) def getFlexionOccur (self, sFlex): return sum(self.dFlexions[sFlex]) def getInfo (self): nKnownTot = 0 nTot = 0 s = "Corpus :\n" for t in self.lLex: s += " * {:<20} -> {:>18,} mots reconnus / {:>18,}\n".format(t[1], t[2], t[3]) nKnownTot += t[2] nTot += t[3] s += "\n * {:<20} -> {:>18,} mots reconnus / {:>18,}\n\n".format('TOTAL', nKnownTot, nTot) return s def write (self, sPathFile): with open(sPathFile, 'w', encoding='utf-8', newline="\n") as hDst: for t in self.lLex: hDst.write(str(t)+"\n") for e in self.dFlexions.items(): hDst.write("{} - {}\n".format(e[0], e[1])) def main (): xParser = argparse.ArgumentParser() xParser.add_argument("-v", "--verdic", help="set dictionary version, i.e. 5.4", type=str, default="X.Y.z") xParser.add_argument("-m", "--mode", help="0: no tags, 1: Hunspell tags (default), 2: All tags", type=int, choices=[0, 1, 2], default=1) xParser.add_argument("-u", "--uncompress", help="do not use Hunspell compression", action="store_true") xParser.add_argument("-s", "--simplify", help="no virtual lemmas", action="store_true") xParser.add_argument("-sv", "--spellvariants", help="generate spell variants", action="store_true") xArgs = xParser.parse_args() if xArgs.simplify: xArgs.mode = 0 xArgs.uncompress = True echo("Python: " + sys.version) echo("Version: " + xArgs.verdic) echo("Simplify: " + str(xArgs.simplify)) echo("Mode: " + str(xArgs.mode)) echo("Compression: " + str(not(xArgs.uncompress))) ### création du répertoire spBuild = BUILD_PATH + '/' + xArgs.verdic dir_util.mkpath(spBuild) ### Lecture des fichiers et création du dictionnaire oFrenchDict = Dictionnaire(xArgs.verdic, "French dictionary") for sFile in ['orthographe/FRANCAIS.dic']: oFrenchDict.readDictionary(sFile) oFrenchDict.readAffixes('orthographe/FRANCAIS_5.aff') ### Contrôle oFrenchDict.sortEntriesNatural() oFrenchDict.checkEntries() ### Lexique oFrenchDict.generateFlexions() oFrenchDict.calcMetagraphe() oFrenchDict.calcMetaphone2() #oFrenchDict.createNgrams(spBuild, 3) if xArgs.spellvariants: oFrenchDict.generateSpellVariants(1, spBuild) ### Statistiques spfStats = spBuild+'/'+STATS_NAME+xArgs.verdic+'.txt' oStatsLex = StatsLex(oFrenchDict) oStatsLex.addLexFromFile('lexique/corpus_data/stats_google_ngram_1.txt', 'G', 'Google 1-grams') oStatsLex.addLexFromFile('lexique/corpus_data/stats_frwiki.txt', 'W', 'Wikipédia') oStatsLex.addLexFromFile('lexique/corpus_data/stats_frwikisource.txt', 'S', 'Wikisource') oStatsLex.addLexFromFile('lexique/corpus_data/stats_litterature.txt', 'L', 'Littérature') oStatsLex.write(spBuild+'/test_lex.txt') oFrenchDict.calculateStats(oStatsLex, spfStats) ### écriture des paquets echo("Création des paquets...") if not xArgs.uncompress: oFrenchDict.defineAbreviatedTags(xArgs.mode, spfStats) oFrenchDict.createFiles(spBuild, [dMODERNE, dTOUTESVAR, dCLASSIQUE, dREFORME1990], xArgs.mode, xArgs.simplify) oFrenchDict.createLibreOfficeExtension(spBuild, dMOZEXT, [dMODERNE, dTOUTESVAR, dCLASSIQUE, dREFORME1990], "../oxt/Dictionnaires/dictionaries") oFrenchDict.createMozillaExtensions(spBuild, dMOZEXT, [dMODERNE, dTOUTESVAR, dCLASSIQUE, dREFORME1990], "../xpi/data/dictionaries") oFrenchDict.createLexiconPackages(spBuild, xArgs.verdic, oStatsLex, "../../../lexicons") oFrenchDict.createFileIfqForDB(spBuild) oFrenchDict.createDictConj(spBuild, "../data") oFrenchDict.createDictDecl(spBuild, "../data") if __name__ == '__main__': main() |
Added gc_lang/fr/dictionnaire/lexique/README_lexique.txt version [bafa49243b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | _______________________________________________________________________________ LEXIQUE FRANÇAIS, LISTE DES FORMES FLÉCHIES version ${version} Olivier R. - dicollecte<at>free<dot>fr Dicollecte: http://www.dicollecte.org/ Licence : * MPL : Mozilla Public License version 2.0 -- http://www.mozilla.org/MPL/2.0/ Pour participer à l’amélioration du lexique, allez sur : http://www.dicollecte.org/home.php?prj=fr _______________________________________________________________________________ NOTE _______________________________________________________________________________ Ce lexique a été généré à partir de la base de données de Dicollecte. Il contient les nouvelles et les anciennes graphies des mots concernés par les rectifications de l’orthographe proposées en 1990 par le Conseil supérieur à la langue française et par l’Académie française. À propos de la réforme orthographique de 1990 : http://www.renouvo.org/regles.php http://www.orthographe-recommandee.info/ _______________________________________________________________________________ |
Added gc_lang/fr/dictionnaire/lexique/corpus_data/_README.txt version [f31acc9237].
> > > > > > | 1 2 3 4 5 6 | Les fichiers de ce dossier sont non versionnés. Préservez leurs noms pour éviter l’inflation du dépôt. frwiki: 2026-10-20 frwikisource: 2016-10-20 Google Ngram 1: 2012 |
Added gc_lang/fr/dictionnaire/lexique/french.tagset.txt version [3f7ce78984].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | ÉTIQUETTES DE GRAMMALECTE http://www.dicollecte.org/grammalecte _______________________________________________________________________________ // NOMS ET ADJECTIFS Nom :N (Loc: Ñ) Adjectif :A (loc: Â) Prénom :M1 Patronyme :M2 Nom propre :MP Nom propre (avec article) :NM [genre] masculin :m [nombre] singulier :s féminin :f pluriel :p épicène :e invariable :i // DIVERS Adverbe :W (loc: Ŵ) Adverbe de négation :X Interjection :J (loc: Ĵ) Nombre cardinal :B Titre :T // VERBES Verbe :V 0 e i t n p m e a (loc: Ṽ) 1 a x x x q x x x 2 _ _ _ _ r _ _ _ 3 s u e x _ ^ ^ ^ ^ ^ ^ ^ ^ ^ | | | | | | | | | groupe (0 = être ou avoir) ____/ | | | | | | | | type de verbe (être, avoir, autre) _______/ | | | | | | | verbe intransifif ? __________/ | | | | | | verbe transitif direct ? _____________/ | | | | | verbe transitif indirect ? ________________/ | | | | verbe pronominal ? ___________________/ | | | p: toujours, r: réciproque, e: avec pronom “en” | | | accord? q: possiblement, s: toujours, u: jamais | | | verbe impersonnel ? ______________________/ | | avec verbe auxilaire être ? _________________________/ | avec verbe auxilaire avoir ? ____________________________/ Infinitif :Y Participe présent :P Participe passé :Q Indicatif présent :Ip 1re personne du singulier :1s (forme interrogative: 1ś ou 1ŝ) Indicatif imparfait :Iq 2e personne du singulier :2s Indicatif passé simple :Is 3e personne du singulier :3s Indicatif futur :If 1re personne du pluriel :1p 2e personne du pluriel :2p Subjonctif présent :Sp 3e personne du pluriel :3p Subjonctif imparfait :Sq Conditionnel :K Impératif :E // MOTS GRAMMATICAUX Mot grammatical :G préposition :R (loc: Ŕ) préposition verbale :Rv conjonction :C (loc: Ĉ) conjonction de coordination :Cc conjonction de subordination :Cs (loc: Ĉs) déterminant :D déterminant possessif :Dp déterminant démonstratif :Dd déterminant indéterminé :Di Adverbe interrogatif :U pronom :O pronom démonstratif :Od pronom indéterminé :Oi pronom interrogatif :Oj pronom relatif :Or pronom de négation :On pronom adverbial :Ow pronom personnel sujet :Os pronom personnel objet :Oo // AUTRES Préfixe :Zp Suffixe :Zs ========== MÉMO ========== :A Adjectif :B Nombre cardinal :C Conjonction :D Déterminant :E Impératif (verbe) :F :G Mot grammatical :H <Hors-norme> :I Indicatif (verbe) :J Interjection :K Conditionnel (verbe) :L Locution :M Nom propre (sans article) :N Nom :O Pronom :P Participe présent (verbe) :Q Participe passé (verbe) :R Préposition :S Subjonctif (verbe) :T Titre :U Adverbe interrogatif :V Verbe (quelle que soit la forme) :W Adverbe :X Adverbe de négation :Y Infinitif (verbe) :Z Préfixe ou suffixe :1 1re personne (verbe) :2 2e personne (verbe) :3 3e personne (verbe) :e épicène :f féminin :i invariable :m masculin :p pluriel :s singulier |
Added gc_lang/fr/dictionnaire/metagraphe.py version [47f74994c2].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | #! python3 # # Metagraphe # # By Olivier R. - 2013 import re import unicodedata # Dictionnaire des caractères pour la phonétique PHMAP = str.maketrans({ 'à': 'a', 'â': 'a', 'ä': 'a', 'å': 'a', 'ā': 'a', 'ç': 'S', 'é': 'é', 'è': 'é', 'ê': 'é', 'ë': 'é', 'ē': 'é', 'î': 'i', 'ï': 'i', 'ī': 'i', 'ñ': 'ni', 'ô': 'o', 'ö': 'o', 'ō': 'o', 'ù': 'u', 'û': 'u', 'ü': 'u', 'ū': 'u', 'ÿ': 'i', 'æ': 'é' }) def getPhonex (s, sMorph): "returns a simplified phonetic string" s = s.lower().translate(PHMAP) if re.match("[A-Z0-9]+$", s) or len(s) == 1: return s else: s = re.sub("sc(?=[eéiy])", "S", s) s = re.sub("x[cs](?=[eéiy])", "kS", s) s = re.sub("c(?=[eéiy])", "S", s) s = re.sub("c(?=[auoœ])", "k", s) s = re.sub("ge(?=[ao])", "j", s) s = re.sub("g(?=[ieéy])", "j", s) s = re.sub("gue", "ge", s) s = re.sub("am(?=[bp])", "â", s) s = re.sub("om(?=[bpt])", "ô", s) s = re.sub("omp(?=t)", "ô", s) s = re.sub("[iy]m(?=[bp])", "1", s) s = re.sub("eill", "éY", s) s = re.sub("aill", "aY", s) s = re.sub("[ae]y(?=[aeéi])", "éY", s) s = re.sub("^s", "S", s) s = re.sub("(?<=[aeioéu])s(?=[aeioéu])", "z", s) if sMorph.startswith("v"): s = re.sub("aient$", "é", s) s = re.sub("ent$", "", s) s = re.sub("ant$", "â", s) s = re.sub("a[st]$", "a", s) s = re.sub("ai[ets]$", "é", s) s = re.sub("ez$", "é", s) s = re.sub("on[st]?$", "ô", s) s = re.sub("es?$", "", s) s = re.sub("ée?s?$", "é", s) s = re.sub("ie?s?$", "i", s) s = re.sub("ue?s?$", "u", s) s = re.sub("ui[ts]$", "ui", s) s = re.sub("aut$", "o", s) s = re.sub("ut$", "u", s) s = re.sub("it?s?$", "i", s) if sMorph.startswith("nom") or sMorph.startswith("adj"): if "pl" in sMorph: s = re.sub("[sx]$", "", s) s = re.sub("tion$", "Siô", s) s = re.sub("ent$", "â", s) s = re.sub("eux$", "2", s) s = re.sub("eaux$", "o", s) s = re.sub("e[rt]$", "é", s) s = re.sub("[ea]ine$", "én", s) s = re.sub("at$", "a", s) s = re.sub("on(?=[bcdfghjklmpqrsStvwxz])", "ô", s) s = re.sub("an[st]?$", "â", s) s = re.sub("an(?=[bcdfghjklmpqrsStvwxz])", "â", s) s = re.sub("iens?$", "i1", s) s = re.sub("(?<!i)ens?$", "â", s) s = re.sub("en(?=[bcdfghjklmpqrsStvwxz])", "â", s) s = re.sub("uns?$", "1", s) s = re.sub("un(?=[bcdfghjklmpqrsStvwxz])", "1", s) s = re.sub("ins?$", "1", s) s = re.sub("a?in(?=[bcdfghjklmpqrsStvwxz])", "1", s) s = re.sub("œu?", "2", s) s = re.sub("eux?$", "2", s) s = re.sub("eu(?=[bcdfghjklmpqrsStvwxz])", "2", s) s = re.sub("e(?=ss|tt|rr|ll|ff)", "é", s) s = re.sub("enne$", "én", s) s = re.sub("e?au", "o", s) s = re.sub("che$", "ç", s) s = re.sub("[ae]i", "é", s) s = s.replace("ou", "û") s = s.replace("ss", "S") s = s.replace("dj", "j") s = s.replace("th", "t") s = re.sub("[qc]u?", "k", s) s = s.replace("ch", "k") s = s.replace("ph", "f") s = s.replace("h", "") s = s.replace("y", "i") s = s.replace("æ", "é") s = s.replace("x", "ks") if len(s) > 3: s = re.sub("es$", "", s) if len(s) > 2: s = re.sub("e$", "", s) s = re.sub("(\\w)\\1", "\\1", s) return s def getGraphix (s): "returns a simplified spelling" return '' def getMetagraphe (s, sMorph): return (getPhonex(s, sMorph), getGraphix(s)) if __name__ == '__main__': import doctest doctest.testmod() |
Added gc_lang/fr/dictionnaire/metaphone2.py version [c35df7b737].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 | #! python3 # -*- coding: UTF-8 -*- # This script implements the Double Metaphone algorithm (c) 1998, 1999 by Lawrence Philips # it was translated to Python from the C source written by Kevin Atkinson (http://aspell.net/metaphone/) # By Andrew Collins - January 12, 2007 who claims no rights to this work # http://atomboy.isa-geek.com/plone/Members/acoil/programing/double-metaphone # Tested with Python 2.4.3 # Updated Feb 14, 2007 - Found a typo in the 'gh' section # Updated Dec 17, 2007 - Bugs fixed in 'S', 'Z', and 'J' sections. Thanks Chris Leong! # Updated 2009-03-05 by Matthew Somerville - Various bug fixes against the reference C++ implementation. """ >>> dm(u'aubrey') ('APR', '') >>> dm(u'richard') ('RXRT', 'RKRT') >>> dm(u'katherine') == dm(u'catherine') True >>> dm(u'Bartoš'), dm(u'Bartosz'), dm(u'Bartosch'), dm(u'Bartos') (('PRT', ''), ('PRTS', 'PRTX'), ('PRTX', ''), ('PRTS', '')) """ import unicodedata def dm (st): """dm(string) -> (string, string or '') returns the double metaphone codes for given string - always a tuple there are no checks done on the input string, but it should be a single word or name.""" vowels = ['A', 'E', 'I', 'O', 'U', 'Y'] st = ''.join((c for c in unicodedata.normalize('NFD', st) if unicodedata.category(c) != 'Mn')) st = st.upper() # st is short for string. I usually prefer descriptive over short, but this var is used a lot! is_slavo_germanic = (st.find('W') > -1 or st.find('K') > -1 or st.find('CZ') > -1 or st.find('WITZ') > -1) length = len(st) first = 2 st = '-' * first + st + '------' # so we can index beyond the begining and end of the input string last = first + length - 1 pos = first # pos is short for position pri = sec = '' # primary and secondary metaphone codes # skip these silent letters when at start of word if st[first:first + 2] in ["GN", "KN", "PN", "WR", "PS"]: pos += 1 # Initial 'X' is pronounced 'Z' e.g. 'Xavier' if st[first] == 'X': pri = sec = 'S' # 'Z' maps to 'S' pos += 1 # main loop through chars in st while pos <= last: #print str(pos) + '\t' + st[pos] ch = st[pos] # ch is short for character # nxt (short for next characters in metaphone code) is set to a tuple of the next characters in # the primary and secondary codes and how many characters to move forward in the string. # the secondary code letter is given only when it is different than the primary. # This is just a trick to make the code easier to write and read. nxt = (None, 1) # default action is to add nothing and move to next char if ch in vowels: nxt = (None, 1) if pos == first: # all init vowels now map to 'A' nxt = ('A', 1) elif ch == 'B': #"-mb", e.g", "dumb", already skipped over... see 'M' below if st[pos + 1] == 'B': nxt = ('P', 2) else: nxt = ('P', 1) elif ch == 'C': # various germanic if pos > first + 1 and st[pos - 2] not in vowels and st[pos - 1:pos + 2] == 'ACH' and \ st[pos + 2] not in ['I'] and (st[pos + 2] not in ['E'] or st[pos - 2:pos + 4] in ['BACHER', 'MACHER']): nxt = ('K', 2) # special case 'CAESAR' elif pos == first and st[first:first + 6] == 'CAESAR': nxt = ('S', 2) elif st[pos:pos + 4] == 'CHIA': # italian 'chianti' nxt = ('K', 2) elif st[pos:pos + 2] == 'CH': # find 'michael' if pos > first and st[pos:pos + 4] == 'CHAE': nxt = ('K', 'X', 2) elif pos == first and (st[pos + 1:pos + 6] in ['HARAC', 'HARIS'] or \ st[pos + 1:pos + 4] in ["HOR", "HYM", "HIA", "HEM"]) and st[first:first + 5] != 'CHORE': nxt = ('K', 2) #germanic, greek, or otherwise 'ch' for 'kh' sound elif st[first:first + 4] in ['VAN ', 'VON '] or st[first:first + 3] == 'SCH' \ or st[pos - 2:pos + 4] in ["ORCHES", "ARCHIT", "ORCHID"] \ or st[pos + 2] in ['T', 'S'] \ or ((st[pos - 1] in ["A", "O", "U", "E"] or pos == first) \ and st[pos + 2] in ["L", "R", "N", "M", "B", "H", "F", "V", "W"]): nxt = ('K', 2) else: if pos > first: if st[first:first + 2] == 'MC': nxt = ('K', 2) else: nxt = ('X', 'K', 2) else: nxt = ('X', 2) # e.g, 'czerny' elif st[pos:pos + 2] == 'CZ' and st[pos - 2:pos + 2] != 'WICZ': nxt = ('S', 'X', 2) # e.g., 'focaccia' elif st[pos + 1:pos + 4] == 'CIA': nxt = ('X', 3) # double 'C', but not if e.g. 'McClellan' elif st[pos:pos + 2] == 'CC' and not (pos == (first + 1) and st[first] == 'M'): #'bellocchio' but not 'bacchus' if st[pos + 2] in ["I", "E", "H"] and st[pos + 2:pos + 4] != 'HU': # 'accident', 'accede' 'succeed' if (pos == (first + 1) and st[first] == 'A') or \ st[pos - 1:pos + 4] in ['UCCEE', 'UCCES']: nxt = ('KS', 3) # 'bacci', 'bertucci', other italian else: nxt = ('X', 3) else: nxt = ('K', 2) elif st[pos:pos + 2] in ["CK", "CG", "CQ"]: nxt = ('K', 2) elif st[pos:pos + 2] in ["CI", "CE", "CY"]: # italian vs. english if st[pos:pos + 3] in ["CIO", "CIE", "CIA"]: nxt = ('S', 'X', 2) else: nxt = ('S', 2) else: # name sent in 'mac caffrey', 'mac gregor if st[pos + 1:pos + 3] in [" C", " Q", " G"]: nxt = ('K', 3) else: if st[pos + 1] in ["C", "K", "Q"] and st[pos + 1:pos + 3] not in ["CE", "CI"]: nxt = ('K', 2) else: # default for 'C' nxt = ('K', 1) elif ch == u'\xc7': # will never get here with st.encode('ascii', 'replace') above # \xc7 is UTF-8 encoding of Ç nxt = ('S', 1) elif ch == 'D': if st[pos:pos + 2] == 'DG': if st[pos + 2] in ['I', 'E', 'Y']: # e.g. 'edge' nxt = ('J', 3) else: nxt = ('TK', 2) elif st[pos:pos + 2] in ['DT', 'DD']: nxt = ('T', 2) else: nxt = ('T', 1) elif ch == 'F': if st[pos + 1] == 'F': nxt = ('F', 2) else: nxt = ('F', 1) elif ch == 'G': if st[pos + 1] == 'H': if pos > first and st[pos - 1] not in vowels: nxt = ('K', 2) elif pos < (first + 3): if pos == first: # 'ghislane', ghiradelli if st[pos + 2] == 'I': nxt = ('J', 2) else: nxt = ('K', 2) # Parker's rule (with some further refinements) - e.g., 'hugh' elif (pos > (first + 1) and st[pos - 2] in ['B', 'H', 'D']) \ or (pos > (first + 2) and st[pos - 3] in ['B', 'H', 'D']) \ or (pos > (first + 3) and st[pos - 3] in ['B', 'H']): nxt = (None, 2) else: # e.g., 'laugh', 'McLaughlin', 'cough', 'gough', 'rough', 'tough' if pos > (first + 2) and st[pos - 1] == 'U' \ and st[pos - 3] in ["C", "G", "L", "R", "T"]: nxt = ('F', 2) else: if pos > first and st[pos - 1] != 'I': nxt = ('K', 2) elif st[pos + 1] == 'N': if pos == (first + 1) and st[first] in vowels and not is_slavo_germanic: nxt = ('KN', 'N', 2) else: # not e.g. 'cagney' if st[pos + 2:pos + 4] != 'EY' and st[pos + 1] != 'Y' and not is_slavo_germanic: nxt = ('N', 'KN', 2) else: nxt = ('KN', 2) # 'tagliaro' elif st[pos + 1:pos + 3] == 'LI' and not is_slavo_germanic: nxt = ('KL', 'L', 2) # -ges-,-gep-,-gel-, -gie- at beginning elif pos == first and (st[pos + 1] == 'Y' \ or st[pos + 1:pos + 3] in ["ES", "EP", "EB", "EL", "EY", "IB", "IL", "IN", "IE", "EI", "ER"]): nxt = ('K', 'J', 2) # -ger-, -gy- elif (st[pos + 1:pos + 3] == 'ER' or st[pos + 1] == 'Y') \ and st[first:first + 6] not in ["DANGER", "RANGER", "MANGER"] \ and st[pos - 1] not in ['E', 'I'] and st[pos - 1:pos + 2] not in ['RGY', 'OGY']: nxt = ('K', 'J', 2) # italian e.g, 'biaggi' elif st[pos + 1] in ['E', 'I', 'Y'] or st[pos - 1:pos + 3] in ["AGGI", "OGGI"]: # obvious germanic if st[first:first + 4] in ['VON ', 'VAN '] or st[first:first + 3] == 'SCH' \ or st[pos + 1:pos + 3] == 'ET': nxt = ('K', 2) else: # always soft if french ending if st[pos + 1:pos + 5] == 'IER ': nxt = ('J', 2) else: nxt = ('J', 'K', 2) elif st[pos + 1] == 'G': nxt = ('K', 2) else: nxt = ('K', 1) elif ch == 'H': # only keep if first & before vowel or btw. 2 vowels if (pos == first or st[pos - 1] in vowels) and st[pos + 1] in vowels: nxt = ('H', 2) else: # (also takes care of 'HH') nxt = (None, 1) elif ch == 'J': # obvious spanish, 'jose', 'san jacinto' if st[pos:pos + 4] == 'JOSE' or st[first:first + 4] == 'SAN ': if (pos == first and st[pos + 4] == ' ') or st[first:first + 4] == 'SAN ': nxt = ('H', ) else: nxt = ('J', 'H') elif pos == first and st[pos:pos + 4] != 'JOSE': nxt = ('J', 'A') # Yankelovich/Jankelowicz else: # spanish pron. of e.g. 'bajador' if st[pos - 1] in vowels and not is_slavo_germanic \ and st[pos + 1] in ['A', 'O']: nxt = ('J', 'H') else: if pos == last: nxt = ('J', ' ') else: if st[pos + 1] not in ["L", "T", "K", "S", "N", "M", "B", "Z"] \ and st[pos - 1] not in ["S", "K", "L"]: nxt = ('J', ) else: nxt = (None, ) if st[pos + 1] == 'J': nxt = nxt + (2, ) else: nxt = nxt + (1, ) elif ch == 'K': if st[pos + 1] == 'K': nxt = ('K', 2) else: nxt = ('K', 1) elif ch == 'L': if st[pos + 1] == 'L': # spanish e.g. 'cabrillo', 'gallegos' if (pos == (last - 2) and st[pos - 1:pos + 3] in ["ILLO", "ILLA", "ALLE"]) \ or ((st[last - 1:last + 1] in ["AS", "OS"] or st[last] in ["A", "O"]) \ and st[pos - 1:pos + 3] == 'ALLE'): nxt = ('L', ' ', 2) else: nxt = ('L', 2) else: nxt = ('L', 1) elif ch == 'M': if (st[pos + 1:pos + 4] == 'UMB' \ and (pos + 1 == last or st[pos + 2:pos + 4] == 'ER')) \ or st[pos + 1] == 'M': nxt = ('M', 2) else: nxt = ('M', 1) elif ch == 'N': if st[pos + 1] == 'N': nxt = ('N', 2) else: nxt = ('N', 1) elif ch == u'\xd1': # UTF-8 encoding of ト nxt = ('N', 1) elif ch == 'P': if st[pos + 1] == 'H': nxt = ('F', 2) elif st[pos + 1] in ['P', 'B']: # also account for "campbell", "raspberry" nxt = ('P', 2) else: nxt = ('P', 1) elif ch == 'Q': if st[pos + 1] == 'Q': nxt = ('K', 2) else: nxt = ('K', 1) elif ch == 'R': # french e.g. 'rogier', but exclude 'hochmeier' if pos == last and not is_slavo_germanic \ and st[pos - 2:pos] == 'IE' and st[pos - 4:pos - 2] not in ['ME', 'MA']: nxt = ('', 'R') else: nxt = ('R', ) if st[pos + 1] == 'R': nxt = nxt + (2, ) else: nxt = nxt + (1, ) elif ch == 'S': # special cases 'island', 'isle', 'carlisle', 'carlysle' if st[pos - 1:pos + 2] in ['ISL', 'YSL']: nxt = (None, 1) # special case 'sugar-' elif pos == first and st[first:first + 5] == 'SUGAR': nxt = ('X', 'S', 1) elif st[pos:pos + 2] == 'SH': # germanic if st[pos + 1:pos + 5] in ["HEIM", "HOEK", "HOLM", "HOLZ"]: nxt = ('S', 2) else: nxt = ('X', 2) # italian & armenian elif st[pos:pos + 3] in ["SIO", "SIA"] or st[pos:pos + 4] == 'SIAN': if not is_slavo_germanic: nxt = ('S', 'X', 3) else: nxt = ('S', 3) # german & anglicisations, e.g. 'smith' match 'schmidt', 'snider' match 'schneider' # also, -sz- in slavic language altho in hungarian it is pronounced 's' elif (pos == first and st[pos + 1] in ["M", "N", "L", "W"]) or st[pos + 1] == 'Z': nxt = ('S', 'X') if st[pos + 1] == 'Z': nxt = nxt + (2, ) else: nxt = nxt + (1, ) elif st[pos:pos + 2] == 'SC': # Schlesinger's rule if st[pos + 2] == 'H': # dutch origin, e.g. 'school', 'schooner' if st[pos + 3:pos + 5] in ["OO", "ER", "EN", "UY", "ED", "EM"]: # 'schermerhorn', 'schenker' if st[pos + 3:pos + 5] in ['ER', 'EN']: nxt = ('X', 'SK', 3) else: nxt = ('SK', 3) else: if pos == first and st[first + 3] not in vowels and st[first + 3] != 'W': nxt = ('X', 'S', 3) else: nxt = ('X', 3) elif st[pos + 2] in ['I', 'E', 'Y']: nxt = ('S', 3) else: nxt = ('SK', 3) # french e.g. 'resnais', 'artois' elif pos == last and st[pos - 2:pos] in ['AI', 'OI']: nxt = ('', 'S', 1) else: nxt = ('S', ) if st[pos + 1] in ['S', 'Z']: nxt = nxt + (2, ) else: nxt = nxt + (1, ) elif ch == 'T': if st[pos:pos + 4] == 'TION': nxt = ('X', 3) elif st[pos:pos + 3] in ['TIA', 'TCH']: nxt = ('X', 3) elif st[pos:pos + 2] == 'TH' or st[pos:pos + 3] == 'TTH': # special case 'thomas', 'thames' or germanic if st[pos + 2:pos + 4] in ['OM', 'AM'] or st[first:first + 4] in ['VON ', 'VAN '] \ or st[first:first + 3] == 'SCH': nxt = ('T', 2) else: nxt = ('0', 'T', 2) elif st[pos + 1] in ['T', 'D']: nxt = ('T', 2) else: nxt = ('T', 1) elif ch == 'V': if st[pos + 1] == 'V': nxt = ('F', 2) else: nxt = ('F', 1) elif ch == 'W': # can also be in middle of word if st[pos:pos + 2] == 'WR': nxt = ('R', 2) elif pos == first and (st[pos + 1] in vowels or st[pos:pos + 2] == 'WH'): # Wasserman should match Vasserman if st[pos + 1] in vowels: nxt = ('A', 'F', 1) else: nxt = ('A', 1) # Arnow should match Arnoff elif (pos == last and st[pos - 1] in vowels) \ or st[pos - 1:pos + 4] in ["EWSKI", "EWSKY", "OWSKI", "OWSKY"] \ or st[first:first + 3] == 'SCH': nxt = ('', 'F', 1) # polish e.g. 'filipowicz' elif st[pos:pos + 4] in ["WICZ", "WITZ"]: nxt = ('TS', 'FX', 4) else: # default is to skip it nxt = (None, 1) elif ch == 'X': # french e.g. breaux nxt = (None, ) if not(pos == last and (st[pos - 3:pos] in ["IAU", "EAU"] \ or st[pos - 2:pos] in ['AU', 'OU'])): nxt = ('KS', ) if st[pos + 1] in ['C', 'X']: nxt = nxt + (2, ) else: nxt = nxt + (1, ) elif ch == 'Z': # chinese pinyin e.g. 'zhao' if st[pos + 1] == 'H': nxt = ('J', ) elif st[pos + 1:pos + 3] in ["ZO", "ZI", "ZA"] \ or (is_slavo_germanic and pos > first and st[pos - 1] != 'T'): nxt = ('S', 'TS') else: nxt = ('S', ) if st[pos + 1] == 'Z' or st[pos + 1] == 'H': nxt = nxt + (2, ) else: nxt = nxt + (1, ) # ---------------------------------- # --- end checking letters------ # ---------------------------------- #print str(nxt) if len(nxt) == 2: if nxt[0]: pri += nxt[0] sec += nxt[0] pos += nxt[1] elif len(nxt) == 3: if nxt[0]: pri += nxt[0] if nxt[1]: sec += nxt[1] pos += nxt[2] if pri == sec: return (pri, '') else: return (pri, sec) if __name__ == '__main__': import doctest doctest.testmod() |
Added gc_lang/fr/dictionnaire/metaphone3.java version [949c1c21a9].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 | /* Copyright 2010, Lawrence Philips All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * A request from the author: Please comment and sign any changes you make to the Metaphone 3 reference implementation. */ /** * Metaphone 3<br> * VERSION 2.1.3 * * by Lawrence Philips<br> * * Metaphone 3 is designed to return an *approximate* phonetic key (and an alternate * approximate phonetic key when appropriate) that should be the same for English * words, and most names familiar in the United States, that are pronounced *similarly*. * The key value is *not* intended to be an *exact* phonetic, or even phonemic, * representation of the word. This is because a certain degree of 'fuzziness' has * proven to be useful in compensating for variations in pronunciation, as well as * misheard pronunciations. For example, although americans are not usually aware of it, * the letter 's' is normally pronounced 'z' at the end of words such as "sounds".<br><br> * * The 'approximate' aspect of the encoding is implemented according to the following rules:<br><br> * * (1) All vowels are encoded to the same value - 'A'. If the parameter encodeVowels * is set to false, only *initial* vowels will be encoded at all. If encodeVowels is set * to true, 'A' will be encoded at all places in the word that any vowels are normally * pronounced. 'W' as well as 'Y' are treated as vowels. Although there are differences in * the pronunciation of 'W' and 'Y' in different circumstances that lead to their being * classified as vowels under some circumstances and as consonants in others, for the purposes * of the 'fuzziness' component of the Soundex and Metaphone family of algorithms they will * be always be treated here as vowels.<br><br> * * (2) Voiced and un-voiced consonant pairs are mapped to the same encoded value. This * means that:<br> * 'D' and 'T' -> 'T'<br> * 'B' and 'P' -> 'P'<br> * 'G' and 'K' -> 'K'<br> * 'Z' and 'S' -> 'S'<br> * 'V' and 'F' -> 'F'<br><br> * * - In addition to the above voiced/unvoiced rules, 'CH' and 'SH' -> 'X', where 'X' * represents the "-SH-" and "-CH-" sounds in Metaphone 3 encoding.<br><br> * * - Also, the sound that is spelled as "TH" in English is encoded to '0' (zero symbol). (Although * Americans are not usually aware of it, "TH" is pronounced in a voiced (e.g. "that") as * well as an unvoiced (e.g. "theater") form, which are naturally mapped to the same encoding.)<br><br> * * The encodings in this version of Metaphone 3 are according to pronunciations common in the * United States. This means that they will be inaccurate for consonant pronunciations that * are different in the United Kingdom, for example "tube" -> "CHOOBE" -> XAP rather than american TAP.<br><br> * * Metaphone 3 was preceded by by Soundex, patented in 1919, and Metaphone and Double Metaphone, * developed by Lawrence Philips. All of these algorithms resulted in a significant number of * incorrect encodings. Metaphone3 was tested against a database of about 100 thousand English words, * names common in the United States, and non-English words found in publications in the United States, * with an emphasis on words that are commonly mispronounced, prepared by the Moby Words website, * but with the Moby Words 'phonetic' encodings algorithmically mapped to Double Metaphone encodings. * Metaphone3 increases the accuracy of encoding of english words, common names, and non-English * words found in american publications from the 89% for Double Metaphone, to over 98%.<br><br> * * DISCLAIMER: * Anthropomorphic Software LLC claims only that Metaphone 3 will return correct encodings, * within the 'fuzzy' definition of correct as above, for a very high percentage of correctly * spelled English and commonly recognized non-English words. Anthropomorphic Software LLC * warns the user that a number of words remain incorrectly encoded, that misspellings may not * be encoded 'properly', and that people often have differing ideas about the pronunciation * of a word. Therefore, Metaphone 3 is not guaranteed to return correct results every time, and * so a desired target word may very well be missed. Creators of commercial products should * keep in mind that systems like Metaphone 3 produce a 'best guess' result, and should * condition the expectations of end users accordingly.<br><br> * * METAPHONE3 IS PROVIDED "AS IS" WITHOUT * WARRANTY OF ANY KIND. LAWRENCE PHILIPS AND ANTHROPOMORPHIC SOFTWARE LLC * MAKE NO WARRANTIES, EXPRESS OR IMPLIED, THAT IT IS FREE OF ERROR, * OR ARE CONSISTENT WITH ANY PARTICULAR STANDARD OF MERCHANTABILITY, * OR THAT IT WILL MEET YOUR REQUIREMENTS FOR ANY PARTICULAR APPLICATION. * LAWRENCE PHILIPS AND ANTHROPOMORPHIC SOFTWARE LLC DISCLAIM ALL LIABILITY * FOR DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES RESULTING FROM USE * OF THIS SOFTWARE. * * @author Lawrence Philips * * Metaphone 3 is designed to return an <i>approximate</i> phonetic key (and an alternate * approximate phonetic key when appropriate) that should be the same for English * words, and most names familiar in the United States, that are pronounced "similarly". * The key value is <i>not</i> intended to be an exact phonetic, or even phonemic, * representation of the word. This is because a certain degree of 'fuzziness' has * proven to be useful in compensating for variations in pronunciation, as well as * misheard pronunciations. For example, although americans are not usually aware of it, * the letter 's' is normally pronounced 'z' at the end of words such as "sounds".<br><br> * * The 'approximate' aspect of the encoding is implemented according to the following rules:<br><br> * * (1) All vowels are encoded to the same value - 'A'. If the parameter encodeVowels * is set to false, only *initial* vowels will be encoded at all. If encodeVowels is set * to true, 'A' will be encoded at all places in the word that any vowels are normally * pronounced. 'W' as well as 'Y' are treated as vowels. Although there are differences in * the pronunciation of 'W' and 'Y' in different circumstances that lead to their being * classified as vowels under some circumstances and as consonants in others, for the purposes * of the 'fuzziness' component of the Soundex and Metaphone family of algorithms they will * be always be treated here as vowels.<br><br> * * (2) Voiced and un-voiced consonant pairs are mapped to the same encoded value. This * means that:<br> * 'D' and 'T' -> 'T'<br> * 'B' and 'P' -> 'P'<br> * 'G' and 'K' -> 'K'<br> * 'Z' and 'S' -> 'S'<br> * 'V' and 'F' -> 'F'<br><br> * * - In addition to the above voiced/unvoiced rules, 'CH' and 'SH' -> 'X', where 'X' * represents the "-SH-" and "-CH-" sounds in Metaphone 3 encoding.<br><br> * * - Also, the sound that is spelled as "TH" in English is encoded to '0' (zero symbol). (Although * americans are not usually aware of it, "TH" is pronounced in a voiced (e.g. "that") as * well as an unvoiced (e.g. "theater") form, which are naturally mapped to the same encoding.)<br><br> * * In the "Exact" encoding, voiced/unvoiced pairs are <i>not</i> mapped to the same encoding, except * for the voiced and unvoiced versions of 'TH', sounds such as 'CH' and 'SH', and for 'S' and 'Z', * so that the words whose metaph keys match will in fact be closer in pronunciation that with the * more approximate setting. Keep in mind that encoding settings for search strings should always * be exactly the same as the encoding settings of the stored metaph keys in your database! * Because of the considerably increased accuracy of Metaphone3, it is now possible to use this * setting and have a very good chance of getting a correct encoding. * <br><br> * In the Encode Vowels encoding, all non-initial vowels and diphthongs will be encoded to * 'A', and there will only be one such vowel encoding character between any two consonants. * It turns out that there are some surprising wrinkles to encoding non-initial vowels in * practice, pre-eminently in inversions between spelling and pronunciation such as e.g. * "wrinkle" => 'RANKAL', where the last two sounds are inverted when spelled. * <br><br> * The encodings in this version of Metaphone 3 are according to pronunciations common in the * United States. This means that they will be inaccurate for consonant pronunciations that * are different in the United Kingdom, for example "tube" -> "CHOOBE" -> XAP rather than american TAP. * <br><br> * */ package com.google.refine.clustering.binning; public class Metaphone3 { /** Length of word sent in to be encoded, as * measured at beginning of encoding. */ int m_length; /** Length of encoded key string. */ int m_metaphLength; /** Flag whether or not to encode non-initial vowels. */ boolean m_encodeVowels; /** Flag whether or not to encode consonants as exactly * as possible. */ boolean m_encodeExact; /** Internal copy of word to be encoded, allocated separately * from string pointed to in incoming parameter. */ String m_inWord; /** Running copy of primary key. */ StringBuffer m_primary; /** Running copy of secondary key. */ StringBuffer m_secondary; /** Index of character in m_inWord currently being * encoded. */ int m_current; /** Index of last character in m_inWord. */ int m_last; /** Flag that an AL inversion has already been done. */ boolean flag_AL_inversion; /** Default size of key storage allocation */ int MAX_KEY_ALLOCATION = 32; /** Default maximum length of encoded key. */ int DEFAULT_MAX_KEY_LENGTH = 8; //////////////////////////////////////////////////////////////////////////////// // Metaphone3 class definition //////////////////////////////////////////////////////////////////////////////// /** * Constructor, default. This constructor is most convenient when * encoding more than one word at a time. New words to encode can * be set using SetWord(char *). * */ Metaphone3() { m_primary = new StringBuffer(); m_secondary = new StringBuffer(); m_metaphLength = DEFAULT_MAX_KEY_LENGTH; m_encodeVowels = false; m_encodeExact = false; } /** * Constructor, parameterized. The Metaphone3 object will * be initialized with the incoming string, and can be called * on to encode this string. This constructor is most convenient * when only one word needs to be encoded. * * @param in pointer to char string of word to be encoded. * */ Metaphone3(String in) { this(); SetWord(in); } /** * Sets word to be encoded. * * @param in pointer to EXTERNALLY ALLOCATED char string of * the word to be encoded. * */ void SetWord(String in) { m_inWord = in.toUpperCase();; m_length = m_inWord.length(); } /** * Sets length allocated for output keys. * If incoming number is greater than maximum allowable * length returned by GetMaximumKeyLength(), set key length * to maximum key length and return false; otherwise, set key * length to parameter value and return true. * * @param inKeyLength new length of key. * @return true if able to set key length to requested value. * */ boolean SetKeyLength(int inKeyLength) { if(inKeyLength < 1) { // can't have that - // no room for terminating null inKeyLength = 1; } if(inKeyLength > MAX_KEY_ALLOCATION) { m_metaphLength = MAX_KEY_ALLOCATION; return false; } m_metaphLength = inKeyLength; return true; } /** * Adds an encoding character to the encoded key value string - one parameter version. * * @param main primary encoding character to be added to encoded key string. */ void MetaphAdd(String in) { if(!(in.equals("A") && (m_primary.length() > 0) && (m_primary.charAt(m_primary.length() - 1) == 'A'))) { m_primary.append(in); } if(!(in.equals("A") && (m_secondary.length() > 0) && (m_secondary.charAt(m_secondary.length() - 1) == 'A'))) { m_secondary.append(in); } } /** * Adds an encoding character to the encoded key value string - two parameter version * * @param main primary encoding character to be added to encoded key string * @param alt alternative encoding character to be added to encoded alternative key string * */ void MetaphAdd(String main, String alt) { if(!(main.equals("A") && (m_primary.length() > 0) && (m_primary.charAt(m_primary.length() - 1) == 'A'))) { m_primary.append(main); } if(!(alt.equals("A") && (m_secondary.length() > 0) && (m_secondary.charAt(m_secondary.length() - 1) == 'A'))) { if(!alt.isEmpty()) { m_secondary.append(alt); } } } /** * Adds an encoding character to the encoded key value string - Exact/Approx version * * @param mainExact primary encoding character to be added to encoded key string if * m_encodeExact is set * * @param altExact alternative encoding character to be added to encoded alternative * key string if m_encodeExact is set * * @param main primary encoding character to be added to encoded key string * * @param alt alternative encoding character to be added to encoded alternative key string * */ void MetaphAddExactApprox(String mainExact, String altExact, String main, String alt) { if(m_encodeExact) { MetaphAdd(mainExact, altExact); } else { MetaphAdd(main, alt); } } /** * Adds an encoding character to the encoded key value string - Exact/Approx version * * @param mainExact primary encoding character to be added to encoded key string if * m_encodeExact is set * * @param main primary encoding character to be added to encoded key string * */ void MetaphAddExactApprox(String mainExact, String main) { if(m_encodeExact) { MetaphAdd(mainExact); } else { MetaphAdd(main); } } /** Retrieves maximum number of characters currently allocated for encoded key. * * @return short integer representing the length allowed for the key. */ int GetKeyLength(){return m_metaphLength;} /** Retrieves maximum number of characters allowed for encoded key. * * @return short integer representing the length of allocated storage for the key. */ int GetMaximumKeyLength(){return (int)MAX_KEY_ALLOCATION;} /** Sets flag that causes Metaphone3 to encode non-initial vowels. However, even * if there are more than one vowel sound in a vowel sequence (i.e. * vowel diphthong, etc.), only one 'A' will be encoded before the next consonant or the * end of the word. * * @param inEncodeVowels Non-initial vowels encoded if true, not if false. */ void SetEncodeVowels(boolean inEncodeVowels){m_encodeVowels = inEncodeVowels;} /** Retrieves setting determining whether or not non-initial vowels will be encoded. * * @return true if the Metaphone3 object has been set to encode non-initial vowels, false if not. */ boolean GetEncodeVowels(){return m_encodeVowels;} /** Sets flag that causes Metaphone3 to encode consonants as exactly as possible. * This does not include 'S' vs. 'Z', since americans will pronounce 'S' at the * at the end of many words as 'Z', nor does it include "CH" vs. "SH". It does cause * a distinction to be made between 'B' and 'P', 'D' and 'T', 'G' and 'K', and 'V' * and 'F'. * * @param inEncodeExact consonants to be encoded "exactly" if true, not if false. */ void SetEncodeExact(boolean inEncodeExact){m_encodeExact = inEncodeExact;} /** Retrieves setting determining whether or not consonants will be encoded "exactly". * * @return true if the Metaphone3 object has been set to encode "exactly", false if not. */ boolean GetEncodeExact(){return m_encodeExact;} /** Retrieves primary encoded key. * * @return a character pointer to the primary encoded key */ String GetMetaph() { String primary = new String(m_primary); return primary; } /** Retrieves alternate encoded key, if any. * * @return a character pointer to the alternate encoded key */ String GetAlternateMetaph() { String secondary = new String(m_secondary); return secondary; } /** * Test for close front vowels * * @return true if close front vowel */ boolean Front_Vowel(int at) { if(((CharAt(at) == 'E') || (CharAt(at) == 'I') || (CharAt(at) == 'Y'))) { return true; } return false; } /** * Detect names or words that begin with spellings * typical of german or slavic words, for the purpose * of choosing alternate pronunciations correctly * */ boolean SlavoGermanic() { if(StringAt(0, 3, "SCH", "") || StringAt(0, 2, "SW", "") || (CharAt(0) == 'J') || (CharAt(0) == 'W')) { return true; } return false; } /** * Tests if character is a vowel * * @param inChar character to be tested in string to be encoded * @return true if character is a vowel, false if not * */ boolean IsVowel(char inChar) { if((inChar == 'A') || (inChar == 'E') || (inChar == 'I') || (inChar == 'O') || (inChar == 'U') || (inChar == 'Y') || (inChar == 'À') || (inChar == 'Á') || (inChar == 'Â') || (inChar == 'Ã') || (inChar == 'Ä') || (inChar == 'Å') || (inChar == 'Æ') || (inChar == 'È') || (inChar == 'É') || (inChar == 'Ê') || (inChar == 'Ë') || (inChar == 'Ì') || (inChar == 'Í') || (inChar == 'Î') || (inChar == 'Ï') || (inChar == 'Ò') || (inChar == 'Ó') || (inChar == 'Ô') || (inChar == 'Õ') || (inChar == 'Ö') || (inChar == 'Œ') || (inChar == 'Ø') || (inChar == 'Ù') || (inChar == 'Ú') || (inChar == 'Û') || (inChar == 'Ü') || (inChar == 'Ý') || (inChar == 'Ÿ')) { return true; } return false; } /** * Tests if character in the input string is a vowel * * @param at position of character to be tested in string to be encoded * @return true if character is a vowel, false if not * */ boolean IsVowel(int at) { if((at < 0) || (at >= m_length)) { return false; } char it = CharAt(at); if(IsVowel(it)) { return true; } return false; } /** * Skips over vowels in a string. Has exceptions for skipping consonants that * will not be encoded. * * @param at position, in string to be encoded, of character to start skipping from * * @return position of next consonant in string to be encoded */ int SkipVowels(int at) { if(at < 0) { return 0; } if(at >= m_length) { return m_length; } char it = CharAt(at); while(IsVowel(it) || (it == 'W')) { if(StringAt(at, 4, "WICZ", "WITZ", "WIAK", "") || StringAt((at - 1), 5, "EWSKI", "EWSKY", "OWSKI", "OWSKY", "") || (StringAt(at, 5, "WICKI", "WACKI", "") && ((at + 4) == m_last))) { break; } at++; if(((CharAt(at - 1) == 'W') && (CharAt(at) == 'H')) && !(StringAt(at, 3, "HOP", "") || StringAt(at, 4, "HIDE", "HARD", "HEAD", "HAWK", "HERD", "HOOK", "HAND", "HOLE", "") || StringAt(at, 5, "HEART", "HOUSE", "HOUND", "") || StringAt(at, 6, "HAMMER", ""))) { at++; } if(at > (m_length - 1)) { break; } it = CharAt(at); } return at; } /** * Advanced counter m_current so that it indexes the next character to be encoded * * @param ifNotEncodeVowels number of characters to advance if not encoding internal vowels * @param ifEncodeVowels number of characters to advance if encoding internal vowels * */ void AdvanceCounter(int ifNotEncodeVowels, int ifEncodeVowels) { if(!m_encodeVowels) { m_current += ifNotEncodeVowels; } else { m_current += ifEncodeVowels; } } /** * Subscript safe .charAt() * * @param at index of character to access * @return null if index out of bounds, .charAt() otherwise */ char CharAt(int at) { // check substring bounds if((at < 0) || (at > (m_length - 1))) { return '\0'; } return m_inWord.charAt(at); } /** * Tests whether the word is the root or a regular english inflection * of it, e.g. "ache", "achy", "aches", "ached", "aching", "achingly" * This is for cases where we want to match only the root and corresponding * inflected forms, and not completely different words which may have the * same substring in them. */ boolean RootOrInflections(String inWord, String root) { int len = root.length(); String test; test = root + "S"; if((inWord.equals(root)) || (inWord.equals(test))) { return true; } if(root.charAt(len - 1) != 'E') { test = root + "ES"; } if(inWord.equals(test)) { return true; } if(root.charAt(len - 1) != 'E') { test = root + "ED"; } else { test = root + "D"; } if(inWord.equals(test)) { return true; } if(root.charAt(len - 1) == 'E') { root = root.substring(0, len - 1); } test = root + "ING"; if(inWord.equals(test)) { return true; } test = root + "INGLY"; if(inWord.equals(test)) { return true; } test = root + "Y"; if(inWord.equals(test)) { return true; } return false; } /** * Determines if one of the substrings sent in is the same as * what is at the specified position in the string being encoded. * * @param start * @param length * @param compareStrings * @return */ boolean StringAt(int start, int length, String... compareStrings) { // check substring bounds if((start < 0) || (start > (m_length - 1)) || ((start + length - 1) > (m_length - 1))) { return false; } String target = m_inWord.substring(start, (start + length)); for(String strFragment : compareStrings) { if(target.equals(strFragment)) { return true; } } return false; } /** * Encodes input string to one or two key values according to Metaphone 3 rules. * */ void Encode() { flag_AL_inversion = false; m_current = 0; m_primary.setLength(0); m_secondary.setLength(0); if(m_length < 1) { return; } //zero based index m_last = m_length - 1; ///////////main loop////////////////////////// while(!(m_primary.length() > m_metaphLength) && !(m_secondary.length() > m_metaphLength)) { if(m_current >= m_length) { break; } switch(CharAt(m_current)) { case 'B': Encode_B(); break; case 'ß': case 'Ç': MetaphAdd("S"); m_current++; break; case 'C': Encode_C(); break; case 'D': Encode_D(); break; case 'F': Encode_F(); break; case 'G': Encode_G(); break; case 'H': Encode_H(); break; case 'J': Encode_J(); break; case 'K': Encode_K(); break; case 'L': Encode_L(); break; case 'M': Encode_M(); break; case 'N': Encode_N(); break; case 'Ñ': MetaphAdd("N"); m_current++; break; case 'P': Encode_P(); break; case 'Q': Encode_Q(); break; case 'R': Encode_R(); break; case 'S': Encode_S(); break; case 'T': Encode_T(); break; case 'Ð': // eth case 'Þ': // thorn MetaphAdd("0"); m_current++; break; case 'V': Encode_V(); break; case 'W': Encode_W(); break; case 'X': Encode_X(); break; case 'Š': MetaphAdd("X"); m_current++; break; case 'Ž': MetaphAdd("S"); m_current++; break; case 'Z': Encode_Z(); break; default: if(IsVowel(CharAt(m_current))) { Encode_Vowels(); break; } m_current++; } } //only give back m_metaphLength number of chars in m_metaph if(m_primary.length() > m_metaphLength) { m_primary.setLength(m_metaphLength); } if(m_secondary.length() > m_metaphLength) { m_secondary.setLength(m_metaphLength); } // it is possible for the two metaphs to be the same // after truncation. lose the second one if so if((m_primary.toString()).equals(m_secondary.toString())) { m_secondary.setLength(0); } } /** * Encodes all initial vowels to A. * * Encodes non-initial vowels to A if m_encodeVowels is true * * */ void Encode_Vowels() { if(m_current == 0) { // all init vowels map to 'A' // as of Double Metaphone MetaphAdd("A"); } else if(m_encodeVowels) { if(CharAt(m_current) != 'E') { if(Skip_Silent_UE()) { return; } if (O_Silent()) { m_current++; return; } // encode all vowels and // diphthongs to the same value MetaphAdd("A"); } else { Encode_E_Pronounced(); } } if(!(!IsVowel(m_current - 2) && StringAt((m_current - 1), 4, "LEWA", "LEWO", "LEWI", ""))) { m_current = SkipVowels(m_current); } else { m_current++; } } /** * Encodes cases where non-initial 'e' is pronounced, taking * care to detect unusual cases from the greek. * * Only executed if non initial vowel encoding is turned on * * */ void Encode_E_Pronounced() { // special cases with two pronunciations // 'agape' 'lame' 'resume' if((StringAt(0, 4, "LAME", "SAKE", "PATE", "") && (m_length == 4)) || (StringAt(0, 5, "AGAPE", "") && (m_length == 5)) || ((m_current == 5) && StringAt(0, 6, "RESUME", ""))) { MetaphAdd("", "A"); return; } // special case "inge" => 'INGA', 'INJ' if(StringAt(0, 4, "INGE", "") && (m_length == 4)) { MetaphAdd("A", ""); return; } // special cases with two pronunciations // special handling due to the difference in // the pronunciation of the '-D' if((m_current == 5) && StringAt(0, 7, "BLESSED", "LEARNED", "")) { MetaphAddExactApprox("D", "AD", "T", "AT"); m_current += 2; return; } // encode all vowels and diphthongs to the same value if((!E_Silent() && !flag_AL_inversion && !Silent_Internal_E()) || E_Pronounced_Exceptions()) { MetaphAdd("A"); } // now that we've visited the vowel in question flag_AL_inversion = false; } /** * Tests for cases where non-initial 'o' is not pronounced * Only executed if non initial vowel encoding is turned on * * @return true if encoded as silent - no addition to m_metaph key * */ boolean O_Silent() { // if "iron" at beginning or end of word and not "irony" if ((CharAt(m_current) == 'O') && StringAt((m_current - 2), 4, "IRON", "")) { if ((StringAt(0, 4, "IRON", "") || (StringAt((m_current - 2), 4, "IRON", "") && (m_last == (m_current + 1)))) && !StringAt((m_current - 2), 6, "IRONIC", "")) { return true; } } return false; } /** * Tests and encodes cases where non-initial 'e' is never pronounced * Only executed if non initial vowel encoding is turned on * * @return true if encoded as silent - no addition to m_metaph key * */ boolean E_Silent() { if(E_Pronounced_At_End()) { return false; } // 'e' silent when last letter, altho if((m_current == m_last) // also silent if before plural 's' // or past tense or participle 'd', e.g. // 'grapes' and 'banished' => PNXT || ((StringAt(m_last, 1, "S", "D", "") && (m_current > 1) && ((m_current + 1) == m_last) // and not e.g. "nested", "rises", or "pieces" => RASAS && !(StringAt((m_current - 1), 3, "TED", "SES", "CES", "") || StringAt(0, 9, "ANTIPODES", "ANOPHELES", "") || StringAt(0, 8, "MOHAMMED", "MUHAMMED", "MOUHAMED", "") || StringAt(0, 7, "MOHAMED", "") || StringAt(0, 6, "NORRED", "MEDVED", "MERCED", "ALLRED", "KHALED", "RASHED", "MASJED", "") || StringAt(0, 5, "JARED", "AHMED", "HAMED", "JAVED", "") || StringAt(0, 4, "ABED", "IMED", "")))) // e.g. 'wholeness', 'boneless', 'barely' || (StringAt((m_current + 1), 4, "NESS", "LESS", "") && ((m_current + 4) == m_last)) || (StringAt((m_current + 1), 2, "LY", "") && ((m_current + 2) == m_last) && !StringAt(0, 6, "CICELY", ""))) { return true; } return false; } /** * Tests for words where an 'E' at the end of the word * is pronounced * * special cases, mostly from the greek, spanish, japanese, * italian, and french words normally having an acute accent. * also, pronouns and articles * * Many Thanks to ali, QuentinCompson, JeffCO, ToonScribe, Xan, * Trafalz, and VictorLaszlo, all of them atriots from the Eschaton, * for all their fine contributions! * * @return true if 'E' at end is pronounced * */ boolean E_Pronounced_At_End() { if((m_current == m_last) && (StringAt((m_current - 6), 7, "STROPHE", "") // if a vowel is before the 'E', vowel eater will have eaten it. //otherwise, consonant + 'E' will need 'E' pronounced || (m_length == 2) || ((m_length == 3) && !IsVowel(0)) // these german name endings can be relied on to have the 'e' pronounced || (StringAt((m_last - 2), 3, "BKE", "DKE", "FKE", "KKE", "LKE", "NKE", "MKE", "PKE", "TKE", "VKE", "ZKE", "") && !StringAt(0, 5, "FINKE", "FUNKE", "") && !StringAt(0, 6, "FRANKE", "")) || StringAt((m_last - 4), 5, "SCHKE", "") || (StringAt(0, 4, "ACME", "NIKE", "CAFE", "RENE", "LUPE", "JOSE", "ESME", "") && (m_length == 4)) || (StringAt(0, 5, "LETHE", "CADRE", "TILDE", "SIGNE", "POSSE", "LATTE", "ANIME", "DOLCE", "CROCE", "ADOBE", "OUTRE", "JESSE", "JAIME", "JAFFE", "BENGE", "RUNGE", "CHILE", "DESME", "CONDE", "URIBE", "LIBRE", "ANDRE", "") && (m_length == 5)) || (StringAt(0, 6, "HECATE", "PSYCHE", "DAPHNE", "PENSKE", "CLICHE", "RECIPE", "TAMALE", "SESAME", "SIMILE", "FINALE", "KARATE", "RENATE", "SHANTE", "OBERLE", "COYOTE", "KRESGE", "STONGE", "STANGE", "SWAYZE", "FUENTE", "SALOME", "URRIBE", "") && (m_length == 6)) || (StringAt(0, 7, "ECHIDNE", "ARIADNE", "MEINEKE", "PORSCHE", "ANEMONE", "EPITOME", "SYNCOPE", "SOUFFLE", "ATTACHE", "MACHETE", "KARAOKE", "BUKKAKE", "VICENTE", "ELLERBE", "VERSACE", "") && (m_length == 7)) || (StringAt(0, 8, "PENELOPE", "CALLIOPE", "CHIPOTLE", "ANTIGONE", "KAMIKAZE", "EURIDICE", "YOSEMITE", "FERRANTE", "") && (m_length == 8)) || (StringAt(0, 9, "HYPERBOLE", "GUACAMOLE", "XANTHIPPE", "") && (m_length == 9)) || (StringAt(0, 10, "SYNECDOCHE", "") && (m_length == 10)))) { return true; } return false; } /** * Detect internal silent 'E's e.g. "roseman", * "firestone" * */ boolean Silent_Internal_E() { // 'olesen' but not 'olen' RAKE BLAKE if((StringAt(0, 3, "OLE", "") && E_Silent_Suffix(3) && !E_Pronouncing_Suffix(3)) || (StringAt(0, 4, "BARE", "FIRE", "FORE", "GATE", "HAGE", "HAVE", "HAZE", "HOLE", "CAPE", "HUSE", "LACE", "LINE", "LIVE", "LOVE", "MORE", "MOSE", "MORE", "NICE", "RAKE", "ROBE", "ROSE", "SISE", "SIZE", "WARE", "WAKE", "WISE", "WINE", "") && E_Silent_Suffix(4) && !E_Pronouncing_Suffix(4)) || (StringAt(0, 5, "BLAKE", "BRAKE", "BRINE", "CARLE", "CLEVE", "DUNNE", "HEDGE", "HOUSE", "JEFFE", "LUNCE", "STOKE", "STONE", "THORE", "WEDGE", "WHITE", "") && E_Silent_Suffix(5) && !E_Pronouncing_Suffix(5)) || (StringAt(0, 6, "BRIDGE", "CHEESE", "") && E_Silent_Suffix(6) && !E_Pronouncing_Suffix(6)) || StringAt((m_current - 5), 7, "CHARLES", "")) { return true; } return false; } /** * Detect conditions required * for the 'E' not to be pronounced * */ boolean E_Silent_Suffix(int at) { if((m_current == (at - 1)) && (m_length > (at + 1)) && (IsVowel((at + 1)) || (StringAt(at, 2, "ST", "SL", "") && (m_length > (at + 2))))) { return true; } return false; } /** * Detect endings that will * cause the 'e' to be pronounced * */ boolean E_Pronouncing_Suffix(int at) { // e.g. 'bridgewood' - the other vowels will get eaten // up so we need to put one in here if((m_length == (at + 4)) && StringAt(at, 4, "WOOD", "")) { return true; } // same as above if((m_length == (at + 5)) && StringAt(at, 5, "WATER", "WORTH", "")) { return true; } // e.g. 'bridgette' if((m_length == (at + 3)) && StringAt(at, 3, "TTE", "LIA", "NOW", "ROS", "RAS", "")) { return true; } // e.g. 'olena' if((m_length == (at + 2)) && StringAt(at, 2, "TA", "TT", "NA", "NO", "NE", "RS", "RE", "LA", "AU", "RO", "RA", "")) { return true; } // e.g. 'bridget' if((m_length == (at + 1)) && StringAt(at, 1, "T", "R", "")) { return true; } return false; } /** * Exceptions where 'E' is pronounced where it * usually wouldn't be, and also some cases * where 'LE' transposition rules don't apply * and the vowel needs to be encoded here * * @return true if 'E' pronounced * */ boolean E_Pronounced_Exceptions() { // greek names e.g. "herakles" or hispanic names e.g. "robles", where 'e' is pronounced, other exceptions if((((m_current + 1) == m_last) && (StringAt((m_current - 3), 5, "OCLES", "ACLES", "AKLES", "") || StringAt(0, 4, "INES", "") || StringAt(0, 5, "LOPES", "ESTES", "GOMES", "NUNES", "ALVES", "ICKES", "INNES", "PERES", "WAGES", "NEVES", "BENES", "DONES", "") || StringAt(0, 6, "CORTES", "CHAVES", "VALDES", "ROBLES", "TORRES", "FLORES", "BORGES", "NIEVES", "MONTES", "SOARES", "VALLES", "GEDDES", "ANDRES", "VIAJES", "CALLES", "FONTES", "HERMES", "ACEVES", "BATRES", "MATHES", "") || StringAt(0, 7, "DELORES", "MORALES", "DOLORES", "ANGELES", "ROSALES", "MIRELES", "LINARES", "PERALES", "PAREDES", "BRIONES", "SANCHES", "CAZARES", "REVELES", "ESTEVES", "ALVARES", "MATTHES", "SOLARES", "CASARES", "CACERES", "STURGES", "RAMIRES", "FUNCHES", "BENITES", "FUENTES", "PUENTES", "TABARES", "HENTGES", "VALORES", "") || StringAt(0, 8, "GONZALES", "MERCEDES", "FAGUNDES", "JOHANNES", "GONSALES", "BERMUDES", "CESPEDES", "BETANCES", "TERRONES", "DIOGENES", "CORRALES", "CABRALES", "MARTINES", "GRAJALES", "") || StringAt(0, 9, "CERVANTES", "FERNANDES", "GONCALVES", "BENEVIDES", "CIFUENTES", "SIFUENTES", "SERVANTES", "HERNANDES", "BENAVIDES", "") || StringAt(0, 10, "ARCHIMEDES", "CARRIZALES", "MAGALLANES", ""))) || StringAt(m_current - 2, 4, "FRED", "DGES", "DRED", "GNES", "") || StringAt((m_current - 5), 7, "PROBLEM", "RESPLEN", "") || StringAt((m_current - 4), 6, "REPLEN", "") || StringAt((m_current - 3), 4, "SPLE", "")) { return true; } return false; } /** * Encodes "-UE". * * @return true if encoding handled in this routine, false if not */ boolean Skip_Silent_UE() { // always silent except for cases listed below if((StringAt((m_current - 1), 3, "QUE", "GUE", "") && !StringAt(0, 8, "BARBEQUE", "PALENQUE", "APPLIQUE", "") // '-que' cases usually french but missing the acute accent && !StringAt(0, 6, "RISQUE", "") && !StringAt((m_current - 3), 5, "ARGUE", "SEGUE", "") && !StringAt(0, 7, "PIROGUE", "ENRIQUE", "") && !StringAt(0, 10, "COMMUNIQUE", "")) && (m_current > 1) && (((m_current + 1) == m_last) || StringAt(0, 7, "JACQUES", ""))) { m_current = SkipVowels(m_current); return true; } return false; } /** * Encodes 'B' * * */ void Encode_B() { if(Encode_Silent_B()) { return; } // "-mb", e.g", "dumb", already skipped over under // 'M', altho it should really be handled here... MetaphAddExactApprox("B", "P"); if((CharAt(m_current + 1) == 'B') || ((CharAt(m_current + 1) == 'P') && ((m_current + 1 < m_last) && (CharAt(m_current + 2) != 'H')))) { m_current += 2; } else { m_current++; } } /** * Encodes silent 'B' for cases not covered under "-mb-" * * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Silent_B() { //'debt', 'doubt', 'subtle' if(StringAt((m_current - 2), 4, "DEBT", "") || StringAt((m_current - 2), 5, "SUBTL", "") || StringAt((m_current - 2), 6, "SUBTIL", "") || StringAt((m_current - 3), 5, "DOUBT", "")) { MetaphAdd("T"); m_current += 2; return true; } return false; } /** * Encodes 'C' * */ void Encode_C() { if(Encode_Silent_C_At_Beginning() || Encode_CA_To_S() || Encode_CO_To_S() || Encode_CH() || Encode_CCIA() || Encode_CC() || Encode_CK_CG_CQ() || Encode_C_Front_Vowel() || Encode_Silent_C() || Encode_CZ() || Encode_CS()) { return; } //else if(!StringAt((m_current - 1), 1, "C", "K", "G", "Q", "")) { MetaphAdd("K"); } //name sent in 'mac caffrey', 'mac gregor if(StringAt((m_current + 1), 2, " C", " Q", " G", "")) { m_current += 2; } else { if(StringAt((m_current + 1), 1, "C", "K", "Q", "") && !StringAt((m_current + 1), 2, "CE", "CI", "")) { m_current += 2; // account for combinations such as Ro-ckc-liffe if(StringAt((m_current), 1, "C", "K", "Q", "") && !StringAt((m_current + 1), 2, "CE", "CI", "")) { m_current++; } } else { m_current++; } } } /** * Encodes cases where 'C' is silent at beginning of word * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Silent_C_At_Beginning() { //skip these when at start of word if((m_current == 0) && StringAt(m_current, 2, "CT", "CN", "")) { m_current += 1; return true; } return false; } /** * Encodes exceptions where "-CA-" should encode to S * instead of K including cases where the cedilla has not been used * * @return true if encoding handled in this routine, false if not * */ boolean Encode_CA_To_S() { // Special case: 'caesar'. // Also, where cedilla not used, as in "linguica" => LNKS if(((m_current == 0) && StringAt(m_current, 4, "CAES", "CAEC", "CAEM", "")) || StringAt(0, 8, "FRANCAIS", "FRANCAIX", "LINGUICA", "") || StringAt(0, 6, "FACADE", "") || StringAt(0, 9, "GONCALVES", "PROVENCAL", "")) { MetaphAdd("S"); AdvanceCounter(2, 1); return true; } return false; } /** * Encodes exceptions where "-CO-" encodes to S instead of K * including cases where the cedilla has not been used * * @return true if encoding handled in this routine, false if not * */ boolean Encode_CO_To_S() { // e.g. 'coelecanth' => SLKN0 if((StringAt(m_current, 4, "COEL", "") && (IsVowel(m_current + 4) || ((m_current + 3) == m_last))) || StringAt(m_current, 5, "COENA", "COENO", "") || StringAt(0, 8, "FRANCOIS", "MELANCON", "") || StringAt(0, 6, "GARCON", "")) { MetaphAdd("S"); AdvanceCounter(3, 1); return true; } return false; } /** * Encode "-CH-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_CH() { if(StringAt(m_current, 2, "CH", "")) { if(Encode_CHAE() || Encode_CH_To_H() || Encode_Silent_CH() || Encode_ARCH() // Encode_CH_To_X() should be // called before the germanic // and greek encoding functions || Encode_CH_To_X() || Encode_English_CH_To_K() || Encode_Germanic_CH_To_K() || Encode_Greek_CH_Initial() || Encode_Greek_CH_Non_Initial()) { return true; } if(m_current > 0) { if(StringAt(0, 2, "MC", "") && (m_current == 1)) { //e.g., "McHugh" MetaphAdd("K"); } else { MetaphAdd("X", "K"); } } else { MetaphAdd("X"); } m_current += 2; return true; } return false; } /** * Encodes "-CHAE-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_CHAE() { // e.g. 'michael' if(((m_current > 0) && StringAt((m_current + 2), 2, "AE", ""))) { if(StringAt(0, 7, "RACHAEL", "")) { MetaphAdd("X"); } else if(!StringAt((m_current - 1), 1, "C", "K", "G", "Q", "")) { MetaphAdd("K"); } AdvanceCounter(4, 2); return true; } return false; } /** * Encdoes transliterations from the hebrew where the * sound 'kh' is represented as "-CH-". The normal pronounciation * of this in english is either 'h' or 'kh', and alternate * spellings most often use "-H-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_CH_To_H() { // hebrew => 'H', e.g. 'channukah', 'chabad' if(((m_current == 0) && (StringAt((m_current + 2), 3, "AIM", "ETH", "ELM", "") || StringAt((m_current + 2), 4, "ASID", "AZAN", "") || StringAt((m_current + 2), 5, "UPPAH", "UTZPA", "ALLAH", "ALUTZ", "AMETZ", "") || StringAt((m_current + 2), 6, "ESHVAN", "ADARIM", "ANUKAH", "") || StringAt((m_current + 2), 7, "ALLLOTH", "ANNUKAH", "AROSETH", ""))) // and an irish name with the same encoding || StringAt((m_current - 3), 7, "CLACHAN", "")) { MetaphAdd("H"); AdvanceCounter(3, 2); return true; } return false; } /** * Encodes cases where "-CH-" is not pronounced * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Silent_CH() { // '-ch-' not pronounced if(StringAt((m_current - 2), 7, "FUCHSIA", "") || StringAt((m_current - 2), 5, "YACHT", "") || StringAt(0, 8, "STRACHAN", "") || StringAt(0, 8, "CRICHTON", "") || (StringAt((m_current - 3), 6, "DRACHM", "")) && !StringAt((m_current - 3), 7, "DRACHMA", "")) { m_current += 2; return true; } return false; } /** * Encodes "-CH-" to X * English language patterns * * @return true if encoding handled in this routine, false if not * */ boolean Encode_CH_To_X() { // e.g. 'approach', 'beach' if((StringAt((m_current - 2), 4, "OACH", "EACH", "EECH", "OUCH", "OOCH", "MUCH", "SUCH", "") && !StringAt((m_current - 3), 5, "JOACH", "")) // e.g. 'dacha', 'macho' || (((m_current + 2) == m_last ) && StringAt((m_current - 1), 4, "ACHA", "ACHO", "")) || (StringAt(m_current, 4, "CHOT", "CHOD", "CHAT", "") && ((m_current + 3) == m_last)) || ((StringAt((m_current - 1), 4, "OCHE", "") && ((m_current + 2) == m_last)) && !StringAt((m_current - 2), 5, "DOCHE", "")) || StringAt((m_current - 4), 6, "ATTACH", "DETACH", "KOVACH", "") || StringAt((m_current - 5), 7, "SPINACH", "") || StringAt(0, 6, "MACHAU", "") || StringAt((m_current - 4), 8, "PARACHUT", "") || StringAt((m_current - 5), 8, "MASSACHU", "") || (StringAt((m_current - 3), 5, "THACH", "") && !StringAt((m_current - 1), 4, "ACHE", "")) || StringAt((m_current - 2), 6, "VACHON", "") ) { MetaphAdd("X"); m_current += 2; return true; } return false; } /** * Encodes "-CH-" to K in contexts of * initial "A" or "E" follwed by "CH" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_English_CH_To_K() { //'ache', 'echo', alternate spelling of 'michael' if(((m_current == 1) && RootOrInflections(m_inWord, "ACHE")) || (((m_current > 3) && RootOrInflections(m_inWord.substring(m_current - 1), "ACHE")) && (StringAt(0, 3, "EAR", "") || StringAt(0, 4, "HEAD", "BACK", "") || StringAt(0, 5, "HEART", "BELLY", "TOOTH", ""))) || StringAt((m_current - 1), 4, "ECHO", "") || StringAt((m_current - 2), 7, "MICHEAL", "") || StringAt((m_current - 4), 7, "JERICHO", "") || StringAt((m_current - 5), 7, "LEPRECH", "")) { MetaphAdd("K", "X"); m_current += 2; return true; } return false; } /** * Encodes "-CH-" to K in mostly germanic context * of internal "-ACH-", with exceptions * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Germanic_CH_To_K() { // various germanic // "<consonant><vowel>CH-"implies a german word where 'ch' => K if(((m_current > 1) && !IsVowel(m_current - 2) && StringAt((m_current - 1), 3, "ACH", "") && !StringAt((m_current - 2), 7, "MACHADO", "MACHUCA", "LACHANC", "LACHAPE", "KACHATU", "") && !StringAt((m_current - 3), 7, "KHACHAT", "") && ((CharAt(m_current + 2) != 'I') && ((CharAt(m_current + 2) != 'E') || StringAt((m_current - 2), 6, "BACHER", "MACHER", "MACHEN", "LACHER", "")) ) // e.g. 'brecht', 'fuchs' || (StringAt((m_current + 2), 1, "T", "S", "") && !(StringAt(0, 11, "WHICHSOEVER", "") || StringAt(0, 9, "LUNCHTIME", "") )) // e.g. 'andromache' || StringAt(0, 4, "SCHR", "") || ((m_current > 2) && StringAt((m_current - 2), 5, "MACHE", "")) || ((m_current == 2) && StringAt((m_current - 2), 4, "ZACH", "")) || StringAt((m_current - 4), 6, "SCHACH", "") || StringAt((m_current - 1), 5, "ACHEN", "") || StringAt((m_current - 3), 5, "SPICH", "ZURCH", "BUECH", "") || (StringAt((m_current - 3), 5, "KIRCH", "JOACH", "BLECH", "MALCH", "") // "kirch" and "blech" both get 'X' && !(StringAt((m_current - 3), 8, "KIRCHNER", "") || ((m_current + 1) == m_last))) || (((m_current + 1) == m_last) && StringAt((m_current - 2), 4, "NICH", "LICH", "BACH", "")) || (((m_current + 1) == m_last) && StringAt((m_current - 3), 5, "URICH", "BRICH", "ERICH", "DRICH", "NRICH", "") && !StringAt((m_current - 5), 7, "ALDRICH", "") && !StringAt((m_current - 6), 8, "GOODRICH", "") && !StringAt((m_current - 7), 9, "GINGERICH", ""))) || (((m_current + 1) == m_last) && StringAt((m_current - 4), 6, "ULRICH", "LFRICH", "LLRICH", "EMRICH", "ZURICH", "EYRICH", "")) // e.g., 'wachtler', 'wechsler', but not 'tichner' || ((StringAt((m_current - 1), 1, "A", "O", "U", "E", "") || (m_current == 0)) && StringAt((m_current + 2), 1, "L", "R", "N", "M", "B", "H", "F", "V", "W", " ", ""))) { // "CHR/L-" e.g. 'chris' do not get // alt pronunciation of 'X' if(StringAt((m_current + 2), 1, "R", "L", "") || SlavoGermanic()) { MetaphAdd("K"); } else { MetaphAdd("K", "X"); } m_current += 2; return true; } return false; } /** * Encode "-ARCH-". Some occurances are from greek roots and therefore encode * to 'K', others are from english words and therefore encode to 'X' * * @return true if encoding handled in this routine, false if not * */ boolean Encode_ARCH() { if(StringAt((m_current - 2), 4, "ARCH", "")) { // "-ARCH-" has many combining forms where "-CH-" => K because of its // derivation from the greek if(((IsVowel(m_current + 2) && StringAt((m_current - 2), 5, "ARCHA", "ARCHI", "ARCHO", "ARCHU", "ARCHY", "")) || StringAt((m_current - 2), 6, "ARCHEA", "ARCHEG", "ARCHEO", "ARCHET", "ARCHEL", "ARCHES", "ARCHEP", "ARCHEM", "ARCHEN", "") || (StringAt((m_current - 2), 4, "ARCH", "") && (((m_current + 1) == m_last))) || StringAt(0, 7, "MENARCH", "")) && (!RootOrInflections(m_inWord, "ARCH") && !StringAt((m_current - 4), 6, "SEARCH", "POARCH", "") && !StringAt(0, 9, "ARCHENEMY", "ARCHIBALD", "ARCHULETA", "ARCHAMBAU", "") && !StringAt(0, 6, "ARCHER", "ARCHIE", "") && !((((StringAt((m_current - 3), 5, "LARCH", "MARCH", "PARCH", "") || StringAt((m_current - 4), 6, "STARCH", "")) && !(StringAt(0, 6, "EPARCH", "") || StringAt(0, 7, "NOMARCH", "") || StringAt(0, 8, "EXILARCH", "HIPPARCH", "MARCHESE", "") || StringAt(0, 9, "ARISTARCH", "") || StringAt(0, 9, "MARCHETTI", "")) ) || RootOrInflections(m_inWord, "STARCH")) && (!StringAt((m_current - 2), 5, "ARCHU", "ARCHY", "") || StringAt(0, 7, "STARCHY", ""))))) { MetaphAdd("K", "X"); } else { MetaphAdd("X"); } m_current += 2; return true; } return false; } /** * Encode "-CH-" to K when from greek roots * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Greek_CH_Initial() { // greek roots e.g. 'chemistry', 'chorus', ch at beginning of root if((StringAt(m_current, 6, "CHAMOM", "CHARAC", "CHARIS", "CHARTO", "CHARTU", "CHARYB", "CHRIST", "CHEMIC", "CHILIA", "") || (StringAt(m_current, 5, "CHEMI", "CHEMO", "CHEMU", "CHEMY", "CHOND", "CHONA", "CHONI", "CHOIR", "CHASM", "CHARO", "CHROM", "CHROI", "CHAMA", "CHALC", "CHALD", "CHAET","CHIRO", "CHILO", "CHELA", "CHOUS", "CHEIL", "CHEIR", "CHEIM", "CHITI", "CHEOP", "") && !(StringAt(m_current, 6, "CHEMIN", "") || StringAt((m_current - 2), 8, "ANCHONDO", ""))) || (StringAt(m_current, 5, "CHISM", "CHELI", "") // exclude spanish "machismo" && !(StringAt(0, 8, "MACHISMO", "") // exclude some french words || StringAt(0, 10, "REVANCHISM", "") || StringAt(0, 9, "RICHELIEU", "") || (StringAt(0, 5, "CHISM", "") && (m_length == 5)) || StringAt(0, 6, "MICHEL", ""))) // include e.g. "chorus", "chyme", "chaos" || (StringAt(m_current, 4, "CHOR", "CHOL", "CHYM", "CHYL", "CHLO", "CHOS", "CHUS", "CHOE", "") && !StringAt(0, 6, "CHOLLO", "CHOLLA", "CHORIZ", "")) // "chaos" => K but not "chao" || (StringAt(m_current, 4, "CHAO", "") && ((m_current + 3) != m_last)) // e.g. "abranchiate" || (StringAt(m_current, 4, "CHIA", "") && !(StringAt(0, 10, "APPALACHIA", "") || StringAt(0, 7, "CHIAPAS", ""))) // e.g. "chimera" || StringAt(m_current, 7, "CHIMERA", "CHIMAER", "CHIMERI", "") // e.g. "chameleon" || ((m_current == 0) && StringAt(m_current, 5, "CHAME", "CHELO", "CHITO", "") ) // e.g. "spirochete" || ((((m_current + 4) == m_last) || ((m_current + 5) == m_last)) && StringAt((m_current - 1), 6, "OCHETE", ""))) // more exceptions where "-CH-" => X e.g. "chortle", "crocheter" && !((StringAt(0, 5, "CHORE", "CHOLO", "CHOLA", "") && (m_length == 5)) || StringAt(m_current, 5, "CHORT", "CHOSE", "") || StringAt((m_current - 3), 7, "CROCHET", "") || StringAt(0, 7, "CHEMISE", "CHARISE", "CHARISS", "CHAROLE", "")) ) { // "CHR/L-" e.g. 'christ', 'chlorine' do not get // alt pronunciation of 'X' if(StringAt((m_current + 2), 1, "R", "L", "")) { MetaphAdd("K"); } else { MetaphAdd("K", "X"); } m_current += 2; return true; } return false; } /** * Encode a variety of greek and some german roots where "-CH-" => K * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Greek_CH_Non_Initial() { //greek & other roots e.g. 'tachometer', 'orchid', ch in middle or end of root if(StringAt((m_current - 2), 6, "ORCHID", "NICHOL", "MECHAN", "LICHEN", "MACHIC", "PACHEL", "RACHIF", "RACHID", "RACHIS", "RACHIC", "MICHAL", "") || StringAt((m_current - 3), 5, "MELCH", "GLOCH", "TRACH", "TROCH", "BRACH", "SYNCH", "PSYCH", "STICH", "PULCH", "EPOCH", "") || (StringAt((m_current - 3), 5, "TRICH", "") && !StringAt((m_current - 5), 7, "OSTRICH", "")) || (StringAt((m_current - 2), 4, "TYCH", "TOCH", "BUCH", "MOCH", "CICH", "DICH", "NUCH", "EICH", "LOCH", "DOCH", "ZECH", "WYCH", "") && !(StringAt((m_current - 4), 9, "INDOCHINA", "") || StringAt((m_current - 2), 6, "BUCHON", ""))) || StringAt((m_current - 2), 5, "LYCHN", "TACHO", "ORCHO", "ORCHI", "LICHO", "") || (StringAt((m_current - 1), 5, "OCHER", "ECHIN", "ECHID", "") && ((m_current == 1) || (m_current == 2))) || StringAt((m_current - 4), 6, "BRONCH", "STOICH", "STRYCH", "TELECH", "PLANCH", "CATECH", "MANICH", "MALACH", "BIANCH", "DIDACH", "") || (StringAt((m_current - 1), 4, "ICHA", "ICHN","") && (m_current == 1)) || StringAt((m_current - 2), 8, "ORCHESTR", "") || StringAt((m_current - 4), 8, "BRANCHIO", "BRANCHIF", "") || (StringAt((m_current - 1), 5, "ACHAB", "ACHAD", "ACHAN", "ACHAZ", "") && !StringAt((m_current - 2), 7, "MACHADO", "LACHANC", "")) || StringAt((m_current - 1), 6, "ACHISH", "ACHILL", "ACHAIA", "ACHENE", "") || StringAt((m_current - 1), 7, "ACHAIAN", "ACHATES", "ACHIRAL", "ACHERON", "") || StringAt((m_current - 1), 8, "ACHILLEA", "ACHIMAAS", "ACHILARY", "ACHELOUS", "ACHENIAL", "ACHERNAR", "") || StringAt((m_current - 1), 9, "ACHALASIA", "ACHILLEAN", "ACHIMENES", "") || StringAt((m_current - 1), 10, "ACHIMELECH", "ACHITOPHEL", "") // e.g. 'inchoate' || (((m_current - 2) == 0) && (StringAt((m_current - 2), 6, "INCHOA", "") // e.g. 'ischemia' || StringAt(0, 4, "ISCH", "")) ) // e.g. 'ablimelech', 'antioch', 'pentateuch' || (((m_current + 1) == m_last) && StringAt((m_current - 1), 1, "A", "O", "U", "E", "") && !(StringAt(0, 7, "DEBAUCH", "") || StringAt((m_current - 2), 4, "MUCH", "SUCH", "KOCH", "") || StringAt((m_current - 5), 7, "OODRICH", "ALDRICH", "")))) { MetaphAdd("K", "X"); m_current += 2; return true; } return false; } /** * Encodes reliably italian "-CCIA-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_CCIA() { //e.g., 'focaccia' if(StringAt((m_current + 1), 3, "CIA", "")) { MetaphAdd("X", "S"); m_current += 2; return true; } return false; } /** * Encode "-CC-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_CC() { //double 'C', but not if e.g. 'McClellan' if(StringAt(m_current, 2, "CC", "") && !((m_current == 1) && (CharAt(0) == 'M'))) { // exception if (StringAt((m_current - 3), 7, "FLACCID", "")) { MetaphAdd("S"); AdvanceCounter(3, 2); return true; } //'bacci', 'bertucci', other italian if((((m_current + 2) == m_last) && StringAt((m_current + 2), 1, "I", "")) || StringAt((m_current + 2), 2, "IO", "") || (((m_current + 4) == m_last) && StringAt((m_current + 2), 3, "INO", "INI", ""))) { MetaphAdd("X"); AdvanceCounter(3, 2); return true; } //'accident', 'accede' 'succeed' if(StringAt((m_current + 2), 1, "I", "E", "Y", "") //except 'bellocchio','bacchus', 'soccer' get K && !((CharAt(m_current + 2) == 'H') || StringAt((m_current - 2), 6, "SOCCER", ""))) { MetaphAdd("KS"); AdvanceCounter(3, 2); return true; } else { //Pierce's rule MetaphAdd("K"); m_current += 2; return true; } } return false; } /** * Encode cases where the consonant following "C" is redundant * * @return true if encoding handled in this routine, false if not * */ boolean Encode_CK_CG_CQ() { if(StringAt(m_current, 2, "CK", "CG", "CQ", "")) { // eastern european spelling e.g. 'gorecki' == 'goresky' if(StringAt(m_current, 3, "CKI", "CKY", "") && ((m_current + 2) == m_last) && (m_length > 6)) { MetaphAdd("K", "SK"); } else { MetaphAdd("K"); } m_current += 2; if(StringAt(m_current, 1, "K", "G", "Q", "")) { m_current++; } return true; } return false; } /** * Encode cases where "C" preceeds a front vowel such as "E", "I", or "Y". * These cases most likely => S or X * * @return true if encoding handled in this routine, false if not * */ boolean Encode_C_Front_Vowel() { if(StringAt(m_current, 2, "CI", "CE", "CY", "")) { if(Encode_British_Silent_CE() || Encode_CE() || Encode_CI() || Encode_Latinate_Suffixes()) { AdvanceCounter(2, 1); return true; } MetaphAdd("S"); AdvanceCounter(2, 1); return true; } return false; } /** * * @return true if encoding handled in this routine, false if not * */ boolean Encode_British_Silent_CE() { // english place names like e.g.'gloucester' pronounced glo-ster if((StringAt((m_current + 1), 5, "ESTER", "") && ((m_current + 5) == m_last)) || StringAt((m_current + 1), 10, "ESTERSHIRE", "")) { return true; } return false; } /** * * @return true if encoding handled in this routine, false if not * */ boolean Encode_CE() { // 'ocean', 'commercial', 'provincial', 'cello', 'fettucini', 'medici' if((StringAt((m_current + 1), 3, "EAN", "") && IsVowel(m_current - 1)) // e.g. 'rosacea' || (StringAt((m_current - 1), 4, "ACEA", "") && ((m_current + 2) == m_last) && !StringAt(0, 7, "PANACEA", "")) // e.g. 'botticelli', 'concerto' || StringAt((m_current + 1), 4, "ELLI", "ERTO", "EORL", "") // some italian names familiar to americans || (StringAt((m_current - 3), 5, "CROCE", "") && ((m_current + 1) == m_last)) || StringAt((m_current - 3), 5, "DOLCE", "") // e.g. 'cello' || (StringAt((m_current + 1), 4, "ELLO", "") && ((m_current + 4) == m_last))) { MetaphAdd("X", "S"); return true; } return false; } /** * * @return true if encoding handled in this routine, false if not * */ boolean Encode_CI() { // with consonant before C // e.g. 'fettucini', but exception for the americanized pronunciation of 'mancini' if(((StringAt((m_current + 1), 3, "INI", "") && !StringAt(0, 7, "MANCINI", "")) && ((m_current + 3) == m_last)) // e.g. 'medici' || (StringAt((m_current - 1), 3, "ICI", "") && ((m_current + 1) == m_last)) // e.g. "commercial', 'provincial', 'cistercian' || StringAt((m_current - 1), 5, "RCIAL", "NCIAL", "RCIAN", "UCIUS", "") // special cases || StringAt((m_current - 3), 6, "MARCIA", "") || StringAt((m_current - 2), 7, "ANCIENT", "")) { MetaphAdd("X", "S"); return true; } // with vowel before C (or at beginning?) if(((StringAt(m_current, 3, "CIO", "CIE", "CIA", "") && IsVowel(m_current - 1)) // e.g. "ciao" || StringAt((m_current + 1), 3, "IAO", "")) && !StringAt((m_current - 4), 8, "COERCION", "")) { if((StringAt(m_current, 4, "CIAN", "CIAL", "CIAO", "CIES", "CIOL", "CION", "") // exception - "glacier" => 'X' but "spacier" = > 'S' || StringAt((m_current - 3), 7, "GLACIER", "") || StringAt(m_current, 5, "CIENT", "CIENC", "CIOUS", "CIATE", "CIATI", "CIATO", "CIABL", "CIARY", "") || (((m_current + 2) == m_last) && StringAt(m_current, 3, "CIA", "CIO", "")) || (((m_current + 3) == m_last) && StringAt(m_current, 3, "CIAS", "CIOS", ""))) // exceptions && !(StringAt((m_current - 4), 11, "ASSOCIATION", "") || StringAt(0, 4, "OCIE", "") // exceptions mostly because these names are usually from // the spanish rather than the italian in america || StringAt((m_current - 2), 5, "LUCIO", "") || StringAt((m_current - 2), 6, "MACIAS", "") || StringAt((m_current - 3), 6, "GRACIE", "GRACIA", "") || StringAt((m_current - 2), 7, "LUCIANO", "") || StringAt((m_current - 3), 8, "MARCIANO", "") || StringAt((m_current - 4), 7, "PALACIO", "") || StringAt((m_current - 4), 9, "FELICIANO", "") || StringAt((m_current - 5), 8, "MAURICIO", "") || StringAt((m_current - 7), 11, "ENCARNACION", "") || StringAt((m_current - 4), 8, "POLICIES", "") || StringAt((m_current - 2), 8, "HACIENDA", "") || StringAt((m_current - 6), 9, "ANDALUCIA", "") || StringAt((m_current - 2), 5, "SOCIO", "SOCIE", ""))) { MetaphAdd("X", "S"); } else { MetaphAdd("S", "X"); } return true; } // exception if(StringAt((m_current - 4), 8, "COERCION", "")) { MetaphAdd("J"); return true; } return false; } /** * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Latinate_Suffixes() { if(StringAt((m_current + 1), 4, "EOUS", "IOUS", "")) { MetaphAdd("X", "S"); return true; } return false; } /** * Encodes some exceptions where "C" is silent * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Silent_C() { if(StringAt((m_current + 1), 1, "T", "S", "")) { if (StringAt(0, 11, "CONNECTICUT", "") || StringAt(0, 6, "INDICT", "TUCSON", "")) { m_current++; return true; } } return false; } /** * Encodes slavic spellings or transliterations * written as "-CZ-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_CZ() { if(StringAt((m_current + 1), 1, "Z", "") && !StringAt((m_current - 1), 6, "ECZEMA", "")) { if(StringAt(m_current, 4, "CZAR", "")) { MetaphAdd("S"); } // otherwise most likely a czech word... else { MetaphAdd("X"); } m_current += 2; return true; } return false; } /** * "-CS" special cases * * @return true if encoding handled in this routine, false if not * */ boolean Encode_CS() { // give an 'etymological' 2nd // encoding for "kovacs" so // that it matches "kovach" if(StringAt(0, 6, "KOVACS", "")) { MetaphAdd("KS", "X"); m_current += 2; return true; } if(StringAt((m_current - 1), 3, "ACS", "") && ((m_current + 1) == m_last) && !StringAt((m_current - 4), 6, "ISAACS", "")) { MetaphAdd("X"); m_current += 2; return true; } return false; } /** * Encode "-D-" * */ void Encode_D() { if(Encode_DG() || Encode_DJ() || Encode_DT_DD() || Encode_D_To_J() || Encode_DOUS() || Encode_Silent_D()) { return; } if(m_encodeExact) { // "final de-voicing" in this case // e.g. 'missed' == 'mist' if((m_current == m_last) && StringAt((m_current - 3), 4, "SSED", "")) { MetaphAdd("T"); } else { MetaphAdd("D"); } } else { MetaphAdd("T"); } m_current++; } /** * Encode "-DG-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_DG() { if(StringAt(m_current, 2, "DG", "")) { // excludes exceptions e.g. 'edgar', // or cases where 'g' is first letter of combining form // e.g. 'handgun', 'waldglas' if(StringAt((m_current + 2), 1, "A", "O", "") // e.g. "midgut" || StringAt((m_current + 1), 3, "GUN", "GUT", "") // e.g. "handgrip" || StringAt((m_current + 1), 4, "GEAR", "GLAS", "GRIP", "GREN", "GILL", "GRAF", "") // e.g. "mudgard" || StringAt((m_current + 1), 5, "GUARD", "GUILT", "GRAVE", "GRASS", "") // e.g. "woodgrouse" || StringAt((m_current + 1), 6, "GROUSE", "")) { MetaphAddExactApprox("DG", "TK"); } else { //e.g. "edge", "abridgment" MetaphAdd("J"); } m_current += 2; return true; } return false; } /** * Encode "-DJ-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_DJ() { // e.g. "adjacent" if(StringAt(m_current, 2, "DJ", "")) { MetaphAdd("J"); m_current += 2; return true; } return false; } /** * Encode "-DD-" and "-DT-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_DT_DD() { // eat redundant 'T' or 'D' if(StringAt(m_current, 2, "DT", "DD", "")) { if(StringAt(m_current, 3, "DTH", "")) { MetaphAddExactApprox("D0", "T0"); m_current += 3; } else { if(m_encodeExact) { // devoice it if(StringAt(m_current, 2, "DT", "")) { MetaphAdd("T"); } else { MetaphAdd("D"); } } else { MetaphAdd("T"); } m_current += 2; } return true; } return false; } /** * Encode cases where "-DU-" "-DI-", and "-DI-" => J * * @return true if encoding handled in this routine, false if not * */ boolean Encode_D_To_J() { // e.g. "module", "adulate" if((StringAt(m_current, 3, "DUL", "") && (IsVowel(m_current - 1) && IsVowel(m_current + 3))) // e.g. "soldier", "grandeur", "procedure" || (((m_current + 3) == m_last) && StringAt((m_current - 1) , 5, "LDIER", "NDEUR", "EDURE", "RDURE", "")) || StringAt((m_current - 3), 7, "CORDIAL", "") // e.g. "pendulum", "education" || StringAt((m_current - 1), 5, "NDULA", "NDULU", "EDUCA", "") // e.g. "individual", "individual", "residuum" || StringAt((m_current - 1), 4, "ADUA", "IDUA", "IDUU", "")) { MetaphAddExactApprox("J", "D", "J", "T"); AdvanceCounter(2, 1); return true; } return false; } /** * Encode latinate suffix "-DOUS" where 'D' is pronounced as J * * @return true if encoding handled in this routine, false if not * */ boolean Encode_DOUS() { // e.g. "assiduous", "arduous" if(StringAt((m_current + 1), 4, "UOUS", "")) { MetaphAddExactApprox("J", "D", "J", "T"); AdvanceCounter(4, 1); return true; } return false; } /** * Encode silent "-D-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Silent_D() { // silent 'D' e.g. 'wednesday', 'handsome' if(StringAt((m_current - 2), 9, "WEDNESDAY", "") || StringAt((m_current - 3), 7, "HANDKER", "HANDSOM", "WINDSOR", "") // french silent D at end in words or names familiar to americans || StringAt((m_current - 5), 6, "PERNOD", "ARTAUD", "RENAUD", "") || StringAt((m_current - 6), 7, "RIMBAUD", "MICHAUD", "BICHAUD", "")) { m_current++; return true; } return false; } /** * Encode "-F-" * */ void Encode_F() { // Encode cases where "-FT-" => "T" is usually silent // e.g. 'often', 'soften' // This should really be covered under "T"! if(StringAt((m_current - 1), 5, "OFTEN", "")) { MetaphAdd("F", "FT"); m_current += 2; return; } // eat redundant 'F' if(CharAt(m_current + 1) == 'F') { m_current += 2; } else { m_current++; } MetaphAdd("F"); } /** * Encode "-G-" * */ void Encode_G() { if(Encode_Silent_G_At_Beginning() || Encode_GG() || Encode_GK() || Encode_GH() || Encode_Silent_G() || Encode_GN() || Encode_GL() || Encode_Initial_G_Front_Vowel() || Encode_NGER() || Encode_GER() || Encode_GEL() || Encode_Non_Initial_G_Front_Vowel() || Encode_GA_To_J()) { return; } if(!StringAt((m_current - 1), 1, "C", "K", "G", "Q", "")) { MetaphAddExactApprox("G", "K"); } m_current++; } /** * Encode cases where 'G' is silent at beginning of word * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Silent_G_At_Beginning() { //skip these when at start of word if((m_current == 0) && StringAt(m_current, 2, "GN", "")) { m_current += 1; return true; } return false; } /** * Encode "-GG-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_GG() { if(CharAt(m_current + 1) == 'G') { // italian e.g, 'loggia', 'caraveggio', also 'suggest' and 'exaggerate' if(StringAt((m_current - 1), 5, "AGGIA", "OGGIA", "AGGIO", "EGGIO", "EGGIA", "IGGIO", "") // 'ruggiero' but not 'snuggies' || (StringAt((m_current - 1), 5, "UGGIE", "") && !(((m_current + 3) == m_last) || ((m_current + 4) == m_last))) || (((m_current + 2) == m_last) && StringAt((m_current - 1), 4, "AGGI", "OGGI", "")) || StringAt((m_current - 2), 6, "SUGGES", "XAGGER", "REGGIE", "")) { // expection where "-GG-" => KJ if (StringAt((m_current - 2), 7, "SUGGEST", "")) { MetaphAddExactApprox("G", "K"); } MetaphAdd("J"); AdvanceCounter(3, 2); } else { MetaphAddExactApprox("G", "K"); m_current += 2; } return true; } return false; } /** * Encode "-GK-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_GK() { // 'gingko' if(CharAt(m_current + 1) == 'K') { MetaphAdd("K"); m_current += 2; return true; } return false; } /** * Encode "-GH-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_GH() { if(CharAt(m_current + 1) == 'H') { if(Encode_GH_After_Consonant() || Encode_Initial_GH() || Encode_GH_To_J() || Encode_GH_To_H() || Encode_UGHT() || Encode_GH_H_Part_Of_Other_Word() || Encode_Silent_GH() || Encode_GH_To_F()) { return true; } MetaphAddExactApprox("G", "K"); m_current += 2; return true; } return false; } /** * * @return true if encoding handled in this routine, false if not * */ boolean Encode_GH_After_Consonant() { // e.g. 'burgher', 'bingham' if((m_current > 0) && !IsVowel(m_current - 1) // not e.g. 'greenhalgh' && !(StringAt((m_current - 3), 5, "HALGH", "") && ((m_current + 1) == m_last))) { MetaphAddExactApprox("G", "K"); m_current += 2; return true; } return false; } /** * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Initial_GH() { if(m_current < 3) { // e.g. "ghislane", "ghiradelli" if(m_current == 0) { if(CharAt(m_current + 2) == 'I') { MetaphAdd("J"); } else { MetaphAddExactApprox("G", "K"); } m_current += 2; return true; } } return false; } /** * * @return true if encoding handled in this routine, false if not * */ boolean Encode_GH_To_J() { // e.g., 'greenhalgh', 'dunkenhalgh', english names if(StringAt((m_current - 2), 4, "ALGH", "") && ((m_current + 1) == m_last)) { MetaphAdd("J", ""); m_current += 2; return true; } return false; } /** * * @return true if encoding handled in this routine, false if not * */ boolean Encode_GH_To_H() { // special cases // e.g., 'donoghue', 'donaghy' if((StringAt((m_current - 4), 4, "DONO", "DONA", "") && IsVowel(m_current + 2)) || StringAt((m_current - 5), 9, "CALLAGHAN", "")) { MetaphAdd("H"); m_current += 2; return true; } return false; } /** * * @return true if encoding handled in this routine, false if not * */ boolean Encode_UGHT() { //e.g. "ought", "aught", "daughter", "slaughter" if(StringAt((m_current - 1), 4, "UGHT", "")) { if ((StringAt((m_current - 3), 5, "LAUGH", "") && !(StringAt((m_current - 4), 7, "SLAUGHT", "") || StringAt((m_current - 3), 7, "LAUGHTO", ""))) || StringAt((m_current - 4), 6, "DRAUGH", "")) { MetaphAdd("FT"); } else { MetaphAdd("T"); } m_current += 3; return true; } return false; } /** * * @return true if encoding handled in this routine, false if not * */ boolean Encode_GH_H_Part_Of_Other_Word() { // if the 'H' is the beginning of another word or syllable if (StringAt((m_current + 1), 4, "HOUS", "HEAD", "HOLE", "HORN", "HARN", "")) { MetaphAddExactApprox("G", "K"); m_current += 2; return true; } return false; } /** * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Silent_GH() { //Parker's rule (with some further refinements) - e.g., 'hugh' if(((((m_current > 1) && StringAt((m_current - 2), 1, "B", "H", "D", "G", "L", "") ) //e.g., 'bough' || ((m_current > 2) && StringAt((m_current - 3), 1, "B", "H", "D", "K", "W", "N", "P", "V", "") && !StringAt(0, 6, "ENOUGH", "")) //e.g., 'broughton' || ((m_current > 3) && StringAt((m_current - 4), 1, "B", "H", "") ) //'plough', 'slaugh' || ((m_current > 3) && StringAt((m_current - 4), 2, "PL", "SL", "") ) || ((m_current > 0) // 'sigh', 'light' && ((CharAt(m_current - 1) == 'I') || StringAt(0, 4, "PUGH", "") // e.g. 'MCDONAGH', 'MURTAGH', 'CREAGH' || (StringAt((m_current - 1), 3, "AGH", "") && ((m_current + 1) == m_last)) || StringAt((m_current - 4), 6, "GERAGH", "DRAUGH", "") || (StringAt((m_current - 3), 5, "GAUGH", "GEOGH", "MAUGH", "") && !StringAt(0, 9, "MCGAUGHEY", "")) // exceptions to 'tough', 'rough', 'lough' || (StringAt((m_current - 2), 4, "OUGH", "") && (m_current > 3) && !StringAt((m_current - 4), 6, "CCOUGH", "ENOUGH", "TROUGH", "CLOUGH", ""))))) // suffixes starting w/ vowel where "-GH-" is usually silent && (StringAt((m_current - 3), 5, "VAUGH", "FEIGH", "LEIGH", "") || StringAt((m_current - 2), 4, "HIGH", "TIGH", "") || ((m_current + 1) == m_last) || (StringAt((m_current + 2), 2, "IE", "EY", "ES", "ER", "ED", "TY", "") && ((m_current + 3) == m_last) && !StringAt((m_current - 5), 9, "GALLAGHER", "")) || (StringAt((m_current + 2), 1, "Y", "") && ((m_current + 2) == m_last)) || (StringAt((m_current + 2), 3, "ING", "OUT", "") && ((m_current + 4) == m_last)) || (StringAt((m_current + 2), 4, "ERTY", "") && ((m_current + 5) == m_last)) || (!IsVowel(m_current + 2) || StringAt((m_current - 3), 5, "GAUGH", "GEOGH", "MAUGH", "") || StringAt((m_current - 4), 8, "BROUGHAM", "")))) // exceptions where '-g-' pronounced && !(StringAt(0, 6, "BALOGH", "SABAGH", "") || StringAt((m_current - 2), 7, "BAGHDAD", "") || StringAt((m_current - 3), 5, "WHIGH", "") || StringAt((m_current - 5), 7, "SABBAGH", "AKHLAGH", ""))) { // silent - do nothing m_current += 2; return true; } return false; } /** * * @return true if encoding handled in this routine, false if not * */ boolean Encode_GH_Special_Cases() { boolean handled = false; // special case: 'hiccough' == 'hiccup' if(StringAt((m_current - 6), 8, "HICCOUGH", "")) { MetaphAdd("P"); handled = true; } // special case: 'lough' alt spelling for scots 'loch' else if(StringAt(0, 5, "LOUGH", "")) { MetaphAdd("K"); handled = true; } // hungarian else if(StringAt(0, 6, "BALOGH", "")) { MetaphAddExactApprox("G", "", "K", ""); handled = true; } // "maclaughlin" else if(StringAt((m_current - 3), 8, "LAUGHLIN", "COUGHLAN", "LOUGHLIN", "")) { MetaphAdd("K", "F"); handled = true; } else if(StringAt((m_current - 3), 5, "GOUGH", "") || StringAt((m_current - 7), 9, "COLCLOUGH", "")) { MetaphAdd("", "F"); handled = true; } if(handled) { m_current += 2; return true; } return false; } /** * * @return true if encoding handled in this routine, false if not * */ boolean Encode_GH_To_F() { // the cases covered here would fall under // the GH_To_F rule below otherwise if(Encode_GH_Special_Cases()) { return true; } else { //e.g., 'laugh', 'cough', 'rough', 'tough' if((m_current > 2) && (CharAt(m_current - 1) == 'U') && IsVowel(m_current - 2) && StringAt((m_current - 3), 1, "C", "G", "L", "R", "T", "N", "S", "") && !StringAt((m_current - 4), 8, "BREUGHEL", "FLAUGHER", "")) { MetaphAdd("F"); m_current += 2; return true; } } return false; } /** * Encode some contexts where "g" is silent * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Silent_G() { // e.g. "phlegm", "apothegm", "voigt" if((((m_current + 1) == m_last) && (StringAt((m_current - 1), 3, "EGM", "IGM", "AGM", "") || StringAt(m_current, 2, "GT", ""))) || (StringAt(0, 5, "HUGES", "") && (m_length == 5))) { m_current++; return true; } // vietnamese names e.g. "Nguyen" but not "Ng" if(StringAt(0, 2, "NG", "") && (m_current != m_last)) { m_current++; return true; } return false; } /** * ENcode "-GN-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_GN() { if(CharAt(m_current + 1) == 'N') { // 'align' 'sign', 'resign' but not 'resignation' // also 'impugn', 'impugnable', but not 'repugnant' if(((m_current > 1) && ((StringAt((m_current - 1), 1, "I", "U", "E", "") || StringAt((m_current - 3), 9, "LORGNETTE", "") || StringAt((m_current - 2), 9, "LAGNIAPPE", "") || StringAt((m_current - 2), 6, "COGNAC", "") || StringAt((m_current - 3), 7, "CHAGNON", "") || StringAt((m_current - 5), 9, "COMPAGNIE", "") || StringAt((m_current - 4), 6, "BOLOGN", "")) // Exceptions: following are cases where 'G' is pronounced // in "assign" 'g' is silent, but not in "assignation" && !(StringAt((m_current + 2), 5, "ATION", "") || StringAt((m_current + 2), 4, "ATOR", "") || StringAt((m_current + 2), 3, "ATE", "ITY", "") // exception to exceptions, not pronounced: || (StringAt((m_current + 2), 2, "AN", "AC", "IA", "UM", "") && !(StringAt((m_current - 3), 8, "POIGNANT", "") || StringAt((m_current - 2), 6, "COGNAC", ""))) || StringAt(0, 7, "SPIGNER", "STEGNER", "") || (StringAt(0, 5, "SIGNE", "") && (m_length == 5)) || StringAt((m_current - 2), 5, "LIGNI", "LIGNO", "REGNA", "DIGNI", "WEGNE", "TIGNE", "RIGNE", "REGNE", "TIGNO", "") || StringAt((m_current - 2), 6, "SIGNAL", "SIGNIF", "SIGNAT", "") || StringAt((m_current - 1), 5, "IGNIT", "")) && !StringAt((m_current - 2), 6, "SIGNET", "LIGNEO", "") )) //not e.g. 'cagney', 'magna' || (((m_current + 2) == m_last) && StringAt(m_current, 3, "GNE", "GNA", "") && !StringAt((m_current - 2), 5, "SIGNA", "MAGNA", "SIGNE", ""))) { MetaphAddExactApprox("N", "GN", "N", "KN"); } else { MetaphAddExactApprox("GN", "KN"); } m_current += 2; return true; } return false; } /** * Encode "-GL-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_GL() { //'tagliaro', 'puglia' BUT add K in alternative // since americans sometimes do this if(StringAt((m_current + 1), 3, "LIA", "LIO", "LIE", "") && IsVowel(m_current - 1)) { MetaphAddExactApprox("L", "GL", "L", "KL"); m_current += 2; return true; } return false; } /** * * @return true if encoding handled in this routine, false if not * */ boolean Initial_G_Soft() { if(((StringAt((m_current + 1), 2, "EL", "EM", "EN", "EO", "ER", "ES", "IA", "IN", "IO", "IP", "IU", "YM", "YN", "YP", "YR", "EE", "") || StringAt((m_current + 1), 3, "IRA", "IRO", "")) // except for smaller set of cases where => K, e.g. "gerber" && !(StringAt((m_current + 1), 3, "ELD", "ELT", "ERT", "INZ", "ERH", "ITE", "ERD", "ERL", "ERN", "INT", "EES", "EEK", "ELB", "EER", "") || StringAt((m_current + 1), 4, "ERSH", "ERST", "INSB", "INGR", "EROW", "ERKE", "EREN", "") || StringAt((m_current + 1), 5, "ELLER", "ERDIE", "ERBER", "ESUND", "ESNER", "INGKO", "INKGO", "IPPER", "ESELL", "IPSON", "EEZER", "ERSON", "ELMAN", "") || StringAt((m_current + 1), 6, "ESTALT", "ESTAPO", "INGHAM", "ERRITY", "ERRISH", "ESSNER", "ENGLER", "") || StringAt((m_current + 1), 7, "YNAECOL", "YNECOLO", "ENTHNER", "ERAGHTY", "") || StringAt((m_current + 1), 8, "INGERICH", "EOGHEGAN", ""))) ||(IsVowel(m_current + 1) && (StringAt((m_current + 1), 3, "EE ", "EEW", "") || (StringAt((m_current + 1), 3, "IGI", "IRA", "IBE", "AOL", "IDE", "IGL", "") && !StringAt((m_current + 1), 5, "IDEON", "") ) || StringAt((m_current + 1), 4, "ILES", "INGI", "ISEL", "") || (StringAt((m_current + 1), 5, "INGER", "") && !StringAt((m_current + 1), 8, "INGERICH", "")) || StringAt((m_current + 1), 5, "IBBER", "IBBET", "IBLET", "IBRAN", "IGOLO", "IRARD", "IGANT", "") || StringAt((m_current + 1), 6, "IRAFFE", "EEWHIZ","") || StringAt((m_current + 1), 7, "ILLETTE", "IBRALTA", "")))) { return true; } return false; } /** * Encode cases where 'G' is at start of word followed * by a "front" vowel e.g. 'E', 'I', 'Y' * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Initial_G_Front_Vowel() { // 'g' followed by vowel at beginning if((m_current == 0) && Front_Vowel(m_current + 1)) { // special case "gila" as in "gila monster" if(StringAt((m_current + 1), 3, "ILA", "") && (m_length == 4)) { MetaphAdd("H"); } else if(Initial_G_Soft()) { MetaphAddExactApprox("J", "G", "J", "K"); } else { // only code alternate 'J' if front vowel if((m_inWord.charAt(m_current + 1) == 'E') || (m_inWord.charAt(m_current + 1) == 'I')) { MetaphAddExactApprox("G", "J", "K", "J"); } else { MetaphAddExactApprox("G", "K"); } } AdvanceCounter(2, 1); return true; } return false; } /** * Encode "-NGER-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_NGER() { if((m_current > 1) && StringAt((m_current - 1), 4, "NGER", "")) { // default 'G' => J such as 'ranger', 'stranger', 'manger', 'messenger', 'orangery', 'granger' // 'boulanger', 'challenger', 'danger', 'changer', 'harbinger', 'lounger', 'ginger', 'passenger' // except for these the following if(!(RootOrInflections(m_inWord, "ANGER") || RootOrInflections(m_inWord, "LINGER") || RootOrInflections(m_inWord, "MALINGER") || RootOrInflections(m_inWord, "FINGER") || (StringAt((m_current - 3), 4, "HUNG", "FING", "BUNG", "WING", "RING", "DING", "ZENG", "ZING", "JUNG", "LONG", "PING", "CONG", "MONG", "BANG", "GANG", "HANG", "LANG", "SANG", "SING", "WANG", "ZANG", "") // exceptions to above where 'G' => J && !(StringAt((m_current - 6), 7, "BOULANG", "SLESING", "KISSING", "DERRING", "") || StringAt((m_current - 8), 9, "SCHLESING", "") || StringAt((m_current - 5), 6, "SALING", "BELANG", "") || StringAt((m_current - 6), 7, "BARRING", "") || StringAt((m_current - 6), 9, "PHALANGER", "") || StringAt((m_current - 4), 5, "CHANG", ""))) || StringAt((m_current - 4), 5, "STING", "YOUNG", "") || StringAt((m_current - 5), 6, "STRONG", "") || StringAt(0, 3, "UNG", "ENG", "ING", "") || StringAt(m_current, 6, "GERICH", "") || StringAt(0, 6, "SENGER", "") || StringAt((m_current - 3), 6, "WENGER", "MUNGER", "SONGER", "KINGER", "") || StringAt((m_current - 4), 7, "FLINGER", "SLINGER", "STANGER", "STENGER", "KLINGER", "CLINGER", "") || StringAt((m_current - 5), 8, "SPRINGER", "SPRENGER", "") || StringAt((m_current - 3), 7, "LINGERF", "") || StringAt((m_current - 2), 7, "ANGERLY", "ANGERBO", "INGERSO", "") )) { MetaphAddExactApprox("J", "G", "J", "K"); } else { MetaphAddExactApprox("G", "J", "K", "J"); } AdvanceCounter(2, 1); return true; } return false; } /** * Encode "-GER-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_GER() { if((m_current > 0) && StringAt((m_current + 1), 2, "ER", "")) { // Exceptions to 'GE' where 'G' => K // e.g. "JAGER", "TIGER", "LIGER", "LAGER", "LUGER", "AUGER", "EAGER", "HAGER", "SAGER" if((((m_current == 2) && IsVowel(m_current - 1) && !IsVowel(m_current - 2) && !(StringAt((m_current - 2), 5, "PAGER", "WAGER", "NIGER", "ROGER", "LEGER", "CAGER", "")) || StringAt((m_current - 2), 5, "AUGER", "EAGER", "INGER", "YAGER", "")) || StringAt((m_current - 3), 6, "SEEGER", "JAEGER", "GEIGER", "KRUGER", "SAUGER", "BURGER", "MEAGER", "MARGER", "RIEGER", "YAEGER", "STEGER", "PRAGER", "SWIGER", "YERGER", "TORGER", "FERGER", "HILGER", "ZEIGER", "YARGER", "COWGER", "CREGER", "KROGER", "KREGER", "GRAGER", "STIGER", "BERGER", "") // 'berger' but not 'bergerac' || (StringAt((m_current - 3), 6, "BERGER", "") && ((m_current + 2) == m_last)) || StringAt((m_current - 4), 7, "KREIGER", "KRUEGER", "METZGER", "KRIEGER", "KROEGER", "STEIGER", "DRAEGER", "BUERGER", "BOERGER", "FIBIGER", "") // e.g. 'harshbarger', 'winebarger' || (StringAt((m_current - 3), 6, "BARGER", "") && (m_current > 4)) // e.g. 'weisgerber' || (StringAt(m_current, 6, "GERBER", "") && (m_current > 0)) || StringAt((m_current - 5), 8, "SCHWAGER", "LYBARGER", "SPRENGER", "GALLAGER", "WILLIGER", "") || StringAt(0, 4, "HARGER", "") || (StringAt(0, 4, "AGER", "EGER", "") && (m_length == 4)) || StringAt((m_current - 1), 6, "YGERNE", "") || StringAt((m_current - 6), 9, "SCHWEIGER", "")) && !(StringAt((m_current - 5), 10, "BELLIGEREN", "") || StringAt(0, 7, "MARGERY", "") || StringAt((m_current - 3), 8, "BERGERAC", ""))) { if(SlavoGermanic()) { MetaphAddExactApprox("G", "K"); } else { MetaphAddExactApprox("G", "J", "K", "J"); } } else { MetaphAddExactApprox("J", "G", "J", "K"); } AdvanceCounter(2, 1); return true; } return false; } /** * ENcode "-GEL-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_GEL() { // more likely to be "-GEL-" => JL if(StringAt((m_current + 1), 2, "EL", "") && (m_current > 0)) { // except for // "BAGEL", "HEGEL", "HUGEL", "KUGEL", "NAGEL", "VOGEL", "FOGEL", "PAGEL" if(((m_length == 5) && IsVowel(m_current - 1) && !IsVowel(m_current - 2) && !StringAt((m_current - 2), 5, "NIGEL", "RIGEL", "")) // or the following as combining forms || StringAt((m_current - 2), 5, "ENGEL", "HEGEL", "NAGEL", "VOGEL", "") || StringAt((m_current - 3), 6, "MANGEL", "WEIGEL", "FLUGEL", "RANGEL", "HAUGEN", "RIEGEL", "VOEGEL", "") || StringAt((m_current - 4), 7, "SPEIGEL", "STEIGEL", "WRANGEL", "SPIEGEL", "") || StringAt((m_current - 4), 8, "DANEGELD", "")) { if(SlavoGermanic()) { MetaphAddExactApprox("G", "K"); } else { MetaphAddExactApprox("G", "J", "K", "J"); } } else { MetaphAddExactApprox("J", "G", "J", "K"); } AdvanceCounter(2, 1); return true; } return false; } /** * Encode "-G-" followed by a vowel when non-initial leter. * Default for this is a 'J' sound, so check exceptions where * it is pronounced 'G' * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Non_Initial_G_Front_Vowel() { // -gy-, gi-, ge- if(StringAt((m_current + 1), 1, "E", "I", "Y", "")) { // '-ge' at end // almost always 'j 'sound if(StringAt(m_current, 2, "GE", "") && (m_current == (m_last - 1))) { if(Hard_GE_At_End()) { if(SlavoGermanic()) { MetaphAddExactApprox("G", "K"); } else { MetaphAddExactApprox("G", "J", "K", "J"); } } else { MetaphAdd("J"); } } else { if(Internal_Hard_G()) { // don't encode KG or KK if e.g. "mcgill" if(!((m_current == 2) && StringAt(0, 2, "MC", "")) || ((m_current == 3) && StringAt(0, 3, "MAC", ""))) { if(SlavoGermanic()) { MetaphAddExactApprox("G", "K"); } else { MetaphAddExactApprox("G", "J", "K", "J"); } } } else { MetaphAddExactApprox("J", "G", "J", "K"); } } AdvanceCounter(2, 1); return true; } return false; } /* * Detect german names and other words that have * a 'hard' 'g' in the context of "-ge" at end * * @return true if encoding handled in this routine, false if not */ boolean Hard_GE_At_End() { if(StringAt(0, 6, "RENEGE", "STONGE", "STANGE", "PRANGE", "KRESGE", "") || StringAt(0, 5, "BYRGE", "BIRGE", "BERGE", "HAUGE", "") || StringAt(0, 4, "HAGE", "") || StringAt(0, 5, "LANGE", "SYNGE", "BENGE", "RUNGE", "HELGE", "") || StringAt(0, 4, "INGE", "LAGE", "")) { return true; } return false; } /** * Exceptions to default encoding to 'J': * encode "-G-" to 'G' in "-g<frontvowel>-" words * where we are not at "-GE" at the end of the word * * @return true if encoding handled in this routine, false if not * */ boolean Internal_Hard_G() { // if not "-GE" at end if(!(((m_current + 1) == m_last) && (CharAt(m_current + 1) == 'E') ) && (Internal_Hard_NG() || Internal_Hard_GEN_GIN_GET_GIT() || Internal_Hard_G_Open_Syllable() || Internal_Hard_G_Other())) { return true; } return false; } /** * Detect words where "-ge-" or "-gi-" get a 'hard' 'g' * even though this is usually a 'soft' 'g' context * * @return true if 'hard' 'g' detected * */ boolean Internal_Hard_G_Other() { if((StringAt(m_current, 4, "GETH", "GEAR", "GEIS", "GIRL", "GIVI", "GIVE", "GIFT", "GIRD", "GIRT", "GILV", "GILD", "GELD", "") && !StringAt((m_current - 3), 6, "GINGIV", "") ) // "gish" but not "largish" || (StringAt((m_current + 1), 3, "ISH", "") && (m_current > 0) && !StringAt(0, 4, "LARG", "")) || (StringAt((m_current - 2), 5, "MAGED", "MEGID", "") && !((m_current + 2) == m_last)) || StringAt(m_current, 3, "GEZ", "") || StringAt(0, 4, "WEGE", "HAGE", "") || (StringAt((m_current - 2), 6, "ONGEST", "UNGEST", "") && ((m_current + 3) == m_last) && !StringAt((m_current - 3), 7, "CONGEST", "")) || StringAt(0, 5, "VOEGE", "BERGE", "HELGE", "") || (StringAt(0, 4, "ENGE", "BOGY", "") && (m_length == 4)) || StringAt(m_current, 6, "GIBBON", "") || StringAt(0, 10, "CORREGIDOR", "") || StringAt(0, 8, "INGEBORG", "") || (StringAt(m_current, 4, "GILL", "") && (((m_current + 3) == m_last) || ((m_current + 4) == m_last)) && !StringAt(0, 8, "STURGILL", ""))) { return true; } return false; } /** * Detect words where "-gy-", "-gie-", "-gee-", * or "-gio-" get a 'hard' 'g' even though this is * usually a 'soft' 'g' context * * @return true if 'hard' 'g' detected * */ boolean Internal_Hard_G_Open_Syllable() { if(StringAt((m_current + 1), 3, "EYE", "") || StringAt((m_current - 2), 4, "FOGY", "POGY", "YOGI", "") || StringAt((m_current - 2), 5, "MAGEE", "MCGEE", "HAGIO", "") || StringAt((m_current - 1), 4, "RGEY", "OGEY", "") || StringAt((m_current - 3), 5, "HOAGY", "STOGY", "PORGY", "") || StringAt((m_current - 5), 8, "CARNEGIE", "") || (StringAt((m_current - 1), 4, "OGEY", "OGIE", "") && ((m_current + 2) == m_last))) { return true; } return false; } /** * Detect a number of contexts, mostly german names, that * take a 'hard' 'g'. * * @return true if 'hard' 'g' detected, false if not * */ boolean Internal_Hard_GEN_GIN_GET_GIT() { if((StringAt((m_current - 3), 6, "FORGET", "TARGET", "MARGIT", "MARGET", "TURGEN", "BERGEN", "MORGEN", "JORGEN", "HAUGEN", "JERGEN", "JURGEN", "LINGEN", "BORGEN", "LANGEN", "KLAGEN", "STIGER", "BERGER", "") && !StringAt(m_current, 7, "GENETIC", "GENESIS", "") && !StringAt((m_current - 4), 8, "PLANGENT", "")) || (StringAt((m_current - 3), 6, "BERGIN", "FEAGIN", "DURGIN", "") && ((m_current + 2) == m_last)) || (StringAt((m_current - 2), 5, "ENGEN", "") && !StringAt((m_current + 3), 3, "DER", "ETI", "ESI", "")) || StringAt((m_current - 4), 7, "JUERGEN", "") || StringAt(0, 5, "NAGIN", "MAGIN", "HAGIN", "") || (StringAt(0, 5, "ENGIN", "DEGEN", "LAGEN", "MAGEN", "NAGIN", "") && (m_length == 5)) || (StringAt((m_current - 2), 5, "BEGET", "BEGIN", "HAGEN", "FAGIN", "BOGEN", "WIGIN", "NTGEN", "EIGEN", "WEGEN", "WAGEN", "") && !StringAt((m_current - 5), 8, "OSPHAGEN", ""))) { return true; } return false; } /** * Detect a number of contexts of '-ng-' that will * take a 'hard' 'g' despite being followed by a * front vowel. * * @return true if 'hard' 'g' detected, false if not * */ boolean Internal_Hard_NG() { if((StringAt((m_current - 3), 4, "DANG", "FANG", "SING", "") // exception to exception && !StringAt((m_current - 5), 8, "DISINGEN", "") ) || StringAt(0, 5, "INGEB", "ENGEB", "") || (StringAt((m_current - 3), 4, "RING", "WING", "HANG", "LONG", "") && !(StringAt((m_current - 4), 5, "CRING", "FRING", "ORANG", "TWING", "CHANG", "PHANG", "") || StringAt((m_current - 5), 6, "SYRING", "") || StringAt((m_current - 3), 7, "RINGENC", "RINGENT", "LONGITU", "LONGEVI", "") // e.g. 'longino', 'mastrangelo' || (StringAt(m_current, 4, "GELO", "GINO", "") && ((m_current + 3) == m_last)))) || (StringAt((m_current - 1), 3, "NGY", "") // exceptions to exception && !(StringAt((m_current - 3), 5, "RANGY", "MANGY", "MINGY", "") || StringAt((m_current - 4), 6, "SPONGY", "STINGY", "")))) { return true; } return false; } /** * Encode special case where "-GA-" => J * * @return true if encoding handled in this routine, false if not * */ boolean Encode_GA_To_J() { // 'margary', 'margarine' if((StringAt((m_current - 3), 7, "MARGARY", "MARGARI", "") // but not in spanish forms such as "margatita" && !StringAt((m_current - 3), 8, "MARGARIT", "")) || StringAt(0, 4, "GAOL", "") || StringAt((m_current - 2), 5, "ALGAE", "")) { MetaphAddExactApprox("J", "G", "J", "K"); AdvanceCounter(2, 1); return true; } return false; } /** * Encode 'H' * * */ void Encode_H() { if(Encode_Initial_Silent_H() || Encode_Initial_HS() || Encode_Initial_HU_HW() || Encode_Non_Initial_Silent_H()) { return; } //only keep if first & before vowel or btw. 2 vowels if(!Encode_H_Pronounced()) { //also takes care of 'HH' m_current++; } } /** * Encode cases where initial 'H' is not pronounced (in American) * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Initial_Silent_H() { //'hour', 'herb', 'heir', 'honor' if(StringAt((m_current + 1), 3, "OUR", "ERB", "EIR", "") || StringAt((m_current + 1), 4, "ONOR", "") || StringAt((m_current + 1), 5, "ONOUR", "ONEST", "")) { // british pronounce H in this word // americans give it 'H' for the name, // no 'H' for the plant if((m_current == 0) && StringAt(m_current, 4, "HERB", "")) { if(m_encodeVowels) { MetaphAdd("HA", "A"); } else { MetaphAdd("H", "A"); } } else if((m_current == 0) || m_encodeVowels) { MetaphAdd("A"); } m_current++; // don't encode vowels twice m_current = SkipVowels(m_current); return true; } return false; } /** * Encode "HS-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Initial_HS() { // old chinese pinyin transliteration // e.g., 'HSIAO' if ((m_current == 0) && StringAt(0, 2, "HS", "")) { MetaphAdd("X"); m_current += 2; return true; } return false; } /** * Encode cases where "HU-" is pronounced as part of a vowel dipthong * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Initial_HU_HW() { // spanish spellings and chinese pinyin transliteration if (StringAt(0, 3, "HUA", "HUE", "HWA", "")) { if(!StringAt(m_current, 4, "HUEY", "")) { MetaphAdd("A"); if(!m_encodeVowels) { m_current += 3; } else { m_current++; // don't encode vowels twice while(IsVowel(m_current) || (CharAt(m_current) == 'W')) { m_current++; } } return true; } } return false; } /** * Encode cases where 'H' is silent between vowels * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Non_Initial_Silent_H() { //exceptions - 'h' not pronounced // "PROHIB" BUT NOT "PROHIBIT" if(StringAt((m_current - 2), 5, "NIHIL", "VEHEM", "LOHEN", "NEHEM", "MAHON", "MAHAN", "COHEN", "GAHAN", "") || StringAt((m_current - 3), 6, "GRAHAM", "PROHIB", "FRAHER", "TOOHEY", "TOUHEY", "") || StringAt((m_current - 3), 5, "TOUHY", "") || StringAt(0, 9, "CHIHUAHUA", "")) { if(!m_encodeVowels) { m_current += 2; } else { m_current++; // don't encode vowels twice m_current = SkipVowels(m_current); } return true; } return false; } /** * Encode cases where 'H' is pronounced * * @return true if encoding handled in this routine, false if not * */ boolean Encode_H_Pronounced() { if((((m_current == 0) || IsVowel(m_current - 1) || ((m_current > 0) && (CharAt(m_current - 1) == 'W'))) && IsVowel(m_current + 1)) // e.g. 'alWahhab' || ((CharAt(m_current + 1) == 'H') && IsVowel(m_current + 2))) { MetaphAdd("H"); AdvanceCounter(2, 1); return true; } return false; } /** * Encode 'J' * */ void Encode_J() { if(Encode_Spanish_J() || Encode_Spanish_OJ_UJ()) { return; } Encode_Other_J(); } /** * Encode cases where initial or medial "j" is in a spanish word or name * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Spanish_J() { //obvious spanish, e.g. "jose", "san jacinto" if((StringAt((m_current + 1), 3, "UAN", "ACI", "ALI", "EFE", "ICA", "IME", "OAQ", "UAR", "") && !StringAt(m_current, 8, "JIMERSON", "JIMERSEN", "")) || (StringAt((m_current + 1), 3, "OSE", "") && ((m_current + 3) == m_last)) || StringAt((m_current + 1), 4, "EREZ", "UNTA", "AIME", "AVIE", "AVIA", "") || StringAt((m_current + 1), 6, "IMINEZ", "ARAMIL", "") || (((m_current + 2) == m_last) && StringAt((m_current - 2), 5, "MEJIA", "")) || StringAt((m_current - 2), 5, "TEJED", "TEJAD", "LUJAN", "FAJAR", "BEJAR", "BOJOR", "CAJIG", "DEJAS", "DUJAR", "DUJAN", "MIJAR", "MEJOR", "NAJAR", "NOJOS", "RAJED", "RIJAL", "REJON", "TEJAN", "UIJAN", "") || StringAt((m_current - 3), 8, "ALEJANDR", "GUAJARDO", "TRUJILLO", "") || (StringAt((m_current - 2), 5, "RAJAS", "") && (m_current > 2)) || (StringAt((m_current - 2), 5, "MEJIA", "") && !StringAt((m_current - 2), 6, "MEJIAN", "")) || StringAt((m_current - 1), 5, "OJEDA", "") || StringAt((m_current - 3), 5, "LEIJA", "MINJA", "") || StringAt((m_current - 3), 6, "VIAJES", "GRAJAL", "") || StringAt(m_current, 8, "JAUREGUI", "") || StringAt((m_current - 4), 8, "HINOJOSA", "") || StringAt(0, 4, "SAN ", "") || (((m_current + 1) == m_last) && (CharAt(m_current + 1) == 'O') // exceptions && !(StringAt(0, 4, "TOJO", "") || StringAt(0, 5, "BANJO", "") || StringAt(0, 6, "MARYJO", "")))) { // americans pronounce "juan" as 'wan' // and "marijuana" and "tijuana" also // do not get the 'H' as in spanish, so // just treat it like a vowel in these cases if(!(StringAt(m_current, 4, "JUAN", "") || StringAt(m_current, 4, "JOAQ", ""))) { MetaphAdd("H"); } else { if(m_current == 0) { MetaphAdd("A"); } } AdvanceCounter(2, 1); return true; } // Jorge gets 2nd HARHA. also JULIO, JESUS if(StringAt((m_current + 1), 4, "ORGE", "ULIO", "ESUS", "") && !StringAt(0, 6, "JORGEN", "")) { // get both consonants for "jorge" if(((m_current + 4) == m_last) && StringAt((m_current + 1), 4, "ORGE", "")) { if(m_encodeVowels) { MetaphAdd("JARJ", "HARHA"); } else { MetaphAdd("JRJ", "HRH"); } AdvanceCounter(5, 5); return true; } MetaphAdd("J", "H"); AdvanceCounter(2, 1); return true; } return false; } /** * Encode cases where 'J' is clearly in a german word or name * that americans pronounce in the german fashion * * @return true if encoding handled in this routine, false if not * */ boolean Encode_German_J() { if(StringAt((m_current + 1), 2, "AH", "") || (StringAt((m_current + 1), 5, "OHANN", "") && ((m_current + 5) == m_last)) || (StringAt((m_current + 1), 3, "UNG", "") && !StringAt((m_current + 1), 4, "UNGL", "")) || StringAt((m_current + 1), 3, "UGO", "")) { MetaphAdd("A"); AdvanceCounter(2, 1); return true; } return false; } /** * Encode "-JOJ-" and "-JUJ-" as spanish words * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Spanish_OJ_UJ() { if(StringAt((m_current + 1), 5, "OJOBA", "UJUY ", "")) { if(m_encodeVowels) { MetaphAdd("HAH"); } else { MetaphAdd("HH"); } AdvanceCounter(4, 3); return true; } return false; } /** * Encode 'J' => J * * @return true if encoding handled in this routine, false if not * */ boolean Encode_J_To_J() { if(IsVowel(m_current + 1)) { if((m_current == 0) && Names_Beginning_With_J_That_Get_Alt_Y()) { // 'Y' is a vowel so encode // is as 'A' if(m_encodeVowels) { MetaphAdd("JA", "A"); } else { MetaphAdd("J", "A"); } } else { if(m_encodeVowels) { MetaphAdd("JA"); } else { MetaphAdd("J"); } } m_current++; m_current = SkipVowels(m_current); return false; } else { MetaphAdd("J"); m_current++; return true; } // return false; } /** * Encode 'J' toward end in spanish words * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Spanish_J_2() { // spanish forms e.g. "brujo", "badajoz" if((((m_current - 2) == 0) && StringAt((m_current - 2), 4, "BOJA", "BAJA", "BEJA", "BOJO", "MOJA", "MOJI", "MEJI", "")) || (((m_current - 3) == 0) && StringAt((m_current - 3), 5, "FRIJO", "BRUJO", "BRUJA", "GRAJE", "GRIJA", "LEIJA", "QUIJA", "")) || (((m_current + 3) == m_last) && StringAt((m_current - 1), 5, "AJARA", "")) || (((m_current + 2) == m_last) && StringAt((m_current - 1), 4, "AJOS", "EJOS", "OJAS", "OJOS", "UJON", "AJOZ", "AJAL", "UJAR", "EJON", "EJAN", "")) || (((m_current + 1) == m_last) && (StringAt((m_current - 1), 3, "OJA", "EJA", "") && !StringAt(0, 4, "DEJA", "")))) { MetaphAdd("H"); AdvanceCounter(2, 1); return true; } return false; } /** * Encode 'J' as vowel in some exception cases * * @return true if encoding handled in this routine, false if not * */ boolean Encode_J_As_Vowel() { if(StringAt(m_current, 5, "JEWSK", "")) { MetaphAdd("J", ""); return true; } // e.g. "stijl", "sejm" - dutch, scandanavian, and eastern european spellings if((StringAt((m_current + 1), 1, "L", "T", "K", "S", "N", "M", "") // except words from hindi and arabic && !StringAt((m_current + 2), 1, "A", "")) || StringAt(0, 9, "HALLELUJA", "LJUBLJANA", "") || StringAt(0, 4, "LJUB", "BJOR", "") || StringAt(0, 5, "HAJEK", "") || StringAt(0, 3, "WOJ", "") // e.g. 'fjord' || StringAt(0, 2, "FJ", "") // e.g. 'rekjavik', 'blagojevic' || StringAt(m_current, 5, "JAVIK", "JEVIC", "") || (((m_current + 1) == m_last) && StringAt(0, 5, "SONJA", "TANJA", "TONJA", ""))) { return true; } return false; } /** * Call routines to encode 'J', in proper order * */ void Encode_Other_J() { if(m_current == 0) { if(Encode_German_J()) { return; } else { if(Encode_J_To_J()) { return; } } } else { if(Encode_Spanish_J_2()) { return; } else if(!Encode_J_As_Vowel()) { MetaphAdd("J"); } //it could happen! e.g. "hajj" // eat redundant 'J' if(CharAt(m_current + 1) == 'J') { m_current += 2; } else { m_current++; } } } /** * Encode 'K' * * */ void Encode_K() { if(!Encode_Silent_K()) { MetaphAdd("K"); // eat redundant 'K's and 'Q's if((CharAt(m_current + 1) == 'K') || (CharAt(m_current + 1) == 'Q')) { m_current += 2; } else { m_current++; } } } /** * Encode cases where 'K' is not pronounced * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Silent_K() { //skip this except for special cases if((m_current == 0) && StringAt(m_current, 2, "KN", "")) { if(!(StringAt((m_current + 2), 5, "ESSET", "IEVEL", "") || StringAt((m_current + 2), 3, "ISH", "") )) { m_current += 1; return true; } } // e.g. "know", "knit", "knob" if((StringAt((m_current + 1), 3, "NOW", "NIT", "NOT", "NOB", "") // exception, "slipknot" => SLPNT but "banknote" => PNKNT && !StringAt(0, 8, "BANKNOTE", "")) || StringAt((m_current + 1), 4, "NOCK", "NUCK", "NIFE", "NACK", "") || StringAt((m_current + 1), 5, "NIGHT", "")) { // N already encoded before // e.g. "penknife" if ((m_current > 0) && CharAt(m_current - 1) == 'N') { m_current += 2; } else { m_current++; } return true; } return false; } /** * Encode 'L' * * Includes special vowel transposition * encoding, where 'LE' => AL * */ void Encode_L() { // logic below needs to know this // after 'm_current' variable changed int save_current = m_current; Interpolate_Vowel_When_Cons_L_At_End(); if(Encode_LELY_To_L() || Encode_COLONEL() || Encode_French_AULT() || Encode_French_EUIL() || Encode_French_OULX() || Encode_Silent_L_In_LM() || Encode_Silent_L_In_LK_LV() || Encode_Silent_L_In_OULD()) { return; } if(Encode_LL_As_Vowel_Cases()) { return; } Encode_LE_Cases(save_current); } /** * Cases where an L follows D, G, or T at the * end have a schwa pronounced before the L * */ void Interpolate_Vowel_When_Cons_L_At_End() { if(m_encodeVowels == true) { // e.g. "ertl", "vogl" if((m_current == m_last) && StringAt((m_current - 1), 1, "D", "G", "T", "")) { MetaphAdd("A"); } } } /** * Catch cases where 'L' spelled twice but pronounced * once, e.g., 'DOCILELY' => TSL * * @return true if encoding handled in this routine, false if not * */ boolean Encode_LELY_To_L() { // e.g. "agilely", "docilely" if(StringAt((m_current - 1), 5, "ILELY", "") && ((m_current + 3) == m_last)) { MetaphAdd("L"); m_current += 3; return true; } return false; } /** * Encode special case "colonel" => KRNL. Can somebody tell * me how this pronounciation came to be? * * @return true if encoding handled in this routine, false if not * */ boolean Encode_COLONEL() { if(StringAt((m_current - 2), 7, "COLONEL", "")) { MetaphAdd("R"); m_current += 2; return true; } return false; } /** * Encode "-AULT-", found in a french names * * @return true if encoding handled in this routine, false if not * */ boolean Encode_French_AULT() { // e.g. "renault" and "foucault", well known to americans, but not "fault" if((m_current > 3) && (StringAt((m_current - 3), 5, "RAULT", "NAULT", "BAULT", "SAULT", "GAULT", "CAULT", "") || StringAt((m_current - 4), 6, "REAULT", "RIAULT", "NEAULT", "BEAULT", "")) && !(RootOrInflections(m_inWord, "ASSAULT") || StringAt((m_current - 8), 10, "SOMERSAULT","") || StringAt((m_current - 9), 11, "SUMMERSAULT", ""))) { m_current += 2; return true; } return false; } /** * Encode "-EUIL-", always found in a french word * * @return true if encoding handled in this routine, false if not * */ boolean Encode_French_EUIL() { // e.g. "auteuil" if(StringAt((m_current - 3), 4, "EUIL", "") && (m_current == m_last)) { m_current++; return true; } return false; } /** * Encode "-OULX", always found in a french word * * @return true if encoding handled in this routine, false if not * */ boolean Encode_French_OULX() { // e.g. "proulx" if(StringAt((m_current - 2), 4, "OULX", "") && ((m_current + 1) == m_last)) { m_current += 2; return true; } return false; } /** * Encodes contexts where 'L' is not pronounced in "-LM-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Silent_L_In_LM() { if(StringAt(m_current, 2, "LM", "LN", "")) { // e.g. "lincoln", "holmes", "psalm", "salmon" if((StringAt((m_current - 2), 4, "COLN", "CALM", "BALM", "MALM", "PALM", "") || (StringAt((m_current - 1), 3, "OLM", "") && ((m_current + 1) == m_last)) || StringAt((m_current - 3), 5, "PSALM", "QUALM", "") || StringAt((m_current - 2), 6, "SALMON", "HOLMES", "") || StringAt((m_current - 1), 6, "ALMOND", "") || ((m_current == 1) && StringAt((m_current - 1), 4, "ALMS", "") )) && (!StringAt((m_current + 2), 1, "A", "") && !StringAt((m_current - 2), 5, "BALMO", "") && !StringAt((m_current - 2), 6, "PALMER", "PALMOR", "BALMER", "") && !StringAt((m_current - 3), 5, "THALM", ""))) { m_current++; return true; } else { MetaphAdd("L"); m_current++; return true; } } return false; } /** * Encodes contexts where '-L-' is silent in 'LK', 'LV' * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Silent_L_In_LK_LV() { if((StringAt((m_current - 2), 4, "WALK", "YOLK", "FOLK", "HALF", "TALK", "CALF", "BALK", "CALK", "") || (StringAt((m_current - 2), 4, "POLK", "") && !StringAt((m_current - 2), 5, "POLKA", "WALKO", "")) || (StringAt((m_current - 2), 4, "HALV", "") && !StringAt((m_current - 2), 5, "HALVA", "HALVO", "")) || (StringAt((m_current - 3), 5, "CAULK", "CHALK", "BAULK", "FAULK", "") && !StringAt((m_current - 4), 6, "SCHALK", "")) || (StringAt((m_current - 2), 5, "SALVE", "CALVE", "") || StringAt((m_current - 2), 6, "SOLDER", "")) // exceptions to above cases where 'L' is usually pronounced && !StringAt((m_current - 2), 6, "SALVER", "CALVER", "")) && !StringAt((m_current - 5), 9, "GONSALVES", "GONCALVES", "") && !StringAt((m_current - 2), 6, "BALKAN", "TALKAL", "") && !StringAt((m_current - 3), 5, "PAULK", "CHALF", "")) { m_current++; return true; } return false; } /** * Encode 'L' in contexts of "-OULD-" where it is silent * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Silent_L_In_OULD() { //'would', 'could' if(StringAt((m_current - 3), 5, "WOULD", "COULD", "") || (StringAt((m_current - 4), 6, "SHOULD", "") && !StringAt((m_current - 4), 8, "SHOULDER", ""))) { MetaphAddExactApprox("D", "T"); m_current += 2; return true; } return false; } /** * Encode "-ILLA-" and "-ILLE-" in spanish and french * contexts were americans know to pronounce it as a 'Y' * * @return true if encoding handled in this routine, false if not * */ boolean Encode_LL_As_Vowel_Special_Cases() { if(StringAt((m_current - 5), 8, "TORTILLA", "") || StringAt((m_current - 8), 11, "RATATOUILLE", "") // e.g. 'guillermo', "veillard" || (StringAt(0, 5, "GUILL", "VEILL", "GAILL", "") // 'guillotine' usually has '-ll-' pronounced as 'L' in english && !(StringAt((m_current - 3), 7, "GUILLOT", "GUILLOR", "GUILLEN", "") || (StringAt(0, 5, "GUILL", "") && (m_length == 5)))) // e.g. "brouillard", "gremillion" || StringAt(0, 7, "BROUILL", "GREMILL", "ROBILL", "") // e.g. 'mireille' || (StringAt((m_current - 2), 5, "EILLE", "") && ((m_current + 2) == m_last) // exception "reveille" usually pronounced as 're-vil-lee' && !StringAt((m_current - 5), 8, "REVEILLE", ""))) { m_current += 2; return true; } return false; } /** * Encode other spanish cases where "-LL-" is pronounced as 'Y' * * @return true if encoding handled in this routine, false if not * */ boolean Encode_LL_As_Vowel() { //spanish e.g. "cabrillo", "gallegos" but also "gorilla", "ballerina" - // give both pronounciations since an american might pronounce "cabrillo" // in the spanish or the american fashion. if((((m_current + 3) == m_length) && StringAt((m_current - 1), 4, "ILLO", "ILLA", "ALLE", "")) || (((StringAt((m_last - 1), 2, "AS", "OS", "") || StringAt(m_last, 2, "AS", "OS", "") || StringAt(m_last, 1, "A", "O", "")) && StringAt((m_current - 1), 2, "AL", "IL", "")) && !StringAt((m_current - 1), 4, "ALLA", "")) || StringAt(0, 5, "VILLE", "VILLA", "") || StringAt(0, 8, "GALLARDO", "VALLADAR", "MAGALLAN", "CAVALLAR", "BALLASTE", "") || StringAt(0, 3, "LLA", "")) { MetaphAdd("L", ""); m_current += 2; return true; } return false; } /** * Call routines to encode "-LL-", in proper order * * @return true if encoding handled in this routine, false if not * */ boolean Encode_LL_As_Vowel_Cases() { if(CharAt(m_current + 1) == 'L') { if(Encode_LL_As_Vowel_Special_Cases()) { return true; } else if(Encode_LL_As_Vowel()) { return true; } m_current += 2; } else { m_current++; } return false; } /** * Encode vowel-encoding cases where "-LE-" is pronounced "-EL-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Vowel_LE_Transposition(int save_current) { // transposition of vowel sound and L occurs in many words, // e.g. "bristle", "dazzle", "goggle" => KAKAL if(m_encodeVowels && (save_current > 1) && !IsVowel(save_current - 1) && (CharAt(save_current + 1) == 'E') && (CharAt(save_current - 1) != 'L') && (CharAt(save_current - 1) != 'R') // lots of exceptions to this: && !IsVowel(save_current + 2) && !StringAt(0, 7, "ECCLESI", "COMPLEC", "COMPLEJ", "ROBLEDO", "") && !StringAt(0, 5, "MCCLE", "MCLEL", "") && !StringAt(0, 6, "EMBLEM", "KADLEC", "") && !(((save_current + 2) == m_last) && StringAt(save_current, 3, "LET", "")) && !StringAt(save_current, 7, "LETTING", "") && !StringAt(save_current, 6, "LETELY", "LETTER", "LETION", "LETIAN", "LETING", "LETORY", "") && !StringAt(save_current, 5, "LETUS", "LETIV", "") && !StringAt(save_current, 4, "LESS", "LESQ", "LECT", "LEDG", "LETE", "LETH", "LETS", "LETT", "") && !StringAt(save_current, 3, "LEG", "LER", "LEX", "") // e.g. "complement" !=> KAMPALMENT && !(StringAt(save_current, 6, "LEMENT", "") && !(StringAt((m_current - 5), 6, "BATTLE", "TANGLE", "PUZZLE", "RABBLE", "BABBLE", "") || StringAt((m_current - 4), 5, "TABLE", ""))) && !(((save_current + 2) == m_last) && StringAt((save_current - 2), 5, "OCLES", "ACLES", "AKLES", "")) && !StringAt((save_current - 3), 5, "LISLE", "AISLE", "") && !StringAt(0, 4, "ISLE", "") && !StringAt(0, 6, "ROBLES", "") && !StringAt((save_current - 4), 7, "PROBLEM", "RESPLEN", "") && !StringAt((save_current - 3), 6, "REPLEN", "") && !StringAt((save_current - 2), 4, "SPLE", "") && (CharAt(save_current - 1) != 'H') && (CharAt(save_current - 1) != 'W')) { MetaphAdd("AL"); flag_AL_inversion = true; // eat redundant 'L' if(CharAt(save_current + 2) == 'L') { m_current = save_current + 3; } return true; } return false; } /** * Encode special vowel-encoding cases where 'E' is not * silent at the end of a word as is the usual case * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Vowel_Preserve_Vowel_After_L(int save_current) { // an example of where the vowel would NOT need to be preserved // would be, say, "hustled", where there is no vowel pronounced // between the 'l' and the 'd' if(m_encodeVowels && !IsVowel(save_current - 1) && (CharAt(save_current + 1) == 'E') && (save_current > 1) && ((save_current + 1) != m_last) && !(StringAt((save_current + 1), 2, "ES", "ED", "") && ((save_current + 2) == m_last)) && !StringAt((save_current - 1), 5, "RLEST", "") ) { MetaphAdd("LA"); m_current = SkipVowels(m_current); return true; } return false; } /** * Call routines to encode "-LE-", in proper order * * @param save_current index of actual current letter * */ void Encode_LE_Cases(int save_current) { if(Encode_Vowel_LE_Transposition(save_current)) { return; } else { if(Encode_Vowel_Preserve_Vowel_After_L(save_current)) { return; } else { MetaphAdd("L"); } } } /** * Encode "-M-" * */ void Encode_M() { if(Encode_Silent_M_At_Beginning() || Encode_MR_And_MRS() || Encode_MAC() || Encode_MPT()) { return; } // Silent 'B' should really be handled // under 'B", not here under 'M'! Encode_MB(); MetaphAdd("M"); } /** * Encode cases where 'M' is silent at beginning of word * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Silent_M_At_Beginning() { //skip these when at start of word if((m_current == 0) && StringAt(m_current, 2, "MN", "")) { m_current += 1; return true; } return false; } /** * Encode special cases "Mr." and "Mrs." * * @return true if encoding handled in this routine, false if not * */ boolean Encode_MR_And_MRS() { if((m_current == 0) && StringAt(m_current, 2, "MR", "")) { // exceptions for "mr." and "mrs." if((m_length == 2) && StringAt(m_current, 2, "MR", "")) { if(m_encodeVowels) { MetaphAdd("MASTAR"); } else { MetaphAdd("MSTR"); } m_current += 2; return true; } else if((m_length == 3) && StringAt(m_current, 3, "MRS", "")) { if(m_encodeVowels) { MetaphAdd("MASAS"); } else { MetaphAdd("MSS"); } m_current += 3; return true; } } return false; } /** * Encode "Mac-" and "Mc-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_MAC() { // should only find irish and // scottish names e.g. 'macintosh' if((m_current == 0) && (StringAt(0, 7, "MACIVER", "MACEWEN", "") || StringAt(0, 8, "MACELROY", "MACILROY", "") || StringAt(0, 9, "MACINTOSH", "") || StringAt(0, 2, "MC", "") )) { if(m_encodeVowels) { MetaphAdd("MAK"); } else { MetaphAdd("MK"); } if(StringAt(0, 2, "MC", "")) { if(StringAt((m_current + 2), 1, "K", "G", "Q", "") // watch out for e.g. "McGeorge" && !StringAt((m_current + 2), 4, "GEOR", "")) { m_current += 3; } else { m_current += 2; } } else { m_current += 3; } return true; } return false; } /** * Encode silent 'M' in context of "-MPT-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_MPT() { if(StringAt((m_current - 2), 8, "COMPTROL", "") || StringAt((m_current - 4), 7, "ACCOMPT", "")) { MetaphAdd("N"); m_current += 2; return true; } return false; } /** * Test if 'B' is silent in these contexts * * @return true if 'B' is silent in this context * */ boolean Test_Silent_MB_1() { // e.g. "LAMB", "COMB", "LIMB", "DUMB", "BOMB" // Handle combining roots first if (((m_current == 3) && StringAt((m_current - 3), 5, "THUMB", "")) || ((m_current == 2) && StringAt((m_current - 2), 4, "DUMB", "BOMB", "DAMN", "LAMB", "NUMB", "TOMB", "") )) { return true; } return false; } /** * Test if 'B' is pronounced in this context * * @return true if 'B' is pronounced in this context * */ boolean Test_Pronounced_MB() { if (StringAt((m_current - 2), 6, "NUMBER", "") || (StringAt((m_current + 2), 1, "A", "") && !StringAt((m_current - 2), 7, "DUMBASS", "")) || StringAt((m_current + 2), 1, "O", "") || StringAt((m_current - 2), 6, "LAMBEN", "LAMBER", "LAMBET", "TOMBIG", "LAMBRE", "")) { return true; } return false; } /** * Test whether "-B-" is silent in these contexts * * @return true if 'B' is silent in this context * */ boolean Test_Silent_MB_2() { // 'M' is the current letter if ((CharAt(m_current + 1) == 'B') && (m_current > 1) && (((m_current + 1) == m_last) // other situations where "-MB-" is at end of root // but not at end of word. The tests are for standard // noun suffixes. // e.g. "climbing" => KLMNK || StringAt((m_current + 2), 3, "ING", "ABL", "") || StringAt((m_current + 2), 4, "LIKE", "") || ((CharAt(m_current + 2) == 'S') && ((m_current + 2) == m_last)) || StringAt((m_current - 5), 7, "BUNCOMB", "") // e.g. "bomber", || (StringAt((m_current + 2), 2, "ED", "ER", "") && ((m_current + 3) == m_last) && (StringAt(0, 5, "CLIMB", "PLUMB", "") // e.g. "beachcomber" || !StringAt((m_current - 1), 5, "IMBER", "AMBER", "EMBER", "UMBER", "")) // exceptions && !StringAt((m_current - 2), 6, "CUMBER", "SOMBER", "") ) ) ) { return true; } return false; } /** * Test if 'B' is pronounced in these "-MB-" contexts * * @return true if "-B-" is pronounced in these contexts * */ boolean Test_Pronounced_MB_2() { // e.g. "bombastic", "umbrage", "flamboyant" if (StringAt((m_current - 1), 5, "OMBAS", "OMBAD", "UMBRA", "") || StringAt((m_current - 3), 4, "FLAM", "") ) { return true; } return false; } /** * Tests for contexts where "-N-" is silent when after "-M-" * * @return true if "-N-" is silent in these contexts * */ boolean Test_MN() { if ((CharAt(m_current + 1) == 'N') && (((m_current + 1) == m_last) // or at the end of a word but followed by suffixes || (StringAt((m_current + 2), 3, "ING", "EST", "") && ((m_current + 4) == m_last)) || ((CharAt(m_current + 2) == 'S') && ((m_current + 2) == m_last)) || (StringAt((m_current + 2), 2, "LY", "ER", "ED", "") && ((m_current + 3) == m_last)) || StringAt((m_current - 2), 9, "DAMNEDEST", "") || StringAt((m_current - 5), 9, "GODDAMNIT", "") )) { return true; } return false; } /** * Call routines to encode "-MB-", in proper order * */ void Encode_MB() { if(Test_Silent_MB_1()) { if(Test_Pronounced_MB()) { m_current++; } else { m_current += 2; } } else if(Test_Silent_MB_2()) { if(Test_Pronounced_MB_2()) { m_current++; } else { m_current += 2; } } else if(Test_MN()) { m_current += 2; } else { // eat redundant 'M' if (CharAt(m_current + 1) == 'M') { m_current += 2; } else { m_current++; } } } /** * Encode "-N-" * */ void Encode_N() { if(Encode_NCE()) { return; } // eat redundant 'N' if(CharAt(m_current + 1) == 'N') { m_current += 2; } else { m_current++; } if (!StringAt((m_current - 3), 8, "MONSIEUR", "") // e.g. "aloneness", && !StringAt((m_current - 3), 6, "NENESS", "")) { MetaphAdd("N"); } } /** * Encode "-NCE-" and "-NSE-" * "entrance" is pronounced exactly the same as "entrants" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_NCE() { //'acceptance', 'accountancy' if(StringAt((m_current + 1), 1, "C", "S", "") && StringAt((m_current + 2), 1, "E", "Y", "I", "") && (((m_current + 2) == m_last) || (((m_current + 3) == m_last)) && (CharAt(m_current + 3) == 'S'))) { MetaphAdd("NTS"); m_current += 2; return true; } return false; } /** * Encode "-P-" * */ void Encode_P() { if(Encode_Silent_P_At_Beginning() || Encode_PT() || Encode_PH() || Encode_PPH() || Encode_RPS() || Encode_COUP() || Encode_PNEUM() || Encode_PSYCH() || Encode_PSALM()) { return; } Encode_PB(); MetaphAdd("P"); } /** * Encode cases where "-P-" is silent at the start of a word * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Silent_P_At_Beginning() { //skip these when at start of word if((m_current == 0) && StringAt(m_current, 2, "PN", "PF", "PS", "PT", "")) { m_current += 1; return true; } return false; } /** * Encode cases where "-P-" is silent before "-T-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_PT() { // 'pterodactyl', 'receipt', 'asymptote' if((CharAt(m_current + 1) == 'T')) { if (((m_current == 0) && StringAt(m_current, 5, "PTERO", "")) || StringAt((m_current - 5), 7, "RECEIPT", "") || StringAt((m_current - 4), 8, "ASYMPTOT", "")) { MetaphAdd("T"); m_current += 2; return true; } } return false; } /** * Encode "-PH-", usually as F, with exceptions for * cases where it is silent, or where the 'P' and 'T' * are pronounced seperately because they belong to * two different words in a combining form * * @return true if encoding handled in this routine, false if not * */ boolean Encode_PH() { if(CharAt(m_current + 1) == 'H') { // 'PH' silent in these contexts if (StringAt(m_current, 9, "PHTHALEIN", "") || ((m_current == 0) && StringAt(m_current, 4, "PHTH", "")) || StringAt((m_current - 3), 10, "APOPHTHEGM", "")) { MetaphAdd("0"); m_current += 4; } // combining forms //'sheepherd', 'upheaval', 'cupholder' else if((m_current > 0) && (StringAt((m_current + 2), 3, "EAD", "OLE", "ELD", "ILL", "OLD", "EAP", "ERD", "ARD", "ANG", "ORN", "EAV", "ART", "") || StringAt((m_current + 2), 4, "OUSE", "") || (StringAt((m_current + 2), 2, "AM", "") && !StringAt((m_current -1), 5, "LPHAM", "")) || StringAt((m_current + 2), 5, "AMMER", "AZARD", "UGGER", "") || StringAt((m_current + 2), 6, "OLSTER", "")) && !StringAt((m_current - 3), 5, "LYMPH", "NYMPH", "")) { MetaphAdd("P"); AdvanceCounter(3, 2); } else { MetaphAdd("F"); m_current += 2; } return true; } return false; } /** * Encode "-PPH-". I don't know why the greek poet's * name is transliterated this way... * * @return true if encoding handled in this routine, false if not * */ boolean Encode_PPH() { // 'sappho' if((CharAt(m_current + 1) == 'P') && ((m_current + 2) < m_length) && (CharAt(m_current + 2) == 'H')) { MetaphAdd("F"); m_current += 3; return true; } return false; } /** * Encode "-CORPS-" where "-PS-" not pronounced * since the cognate is here from the french * * @return true if encoding handled in this routine, false if not * */ boolean Encode_RPS() { //'-corps-', 'corpsman' if(StringAt((m_current - 3), 5, "CORPS", "") && !StringAt((m_current - 3), 6, "CORPSE", "")) { m_current += 2; return true; } return false; } /** * Encode "-COUP-" where "-P-" is not pronounced * since the word is from the french * * @return true if encoding handled in this routine, false if not * */ boolean Encode_COUP() { //'coup' if((m_current == m_last) && StringAt((m_current - 3), 4, "COUP", "") && !StringAt((m_current - 5), 6, "RECOUP", "")) { m_current++; return true; } return false; } /** * Encode 'P' in non-initial contexts of "-PNEUM-" * where is also silent * * @return true if encoding handled in this routine, false if not * */ boolean Encode_PNEUM() { //'-pneum-' if(StringAt((m_current + 1), 4, "NEUM", "")) { MetaphAdd("N"); m_current += 2; return true; } return false; } /** * Encode special case "-PSYCH-" where two encodings need to be * accounted for in one syllable, one for the 'PS' and one for * the 'CH' * * @return true if encoding handled in this routine, false if not * */ boolean Encode_PSYCH() { //'-psych-' if(StringAt((m_current + 1), 4, "SYCH", "")) { if(m_encodeVowels) { MetaphAdd("SAK"); } else { MetaphAdd("SK"); } m_current += 5; return true; } return false; } /** * Encode 'P' in context of "-PSALM-", where it has * become silent * * @return true if encoding handled in this routine, false if not * */ boolean Encode_PSALM() { //'-psalm-' if(StringAt((m_current + 1), 4, "SALM", "")) { // go ahead and encode entire word if(m_encodeVowels) { MetaphAdd("SAM"); } else { MetaphAdd("SM"); } m_current += 5; return true; } return false; } /** * Eat redundant 'B' or 'P' * */ void Encode_PB() { // e.g. "campbell", "raspberry" // eat redundant 'P' or 'B' if(StringAt((m_current + 1), 1, "P", "B", "")) { m_current += 2; } else { m_current++; } } /** * Encode "-Q-" * */ void Encode_Q() { // current pinyin if(StringAt(m_current, 3, "QIN", "")) { MetaphAdd("X"); m_current++; return; } // eat redundant 'Q' if(CharAt(m_current + 1) == 'Q') { m_current += 2; } else { m_current++; } MetaphAdd("K"); } /** * Encode "-R-" * */ void Encode_R() { if(Encode_RZ()) { return; } if(!Test_Silent_R()) { if(!Encode_Vowel_RE_Transposition()) { MetaphAdd("R"); } } // eat redundant 'R'; also skip 'S' as well as 'R' in "poitiers" if((CharAt(m_current + 1) == 'R') || StringAt((m_current - 6), 8, "POITIERS", "")) { m_current += 2; } else { m_current++; } } /** * Encode "-RZ-" according * to american and polish pronunciations * * @return true if encoding handled in this routine, false if not * */ boolean Encode_RZ() { if(StringAt((m_current - 2), 4, "GARZ", "KURZ", "MARZ", "MERZ", "HERZ", "PERZ", "WARZ", "") || StringAt(m_current, 5, "RZANO", "RZOLA", "") || StringAt((m_current - 1), 4, "ARZA", "ARZN", "")) { return false; } // 'yastrzemski' usually has 'z' silent in // united states, but should get 'X' in poland if(StringAt((m_current - 4), 11, "YASTRZEMSKI", "")) { MetaphAdd("R", "X"); m_current += 2; return true; } // 'BRZEZINSKI' gets two pronunciations // in the united states, neither of which // are authentically polish if(StringAt((m_current - 1), 10, "BRZEZINSKI", "")) { MetaphAdd("RS", "RJ"); // skip over 2nd 'Z' m_current += 4; return true; } // 'z' in 'rz after voiceless consonant gets 'X' // in alternate polish style pronunciation else if(StringAt((m_current - 1), 3, "TRZ", "PRZ", "KRZ", "") || (StringAt(m_current, 2, "RZ", "") && (IsVowel(m_current - 1) || (m_current == 0)))) { MetaphAdd("RS", "X"); m_current += 2; return true; } // 'z' in 'rz after voiceled consonant, vowel, or at // beginning gets 'J' in alternate polish style pronunciation else if(StringAt((m_current - 1), 3, "BRZ", "DRZ", "GRZ", "")) { MetaphAdd("RS", "J"); m_current += 2; return true; } return false; } /** * Test whether 'R' is silent in this context * * @return true if 'R' is silent in this context * */ boolean Test_Silent_R() { // test cases where 'R' is silent, either because the // word is from the french or because it is no longer pronounced. // e.g. "rogier", "monsieur", "surburban" if(((m_current == m_last) // reliably french word ending && StringAt((m_current - 2), 3, "IER", "") // e.g. "metier" && (StringAt((m_current - 5), 3, "MET", "VIV", "LUC", "") // e.g. "cartier", "bustier" || StringAt((m_current - 6), 4, "CART", "DOSS", "FOUR", "OLIV", "BUST", "DAUM", "ATEL", "SONN", "CORM", "MERC", "PELT", "POIR", "BERN", "FORT", "GREN", "SAUC", "GAGN", "GAUT", "GRAN", "FORC", "MESS", "LUSS", "MEUN", "POTH", "HOLL", "CHEN", "") // e.g. "croupier" || StringAt((m_current - 7), 5, "CROUP", "TORCH", "CLOUT", "FOURN", "GAUTH", "TROTT", "DEROS", "CHART", "") // e.g. "chevalier" || StringAt((m_current - 8), 6, "CHEVAL", "LAVOIS", "PELLET", "SOMMEL", "TREPAN", "LETELL", "COLOMB", "") || StringAt((m_current - 9), 7, "CHARCUT", "") || StringAt((m_current - 10), 8, "CHARPENT", ""))) || StringAt((m_current - 2), 7, "SURBURB", "WORSTED", "") || StringAt((m_current - 2), 9, "WORCESTER", "") || StringAt((m_current - 7), 8, "MONSIEUR", "") || StringAt((m_current - 6), 8, "POITIERS", "") ) { return true; } return false; } /** * Encode '-re-" as 'AR' in contexts * where this is the correct pronunciation * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Vowel_RE_Transposition() { // -re inversion is just like // -le inversion // e.g. "fibre" => FABAR or "centre" => SANTAR if((m_encodeVowels) && (CharAt(m_current + 1) == 'E') && (m_length > 3) && !StringAt(0, 5, "OUTRE", "LIBRE", "ANDRE", "") && !(StringAt(0, 4, "FRED", "TRES", "") && (m_length == 4)) && !StringAt((m_current - 2), 5, "LDRED", "LFRED", "NDRED", "NFRED", "NDRES", "TRES", "IFRED", "") && !IsVowel(m_current - 1) && (((m_current + 1) == m_last) || (((m_current + 2) == m_last) && StringAt((m_current + 2), 1, "D", "S", "")))) { MetaphAdd("AR"); return true; } return false; } /** * Encode "-S-" * */ void Encode_S() { if(Encode_SKJ() || Encode_Special_SW() || Encode_SJ() || Encode_Silent_French_S_Final() || Encode_Silent_French_S_Internal() || Encode_ISL() || Encode_STL() || Encode_Christmas() || Encode_STHM() || Encode_ISTEN() || Encode_Sugar() || Encode_SH() || Encode_SCH() || Encode_SUR() || Encode_SU() || Encode_SSIO() || Encode_SS() || Encode_SIA() || Encode_SIO() || Encode_Anglicisations() || Encode_SC() || Encode_SEA_SUI_SIER() || Encode_SEA()) { return; } MetaphAdd("S"); if(StringAt((m_current + 1), 1, "S", "Z", "") && !StringAt((m_current + 1), 2, "SH", "")) { m_current += 2; } else { m_current++; } } /** * Encode a couple of contexts where scandinavian, slavic * or german names should get an alternate, native * pronunciation of 'SV' or 'XV' * * @return true if handled * */ boolean Encode_Special_SW() { if(m_current == 0) { // if(Names_Beginning_With_SW_That_Get_Alt_SV()) { MetaphAdd("S", "SV"); m_current += 2; return true; } // if(Names_Beginning_With_SW_That_Get_Alt_XV()) { MetaphAdd("S", "XV"); m_current += 2; return true; } } return false; } /** * Encode "-SKJ-" as X ("sh"), since americans pronounce * the name Dag Hammerskjold as "hammer-shold" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_SKJ() { // scandinavian if(StringAt(m_current, 4, "SKJO", "SKJU", "") && IsVowel(m_current + 3)) { MetaphAdd("X"); m_current += 3; return true; } return false; } /** * Encode initial swedish "SJ-" as X ("sh") * * @return true if encoding handled in this routine, false if not * */ boolean Encode_SJ() { if(StringAt(0, 2, "SJ", "")) { MetaphAdd("X"); m_current += 2; return true; } return false; } /** * Encode final 'S' in words from the french, where they * are not pronounced * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Silent_French_S_Final() { // "louis" is an exception because it gets two pronuncuations if(StringAt(0, 5, "LOUIS", "") && (m_current == m_last)) { MetaphAdd("S", ""); m_current++; return true; } // french words familiar to americans where final s is silent if((m_current == m_last) && (StringAt(0, 4, "YVES", "") || (StringAt(0, 4, "HORS", "") && (m_current == 3)) || StringAt((m_current - 4), 5, "CAMUS", "YPRES", "") || StringAt((m_current - 5), 6, "MESNES", "DEBRIS", "BLANCS", "INGRES", "CANNES", "") || StringAt((m_current - 6), 7, "CHABLIS", "APROPOS", "JACQUES", "ELYSEES", "OEUVRES", "GEORGES", "DESPRES", "") || StringAt(0, 8, "ARKANSAS", "FRANCAIS", "CRUDITES", "BRUYERES", "") || StringAt(0, 9, "DESCARTES", "DESCHUTES", "DESCHAMPS", "DESROCHES", "DESCHENES", "") || StringAt(0, 10, "RENDEZVOUS", "") || StringAt(0, 11, "CONTRETEMPS", "DESLAURIERS", "")) || ((m_current == m_last) && StringAt((m_current - 2), 2, "AI", "OI", "UI", "") && !StringAt(0, 4, "LOIS", "LUIS", ""))) { m_current++; return true; } return false; } /** * Encode non-final 'S' in words from the french where they * are not pronounced. * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Silent_French_S_Internal() { // french words familiar to americans where internal s is silent if(StringAt((m_current - 2), 9, "DESCARTES", "") || StringAt((m_current - 2), 7, "DESCHAM", "DESPRES", "DESROCH", "DESROSI", "DESJARD", "DESMARA", "DESCHEN", "DESHOTE", "DESLAUR", "") || StringAt((m_current - 2), 6, "MESNES", "") || StringAt((m_current - 5), 8, "DUQUESNE", "DUCHESNE", "") || StringAt((m_current - 7), 10, "BEAUCHESNE", "") || StringAt((m_current - 3), 7, "FRESNEL", "") || StringAt((m_current - 3), 9, "GROSVENOR", "") || StringAt((m_current - 4), 10, "LOUISVILLE", "") || StringAt((m_current - 7), 10, "ILLINOISAN", "")) { m_current++; return true; } return false; } /** * Encode silent 'S' in context of "-ISL-" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_ISL() { //special cases 'island', 'isle', 'carlisle', 'carlysle' if((StringAt((m_current - 2), 4, "LISL", "LYSL", "AISL", "") && !StringAt((m_current - 3), 7, "PAISLEY", "BAISLEY", "ALISLAM", "ALISLAH", "ALISLAA", "")) || ((m_current == 1) && ((StringAt((m_current - 1), 4, "ISLE", "") || StringAt((m_current - 1), 5, "ISLAN", "")) && !StringAt((m_current - 1), 5, "ISLEY", "ISLER", "")))) { m_current++; return true; } return false; } /** * Encode "-STL-" in contexts where the 'T' is silent. Also * encode "-USCLE-" in contexts where the 'C' is silent * * @return true if encoding handled in this routine, false if not * */ boolean Encode_STL() { //'hustle', 'bustle', 'whistle' if((StringAt(m_current, 4, "STLE", "STLI", "") && !StringAt((m_current + 2), 4, "LESS", "LIKE", "LINE", "")) || StringAt((m_current - 3), 7, "THISTLY", "BRISTLY", "GRISTLY", "") // e.g. "corpuscle" || StringAt((m_current - 1), 5, "USCLE", "")) { // KRISTEN, KRYSTLE, CRYSTLE, KRISTLE all pronounce the 't' // also, exceptions where "-LING" is a nominalizing suffix if(StringAt(0, 7, "KRISTEN", "KRYSTLE", "CRYSTLE", "KRISTLE", "") || StringAt(0, 11, "CHRISTENSEN", "CHRISTENSON", "") || StringAt((m_current - 3), 9, "FIRSTLING", "") || StringAt((m_current - 2), 8, "NESTLING", "WESTLING", "")) { MetaphAdd("ST"); m_current += 2; } else { if(m_encodeVowels && (CharAt(m_current + 3) == 'E') && (CharAt(m_current + 4) != 'R') && !StringAt((m_current + 3), 4, "ETTE", "ETTA", "") && !StringAt((m_current + 3), 2, "EY", "")) { MetaphAdd("SAL"); flag_AL_inversion = true; } else { MetaphAdd("SL"); } m_current += 3; } return true; } return false; } /** * Encode "christmas". Americans always pronounce this as "krissmuss" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Christmas() { //'christmas' if(StringAt((m_current - 4), 8, "CHRISTMA", "")) { MetaphAdd("SM"); m_current += 3; return true; } return false; } /** * Encode "-STHM-" in contexts where the 'TH' * is silent. * * @return true if encoding handled in this routine, false if not * */ boolean Encode_STHM() { //'asthma', 'isthmus' if(StringAt(m_current, 4, "STHM", "")) { MetaphAdd("SM"); m_current += 4; return true; } return false; } /** * Encode "-ISTEN-" and "-STNT-" in contexts * where the 'T' is silent * * @return true if encoding handled in this routine, false if not * */ boolean Encode_ISTEN() { // 't' is silent in verb, pronounced in name if(StringAt(0, 8, "CHRISTEN", "")) { // the word itself if(RootOrInflections(m_inWord, "CHRISTEN") || StringAt(0, 11, "CHRISTENDOM", "")) { MetaphAdd("S", "ST"); } else { // e.g. 'christenson', 'christene' MetaphAdd("ST"); } m_current += 2; return true; } //e.g. 'glisten', 'listen' if(StringAt((m_current - 2), 6, "LISTEN", "RISTEN", "HASTEN", "FASTEN", "MUSTNT", "") || StringAt((m_current - 3), 7, "MOISTEN", "")) { MetaphAdd("S"); m_current += 2; return true; } return false; } /** * Encode special case "sugar" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Sugar() { //special case 'sugar-' if(StringAt(m_current, 5, "SUGAR", "")) { MetaphAdd("X"); m_current++; return true; } return false; } /** * Encode "-SH-" as X ("sh"), except in cases * where the 'S' and 'H' belong to different combining * roots and are therefore pronounced seperately * * @return true if encoding handled in this routine, false if not * */ boolean Encode_SH() { if(StringAt(m_current, 2, "SH", "")) { // exception if(StringAt((m_current - 2), 8, "CASHMERE", "")) { MetaphAdd("J"); m_current += 2; return true; } //combining forms, e.g. 'clotheshorse', 'woodshole' if((m_current > 0) // e.g. "mishap" && ((StringAt((m_current + 1), 3, "HAP", "") && ((m_current + 3) == m_last)) // e.g. "hartsheim", "clothshorse" || StringAt((m_current + 1), 4, "HEIM", "HOEK", "HOLM", "HOLZ", "HOOD", "HEAD", "HEID", "HAAR", "HORS", "HOLE", "HUND", "HELM", "HAWK", "HILL", "") // e.g. "dishonor" || StringAt((m_current + 1), 5, "HEART", "HATCH", "HOUSE", "HOUND", "HONOR", "") // e.g. "mishear" || (StringAt((m_current + 2), 3, "EAR", "") && ((m_current + 4) == m_last)) // e.g. "hartshorn" || (StringAt((m_current + 2), 3, "ORN", "") && !StringAt((m_current - 2), 7, "UNSHORN", "")) // e.g. "newshour" but not "bashour", "manshour" || (StringAt((m_current + 1), 4, "HOUR", "") && !(StringAt(0, 7, "BASHOUR", "") || StringAt(0, 8, "MANSHOUR", "") || StringAt(0, 6, "ASHOUR", "") )) // e.g. "dishonest", "grasshopper" || StringAt((m_current + 2), 5, "ARMON", "ONEST", "ALLOW", "OLDER", "OPPER", "EIMER", "ANDLE", "ONOUR", "") // e.g. "dishabille", "transhumance" || StringAt((m_current + 2), 6, "ABILLE", "UMANCE", "ABITUA", ""))) { if (!StringAt((m_current - 1), 1, "S", "")) MetaphAdd("S"); } else { MetaphAdd("X"); } m_current += 2; return true; } return false; } /** * Encode "-SCH-" in cases where the 'S' is pronounced * seperately from the "CH", in words from the dutch, italian, * and greek where it can be pronounced SK, and german words * where it is pronounced X ("sh") * * @return true if encoding handled in this routine, false if not * */ boolean Encode_SCH() { // these words were combining forms many centuries ago if(StringAt((m_current + 1), 2, "CH", "")) { if((m_current > 0) // e.g. "mischief", "escheat" && (StringAt((m_current + 3), 3, "IEF", "EAT", "") // e.g. "mischance" || StringAt((m_current + 3), 4, "ANCE", "ARGE", "") // e.g. "eschew" || StringAt(0, 6, "ESCHEW", ""))) { MetaphAdd("S"); m_current++; return true; } //Schlesinger's rule //dutch, danish, italian, greek origin, e.g. "school", "schooner", "schiavone", "schiz-" if((StringAt((m_current + 3), 2, "OO", "ER", "EN", "UY", "ED", "EM", "IA", "IZ", "IS", "OL", "") && !StringAt(m_current, 6, "SCHOLT", "SCHISL", "SCHERR", "")) || StringAt((m_current + 3), 3, "ISZ", "") || (StringAt((m_current - 1), 6, "ESCHAT", "ASCHIN", "ASCHAL", "ISCHAE", "ISCHIA", "") && !StringAt((m_current - 2), 8, "FASCHING", "")) || (StringAt((m_current - 1), 5, "ESCHI", "") && ((m_current + 3) == m_last)) || (CharAt(m_current + 3) == 'Y')) { // e.g. "schermerhorn", "schenker", "schistose" if(StringAt((m_current + 3), 2, "ER", "EN", "IS", "") && (((m_current + 4) == m_last) || StringAt((m_current + 3), 3, "ENK", "ENB", "IST", ""))) { MetaphAdd("X", "SK"); } else { MetaphAdd("SK"); } m_current += 3; return true; } else { MetaphAdd("X"); m_current += 3; return true; } } return false; } /** * Encode "-SUR<E,A,Y>-" to J, unless it is at the beginning, * or preceeded by 'N', 'K', or "NO" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_SUR() { // 'erasure', 'usury' if(StringAt((m_current + 1), 3, "URE", "URA", "URY", "")) { //'sure', 'ensure' if ((m_current == 0) || StringAt((m_current - 1), 1, "N", "K", "") || StringAt((m_current - 2), 2, "NO", "")) { MetaphAdd("X"); } else { MetaphAdd("J"); } AdvanceCounter(2, 1); return true; } return false; } /** * Encode "-SU<O,A>-" to X ("sh") unless it is preceeded by * an 'R', in which case it is encoded to S, or it is * preceeded by a vowel, in which case it is encoded to J * * @return true if encoding handled in this routine, false if not * */ boolean Encode_SU() { //'sensuous', 'consensual' if(StringAt((m_current + 1), 2, "UO", "UA", "") && (m_current != 0)) { // exceptions e.g. "persuade" if(StringAt((m_current - 1), 4, "RSUA", "")) { MetaphAdd("S"); } // exceptions e.g. "casual" else if(IsVowel(m_current - 1)) { MetaphAdd("J", "S"); } else { MetaphAdd("X", "S"); } AdvanceCounter(3, 1); return true; } return false; } /** * Encodes "-SSIO-" in contexts where it is pronounced * either J or X ("sh") * * @return true if encoding handled in this routine, false if not * */ boolean Encode_SSIO() { if(StringAt((m_current + 1), 4, "SION", "")) { //"abcission" if (StringAt((m_current - 2), 2, "CI", "")) { MetaphAdd("J"); } //'mission' else { if (IsVowel(m_current - 1)) { MetaphAdd("X"); } } AdvanceCounter(4, 2); return true; } return false; } /** * Encode "-SS-" in contexts where it is pronounced X ("sh") * * @return true if encoding handled in this routine, false if not * */ boolean Encode_SS() { // e.g. "russian", "pressure" if(StringAt((m_current - 1), 5, "USSIA", "ESSUR", "ISSUR", "ISSUE", "") // e.g. "hessian", "assurance" || StringAt((m_current - 1), 6, "ESSIAN", "ASSURE", "ASSURA", "ISSUAB", "ISSUAN", "ASSIUS", "")) { MetaphAdd("X"); AdvanceCounter(3, 2); return true; } return false; } /** * Encodes "-SIA-" in contexts where it is pronounced * as X ("sh"), J, or S * * @return true if encoding handled in this routine, false if not * */ boolean Encode_SIA() { // e.g. "controversial", also "fuchsia", "ch" is silent if(StringAt((m_current - 2), 5, "CHSIA", "") || StringAt((m_current - 1), 5, "RSIAL", "")) { MetaphAdd("X"); AdvanceCounter(3, 1); return true; } // names generally get 'X' where terms, e.g. "aphasia" get 'J' if((StringAt(0, 6, "ALESIA", "ALYSIA", "ALISIA", "STASIA", "") && (m_current == 3) && !StringAt(0, 9, "ANASTASIA", "")) || StringAt((m_current - 5), 9, "DIONYSIAN", "") || StringAt((m_current - 5), 8, "THERESIA", "")) { MetaphAdd("X", "S"); AdvanceCounter(3, 1); return true; } if((StringAt(m_current, 3, "SIA", "") && ((m_current + 2) == m_last)) || (StringAt(m_current, 4, "SIAN", "") && ((m_current + 3) == m_last)) || StringAt((m_current - 5), 9, "AMBROSIAL", "")) { if ((IsVowel(m_current - 1) || StringAt((m_current - 1), 1, "R", "")) // exclude compounds based on names, or french or greek words && !(StringAt(0, 5, "JAMES", "NICOS", "PEGAS", "PEPYS", "") || StringAt(0, 6, "HOBBES", "HOLMES", "JAQUES", "KEYNES", "") || StringAt(0, 7, "MALTHUS", "HOMOOUS", "") || StringAt(0, 8, "MAGLEMOS", "HOMOIOUS", "") || StringAt(0, 9, "LEVALLOIS", "TARDENOIS", "") || StringAt((m_current - 4), 5, "ALGES", "") )) { MetaphAdd("J"); } else { MetaphAdd("S"); } AdvanceCounter(2, 1); return true; } return false; } /** * Encodes "-SIO-" in contexts where it is pronounced * as J or X ("sh") * * @return true if encoding handled in this routine, false if not * */ boolean Encode_SIO() { // special case, irish name if(StringAt(0, 7, "SIOBHAN", "")) { MetaphAdd("X"); AdvanceCounter(3, 1); return true; } if(StringAt((m_current + 1), 3, "ION", "")) { // e.g. "vision", "version" if (IsVowel(m_current - 1) || StringAt((m_current - 2), 2, "ER", "UR", "")) { MetaphAdd("J"); } else // e.g. "declension" { MetaphAdd("X"); } AdvanceCounter(3, 1); return true; } return false; } /** * Encode cases where "-S-" might well be from a german name * and add encoding of german pronounciation in alternate m_metaph * so that it can be found in a genealogical search * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Anglicisations() { //german & anglicisations, e.g. 'smith' match 'schmidt', 'snider' match 'schneider' //also, -sz- in slavic language altho in hungarian it is pronounced 's' if(((m_current == 0) && StringAt((m_current + 1), 1, "M", "N", "L", "")) || StringAt((m_current + 1), 1, "Z", "")) { MetaphAdd("S", "X"); // eat redundant 'Z' if(StringAt((m_current + 1), 1, "Z", "")) { m_current += 2; } else { m_current++; } return true; } return false; } /** * Encode "-SC<vowel>-" in contexts where it is silent, * or pronounced as X ("sh"), S, or SK * * @return true if encoding handled in this routine, false if not * */ boolean Encode_SC() { if(StringAt(m_current, 2, "SC", "")) { // exception 'viscount' if(StringAt((m_current - 2), 8, "VISCOUNT", "")) { m_current += 1; return true; } // encode "-SC<front vowel>-" if(StringAt((m_current + 2), 1, "I", "E", "Y", "")) { // e.g. "conscious" if(StringAt((m_current + 2), 4, "IOUS", "") // e.g. "prosciutto" || StringAt((m_current + 2), 3, "IUT", "") || StringAt((m_current - 4), 9, "OMNISCIEN", "") // e.g. "conscious" || StringAt((m_current - 3), 8, "CONSCIEN", "CRESCEND", "CONSCION", "") || StringAt((m_current - 2), 6, "FASCIS", "")) { MetaphAdd("X"); } else if(StringAt(m_current, 7, "SCEPTIC", "SCEPSIS", "") || StringAt(m_current, 5, "SCIVV", "SCIRO", "") // commonly pronounced this way in u.s. || StringAt(m_current, 6, "SCIPIO", "") || StringAt((m_current - 2), 10, "PISCITELLI", "")) { MetaphAdd("SK"); } else { MetaphAdd("S"); } m_current += 2; return true; } MetaphAdd("SK"); m_current += 2; return true; } return false; } /** * Encode "-S<EA,UI,IER>-" in contexts where it is pronounced * as J * * @return true if encoding handled in this routine, false if not * */ boolean Encode_SEA_SUI_SIER() { // "nausea" by itself has => NJ as a more likely encoding. Other forms // using "nause-" (see Encode_SEA()) have X or S as more familiar pronounciations if((StringAt((m_current - 3), 6, "NAUSEA", "") && ((m_current + 2) == m_last)) // e.g. "casuistry", "frasier", "hoosier" || StringAt((m_current - 2), 5, "CASUI", "") || (StringAt((m_current - 1), 5, "OSIER", "ASIER", "") && !(StringAt(0, 6, "EASIER","") || StringAt(0, 5, "OSIER","") || StringAt((m_current - 2), 6, "ROSIER", "MOSIER", "")))) { MetaphAdd("J", "X"); AdvanceCounter(3, 1); return true; } return false; } /** * Encode cases where "-SE-" is pronounced as X ("sh") * * @return true if encoding handled in this routine, false if not * */ boolean Encode_SEA() { if((StringAt(0, 4, "SEAN", "") && ((m_current + 3) == m_last)) || (StringAt((m_current - 3), 6, "NAUSEO", "") && !StringAt((m_current - 3), 7, "NAUSEAT", ""))) { MetaphAdd("X"); AdvanceCounter(3, 1); return true; } return false; } /** * Encode "-T-" * */ void Encode_T() { if(Encode_T_Initial() || Encode_TCH() || Encode_Silent_French_T() || Encode_TUN_TUL_TUA_TUO() || Encode_TUE_TEU_TEOU_TUL_TIE() || Encode_TUR_TIU_Suffixes() || Encode_TI() || Encode_TIENT() || Encode_TSCH() || Encode_TZSCH() || Encode_TH_Pronounced_Separately() || Encode_TTH() || Encode_TH()) { return; } // eat redundant 'T' or 'D' if(StringAt((m_current + 1), 1, "T", "D", "")) { m_current += 2; } else { m_current++; } MetaphAdd("T"); } /** * Encode some exceptions for initial 'T' * * @return true if encoding handled in this routine, false if not * */ boolean Encode_T_Initial() { if(m_current == 0) { // americans usually pronounce "tzar" as "zar" if (StringAt((m_current + 1), 3, "SAR", "ZAR", "")) { m_current++; return true; } // old 'École française d'Extrême-Orient' chinese pinyin where 'ts-' => 'X' if (((m_length == 3) && StringAt((m_current + 1), 2, "SO", "SA", "SU", "")) || ((m_length == 4) && StringAt((m_current + 1), 3, "SAO", "SAI", "")) || ((m_length == 5) && StringAt((m_current + 1), 4, "SING", "SANG", ""))) { MetaphAdd("X"); AdvanceCounter(3, 2); return true; } // "TS<vowel>-" at start can be pronounced both with and without 'T' if (StringAt((m_current + 1), 1, "S", "") && IsVowel(m_current + 2)) { MetaphAdd("TS", "S"); AdvanceCounter(3, 2); return true; } // e.g. "Tjaarda" if (StringAt((m_current + 1), 1, "J", "")) { MetaphAdd("X"); AdvanceCounter(3, 2); return true; } // cases where initial "TH-" is pronounced as T and not 0 ("th") if ((StringAt((m_current + 1), 2, "HU", "") && (m_length == 3)) || StringAt((m_current + 1), 3, "HAI", "HUY", "HAO", "") || StringAt((m_current + 1), 4, "HYME", "HYMY", "HANH", "") || StringAt((m_current + 1), 5, "HERES", "")) { MetaphAdd("T"); AdvanceCounter(3, 2); return true; } } return false; } /** * Encode "-TCH-", reliably X ("sh", or in this case, "ch") * * @return true if encoding handled in this routine, false if not * */ boolean Encode_TCH() { if(StringAt((m_current + 1), 2, "CH", "")) { MetaphAdd("X"); m_current += 3; return true; } return false; } /** * Encode the many cases where americans are aware that a certain word is * french and know to not pronounce the 'T' * * @return true if encoding handled in this routine, false if not * TOUCHET CHABOT BENOIT */ boolean Encode_Silent_French_T() { // french silent T familiar to americans if(((m_current == m_last) && StringAt((m_current - 4), 5, "MONET", "GENET", "CHAUT", "")) || StringAt((m_current - 2), 9, "POTPOURRI", "") || StringAt((m_current - 3), 9, "BOATSWAIN", "") || StringAt((m_current - 3), 8, "MORTGAGE", "") || (StringAt((m_current - 4), 5, "BERET", "BIDET", "FILET", "DEBUT", "DEPOT", "PINOT", "TAROT", "") || StringAt((m_current - 5), 6, "BALLET", "BUFFET", "CACHET", "CHALET", "ESPRIT", "RAGOUT", "GOULET", "CHABOT", "BENOIT", "") || StringAt((m_current - 6), 7, "GOURMET", "BOUQUET", "CROCHET", "CROQUET", "PARFAIT", "PINCHOT", "CABARET", "PARQUET", "RAPPORT", "TOUCHET", "COURBET", "DIDEROT", "") || StringAt((m_current - 7), 8, "ENTREPOT", "CABERNET", "DUBONNET", "MASSENET", "MUSCADET", "RICOCHET", "ESCARGOT", "") || StringAt((m_current - 8), 9, "SOBRIQUET", "CABRIOLET", "CASSOULET", "OUBRIQUET", "CAMEMBERT", "")) && !StringAt((m_current + 1), 2, "AN", "RY", "IC", "OM", "IN", "")) { m_current++; return true; } return false; } /** * Encode "-TU<N,L,A,O>-" in cases where it is pronounced * X ("sh", or in this case, "ch") * * @return true if encoding handled in this routine, false if not * */ boolean Encode_TUN_TUL_TUA_TUO() { // e.g. "fortune", "fortunate" if(StringAt((m_current - 3), 6, "FORTUN", "") // e.g. "capitulate" || (StringAt(m_current, 3, "TUL", "") && (IsVowel(m_current - 1) && IsVowel(m_current + 3))) // e.g. "obituary", "barbituate" || StringAt((m_current - 2), 5, "BITUA", "BITUE", "") // e.g. "actual" || ((m_current > 1) && StringAt(m_current, 3, "TUA", "TUO", ""))) { MetaphAdd("X", "T"); m_current++; return true; } return false; } /** * Encode "-T<vowel>-" forms where 'T' is pronounced as X * ("sh", or in this case "ch") * * @return true if encoding handled in this routine, false if not * */ boolean Encode_TUE_TEU_TEOU_TUL_TIE() { // 'constituent', 'pasteur' if(StringAt((m_current + 1), 4, "UENT", "") || StringAt((m_current - 4), 9, "RIGHTEOUS", "") || StringAt((m_current - 3), 7, "STATUTE", "") || StringAt((m_current - 3), 7, "AMATEUR", "") // e.g. "blastula", "pasteur" || (StringAt((m_current - 1), 5, "NTULE", "NTULA", "STULE", "STULA", "STEUR", "")) // e.g. "statue" || (((m_current + 2) == m_last) && StringAt(m_current, 3, "TUE", "")) // e.g. "constituency" || StringAt(m_current, 5, "TUENC", "") // e.g. "statutory" || StringAt((m_current - 3), 8, "STATUTOR", "") // e.g. "patience" || (((m_current + 5) == m_last) && StringAt(m_current, 6, "TIENCE", ""))) { MetaphAdd("X", "T"); AdvanceCounter(2, 1); return true; } return false; } /** * Encode "-TU-" forms in suffixes where it is usually * pronounced as X ("sh") * * @return true if encoding handled in this routine, false if not * */ boolean Encode_TUR_TIU_Suffixes() { // 'adventure', 'musculature' if((m_current > 0) && StringAt((m_current + 1), 3, "URE", "URA", "URI", "URY", "URO", "IUS", "")) { // exceptions e.g. 'tessitura', mostly from romance languages if ((StringAt((m_current + 1), 3, "URA", "URO", "") //&& !StringAt((m_current + 1), 4, "URIA", "") && ((m_current + 3) == m_last)) && !StringAt((m_current - 3), 7, "VENTURA", "") // e.g. "kachaturian", "hematuria" || StringAt((m_current + 1), 4, "URIA", "")) { MetaphAdd("T"); } else { MetaphAdd("X", "T"); } AdvanceCounter(2, 1); return true; } return false; } /** * Encode "-TI<O,A,U>-" as X ("sh"), except * in cases where it is part of a combining form, * or as J * * @return true if encoding handled in this routine, false if not * */ boolean Encode_TI() { // '-tio-', '-tia-', '-tiu-' // except combining forms where T already pronounced e.g 'rooseveltian' if((StringAt((m_current + 1), 2, "IO", "") && !StringAt((m_current - 1), 5, "ETIOL", "")) || StringAt((m_current + 1), 3, "IAL", "") || StringAt((m_current - 1), 5, "RTIUM", "ATIUM", "") || ((StringAt((m_current + 1), 3, "IAN", "") && (m_current > 0)) && !(StringAt((m_current - 4), 8, "FAUSTIAN", "") || StringAt((m_current - 5), 9, "PROUSTIAN", "") || StringAt((m_current - 2), 7, "TATIANA", "") ||(StringAt((m_current - 3), 7, "KANTIAN", "GENTIAN", "") || StringAt((m_current - 8), 12, "ROOSEVELTIAN", ""))) || (((m_current + 2) == m_last) && StringAt(m_current, 3, "TIA", "") // exceptions to above rules where the pronounciation is usually X && !(StringAt((m_current - 3), 6, "HESTIA", "MASTIA", "") || StringAt((m_current - 2), 5, "OSTIA", "") || StringAt(0, 3, "TIA", "") || StringAt((m_current - 5), 8, "IZVESTIA", ""))) || StringAt((m_current + 1), 4, "IATE", "IATI", "IABL", "IATO", "IARY", "") || StringAt((m_current - 5), 9, "CHRISTIAN", ""))) { if(((m_current == 2) && StringAt(0, 4, "ANTI", "")) || StringAt(0, 5, "PATIO", "PITIA", "DUTIA", "")) { MetaphAdd("T"); } else if(StringAt((m_current - 4), 8, "EQUATION", "")) { MetaphAdd("J"); } else { if(StringAt(m_current, 4, "TION", "")) { MetaphAdd("X"); } else if(StringAt(0, 5, "KATIA", "LATIA", "")) { MetaphAdd("T", "X"); } else { MetaphAdd("X", "T"); } } AdvanceCounter(3, 1); return true; } return false; } /** * Encode "-TIENT-" where "TI" is pronounced X ("sh") * * @return true if encoding handled in this routine, false if not * */ boolean Encode_TIENT() { // e.g. 'patient' if(StringAt((m_current + 1), 4, "IENT", "")) { MetaphAdd("X", "T"); AdvanceCounter(3, 1); return true; } return false; } /** * Encode "-TSCH-" as X ("ch") * * @return true if encoding handled in this routine, false if not * */ boolean Encode_TSCH() { //'deutsch' if(StringAt(m_current, 4, "TSCH", "") // combining forms in german where the 'T' is pronounced seperately && !StringAt((m_current - 3), 4, "WELT", "KLAT", "FEST", "")) { // pronounced the same as "ch" in "chit" => X MetaphAdd("X"); m_current += 4; return true; } return false; } /** * Encode "-TZSCH-" as X ("ch") * * "Neitzsche is peachy" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_TZSCH() { //'neitzsche' if(StringAt(m_current, 5, "TZSCH", "")) { MetaphAdd("X"); m_current += 5; return true; } return false; } /** * Encodes cases where the 'H' in "-TH-" is the beginning of * another word in a combining form, special cases where it is * usually pronounced as 'T', and a special case where it has * become pronounced as X ("sh", in this case "ch") * * @return true if encoding handled in this routine, false if not * */ boolean Encode_TH_Pronounced_Separately() { //'adulthood', 'bithead', 'apartheid' if(((m_current > 0) && StringAt((m_current + 1), 4, "HOOD", "HEAD", "HEID", "HAND", "HILL", "HOLD", "HAWK", "HEAP", "HERD", "HOLE", "HOOK", "HUNT", "HUMO", "HAUS", "HOFF", "HARD", "") && !StringAt((m_current - 3), 5, "SOUTH", "NORTH", "")) || StringAt((m_current + 1), 5, "HOUSE", "HEART", "HASTE", "HYPNO", "HEQUE", "") // watch out for greek root "-thallic" || (StringAt((m_current + 1), 4, "HALL", "") && ((m_current + 4) == m_last) && !StringAt((m_current - 3), 5, "SOUTH", "NORTH", "")) || (StringAt((m_current + 1), 3, "HAM", "") && ((m_current + 3) == m_last) && !(StringAt(0, 6, "GOTHAM", "WITHAM", "LATHAM", "") || StringAt(0, 7, "BENTHAM", "WALTHAM", "WORTHAM", "") || StringAt(0, 8, "GRANTHAM", ""))) || (StringAt((m_current + 1), 5, "HATCH", "") && !((m_current == 0) || StringAt((m_current - 2), 8, "UNTHATCH", ""))) || StringAt((m_current - 3), 7, "WARTHOG", "") // and some special cases where "-TH-" is usually pronounced 'T' || StringAt((m_current - 2), 6, "ESTHER", "") || StringAt((m_current - 3), 6, "GOETHE", "") || StringAt((m_current - 2), 8, "NATHALIE", "")) { // special case if (StringAt((m_current - 3), 7, "POSTHUM", "")) { MetaphAdd("X"); } else { MetaphAdd("T"); } m_current += 2; return true; } return false; } /** * Encode the "-TTH-" in "matthew", eating the redundant 'T' * * @return true if encoding handled in this routine, false if not * */ boolean Encode_TTH() { // 'matthew' vs. 'outthink' if(StringAt(m_current, 3, "TTH", "")) { if (StringAt((m_current - 2), 5, "MATTH", "")) { MetaphAdd("0"); } else { MetaphAdd("T0"); } m_current += 3; return true; } return false; } /** * Encode "-TH-". 0 (zero) is used in Metaphone to encode this sound * when it is pronounced as a dipthong, either voiced or unvoiced * * @return true if encoding handled in this routine, false if not * */ boolean Encode_TH() { if(StringAt(m_current, 2, "TH", "") ) { //'-clothes-' if(StringAt((m_current - 3), 7, "CLOTHES", "")) { // vowel already encoded so skip right to S m_current += 3; return true; } //special case "thomas", "thames", "beethoven" or germanic words if(StringAt((m_current + 2), 4, "OMAS", "OMPS", "OMPK", "OMSO", "OMSE", "AMES", "OVEN", "OFEN", "ILDA", "ILDE", "") || (StringAt(0, 4, "THOM", "") && (m_length == 4)) || (StringAt(0, 5, "THOMS", "") && (m_length == 5)) || StringAt(0, 4, "VAN ", "VON ", "") || StringAt(0, 3, "SCH", "")) { MetaphAdd("T"); } else { // give an 'etymological' 2nd // encoding for "smith" if(StringAt(0, 2, "SM", "")) { MetaphAdd("0", "T"); } else { MetaphAdd("0"); } } m_current += 2; return true; } return false; } /** * Encode "-V-" * */ void Encode_V() { // eat redundant 'V' if(CharAt(m_current + 1) == 'V') { m_current += 2; } else { m_current++; } MetaphAddExactApprox("V", "F"); } /** * Encode "-W-" * */ void Encode_W() { if(Encode_Silent_W_At_Beginning() || Encode_WITZ_WICZ() || Encode_WR() || Encode_Initial_W_Vowel() || Encode_WH() || Encode_Eastern_European_W()) { return; } // e.g. 'zimbabwe' if(m_encodeVowels && StringAt(m_current, 2, "WE", "") && ((m_current + 1) == m_last)) { MetaphAdd("A"); } //else skip it m_current++; } /** * Encode cases where 'W' is silent at beginning of word * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Silent_W_At_Beginning() { //skip these when at start of word if((m_current == 0) && StringAt(m_current, 2, "WR", "")) { m_current += 1; return true; } return false; } /** * Encode polish patronymic suffix, mapping * alternate spellings to the same encoding, * and including easern european pronounciation * to the american so that both forms can * be found in a genealogy search * * @return true if encoding handled in this routine, false if not * */ boolean Encode_WITZ_WICZ() { //polish e.g. 'filipowicz' if(((m_current + 3) == m_last) && StringAt(m_current, 4, "WICZ", "WITZ", "")) { if(m_encodeVowels) { if((m_primary.length() > 0) && m_primary.charAt(m_primary.length() - 1) == 'A') { MetaphAdd("TS", "FAX"); } else { MetaphAdd("ATS", "FAX"); } } else { MetaphAdd("TS", "FX"); } m_current += 4; return true; } return false; } /** * Encode "-WR-" as R ('W' always effectively silent) * * @return true if encoding handled in this routine, false if not * */ boolean Encode_WR() { //can also be in middle of word if(StringAt(m_current, 2, "WR", "")) { MetaphAdd("R"); m_current += 2; return true; } return false; } /** * Encode "W-", adding central and eastern european * pronounciations so that both forms can be found * in a genealogy search * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Initial_W_Vowel() { if((m_current == 0) && IsVowel(m_current + 1)) { //Witter should match Vitter if(Germanic_Or_Slavic_Name_Beginning_With_W()) { if(m_encodeVowels) { MetaphAddExactApprox("A", "VA", "A", "FA"); } else { MetaphAddExactApprox("A", "V", "A", "F"); } } else { MetaphAdd("A"); } m_current++; // don't encode vowels twice m_current = SkipVowels(m_current); return true; } return false; } /** * Encode "-WH-" either as H, or close enough to 'U' to be * considered a vowel * * @return true if encoding handled in this routine, false if not * */ boolean Encode_WH() { if(StringAt(m_current, 2, "WH", "")) { // cases where it is pronounced as H // e.g. 'who', 'whole' if((CharAt(m_current + 2) == 'O') // exclude cases where it is pronounced like a vowel && !(StringAt((m_current + 2), 4, "OOSH", "") || StringAt((m_current + 2), 3, "OOP", "OMP", "ORL", "ORT", "") || StringAt((m_current + 2), 2, "OA", "OP", ""))) { MetaphAdd("H"); AdvanceCounter(3, 2); return true; } else { // combining forms, e.g. 'hollowhearted', 'rawhide' if(StringAt((m_current + 2), 3, "IDE", "ARD", "EAD", "AWK", "ERD", "OOK", "AND", "OLE", "OOD", "") || StringAt((m_current + 2), 4, "EART", "OUSE", "OUND", "") || StringAt((m_current + 2), 5, "AMMER", "")) { MetaphAdd("H"); m_current += 2; return true; } else if(m_current == 0) { MetaphAdd("A"); m_current += 2; // don't encode vowels twice m_current = SkipVowels(m_current); return true; } } m_current += 2; return true; } return false; } /** * Encode "-W-" when in eastern european names, adding * the eastern european pronounciation to the american so * that both forms can be found in a genealogy search * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Eastern_European_W() { //Arnow should match Arnoff if(((m_current == m_last) && IsVowel(m_current - 1)) || StringAt((m_current - 1), 5, "EWSKI", "EWSKY", "OWSKI", "OWSKY", "") || (StringAt(m_current, 5, "WICKI", "WACKI", "") && ((m_current + 4) == m_last)) || StringAt(m_current, 4, "WIAK", "") && ((m_current + 3) == m_last) || StringAt(0, 3, "SCH", "")) { MetaphAddExactApprox("", "V", "", "F"); m_current++; return true; } return false; } /** * Encode "-X-" * */ void Encode_X() { if(Encode_Initial_X() || Encode_Greek_X() || Encode_X_Special_Cases() || Encode_X_To_H() || Encode_X_Vowel() || Encode_French_X_Final()) { return; } // eat redundant 'X' or other redundant cases if(StringAt((m_current + 1), 1, "X", "Z", "S", "") // e.g. "excite", "exceed" || StringAt((m_current + 1), 2, "CI", "CE", "")) { m_current += 2; } else { m_current++; } } /** * Encode initial X where it is usually pronounced as S * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Initial_X() { // current chinese pinyin spelling if(StringAt(0, 3, "XIA", "XIO", "XIE", "") || StringAt(0, 2, "XU", "")) { MetaphAdd("X"); m_current++; return true; } // else if((m_current == 0)) { MetaphAdd("S"); m_current++; return true; } return false; } /** * Encode X when from greek roots where it is usually pronounced as S * * @return true if encoding handled in this routine, false if not * */ boolean Encode_Greek_X() { // 'xylophone', xylem', 'xanthoma', 'xeno-' if(StringAt((m_current + 1), 3, "YLO", "YLE", "ENO", "") || StringAt((m_current + 1), 4, "ANTH", "")) { MetaphAdd("S"); m_current++; return true; } return false; } /** * Encode special cases, "LUXUR-", "Texeira" * * @return true if encoding handled in this routine, false if not * */ boolean Encode_X_Special_Cases() { // 'luxury' if(StringAt((m_current - 2), 5, "LUXUR", "")) { MetaphAddExactApprox("GJ", "KJ"); m_current++; return true; } // 'texeira' portuguese/galician name if(StringAt(0, 7, "TEXEIRA", "") || StringAt(0, 8, "TEIXEIRA", "")) { MetaphAdd("X"); m_current++; return true; } return false; } /** * Encode special case where americans know the * proper mexican indian pronounciation of this name * * @return true if encoding handled in this routine, false if not * */ boolean Encode_X_To_H() { // TODO: look for other mexican indian words // where 'X' is usually pronounced this way if(StringAt((m_current - 2), 6, "OAXACA", "") || StringAt((m_current - 3), 7, "QUIXOTE", "")) { MetaphAdd("H"); m_current++; return true; } return false; } /** * Encode "-X-" in vowel contexts where it is usually * pronounced KX ("ksh") * account also for BBC pronounciation of => KS * * @return true if encoding handled in this routine, false if not * */ boolean Encode_X_Vowel() { // e.g. "sexual", "connexion" (british), "noxious" if(StringAt((m_current + 1), 3, "UAL", "ION", "IOU", "")) { MetaphAdd("KX", "KS"); AdvanceCounter(3, 1); return true; } return false; } /** * Encode cases of "-X", encoding as silent when part * of a french word where it is not pronounced * * @return true if encoding handled in this routine, false if not * */ boolean Encode_French_X_Final() { //french e.g. "breaux", "paix" if(!((m_current == m_last) && (StringAt((m_current - 3), 3, "IAU", "EAU", "IEU", "") || StringAt((m_current - 2), 2, "AI", "AU", "OU", "OI", "EU", ""))) ) { MetaphAdd("KS"); } return false; } /** * Encode "-Z-" * */ void Encode_Z() { if(Encode_ZZ() || Encode_ZU_ZIER_ZS() || Encode_French_EZ() || Encode_German_Z()) { return; } if(Encode_ZH()) { return; } else { MetaphAdd("S"); } // eat redundant 'Z' if(CharAt(m_current + 1) == 'Z') { m_current += 2; } else { m_current++; } } /** * Encode cases of "-ZZ-" where it is obviously part * of an italian word where "-ZZ-" is pronounced as TS * * @return true if encoding handled in this routine, false if not * */ boolean Encode_ZZ() { // "abruzzi", 'pizza' if((CharAt(m_current + 1) == 'Z') && ((StringAt((m_current + 2), 1, "I", "O", "A", "") && ((m_current + 2) == m_last)) || StringAt((m_current - 2), 9, "MOZZARELL", "PIZZICATO", "PUZZONLAN", ""))) { MetaphAdd("TS", "S"); m_current += 2; return true; } return false; } /** * Encode special cases where "-Z-" is pronounced as J * * @return true if encoding handled in this routine, false if not * */ boolean Encode_ZU_ZIER_ZS() { if(((m_current == 1) && StringAt((m_current - 1), 4, "AZUR", "")) || (StringAt(m_current, 4, "ZIER", "") && !StringAt((m_current - 2), 6, "VIZIER", "")) || StringAt(m_current, 3, "ZSA", "")) { MetaphAdd("J", "S"); if(StringAt(m_current, 3, "ZSA", "")) { m_current += 2; } else { m_current++; } return true; } return false; } /** * Encode cases where americans recognize "-EZ" as part * of a french word where Z not pronounced * * @return true if encoding handled in this routine, false if not * */ boolean Encode_French_EZ() { if(((m_current == 3) && StringAt((m_current - 3), 4, "CHEZ", "")) || StringAt((m_current - 5), 6, "RENDEZ", "")) { m_current++; return true; } return false; } /** * Encode cases where "-Z-" is in a german word * where Z => TS in german * * @return true if encoding handled in this routine, false if not * */ boolean Encode_German_Z() { if(((m_current == 2) && ((m_current + 1) == m_last) && StringAt((m_current - 2), 4, "NAZI", "")) || StringAt((m_current - 2), 6, "NAZIFY", "MOZART", "") || StringAt((m_current - 3), 4, "HOLZ", "HERZ", "MERZ", "FITZ", "") || (StringAt((m_current - 3), 4, "GANZ", "") && !IsVowel(m_current + 1)) || StringAt((m_current - 4), 5, "STOLZ", "PRINZ", "") || StringAt((m_current - 4), 7, "VENEZIA", "") || StringAt((m_current - 3), 6, "HERZOG", "") // german words beginning with "sch-" but not schlimazel, schmooze || (m_inWord.contains("SCH") && !(StringAt((m_last - 2), 3, "IZE", "OZE", "ZEL", ""))) || ((m_current > 0) && StringAt(m_current, 4, "ZEIT", "")) || StringAt((m_current - 3), 4, "WEIZ", "")) { if((m_current > 0) && m_inWord.charAt(m_current - 1) == 'T') { MetaphAdd("S"); } else { MetaphAdd("TS"); } m_current++; return true; } return false; } /** * Encode "-ZH-" as J * * @return true if encoding handled in this routine, false if not * */ boolean Encode_ZH() { //chinese pinyin e.g. 'zhao', also english "phonetic spelling" if(CharAt(m_current + 1) == 'H') { MetaphAdd("J"); m_current += 2; return true; } return false; } /** * Test for names derived from the swedish, * dutch, or slavic that should get an alternate * pronunciation of 'SV' to match the native * version * * @return true if swedish, dutch, or slavic derived name */ boolean Names_Beginning_With_SW_That_Get_Alt_SV() { if(StringAt(0, 7, "SWANSON", "SWENSON", "SWINSON", "SWENSEN", "SWOBODA", "") || StringAt(0, 9, "SWIDERSKI", "SWARTHOUT", "") || StringAt(0, 10, "SWEARENGIN", "")) { return true; } return false; } /** * Test for names derived from the german * that should get an alternate pronunciation * of 'XV' to match the german version spelled * "schw-" * * @return true if german derived name */ boolean Names_Beginning_With_SW_That_Get_Alt_XV() { if(StringAt(0, 5, "SWART", "") || StringAt(0, 6, "SWARTZ", "SWARTS", "SWIGER", "") || StringAt(0, 7, "SWITZER", "SWANGER", "SWIGERT", "SWIGART", "SWIHART", "") || StringAt(0, 8, "SWEITZER", "SWATZELL", "SWINDLER", "") || StringAt(0, 9, "SWINEHART", "") || StringAt(0, 10, "SWEARINGEN", "")) { return true; } return false; } /** * Test whether the word in question * is a name of germanic or slavic origin, for * the purpose of determining whether to add an * alternate encoding of 'V' * * @return true if germanic or slavic name */ boolean Germanic_Or_Slavic_Name_Beginning_With_W() { if(StringAt(0, 3, "WEE", "WIX", "WAX", "") || StringAt(0, 4, "WOLF", "WEIS", "WAHL", "WALZ", "WEIL", "WERT", "WINE", "WILK", "WALT", "WOLL", "WADA", "WULF", "WEHR", "WURM", "WYSE", "WENZ", "WIRT", "WOLK", "WEIN", "WYSS", "WASS", "WANN", "WINT", "WINK", "WILE", "WIKE", "WIER", "WELK", "WISE", "") || StringAt(0, 5, "WIRTH", "WIESE", "WITTE", "WENTZ", "WOLFF", "WENDT", "WERTZ", "WILKE", "WALTZ", "WEISE", "WOOLF", "WERTH", "WEESE", "WURTH", "WINES", "WARGO", "WIMER", "WISER", "WAGER", "WILLE", "WILDS", "WAGAR", "WERTS", "WITTY", "WIENS", "WIEBE", "WIRTZ", "WYMER", "WULFF", "WIBLE", "WINER", "WIEST", "WALKO", "WALLA", "WEBRE", "WEYER", "WYBLE", "WOMAC", "WILTZ", "WURST", "WOLAK", "WELKE", "WEDEL", "WEIST", "WYGAN", "WUEST", "WEISZ", "WALCK", "WEITZ", "WYDRA", "WANDA", "WILMA", "WEBER", "") || StringAt(0, 6, "WETZEL", "WEINER", "WENZEL", "WESTER", "WALLEN", "WENGER", "WALLIN", "WEILER", "WIMMER", "WEIMER", "WYRICK", "WEGNER", "WINNER", "WESSEL", "WILKIE", "WEIGEL", "WOJCIK", "WENDEL", "WITTER", "WIENER", "WEISER", "WEXLER", "WACKER", "WISNER", "WITMER", "WINKLE", "WELTER", "WIDMER", "WITTEN", "WINDLE", "WASHER", "WOLTER", "WILKEY", "WIDNER", "WARMAN", "WEYANT", "WEIBEL", "WANNER", "WILKEN", "WILTSE", "WARNKE", "WALSER", "WEIKEL", "WESNER", "WITZEL", "WROBEL", "WAGNON", "WINANS", "WENNER", "WOLKEN", "WILNER", "WYSONG", "WYCOFF", "WUNDER", "WINKEL", "WIDMAN", "WELSCH", "WEHNER", "WEIGLE", "WETTER", "WUNSCH", "WHITTY", "WAXMAN", "WILKER", "WILHAM", "WITTIG", "WITMAN", "WESTRA", "WEHRLE", "WASSER", "WILLER", "WEGMAN", "WARFEL", "WYNTER", "WERNER", "WAGNER", "WISSER", "") || StringAt(0, 7, "WISEMAN", "WINKLER", "WILHELM", "WELLMAN", "WAMPLER", "WACHTER", "WALTHER", "WYCKOFF", "WEIDNER", "WOZNIAK", "WEILAND", "WILFONG", "WIEGAND", "WILCHER", "WIELAND", "WILDMAN", "WALDMAN", "WORTMAN", "WYSOCKI", "WEIDMAN", "WITTMAN", "WIDENER", "WOLFSON", "WENDELL", "WEITZEL", "WILLMAN", "WALDRUP", "WALTMAN", "WALCZAK", "WEIGAND", "WESSELS", "WIDEMAN", "WOLTERS", "WIREMAN", "WILHOIT", "WEGENER", "WOTRING", "WINGERT", "WIESNER", "WAYMIRE", "WHETZEL", "WENTZEL", "WINEGAR", "WESTMAN", "WYNKOOP", "WALLICK", "WURSTER", "WINBUSH", "WILBERT", "WALLACH", "WYNKOOP", "WALLICK", "WURSTER", "WINBUSH", "WILBERT", "WALLACH", "WEISSER", "WEISNER", "WINDERS", "WILLMON", "WILLEMS", "WIERSMA", "WACHTEL", "WARNICK", "WEIDLER", "WALTRIP", "WHETSEL", "WHELESS", "WELCHER", "WALBORN", "WILLSEY", "WEINMAN", "WAGAMAN", "WOMMACK", "WINGLER", "WINKLES", "WIEDMAN", "WHITNER", "WOLFRAM", "WARLICK", "WEEDMAN", "WHISMAN", "WINLAND", "WEESNER", "WARTHEN", "WETZLER", "WENDLER", "WALLNER", "WOLBERT", "WITTMER", "WISHART", "WILLIAM", "") || StringAt(0, 8, "WESTPHAL", "WICKLUND", "WEISSMAN", "WESTLUND", "WOLFGANG", "WILLHITE", "WEISBERG", "WALRAVEN", "WOLFGRAM", "WILHOITE", "WECHSLER", "WENDLING", "WESTBERG", "WENDLAND", "WININGER", "WHISNANT", "WESTRICK", "WESTLING", "WESTBURY", "WEITZMAN", "WEHMEYER", "WEINMANN", "WISNESKI", "WHELCHEL", "WEISHAAR", "WAGGENER", "WALDROUP", "WESTHOFF", "WIEDEMAN", "WASINGER", "WINBORNE", "") || StringAt(0, 9, "WHISENANT", "WEINSTEIN", "WESTERMAN", "WASSERMAN", "WITKOWSKI", "WEINTRAUB", "WINKELMAN", "WINKFIELD", "WANAMAKER", "WIECZOREK", "WIECHMANN", "WOJTOWICZ", "WALKOWIAK", "WEINSTOCK", "WILLEFORD", "WARKENTIN", "WEISINGER", "WINKLEMAN", "WILHEMINA", "") || StringAt(0, 10, "WISNIEWSKI", "WUNDERLICH", "WHISENHUNT", "WEINBERGER", "WROBLEWSKI", "WAGUESPACK", "WEISGERBER", "WESTERVELT", "WESTERLUND", "WASILEWSKI", "WILDERMUTH", "WESTENDORF", "WESOLOWSKI", "WEINGARTEN", "WINEBARGER", "WESTERBERG", "WANNAMAKER", "WEISSINGER", "") || StringAt(0, 11, "WALDSCHMIDT", "WEINGARTNER", "WINEBRENNER", "") || StringAt(0, 12, "WOLFENBARGER", "") || StringAt(0, 13, "WOJCIECHOWSKI", "")) { return true; } return false; } /** * Test whether the word in question * is a name starting with 'J' that should * match names starting with a 'Y' sound. * All forms of 'John', 'Jane', etc, get * and alt to match e.g. 'Ian', 'Yana'. Joelle * should match 'Yael', 'Joseph' should match * 'Yusef'. German and slavic last names are * also included. * * @return true if name starting with 'J' that * should get an alternate encoding as a vowel */ boolean Names_Beginning_With_J_That_Get_Alt_Y() { if(StringAt(0, 3, "JAN", "JON", "JAN", "JIN", "JEN", "") || StringAt(0, 4, "JUHL", "JULY", "JOEL", "JOHN", "JOSH", "JUDE", "JUNE", "JONI", "JULI", "JENA", "JUNG", "JINA", "JANA", "JENI", "JOEL", "JANN", "JONA", "JENE", "JULE", "JANI", "JONG", "JOHN", "JEAN", "JUNG", "JONE", "JARA", "JUST", "JOST", "JAHN", "JACO", "JANG", "JUDE", "JONE", "") || StringAt(0, 5, "JOANN", "JANEY", "JANAE", "JOANA", "JUTTA", "JULEE", "JANAY", "JANEE", "JETTA", "JOHNA", "JOANE", "JAYNA", "JANES", "JONAS", "JONIE", "JUSTA", "JUNIE", "JUNKO", "JENAE", "JULIO", "JINNY", "JOHNS", "JACOB", "JETER", "JAFFE", "JESKE", "JANKE", "JAGER", "JANIK", "JANDA", "JOSHI", "JULES", "JANTZ", "JEANS", "JUDAH", "JANUS", "JENNY", "JENEE", "JONAH", "JONAS", "JACOB", "JOSUE", "JOSEF", "JULES", "JULIE", "JULIA", "JANIE", "JANIS", "JENNA", "JANNA", "JEANA", "JENNI", "JEANE", "JONNA", "") || StringAt(0, 6, "JORDAN", "JORDON", "JOSEPH", "JOSHUA", "JOSIAH", "JOSPEH", "JUDSON", "JULIAN", "JULIUS", "JUNIOR", "JUDITH", "JOESPH", "JOHNIE", "JOANNE", "JEANNE", "JOANNA", "JOSEFA", "JULIET", "JANNIE", "JANELL", "JASMIN", "JANINE", "JOHNNY", "JEANIE", "JEANNA", "JOHNNA", "JOELLE", "JOVITA", "JOSEPH", "JONNIE", "JANEEN", "JANINA", "JOANIE", "JAZMIN", "JOHNIE", "JANENE", "JOHNNY", "JONELL", "JENELL", "JANETT", "JANETH", "JENINE", "JOELLA", "JOEANN", "JULIAN", "JOHANA", "JENICE", "JANNET", "JANISE", "JULENE", "JOSHUA", "JANEAN", "JAIMEE", "JOETTE", "JANYCE", "JENEVA", "JORDAN", "JACOBS", "JENSEN", "JOSEPH", "JANSEN", "JORDON", "JULIAN", "JAEGER", "JACOBY", "JENSON", "JARMAN", "JOSLIN", "JESSEN", "JAHNKE", "JACOBO", "JULIEN", "JOSHUA", "JEPSON", "JULIUS", "JANSON", "JACOBI", "JUDSON", "JARBOE", "JOHSON", "JANZEN", "JETTON", "JUNKER", "JONSON", "JAROSZ", "JENNER", "JAGGER", "JASMIN", "JEPSEN", "JORDEN", "JANNEY", "JUHASZ", "JERGEN", "JAKOB", "") || StringAt(0, 7, "JOHNSON", "JOHNNIE", "JASMINE", "JEANNIE", "JOHANNA", "JANELLE", "JANETTE", "JULIANA", "JUSTINA", "JOSETTE", "JOELLEN", "JENELLE", "JULIETA", "JULIANN", "JULISSA", "JENETTE", "JANETTA", "JOSELYN", "JONELLE", "JESENIA", "JANESSA", "JAZMINE", "JEANENE", "JOANNIE", "JADWIGA", "JOLANDA", "JULIANE", "JANUARY", "JEANICE", "JANELLA", "JEANETT", "JENNINE", "JOHANNE", "JOHNSIE", "JANIECE", "JOHNSON", "JENNELL", "JAMISON", "JANSSEN", "JOHNSEN", "JARDINE", "JAGGERS", "JURGENS", "JOURDAN", "JULIANO", "JOSEPHS", "JHONSON", "JOZWIAK", "JANICKI", "JELINEK", "JANSSON", "JOACHIM", "JANELLE", "JACOBUS", "JENNING", "JANTZEN", "JOHNNIE", "") || StringAt(0, 8, "JOSEFINA", "JEANNINE", "JULIANNE", "JULIANNA", "JONATHAN", "JONATHON", "JEANETTE", "JANNETTE", "JEANETTA", "JOHNETTA", "JENNEFER", "JULIENNE", "JOSPHINE", "JEANELLE", "JOHNETTE", "JULIEANN", "JOSEFINE", "JULIETTA", "JOHNSTON", "JACOBSON", "JACOBSEN", "JOHANSEN", "JOHANSON", "JAWORSKI", "JENNETTE", "JELLISON", "JOHANNES", "JASINSKI", "JUERGENS", "JARNAGIN", "JEREMIAH", "JEPPESEN", "JARNIGAN", "JANOUSEK", "") || StringAt(0, 9, "JOHNATHAN", "JOHNATHON", "JORGENSEN", "JEANMARIE", "JOSEPHINA", "JEANNETTE", "JOSEPHINE", "JEANNETTA", "JORGENSON", "JANKOWSKI", "JOHNSTONE", "JABLONSKI", "JOSEPHSON", "JOHANNSEN", "JURGENSEN", "JIMMERSON", "JOHANSSON", "") || StringAt(0, 10, "JAKUBOWSKI", "")) { return true; } return false; } /** * @param args */ public static void main(String[] args) { // example code Metaphone3 m3 = new Metaphone3(); //m3.SetEncodeVowels(true); //m3.SetEncodeExact(true); m3.SetWord("iron"); m3.Encode(); System.out.println("iron : " + m3.GetMetaph()); System.out.println("iron : (alt) " + m3.GetAlternateMetaph()); m3.SetWord("witz"); m3.Encode(); System.out.println("witz : " + m3.GetMetaph()); System.out.println("witz : (alt) " + m3.GetAlternateMetaph()); m3.SetWord(""); m3.Encode(); System.out.println("BLANK : " + m3.GetMetaph()); System.out.println("BLANK : (alt) " + m3.GetAlternateMetaph()); // these settings default to false m3.SetEncodeExact(true); m3.SetEncodeVowels(true); String test = new String("Guillermo"); m3.SetWord(test); m3.Encode(); System.out.println(test + " : " + m3.GetMetaph()); System.out.println(test + " : (alt) " + m3.GetAlternateMetaph()); test = "VILLASENOR"; m3.SetWord(test); m3.Encode(); System.out.println(test + " : " + m3.GetMetaph()); System.out.println(test + " : (alt) " + m3.GetAlternateMetaph()); test = "GUILLERMINA"; m3.SetWord(test); m3.Encode(); System.out.println(test + " : " + m3.GetMetaph()); System.out.println(test + " : (alt) " + m3.GetAlternateMetaph()); test = "PADILLA"; m3.SetWord(test); m3.Encode(); System.out.println(test + " : " + m3.GetMetaph()); System.out.println(test + " : (alt) " + m3.GetAlternateMetaph()); test = "BJORK"; m3.SetWord(test); m3.Encode(); System.out.println(test + " : " + m3.GetMetaph()); System.out.println(test + " : (alt) " + m3.GetAlternateMetaph()); test = "belle"; m3.SetWord(test); m3.Encode(); System.out.println(test + " : " + m3.GetMetaph()); System.out.println(test + " : (alt) " + m3.GetAlternateMetaph()); test = "ERICH"; m3.SetWord(test); m3.Encode(); System.out.println(test + " : " + m3.GetMetaph()); System.out.println(test + " : (alt) " + m3.GetAlternateMetaph()); test = "CROCE"; m3.SetWord(test); m3.Encode(); System.out.println(test + " : " + m3.GetMetaph()); System.out.println(test + " : (alt) " + m3.GetAlternateMetaph()); test = "GLOWACKI"; m3.SetWord(test); m3.Encode(); System.out.println(test + " : " + m3.GetMetaph()); System.out.println(test + " : (alt) " + m3.GetAlternateMetaph()); test = "qing"; m3.SetWord(test); m3.Encode(); System.out.println(test + " : " + m3.GetMetaph()); System.out.println(test + " : (alt) " + m3.GetAlternateMetaph()); test = "tsing"; m3.SetWord(test); m3.Encode(); System.out.println(test + " : " + m3.GetMetaph()); System.out.println(test + " : (alt) " + m3.GetAlternateMetaph()); } } |
Added gc_lang/fr/dictionnaire/orthographe/FRANCAIS.dic version [997f49e32a].
more than 10,000 changes
Added gc_lang/fr/dictionnaire/orthographe/FRANCAIS_5.aff version [3f437bf32b].
more than 10,000 changes
Added gc_lang/fr/dictionnaire/orthographe/README.old.txt version [00597582e6].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 | NOTICE _______________________________________________________________________________ Dictionnaire orthographique du français comportant les nouvelles et les anciennes graphies des mots concernés par les rectifications de l'orthographe proposées en 1990 par le Conseil supérieur à la langue française et par l'Académie française. http://www.orthographe-recommandee.info/ Attention ! Ce dictionnaire est prévu pour fonctionner avec Myspell, l'ancien correcteur orthographique d'OpenOffice.org, depuis les versions 1.x jusqu'à la version 2.0.1. Si vous avez une version postérieure d'OpenOffice.org, utilisez les dictionnaires créés pour Hunspell. Note : Firefox 3 utilise le correcteur Hunspell, Firefox 2 Myspell. Contact: dicollecte<at>free.fr Dicollecte: http://www.dicollecte.org/ Remerciements à : - Vazkor, pour l'examen minutieux du dictionnaire et les innombrables corrections apportées; - Jean Beney, pour la comparaison avec le dictionnaire de l'ABU qui a permis de débusquer maintes erreurs; - Romain Muller, pour la vérification des graphies spécifiques à la réforme de l'orthographe de 1990; - et à tous ceux qui ont apporté leur pierre à l'édifice. _______________________________________________________________________________ LICENCE _______________________________________________________________________________ Avec l'accord de l'auteur initial, Christophe Pythoud, ces dictionnaires sont désormais distribués sous triple licence : LGPL, GPL, MPL. Licence GPL 2 ou supérieure http://www.gnu.org/licenses/gpl-2.0.html Licence LGPL 2.1 ou supérieure http://www.gnu.org/licenses/lgpl-2.1.html Licence MPL 1.1 ou supérieure http://www.mozilla.org/MPL/MPL-1.1.html La première version du dictionnaire MySpell pour OpenOffice.org a été créée automatiquement à partir de la convertion du fichier d'affixes et des listes de mots créées par Christophe Pythoud pour Ispell. Ces fichiers ont été publiés dans la version 1.0.1 de Français-GUTenberg et étaient soumis à la licence GPL version 2. _______________________________________________________________________________ CHANGELOG _______________________________________________________________________________ ##### VERSION 1.3.1 - avril 2008 ############################################## établie par O.R. ----- Modifications du dictionnaire ------------------------------------------- * Dépliage des lemmes préfixés avec C D N P R O T dans les dictionnaires Classique et Réforme 1990. A permis d'éliminer bon nombre d'erreurs et de redondances. * Fusion des dictionnaires Classique et Réforme 1990 après le dépliage des lemmes préfixés. * Mise à jour avec les propositions du site "Dicollecte". ----- Modifications du fichier des affixes ------------------------------------ * Suppression des drapeaux de préfixation : C D N P R O T. ##### VERSION 1.2.0 - mars 2008 ############################################### ##### VERSION 1.1.6 - février 2008 ############################################ établies par O.R. ----- Modifications du dictionnaire ------------------------------------------- * Ajout de communes françaises (villes de plus de 20000 habitants) * Mise à jour avec les entrées proposées sur le site "Dicollecte". * Diverses corrections * Quelques ajouts ----- Modifications du fichier des affixes ------------------------------------ * Modifications du mécanisme de suggestion : + REP ai é + REP é ai + REP ai è + REP è ai + REP ai ê + REP ê ai + REP ei é + REP é ei + REP ei è + REP è ei + REP ei ê + REP ê ei + REP ss c + REP c ss + REP k qu + REP qu k + REP x ct + REP ct x + REP ss ç + REP ç ss + REP o au + REP au o + REP o eau + REP eau o + REP disez dites + REP fesez faites + REP faisez faites + REP décrédibilis discrédit + REP antitartre détartrant Exemples: luminère > luminaire pégne > peigne impreigner > imprégner * Modification du drapeau y > SFX y er è-je er ##### VERSION 1.1.5 - décembre 2007 ########################################### ##### VERSION 1.1.4 - décembre 2007 ########################################### ##### VERSION 1.1.3 - décembre 2007 ########################################### établies par O.R. * Mise à jour avec les entrées proposées sur le site "dico|savant". * Diverses corrections ##### VERSION 1.1 - novembre 2007 ############################################# établie par O.R. * Fusion des dictionnaires orthographiques français Classique et Réforme 1990, versions 2.0.2 du 19 novembre 2007. Fusion des fichiers des lemmes et des affixes. ##### VERSION 1.1 - novembre 2007 ############################################# établie par O.R. ----- Modifications du dictionnaire ------------------------------------------- * Suppression de milliers d'entrées redondantes (notamment avec les déclinaisons engendrées par les drapeaux p, q, L et M). * Corrections des mots avec ligatures ('oe', 'ae'). * Ordonnancement des drapeaux (et effacement des doublons). * Des centaines de nouvelles entrées. * Des centaines de corrections. * Mise à jour avec les entrées proposées sur le site "dico|savant". * Reprise partielle des corrections et ajouts du dictionnaire de Vazkor du 08 septembre 2007. A la demande de l'intéressé, seul son pseudonyme demeure. La page web fournissant ce dictionnaire a été effacée. La plupart des ajouts et des modifications ont été repris (environ 3200 sur 4900). Seules les suppressions des entrées erronées ont été reprises (environ 800 sur 12300). Les termes rares, scientifiques, mathématiques, les mots composés, etc. n'ont pas été effacés. Quelques erreurs ont été corrigées. * Comparaison du dictionnaire avec celui de l'ABU, ce qui a permis de corriger des centaines d'erreurs et de combler des oublis. (Jean Beney) * Vérification des nouvelles orthographes recommandées. (Romain Muller) http://www.orthographe-recommandee.info/ ----- Modifications du fichier des affixes ------------------------------------ La liste suivante détaille les modifications du dictionnaire "Classique". Celles du dictionnaire "Réforme 1990" sont légèrement différentes. * suppression des drapeaux inutiles : A B C H E Y Z I J K W a b e f i k * ajout du drapeau C (préfixe contre) * ajout du drapeau T (préfixe sur) * ajout des lignes MAP, REP et WORDCHARS >> meilleures suggestions de correction * modification du drapeau D > PFX D 0 dé [^aàâeèéêiîoôuh½æ] > PFX D 0 dés [aàâeèéêiîoôuh½æ] * modification du drapeau R > PFX R 0 re [^aàâeèéêiîoôuhs½æ] > PFX R 0 ré [aàâeèéêiîoôuh½æ] * modification du drapeau O > PFX O 0 ré [^aàâeèéêiîoôuhs½æ] > PFX O 0 r [aàâeèéêiîoôuh½æ] * modification du drapeau L > PFX L 0 l' [aàâeèéêiîoôuyh½æAÀÂEÈÉÊIÎOÔUYH¼Æ] * modification du drapeau D > PFX M 0 d' [aàâeèéêiîoôuyh½æAÀÂEÈÉÊIÎOÔUYH¼Æ] * modification du drapeau Q > PFX Q 0 qu' [aàâeèéêiîoôuyh½æAÀÂEÈÉÊIÎOÔUYH¼Æ] > PFX Q 0 quoiqu' [aàâeèéêiîoôuyh½æAÀÂEÈÉÊIÎOÔUYH¼Æ] > PFX Q 0 puisqu' [aàâeèéêiîoôuyh½æAÀÂEÈÉÊIÎOÔUYH¼Æ] > PFX Q 0 lorsqu' [aàâeèéêiîoôuyh½æAÀÂEÈÉÊIÎOÔUYH¼Æ] * modification du drapeau U > PFX U 0 jusqu' [aàâeèéêiîoôuh½æ] * modification du drapeau X > SFX X 0 x [aeo½]u * modification du drapeau j > PFX j 0 j' [aàâeèéêiîoôuyh½æ] * modification du drapeau n > PFX n 0 n' [aàâeèéêiîoôuyh½æ] > PFX n 0 qu' [aàâeèéêiîoôuyh½æ] * modification du drapeau m > PFX m 0 m' [aàâeèéêiîoôuyh½æ] * modification du drapeau t > PFX t 0 t' [aàâeèéêiîoôuyh½æ] * modification du drapeau l > PFX l 0 l' [aàâeèéêiîoôuyh½æ] * modification du drapeau s > PFX s 0 s' [aàâeèéêiîoôuyh½æ] * modification du drapeau F - SFX F èle el èle - SFX F èle els èle > SFX F ne n [aiou]ne > SFX F e s [aiou]ne > SFX F re r [aiuûy]re > SFX F e s [aiuûy]re + SFX F esse e esse + SFX F he h [ut]he + SFX F e s [ut]he + SFX F ke k ke + SFX F e s ke * modification du drapeau g + SFX g s t fris * modification du drapeau y + SFX y re t [dfr]ire > SFX y re ts [dfr]ire > SFX y re te [dfr]ire > SFX y re tes [dfr]ire + SFX y re s cire + SFX y ure us clure + SFX y re e clure + SFX y re es clure * modification du drapeau x > le champ conditionnel 'ai' a été remplacé par 'rai' * modification du drapeau z > SFX z ure us clure * modification du drapeau p > SFX p e èrent [^è][^è].e > SFX p 0 ra [^è][^è].e > SFX p 0 ront [^è][^è].e > SFX p 0 rait [^è][^è].e > SFX p 0 raient [^è][^è].e + SFX p ie yèrent [aou]ie + SFX p elle elèrent elle + SFX p ère érèrent ère + SFX p ère érera ère + SFX p ère éreront ère + SFX p ère érerait ère + SFX p ère éreraient ère + SFX p ège égèrent ège + SFX p ège égera ège + SFX p ège égeront ège + SFX p ège égerait ège + SFX p ège égeraient ège + SFX p ève evèrent ève + SFX p 0 ra ève + SFX p 0 ront ève + SFX p 0 rait ève + SFX p 0 raient ève + SFX p ène énèrent [^mr]ène + SFX p ène énera [^mr]ène + SFX p ène éneront [^mr]ène + SFX p ène énerait [^mr]ène + SFX p ène éneraient [^mr]ène + SFX p ène enèrent [mr]ène + SFX p 0 ra [mr]ène + SFX p 0 ront [mr]ène + SFX p 0 rait [mr]ène + SFX p 0 raient [mr]ène + SFX p ète étèrent [^h]ète + SFX p ète étera [^h]ète + SFX p ète éteront [^h]ète + SFX p ète éterait [^h]ète + SFX p ète éteraient [^h]ète + SFX p ète etèrent chète + SFX p 0 ra chète + SFX p 0 ront chète + SFX p 0 rait chète + SFX p 0 raient chète + SFX p èle elèrent èle + SFX p 0 ra èle + SFX p 0 ront èle + SFX p 0 rait èle + SFX p 0 raient èle + SFX p èche échèrent èche + SFX p èche échera èche + SFX p èche écheront èche + SFX p èche écherait èche + SFX p èche écheraient èche + SFX p èque équèrent èque + SFX p èque équera èque + SFX p èque équeront èque + SFX p èque équerait èque + SFX p èque équeraient èque + SFX p ètre étrèrent ètre + SFX p ètre étrera ètre + SFX p ètre étreront ètre + SFX p ètre étrerait ètre + SFX p ètre étreraient ètre + SFX p ègne égnèrent ègne + SFX p ègne égnera ègne + SFX p ègne égneront ègne + SFX p ègne égnerait ègne + SFX p ègne égneraient ègne + SFX p ègre égrèrent ègre + SFX p ègre égrera ègre + SFX p ègre égreront ègre + SFX p ègre égrerait ègre + SFX p ègre égreraient ègre + SFX p èvre évrèrent èvre + SFX p èvre évrera èvre + SFX p èvre évreront èvre + SFX p èvre évrerait èvre + SFX p èvre évreraient èvre Légende : > lignes modifiées + lignes ajoutées - lignes supprimées ##### VERSION 1.0.1 ########################################################### Version corrigée de la liste de mots avec regroupement des mots équivalents afin de supprimer des fautes lors de la correction (les mots sont considérés comme faux si ils existent en double dans la liste de mots) ##### VERSION 1.0.0 ########################################################### Version du dictionnaire MySpell fr_FR générée automatiquement depuis à partir de la convertion du fichier affix et des listes de mots créés par Christophe Pythoud pour Ispell |
Added gc_lang/fr/dictionnaire/orthographe/README_dict_fr.txt version [462b57ee9f].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | _______________________________________________________________________________ DICTIONNAIRES ORTHOGRAPHIQUES FRANÇAIS version ${version} Olivier R. - dicollecte<at>free<dot>fr Dicollecte : http://www.dicollecte.org/ Licence : MPL : Mozilla Public License version 2.0 -- http://www.mozilla.org/MPL/2.0/ Ce dictionnaire ne peut fonctionner qu’avec un logiciel utilisant le correcteur Hunspell : OpenOffice.org 3.2+, Firefox 4+, Thunderbird 5+ Principaux contributeurs : - Jean-Luc T. ; - Sylvain P. ; - Laurent Dubois ; - Dominique Pellé ; - Pierre Poisson ; - Pierre-Yves ; - Pierre Choffardet ; - Leywen ; - Romain Muller et Serge Bibauw, de l’association RENOUVO, grâce à qui la nouvelle orthographe et ses anciennes variantes ont pu être établies ; - Chantal Contant, pour ses recherches sur la réforme de 1990 ; - Benoît Sagot, qui nous a autorisé à comparer notre lexique avec Lefff, ce qui a mis en évidence des dizaines d’erreurs d’étiquetage grammatical ; - Philipp Burgess, pour la normalisation Unicode avec Hunspell. Merci aussi à tous ceux qui ont apporté leur pierre à l’édifice. http://www.dicollecte.org/members.php?prj=fr Pour participer à l’amélioration du dictionnaire, allez sur : http://www.dicollecte.org/home.php?prj=fr _______________________________________________________________________________ À propos des différents dictionnaires français _______________________________________________________________________________ En 1990, le Conseil supérieur à la langue française et l’Académie française ont proposé une réforme de l’orthographe qui concerne plusieurs milliers de mots. L’emploi des nouvelles graphies n’est pas obligatoire. Les anciennes comme les nouvelles sont considérées comme correctes. Pour en savoir plus sur la réforme de 1990 : http://www.renouvo.org/regles.php http://www.orthographe-recommandee.info/ Malgré les rectifications modestes apportées par cette réforme, la nouvelle orthographe suscite beaucoup de polémiques. Afin de satisfaire les exigences de chacun, quatre dictionnaires existent, respectant différemment cette réforme. Dictionnaire “Moderne” Ce dictionnaire propose une sélection des graphies classiques et réformées, suivant la lente évolution de l’orthographe actuelle. Ce dictionnaire contient les graphies les moins polémiques de la réforme. Dictionnaire “Classique” [recommandé] Ce dictionnaire est une extension du dictionnaire «Moderne» et propose en sus des graphies alternatives, parfois encore très usitées, parfois tombées en désuétude. Dictionnaire “Réforme 1990” Ce dictionnaire ne connaît que les graphies nouvelles des mots concernés par la réforme de 1990. Dictionnaire “Toutes variantes” Ce dictionnaire contient les nouvelles et les anciennes graphies des mots concernés par la réforme de 1990. |
Added gc_lang/fr/dictionnaire/orthographe/changelog.old.txt version [a6c02c3d4d].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | Résumons la genèse de ce dictionnaire: * Dictionnaire pour Ispell, par Christophe Pythoud [2001?] - création d’un fichier des affixes du français (c’est la structure, le squelette du dictionnaire) - création de listes de mots (origine inconnue) * Dictionnaire pour Myspell (orthographe classique) [2002] - conversion faite par script (auteurs inconnus) - corrections pour mise en conformité avec les contraintes de Myspell (auteurs inconnus) * Dictionnaire pour Myspell (orthographe réformée) [2005-2006], par Mat. Schopfer (nom incertain, car je le tire d’une adresse mail) - élaboré à partir du dictionnaire 1.0.1 - restructuration du fichier des affixes, suppression des paramètres inutilisés, suppression des paramètres utiles à un seul verbes - ajouts de nombreux noms propres et de néologismes - correction des pluriels de quelques mots en -al (naval, banal ...) - correction de la 2e personne du pluriel de l'indicatif des verbes dérivés de dire (prédire, dédire, médire ...) - regroupement des verbes avec leurs dérivés à préfixes commençant par une consonne (contre-, dé-, ré-, pré-, sur-) * Dictionnaire pour Myspell (orthographe classique) [2006-2007], par Vazkor - élaboré à partir du dictionnaire 1.0.1 - épuration du fichier des affixes - des milliers d’ajouts et de corrections - des milliers de suppressions (redondances ou mots jugés trop rares) * Dictionnaire pour Myspell (orthographe classique) [2006-2008], par Olivier R. (moi-même) - élaboré à partir du dictionnaire 1.0.1 - correction, épuration et restructuration partielle du fichier des affixes - suppression des redondances par algorithme de génération des flexions et recherche - des milliers ajouts et corrections (avec le concours de Jean Beney) - reprise partielle des modifications faites par Vazkor (partielle, car points de vue divergents concernant la politique du dictionnaire) - intégration des propositions faites sur le site dicollecte, anciennement dico|savant * Dictionnaire pour Myspell (orthographe réformée) [2007-2008], par moi-même - reprise du dictionnaire de Mat. Schopfer - correction, épuration du fichier des affixes (mais pas restructuration) - intégration des modifications faites sur le dictionnaire précédent, par script * Dictionnaire pour Myspell (orthographes classique et réformée) [2007-2008], par moi-même - première fusion grossière des deux dictionnaires précédents, par script (2007) - fusion plus élaborée des deux dictionnaires précédents, par script (2008) Fin de l’épopée Myspell Avec tous ces dictionnaires, avec des fichiers d’affixation légèrement divergents et un peu conflictuels, maintenir les 3 dictionnaires n’était pas une sinécure, d’autant plus que le dictionnaire réformé avait subi des changements compliquant pas mal la comparaison des entrées (autre gestion des préfixes). De surcroît, Myspell avaient des limitations qui rendaient la gestion des élisions et la conjugaison des verbes très compliquées (5 entrées par verbe au minimum, voire des dizaines pour les verbes irréguliers; parfois plusieurs entrées par mot pour les élisions; redondances; flexions erronées dues aux combinaisons des règles d’affixation; etc.). Bref, c’était un véritable casse-tête de gérer ces trois dictionnaires simultanément, et j’ai décidé de tout reprendre sur des bases saines. * Dictionnaire pour Hunspell (source) [2008-2009], par moi-même - réécriture totale du fichier des affixes (incompatible avec Myspell) [de nov. 2007 à nov. 2008] - nouvelle liste de mots: -> verbes tirés de listes diverses sur le net et du Bescherelle -> reprise de la liste du dernier dictionnaire fusionné (sauf les verbes) -> génération d’une liste de noms communs à partir de la liste des verbes - étiquetage grammatical (82% des entrées) - nouvelle liste de mots concernés par la réforme issue de la base de données de RENOUVO (Romain Muller et Serge Bibauw) - intégration des propositions du site Dicollecte (principaux contributeurs: Laurent Dubois et Pierre Poisson) C’est à partir de dictionnaire source que les dictionnaires «Classique», «Réforme 1990» et «Classique & Réforme 1990» sont générés, ce qui permet de n’avoir qu’une seule liste sur laquelle travailler. Ceci étant établi, je (Olivier R.) suis l’auteur du dictionnaire actuel (fichier des affixes, système et scripts, listes de mots, étiquetage). Les principaux contributeurs sont (directement ou indirectement): Christophe Pythoud (liste initiale des mots), RENOUVO (pour les mots de la réforme), Vazkor (nombre important d’ajouts et de corrections sur la liste de Pythoud), Laurent Dubois et Pierre Poisson (nombreux ajouts et corrections, et contrôle actif des propositions faites sur Dicollecte). Autres contributeurs: Jean Beney (corrections et ajouts), Audran «gtfh» (contrôleur à l’époque de dico|savant), Mat. Schopfer (corrections, ajouts), Jean-Philippe Fleury. Ensuite, il y a les autres listés ici: http://www.dicollecte.org/members.php?prj=fr |
Added gc_lang/fr/dictionnaire/orthographe/changelog.txt version [789b389bea].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 | JOURNAL DES MODIFICATIONS PAR DICOLLECTE _______________________________________________________________________________ *** *** DICTIONNAIRES POUR HUNSPELL (Dicollecte) *** *** 5.0.2 // 18 janvier 2013 — Environ ?? nouvelles entrées — Ajouts des formes élidées manquantes pour les participes passés du 3e groupe 5.0.1 // 9 décembre 2013 — Ajouts des formes élidées manquantes pour les participes passés du 1er et du 2e groupe 5.0 // 8 décembre 2013 — Environ 710 nouvelles entrées — Refonte des règles d’affixation : – Fusion des règles des conjugaisons (2546 règles supprimées) – 3457 entrées supprimées (adjectifs redondants avec les participes passés) 4.12 // 13 septembre 2013 — Environ 470 nouvelles entrées — Suggestion avec les apostrophes quand celles-ci sont oubliées (limportance -> l’importance) 4.11 // 17 juin 2013 — Environ 700 nouvelles entrées — Révision de l’étiquetage grammatical (beaucoup d’étiquettes /is:/ sont devenues /po:/ notamment dans le fichier des affixes) nécessaire pour Grammalecte 0.3 — Étiquetage grammatical à 100 % (il manquait 0,2 % depuis pas mal de temps) 4.10 // 1er avril 2013 — Ajout des graphies en -è des formes interrogatives de la première personne du singulier [Réforme 1990] — Environ 460 nouvelles entrées 4.9 // 21 janvier 2013 — Environ 560 nouvelles entrées — Nouvelles directives ICONV pour les ligatures (ffi ffl ff fi fl) et l’apostrophe typographique — Nouvelles directives BREAK ^' ^‘ '$ ’$ — Ajout des caractères '1234567890 dans WORDCHARS — Corrections diverses 4.8 // 17 novembre 2012 — Environ 460 nouvelles entrées — Corrections diverses — Modification des règles de suggestion (fusion des lignes MAP) 4.7 // 7 octobre 2012 — [LO/OO] Extension multi-dictionnaires : fusion des 4 extensions en une seule 4.6 // 2 septembre 2012 — NOUVELLE LICENCE : MPL v2.0 uniquement — Correction du bug sur les mots comme «L’Institut» ([MAJ]’[MAJ]) — Environ 600 nouvelles entrées 4.5 // 13 mai 2012 — Environ 1300 nouvelles entrées — Corrections diverses 4.4.1 // 28 décembre 2011 — Environ 1500 nouvelles entrées — Corrections diverses 4.3 // 27 septembre 2011 — Environ 1250 nouvelles entrées — Corrections diverses 4.2.5 // 17 août 2011 (Snapshot pour compabilité des extensions avec Thunderbird 6) 4.2.1 // 25 juillet 2011 (Snapshot pour LibreOffice 3.4.3) 4.2 // 4 juillet 2011 — Environ 1100 nouvelles entrées — Restructuration de l’étiquetage grammatical (aucune morphologie implicite ; étiquette /sg/) — Corrections diverses — Le point est dorénavant considéré comme un séparateur de mots 4.1 // 15 avril 2011 — Environ 1100 nouvelles entrées — Corrections diverses — Modifications de l’étiquetage grammatical (nouvelle étiquette /epi/) 4.0 // 9 janvier 2011 — ÉTIQUETAGE GRAMMATICAL (99%), inclus dans les dictionnaires finaux — Normalisation de l’étiquetage grammatical — Environ 2000 nouvelles entrées — Corrections diverses 3.9.5 (Snapshot pour Firefox 4) — Le dictionnaire «Classique» est dorénavant une extension du «Moderne» 3.8 // 1er août 2010 — Environ 950 nouvelles entrées — Corrections diverses — Étiquetage grammatical (97%) 3.7 // 2 mai 2010 — Normalisation de l’unicode avec Hunspell (merci à Philip Burgess) — Suggestions des formes correctes avec l’apostrophe typographique — Environ 1360 nouvelles entrées — Corrections diverses — Nouvelle répartition de certaines graphies dans les dictionnaires Classique / Réforme / Moderne (travail toujours en cours) — Première version stable du dictionnaire «Moderne» 3.6 (Snapshot pour OpenOffice.org 3.2) 3.5 // 25 janvier 2010 — Environ 1460 nouvelles entrées — Corrections diverses — Version bêta du dictionnaire «Moderne» 3.4.5 (Snapshot pour Firefox 3.6) 3.4.1 // 14 septembre 2009 — Correction d’un bug dans le fichier des affixes — Revue des mots modifiés par la réforme de 1990 — Environ 700 nouvelles entrées — Corrections d’erreurs dans le fichier des affixes — Corrections diverses 3.3 (Snapshot pour Firefox 3.5) 3.2 // 16 avril 2009 — Corrections d’erreurs dans le fichier des affixes — Environ 550 nouvelles entrées — Corrections diverses 3.1 // 24 janvier 2009 — Corrections d’erreurs dans le fichier des affixes — Environ 630 nouvelles entrées — Corrections diverses 3.0 // 2 novembre 2008 (Un an de travail.) — RÉÉCRITURE COMPLÈTE DU SYSTÈME D’AFFIXATION (incompatible avec Myspell) — RÉORGANISATION COMPLÈTE DU DICTIONNAIRE (60172 entrées) — Amélioration de la suggestion des graphies correctes — Nouvelle liste de verbes (7000) — Épuration de nombreuses entrées — ÉTIQUETAGE GRAMMATICAL (à 82%), non inclus dans les dictionnaires finaux — Début de l’étiquetage lexical *** *** DICTIONNAIRES POUR MYSPELL (Dicollecte) *** *** 2.x // 2007–2008 Les versions 2.x ne sont que des images des versions 1.x pour Hunspell. 1.1 // novembre 2007 Version de Dicollecte. Reprend en partie les modifications du dictionnaire de Vazkor. _______________________________________________________________________________ JOURNAL DES MODIFICATIONS AVANT DICOLLECTE _______________________________________________________________________________ *** *** DICTIONNAIRES POUR MYSPELL *** *** 1.? // juillet 2007 Dictionnaire de Vazkor (orthographe classique) : http://perso.latribu.com/rocky2/ (élaboré à partir du dictionnaire 1.0.1) Avec l’autorisation de Christophe Pythoud, le dictionnaire passe sous les licences MPL/LGPL/GPL. — Épuration du fichier des affixes — Des milliers d’ajouts et de corrections — Des milliers de suppressions (redondances ou mots jugés trop rares) 1.? // 2005–2006 Dictionnaire avec orthographe réformée, par Mat. Schopfer (nom incertain, tiré d’une adresse mail) (élaboré à partir du dictionnaire 1.0.1) — Restructuration du fichier des affixes, suppression des paramètres inutilisés, suppression des paramètres utiles à un seul verbes — Ajouts de nombreux noms propres et de néologismes — Correction des pluriels de quelques mots en -al (naval, banal ...) — Correction de la 2e personne du pluriel de l'indicatif des verbes dérivés de dire (prédire, dédire, médire ...) — Regroupement des verbes avec leurs dérivés à préfixes commençant par une consonne (contre-, dé-, ré-, pré-, sur-) 1.0.1 // (Date inconnue) (Auteur inconnu) — Regroupement des mots équivalents, Myspell n’étant pas capable de tenir compte des lemmes doublons 1.0 // 12 février 2002 Conversion du dictionnaire pour Ispell de Christophe Pythoud, par « Jojolapin ». http://linuxfr.org/news/dico-fran%C3%A7ais-pour-openofficeorg http://jjlapin.free.fr/dico/ *** *** DICTIONNAIRE POUR ISPELL *** *** 1.0 // 1998 Dictionnaire "Français-Gutenberg" version 1.0, développé pour Ispell par Christophe Pythoud et l'Association Gutenberg, publié sous licence GPL. |
Added gc_lang/fr/dictionnaire/orthographe/dictionaries.update.xml version [e875997a63].
> > > > > > > > | 1 2 3 4 5 6 7 8 | <?xml version="1.0" encoding="UTF-8"?> <description xmlns="http://openoffice.org/extensions/update/2006" xmlns:xlink="http://www.w3.org/1999/xlink"> <identifier value="org.openoffice.comp.pyuno.lightproof.oxt.grammalecte"/> <version value="4.11" /> <update-download> <src xlink:href="http://extensions.libreoffice.org/extension-center/dictionnaires-francais/releases/4.11/lo-oo-ressources-linguistiques-fr-v4-11.oxt" /> </update-download> </description> |
Added gc_lang/fr/dictionnaire/pfx_sfx.py version [c6ef35c8c9].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 | #!python3 grec = [ "aéro", "agogie$", "agogue$", "algie$", "^allo", "andro", "angio", "anthropo?", "^anti", "amphi", "^ana", "^apo", "archéo", "archie$", "arque$", "arthro", "astr(?:ono?m?|)", "^auto", "^an?", "bary", "biblio", "bio", "brachy", "canc[eé]ro?", "carcino?", "cardio?", "^cata", "céphalo?", "chiro?", "chro[mn]o?", "ciné(?:ma|t|)", "^col", "cosm[oi]", "crati?e", "crypto?", "cyano?", "cycl[oe]", "cyto", "dactylo?", "déca", "démo", "dermo?", "dia", "didact", "^di" "doxe?", "drome$" "dynamo?", "dys", "ecto", "èdre$", "électro?n?", "^en", "endo", "^épi", "esse$", "étymo?", "^eu", "exo", "galacto?", "gasté?ro?", "gène$", "gén[éèi]", "géo", "gl[uy]co?", "gnos[eit]", "gone$", "gramm[ae]", "grapho?", "gynéco", "gyno", "hecto", "hélio", "hémato", "hémo", "hétéro", "hippo", "holo", "homéo", "hémi", "homo", "horo", "hydr[oa]", "hyper", "hypo", "hypno", "icono?", "idol(?:âtr|)", "ique$", "is[mt]e$", "iser$", "iso", "ite$", "kilo", "kiné[st]?", "leuc[oé]", "lithe$", "litho?", "logie$", "logique$", "logo", "logue$", "lyse$", "macro", "mani?e", "méga(?:lo|)", "mélano", "méso", "méta", "métro", "mètre$", "micro", "miso", "mono", "morpho?", "myo", "myria", "mytho?", "nécro", "néo", "neuro", "nomi?e$", "nomique$", "nyct", "oligo", "onom", "onym[eai]", "ope$", "ophtalmo?", "ornitho", "ortho", "^oto", "ose$", "oto", "oxy", "paléo", "^pan", "para", "patho", "pédo", "penta", "péri", "phago", "phage$", "phane$", "phanéro", "philo?", "phile$", "phobi?e$", "phone$", "phono?", "phore$", "photo", "phylo", "phys(?:io|)", "phyto?", "pneumo?", "podo", "pole$", "^poli", "poly", "potam", "probl[éè]m", "proph[éè]t", "psych[oé]?", "ptéro", "pyro", "rhéo?", "rhino" "rhizo", "rythm", "scope$", "scop", "séma", "sémio", "sé?ismo?", "sophi?", "stas[ei]", "syn", "techno?", "t[ée]tra", "thé[eo]", "thérap", "théâtr", "télé", "thalasso", "théo", "thèque$", "thérap(?:eu|)", "thèse$", "tomie$", "topo", "^tri", "trope$", "thophie$", "vaso", "xéno", "xylo", "zoo" ] latin = [ "^ab", "able$", "acée$", "agro", "ance$", "^anté", "^aqu", "ation$", "atoire$", "^auri", "^avi", "^bis?", "calor", "carni", "centi", "circum", "^cis", "^com", "^con", "^co", "déci", "digit", "ée$", "éenne$", "elle$", "équi", "extra", "^ex", "fère$" "homo", "i?aire$", "ible$", "inter", "intra", "intro", "^in", "ir$", "ité$", "itude$", "juxta", "lacto?", "latéro?", "mamm", "ment$", "milli?", "mobile?", "multi", "naut", "oléo", "omni", "onne$", "otte$", "ovo", "patr[oi]", "péné", "^per", "pétro", "pisci", "^pré", "^pro", "quadri", "quinqu", "radio", "rétro", "^ré", "recti?", "semi", "^sub", "super", "supra", "tion$", "trans", "^tri", "ude$", "ule$", "ultra", "^uni", "ure$", "vore$", ] |
Added gc_lang/fr/dictionnaire/thesaurus/README_thes_fr.txt version [952166381e].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | _______________________________________________________________________________ Dictionnaire des synonymes français myThes version 2.3 Par Frédéric Labbé Pour les mises à jour, allez sur Dicollecte : http://www.dicollecte.org/home.php?prj=fr Licence: LGPL : GNU Lesser General Public License version 2.1 ou supérieure -- http://www.gnu.org/licenses/lgpl-2.1.html _______________________________________________________________________________ Ce dictionnaire des synonymes est encore en cours d'élaboration. Actuellement, seules les graphies précédant la réforme de l'orthographe de 1990 sont reconnues. _______________________________________________________________________________ Historique _______________________________________________________________________________ * myThes est le format de thesaurus de OOo à partir de la version 2.0 developpé par Kevin Hendricks sur la base des travaux de l'université de Priceton: http://lingucomponent.openoffice.org/thesaurus.html Cette version est incompatible avec le format binaire utilisé pour les versions 1.x d'OpenOffice.org. * La conception du thesaurus dans le format 1.0 a été initiée par Frederic Labbé. * La version 2 a été transformée par la société Indesko. Laurent Godard (lgodard@indesko.com) Les catégories grammaticales des mots ont été complétées sur la base de InDico, dictionnaire taggué developpé par InDesko et issu de la transformation des listes de l'abu (http://abu.cnam.fr/) * La version 2.1 n'apporte que la reconnaissance des mots avec ligatures. Ce thesaurus a été découvert ici : http://user.services.openoffice.org/fr/forum/viewtopic.php?p=15783#15783 * La version 2.2 est générée à partir de la base de données de Dicollecte. Pour l'instant, seules quelques modifications ont été faites. * Version 2.3 : nettoyage des entrées erronées. _______________________________________________________________________________ |
Added gc_lang/fr/dictionnaire/thesaurus/create_idx.py version [570f17f6e9].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | #!/usr/bin/python # -*- coding: UTF-8 -*- import sys import re import codecs def help (): print "" print "Syntax:" print "thes_convert.py filename" def indexCreation (thfilename): # This method is a modified Python transcription of a Perl script (th_gen_idx.pl) # made by Kevin B. Hendricks (see MyThes-1.0) """ /* * Copyright 2003 Kevin B. Hendricks, Stratford, Ontario, Canada * And Contributors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ """ print("Creating the index file for the thesaurus ...") # we read the thesaurus entries = [] pattern = re.compile('^[^|]+\|[1-9][0-9]*$') sourcefile = open(thfilename, 'r') encodingline = sourcefile.readline() # encoding fileOffset = len(encodingline) line = sourcefile.readline() i = 2 while line != "" : while not re.search(pattern, line) : try: print(u"## Error at line %d. This line is not a new entry:\n%s" % (i, line)) except: print(u"## Error at line %d. This line is not a new entry." % i) line = sourcefile.readline() i = i + 1 offset = len(line) line = line.rstrip() entry, nbclass = line.split('|') nbcl = int(nbclass) for k in range(nbcl) : line = sourcefile.readline() offset = offset + len(line) i = i + 1 entries.append((entry, fileOffset)) fileOffset = fileOffset + offset line = sourcefile.readline() i = i + 1 sourcefile.close() # we create the index entries.sort(elemsort) idxfilenames = thfilename.rsplit('.', 1) idxfilename = idxfilenames[0] + ".idx" destfile = open(idxfilename, 'w') destfile.write(encodingline) destfile.write("%d\n" % len(entries)) for entry in entries : destfile.write("%s|%d\n" % (entry[0], entry[1])) destfile.close() print("Done.") def main (): if len(sys.argv) != 2: help() return False indexCreation(sys.argv[1]) if __name__ == "__main__" : main() |
Added gc_lang/fr/dictionnaire/thesaurus/thes_fr.dat version [8e7389c84b].
more than 10,000 changes
Added gc_lang/fr/dictionnaire/thesaurus/thes_fr.idx version [e141d55d12].
more than 10,000 changes
Added gc_lang/fr/logo.png version [e940da80d7].
cannot compute difference between binary files
Added gc_lang/fr/mg.odt version [21fb482d0e].
cannot compute difference between binary files
Added gc_lang/fr/modules-js/conj.js version [1c45293d0f].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 | // Grammalecte - Conjugueur // License: GPL 3 "use strict"; ${map} let helpers = null; // module not loaded in Firefox content script let _oData = {}; let _lVtyp = null; let _lTags = null; let _dPatternConj = {}; let _dVerb = {}; if (typeof(exports) !== 'undefined') { // used within Grammalecte library helpers = require("resource://grammalecte/helpers.js"); _oData = JSON.parse(helpers.loadFile("resource://grammalecte/fr/conj_data.json")); _lVtyp = _oData.lVtyp; _lTags = _oData.lTags; _dPatternConj = _oData.dPatternConj; _dVerb = _oData.dVerb; } else { // used within Firefox content script (conjugation panel). // can’t load JSON from here, so we do it in ui.js and send it here. self.port.on("provideConjData", function (sData) { _oData = JSON.parse(sData); _lVtyp = _oData.lVtyp; _lTags = _oData.lTags; _dPatternConj = _oData.dPatternConj; _dVerb = _oData.dVerb; }); } const _zStartVoy = new RegExp("^[aeéiouœê]"); const _zNeedTeuph = new RegExp("[tdc]$"); const _dProSuj = new Map ([ [":1s", "je"], [":1ś", "je"], [":2s", "tu"], [":3s", "il"], [":1p", "nous"], [":2p", "vous"], [":3p", "ils"] ]); const _dProObj = new Map ([ [":1s", "me "], [":1ś", "me "], [":2s", "te "], [":3s", "se "], [":1p", "nous "], [":2p", "vous "], [":3p", "se "] ]); const _dProObjEl = new Map ([ [":1s", "m’"], [":1ś", "m’"], [":2s", "t’"], [":3s", "s’"], [":1p", "nous "], [":2p", "vous "], [":3p", "s’"] ]); const _dImpePro = new Map ([ [":2s", "-toi"], [":1p", "-nous"], [":2p", "-vous"] ]); const _dImpeProNeg = new Map ([ [":2s", "ne te "], [":1p", "ne nous "], [":2p", "ne vous "] ]); const _dImpeProEn = new Map ([ [":2s", "-t’en"], [":1p", "-nous-en"], [":2p", "-vous-en"] ]); const _dImpeProNegEn = new Map ([ [":2s", "ne t’en "], [":1p", "ne nous en "], [":2p", "ne vous en "] ]); const _dGroup = new Map ([ ["0", "auxiliaire"], ["1", "1ᵉʳ groupe"], ["2", "2ᵉ groupe"], ["3", "3ᵉ groupe"] ]); const _dTenseIdx = new Map ([ [":PQ", 0], [":Ip", 1], [":Iq", 2], [":Is", 3], [":If", 4], [":K", 5], [":Sp", 6], [":Sq", 7], [":E", 8] ]); function isVerb (sVerb) { return _dVerb.hasOwnProperty(sVerb); } function getConj (sVerb, sTense, sWho) { // returns conjugation (can be an empty string) if (!_dVerb.hasOwnProperty(sVerb)) { return null; } if (!_dPatternConj[sTense][_lTags[_dVerb[sVerb][1]][_dTenseIdx.get(sTense)]].hasOwnProperty(sWho)) { return ""; } return _modifyStringWithSuffixCode(sVerb, _dPatternConj[sTense][_lTags[_dVerb[sVerb][1]][_dTenseIdx.get(sTense)]][sWho]); } function hasConj (sVerb, sTense, sWho) { // returns false if no conjugation (also if empty) else true if (!_dVerb.hasOwnProperty(sVerb)) { return false; } if (_dPatternConj[sTense][_lTags[_dVerb[sVerb][1]][_dTenseIdx.get(sTense)]].hasOwnProperty(sWho) && _dPatternConj[sTense][_lTags[_dVerb[sVerb][1]][_dTenseIdx.get(sTense)]][sWho]) { return true; } return false; } function getVtyp (sVerb) { // returns raw informations about sVerb if (!_dVerb.hasOwnProperty(sVerb)) { return null; } return _lVtyp[_dVerb[sVerb][0]]; } function getSimil (sWord, sMorph) { if (!sMorph.includes(":V")) { return new Set(); } let sInfi = sMorph.slice(1, sMorph.indexOf(" ")); let tTags = _getTags(sInfi); let aSugg = new Set(); if (sMorph.includes(":Q")) { // we suggest conjugated forms if (sMorph.includes(":V1")) { aSugg.add(sInfi); aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":3s")); aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":2p")); aSugg.add(_getConjWithTags(sInfi, tTags, ":Iq", ":1s")); aSugg.add(_getConjWithTags(sInfi, tTags, ":Iq", ":3s")); aSugg.add(_getConjWithTags(sInfi, tTags, ":Iq", ":3p")); } else if (sMorph.includes(":V2")) { aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":1s")); aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":3s")); } else if (sMorph.includes(":V3")) { aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":1s")); aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":3s")); aSugg.add(_getConjWithTags(sInfi, tTags, ":Is", ":1s")); aSugg.add(_getConjWithTags(sInfi, tTags, ":Is", ":3s")); } else if (isMorph.includes(":V0a")) { aSugg.add("eus"); aSugg.add("eut"); } else { aSugg.add("étais"); aSugg.add("était"); } aSugg.delete(""); } else { // we suggest past participles aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q1")); aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q2")); aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q3")); aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q4")); aSugg.delete(""); // if there is only one past participle (epi inv), unreliable. if (aSugg.size === 1) { aSugg.clear(); } } return aSugg; } function _getTags (sVerb) { // returns tuple of tags (usable with functions _getConjWithTags and _hasConjWithTags) if (!_dVerb.hasOwnProperty(sVerb)) { return null; } return _lTags[_dVerb[sVerb][1]]; } function _getConjWithTags (sVerb, tTags, sTense, sWho) { // returns conjugation (can be an empty string) if (!_dPatternConj[sTense][tTags[_dTenseIdx.get(sTense)]].hasOwnProperty(sWho)) { return ""; } return _modifyStringWithSuffixCode(sVerb, _dPatternConj[sTense][tTags[_dTenseIdx.get(sTense)]][sWho]); } function _hasConjWithTags (tTags, sTense, sWho) { // returns false if no conjugation (also if empty) else true if (_dPatternConj[sTense][tTags[_dTenseIdx.get(sTense)]].hasOwnProperty(sWho) && _dPatternConj[sTense][tTags[_dTenseIdx.get(sTense)]][sWho]) { return true; } return false; } function _modifyStringWithSuffixCode (sWord, sSfx) { // returns sWord modified by sSfx if (sSfx === "") { return ""; } if (sSfx === "0") { return sWord; } try { if (sSfx[0] !== '0') { return sWord.slice(0, -(sSfx.charCodeAt(0)-48)) + sSfx.slice(1); // 48 is the ASCII code for "0" } else { return sWord + sSfx.slice(1); } } catch (e) { console.log(e); return "## erreur, code : " + sSfx + " ##"; } } class Verb { constructor (sVerb) { if (typeof sVerb !== "string" || sVerb === "") { throw new TypeError ("The value should be a non-empty string"); } this.sVerb = sVerb; this.sVerbAux = ""; this._sRawInfo = getVtyp(this.sVerb); this.sInfo = this._readableInfo(this._sRawInfo); this._tTags = _getTags(sVerb); this._tTagsAux = _getTags(this.sVerbAux); this.bProWithEn = (this._sRawInfo[5] === "e"); this.dConj = new Map ([ [":Y", new Map ([ ["label", "Infinitif"], [":Y", sVerb] ])], [":PQ", new Map ([ ["label", "Participes passés et présent"], [":Q1", _getConjWithTags(sVerb, this._tTags, ":PQ", ":Q1")], [":Q2", _getConjWithTags(sVerb, this._tTags, ":PQ", ":Q2")], [":Q3", _getConjWithTags(sVerb, this._tTags, ":PQ", ":Q3")], [":Q4", _getConjWithTags(sVerb, this._tTags, ":PQ", ":Q4")], [":P", _getConjWithTags(sVerb, this._tTags, ":PQ", ":P")] ])], [":Ip", new Map ([ ["label", "Présent"], [":1s", _getConjWithTags(sVerb, this._tTags, ":Ip", ":1s")], [":1ś", _getConjWithTags(sVerb, this._tTags, ":Ip", ":1ś")], [":2s", _getConjWithTags(sVerb, this._tTags, ":Ip", ":2s")], [":3s", _getConjWithTags(sVerb, this._tTags, ":Ip", ":3s")], [":1p", _getConjWithTags(sVerb, this._tTags, ":Ip", ":1p")], [":2p", _getConjWithTags(sVerb, this._tTags, ":Ip", ":2p")], [":3p", _getConjWithTags(sVerb, this._tTags, ":Ip", ":3p")] ])], [":Iq", new Map ([ ["label", "Imparfait"], [":1s", _getConjWithTags(sVerb, this._tTags, ":Iq", ":1s")], [":2s", _getConjWithTags(sVerb, this._tTags, ":Iq", ":2s")], [":3s", _getConjWithTags(sVerb, this._tTags, ":Iq", ":3s")], [":1p", _getConjWithTags(sVerb, this._tTags, ":Iq", ":1p")], [":2p", _getConjWithTags(sVerb, this._tTags, ":Iq", ":2p")], [":3p", _getConjWithTags(sVerb, this._tTags, ":Iq", ":3p")] ])], [":Is", new Map ([ ["label", "Passé simple"], [":1s", _getConjWithTags(sVerb, this._tTags, ":Is", ":1s")], [":2s", _getConjWithTags(sVerb, this._tTags, ":Is", ":2s")], [":3s", _getConjWithTags(sVerb, this._tTags, ":Is", ":3s")], [":1p", _getConjWithTags(sVerb, this._tTags, ":Is", ":1p")], [":2p", _getConjWithTags(sVerb, this._tTags, ":Is", ":2p")], [":3p", _getConjWithTags(sVerb, this._tTags, ":Is", ":3p")] ])], [":If", new Map ([ ["label", "Futur"], [":1s", _getConjWithTags(sVerb, this._tTags, ":If", ":1s")], [":2s", _getConjWithTags(sVerb, this._tTags, ":If", ":2s")], [":3s", _getConjWithTags(sVerb, this._tTags, ":If", ":3s")], [":1p", _getConjWithTags(sVerb, this._tTags, ":If", ":1p")], [":2p", _getConjWithTags(sVerb, this._tTags, ":If", ":2p")], [":3p", _getConjWithTags(sVerb, this._tTags, ":If", ":3p")] ])], [":Sp", new Map ([ ["label", "Présent subjonctif"], [":1s", _getConjWithTags(sVerb, this._tTags, ":Sp", ":1s")], [":1ś", _getConjWithTags(sVerb, this._tTags, ":Sp", ":1ś")], [":2s", _getConjWithTags(sVerb, this._tTags, ":Sp", ":2s")], [":3s", _getConjWithTags(sVerb, this._tTags, ":Sp", ":3s")], [":1p", _getConjWithTags(sVerb, this._tTags, ":Sp", ":1p")], [":2p", _getConjWithTags(sVerb, this._tTags, ":Sp", ":2p")], [":3p", _getConjWithTags(sVerb, this._tTags, ":Sp", ":3p")] ])], [":Sq", new Map ([ ["label", "Imparfait subjonctif"], [":1s", _getConjWithTags(sVerb, this._tTags, ":Sq", ":1s")], [":1ś", _getConjWithTags(sVerb, this._tTags, ":Sq", ":1ś")], [":2s", _getConjWithTags(sVerb, this._tTags, ":Sq", ":2s")], [":3s", _getConjWithTags(sVerb, this._tTags, ":Sq", ":3s")], [":1p", _getConjWithTags(sVerb, this._tTags, ":Sq", ":1p")], [":2p", _getConjWithTags(sVerb, this._tTags, ":Sq", ":2p")], [":3p", _getConjWithTags(sVerb, this._tTags, ":Sq", ":3p")] ])], [":K", new Map ([ ["label", "Conditionnel"], [":1s", _getConjWithTags(sVerb, this._tTags, ":K", ":1s")], [":2s", _getConjWithTags(sVerb, this._tTags, ":K", ":2s")], [":3s", _getConjWithTags(sVerb, this._tTags, ":K", ":3s")], [":1p", _getConjWithTags(sVerb, this._tTags, ":K", ":1p")], [":2p", _getConjWithTags(sVerb, this._tTags, ":K", ":2p")], [":3p", _getConjWithTags(sVerb, this._tTags, ":K", ":3p")] ])], [":E", new Map ([ ["label", "Impératif"], [":2s", _getConjWithTags(sVerb, this._tTags, ":E", ":2s")], [":1p", _getConjWithTags(sVerb, this._tTags, ":E", ":1p")], [":2p", _getConjWithTags(sVerb, this._tTags, ":E", ":2p")] ])] ]); }; _readableInfo () { // returns readable infos this.sVerbAux = (this._sRawInfo.slice(7,8) == "e") ? "être" : "avoir"; let sGroup = _dGroup.get(this._sRawInfo[0]); let s = ""; if (this._sRawInfo.slice(3,4) == "t") { s = "transitif"; } else if (this._sRawInfo.slice(4,5) == "n") { s = "transitif indirect"; } else if (this._sRawInfo.slice(2,3) == "i") { s = "intransitif"; } else if (this._sRawInfo.slice(5,6) == "r") { s = "pronominal réciproque"; } else if (this._sRawInfo.slice(5,6) == "p") { s = "pronominal"; } if (this._sRawInfo.slice(5,6) == "q" || this._sRawInfo.slice(5,6) == "e") { s = s + " (+ usage pronominal)"; } if (this._sRawInfo.slice(6,7) == "m") { s = s + " impersonnel"; } if (s === "") { s = "# erreur - code : " + this._sRawInfo; } return sGroup + " · " + s; }; infinitif (bPro, bNeg, bTpsCo, bInt, bFem) { let sInfi; if (bTpsCo) { sInfi = (bPro) ? "être" : this.sVerbAux; } else { sInfi = this.sVerb; } if (bPro) { if (this.bProWithEn) { sInfi = "s’en " + sInfi; } else { sInfi = (_zStartVoy.test(sInfi)) ? "s’" + sInfi : "se " + sInfi; } } if (bNeg) { sInfi = "ne pas " + sInfi; } if (bTpsCo) { sInfi += " " + this._seekPpas(bPro, bFem, (this._sRawInfo[5] == "r")); } if (bInt) { sInfi += " … ?"; } return sInfi; }; participePasse (sWho) { return this.dConj.get(":PQ").get(sWho); }; participePresent (bPro, bNeg, bTpsCo, bInt, bFem) { if (!this.dConj.get(":PQ").get(":P")) { return ""; } let s; if (bTpsCo) { s = (!bPro) ? _getConjWithTags(this.sVerbAux, this._tTagsAux, ":PQ", ":P") : getConj("être", ":PQ", ":P"); } else { s = this.dConj.get(":PQ").get(":P"); } if (s === "") { return ""; } let bEli = _zStartVoy.test(s); if (bPro) { if (this.bProWithEn) { s = "s’en " + s; } else { s = (bEli) ? "s’" + s : "se " + s; } } if (bNeg) { s = (bEli && !bPro) ? "n’" + s + " pas" : "ne " + s + " pas"; } if (bTpsCo) { s += " " + this._seekPpas(bPro, bFem, this._sRawInfo[5] == "r"); } if (bInt) { s += " … ?"; } return s; }; conjugue (sTemps, sWho, bPro, bNeg, bTpsCo, bInt, bFem) { if (!this.dConj.get(sTemps).get(sWho)) { return ""; } let s; if (!bTpsCo && bInt && sWho == ":1s" && this.dConj.get(sTemps)._get(":1ś", false)) { sWho = ":1ś"; } if (bTpsCo) { s = (!bPro) ? _getConjWithTags(this.sVerbAux, this._tTagsAux, sTemps, sWho) : getConj("être", sTemps, sWho); } else { s = this.dConj.get(sTemps).get(sWho); } if (s === "") { return ""; } let bEli = _zStartVoy.test(s); if (bPro) { if (!this.bProWithEn) { s = (bEli) ? _dProObjEl.get(sWho) + s : _dProObj.get(sWho) + s; } else { s = _dProObjEl.get(sWho) + "en " + s; } } if (bNeg) { s = (bEli && !bPro) ? "n’" + s : "ne " + s; } if (bInt) { if (sWho == ":3s" && !_zNeedTeuph.test(s)) { s += "-t"; } s += "-" + this._getPronom(sWho, bFem); } else { if (sWho == ":1s" && bEli && !bNeg && !bPro) { s = "j’" + s; } else { s = this._getPronom(sWho, bFem) + " " + s; } } if (bNeg) { s += " pas"; } if (bTpsCo) { s += " " + this._seekPpas(bPro, bFem, sWho.endsWith("p") || this._sRawInfo[5] == "r"); } if (bInt) { s += " … ?"; } return s; }; _getPronom (sWho, bFem) { if (sWho == ":3s") { if (this._sRawInfo[5] == "r") { return "on"; } else if (bFem) { return "elle"; } } else if (sWho == ":3p" && bFem) { return "elles"; } return _dProSuj.get(sWho); }; imperatif (sWho, bPro, bNeg, bTpsCo, bFem) { if (!this.dConj.get(":E").get(sWho)) { return ""; } let s; if (bTpsCo) { s = (!bPro) ? _getConjWithTags(this.sVerbAux, this._tTagsAux, ":E", sWho) : getConj("être", ":E", sWho); } else { s = this.dConj.get(":E").get(sWho); } if (s === "") { return ""; } let bEli = _zStartVoy.test(s); if (bNeg) { if (bPro) { if (!this.bProWithEn) { s = (bEli && sWho == ":2s") ? "ne t’" + s + " pas" : _dImpeProNeg.get(sWho) + s + " pas"; } else { s = _dImpeProNegEn.get(sWho) + s + " pas"; } } else { s = (bEli) ? "n’" + s + " pas" : "ne " + s + " pas"; } } else if (bPro) { s = (this.bProWithEn) ? s + _dImpeProEn.get(sWho) : s + _dImpePro.get(sWho); } if (bTpsCo) { return s + " " + this._seekPpas(bPro, bFem, sWho.endsWith("p") || this._sRawInfo[5] == "r"); } return s; }; _seekPpas (bPro, bFem, bPlur) { if (!bPro && this.sVerbAux == "avoir") { return this.dConj.get(":PQ").get(":Q1"); } if (!bFem) { return (bPlur && this.dConj.get(":PQ").get(":Q2")) ? this.dConj.get(":PQ").get(":Q2") : this.dConj.get(":PQ").get(":Q1"); } if (!bPlur) { return (this.dConj.get(":PQ").get(":Q3")) ? this.dConj.get(":PQ").get(":Q3") : this.dConj.get(":PQ").get(":Q1"); } return (this.dConj.get(":PQ").get(":Q4")) ? this.dConj.get(":PQ").get(":Q4") : this.dConj.get(":PQ").get(":Q1"); } } if (typeof(exports) !== 'undefined') { // Used for Grammalecte library. // In content scripts, these variable are directly reachable exports.Verb = Verb; exports.isVerb = isVerb; exports.getConj = getConj; exports.hasConj = hasConj; exports.getVtyp = getVtyp; exports.getSimil = getSimil; exports._getTags = _getTags; exports._hasConjWithTags = _hasConjWithTags; exports._getConjWithTags = _getConjWithTags; } |
Added gc_lang/fr/modules-js/conj_data.json version [bf341c4d60].
cannot compute difference between binary files
Added gc_lang/fr/modules-js/cregex.js version [eb814cc494].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 | //// Grammalecte - Compiled regular expressions ///// Lemme const zLemma = new RegExp("^>([a-zà-öø-ÿ0-9Ā-ʯ][a-zà-öø-ÿ0-9Ā-ʯ-]+)"); ///// Masculin / féminin / singulier / pluriel const zGender = new RegExp(":[mfe]"); const zNumber = new RegExp(":[spi]"); ///// Nom et adjectif const zNA = new RegExp(":[NA]"); //// nombre const zNAs = new RegExp(":[NA].*:s"); const zNAp = new RegExp(":[NA].*:p"); const zNAi = new RegExp(":[NA].*:i"); const zNAsi = new RegExp(":[NA].*:[si]"); const zNApi = new RegExp(":[NA].*:[pi]"); //// genre const zNAm = new RegExp(":[NA].*:m"); const zNAf = new RegExp(":[NA].*:f"); const zNAe = new RegExp(":[NA].*:e"); const zNAme = new RegExp(":[NA].*:[me]"); const zNAfe = new RegExp(":[NA].*:[fe]"); //// nombre et genre // singuilier const zNAms = new RegExp(":[NA].*:m.*:s"); const zNAfs = new RegExp(":[NA].*:f.*:s"); const zNAes = new RegExp(":[NA].*:e.*:s"); const zNAmes = new RegExp(":[NA].*:[me].*:s"); const zNAfes = new RegExp(":[NA].*:[fe].*:s"); // singulier et invariable const zNAmsi = new RegExp(":[NA].*:m.*:[si]"); const zNAfsi = new RegExp(":[NA].*:f.*:[si]"); const zNAesi = new RegExp(":[NA].*:e.*:[si]"); const zNAmesi = new RegExp(":[NA].*:[me].*:[si]"); const zNAfesi = new RegExp(":[NA].*:[fe].*:[si]"); // pluriel const zNAmp = new RegExp(":[NA].*:m.*:p"); const zNAfp = new RegExp(":[NA].*:f.*:p"); const zNAep = new RegExp(":[NA].*:e.*:p"); const zNAmep = new RegExp(":[NA].*:[me].*:p"); const zNAfep = new RegExp(":[NA].*:[me].*:p"); // pluriel et invariable const zNAmpi = new RegExp(":[NA].*:m.*:[pi]"); const zNAfpi = new RegExp(":[NA].*:f.*:[pi]"); const zNAepi = new RegExp(":[NA].*:e.*:[pi]"); const zNAmepi = new RegExp(":[NA].*:[me].*:[pi]"); const zNAfepi = new RegExp(":[NA].*:[fe].*:[pi]"); //// Divers const zAD = new RegExp(":[AB]"); ///// Verbe const zVconj = new RegExp(":[123][sp]"); const zVconj123 = new RegExp(":V[123].*:[123][sp]"); ///// Nom | Adjectif | Verbe const zNVconj = new RegExp(":(?:N|[123][sp])"); const zNAVconj = new RegExp(":(?:N|A|[123][sp])"); ///// Spécifique const zNnotA = new RegExp(":N(?!:A)"); const zPNnotA = new RegExp(":(?:N(?!:A)|Q)"); ///// Noms propres const zNP = new RegExp(":(?:M[12P]|T)"); const zNPm = new RegExp(":(?:M[12P]|T):m"); const zNPf = new RegExp(":(?:M[12P]|T):f"); const zNPe = new RegExp(":(?:M[12P]|T):e"); ///// FONCTIONS function getLemmaOfMorph (sMorph) { return zLemma.exec(sMorph)[1]; } function checkAgreement (l1, l2) { // check number agreement if (!mbInv(l1) && !mbInv(l2)) { if (mbSg(l1) && !mbSg(l2)) { return false; } if (mbPl(l1) && !mbPl(l2)) { return false; } } // check gender agreement if (mbEpi(l1) || mbEpi(l2)) { return true; } if (mbMas(l1) && !mbMas(l2)) { return false; } if (mbFem(l1) && !mbFem(l2)) { return false; } return true; } function checkConjVerb (lMorph, sReqConj) { return lMorph.some(s => s.includes(sReqConj)); } function getGender (lMorph) { // returns gender of word (':m', ':f', ':e' or empty string). let sGender = ""; for (let sMorph of lMorph) { let m = zGender.exec(sMorph); if (m) { if (!sGender) { sGender = m[0]; } else if (sGender != m[0]) { return ":e"; } } } return sGender; } function getNumber (lMorph) { // returns number of word (':s', ':p', ':i' or empty string). let sNumber = ""; for (let sMorph of lMorph) { let m = zNumber.exec(sWord); if (m) { if (!sNumber) { sNumber = m[0]; } else if (sNumber != m[0]) { return ":i"; } } } return sNumber; } // NOTE : isWhat (lMorph) returns true if lMorph contains nothing else than What // mbWhat (lMorph) returns true if lMorph contains What at least once //// isXXX = it’s certain function isNom (lMorph) { return lMorph.every(s => s.includes(":N")); } function isNomNotAdj (lMorph) { return lMorph.every(s => zNnotA.test(s)); } function isAdj (lMorph) { return lMorph.every(s => s.includes(":A")); } function isNomAdj (lMorph) { return lMorph.every(s => zNA.test(s)); } function isNomVconj (lMorph) { return lMorph.every(s => zNVconj.test(s)); } function isInv (lMorph) { return lMorph.every(s => s.includes(":i")); } function isSg (lMorph) { return lMorph.every(s => s.includes(":s")); } function isPl (lMorph) { return lMorph.every(s => s.includes(":p")); } function isEpi (lMorph) { return lMorph.every(s => s.includes(":e")); } function isMas (lMorph) { return lMorph.every(s => s.includes(":m")); } function isFem (lMorph) { return lMorph.every(s => s.includes(":f")); } //// mbXXX = MAYBE XXX function mbNom (lMorph) { return lMorph.some(s => s.includes(":N")); } function mbAdj (lMorph) { return lMorph.some(s => s.includes(":A")); } function mbAdjNb (lMorph) { return lMorph.some(s => zAD.test(s)); } function mbNomAdj (lMorph) { return lMorph.some(s => zNA.test(s)); } function mbNomNotAdj (lMorph) { let b = false; for (let s of lMorph) { if (s.includes(":A")) { return false; } if (s.includes(":N")) { b = true; } } return b; } function mbPpasNomNotAdj (lMorph) { return lMorph.some(s => zPNnotA.test(s)); } function mbVconj (lMorph) { return lMorph.some(s => zVconj.test(s)); } function mbVconj123 (lMorph) { return lMorph.some(s => zVconj123.test(s)); } function mbMG (lMorph) { return lMorph.some(s => s.includes(":G")); } function mbInv (lMorph) { return lMorph.some(s => s.includes(":i")); } function mbSg (lMorph) { return lMorph.some(s => s.includes(":s")); } function mbPl (lMorph) { return lMorph.some(s => s.includes(":p")); } function mbEpi (lMorph) { return lMorph.some(s => s.includes(":e")); } function mbMas (lMorph) { return lMorph.some(s => s.includes(":m")); } function mbFem (lMorph) { return lMorph.some(s => s.includes(":f")); } function mbNpr (lMorph) { return lMorph.some(s => zNP.test(s)); } function mbNprMasNotFem (lMorph) { if (lMorph.some(s => zNPf.test(s))) { return false; } return lMorph.some(s => zNPm.test(s)); } exports.getLemmaOfMorph = getLemmaOfMorph; exports.checkAgreement = checkAgreement; exports.checkConjVerb = checkConjVerb; exports.getGender = getGender; exports.getNumber = getNumber; exports.isNom = isNom; exports.isNomNotAdj = isNomNotAdj; exports.isAdj = isAdj; exports.isNomAdj = isNomAdj; exports.isNomVconj = isNomVconj; exports.isInv = isInv; exports.isSg = isSg; exports.isPl = isPl; exports.isEpi = isEpi; exports.isMas = isMas; exports.isFem = isFem; exports.mbNom = mbNom; exports.mbAdj = mbAdj; exports.mbAdjNb = mbAdjNb; exports.mbNomAdj = mbNomAdj; exports.mbNomNotAdj = mbNomNotAdj; exports.mbPpasNomNotAdj = mbPpasNomNotAdj; exports.mbVconj = mbVconj; exports.mbVconj123 = mbVconj123; exports.mbMG = mbMG; exports.mbInv = mbInv; exports.mbSg = mbSg; exports.mbPl = mbPl; exports.mbEpi = mbEpi; exports.mbMas = mbMas; exports.mbFem = mbFem; exports.mbNpr = mbNpr; exports.mbNprMasNotFem = mbNprMasNotFem; |
Added gc_lang/fr/modules-js/gce_analyseur.js version [7588af7481].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 | //// GRAMMAR CHECKING ENGINE PLUGIN: Parsing functions for French language function rewriteSubject (s1, s2) { // s1 is supposed to be prn/patr/npr (M[12P]) if (s2 == "lui") { return "ils"; } if (s2 == "moi") { return "nous"; } if (s2 == "toi") { return "vous"; } if (s2 == "nous") { return "nous"; } if (s2 == "vous") { return "vous"; } if (s2 == "eux") { return "ils"; } if (s2 == "elle" || s2 == "elles") { // We don’t check if word exists in _dAnalyses, for it is assumed it has been done before if (cr.mbNprMasNotFem(_dAnalyses._get(s1, ""))) { return "ils"; } // si épicène, indéterminable, mais OSEF, le féminin l’emporte return "elles"; } return s1 + " et " + s2; } function apposition (sWord1, sWord2) { // returns true if nom + nom (no agreement required) // We don’t check if word exists in _dAnalyses, for it is assumed it has been done before return cr.mbNomNotAdj(_dAnalyses._get(sWord2, "")) && cr.mbPpasNomNotAdj(_dAnalyses._get(sWord1, "")); } function isAmbiguousNAV (sWord) { // words which are nom|adj and verb are ambiguous (except être and avoir) if (!_dAnalyses.has(sWord) && !_storeMorphFromFSA(sWord)) { return false; } if (!cr.mbNomAdj(_dAnalyses._get(sWord, "")) || sWord == "est") { return false; } if (cr.mbVconj(_dAnalyses._get(sWord, "")) && !cr.mbMG(_dAnalyses._get(sWord, ""))) { return true; } return false; } function isAmbiguousAndWrong (sWord1, sWord2, sReqMorphNA, sReqMorphConj) { //// use it if sWord1 won’t be a verb; word2 is assumed to be true via isAmbiguousNAV // We don’t check if word exists in _dAnalyses, for it is assumed it has been done before let a2 = _dAnalyses._get(sWord2, null); if (!a2 || a2.length === 0) { return false; } if (cr.checkConjVerb(a2, sReqMorphConj)) { // verb word2 is ok return false; } let a1 = _dAnalyses._get(sWord1, null); if (!a1 || a1.length === 0) { return false; } if (cr.checkAgreement(a1, a2) && (cr.mbAdj(a2) || cr.mbAdj(a1))) { return false; } return true; } function isVeryAmbiguousAndWrong (sWord1, sWord2, sReqMorphNA, sReqMorphConj, bLastHopeCond) { //// use it if sWord1 can be also a verb; word2 is assumed to be true via isAmbiguousNAV // We don’t check if word exists in _dAnalyses, for it is assumed it has been done before let a2 = _dAnalyses._get(sWord2, null) if (!a2 || a2.length === 0) { return false; } if (cr.checkConjVerb(a2, sReqMorphConj)) { // verb word2 is ok return false; } let a1 = _dAnalyses._get(sWord1, null); if (!a1 || a1.length === 0) { return false; } if (cr.checkAgreement(a1, a2) && (cr.mbAdj(a2) || cr.mbAdjNb(a1))) { return false; } // now, we know there no agreement, and conjugation is also wrong if (cr.isNomAdj(a1)) { return true; } //if cr.isNomAdjVerb(a1): # considered true if (bLastHopeCond) { return true; } return false; } function checkAgreement (sWord1, sWord2) { // We don’t check if word exists in _dAnalyses, for it is assumed it has been done before let a2 = _dAnalyses._get(sWord2, null) if (!a2 || a2.length === 0) { return true; } let a1 = _dAnalyses._get(sWord1, null); if (!a1 || a1.length === 0) { return true; } return cr.checkAgreement(a1, a2); } function mbUnit (s) { if (/[µ\/⁰¹²³⁴⁵⁶⁷⁸⁹Ωℓ·]/.test(s)) { return true; } if (s.length > 1 && s.length < 16 && s.slice(0, 1)._isLowerCase() && (!s.slice(1)._isLowerCase() || /[0-9]/.test(s))) { return true; } return false; } //// Syntagmes const _zEndOfNG1 = new RegExp ("^ *$|^ +(?:, +|)(?:n(?:’|e |o(?:u?s|tre) )|l(?:’|e(?:urs?|s|) |a )|j(?:’|e )|m(?:’|es? |a |on )|t(?:’|es? |a |u )|s(?:’|es? |a )|c(?:’|e(?:t|tte|s|) )|ç(?:a |’)|ils? |vo(?:u?s|tre) )"); const _zEndOfNG2 = new RegExp ("^ +([a-zà-öA-Zø-ÿÀ-Ö0-9_Ø-ßĀ-ʯ][a-zà-öA-Zø-ÿÀ-Ö0-9_Ø-ßĀ-ʯ-]+)"); const _zEndOfNG3 = new RegExp ("^ *, +([a-zà-öA-Zø-ÿÀ-Ö0-9_Ø-ßĀ-ʯ][a-zà-öA-Zø-ÿÀ-Ö0-9_Ø-ßĀ-ʯ-]+)"); function isEndOfNG (dDA, s, iOffset) { if (_zEndOfNG1.test(s)) { return true; } let m = _zEndOfNG2._exec2(s, ["$"]); if (m && morphex(dDA, [iOffset+m.start[1], m[1]], ":[VR]", ":[NAQP]")) { return true; } m = _zEndOfNG3._exec2(s, ["$"]); if (m && !morph(dDA, [iOffset+m.start[1], m[1]], ":[NA]", false)) { return true; } return false; } const _zNextIsNotCOD1 = new RegExp ("^ *,"); const _zNextIsNotCOD2 = new RegExp ("^ +(?:[mtsnj](e +|’)|[nv]ous |tu |ils? |elles? )"); const _zNextIsNotCOD3 = new RegExp ("^ +([a-zéèî][a-zà-öA-Zø-ÿÀ-ÖØ-ßĀ-ʯ-]+)"); function isNextNotCOD (dDA, s, iOffset) { if (_zNextIsNotCOD1.test(s) || _zNextIsNotCOD2.test(s)) { return true; } let m = _zNextIsNotCOD3._exec2(s, ["$"]); if (m && morphex(dDA, [iOffset+m.start[1], m[1]], ":[123][sp]", ":[DM]")) { return true; } return false; } const _zNextIsVerb1 = new RegExp ("^ +[nmts](?:e |’)"); const _zNextIsVerb2 = new RegExp ("^ +([a-zà-öA-Zø-ÿÀ-Ö0-9_Ø-ßĀ-ʯ][a-zà-öA-Zø-ÿÀ-Ö0-9_Ø-ßĀ-ʯ-]+)"); function isNextVerb (dDA, s, iOffset) { if (_zNextIsVerb1.test(s)) { return true; } let m = _zNextIsVerb2._exec2(s, ["$"]); if (m && morph(dDA, [iOffset+m.start[1], m[1]], ":[123][sp]", false)) { return true; } return false; } //// Exceptions const aREGULARPLURAL = new Set(["abricot", "amarante", "aubergine", "acajou", "anthracite", "brique", "caca", "café", "carotte", "cerise", "chataigne", "corail", "citron", "crème", "grave", "groseille", "jonquille", "marron", "olive", "pervenche", "prune", "sable"]); const aSHOULDBEVERB = new Set(["aller", "manger"]); |
Added gc_lang/fr/modules-js/gce_date_verif.js version [de4d3b5e04].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | //// GRAMMAR CHECKING ENGINE PLUGIN // Check date validity // WARNING: when creating a Date, month must be between 0 and 11 const _lDay = ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"]; const _dMonth = new Map ([ ["janvier", 1], ["février", 2], ["mars", 3], ["avril", 4], ["mai", 5], ["juin", 6], ["juillet", 7], ["août", 8], ["aout", 8], ["septembre", 9], ["octobre", 10], ["novembre", 11], ["décembre", 12] ]); const _dDaysInMonth = new Map ([ [1, 31], [2, 28], [3, 31], [4, 30], [5, 31], [6, 30], [7, 31], [8, 31], [8, 31], [9, 30], [10, 31], [11, 30], [12, 31] ]); function _checkDate (nDay, nMonth, nYear) { // returns true or false if (nMonth > 12 || nMonth < 1 || nDay > 31 || nDay < 1) { return false; } if (nDay <= _dDaysInMonth.get(nMonth)) { return true; } if (nDay === 29) { // leap years, http://jsperf.com/ily/15 return !(nYear & 3 || !(nYear % 25) && nYear & 15); } return false; } function checkDate (sDay, sMonth, sYear) { // to use if sMonth is a number return _checkDate(parseInt(sDay, 10), parseInt(sMonth, 10), parseInt(sYear, 10)); } function checkDateWithString (sDay, sMonth, sYear) { // to use if sMonth is a noun return _checkDate(parseInt(sDay, 10), _dMonth.get(sMonth.toLowerCase()), parseInt(sYear, 10)); } function checkDay (sWeekday, sDay, sMonth, sYear) { // to use if sMonth is a number if (checkDate(sDay, sMonth, sYear)) { let oDate = new Date(parseInt(sYear, 10), parseInt(sMonth, 10)-1, parseInt(sDay, 10)); if (_lDay[oDate.getDay()] != sWeekday.toLowerCase()) { return false; } return true; } return false; } function checkDayWithString (sWeekday, sDay, sMonth, sYear) { // to use if sMonth is a noun if (checkDateWithString(sDay, sMonth, sYear)) { let oDate = new Date(parseInt(sYear, 10), _dMonth.get(sMonth.toLowerCase())-1, parseInt(sDay, 10)); if (_lDay[oDate.getDay()] != sWeekday.toLowerCase()) { return false; } return true; } return false; } function getDay (sDay, sMonth, sYear) { // to use if sMonth is a number let oDate = new Date(parseInt(sYear, 10), parseInt(sMonth, 10)-1, parseInt(sDay, 10)); return _lDay[oDate.getDay()]; } function getDayWithString (sDay, sMonth, sYear) { // to use if sMonth is a noun let oDate = new Date(parseInt(sYear, 10), _dMonth.get(sMonth.toLowerCase())-1, parseInt(sDay, 10)); return _lDay[oDate.getDay()]; } |
Added gc_lang/fr/modules-js/gce_suggestions.js version [66a9ce5ee4].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 | //// GRAMMAR CHECKING ENGINE PLUGIN: Suggestion mechanisms const conj = require("resource://grammalecte/fr/conj.js"); const mfsp = require("resource://grammalecte/fr/mfsp.js"); const phonet = require("resource://grammalecte/fr/phonet.js"); //// verbs function suggVerb (sFlex, sWho, funcSugg2=null) { // we don’t check if word exists in _dAnalyses, for it is assumed it has been done before let aSugg = new Set(); for (let sStem of stem(sFlex)) { let tTags = conj._getTags(sStem); if (tTags) { // we get the tense let aTense = new Set(); for (let sMorph of _dAnalyses._get(sFlex, [])) { let m; let zVerb = new RegExp (sStem+" .*?(:(?:Y|I[pqsf]|S[pq]|K))", "g"); while (m = zVerb.exec(sMorph)) { // stem must be used in regex to prevent confusion between different verbs (e.g. sauras has 2 stems: savoir and saurer) if (m) { if (m[1] === ":Y") { aTense.add(":Ip"); aTense.add(":Iq"); aTense.add(":Is"); } else if (m[1] === ":P") { aTense.add(":Ip"); } else { aTense.add(m[1]); } } } } for (let sTense of aTense) { if (sWho === ":1ś" && !conj._hasConjWithTags(tTags, sTense, ":1ś")) { sWho = ":1s"; } if (conj._hasConjWithTags(tTags, sTense, sWho)) { aSugg.add(conj._getConjWithTags(sStem, tTags, sTense, sWho)); } } } } if (funcSugg2) { let aSugg2 = funcSugg2(sFlex); if (aSugg2.size > 0) { aSugg.add(aSugg2); } } if (aSugg.size > 0) { return Array.from(aSugg).join("|"); } return ""; } function suggVerbPpas (sFlex, sWhat=null) { let aSugg = new Set(); for (let sStem of stem(sFlex)) { let tTags = conj._getTags(sStem); if (tTags) { if (!sWhat) { aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")); aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q2")); aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q3")); aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q4")); aSugg.delete(""); } else if (sWhat === ":m:s") { aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")); } else if (sWhat === ":m:p") { if (conj._hasConjWithTags(tTags, ":PQ", ":Q2")) { aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q2")); } else { aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")); } } else if (sWhat === ":f:s") { if (conj._hasConjWithTags(tTags, ":PQ", ":Q3")) { aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q3")); } else { aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")); } } else if (sWhat === ":f:p") { if (conj._hasConjWithTags(tTags, ":PQ", ":Q4")) { aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q4")); } else { aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")); } } else if (sWhat === ":s") { aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")); aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q3")); aSugg.delete(""); } else if (sWhat === ":p") { aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q2")); aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q4")); aSugg.delete(""); } else { aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")); } } } if (aSugg.size > 0) { return Array.from(aSugg).join("|"); } return ""; } function suggVerbTense (sFlex, sTense, sWho) { let aSugg = new Set(); for (let sStem of stem(sFlex)) { if (conj.hasConj(sStem, sTense, sWho)) { aSugg.add(conj.getConj(sStem, sTense, sWho)); } } if (aSugg.size > 0) { return Array.from(aSugg).join("|"); } return ""; } function suggVerbImpe (sFlex) { let aSugg = new Set(); for (let sStem of stem(sFlex)) { let tTags = conj._getTags(sStem); if (tTags) { if (conj._hasConjWithTags(tTags, ":E", ":2s")) { aSugg.add(conj._getConjWithTags(sStem, tTags, ":E", ":2s")); } if (conj._hasConjWithTags(tTags, ":E", ":1p")) { aSugg.add(conj._getConjWithTags(sStem, tTags, ":E", ":1p")); } if (conj._hasConjWithTags(tTags, ":E", ":2p")) { aSugg.add(conj._getConjWithTags(sStem, tTags, ":E", ":2p")); } } } if (aSugg.size > 0) { return Array.from(aSugg).join("|"); } return ""; } function suggVerbInfi (sFlex) { //return stem(sFlex).join("|"); return [ for (sStem of stem(sFlex)) if (conj.isVerb(sStem)) sStem ].join("|"); } const _dQuiEst = new Map ([ ["je", ":1s"], ["j’", ":1s"], ["j’en", ":1s"], ["j’y", ":1s"], ["tu", ":2s"], ["il", ":3s"], ["on", ":3s"], ["elle", ":3s"], ["nous", ":1p"], ["vous", ":2p"], ["ils", ":3p"], ["elles", ":3p"] ]); const _lIndicatif = [":Ip", ":Iq", ":Is", ":If"]; const _lSubjonctif = [":Sp", ":Sq"]; function suggVerbMode (sFlex, cMode, sSuj) { let lMode; if (cMode == ":I") { lMode = _lIndicatif; } else if (cMode == ":S") { lMode = _lSubjonctif; } else if (cMode.startsWith(":I") || cMode.startsWith(":S")) { lMode = [cMode]; } else { return ""; } let sWho = _dQuiEst._get(sSuj.toLowerCase(), null); if (!sWho) { if (sSuj[0]._isLowerCase()) { // pas un pronom, ni un nom propre return ""; } sWho = ":3s"; } let aSugg = new Set(); for (let sStem of stem(sFlex)) { let tTags = conj._getTags(sStem); if (tTags) { for (let sTense of lMode) { if (conj._hasConjWithTags(tTags, sTense, sWho)) { aSugg.add(conj._getConjWithTags(sStem, tTags, sTense, sWho)); } } } } if (aSugg.size > 0) { return Array.from(aSugg).join("|"); } return ""; } //// Nouns and adjectives function suggPlur (sFlex, sWordToAgree=null) { // returns plural forms assuming sFlex is singular if (sWordToAgree) { if (!_dAnalyses.has(sWordToAgree) && !_storeMorphFromFSA(sWordToAgree)) { return ""; } let sGender = cr.getGender(_dAnalyses._get(sWordToAgree, [])); if (sGender == ":m") { return suggMasPlur(sFlex); } else if (sGender == ":f") { return suggFemPlur(sFlex); } } let aSugg = new Set(); if (!sFlex.includes("-")) { if (sFlex.endsWith("l")) { if (sFlex.endsWith("al") && sFlex.length > 2 && _oDict.isValid(sFlex.slice(0,-1)+"ux")) { aSugg.add(sFlex.slice(0,-1)+"ux"); } if (sFlex.endsWith("ail") && sFlex.length > 3 && _oDict.isValid(sFlex.slice(0,-2)+"ux")) { aSugg.add(sFlex.slice(0,-2)+"ux"); } } if (_oDict.isValid(sFlex+"s")) { aSugg.add(sFlex+"s"); } if (_oDict.isValid(sFlex+"x")) { aSugg.add(sFlex+"x"); } } if (mfsp.hasMiscPlural(sFlex)) { mfsp.getMiscPlural(sFlex).forEach(function(x) { aSugg.add(x); }); } if (aSugg.size > 0) { return Array.from(aSugg).join("|"); } return ""; } function suggSing (sFlex) { // returns singular forms assuming sFlex is plural if (sFlex.includes("-")) { return ""; } let aSugg = new Set(); if (sFlex.endsWith("ux")) { if (_oDict.isValid(sFlex.slice(0,-2)+"l")) { aSugg.add(sFlex.slice(0,-2)+"l"); } if (_oDict.isValid(sFlex.slice(0,-2)+"il")) { aSugg.add(sFlex.slice(0,-2)+"il"); } } if (_oDict.isValid(sFlex.slice(0,-1))) { aSugg.add(sFlex.slice(0,-1)); } if (aSugg.size > 0) { return Array.from(aSugg).join("|"); } return ""; } function suggMasSing (sFlex, bSuggSimil=false) { // returns masculine singular forms // we don’t check if word exists in _dAnalyses, for it is assumed it has been done before let aSugg = new Set(); for (let sMorph of _dAnalyses._get(sFlex, [])) { if (!sMorph.includes(":V")) { // not a verb if (sMorph.includes(":m") || sMorph.includes(":e")) { aSugg.add(suggSing(sFlex)); } else { let sStem = cr.getLemmaOfMorph(sMorph); if (mfsp.isFemForm(sStem)) { mfsp.getMasForm(sStem, false).forEach(function(x) { aSugg.add(x); }); } } } else { // a verb let sVerb = cr.getLemmaOfMorph(sMorph); if (conj.hasConj(sVerb, ":PQ", ":Q1") && conj.hasConj(sVerb, ":PQ", ":Q3")) { // We also check if the verb has a feminine form. // If not, we consider it’s better to not suggest the masculine one, as it can be considered invariable. aSugg.add(conj.getConj(sVerb, ":PQ", ":Q1")); } } } if (bSuggSimil) { for (let e of phonet.selectSimil(sFlex, ":m:[si]")) { aSugg.add(e); } } if (aSugg.size > 0) { return Array.from(aSugg).join("|"); } return ""; } function suggMasPlur (sFlex, bSuggSimil=false) { // returns masculine plural forms // we don’t check if word exists in _dAnalyses, for it is assumed it has been done before let aSugg = new Set(); for (let sMorph of _dAnalyses._get(sFlex, [])) { if (!sMorph.includes(":V")) { // not a verb if (sMorph.includes(":m") || sMorph.includes(":e")) { aSugg.add(suggPlur(sFlex)); } else { let sStem = cr.getLemmaOfMorph(sMorph); if (mfsp.isFemForm(sStem)) { mfsp.getMasForm(sStem, true).forEach(function(x) { aSugg.add(x); }); } } } else { // a verb let sVerb = cr.getLemmaOfMorph(sMorph); if (conj.hasConj(sVerb, ":PQ", ":Q2")) { aSugg.add(conj.getConj(sVerb, ":PQ", ":Q2")); } else if (conj.hasConj(sVerb, ":PQ", ":Q1")) { let sSugg = conj.getConj(sVerb, ":PQ", ":Q1"); // it is necessary to filter these flexions, like “succédé” or “agi” that are not masculine plural if (sSugg.endsWith("s")) { aSugg.add(sSugg); } } } } if (bSuggSimil) { for (let e of phonet.selectSimil(sFlex, ":m:[pi]")) { aSugg.add(e); } } if (aSugg.size > 0) { return Array.from(aSugg).join("|"); } return ""; } function suggFemSing (sFlex, bSuggSimil=false) { // returns feminine singular forms // we don’t check if word exists in _dAnalyses, for it is assumed it has been done before let aSugg = new Set(); for (let sMorph of _dAnalyses._get(sFlex, [])) { if (!sMorph.includes(":V")) { // not a verb if (sMorph.includes(":f") || sMorph.includes(":e")) { aSugg.add(suggSing(sFlex)); } else { let sStem = cr.getLemmaOfMorph(sMorph); if (mfsp.isFemForm(sStem)) { aSugg.add(sStem); } } } else { // a verb let sVerb = cr.getLemmaOfMorph(sMorph); if (conj.hasConj(sVerb, ":PQ", ":Q3")) { aSugg.add(conj.getConj(sVerb, ":PQ", ":Q3")); } } } if (bSuggSimil) { for (let e of phonet.selectSimil(sFlex, ":f:[si]")) { aSugg.add(e); } } if (aSugg.size > 0) { return Array.from(aSugg).join("|"); } return ""; } function suggFemPlur (sFlex, bSuggSimil=false) { // returns feminine plural forms // we don’t check if word exists in _dAnalyses, for it is assumed it has been done before let aSugg = new Set(); for (let sMorph of _dAnalyses._get(sFlex, [])) { if (!sMorph.includes(":V")) { // not a verb if (sMorph.includes(":f") || sMorph.includes(":e")) { aSugg.add(suggPlur(sFlex)); } else { let sStem = cr.getLemmaOfMorph(sMorph); if (mfsp.isFemForm(sStem)) { aSugg.add(sStem+"s"); } } } else { // a verb let sVerb = cr.getLemmaOfMorph(sMorph); if (conj.hasConj(sVerb, ":PQ", ":Q4")) { aSugg.add(conj.getConj(sVerb, ":PQ", ":Q4")); } } } if (bSuggSimil) { for (let e of phonet.selectSimil(sFlex, ":f:[pi]")) { aSugg.add(e); } } if (aSugg.size > 0) { return Array.from(aSugg).join("|"); } return ""; } function hasFemForm (sFlex) { for (let sStem of stem(sFlex)) { if (mfsp.isFemForm(sStem) || conj.hasConj(sStem, ":PQ", ":Q3")) { return true; } } if (phonet.hasSimil(sFlex, ":f")) { return true; } return false; } function hasMasForm (sFlex) { for (let sStem of stem(sFlex)) { if (mfsp.isFemForm(sStem) || conj.hasConj(sStem, ":PQ", ":Q1")) { // what has a feminine form also has a masculine form return true; } } if (phonet.hasSimil(sFlex, ":m")) { return true; } return false; } function switchGender (sFlex, bPlur=null) { // we don’t check if word exists in _dAnalyses, for it is assumed it has been done before let aSugg = new Set(); if (bPlur === null) { for (let sMorph of _dAnalyses._get(sFlex, [])) { if (sMorph.includes(":f")) { if (sMorph.includes(":s")) { aSugg.add(suggMasSing(sFlex)); } else if (sMorph.includes(":p")) { aSugg.add(suggMasPlur(sFlex)); } } else if (sMorph.includes(":m")) { if (sMorph.includes(":s")) { aSugg.add(suggFemSing(sFlex)); } else if (sMorph.includes(":p")) { aSugg.add(suggFemPlur(sFlex)); } else { aSugg.add(suggFemSing(sFlex)); aSugg.add(suggFemPlur(sFlex)); } } } } else if (bPlur) { for (let sMorph of _dAnalyses._get(sFlex, [])) { if (sMorph.includes(":f")) { aSugg.add(suggMasPlur(sFlex)); } else if (sMorph.includes(":m")) { aSugg.add(suggFemPlur(sFlex)); } } } else { for (let sMorph of _dAnalyses._get(sFlex, [])) { if (sMorph.includes(":f")) { aSugg.add(suggMasSing(sFlex)); } else if (sMorph.includes(":m")) { aSugg.add(suggFemSing(sFlex)); } } } if (aSugg.size > 0) { return Array.from(aSugg).join("|"); } return ""; } function switchPlural (sFlex) { let aSugg = new Set(); for (let sMorph of _dAnalyses._get(sFlex, [])) { // we don’t check if word exists in _dAnalyses, for it is assumed it has been done before if (sMorph.includes(":s")) { aSugg.add(suggPlur(sFlex)); } else if (sMorph.includes(":p")) { aSugg.add(suggSing(sFlex)); } } if (aSugg.size > 0) { return Array.from(aSugg).join("|"); } return ""; } function hasSimil (sWord, sPattern=null) { return phonet.hasSimil(sWord, sPattern); } function suggSimil (sWord, sPattern) { // return list of words phonetically similar to sWord and whom POS is matching sPattern let aSugg = phonet.selectSimil(sWord, sPattern); for (let sMorph of _dAnalyses._get(sWord, [])) { for (let e of conj.getSimil(sWord, sMorph)) { aSugg.add(e); } } if (aSugg.size > 0) { return Array.from(aSugg).join("|"); } return ""; } function suggCeOrCet (sWord) { if (/^[aeéèêiouyâîï]/i.test(sWord)) { return "cet"; } if (sWord[0] == "h" || sWord[0] == "H") { return "ce|cet"; } return "ce"; } function suggLesLa (sWord) { // we don’t check if word exists in _dAnalyses, for it is assumed it has been done before if (_dAnalyses._get(sWord, []).some(s => s.includes(":p"))) { return "les|la"; } return "la"; } function formatNumber (s) { let nLen = s.length; if (nLen <= 4 ) { return s; } let sRes = ""; // nombre ordinaire let nEnd = nLen; while (nEnd > 0) { let nStart = Math.max(nEnd-3, 0); sRes = sRes ? s.slice(nStart, nEnd) + " " + sRes : sRes = s.slice(nStart, nEnd); nEnd = nEnd - 3; } // binaire if (/^[01]+$/.test(s)) { nEnd = nLen; let sBin = ""; while (nEnd > 0) { let nStart = Math.max(nEnd-4, 0); sBin = sBin ? s.slice(nStart, nEnd) + " " + sBin : sBin = s.slice(nStart, nEnd); nEnd = nEnd - 4; } sRes += "|" + sBin; } // numéros de téléphone if (nLen == 10) { if (s.startsWith("0")) { sRes += "|" + s.slice(0,2) + " " + s.slice(2,4) + " " + s.slice(4,6) + " " + s.slice(6,8) + " " + s.slice(8); // téléphone français if (s[1] == "4" && (s[2]=="7" || s[2]=="8" || s[2]=="9")) { sRes += "|" + s.slice(0,4) + " " + s.slice(4,6) + " " + s.slice(6,8) + " " + s.slice(8); // mobile belge } sRes += "|" + s.slice(0,3) + " " + s.slice(3,6) + " " + s.slice(6,8) + " " + s.slice(8); // téléphone suisse } sRes += "|" + s.slice(0,4) + " " + s.slice(4,7) + "-" + s.slice(7); // téléphone canadien ou américain } else if (nLen == 9 && s.startsWith("0")) { sRes += "|" + s.slice(0,3) + " " + s.slice(3,5) + " " + s.slice(5,7) + " " + s.slice(7,9); // fixe belge 1 sRes += "|" + s.slice(0,2) + " " + s.slice(2,5) + " " + s.slice(5,7) + " " + s.slice(7,9); // fixe belge 2 } return sRes; } function formatNF (s) { try { let m = /NF[ -]?(C|E|P|Q|S|X|Z|EN(?:[ -]ISO|))[ -]?([0-9]+(?:[\/‑-][0-9]+|))/i.exec(s); if (!m) { return ""; } return "NF " + m[1].toUpperCase().replace(/ /g, " ").replace(/-/g, " ") + " " + m[2].replace(/\//g, "‑").replace(/-/g, "‑"); } catch (e) { helpers.logerror(e); return "# erreur #"; } } function undoLigature (c) { if (c == "fi") { return "fi"; } else if (c == "fl") { return "fl"; } else if (c == "ff") { return "ff"; } else if (c == "ffi") { return "ffi"; } else if (c == "ffl") { return "ffl"; } else if (c == "ſt") { return "ft"; } else if (c == "st") { return "st"; } return "_"; } |
Added gc_lang/fr/modules-js/lexicographe.js version [7e54b6b49b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 | // Grammalecte - Lexicographe // License: MPL 2 "use strict"; ${string} const helpers = require("resource://grammalecte/helpers.js"); const _dTAGS = new Map ([ [':G', "[mot grammatical]"], [':N', " nom,"], [':A', " adjectif,"], [':M1', " prénom,"], [':M2', " patronyme,"], [':MP', " nom propre,"], [':W', " adverbe,"], [':X', " adverbe de négation,"], [':U', " adverbe interrogatif,"], [':J', " interjection,"], [':B', " nombre,"], [':T', " titre,"], [':R', " préposition,"], [':Rv', " préposition verbale,"], [':D', " déterminant,"], [':Dd', " déterminant démonstratif,"], [':De', " déterminant exclamatif,"], [':Dp', " déterminant possessif,"], [':Di', " déterminant indéfini,"], [':Dn', " déterminant négatif,"], [':Od', " pronom démonstratif,"], [':Oi', " pronom indéfini,"], [':On', " pronom indéfini négatif,"], [':Ot', " pronom interrogatif,"], [':Or', " pronom relatif,"], [':Ow', " pronom adverbial,"], [':Os', " pronom personnel sujet,"], [':Oo', " pronom personnel objet,"], [':C', " conjonction,"], [':Ĉ', " conjonction (él.),"], [':Cc', " conjonction de coordination,"], [':Cs', " conjonction de subordination,"], [':Ĉs', " conjonction de subordination (él.),"], [':Ŵ', " locution adverbiale (él.),"], [':Ñ', " locution nominale (él.),"], [':Â', " locution adjectivale (él.),"], [':Ṽ', " locution verbale (él.),"], [':Ŕ', " locution prépositive (él.),"], [':Ĵ', " locution interjective (él.),"], [':Zp', " préfixe,"], [':Zs', " suffixe,"], [':V1', " verbe (1ᵉʳ gr.),"], [':V2', " verbe (2ᵉ gr.),"], [':V3', " verbe (3ᵉ gr.),"], [':V0e', " verbe,"], [':V0a', " verbe,"], [':O1', " 1ʳᵉ pers.,"], [':O2', " 2ᵉ pers.,"], [':O3', " 3ᵉ pers.,"], [':e', " épicène"], [':m', " masculin"], [':f', " féminin"], [':s', " singulier"], [':p', " pluriel"], [':i', " invariable"], [':Y', " infinitif,"], [':P', " participe présent,"], [':Q', " participe passé,"], [':Ip', " présent,"], [':Iq', " imparfait,"], [':Is', " passé simple,"], [':If', " futur,"], [':K', " conditionnel présent,"], [':Sp', " subjonctif présent,"], [':Sq', " subjonctif imparfait,"], [':E', " impératif,"], [':1s', " 1ʳᵉ p. sg.,"], [':1ŝ', " présent interr. 1ʳᵉ p. sg.,"], [':1ś', " présent interr. 1ʳᵉ p. sg.,"], [':2s', " 2ᵉ p. sg.,"], [':3s', " 3ᵉ p. sg.,"], [':1p', " 1ʳᵉ p. pl.,"], [':2p', " 2ᵉ p. pl.,"], [':3p', " 3ᵉ p. pl.,"], [':3p!', " 3ᵉ p. pl.,"], [';S', " : symbole (unité de mesure)"], ['/*', ""], ['/C', " {classique}"], ['/M', ""], ['/R', " {réforme}"], ['/A', ""], ['/X', ""] ]); const _dPFX = new Map ([ ['d', "(de), déterminant épicène invariable"], ['l', "(le/la), déterminant masculin/féminin singulier"], ['j', "(je), pronom personnel sujet, 1ʳᵉ pers., épicène singulier"], ['m', "(me), pronom personnel objet, 1ʳᵉ pers., épicène singulier"], ['t', "(te), pronom personnel objet, 2ᵉ pers., épicène singulier"], ['s', "(se), pronom personnel objet, 3ᵉ pers., épicène singulier/pluriel"], ['n', "(ne), adverbe de négation"], ['c', "(ce), pronom démonstratif, masculin singulier/pluriel"], ['ç', "(ça), pronom démonstratif, masculin singulier"], ['qu', "(que), conjonction de subordination"], ['lorsqu', "(lorsque), conjonction de subordination"], ['quoiqu', "(quoique), conjonction de subordination"], ['jusqu', "(jusque), préposition"] ]); const _dAD = new Map ([ ['je', " pronom personnel sujet, 1ʳᵉ pers. sing."], ['tu', " pronom personnel sujet, 2ᵉ pers. sing."], ['il', " pronom personnel sujet, 3ᵉ pers. masc. sing."], ['on', " pronom personnel sujet, 3ᵉ pers. sing. ou plur."], ['elle', " pronom personnel sujet, 3ᵉ pers. fém. sing."], ['nous', " pronom personnel sujet/objet, 1ʳᵉ pers. plur."], ['vous', " pronom personnel sujet/objet, 2ᵉ pers. plur."], ['ils', " pronom personnel sujet, 3ᵉ pers. masc. plur."], ['elles', " pronom personnel sujet, 3ᵉ pers. masc. plur."], ["là", " particule démonstrative"], ["ci", " particule démonstrative"], ['le', " COD, masc. sing."], ['la', " COD, fém. sing."], ['les', " COD, plur."], ['moi', " COI (à moi), sing."], ['toi', " COI (à toi), sing."], ['lui', " COI (à lui ou à elle), sing."], ['nous2', " COI (à nous), plur."], ['vous2', " COI (à vous), plur."], ['leur', " COI (à eux ou à elles), plur."], ['y', " pronom adverbial"], ["m'y", " (me) pronom personnel objet + (y) pronom adverbial"], ["t'y", " (te) pronom personnel objet + (y) pronom adverbial"], ["s'y", " (se) pronom personnel objet + (y) pronom adverbial"], ['en', " pronom adverbial"], ["m'en", " (me) pronom personnel objet + (en) pronom adverbial"], ["t'en", " (te) pronom personnel objet + (en) pronom adverbial"], ["s'en", " (se) pronom personnel objet + (en) pronom adverbial"] ]); class Lexicographe { constructor (oDict) { this.oDict = oDict; this._zElidedPrefix = new RegExp ("^([dljmtsncç]|quoiqu|lorsqu|jusqu|puisqu|qu)['’](.+)", "i"); this._zCompoundWord = new RegExp ("([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ]+)-((?:les?|la)-(?:moi|toi|lui|[nv]ous|leur)|t-(?:il|elle|on)|y|en|[mts][’'](?:y|en)|les?|l[aà]|[mt]oi|leur|lui|je|tu|ils?|elles?|on|[nv]ous)$", "i"); this._zTag = new RegExp ("[:;/][a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ*][^:;/]*", "g"); }; analyzeText (sText) { sText = sText.replace(/[.,.?!:;…\/()\[\]“”«»"„{}–—#+*<>%=\n]/g, " ").replace(/\s+/g, " "); let iStart = 0; let iEnd = 0; let sHtml = '<div class="paragraph">\n'; while ((iEnd = sText.indexOf(" ", iStart)) !== -1) { sHtml += this.analyzeWord(sText.slice(iStart, iEnd)); iStart = iEnd + 1; } sHtml += this.analyzeWord(sText.slice(iStart)); return sHtml + '</div>\n'; } analyzeWord (sWord) { try { if (!sWord) { return ""; } if (sWord._count("-") > 4) { return '<p><b class="mbok">' + sWord + "</b> <s>:</s> élément complexe indéterminé</p>\n"; } if (sWord._isDigit()) { return '<p><b class="nb">' + sWord + "</b> <s>:</s> nombre</p>\n"; } let sHtml = ""; // préfixes élidés let m = this._zElidedPrefix.exec(sWord); if (m !== null) { sWord = m[2]; sHtml += "<p><b>" + m[1] + "’</b> <s>:</s> " + _dPFX.get(m[1].toLowerCase()) + " </p>\n"; } // mots composés let m2 = this._zCompoundWord.exec(sWord); if (m2 !== null) { sWord = m2[1]; } // Morphologies let lMorph = this.oDict.getMorph(sWord); if (lMorph.length === 1) { sHtml += "<p><b>" + sWord + "</b> <s>:</s> " + this.formatTags(lMorph[0]) + "</p>\n"; } else if (lMorph.length > 1) { sHtml += "<p><b>" + sWord + "</b><ul><li>" + [for (s of lMorph) if (s.includes(":")) this.formatTags(s)].join(" </li><li> ") + "</li></ul></p>\n"; } else { sHtml += '<p><b class="unknown">' + sWord + "</b> <s>:</s> absent du dictionnaire<p>\n"; } // suffixe d’un mot composé if (m2) { sHtml += "<p>-<b>" + m2[2] + "</b> <s>:</s> " + this._formatSuffix(m2[2].toLowerCase()) + "</p>\n"; } // Verbes //let aVerb = new Set([ for (s of lMorph) if (s.includes(":V")) s.slice(1, s.indexOf(" ")) ]); return sHtml; } catch (e) { helpers.logerror(e); return "#erreur"; } }; formatTags (sTags) { let sRes = ""; sTags = sTags.replace(/V([0-3][ea]?)[itpqnmr_eaxz]+/, "V$1"); let m; while ((m = this._zTag.exec(sTags)) !== null) { sRes += _dTAGS.get(m[0]); if (sRes.length > 100) { break; } } if (sRes.startsWith(" verbe") && !sRes.endsWith("infinitif")) { sRes += " [" + sTags.slice(1, sTags.indexOf(" ")) + "]"; } if (!sRes) { sRes = "#Erreur. Étiquette inconnue : [" + sTags + "]"; helpers.echo(sRes); return sRes; } return sRes._trimRight(","); }; _formatSuffix (s) { if (s.startsWith("t-")) { return "“t” euphonique +" + _dAD.get(s.slice(2)); } if (!s.includes("-")) { return _dAD.get(s.replace("’", "'")); } if (s.endsWith("ous")) { s += '2'; } let nPos = s.indexOf("-"); return _dAD.get(s.slice(0, nPos)) + " +" + _dAD.get(s.slice(nPos+1)); }; } exports.Lexicographe = Lexicographe; |
Added gc_lang/fr/modules-js/mfsp.js version [eacc870aa5].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | // Grammalecte "use strict"; const helpers = require("resource://grammalecte/helpers.js"); const echo = helpers.echo; const oData = JSON.parse(helpers.loadFile("resource://grammalecte/fr/mfsp_data.json")); // list of affix codes const _lTagMiscPlur = oData.lTagMiscPlur; const _lTagMasForm = oData.lTagMasForm; // dictionary of words with uncommon plurals (-x, -ux, english, latin and italian plurals) and tags to generate them const _dMiscPlur = helpers.objectToMap(oData.dMiscPlur); // dictionary of feminine forms and tags to generate masculine forms (singular and plural) const _dMasForm = helpers.objectToMap(oData.dMasForm); function isFemForm (sWord) { // returns True if sWord exists in _dMasForm return _dMasForm.has(sWord); } function getMasForm (sWord, bPlur) { // returns masculine form with feminine form if (_dMasForm.has(sWord)) { return [ for (sTag of _whatSuffixCodes(sWord, bPlur)) _modifyStringWithSuffixCode(sWord, sTag) ]; } return []; } function hasMiscPlural (sWord) { // returns True if sWord exists in dMiscPlur return _dMiscPlur.has(sWord); } function getMiscPlural (sWord) { // returns plural form with singular form if (_dMiscPlur.has(sWord)) { return [ for (sTag of _lTagMiscPlur[_dMiscPlur.get(sWord)].split("|")) _modifyStringWithSuffixCode(sWord, sTag) ]; } return []; } function _whatSuffixCodes (sWord, bPlur) { // necessary only for dMasFW let sSfx = _lTagMasForm[_dMasForm.get(sWord)]; if (sSfx.includes("/")) { if (bPlur) { return sSfx.slice(sSfx.indexOf("/")+1).split("|"); } return sSfx.slice(0, sSfx.indexOf("/")).split("|"); } return sSfx.split("|"); } function _modifyStringWithSuffixCode (sWord, sSfx) { // returns sWord modified by sSfx if (!sWord) { return ""; } if (sSfx === "0") { return sWord; } try { if (sSfx[0] !== '0') { return sWord.slice(0, -(sSfx.charCodeAt(0)-48)) + sSfx.slice(1); // 48 is the ASCII code for "0" } else { return sWord + sSfx.slice(1); } } catch (e) { console.log(e); return "## erreur, code : " + sSfx + " ##"; } } exports.isFemForm = isFemForm; exports.getMasForm = getMasForm; exports.hasMiscPlural = hasMiscPlural; exports.getMiscPlural = getMiscPlural; |
Added gc_lang/fr/modules-js/mfsp_data.json version [e2ab44440e].
cannot compute difference between binary files
Added gc_lang/fr/modules-js/phonet.js version [1ddd439263].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | // Grammalecte - Suggestion phonétique const helpers = require("resource://grammalecte/helpers.js"); const echo = helpers.echo; const oData = JSON.parse(helpers.loadFile("resource://grammalecte/fr/phonet_data.json")); const _dWord = helpers.objectToMap(oData.dWord); const _lSet = oData.lSet; const _dMorph = helpers.objectToMap(oData.dMorph); function hasSimil (sWord, sPattern=null) { // return True if there is list of words phonetically similar to sWord if (!sWord) { return false; } if (_dWord.has(sWord)) { if (sPattern) { return getSimil(sWord).some(sSimil => _dMorph._get(sSimil, []).some(sMorph => sMorph.search(sPattern) >= 0)); } return true; } if (sWord.slice(0,1)._isUpperCase()) { sWord = sWord.toLowerCase(); } if (sPattern) { return getSimil(sWord).some(sSimil => _dMorph._get(sSimil, []).some(sMorph => sMorph.search(sPattern) >= 0)); } return _dWord.has(sWord); } function getSimil (sWord) { // return list of words phonetically similar to sWord if (!sWord) { return []; } if (_dWord.has(sWord)) { return _lSet[_dWord.get(sWord)]; } if (sWord.slice(0,1)._isUpperCase()) { sWord = sWord.toLowerCase(); } if (_dWord.has(sWord)) { return _lSet[_dWord.get(sWord)]; } return []; } function selectSimil (sWord, sPattern) { // return list of words phonetically similar to sWord and whom POS is matching sPattern if (!sPattern) { return new Set(getSimil(sWord)); } let aSelect = new Set(); for (let sSimil of getSimil(sWord)) { for (let sMorph of _dMorph._get(sSimil, [])) { if (sMorph.search(sPattern) >= 0) { aSelect.add(sSimil); } } } return aSelect; } exports.hasSimil = hasSimil; exports.getSimil = getSimil; exports.selectSimil = selectSimil; |
Added gc_lang/fr/modules-js/phonet_data.json version [5c7550e87d].
cannot compute difference between binary files
Added gc_lang/fr/modules-js/tests_data.json version [effbab517b].
cannot compute difference between binary files
Added gc_lang/fr/modules-js/textformatter.js version [694a6a3f2d].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 | // Grammalecte - text formatter "use strict"; ${map} // Latin letters: http://unicode-table.com/fr/ // 0-9 // A-Z // a-z // À-Ö 00C0-00D6 (upper case) // Ø-ß 00D8-00DF (upper case) // à-ö 00E0-00F6 (lower case) // ø-ÿ 00F8-00FF (lower case) // Ā-ʯ 0100-02AF (mixed) // -> a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ // JS sucks: $0 is not recognized (why?), use $& const oReplTable = { //// surnumerary_spaces "start_of_paragraph": [ [/^[ ]+/gm, ""] ], "end_of_paragraph": [ [/[ ]+$/gm, ""] ], "between_words": [ [/ | /g, " "], // espace + espace insécable -> espace [/ +/g, " "], // espaces surnuméraires [/ +/g, " "] ], // espaces insécables surnuméraires "before_punctuation": [ [/ +(?=[.,…])/g, ""] ], "within_parenthesis": [ [/\([ ]+/g, "("], [/[ ]+\)/g, ")"] ], "within_square_brackets": [ [/\[[ ]+/g, "["], [/[ ]+\]/g, "]"] ], "within_quotation_marks": [ [/“[ ]+/g, "“"], [/[ ]”/g, "”"] ], //// non-breaking spaces // espaces insécables "nbsp_before_punctuation": [ [/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ…)»}\]])([:;?!])[ ]/g, "$1 $2 "], [/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ…)»}\]])([:;?!])$/g, "$1 $2"], [/[ ]+([:;?!])/g, " $1"] ], "nbsp_within_quotation_marks":[ [/«([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ])/g, "« $1"], [/«[ ]+/g, "« "], [/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ.!?])»/g, "$1 »"], [/[ ]+»/g, " »"] ], "nbsp_within_numbers": [ [/(\d)[ ](?=\d)/g, "$1 "] ], // espaces insécables fines "nnbsp_before_punctuation": [ [/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ…\)»}\]])([;?!])[ ]/g, "$1 $2 "], [/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ…\)»}\]])([;?!])$/g, "$1 $2"], [/[ ]+([;?!])/g, " $1"], [/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ…\)»}\]]):[ ]/g, "$1 : "], [/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ…\)»}\]]):$/g, "$1 :"], [/[ ]+:/g, " :"] ], "nnbsp_within_quotation_marks":[[/«([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ])/g, "« $1"], [/«[ ]+/g, "« "], [/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ.!?])»/g, "$1 »"], [/[ ]+»/g, " »"] ], "nnbsp_within_numbers": [ [/(\d)[ ](\d)/g, "$1 $2"] ], // common "nbsp_before_symbol": [ [/(\d) ?([%‰€$£¥˚Ω℃])/g, "$1 $2"] ], "nbsp_before_units": [ [/([0-9⁰¹²³⁴⁵⁶⁷⁸⁹]) ?([kcmµn]?(?:[slgJKΩ]|m[²³]?|Wh?|Hz|dB)|[%‰]|°C)\b/g, "$1 $2"] ], "nbsp_repair": [ [/([\[(])[ ]([!?:;])/g, "$1$2"], [/(https?|ftp)[ ]:\/\//g, "$1://"], [/&([a-z]+)[ ];/g, "&$1;"], [/&#([0-9]+|x[0-9a-fA-F]+)[ ];/g, "&#$1;"] ], //// missing spaces "add_space_after_punctuation":[ [/[;!…](?=[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ])/g, "$& "], [/[?](?=[A-ZÀ-ÖØ-ßĀ-ʯ])/g, "? "], [/\.(?=[a-zA-Zà-öÀ-Öø-ÿØ-ßĀ-ʯ][a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ])/g, ". "], [/\.(?=À)/g, ". "], [/[,:](?=[a-zA-Zà-öÀ-Öø-ÿØ-ßĀ-ʯ])/g, "$& "], [/([a-zA-Zà-öÀ-Öø-ÿØ-ßĀ-ʯ]),(?=[0-9])/g, "$1, "] ], "add_space_around_hyphens": [ [/ [-–—](?=[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ"«“'‘])/g, "$& "], [/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ"»”'’])([-–—]) /g, "$1 $2 "] ], "add_space_repair": [ [/DnT, ([wA])\b/g, "DnT,$1"] ], //// erase "erase_non_breaking_hyphens": [ [//g, ""] ], //// typographic signs "ts_apostrophe": [ [/\b([ldnjmtscç])['´‘′`](?=[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ])/ig, "$1’"], [/\b(qu|jusqu|lorsqu|puisqu|quoiqu|quelqu|presqu|entr|aujourd|prud)['´‘′`]/ig, "$1’"] ], "ts_ellipsis": [ [/\.\.\./g, "…"], [/…\.\./g, "……"], [/…\.(?!\.)/g, "…"] ], "ts_n_dash_middle": [ [/ [-—] /g, " – "], [/ [-—],/g, " –,"] ], "ts_m_dash_middle": [ [/ [-–] /g, " — "], [/ [-–],/g, " —,"] ], "ts_n_dash_start": [ [/^[-—][ ]/gm, "– "], [/^– /gm, "– "], [/^[-–—](?=[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ])/gm, "– "] ], "ts_m_dash_start": [ [/^[-–][ ]/gm, "— "], [/^— /gm, "— "], [/^«[ ][—–-][ ]/gm, "« — "], [/^[-–—](?=[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ])/gm, "— "] ], "ts_quotation_marks": [ [/"([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ]+)"/g, "“$1”"], [/''([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ]+)''/g, "“$1”"], [/'([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ]+)'/g, "“$1”"], [/^(?:"|'')(?=[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ…])/gm, "« "], [/ (?:"|'')(?=[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ…])/g, " « "], [/\((?:"|'')(?=[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ…])/g, "(« "], [/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ])(?:"|'')$/gm, "$1 »"], [/([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ])(?:"|'')(?=[ ,.:;?!…)\]])/g, "$1 »"], [/([.!?…])" /g, "$1 » "], [/([.!?…])"$/gm, "$1 »"] ], "ts_spell": [ [/coeur/g, "cœur"], [/Coeur/g, "Cœur"], [/coel(?=[aeio])/g, "cœl"], [/Coel(?=[aeio])/g, "Cœl"], [/choeur/g, "chœur"], [/Choeur/g, "Chœur"], [/foet/g, "fœt"], [/Foet/g, "Fœt"], [/oeil/g, "œil"], [/Oeil/g, "Œil"], [/oeno/g, "œno"], [/Oeno/g, "Œno"], [/oesoph/g, "œsoph"], [/Oesoph/g, "Œsoph"], [/oestro/g, "œstro"], [/Oestro/g, "Œstro"], [/oeuf/g, "œuf"], [/Oeuf/g, "Œuf"], [/oeuvr/g, "œuvr"], [/Oeuvr/g, "Œuvr"], [/moeur/g, "mœur"], [/Moeur/g, "Mœur"], [/noeu/g, "nœu"], [/Noeu/g, "Nœu"], [/soeur/g, "sœur"], [/Soeur/g, "Sœur"], [/voeu/g, "vœu"], [/Voeu/g, "Vœu"], [/aequo/g, "æquo"], [/Aequo/g, "Æquo"], [/Ca /g, "Ça "], [/ ca([ ,.!;:])/g, " ça$1"], [/(Ce(?:ux|lles?|lui))-la /g, "$1-là "], [/ (ce(?:ux|lles?|lui))-la/g, " $1-là"], [/ malgre /g, " malgré "], [/Malgre /g, "Malgré "], [/ etre([ ,.!;:])/g, " être$1"], [/Etre([ ,.!;:])/g, "Être$1"], [/ tres([ ,.!;:])/g, " très$1"], [/Tres /g, "Très "], [/\bEtai([ts]|ent)\b/g, "Étai$1"], [/\bE(tat|cole|crit|poque|tude|ducation|glise|conomi(?:qu|)e|videmment|lysée|tienne|thiopie|cosse|gypt(?:e|ien)|rythrée|pinal|vreux)/g, "É$1"] ], "ts_ligature_ffi_do": [ [/ffi/g, "ffi"] ], "ts_ligature_ffl_do": [ [/ffl/g, "ffl"] ], "ts_ligature_fi_do": [ [/fi/g, "fi"] ], "ts_ligature_fl_do": [ [/fl/g, "fl"] ], "ts_ligature_ff_do": [ [/ff/g, "ff"] ], "ts_ligature_ft_do": [ [/ft/g, "ſt"] ], "ts_ligature_st_do": [ [/st/g, "st"] ], "ts_ligature_fi_undo": [ [/fi/g, "fi"] ], "ts_ligature_fl_undo": [ [/fl/g, "fl"] ], "ts_ligature_ff_undo": [ [/ff/g, "ff"] ], "ts_ligature_ffi_undo": [ [/ffi/g, "ffi"] ], "ts_ligature_ffl_undo": [ [/ffl/g, "ffl"] ], "ts_ligature_ft_undo": [ [/ſt/g, "ft"] ], "ts_ligature_st_undo": [ [/st/g, "st"] ], "ts_units": [ [/\bN\.([ms])\b/g, "N·$1"], // N·m et N·m-1, N·s [/\bW\.h\b/g, "W·h"], [/\bPa\.s\b/g, "Pa·s"], [/\bA\.h\b/g, "A·h"], [/Ω\.m\b/g, "Ω·m"], [/\bS\.m\b/g, "S·m"], [/\bg\.s(?=-1)\b/g, "g·s"], [/\bm\.s(?=-[12])\b/g, "m·s"], [/\bg\.m(?=2|-3)\b/g, "g·m"], [/\bA\.m(?=-1)\b/g, "A·m"], [/\bJ\.K(?=-1)\b/g, "J·K"], [/\bW\.m(?=-2)\b/g, "W·m"], [/\bcd\.m(?=-2)\b/g, "cd·m"], [/\bC\.kg(?=-1)\b/g, "C·kg"], [/\bH\.m(?=-1)\b/g, "H·m"], [/\bJ\.kg(?=-1)\b/g, "J·kg"], [/\bJ\.m(?=-3)\b/g, "J·m"], [/\bm[2²]\.s\b/g, "m²·s"], [/\bm[3³]\.s(?=-1)\b/g, "m³·s"], //[/\bJ.kg-1.K-1\b/g, "J·kg-1·K-1"], //[/\bW.m-1.K-1\b/g, "W·m-1·K-1"], //[/\bW.m-2.K-1\b/g, "W·m-2·K-1"], [/\b(Y|Z|E|P|T|G|M|k|h|da|d|c|m|µ|n|p|f|a|z|y)Ω/g, "$1Ω"] ], //// misc "ordinals_exponant": [ [/\b([0-9]+)(?:i?[èe]me|è|e)\b/g, "$1ᵉ"], [/\b([XVICL]+)(?:i?[èe]me|è)\b/g, "$1ᵉ"], [/\b((?:au|l[ea]|du) [XVICL])e\b/g, "$1ᵉ"], [/\b([XVI])e(?= siècle)/g, "$1ᵉ"], [/\b([1I])er\b/g, "$1ᵉʳ"], [/\b([1I])re\b/g, "$1ʳᵉ"] ], "ordinals_no_exponant": [ [/\b([0-9]+)(?:i?[èe]me|è)\b/g, "$1e"], [/\b([XVICL]+)(?:i?[èe]me|è)\b/g, "$1e"], [/\b([1I])ᵉʳ\b/g, "$1er"], [/\b([1I])ʳᵉ\b/g, "$1er"] ], "etc": [ [/etc(…|\.\.\.?)/g, "etc."], [/\b etc\./g, ", etc."] ], "missing_hyphens": [ [/[ -]t[’'](?=il\b|elle|on\b)/g, "-t-"], [/ t-(?=il|elle|on)/g, "-t-"], [/[ -]t[’'-](?=ils|elles)/g, "-"], [/([td])-t-(?=il|elle|on)/g, "$1-"], [/dix (sept|huit|neuf)/g, "dix-$1"], [/quatre vingt/g, "quatre-vingt"], [/(soixante|quatre-vingt) dix/g, "$1-dix"], [/(vingt|trente|quarante|cinquante|soixante(?:-dix|)|quatre-vingt(?:-dix|)) (deux|trois|quatre|cinq|six|sept|huit|neuf)\b/g, "$1-$2"], [/ ce(lles?|lui|ux) (ci|là)/g, "ce$1-$2"], [/Ce(lles?|lui|ux) (ci|là)/g, "Ce$1-$2"], [/^Ci (joint|desso?us|contre|devant|avant|après|incluse|g[îi]t|gisent)/gm, "Ci-$1"], [/ ci (joint|desso?us|contre|devant|avant|après|incluse|g[îi]t|gisent)/g, " ci-$1"], [/vis à vis/g, "vis-à-vis"], [/Vis à vis/g, "Vis-à-vis"], [/week end/g, "week-end"], [/Week end/g, "Week-end"], [/(plus|moins) value/ig, "$1-value"] ], //// missing apostrophes "ma_word": [ [/[ ](qu|lorsqu|puisqu|quoiqu|presqu|jusqu|aujourd|entr|quelqu|prud) /ig, "$1’"], [/^(qu|lorsqu|puisqu|quoiqu|presqu|jusqu|aujourd|entr|quelqu|prud) /ig, "$1’"] ], "ma_1letter_lowercase": [ [/[ ]([ldjnmtscç]) (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])/g, "$1’"] ], "ma_1letter_uppercase": [ [/[ ]([LDJNMTSCÇ]) (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])/g, "$1’"], [/^([LDJNMTSCÇ]) (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])/g, "$1’"] ] }; const dDefaultOptions = new Map ([ ["ts_units", true], ["start_of_paragraph", true], ["end_of_paragraph", true], ["between_words", true], ["before_punctuation", true], ["within_parenthesis", true], ["within_square_brackets", true], ["within_quotation_marks", true], ["nbsp_before_punctuation", true], ["nbsp_within_quotation_marks", true], ["nbsp_within_numbers", true], ["nnbsp_before_punctuation", false], ["nnbsp_within_quotation_marks", false], ["nnbsp_within_numbers", false], ["nbsp_before_symbol", true], ["nbsp_before_units", true], ["nbsp_repair", true], ["add_space_after_punctuation", true], ["add_space_around_hyphens", true], ["add_space_repair", true], ["erase_non_breaking_hyphens", false], ["ts_apostrophe", true], ["ts_ellipsis", true], ["ts_n_dash_middle", true], ["ts_m_dash_middle", false], ["ts_n_dash_start", false], ["ts_m_dash_start", true], ["ts_quotation_marks", true], ["ts_spell", true], ["ts_ligature_ffi_do", false], ["ts_ligature_ffl_do", false], ["ts_ligature_fi_do", false], ["ts_ligature_fl_do", false], ["ts_ligature_ff_do", false], ["ts_ligature_ft_do", false], ["ts_ligature_st_do", false], ["ts_ligature_fi_undo", false], ["ts_ligature_fl_undo", false], ["ts_ligature_ff_undo", false], ["ts_ligature_ffi_undo", false], ["ts_ligature_ffl_undo", false], ["ts_ligature_ft_undo", false], ["ts_ligature_st_undo", false], ["ordinals_exponant", false], ["ordinals_no_exponant", true], ["etc", true], ["missing_hyphens", true], ["ma_word", true], ["ma_1letter_lowercase", false], ["ma_1letter_uppercase", false] ]); const dOptions = dDefaultOptions._shallowCopy(); class TextFormatter { constructor () { this.sLang = "fr"; }; formatText (sText, dOpt=null) { if (dOpt !== null) { dOptions._updateOnlyExistingKeys(dOpt); } for (let [sOptName, bVal] of dOptions) { if (bVal && oReplTable.has(sOptName)) { for (let [zRgx, sRep] of oReplTable[sOptName]) { sText = sText.replace(zRgx, sRep); } } } return sText; }; getDefaultOptions () { return dDefaultOptions; } } if (typeof(exports) !== 'undefined') { exports.TextFormatter = TextFormatter; exports.oReplTable = oReplTable; } |
Added gc_lang/fr/modules/conj.py version [7c55bc9b32].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 | # Grammalecte - Conjugueur # License: GPL 3 import re import traceback from .conj_data import lVtyp as _lVtyp from .conj_data import lTags as _lTags from .conj_data import dPatternConj as _dPatternConj from .conj_data import dVerb as _dVerb _zStartVoy = re.compile("^[aeéiouœê]") _zNeedTeuph = re.compile("[tdc]$") #_zNEEDACCENTWITHJE = re.compile("[^i]e$") _dProSuj = { ":1s": "je", ":1ś": "je", ":2s": "tu", ":3s": "il", ":1p": "nous", ":2p": "vous", ":3p": "ils" } _dProObj = { ":1s": "me ", ":1ś": "me ", ":2s": "te ", ":3s": "se ", ":1p": "nous ", ":2p": "vous ", ":3p": "se " } _dProObjEl = { ":1s": "m’", ":1ś": "m’", ":2s": "t’", ":3s": "s’", ":1p": "nous ", ":2p": "vous ", ":3p": "s’" } _dImpePro = { ":2s": "-toi", ":1p": "-nous", ":2p": "-vous" } _dImpeProNeg = { ":2s": "ne te ", ":1p": "ne nous ", ":2p": "ne vous " } _dImpeProEn = { ":2s": "-t’en", ":1p": "-nous-en", ":2p": "-vous-en" } _dImpeProNegEn = { ":2s": "ne t’en ", ":1p": "ne nous en ", ":2p": "ne vous en " } _dGroup = { "0": "auxiliaire", "1": "1ᵉʳ groupe", "2": "2ᵉ groupe", "3": "3ᵉ groupe" } _dTenseIdx = { ":PQ": 0, ":Ip": 1, ":Iq": 2, ":Is": 3, ":If": 4, ":K": 5, ":Sp": 6, ":Sq": 7, ":E": 8 } def isVerb (s): return s in _dVerb def getConj (sVerb, sTense, sWho): "returns conjugation (can be an empty string)" if sVerb not in _dVerb: return None return _modifyStringWithSuffixCode(sVerb, _dPatternConj[sTense][_lTags[_dVerb[sVerb][1]][_dTenseIdx[sTense]]].get(sWho, "")) def hasConj (sVerb, sTense, sWho): "returns False if no conjugation (also if empty) else True" if sVerb not in _dVerb: return False if _dPatternConj[sTense][_lTags[_dVerb[sVerb][1]][_dTenseIdx[sTense]]].get(sWho, False): return True return False def getVtyp (sVerb): "returns raw informations about sVerb" if sVerb not in _dVerb: return None return _lVtyp[_dVerb[sVerb][0]] def getSimil (sWord, sMorph): if ":V" not in sMorph: return set() sInfi = sMorph[1:sMorph.find(" ")] tTags = _getTags(sInfi) aSugg = set() if ":Q" in sMorph: # we suggest conjugated forms if ":V1" in sMorph: aSugg.add(sInfi) aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":3s")) aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":2p")) aSugg.add(_getConjWithTags(sInfi, tTags, ":Iq", ":1s")) aSugg.add(_getConjWithTags(sInfi, tTags, ":Iq", ":3s")) aSugg.add(_getConjWithTags(sInfi, tTags, ":Iq", ":3p")) elif ":V2" in sMorph: aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":1s")) aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":3s")) elif ":V3" in sMorph: aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":1s")) aSugg.add(_getConjWithTags(sInfi, tTags, ":Ip", ":3s")) aSugg.add(_getConjWithTags(sInfi, tTags, ":Is", ":1s")) aSugg.add(_getConjWithTags(sInfi, tTags, ":Is", ":3s")) elif ":V0a" in sMorph: aSugg.add("eus") aSugg.add("eut") else: aSugg.add("étais") aSugg.add("était") aSugg.discard("") else: # we suggest past participles aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q1")) aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q2")) aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q3")) aSugg.add(_getConjWithTags(sInfi, tTags, ":PQ", ":Q4")) aSugg.discard("") # if there is only one past participle (epi inv), unreliable. if len(aSugg) == 1: aSugg.clear() return aSugg def _getTags (sVerb): "returns tuple of tags (usable with functions _getConjWithTags and _hasConjWithTags)" if sVerb not in _dVerb: return None return _lTags[_dVerb[sVerb][1]] def _getConjWithTags (sVerb, tTags, sTense, sWho): "returns conjugation (can be an empty string)" return _modifyStringWithSuffixCode(sVerb, _dPatternConj[sTense][tTags[_dTenseIdx[sTense]]].get(sWho, "")) def _hasConjWithTags (tTags, sTense, sWho): "returns False if no conjugation (also if empty) else True" if _dPatternConj[sTense][tTags[_dTenseIdx[sTense]]].get(sWho, False): return True return False def _modifyStringWithSuffixCode (sWord, sSfx): "returns sWord modified by sSfx" if not sSfx: return "" if sSfx == "0": return sWord try: return sWord[:-(ord(sSfx[0])-48)] + sSfx[1:] if sSfx[0] != '0' else sWord + sSfx[1:] # 48 is the ASCII code for "0" except: return "## erreur, code : " + str(sSfx) + " ##" class Verb (): def __init__ (self, sVerb): if not isinstance(sVerb, str): raise TypeError if not sVerb: raise ValueError self.sVerb = sVerb self.sVerbAux = "" self._sRawInfo = getVtyp(self.sVerb) self.sInfo = self._readableInfo() self.bProWithEn = (self._sRawInfo[5] == "e") self._tTags = _getTags(sVerb) self._tTagsAux = _getTags(self.sVerbAux) self.dConj = { ":Y": { "label": "Infinitif", ":Y": sVerb, }, ":PQ": { "label": "Participes passés et présent", ":Q1": _getConjWithTags(sVerb, self._tTags, ":PQ", ":Q1"), ":Q2": _getConjWithTags(sVerb, self._tTags, ":PQ", ":Q2"), ":Q3": _getConjWithTags(sVerb, self._tTags, ":PQ", ":Q3"), ":Q4": _getConjWithTags(sVerb, self._tTags, ":PQ", ":Q4"), ":P": _getConjWithTags(sVerb, self._tTags, ":PQ", ":P"), }, ":Ip": { "label": "Présent", ":1s": _getConjWithTags(sVerb, self._tTags, ":Ip", ":1s"), ":1ś": _getConjWithTags(sVerb, self._tTags, ":Ip", ":1ś"), ":2s": _getConjWithTags(sVerb, self._tTags, ":Ip", ":2s"), ":3s": _getConjWithTags(sVerb, self._tTags, ":Ip", ":3s"), ":1p": _getConjWithTags(sVerb, self._tTags, ":Ip", ":1p"), ":2p": _getConjWithTags(sVerb, self._tTags, ":Ip", ":2p"), ":3p": _getConjWithTags(sVerb, self._tTags, ":Ip", ":3p"), }, ":Iq": { "label": "Imparfait", ":1s": _getConjWithTags(sVerb, self._tTags, ":Iq", ":1s"), ":2s": _getConjWithTags(sVerb, self._tTags, ":Iq", ":2s"), ":3s": _getConjWithTags(sVerb, self._tTags, ":Iq", ":3s"), ":1p": _getConjWithTags(sVerb, self._tTags, ":Iq", ":1p"), ":2p": _getConjWithTags(sVerb, self._tTags, ":Iq", ":2p"), ":3p": _getConjWithTags(sVerb, self._tTags, ":Iq", ":3p"), }, ":Is": { "label": "Passé simple", ":1s": _getConjWithTags(sVerb, self._tTags, ":Is", ":1s"), ":2s": _getConjWithTags(sVerb, self._tTags, ":Is", ":2s"), ":3s": _getConjWithTags(sVerb, self._tTags, ":Is", ":3s"), ":1p": _getConjWithTags(sVerb, self._tTags, ":Is", ":1p"), ":2p": _getConjWithTags(sVerb, self._tTags, ":Is", ":2p"), ":3p": _getConjWithTags(sVerb, self._tTags, ":Is", ":3p"), }, ":If": { "label": "Futur", ":1s": _getConjWithTags(sVerb, self._tTags, ":If", ":1s"), ":2s": _getConjWithTags(sVerb, self._tTags, ":If", ":2s"), ":3s": _getConjWithTags(sVerb, self._tTags, ":If", ":3s"), ":1p": _getConjWithTags(sVerb, self._tTags, ":If", ":1p"), ":2p": _getConjWithTags(sVerb, self._tTags, ":If", ":2p"), ":3p": _getConjWithTags(sVerb, self._tTags, ":If", ":3p"), }, ":Sp": { "label": "Présent subjonctif", ":1s": _getConjWithTags(sVerb, self._tTags, ":Sp", ":1s"), ":1ś": _getConjWithTags(sVerb, self._tTags, ":Sp", ":1ś"), ":2s": _getConjWithTags(sVerb, self._tTags, ":Sp", ":2s"), ":3s": _getConjWithTags(sVerb, self._tTags, ":Sp", ":3s"), ":1p": _getConjWithTags(sVerb, self._tTags, ":Sp", ":1p"), ":2p": _getConjWithTags(sVerb, self._tTags, ":Sp", ":2p"), ":3p": _getConjWithTags(sVerb, self._tTags, ":Sp", ":3p"), }, ":Sq": { "label": "Imparfait subjonctif", ":1s": _getConjWithTags(sVerb, self._tTags, ":Sq", ":1s"), ":1ś": _getConjWithTags(sVerb, self._tTags, ":Sq", ":1ś"), ":2s": _getConjWithTags(sVerb, self._tTags, ":Sq", ":2s"), ":3s": _getConjWithTags(sVerb, self._tTags, ":Sq", ":3s"), ":1p": _getConjWithTags(sVerb, self._tTags, ":Sq", ":1p"), ":2p": _getConjWithTags(sVerb, self._tTags, ":Sq", ":2p"), ":3p": _getConjWithTags(sVerb, self._tTags, ":Sq", ":3p"), }, ":K": { "label": "Conditionnel", ":1s": _getConjWithTags(sVerb, self._tTags, ":K", ":1s"), ":2s": _getConjWithTags(sVerb, self._tTags, ":K", ":2s"), ":3s": _getConjWithTags(sVerb, self._tTags, ":K", ":3s"), ":1p": _getConjWithTags(sVerb, self._tTags, ":K", ":1p"), ":2p": _getConjWithTags(sVerb, self._tTags, ":K", ":2p"), ":3p": _getConjWithTags(sVerb, self._tTags, ":K", ":3p"), }, ":E": { "label": "Impératif", ":2s": _getConjWithTags(sVerb, self._tTags, ":E", ":2s"), ":1p": _getConjWithTags(sVerb, self._tTags, ":E", ":1p"), ":2p": _getConjWithTags(sVerb, self._tTags, ":E", ":2p"), }, } def _readableInfo (self): "returns readable infos about sVerb" try: if not self._sRawInfo: return "verbe inconnu" if self._sRawInfo[7:8] == "e": self.sVerbAux = "être" else: self.sVerbAux = "avoir" sGroup = _dGroup.get(self._sRawInfo[0], "# erreur ") s = "" if self._sRawInfo[3:4] == "t": s = "transitif" elif self._sRawInfo[4:5] == "n": s = "transitif indirect" elif self._sRawInfo[2:3] == "i": s = "intransitif" elif self._sRawInfo[5:6] == "r": s = "pronominal réciproque" elif self._sRawInfo[5:6] == "p": s = "pronominal" if self._sRawInfo[5:6] == "q" or self._sRawInfo[5:6] == "e": s = s + " (+ usage pronominal)" if self._sRawInfo[6:7] == "m": s = s + " impersonnel" if not s: s = "# erreur - code : " + self._sRawInfo return sGroup + " · " + s except: traceback.print_exc() return "# erreur" def infinitif (self, bPro, bNeg, bTpsCo, bInt, bFem): try: if bTpsCo: sInfi = self.sVerbAux if not bPro else "être" else: sInfi = self.sVerb if bPro: if self.bProWithEn: sInfi = "s’en " + sInfi else: sInfi = "s’" + sInfi if _zStartVoy.search(sInfi) else "se " + sInfi if bNeg: sInfi = "ne pas " + sInfi if bTpsCo: sInfi += " " + self._seekPpas(bPro, bFem, self._sRawInfo[5] == "r") if bInt: sInfi += " … ?" return sInfi except: traceback.print_exc() return "# erreur" def participePasse (self, sWho): try: return self.dConj[":PQ"][sWho] except: traceback.print_exc() return "# erreur" def participePresent (self, bPro, bNeg, bTpsCo, bInt, bFem): try: if not self.dConj[":PQ"][":P"]: return "" if bTpsCo: s = _getConjWithTags(self.sVerbAux, self._tTagsAux, ":PQ", ":P") if not bPro else getConj("être", ":PQ", ":P") else: s = self.dConj[":PQ"][":P"] if not s: return "" bEli = True if _zStartVoy.search(s) else False if bPro: if self.bProWithEn: s = "s’en " + s else: s = "s’" + s if bEli else "se " + s if bNeg: if bEli and not bPro: s = "n’" + s + " pas" else: s = "ne " + s + " pas" if bTpsCo: s += " " + self._seekPpas(bPro, bFem, self._sRawInfo[5] == "r") if bInt: s += " … ?" return s except: traceback.print_exc() return "# erreur" def conjugue (self, sTemps, sWho, bPro, bNeg, bTpsCo, bInt, bFem): try: if not self.dConj[sTemps][sWho]: return "" if not bTpsCo and bInt and sWho == ":1s" and self.dConj[sTemps].get(":1ś", False): sWho = ":1ś" if bTpsCo: s = _getConjWithTags(self.sVerbAux, self._tTagsAux, sTemps, sWho) if not bPro else getConj("être", sTemps, sWho) else: s = self.dConj[sTemps][sWho] if not s: return "" bEli = True if _zStartVoy.search(s) else False if bPro: if not self.bProWithEn: s = _dProObjEl[sWho] + s if bEli else _dProObj[sWho] + s else: s = _dProObjEl[sWho] + "en " + s if bNeg: s = "n’" + s if bEli and not bPro else "ne " + s if bInt: if sWho == ":3s" and not _zNeedTeuph.search(s): s += "-t" s += "-" + self._getPronom(sWho, bFem) else: if sWho == ":1s" and bEli and not bNeg and not bPro: s = "j’" + s else: s = self._getPronom(sWho, bFem) + " " + s if bNeg: s += " pas" if bTpsCo: s += " " + self._seekPpas(bPro, bFem, sWho.endswith("p") or self._sRawInfo[5] == "r") if bInt: s += " … ?" return s except: traceback.print_exc() return "# erreur" def _getPronom (self, sWho, bFem): try: if sWho == ":3s": if self._sRawInfo[5] == "r": return "on" elif bFem: return "elle" elif sWho == ":3p" and bFem: return "elles" return _dProSuj[sWho] except: traceback.print_exc() return "# erreur" def imperatif (self, sWho, bPro, bNeg, bTpsCo, bFem): try: if not self.dConj[":E"][sWho]: return "" if bTpsCo: s = _getConjWithTags(self.sVerbAux, self._tTagsAux, ":E", sWho) if not bPro else getConj(u"être", ":E", sWho) else: s = self.dConj[":E"][sWho] if not s: return "" bEli = True if _zStartVoy.search(s) else False if bNeg: if bPro: if not self.bProWithEn: if bEli and sWho == ":2s": s = "ne t’" + s + " pas" else: s = _dImpeProNeg[sWho] + s + " pas" else: s = _dImpeProNegEn[sWho] + s + " pas" else: s = "n’" + s + " pas" if bEli else "ne " + s + " pas" elif bPro: s = s + _dImpeProEn[sWho] if self.bProWithEn else s + _dImpePro[sWho] if bTpsCo: return s + " " + self._seekPpas(bPro, bFem, sWho.endswith("p") or self._sRawInfo[5] == "r") return s except: traceback.print_exc() return "# erreur" def _seekPpas (self, bPro, bFem, bPlur): try: if not bPro and self.sVerbAux == "avoir": return self.dConj[":PQ"][":Q1"] if not bFem: return self.dConj[":PQ"][":Q2"] if bPlur and self.dConj[":PQ"][":Q2"] else self.dConj[":PQ"][":Q1"] if not bPlur: return self.dConj[":PQ"][":Q3"] if self.dConj[":PQ"][":Q3"] else self.dConj[":PQ"][":Q1"] return self.dConj[":PQ"][":Q4"] if self.dConj[":PQ"][":Q4"] else self.dConj[":PQ"][":Q1"] except: traceback.print_exc() return "# erreur" |
Added gc_lang/fr/modules/conj_data.py version [1f45433f5a].
cannot compute difference between binary files
Added gc_lang/fr/modules/cregex.py version [a0df0d1397].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 | # Grammalecte - Compiled regular expressions import re #### Lemme Lemma = re.compile("^>(\w[\w-]*)") #### Analyses Gender = re.compile(":[mfe]") Number = re.compile(":[spi]") #### Nom et adjectif NA = re.compile(":[NA]") ## nombre NAs = re.compile(":[NA].*:s") NAp = re.compile(":[NA].*:p") NAi = re.compile(":[NA].*:i") NAsi = re.compile(":[NA].*:[si]") NApi = re.compile(":[NA].*:[pi]") ## genre NAm = re.compile(":[NA].*:m") NAf = re.compile(":[NA].*:f") NAe = re.compile(":[NA].*:e") NAme = re.compile(":[NA].*:[me]") NAfe = re.compile(":[NA].*:[fe]") ## nombre et genre # singuilier NAms = re.compile(":[NA].*:m.*:s") NAfs = re.compile(":[NA].*:f.*:s") NAes = re.compile(":[NA].*:e.*:s") NAmes = re.compile(":[NA].*:[me].*:s") NAfes = re.compile(":[NA].*:[fe].*:s") # singulier et invariable NAmsi = re.compile(":[NA].*:m.*:[si]") NAfsi = re.compile(":[NA].*:f.*:[si]") NAesi = re.compile(":[NA].*:e.*:[si]") NAmesi = re.compile(":[NA].*:[me].*:[si]") NAfesi = re.compile(":[NA].*:[fe].*:[si]") # pluriel NAmp = re.compile(":[NA].*:m.*:p") NAfp = re.compile(":[NA].*:f.*:p") NAep = re.compile(":[NA].*:e.*:p") NAmep = re.compile(":[NA].*:[me].*:p") NAfep = re.compile(":[NA].*:[me].*:p") # pluriel et invariable NAmpi = re.compile(":[NA].*:m.*:[pi]") NAfpi = re.compile(":[NA].*:f.*:[pi]") NAepi = re.compile(":[NA].*:e.*:[pi]") NAmepi = re.compile(":[NA].*:[me].*:[pi]") NAfepi = re.compile(":[NA].*:[fe].*:[pi]") # divers AD = re.compile(":[AB]") #### Verbe Vconj = re.compile(":[123][sp]") Vconj123 = re.compile(":V[123].*:[123][sp]") #### Nom | Adjectif | Verbe NVconj = re.compile(":(?:N|[123][sp])") NAVconj = re.compile(":(?:N|A|[123][sp])") #### Spécifique NnotA = re.compile(":N(?!:A)") PNnotA = re.compile(":(?:N(?!:A)|Q)") #### Noms propres NP = re.compile(":(?:M[12P]|T)") NPm = re.compile(":(?:M[12P]|T):m") NPf = re.compile(":(?:M[12P]|T):f") NPe = re.compile(":(?:M[12P]|T):e") #### FONCTIONS def getLemmaOfMorph (s): return Lemma.search(s).group(1) def checkAgreement (l1, l2): # check number agreement if not mbInv(l1) and not mbInv(l2): if mbSg(l1) and not mbSg(l2): return False if mbPl(l1) and not mbPl(l2): return False # check gender agreement if mbEpi(l1) or mbEpi(l2): return True if mbMas(l1) and not mbMas(l2): return False if mbFem(l1) and not mbFem(l2): return False return True def checkConjVerb (lMorph, sReqConj): return any(sReqConj in s for s in lMorph) def getGender (lMorph): "returns gender of word (':m', ':f', ':e' or empty string)." sGender = "" for sMorph in lMorph: m = Gender.search(sMorph) if m: if not sGender: sGender = m.group(0) elif sGender != m.group(0): return ":e" return sGender def getNumber (lMorph): "returns number of word (':s', ':p', ':i' or empty string)." sNumber = "" for sMorph in lMorph: m = Number.search(sWord) if m: if not sNumber: sNumber = m.group(0) elif sNumber != m.group(0): return ":i" return sNumber # NOTE : isWhat (lMorph) returns True if lMorph contains nothing else than What # mbWhat (lMorph) returns True if lMorph contains What at least once ## isXXX = it’s certain def isNom (lMorph): return all(":N" in s for s in lMorph) def isNomNotAdj (lMorph): return all(NnotA.search(s) for s in lMorph) def isAdj (lMorph): return all(":A" in s for s in lMorph) def isNomAdj (lMorph): return all(NA.search(s) for s in lMorph) def isNomVconj (lMorph): return all(NVconj.search(s) for s in lMorph) def isInv (lMorph): return all(":i" in s for s in lMorph) def isSg (lMorph): return all(":s" in s for s in lMorph) def isPl (lMorph): return all(":p" in s for s in lMorph) def isEpi (lMorph): return all(":e" in s for s in lMorph) def isMas (lMorph): return all(":m" in s for s in lMorph) def isFem (lMorph): return all(":f" in s for s in lMorph) ## mbXXX = MAYBE XXX def mbNom (lMorph): return any(":N" in s for s in lMorph) def mbAdj (lMorph): return any(":A" in s for s in lMorph) def mbAdjNb (lMorph): return any(AD.search(s) for s in lMorph) def mbNomAdj (lMorph): return any(NA.search(s) for s in lMorph) def mbNomNotAdj (lMorph): b = False for s in lMorph: if ":A" in s: return False if ":N" in s: b = True return b def mbPpasNomNotAdj (lMorph): return any(PNnotA.search(s) for s in lMorph) def mbVconj (lMorph): return any(Vconj.search(s) for s in lMorph) def mbVconj123 (lMorph): return any(Vconj123.search(s) for s in lMorph) def mbMG (lMorph): return any(":G" in s for s in lMorph) def mbInv (lMorph): return any(":i" in s for s in lMorph) def mbSg (lMorph): return any(":s" in s for s in lMorph) def mbPl (lMorph): return any(":p" in s for s in lMorph) def mbEpi (lMorph): return any(":e" in s for s in lMorph) def mbMas (lMorph): return any(":m" in s for s in lMorph) def mbFem (lMorph): return any(":f" in s for s in lMorph) def mbNpr (lMorph): return any(NP.search(s) for s in lMorph) def mbNprMasNotFem (lMorph): if any(NPf.search(s) for s in lMorph): return False return any(NPm.search(s) for s in lMorph) |
Added gc_lang/fr/modules/gce_analyseur.py version [39975de0ac].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | #### GRAMMAR CHECKING ENGINE PLUGIN: Parsing functions for French language from . import cregex as cr def rewriteSubject (s1, s2): # s1 is supposed to be prn/patr/npr (M[12P]) if s2 == "lui": return "ils" if s2 == "moi": return "nous" if s2 == "toi": return "vous" if s2 == "nous": return "nous" if s2 == "vous": return "vous" if s2 == "eux": return "ils" if s2 == "elle" or s2 == "elles": # We don’t check if word exists in _dAnalyses, for it is assumed it has been done before if cr.mbNprMasNotFem(_dAnalyses.get(s1, False)): return "ils" # si épicène, indéterminable, mais OSEF, le féminin l’emporte return "elles" return s1 + " et " + s2 def apposition (sWord1, sWord2): "returns True if nom + nom (no agreement required)" # We don’t check if word exists in _dAnalyses, for it is assumed it has been done before return cr.mbNomNotAdj(_dAnalyses.get(sWord2, False)) and cr.mbPpasNomNotAdj(_dAnalyses.get(sWord1, False)) def isAmbiguousNAV (sWord): "words which are nom|adj and verb are ambiguous (except être and avoir)" if sWord not in _dAnalyses and not _storeMorphFromFSA(sWord): return False if not cr.mbNomAdj(_dAnalyses[sWord]) or sWord == "est": return False if cr.mbVconj(_dAnalyses[sWord]) and not cr.mbMG(_dAnalyses[sWord]): return True return False def isAmbiguousAndWrong (sWord1, sWord2, sReqMorphNA, sReqMorphConj): "use it if sWord1 won’t be a verb; word2 is assumed to be True via isAmbiguousNAV" # We don’t check if word exists in _dAnalyses, for it is assumed it has been done before a2 = _dAnalyses.get(sWord2, None) if not a2: return False if cr.checkConjVerb(a2, sReqMorphConj): # verb word2 is ok return False a1 = _dAnalyses.get(sWord1, None) if not a1: return False if cr.checkAgreement(a1, a2) and (cr.mbAdj(a2) or cr.mbAdj(a1)): return False return True def isVeryAmbiguousAndWrong (sWord1, sWord2, sReqMorphNA, sReqMorphConj, bLastHopeCond): "use it if sWord1 can be also a verb; word2 is assumed to be True via isAmbiguousNAV" # We don’t check if word exists in _dAnalyses, for it is assumed it has been done before a2 = _dAnalyses.get(sWord2, None) if not a2: return False if cr.checkConjVerb(a2, sReqMorphConj): # verb word2 is ok return False a1 = _dAnalyses.get(sWord1, None) if not a1: return False if cr.checkAgreement(a1, a2) and (cr.mbAdj(a2) or cr.mbAdjNb(a1)): return False # now, we know there no agreement, and conjugation is also wrong if cr.isNomAdj(a1): return True #if cr.isNomAdjVerb(a1): # considered True if bLastHopeCond: return True return False def checkAgreement (sWord1, sWord2): # We don’t check if word exists in _dAnalyses, for it is assumed it has been done before a2 = _dAnalyses.get(sWord2, None) if not a2: return True a1 = _dAnalyses.get(sWord1, None) if not a1: return True return cr.checkAgreement(a1, a2) _zUnitSpecial = re.compile("[µ/⁰¹²³⁴⁵⁶⁷⁸⁹Ωℓ·]") _zUnitNumbers = re.compile("[0-9]") def mbUnit (s): if _zUnitSpecial.search(s): return True if 1 < len(s) < 16 and s[0:1].islower() and (not s[1:].islower() or _zUnitNumbers.search(s)): return True return False #### Syntagmes _zEndOfNG1 = re.compile(" *$| +(?:, +|)(?:n(?:’|e |o(?:u?s|tre) )|l(?:’|e(?:urs?|s|) |a )|j(?:’|e )|m(?:’|es? |a |on )|t(?:’|es? |a |u )|s(?:’|es? |a )|c(?:’|e(?:t|tte|s|) )|ç(?:a |’)|ils? |vo(?:u?s|tre) )") _zEndOfNG2 = re.compile(r" +(\w[\w-]+)") _zEndOfNG3 = re.compile(r" *, +(\w[\w-]+)") def isEndOfNG (dDA, s, iOffset): if _zEndOfNG1.match(s): return True m = _zEndOfNG2.match(s) if m and morphex(dDA, (iOffset+m.start(1), m.group(1)), ":[VR]", ":[NAQP]"): return True m = _zEndOfNG3.match(s) if m and not morph(dDA, (iOffset+m.start(1), m.group(1)), ":[NA]", False): return True return False _zNextIsNotCOD1 = re.compile(" *,") _zNextIsNotCOD2 = re.compile(" +(?:[mtsnj](e +|’)|[nv]ous |tu |ils? |elles? )") _zNextIsNotCOD3 = re.compile(r" +([a-zéèî][\w-]+)") def isNextNotCOD (dDA, s, iOffset): if _zNextIsNotCOD1.match(s) or _zNextIsNotCOD2.match(s): return True m = _zNextIsNotCOD3.match(s) if m and morphex(dDA, (iOffset+m.start(1), m.group(1)), ":[123][sp]", ":[DM]"): return True return False _zNextIsVerb1 = re.compile(" +[nmts](?:e |’)") _zNextIsVerb2 = re.compile(r" +(\w[\w-]+)") def isNextVerb (dDA, s, iOffset): if _zNextIsVerb1.match(s): return True m = _zNextIsVerb2.match(s) if m and morph(dDA, (iOffset+m.start(1), m.group(1)), ":[123][sp]", False): return True return False #### Exceptions aREGULARPLURAL = frozenset(["abricot", "amarante", "aubergine", "acajou", "anthracite", "brique", "caca", "café", \ "carotte", "cerise", "chataigne", "corail", "citron", "crème", "grave", "groseille", \ "jonquille", "marron", "olive", "pervenche", "prune", "sable"]) aSHOULDBEVERB = frozenset(["aller", "manger"]) |
Added gc_lang/fr/modules/gce_date_verif.py version [1265100649].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #### GRAMMAR CHECKING ENGINE PLUGIN #### Check date validity _lDay = ["lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"] _dMonth = { "janvier":1, "février":2, "mars":3, "avril":4, "mai":5, "juin":6, "juillet":7, "août":8, "aout":8, "septembre":9, "octobre":10, "novembre":11, "décembre":12 } import datetime def checkDate (day, month, year): "to use if month is a number" try: return datetime.date(int(year), int(month), int(day)) except ValueError: return False except: return True def checkDateWithString (day, month, year): "to use if month is a noun" try: return datetime.date(int(year), _dMonth.get(month.lower(), ""), int(day)) except ValueError: return False except: return True def checkDay (weekday, day, month, year): "to use if month is a number" oDate = checkDate(day, month, year) if oDate and _lDay[oDate.weekday()] != weekday.lower(): return False return True def checkDayWithString (weekday, day, month, year): "to use if month is a noun" oDate = checkDate(day, _dMonth.get(month, ""), year) if oDate and _lDay[oDate.weekday()] != weekday.lower(): return False return True def getDay (day, month, year): "to use if month is a number" return _lDay[datetime.date(int(year), int(month), int(day)).weekday()] def getDayWithString (day, month, year): "to use if month is a noun" return _lDay[datetime.date(int(year), _dMonth.get(month.lower(), ""), int(day)).weekday()] |
Added gc_lang/fr/modules/gce_suggestions.py version [69bb078e98].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 | #### GRAMMAR CHECKING ENGINE PLUGIN: Suggestion mechanisms from . import conj from . import mfsp from . import phonet ## Verbs def suggVerb (sFlex, sWho, funcSugg2=None): aSugg = set() for sStem in stem(sFlex): tTags = conj._getTags(sStem) if tTags: # we get the tense aTense = set() for sMorph in _dAnalyses.get(sFlex, []): # we don’t check if word exists in _dAnalyses, for it is assumed it has been done before for m in re.finditer(sStem+" .*?(:(?:Y|I[pqsf]|S[pq]|K|P))", sMorph): # stem must be used in regex to prevent confusion between different verbs (e.g. sauras has 2 stems: savoir and saurer) if m: if m.group(1) == ":Y": aTense.add(":Ip") aTense.add(":Iq") aTense.add(":Is") elif m.group(1) == ":P": aTense.add(":Ip") else: aTense.add(m.group(1)) for sTense in aTense: if sWho == ":1ś" and not conj._hasConjWithTags(tTags, sTense, ":1ś"): sWho = ":1s" if conj._hasConjWithTags(tTags, sTense, sWho): aSugg.add(conj._getConjWithTags(sStem, tTags, sTense, sWho)) if funcSugg2: aSugg2 = funcSugg2(sFlex) if aSugg2: aSugg.add(aSugg2) if aSugg: return "|".join(aSugg) return "" def suggVerbPpas (sFlex, sWhat=None): aSugg = set() for sStem in stem(sFlex): tTags = conj._getTags(sStem) if tTags: if not sWhat: aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")) aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q2")) aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q3")) aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q4")) aSugg.discard("") elif sWhat == ":m:s": aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")) elif sWhat == ":m:p": if conj._hasConjWithTags(tTags, ":PQ", ":Q2"): aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q2")) else: aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")) elif sWhat == ":f:s": if conj._hasConjWithTags(tTags, ":PQ", ":Q3"): aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q3")) else: aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")) elif sWhat == ":f:p": if conj._hasConjWithTags(tTags, ":PQ", ":Q4"): aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q4")) else: aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")) elif sWhat == ":s": aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")) aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q3")) aSugg.discard("") elif sWhat == ":p": aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q2")) aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q4")) aSugg.discard("") else: aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")) if aSugg: return "|".join(aSugg) return "" def suggVerbTense (sFlex, sTense, sWho): aSugg = set() for sStem in stem(sFlex): if conj.hasConj(sStem, sTense, sWho): aSugg.add(conj.getConj(sStem, sTense, sWho)) if aSugg: return "|".join(aSugg) return "" def suggVerbImpe (sFlex): aSugg = set() for sStem in stem(sFlex): tTags = conj._getTags(sStem) if tTags: if conj._hasConjWithTags(tTags, ":E", ":2s"): aSugg.add(conj._getConjWithTags(sStem, tTags, ":E", ":2s")) if conj._hasConjWithTags(tTags, ":E", ":1p"): aSugg.add(conj._getConjWithTags(sStem, tTags, ":E", ":1p")) if conj._hasConjWithTags(tTags, ":E", ":2p"): aSugg.add(conj._getConjWithTags(sStem, tTags, ":E", ":2p")) if aSugg: return "|".join(aSugg) return "" def suggVerbInfi (sFlex): return "|".join([ sStem for sStem in stem(sFlex) if conj.isVerb(sStem) ]) _dQuiEst = { "je": ":1s", "j’": ":1s", "j’en": ":1s", "j’y": ":1s", \ "tu": ":2s", "il": ":3s", "on": ":3s", "elle": ":3s", "nous": ":1p", "vous": ":2p", "ils": ":3p", "elles": ":3p" } _lIndicatif = [":Ip", ":Iq", ":Is", ":If"] _lSubjonctif = [":Sp", ":Sq"] def suggVerbMode (sFlex, cMode, sSuj): if cMode == ":I": lMode = _lIndicatif elif cMode == ":S": lMode = _lSubjonctif elif cMode.startswith((":I", ":S")): lMode = [cMode] else: return "" sWho = _dQuiEst.get(sSuj.lower(), None) if not sWho: if sSuj[0:1].islower(): # pas un pronom, ni un nom propre return "" sWho = ":3s" aSugg = set() for sStem in stem(sFlex): tTags = conj._getTags(sStem) if tTags: for sTense in lMode: if conj._hasConjWithTags(tTags, sTense, sWho): aSugg.add(conj._getConjWithTags(sStem, tTags, sTense, sWho)) if aSugg: return "|".join(aSugg) return "" ## Nouns and adjectives def suggPlur (sFlex, sWordToAgree=None): "returns plural forms assuming sFlex is singular" if sWordToAgree: if sWordToAgree not in _dAnalyses and not _storeMorphFromFSA(sWordToAgree): return "" sGender = cr.getGender(_dAnalyses.get(sWordToAgree, [])) if sGender == ":m": return suggMasPlur(sFlex) elif sGender == ":f": return suggFemPlur(sFlex) aSugg = set() if "-" not in sFlex: if sFlex.endswith("l"): if sFlex.endswith("al") and len(sFlex) > 2 and _oDict.isValid(sFlex[:-1]+"ux"): aSugg.add(sFlex[:-1]+"ux") if sFlex.endswith("ail") and len(sFlex) > 3 and _oDict.isValid(sFlex[:-2]+"ux"): aSugg.add(sFlex[:-2]+"ux") if _oDict.isValid(sFlex+"s"): aSugg.add(sFlex+"s") if _oDict.isValid(sFlex+"x"): aSugg.add(sFlex+"x") if mfsp.hasMiscPlural(sFlex): aSugg.update(mfsp.getMiscPlural(sFlex)) if aSugg: return "|".join(aSugg) return "" def suggSing (sFlex): "returns singular forms assuming sFlex is plural" if "-" in sFlex: return "" aSugg = set() if sFlex.endswith("ux"): if _oDict.isValid(sFlex[:-2]+"l"): aSugg.add(sFlex[:-2]+"l") if _oDict.isValid(sFlex[:-2]+"il"): aSugg.add(sFlex[:-2]+"il") if _oDict.isValid(sFlex[:-1]): aSugg.add(sFlex[:-1]) if aSugg: return "|".join(aSugg) return "" def suggMasSing (sFlex, bSuggSimil=False): "returns masculine singular forms" # we don’t check if word exists in _dAnalyses, for it is assumed it has been done before aSugg = set() for sMorph in _dAnalyses.get(sFlex, []): if not ":V" in sMorph: # not a verb if ":m" in sMorph or ":e" in sMorph: aSugg.add(suggSing(sFlex)) else: sStem = cr.getLemmaOfMorph(sMorph) if mfsp.isFemForm(sStem): aSugg.update(mfsp.getMasForm(sStem, False)) else: # a verb sVerb = cr.getLemmaOfMorph(sMorph) if conj.hasConj(sVerb, ":PQ", ":Q1") and conj.hasConj(sVerb, ":PQ", ":Q3"): # We also check if the verb has a feminine form. # If not, we consider it’s better to not suggest the masculine one, as it can be considered invariable. aSugg.add(conj.getConj(sVerb, ":PQ", ":Q1")) if bSuggSimil: for e in phonet.selectSimil(sFlex, ":m:[si]"): aSugg.add(e) if aSugg: return "|".join(aSugg) return "" def suggMasPlur (sFlex, bSuggSimil=False): "returns masculine plural forms" # we don’t check if word exists in _dAnalyses, for it is assumed it has been done before aSugg = set() for sMorph in _dAnalyses.get(sFlex, []): if not ":V" in sMorph: # not a verb if ":m" in sMorph or ":e" in sMorph: aSugg.add(suggPlur(sFlex)) else: sStem = cr.getLemmaOfMorph(sMorph) if mfsp.isFemForm(sStem): aSugg.update(mfsp.getMasForm(sStem, True)) else: # a verb sVerb = cr.getLemmaOfMorph(sMorph) if conj.hasConj(sVerb, ":PQ", ":Q2"): aSugg.add(conj.getConj(sVerb, ":PQ", ":Q2")) elif conj.hasConj(sVerb, ":PQ", ":Q1"): sSugg = conj.getConj(sVerb, ":PQ", ":Q1") # it is necessary to filter these flexions, like “succédé” or “agi” that are not masculine plural. if sSugg.endswith("s"): aSugg.add(sSugg) if bSuggSimil: for e in phonet.selectSimil(sFlex, ":m:[pi]"): aSugg.add(e) if aSugg: return "|".join(aSugg) return "" def suggFemSing (sFlex, bSuggSimil=False): "returns feminine singular forms" # we don’t check if word exists in _dAnalyses, for it is assumed it has been done before aSugg = set() for sMorph in _dAnalyses.get(sFlex, []): if not ":V" in sMorph: # not a verb if ":f" in sMorph or ":e" in sMorph: aSugg.add(suggSing(sFlex)) else: sStem = cr.getLemmaOfMorph(sMorph) if mfsp.isFemForm(sStem): aSugg.add(sStem) else: # a verb sVerb = cr.getLemmaOfMorph(sMorph) if conj.hasConj(sVerb, ":PQ", ":Q3"): aSugg.add(conj.getConj(sVerb, ":PQ", ":Q3")) if bSuggSimil: for e in phonet.selectSimil(sFlex, ":f:[si]"): aSugg.add(e) if aSugg: return "|".join(aSugg) return "" def suggFemPlur (sFlex, bSuggSimil=False): "returns feminine plural forms" # we don’t check if word exists in _dAnalyses, for it is assumed it has been done before aSugg = set() for sMorph in _dAnalyses.get(sFlex, []): if not ":V" in sMorph: # not a verb if ":f" in sMorph or ":e" in sMorph: aSugg.add(suggPlur(sFlex)) else: sStem = cr.getLemmaOfMorph(sMorph) if mfsp.isFemForm(sStem): aSugg.add(sStem+"s") else: # a verb sVerb = cr.getLemmaOfMorph(sMorph) if conj.hasConj(sVerb, ":PQ", ":Q4"): aSugg.add(conj.getConj(sVerb, ":PQ", ":Q4")) if bSuggSimil: for e in phonet.selectSimil(sFlex, ":f:[pi]"): aSugg.add(e) if aSugg: return "|".join(aSugg) return "" def hasFemForm (sFlex): for sStem in stem(sFlex): if mfsp.isFemForm(sStem) or conj.hasConj(sStem, ":PQ", ":Q3"): return True if phonet.hasSimil(sFlex, ":f"): return True return False def hasMasForm (sFlex): for sStem in stem(sFlex): if mfsp.isFemForm(sStem) or conj.hasConj(sStem, ":PQ", ":Q1"): # what has a feminine form also has a masculine form return True if phonet.hasSimil(sFlex, ":m"): return True return False def switchGender (sFlex, bPlur=None): # we don’t check if word exists in _dAnalyses, for it is assumed it has been done before aSugg = set() if bPlur == None: for sMorph in _dAnalyses.get(sFlex, []): if ":f" in sMorph: if ":s" in sMorph: aSugg.add(suggMasSing(sFlex)) elif ":p" in sMorph: aSugg.add(suggMasPlur(sFlex)) elif ":m" in sMorph: if ":s" in sMorph: aSugg.add(suggFemSing(sFlex)) elif ":p" in sMorph: aSugg.add(suggFemPlur(sFlex)) else: aSugg.add(suggFemSing(sFlex)) aSugg.add(suggFemPlur(sFlex)) elif bPlur: for sMorph in _dAnalyses.get(sFlex, []): if ":f" in sMorph: aSugg.add(suggMasPlur(sFlex)) elif ":m" in sMorph: aSugg.add(suggFemPlur(sFlex)) else: for sMorph in _dAnalyses.get(sFlex, []): if ":f" in sMorph: aSugg.add(suggMasSing(sFlex)) elif ":m" in sMorph: aSugg.add(suggFemSing(sFlex)) if aSugg: return "|".join(aSugg) return "" def switchPlural (sFlex): # we don’t check if word exists in _dAnalyses, for it is assumed it has been done before aSugg = set() for sMorph in _dAnalyses.get(sFlex, []): if ":s" in sMorph: aSugg.add(suggPlur(sFlex)) elif ":p" in sMorph: aSugg.add(suggSing(sFlex)) if aSugg: return "|".join(aSugg) return "" def hasSimil (sWord, sPattern=None): return phonet.hasSimil(sWord, sPattern) def suggSimil (sWord, sPattern=None): "return list of words phonetically similar to sWord and whom POS is matching sPattern" # we don’t check if word exists in _dAnalyses, for it is assumed it has been done before aSugg = phonet.selectSimil(sWord, sPattern) for sMorph in _dAnalyses.get(sWord, []): for e in conj.getSimil(sWord, sMorph): aSugg.add(e) #aSugg = aSugg.union(conj.getSimil(sWord, sMorph)) if aSugg: return "|".join(aSugg) return "" def suggCeOrCet (sWord): if re.match("(?i)[aeéèêiouyâîï]", sWord): return "cet" if sWord[0:1] == "h" or sWord[0:1] == "H": return "ce|cet" return "ce" def suggLesLa (sWord): # we don’t check if word exists in _dAnalyses, for it is assumed it has been done before if any( ":p" in sMorph for sMorph in _dAnalyses.get(sWord, []) ): return "les|la" return "la" _zBinary = re.compile("^[01]+$") def formatNumber (s): nLen = len(s) if nLen <= 4: return s sRes = "" # nombre ordinaire nEnd = nLen while nEnd > 0: nStart = max(nEnd-3, 0) sRes = s[nStart:nEnd] + " " + sRes if sRes else s[nStart:nEnd] nEnd = nEnd - 3 # binaire if _zBinary.search(s): nEnd = nLen sBin = "" while nEnd > 0: nStart = max(nEnd-4, 0) sBin = s[nStart:nEnd] + " " + sBin if sBin else s[nStart:nEnd] nEnd = nEnd - 4 sRes += "|" + sBin # numéros de téléphone if nLen == 10: if s.startswith("0"): sRes += "|" + s[0:2] + " " + s[2:4] + " " + s[4:6] + " " + s[6:8] + " " + s[8:] # téléphone français if s[1] == "4" and (s[2]=="7" or s[2]=="8" or s[2]=="9"): sRes += "|" + s[0:4] + " " + s[4:6] + " " + s[6:8] + " " + s[8:] # mobile belge sRes += "|" + s[0:3] + " " + s[3:6] + " " + s[6:8] + " " + s[8:] # téléphone suisse sRes += "|" + s[0:4] + " " + s[4:7] + "-" + s[7:] # téléphone canadien ou américain elif nLen == 9 and s.startswith("0"): sRes += "|" + s[0:3] + " " + s[3:5] + " " + s[5:7] + " " + s[7:9] # fixe belge 1 sRes += "|" + s[0:2] + " " + s[2:5] + " " + s[5:7] + " " + s[7:9] # fixe belge 2 return sRes def formatNF (s): try: m = re.match("NF[ -]?(C|E|P|Q|S|X|Z|EN(?:[ -]ISO|))[ -]?([0-9]+(?:[/‑-][0-9]+|))", s) if not m: return "" return "NF " + m.group(1).upper().replace(" ", " ").replace("-", " ") + " " + m.group(2).replace("/", "‑").replace("-", "‑") except: traceback.print_exc() return "# erreur #" def undoLigature (c): if c == "fi": return "fi" elif c == "fl": return "fl" elif c == "ff": return "ff" elif c == "ffi": return "ffi" elif c == "ffl": return "ffl" elif c == "ſt": return "ft" elif c == "st": return "st" return "_" |
Added gc_lang/fr/modules/lexicographe.py version [7b36598d08].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 | # Grammalecte - Lexicographe # License: MPL 2 import re import traceback _dTAGS = { ':G': "", ':N': " nom,", ':A': " adjectif,", ':M1': " prénom,", ':M2': " patronyme,", ':MP': " nom propre,", ':W': " adverbe,", ':X': " adverbe de négation,", ':U': " adverbe interrogatif,", ':J': " interjection,", ':B': " nombre,", ':T': " titre,", ':R': " préposition,", ':Rv': " préposition verbale,", ':D': " déterminant,", ':Dd': " déterminant démonstratif,", ':De': " déterminant exclamatif,", ':Dp': " déterminant possessif,", ':Di': " déterminant indéfini,", ':Dn': " déterminant négatif,", ':Od': " pronom démonstratif,", ':Oi': " pronom indéfini,", ':On': " pronom indéfini négatif,", ':Ot': " pronom interrogatif,", ':Or': " pronom relatif,", ':Ow': " pronom adverbial,", ':Os': " pronom personnel sujet,", ':Oo': " pronom personnel objet,", ':C': " conjonction,", ':Ĉ': " conjonction (él.),", ':Cc': " conjonction de coordination,", ':Cs': " conjonction de subordination,", ':Ĉs': " conjonction de subordination (él.),", ':Ŵ': " locution adverbiale (él.),", ':Ñ': " locution nominale (él.),", ':Â': " locution adjectivale (él.),", ':Ṽ': " locution verbale (él.),", ':Ŕ': " locution prépositive (él.),", ':Ĵ': " locution interjective (él.),", ':Zp': " préfixe,", ':Zs': " suffixe,", ':V1': " verbe (1ᵉʳ gr.),", ':V2': " verbe (2ᵉ gr.),", ':V3': " verbe (3ᵉ gr.),", ':V0e': " verbe,", ':V0a': " verbe,", ':O1': " 1ʳᵉ pers.,", ':O2': " 2ᵉ pers.,", ':O3': " 3ᵉ pers.,", ':e': " épicène", ':m': " masculin", ':f': " féminin", ':s': " singulier", ':p': " pluriel", ':i': " invariable", ':Y': " infinitif,", ':P': " participe présent,", ':Q': " participe passé,", ':Ip': " présent,", ':Iq': " imparfait,", ':Is': " passé simple,", ':If': " futur,", ':K': " conditionnel présent,", ':Sp': " subjonctif présent,", ':Sq': " subjonctif imparfait,", ':E': " impératif,", ':1s': " 1ʳᵉ p. sg.,", ':1ŝ': " présent interr. 1ʳᵉ p. sg.,", ':1ś': " présent interr. 1ʳᵉ p. sg.,", ':2s': " 2ᵉ p. sg.,", ':3s': " 3ᵉ p. sg.,", ':1p': " 1ʳᵉ p. pl.,", ':2p': " 2ᵉ p. pl.,", ':3p': " 3ᵉ p. pl.,", ':3p!': " 3ᵉ p. pl.,", ';S': " : symbole (unité de mesure)", '/*': "", '/C': " {classique}", '/M': "", '/R': " {réforme}", '/A': "", '/X': "" } _dPFX = { 'd': "(de), déterminant épicène invariable", 'l': "(le/la), déterminant masculin/féminin singulier", 'j': "(je), pronom personnel sujet, 1ʳᵉ pers., épicène singulier", 'm': "(me), pronom personnel objet, 1ʳᵉ pers., épicène singulier", 't': "(te), pronom personnel objet, 2ᵉ pers., épicène singulier", 's': "(se), pronom personnel objet, 3ᵉ pers., épicène singulier/pluriel", 'n': "(ne), adverbe de négation", 'c': "(ce), pronom démonstratif, masculin singulier/pluriel", 'ç': "(ça), pronom démonstratif, masculin singulier", 'qu': "(que), conjonction de subordination", 'lorsqu': "(lorsque), conjonction de subordination", 'quoiqu': "(quoique), conjonction de subordination", 'jusqu': "(jusque), préposition", } _dAD = { 'je': " pronom personnel sujet, 1ʳᵉ pers. sing.", 'tu': " pronom personnel sujet, 2ᵉ pers. sing.", 'il': " pronom personnel sujet, 3ᵉ pers. masc. sing.", 'on': " pronom personnel sujet, 3ᵉ pers. sing. ou plur.", 'elle': " pronom personnel sujet, 3ᵉ pers. fém. sing.", 'nous': " pronom personnel sujet/objet, 1ʳᵉ pers. plur.", 'vous': " pronom personnel sujet/objet, 2ᵉ pers. plur.", 'ils': " pronom personnel sujet, 3ᵉ pers. masc. plur.", 'elles': " pronom personnel sujet, 3ᵉ pers. masc. plur.", "là": " particule démonstrative", "ci": " particule démonstrative", 'le': " COD, masc. sing.", 'la': " COD, fém. sing.", 'les': " COD, plur.", 'moi': " COI (à moi), sing.", 'toi': " COI (à toi), sing.", 'lui': " COI (à lui ou à elle), sing.", 'nous2': " COI (à nous), plur.", 'vous2': " COI (à vous), plur.", 'leur': " COI (à eux ou à elles), plur.", 'y': " pronom adverbial", "m'y": " (me) pronom personnel objet + (y) pronom adverbial", "t'y": " (te) pronom personnel objet + (y) pronom adverbial", "s'y": " (se) pronom personnel objet + (y) pronom adverbial", 'en': " pronom adverbial", "m'en": " (me) pronom personnel objet + (en) pronom adverbial", "t'en": " (te) pronom personnel objet + (en) pronom adverbial", "s'en": " (se) pronom personnel objet + (en) pronom adverbial", } class Lexicographe: def __init__ (self, oDict): self.oDict = oDict self._zElidedPrefix = re.compile("(?i)^([dljmtsncç]|quoiqu|lorsqu|jusqu|puisqu|qu)['’](.+)") self._zCompoundWord = re.compile("(?i)(\\w+)-((?:les?|la)-(?:moi|toi|lui|[nv]ous|leur)|t-(?:il|elle|on)|y|en|[mts][’'](?:y|en)|les?|l[aà]|[mt]oi|leur|lui|je|tu|ils?|elles?|on|[nv]ous)$") self._zTag = re.compile("[:;/][\\w*][^:;/]*") def analyzeWord (self, sWord): try: if not sWord: return (None, None) if sWord.count("-") > 4: return (["élément complexe indéterminé"], None) if sWord.isdigit(): return (["nombre"], None) aMorph = [] # préfixes élidés m = self._zElidedPrefix.match(sWord) if m: sWord = m.group(2) aMorph.append( "{}’ : {}".format(m.group(1), _dPFX.get(m.group(1).lower(), "[?]")) ) # mots composés m2 = self._zCompoundWord.match(sWord) if m2: sWord = m2.group(1) # Morphologies lMorph = self.oDict.getMorph(sWord) if len(lMorph) > 1: # sublist aMorph.append( (sWord, [ self.formatTags(s) for s in lMorph if ":" in s ]) ) elif len(lMorph) == 1: aMorph.append( "{} : {}".format(sWord, self.formatTags(lMorph[0])) ) else: aMorph.append( "{} : inconnu du dictionnaire".format(sWord) ) # suffixe d’un mot composé if m2: aMorph.append( "-{} : {}".format(m2.group(2), self._formatSuffix(m2.group(2).lower())) ) # Verbes aVerb = set([ s[1:s.find(" ")] for s in lMorph if ":V" in s ]) return (aMorph, aVerb) except: traceback.print_exc() return (["#erreur"], None) def formatTags (self, sTags): sRes = "" sTags = re.sub("(?<=V[1-3])[itpqnmr_eaxz]+", "", sTags) sTags = re.sub("(?<=V0[ea])[itpqnmr_eaxz]+", "", sTags) for m in self._zTag.finditer(sTags): sRes += _dTAGS.get(m.group(0), " [{}]".format(m.group(0))) if sRes.startswith(" verbe") and not sRes.endswith("infinitif"): sRes += " [{}]".format(sTags[1:sTags.find(" ")]) return sRes.rstrip(",") def _formatSuffix (self, s): if s.startswith("t-"): return "“t” euphonique +" + _dAD.get(s[2:], "[?]") if not "-" in s: return _dAD.get(s.replace("’", "'"), "[?]") if s.endswith("ous"): s += '2' nPos = s.find("-") return "%s +%s" % (_dAD.get(s[:nPos], "[?]"), _dAD.get(s[nPos+1:], "[?]")) |
Added gc_lang/fr/modules/mfsp.py version [3f4814b5d6].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | # Masculins, féminins, singuliers et pluriels from .mfsp_data import lTagMiscPlur as _lTagMiscPlur from .mfsp_data import lTagMasForm as _lTagMasForm from .mfsp_data import dMiscPlur as _dMiscPlur from .mfsp_data import dMasForm as _dMasForm def isFemForm (sWord): "returns True if sWord exists in _dMasForm" return sWord in _dMasForm def getMasForm (sWord, bPlur): "returns masculine form with feminine form" if sWord in _dMasForm: return [ _modifyStringWithSuffixCode(sWord, sTag) for sTag in _whatSuffixCodes(sWord, bPlur) ] return [] def hasMiscPlural (sWord): "returns True if sWord exists in dPlurMisc" return sWord in _dMiscPlur def getMiscPlural (sWord): "returns plural form with singular form" if sWord in _dMiscPlur: return [ _modifyStringWithSuffixCode(sWord, sTag) for sTag in _lTagMiscPlur[_dMiscPlur[sWord]].split("|") ] return [] def _whatSuffixCodes (sWord, bPlur): "necessary only for dMasFrom" sSfx = _lTagMasForm[_dMasForm[sWord]] if "/" in sSfx: if bPlur: return sSfx[sSfx.find("/")+1:].split("|") return sSfx[:sSfx.find("/")].split("|") return sSfx.split("|") def _modifyStringWithSuffixCode (sWord, sSfx): "returns sWord modified by sSfx" if not sSfx: return "" if sSfx == "0": return sWord try: return sWord[:-(ord(sSfx[0])-48)] + sSfx[1:] if sSfx[0] != '0' else sWord + sSfx[1:] # 48 is the ASCII code for "0" except: return "## erreur, code : " + str(sSfx) + " ##" |
Added gc_lang/fr/modules/mfsp_data.py version [8ed17e4282].
cannot compute difference between binary files
Added gc_lang/fr/modules/phonet.py version [31589198ae].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | # Grammalecte - Suggestion phonétique # License: GPL 3 import re from .phonet_data import dWord as _dWord from .phonet_data import lSet as _lSet from .phonet_data import dMorph as _dMorph def hasSimil (sWord, sPattern=None): "return True if there is list of words phonetically similar to sWord" if not sWord: return False if sWord in _dWord: if sPattern: return any(re.search(sPattern, sMorph) for sSimil in getSimil(sWord) for sMorph in _dMorph.get(sSimil, [])) return True if sWord[0:1].isupper(): sWord = sWord.lower() if sWord in _dWord: if sPattern: return any(re.search(sPattern, sMorph) for sSimil in getSimil(sWord) for sMorph in _dMorph.get(sSimil, [])) return True return False def getSimil (sWord): "return list of words phonetically similar to sWord" if not sWord: return [] if sWord in _dWord: return _lSet[_dWord[sWord]] if sWord[0:1].isupper(): sWord = sWord.lower() if sWord in _dWord: return _lSet[_dWord[sWord]] return [] def selectSimil (sWord, sPattern): "return list of words phonetically similar to sWord and whom POS is matching sPattern" if not sPattern: return set(getSimil(sWord)) aSelect = set() for sSimil in getSimil(sWord): for sMorph in _dMorph.get(sSimil, []): if re.search(sPattern, sMorph): aSelect.add(sSimil) return aSelect |
Added gc_lang/fr/modules/phonet_data.py version [1ca07d9e62].
cannot compute difference between binary files
Added gc_lang/fr/modules/textformatter.py version [5aeef53f27].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 | #!python3 import re from ..echo import echo dReplTable = { # surnumerary_spaces "start_of_paragraph": [("^[ ]+", "")], "end_of_paragraph": [("[ ]+$", "")], "between_words": [(" | ", " "), # espace + espace insécable -> espace (" +", " "), # espaces surnuméraires (" +", " ")], # espaces insécables surnuméraires "before_punctuation": [(" +(?=[.,…])", "")], "within_parenthesis": [("\\([ ]+", "("), ("[ ]+\\)", ")")], "within_square_brackets": [("\\[[ ]+", "["), ("[ ]+\\]", "]")], "within_quotation_marks": [("“[ ]+", "“"), ("[ ]”", "”")], ## non-breaking spaces # espaces insécables "nbsp_before_punctuation": [("(?<=[]\\w…)»}])([:;?!])[ ]", " \\1 "), ("(?<=[]\\w…)»}])([:;?!])$", " \\1"), ("[ ]+([:;?!])", " \\1")], "nbsp_within_quotation_marks": [("«(?=\\w)", "« "), ("«[ ]+", "« "), ("(?<=[\\w.!?])»", " »"), ("[ ]+»", " »")], "nbsp_within_numbers": [("(\\d)[ ](?=\\d)", "\\1 ")], # espaces insécables fines "nnbsp_before_punctuation": [("(?<=[]\\w…)»}])([;?!])[ ]", " \\1 "), ("(?<=[]\\w…)»}])([;?!])$", " \\1"), ("[ ]+([;?!])", " \\1"), ("(?<=[]\\w…)»}]):", " :"), ("[ ]+:", " :")], "nnbsp_within_quotation_marks":[("«(?=\\w)", "« "), ("«[ ]+", "« "), ("(?<=[\\w.!?])»", " »"), ("[ ]+»", " »")], "nnbsp_within_numbers": [("(\\d)[ ](\\d)", "\\1 \\2")], # common "nbsp_before_symbol": [("(\\d) ?([%‰€$£¥˚Ω℃])", "\\1 \\2")], "nbsp_before_units": [("(?<=[0-9⁰¹²³⁴⁵⁶⁷⁸⁹]) ?([kcmµn]?(?:[slgJKΩ]|m[²³]?|Wh?|Hz|dB)|[%‰]|°C)\\b", " \\1")], "nbsp_repair": [("(?<=[[(])[ ]([!?:;])", "\\1"), ("(https?|ftp)[ ]:(?=//)", "\\1:"), ("&([a-z]+)[ ];", "&\\1;"), ("&#([0-9]+|x[0-9a-fA-F]+)[ ];", "&#\\1;")], ## missing spaces "add_space_after_punctuation": [("([;!…])(?=\\w)", "\\1 "), ("[?](?=[A-ZÉÈÊÂÀÎ])", "? "), ("\\.(?=[A-ZÉÈÎ][a-zA-ZàâÂéÉèÈêÊîÎïÏôÔöÖûÛüÜùÙ])", ". "), ("\\.(?=À)", ". "), ("(?i)([,:])(?=[a-zàâäéèêëîïôöûüù])", "\\1 "), ("(?i)([a-zàâäéèêëîïôöûüù]),(?=[0-9])", "\\1, ")], "add_space_around_hyphens": [(" ([-–—])(?=[a-zàâäéèêëîïôöûüù\"«“'‘])", " \\1 "), ("(?<=[a-zàâäéèêëîïôöûüù\"»”'’])([-–—]) ", " \\1 ")], "add_space_repair": [("DnT, ([wA])\\b", "DnT,\\1")], ## erase "erase_non_breaking_hyphens": [("", "")], ## typographic signs "ts_apostrophe": [ ("(?i)\\b([ldnjmtscç])['´‘′`](?=\\w)", "\\1’"), ("(?i)(qu|jusqu|lorsqu|puisqu|quoiqu|quelqu|presqu|entr|aujourd|prud)['´‘′`]", "\\1’") ], "ts_ellipsis": [ ("\\.\\.\\.", "…"), ("(?<=…)[.][.]", "…"), ("…[.](?![.])", "…") ], "ts_n_dash_middle": [ (" [-—] ", " – "), (" [-—],", " –,") ], "ts_m_dash_middle": [ (" [-–] ", " — "), (" [-–],", " —,") ], "ts_n_dash_start": [ ("^[-—][ ]", "– "), ("^– ", "– "), ("^[-–—](?=\\w)", "– ") ], "ts_m_dash_start": [ ("^[-–][ ]", "— "), ("^— ", "— "), ("^«[ ][—–-][ ]", "« — "), ("^[-–—](?=\\w)", "— ") ], "ts_quotation_marks": [ (u'"(\\w+)"', "“$1”"), ("''(\\w+)''", "“$1”"), ("'(\\w+)'", "“$1”"), ("^(?:\"|'')(?=\\w)", "« "), (" (?:\"|'')(?=\\w)", " « "), ("\\((?:\"|'')(?=\\w)", "(« "), ("(?<=\\w)(?:\"|'')$", " »"), ("(?<=\\w)(?:\"|'')(?=[] ,.:;?!…)])", " »"), (u'(?<=[.!?…])" ', " » "), (u'(?<=[.!?…])"$', " »") ], "ts_spell": [ ("coeur", "cœur"), ("Coeur", "Cœur"), ("coel(?=[aeio])", "cœl"), ("Coel(?=[aeio])", "Cœl"), ("choeur", "chœur"), ("Choeur", "Chœur"), ("foet", "fœt"), ("Foet", "Fœt"), ("oeil", "œil"), ("Oeil", "Œil"), ("oeno", "œno"), ("Oeno", "Œno"), ("oesoph", "œsoph"), ("Oesoph", "Œsoph"), ("oestro", "œstro"), ("Oestro", "Œstro"), ("oeuf", "œuf"), ("Oeuf", "Œuf"), ("oeuvr", "œuvr"), ("Oeuvr", "Œuvr"), ("moeur", "mœur"), ("Moeur", "Mœur"), ("noeu", "nœu"), ("Noeu", "Nœu"), ("soeur", "sœur"), ("Soeur", "Sœur"), ("voeu", "vœu"), ("Voeu", "Vœu"), ("aequo", "æquo"), ("Aequo", "Æquo"), ("\\bCa\\b", "Ça"), (" ca\\b", " ça"), ("\\bdej[aà]\\b", "déjà"), ("\\bplutot\\b", "plutôt"), ("\\bmeme\\b", "même"), ("\\bmemes\\b", "mêmes"), ("\\bMeme\\b", "Même"), ("\\b([cC]e(?:ux|lles?|lui))-la\\b", "$1-là"), ("\\bmalgre\\b", "malgré"), ("\\bMalgre\\b", "Malgré"), ("\\betre\\b", "être"), ("\\bEtre\\b", "Être"), ("\\btres\\b", "très"), ("\\bTres\\b", "Très"), ("\\bEtai([ts]|ent)\\b", "Étai$1"), ("\\bE(tat|cole|crit|poque|tude|ducation|glise|conomi(?:qu|)e|videmment|lysée|tienne|thiopie|cosse|gypt(?:e|ien)|rythrée|pinal|vreux)", "É$1") ], "ts_ligature_ffi_on": [("ffi", "ffi")], "ts_ligature_ffl_on": [("ffl", "ffl")], "ts_ligature_fi_on": [("fi", "fi")], "ts_ligature_fl_on": [("fl", "fl")], "ts_ligature_ff_on": [("ff", "ff")], "ts_ligature_ft_on": [("ft", "ſt")], "ts_ligature_st_on": [("st", "st")], "ts_ligature_fi_off": [("fi", "fi")], "ts_ligature_fl_off": [("fl", "fl")], "ts_ligature_ff_off": [("ff", "ff")], "ts_ligature_ffi_off": [("ffi", "ffi")], "ts_ligature_ffl_off": [("ffl", "ffl")], "ts_ligature_ft_off": [("ſt", "ft")], "ts_ligature_st_off": [("st", "st")], "ts_units": [ ("\\bN\\.([ms])\\b", "N·\\1"), # N·m et N·m-1, N·s ("\\bW\\.h\\b", "W·h"), ("\\bPa\\.s\\b", "Pa·s"), ("\\bA\\.h\\b", "A·h"), ("\\bΩ\\.m\\b", "Ω·m"), ("\\bS\\.m\\b", "S·m"), ("\\bg\\.s(?=-1)\\b", "g·s"), ("\\bm\\.s(?=-[12])\\b", "m·s"), ("\\bg\\.m(?=2|-3)\\b", "g·m"), ("\\bA\\.m(?=-1)\\b", "A·m"), ("\\bJ\\.K(?=-1)\\b", "J·K"), ("\\bW\\.m(?=-2)\\b", "W·m"), ("\\bcd\\.m(?=-2)\\b", "cd·m"), ("\\bC\\.kg(?=-1)\\b", "C·kg"), ("\\bH\\.m(?=-1)\\b", "H·m"), ("\\bJ\\.kg(?=-1)\\b", "J·kg"), ("\\bJ\\.m(?=-3)\\b", "J·m"), ("\\bm[2²]\\.s\\b", "m²·s"), ("\\bm[3³]\\.s(?=-1)\\b", "m³·s"), #("\\bJ.kg-1.K-1\\b", "J·kg-1·K-1"), #("\\bW.m-1.K-1\\b", "W·m-1·K-1"), #("\\bW.m-2.K-1\\b", "W·m-2·K-1"), ("\\b(Y|Z|E|P|T|G|M|k|h|da|d|c|m|µ|n|p|f|a|z|y)Ω\\b", "\\1Ω") ], ## misc "ordinals_exponant": [ ("\\b([0-9]+)(?:i?[èe]me|è|e)\\b", "\\1ᵉ"), ("\\b([XVICL]+)(?:i?[èe]me|è)\\b", "\\1ᵉ"), ("(?<=\\b(au|l[ea]|du) [XVICL])e\\b", "ᵉ"), ("(?<=\\b[XVI])e(?= siècle)", "ᵉ"), ("(?<=\\b[1I])er\\b", "ᵉʳ"), ("(?<=\\b[1I])re\\b", "ʳᵉ") ], "ordinals_no_exponant": [ ("\\b([0-9]+)(?:i?[èe]me|è)\\b", "\\1e"), ("\\b([XVICL]+)(?:i?[èe]me|è)\\b", "\\1e"), ("(?<=\\b[1I])ᵉʳ\\b", "er"), ("(?<=\\b[1I])ʳᵉ\\b", "er")], "etc": [ ("etc(…|[.][.][.]?)", "etc."), ("(?<!,) etc[.]", ", etc.") ], ## missing hyphens "mh_interrogatives": [ ("[ -]t[’'](?=il\\b|elle|on\\b)", "-t-"), (" t-(?=il|elle|on)", "-t-"), ("[ -]t[’'-](?=ils|elles)", "-"), ("(?<=[td])-t-(?=il|elle|on)", "-") ], "mh_numbers": [ ("dix (sept|huit|neuf)", "dix-\\1"), ("quatre vingt", "quatre-vingt"), ("(soixante|quatre-vingt) dix", "\\1-dix"), ("(vingt|trente|quarante|cinquante|soixante(?:-dix|)|quatre-vingt(?:-dix|)) (deux|trois|quatre|cinq|six|sept|huit|neuf)\\b", "\\1-\\2")], "mh_frequent_words": [ ("(?i)ce(lles?|lui|ux) (ci|là)\\b", "ce\\1-\\2"), ("(?i)(?<!-)\\b(ci) (joint|desso?us|contre|devant|avant|après|incluse|g[îi]t|gisent)", "\\1-\\2"), ("vis à vis", "vis-à-vis"), ("Vis à vis", "Vis-à-vis"), ("week end", "week-end"), ("Week end", "Week-end"), ("(?i)(plus|moins) value", "\\1-value") ], ## missing apostrophes "ma_word": [("(?i)(qu|lorsqu|puisqu|quoiqu|presqu|jusqu|aujourd|entr|quelqu|prud) ", "\\1’")], "ma_1letter_lowercase": [("\\b([ldjnmtscç]) (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "\\1’")], "ma_1letter_uppercase": [("\\b([LDJNMTSCÇ]) (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "\\1’")] } lOptRepl = [ ("ts_units", True), ("start_of_paragraph", True), ("end_of_paragraph", True), ("between_words", True), ("before_punctuation", True), ("within_parenthesis", True), ("within_square_brackets", True), ("within_quotation_marks", True), ("nbsp_before_punctuation", True), ("nbsp_within_quotation_marks", True), ("nbsp_within_numbers", True), ("nnbsp_before_punctuation", False), ("nnbsp_within_quotation_marks", False), ("nnbsp_within_numbers", False), ("nbsp_before_symbol", True), ("nbsp_before_units", True), ("nbsp_repair", True), ("add_space_after_punctuation", True), ("add_space_around_hyphens", True), ("add_space_repair", True), ("erase_non_breaking_hyphens", False), ("ts_apostrophe", True), ("ts_ellipsis", True), ("ts_n_dash_middle", True), ("ts_m_dash_middle", False), ("ts_n_dash_start", False), ("ts_m_dash_start", True), ("ts_quotation_marks", True), ("ts_spell", True), ("ts_ligature_ffi_on", False), ("ts_ligature_ffl_on", False), ("ts_ligature_fi_on", False), ("ts_ligature_fl_on", False), ("ts_ligature_ff_on", False), ("ts_ligature_ft_on", False), ("ts_ligature_st_on", False), ("ts_ligature_fi_off", False), ("ts_ligature_fl_off", False), ("ts_ligature_ff_off", False), ("ts_ligature_ffi_off", False), ("ts_ligature_ffl_off", False), ("ts_ligature_ft_off", False), ("ts_ligature_st_off", False), ("ordinals_exponant", False), ("ordinals_no_exponant", True), ("etc", True), ("mh_interrogatives", True), ("mh_numbers", True), ("mh_frequent_words", True), ("ma_word", True), ("ma_1letter_lowercase", False), ("ma_1letter_uppercase", False), ] class TextFormatter: def __init__ (self): for sOpt, lTup in dReplTable.items(): for i, t in enumerate(lTup): lTup[i] = (re.compile(t[0]), t[1]) def formatText (self, sText, **args): for sOptName, bVal in lOptRepl: if bVal: for zRgx, sRep in dReplTable[sOptName]: #echo("{} --> {}".format(zRgx.pattern, sRep)) sText = zRgx.sub(sRep, sText) #echo(sText) return sText |
Added gc_lang/fr/options.txt version [3adef69fae].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | # Options and title texts for the Settings and conditional rules # # The Lightproof dialogs contain only grouped checkboxes. # # Format of the dialog definition: # # GroupID: OptionID, OptionID ... # Group2ID: OptionID, OptionID ... # ... # [Language_code=title of the window] # OptionID=title of the option # Option2ID=title of the option # # The first language is the default language for other locales # (use en_US or the common language of your country) # # The OptionIDs declared here are used in the rules, too. For example: # # foo <<- option("style") ->> bar # bar is far better # # this rule depends from the state of the "style" checkbox. # options (starred options are checked) basic: *typo *apos, *esp *nbsp, *tu *maj, *num *virg, *unit *nf, liga mapos, chim ocr gramm: *conf *sgpl, *gn verbs: *infi *gv *ppas, *imp *inte *vmode style: *bs *pleo, redon1 redon2, neg misc: *date mc debug: idrule # titles [en_US=Grammar checking (French)] basic=Typography typo=Typographical glyphs apos=Typographical apostrophe\nDetects typewriter apostrophes. You may get automatically typographical apostrophes in Tools > Autocorrect options > Localized options > Single quote > Replace (checkbox). esp=Unuseful spaces\nChecks spaces at the beginning and the end of lines. nbsp=Non-breakable spaces\nChecks the use of non-breakable spaces with the following punctuation marks: « ! ? : ; » (deactivate it if you use a Graphite font) eif=Narrow non breaking spaces [!]\nTo set narrow non breaking spaces before the characters “? ! ;” maj=Capitals\nChecks the use of uppercase and lowercase letters (i.e. « la raison d’État », « les Européens »). virg=Commas\nMissing commas before “mais”, “car” and “etc.”. tu=Hyphens\nChecks missing or useless hyphens. num=Numbers\nLarge numbers and « O » instead of « 0 ». unit=Non-breaking spaces before units of measurement nf=French standards liga=Report typographical ligatures\nLigatures of fi, fl, ff, ffi, ffl, ft, st. mapos=Missing apostrophes after single letters [!]\nMissing apostrophes after l d s n c j m t ç. This option is mostly useful to detect defects of digitized texts and is not recommended for scientific texts. chim=Chemistry [!]\nTypography for molecules (H₂O, CO₂, etc.) ocr=OCR errors [!]\nWarning: many false positives. gramm=Agreement, plurals, confusions conf=Confusions, homonyms and false friends\nSeeks errors often due to homonymy (i.e. confusions between « faîte » et « faite »). sgpl=Plural (locutions)\nChecks the use of plural and singular in locutions. gn=Agreement (gender and number)\nAgreement between nouns and adjectives. verbs=Verbs gv=Conjugation\nAgreement between verbs and their subject. infi=Infinitive\nChecks confusions between infinitive forms and other forms. imp=Imperative mood\nChecks particularly verbs at second person singular (i.e. errors such as: « vas … », « prend … », « manges … »). inte=Interrogative mood\nChecks interrogative forms and suggests linking the personal pronouns with verbs. ppas=Past participles, adjectives\nChecks subject agreement with past participles and adjectives vmode=Verbal modes style=Style bs=Popular style\nUnderlines misuse of language though informal and commonly used. pleo=Pleonasms\nSemantic replications, like « au jour d’aujourd’hui », « monter en haut », etc. neg=Negation adverb [!]\nNe … pas, ne … jamais, etc. redon1=Duplicates in paragraph [!]\nAre excluded grammatical words, words beginning by a capital letter, and also “être” and “avoir”. redon2=Duplicates in sentence [!]\nAre excluded grammatical words, and also “être” and “avoir”. misc=Miscellaneous mc=Compound words [!]\nCheck if words with hyphen exist in the dictionary (except those beginning by ex-, mi-, quasi-, semi-, non-, demi- and other common prefixes) date=Date validity debug=Debug idrule=Display control rule identifier [!]\nDisplay control rule identifier in the context menu message [fr_FR=Grammalecte (Français)] basic=Typographie typo=Signes typographiques apos=Apostrophe typographique\nCorrection des apostrophes droites. Automatisme possible dans le menu Outils > Options d’autocorrection > Options linguistiques > Guillemets simples > Remplacer (à cocher) esp=Espaces surnuméraires\nSignale les espaces inutiles en début et en fin de ligne. nbsp=Espaces insécables\nVérifie les espaces insécables avec les ponctuations « ! ? : ; » (à désactiver si vous utilisez une police Graphite) eif=Espaces insécables fines [!]\nPour placer des espaces insécables fines avant les ponctuations « ? ! ; » maj=Majuscules\nVérifie l’utilisation des majuscules et des minuscules (par exemple, « la raison d’État », « les Européens »). virg=Virgules\nVirgules manquantes avant “mais”, “car” et “etc.”. tu=Traits d’union\nCherche les traits d’union manquants ou inutiles. num=Nombres\nEspaces insécables sur les grands nombres (> 10 000). Vérifie la présence de « O » au lieu de « 0 ». unit=Espaces insécables avant unités de mesure nf=Normes françaises liga=Signaler ligatures typographiques\nLigatures de fi, fl, ff, ffi, ffl, ft, st. mapos=Apostrophes manquantes après lettres isolées [!]\nApostrophes manquantes après les lettres l d s n c j m t ç. Cette option sert surtout à repérer les défauts de numérisation des textes et est déconseillée pour les textes scientifiques. chim=Chimie [!]\nTypographie des composés chimiques (H₂O, CO₂, etc.). ocr=Erreurs de numérisation (OCR) [!]\nErreurs de reconnaissance optique des caractères. Beaucoup de faux positifs. gramm=Accords, pluriels et confusions conf=Confusions, homonymes et faux-amis\nCherche des erreurs souvent dues à l’homonymie (par exemple, les confusions entre « faîte » et « faite »). sgpl=Pluriels (locutions)\nVérifie l’usage du pluriel ou du singulier dans certaines locutions. gn=Accords de genre et de nombre\nAccords des noms et des adjectifs. verbs=Verbes gv=Conjugaisons\nAccord des verbes avec leur sujet. infi=Infinitif\nConfusion entre l’infinitif et d’autres formes. imp=Impératif\nVérifie notamment la deuxième personne du singulier (par exemple, les erreurs : « vas … », « prend … », « manges … »). inte=Interrogatif\nVérifie les formes interrogatives et suggère de lier les pronoms personnels avec les verbes. ppas=Participes passés, adjectifs vmode=Modes verbaux style=Style bs=Populaire\nSouligne un langage courant considéré comme erroné, comme « malgré que ». pleo=Pléonasmes\nRepère des redondances sémantiques, comme « au jour d’aujourd’hui », « monter en haut », etc. neg=Adverbe de négation [!]\nNe … pas, ne … jamais, etc. redon1=Répétitions dans le paragraphe [!]\nSont exclus les mots grammaticaux, ceux commençant par une majuscule, ainsi que “être” et “avoir”. redon2=Répétitions dans la phrase [!]\nSont exclus les mots grammaticaux, ainsi que “être” et “avoir”. misc=Divers mc=Mots composés [!]\nVérifie si les mots composés à trait d’union existent dans le dictionnaire (hormis ceux commençant par ex-, mi-, quasi-, semi-, non-, demi- et d’autres préfixes communs). date=Validité des dates debug=Débogage idrule=Identifiant des règles de contrôle [!]\nAffiche l’identifiant de la règle de contrôle dans les messages d’erreur. |
Added gc_lang/fr/oxt/About/About.py version [03886f10df].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | # -*- coding: utf8 -*- # About dialog # by Olivier R. # License: MPL 2 import unohelper import uno import traceback import sys import ab_strings import helpers from com.sun.star.awt import XActionListener from com.sun.star.beans import PropertyValue class AboutGrammalecte (unohelper.Base, XActionListener): def __init__ (self, ctx): self.ctx = ctx self.xSvMgr = self.ctx.ServiceManager self.xContainer = None self.xDialog = None def _addWidget (self, name, wtype, x, y, w, h, **kwargs): xWidget = self.xDialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype) xWidget.Name = name xWidget.PositionX = x xWidget.PositionY = y xWidget.Width = w xWidget.Height = h for k, w in kwargs.items(): setattr(xWidget, k, w) self.xDialog.insertByName(name, xWidget) return xWidget def run (self, sLang): try: dUI = ab_strings.getUI(sLang) # dialog self.xDialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx) self.xDialog.Width = 160 self.xDialog.Height = 175 self.xDialog.Title = dUI.get('windowtitle', "#err") xWindowSize = helpers.getWindowSize() self.xDialog.PositionX = int((xWindowSize.Width / 2) - (self.xDialog.Width / 2)) self.xDialog.PositionY = int((xWindowSize.Height / 2) - (self.xDialog.Height / 2)) # xWidgets hspace = 60 nLblWidth = 140 nLblHeight = 20 nDescWidth = 140 nDescHeight = 40 nURLcolor = 0x4444FF xFD0 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFD0.Height = 20 #xFD0.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD") xFD0.Name = "Verdana" xFD1 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFD1.Height = 10 xFD1.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD") xFD1.Name = "Verdana" xFD2 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFD2.Height = 10 xFD2.Name = "Verdana" xFD3 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFD3.Height = 12 xFD3.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD") xFD3.Name = "Verdana" # Infos lblTitle = self._addWidget('lblTitle', 'FixedText', 60, 5, 100, 20, Label = dUI.get('title', "#err"), Align = 0, FontDescriptor = xFD0) lblVersion = self._addWidget('lblVersion', 'FixedText', 62, 25, 80, 10, Label = dUI.get('version', "#err"), Align = 0, FontDescriptor = xFD2) lblLicense = self._addWidget('lblLicense', 'FixedText', 62, 35, 80, 10, Label = dUI.get('license', "#err"), Align = 0, FontDescriptor = xFD2) lblWebsite = self._addWidget('lblWebsite', 'FixedHyperlink', 62, 45, 60, 10, Label = dUI.get('website', "#err"), Align = 0, \ URL="http://www.dicollecte.org/grammalecte", FontDescriptor = xFD1, TextColor = nURLcolor) # logo xDefaultContext = self.ctx.ServiceManager.DefaultContext xPackageInfoProvider = xDefaultContext.getValueByName("/singletons/com.sun.star.deployment.PackageInformationProvider") sExtPath = xPackageInfoProvider.getPackageLocation("French.linguistic.resources.from.Dicollecte.by.OlivierR") imgLogo = self._addWidget('imgLogo', 'ImageControl', 5, 5, 50, 50, ImageURL = sExtPath+"/img/logo100.png", Border = 0, ScaleMode = 1) # Python version self._addWidget('lblpython', 'FixedText', 10, 60, 140, 10, Align = 1, TextColor = 0x888888, FontDescriptor = xFD2, \ Label = dUI.get('pythonver', "#err") + "{0[0]}.{0[1]}.{0[2]}".format(sys.version_info)) # other line = self._addWidget('line', 'FixedLine', 10, 73, nDescWidth, 10) lblMsg = self._addWidget('lblMsg', 'FixedText', 10, 85, nDescWidth, 10, Label = dUI.get('message', "#err"), FontDescriptor = xFD2, Align = 1) lblURL1 = self._addWidget('lblURL1', 'FixedHyperlink', 10, 95, nDescWidth, 10, Label = dUI.get('sponsor', "#err"), \ Align = 1, URL="http://www.lamouette.org/", FontDescriptor = xFD3, TextColor = nURLcolor) imgSponsor = self._addWidget('imgSponsor', 'ImageControl', 5, 107, 150, 50, ImageURL = sExtPath+"/img/LaMouette_small.png", Border = 0, ScaleMode = 1) lblURL2 = self._addWidget('lblURL2', 'FixedHyperlink', 10, 160, nDescWidth, 10, Label = dUI.get('link', "#err"), \ Align = 1, URL="http://www.dicollecte.org/grammalecte/soutiens.php", FontDescriptor = xFD1, TextColor = nURLcolor) # button #button = self._addWidget('close', 'Button', self.xDialog.Width - 25, self.xDialog.Height - 20, 20, 14, \ # Label = dUI.get('close', "#err"), FontDescriptor = xFD1, TextColor = 0x004400) # container self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx) self.xContainer.setModel(self.xDialog) #self.xContainer.getControl('close').addActionListener(self) self.xContainer.setVisible(False) toolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx) self.xContainer.createPeer(toolkit, None) self.xContainer.execute() except: traceback.print_exc() # XActionListener def actionPerformed (self, xActionEvent): try: self.xContainer.endExecute() except: traceback.print_exc() |
Added gc_lang/fr/oxt/About/ab_strings.py version [e915407fb3].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | # -*- encoding: UTF-8 -*- def getUI (sLang): if sLang in dStrings: return dStrings[sLang] return dStrings["fr"] dStrings = { "fr": { "windowtitle": "À propos…", "title": "Grammalecte", "version": "Version : ${version}", "license": "Licence : GPL 3", "website": "Site web", "pythonver": "Machine virtuelle Python : v", "message": "Avec le soutien de", "sponsor": "La Mouette…", "link": "… et de nombreux contributeurs.", "close": "~OK" }, "en": { "windowtitle": "About…", "title": "Grammalecte", "version": "Version: ${version}", "license": "License: GPL 3", "website": "Web site", "pythonver": "Python virtual machine: v", "message": "With the support of", "sponsor": "La Mouette…", "link": "… and many contributors.", "close": "~OK" } } |
Added gc_lang/fr/oxt/AppLauncher.py version [30bcae4623].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | # -*- coding: utf8 -*- # Grammalecte AppLauncher # by Olivier R. # License: MPL 2 import unohelper import uno import traceback import helpers from com.sun.star.task import XJobExecutor xDesktop = None class AppLauncher (unohelper.Base, XJobExecutor): def __init__ (self, ctx): self.ctx = ctx # In this extension, French is default language. # It is assumed that those who need to use the French dictionaries understand French and may not understand English. xSettings = helpers.getConfigSetting("/org.openoffice.Setup/L10N", False) sLocale = xSettings.getByName("ooLocale") # Note: look at ooSetupSystemLocale value? self.sLang = sLocale[0:2] # XJobExecutor def trigger (self, sCmd): try: if sCmd == "About": import About xDialog = About.AboutGrammalecte(self.ctx) xDialog.run(self.sLang) elif sCmd.startswith("CJ"): import Conjugueur xDialog = Conjugueur.Conjugueur(self.ctx) if sCmd[2:3] == "/": xDialog.run(sCmd[3:]) else: xDialog.run() elif sCmd == "TF": import TextFormatter xDialog = TextFormatter.TextFormatter(self.ctx) xDialog.run(self.sLang) elif sCmd == "DS": import DictionarySwitcher xDialog = DictionarySwitcher.FrenchDictionarySwitcher(self.ctx) xDialog.run(self.sLang) elif sCmd == "MA": import Author xDialog = Author.Author(self.ctx) xDialog.run(self.sLang) elif sCmd == "OP": import Options xDialog = Options.GC_Options(self.ctx) xDialog.run(self.sLang) elif sCmd.startswith("FA/"): findAll(sCmd[6:], (sCmd[3:4] == "y"), (sCmd[4:5] == "y")) # elif sCmd.startswith("URL/"): # # Call from context menu to launch URL? # # http://opengrok.libreoffice.org/xref/core/sw/source/ui/lingu/olmenu.cxx#785 # xSystemShellExecute = self.ctx.getServiceManager().createInstanceWithContext('com.sun.star.system.SystemShellExecute', self.ctx) # xSystemShellExecute.execute(url, "", uno.getConstantByName("com.sun.star.system.SystemShellExecuteFlags.URIS_ONLY")) elif sCmd == "None": pass else: print("Unknown command: "+str(sCmd)) except: traceback.print_exc() def findAll (sText, bCaseSensitive, bFullWord): global xDesktop if not xDesktop: xCurCtx = uno.getComponentContext() xDesktop = xCurCtx.getServiceManager().createInstanceWithContext('com.sun.star.frame.Desktop', xCurCtx) if sText: xDoc = xDesktop.getCurrentComponent() xSearchDescr = xDoc.createSearchDescriptor() xSearchDescr.SearchString = sText xSearchDescr.SearchCaseSensitive = bCaseSensitive xSearchDescr.SearchWords = bFullWord xSearchDescr.SearchAll = True # necessary ? xFound = xDoc.findAll(xSearchDescr) xDoc.CurrentController.select(xFound) g_ImplementationHelper = unohelper.ImplementationHelper() g_ImplementationHelper.addImplementation(AppLauncher, 'net.grammalecte.AppLauncher', ('com.sun.star.task.Job',)) |
Added gc_lang/fr/oxt/ChangeAuthor/Author.py version [65d326e8e4].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | # -*- coding: utf8 -*- # Modify author field # by Olivier R. # License: MPL 2 import unohelper import uno import re import traceback import ca_strings import helpers from com.sun.star.awt import XActionListener from com.sun.star.beans import PropertyValue class Author (unohelper.Base, XActionListener): def __init__ (self, ctx): self.ctx = ctx self.xSvMgr = self.ctx.ServiceManager self.xContainer = None def _addWidget (self, name, wtype, x, y, w, h, **kwargs): xWidget = self.xDialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype) xWidget.Name = name xWidget.PositionX = x xWidget.PositionY = y xWidget.Width = w xWidget.Height = h for k, w in kwargs.items(): setattr(xWidget, k, w) self.xDialog.insertByName(name, xWidget) return xWidget def run (self, sLang): try: dUI = ca_strings.getUI(sLang) # dialog self.xDialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx) self.xDialog.Width = 160 self.xDialog.Height = 85 self.xDialog.Title = dUI.get('title', "#err") xWindowSize = helpers.getWindowSize() self.xDialog.PositionX = int((xWindowSize.Width / 2) - (self.xDialog.Width / 2)) self.xDialog.PositionY = int((xWindowSize.Height / 2) - (self.xDialog.Height / 2)) # fonts xFDBut = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFDBut.Height = 10 xFDBut.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD") xFDBut.Name = "Verdana" # document xDesktop = self.ctx.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", self.ctx) self.xDoc = xDesktop.getCurrentComponent() sAuthor = self.xDoc.DocumentProperties.Author if self.xDoc.DocumentProperties.Author else dUI.get('empty', "#err") # widgets nTextWidth = self.xDialog.Width - 20 state = self._addWidget('state', 'FixedText', 10, 10, nTextWidth, 10, Label = dUI.get('state', "#err")) value = self._addWidget('value', 'FixedText', 10, 20, nTextWidth, 10, Label = sAuthor, FontSlant = 2, TextColor = 0x000044) inputlbl = self._addWidget('inputlbl', 'FixedText', 10, 34, nTextWidth, 10, Label = dUI.get('newvalue', "#err")) self.inputtxt = self._addWidget('input', 'Edit', 10, 45, nTextWidth-20, 12, Text=self.xDoc.DocumentProperties.Author, MaxTextLen=150) but0 = self._addWidget('reset', 'Button', self.xDialog.Width-25, 45, 15, 12, Label = u"×", FontDescriptor = xFDBut, TextColor = 0x440000) but1 = self._addWidget('modify', 'Button', self.xDialog.Width-115, self.xDialog.Height-20, 50, 14, \ Label = dUI.get('modify', "#err"), FontDescriptor = xFDBut, TextColor = 0x004400) but2 = self._addWidget('cancel', 'Button', self.xDialog.Width-60, self.xDialog.Height-20, 50, 14, \ Label = dUI.get('cancel', "#err"), FontDescriptor = xFDBut, TextColor = 0x440000) # container self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx) self.xContainer.setModel(self.xDialog) self.xContainer.getControl('reset').addActionListener(self) self.xContainer.getControl('reset').setActionCommand('Reset') self.xContainer.getControl('modify').addActionListener(self) self.xContainer.getControl('modify').setActionCommand('Modify') self.xContainer.getControl('cancel').addActionListener(self) self.xContainer.getControl('cancel').setActionCommand('Cancel') self.xContainer.setVisible(False) xToolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx) self.xContainer.createPeer(xToolkit, None) self.xContainer.execute() except: traceback.print_exc() # XActionListener def actionPerformed (self, xActionEvent): try: if xActionEvent.ActionCommand == 'Reset': self.inputtxt.Text = "" elif xActionEvent.ActionCommand == 'Modify': self.xDoc.DocumentProperties.Author = self.inputtxt.Text.strip() self.xContainer.endExecute() elif xActionEvent.ActionCommand == 'Cancel': self.xContainer.endExecute() else: print("Wrong command: " + xActionEvent.ActionCommand) except: traceback.print_exc() |
Added gc_lang/fr/oxt/ChangeAuthor/ca_strings.py version [b67a9eb4f9].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | # -*- encoding: UTF-8 -*- def getUI (sLang): if sLang in dStrings: return dStrings[sLang] return dStrings["fr"] dStrings = { "fr": { "title": "Grammalecte · Édition du champ “Auteur”", "state": "Valeur actuelle du champ “Auteur” :", "empty": "[vide]", "newvalue": "Entrez la nouvelle valeur :", "modify": "Modifier", "cancel": "Annuler" }, "en": { "title": "Grammalecte · Edition of field “Author”", "state": "Current value of field “Author”:", "empty": "[empty]", "newvalue": "Enter the new value:", "modify": "Modify", "cancel": "Cancel" } } |
Added gc_lang/fr/oxt/Conjugueur/Conjugueur.py version [6ca66ec150].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 | # -*- coding: utf8 -*- # Conjugueur # by Olivier R. # License: GPL 3 import unohelper import uno import traceback import grammalecte.fr.conj as conj_fr import helpers from com.sun.star.task import XJobExecutor from com.sun.star.awt import XActionListener class Conjugueur (unohelper.Base, XActionListener, XJobExecutor): def __init__ (self, ctx): self.ctx = ctx self.xSvMgr = self.ctx.ServiceManager self.xContainer = None self.xDialog = None self.lDropDown = ["être", "avoir", "aller", "vouloir", "pouvoir", "devoir", "faire", "envoyer", "prendre", "connaître", \ "savoir", "partir", "répondre", "dire", "voir", "mettre", "tenir", "sentir", "finir", "manger"] self.sWarning = "Ce verbe n’a pas encore été vérifié. " \ "C’est pourquoi les options “pronominal” et “temps composés” sont désactivées." def _addWidget (self, name, wtype, x, y, w, h, **kwargs): xWidget = self.xDialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype) xWidget.Name = name xWidget.PositionX = x xWidget.PositionY = y xWidget.Width = w xWidget.Height = h for k, w in kwargs.items(): setattr(xWidget, k, w) self.xDialog.insertByName(name, xWidget) return xWidget def run (self, sArgs=""): ## dialog self.xDialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx) self.xDialog.Width = 250 self.xDialog.Title = "Grammalecte · Conjugueur" xFDinput = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFDinput.Height = 10 xFDinput.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD") xFDinput.Name = "Verdana" xFDmode = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFDmode.Height = 12 xFDmode.Name = "Constantia" xFDtemps = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFDtemps.Height = 9 xFDtemps.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD") xFDtemps.Name = "Constantia" xFDbold = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFDbold.Height = 10 xFDbold.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD") xFDbold.Name = "Verdana" xFDinfo = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFDinfo.Height = 7 xFDinfo.Name = "Verdana" xFDsmall = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFDsmall.Height = 6 xFDsmall.Name = "Verdana" ## widgets nGroupBoxWith = (self.xDialog.Width - 16) // 2 nWidth = nGroupBoxWith-10 nHeight = 10 nHeightCj = 8 nColorHead = 0xAA2200 nColorHead2 = 0x0022AA # grid nX1 = 10; nX2 = nX1+123; nY0 = 2; nY1 = nY0+26; nY2 = nY1-4; nY3 = nY1+17; nY4 = nY3+50; nY5 = nY4+55; nY6 = nY5+55; nY7 = nY6+55; nY6b = nY6+17; nY7b = nY6b+55 # group box // indicatif gb_infi = self._addWidget('groupbox_infi', 'GroupBox', nX1-5, nY0, nGroupBoxWith, 23, Label = "Infinitif", \ FontDescriptor = xFDmode, FontRelief = 1, TextColor = nColorHead) self.infi = self._addWidget('infi', 'FixedText', nX1, nY0+10, nWidth, nHeight, Label = "", FontDescriptor = xFDbold) # input field + button self.input = self._addWidget('input', 'ComboBox', nX2-5, nY0+5, 68, 14, \ FontDescriptor = xFDinput, TextColor = 0x666666, Dropdown = True, LineCount = 20) for n, s in enumerate(self.lDropDown): self.input.insertItemText(n, s) self.cbutton = self._addWidget('cbutton', 'Button', nX2+66, nY0+5, 46, 14, Label = "Conjuguer", FontDescriptor = xFDinput) # informations self.info = self._addWidget('info', 'FixedText', nX1, nY1, nWidth, nHeight, FontDescriptor = xFDinfo) # options self.oneg = self._addWidget('oneg', 'CheckBox', nX2-5, nY2, 35, nHeight, Label = "négation") self.opro = self._addWidget('opro', 'CheckBox', nX2+33, nY2, 50, nHeight, Label = "pronominal") self.ofem = self._addWidget('ofem', 'CheckBox', nX2+80, nY2, 45, nHeight, Label = "féminin") self.oint = self._addWidget('oint', 'CheckBox', nX2-5, nY2+9, 55, nHeight, Label = "interrogatif") self.otco = self._addWidget('otco', 'CheckBox', nX2+55, nY2+9, 60, nHeight, Label = "temps composés") # group box // participe passé gb_ppas = self._addWidget('groupbox_ppas', 'GroupBox', nX1-5, nY3-7, nGroupBoxWith, 55, Label = "Participes présent et passés", \ FontDescriptor = xFDmode, FontRelief = 1, TextColor = nColorHead) self.ppre = self._addWidget('ppre', 'FixedText', nX1, nY3+5, nWidth, nHeightCj, Label = "") self.ppas1 = self._addWidget('ppas1', 'FixedText', nX1, nY3+14, nWidth, nHeightCj, Label = "") self.ppas2 = self._addWidget('ppas2', 'FixedText', nX1, nY3+21, nWidth, nHeightCj, Label = "") self.ppas3 = self._addWidget('ppas3', 'FixedText', nX1, nY3+28, nWidth, nHeightCj, Label = "") self.ppas4 = self._addWidget('ppas4', 'FixedText', nX1, nY3+35, nWidth, nHeightCj, Label = "") # group box // impératif gb_impe = self._addWidget('groupbox_impe', 'GroupBox', nX2-5, nY3, nGroupBoxWith, 48, Label = "Impératif", \ FontDescriptor = xFDmode, FontRelief = 1, TextColor = nColorHead) self.impe = self._addWidget('impe', 'FixedText', nX2, nY3+12, nWidth, nHeight, Label = "Présent", \ FontDescriptor = xFDtemps, FontRelief = 1, TextColor = nColorHead2) self.impe1 = self._addWidget('impe1', 'FixedText', nX2, nY3+21, nWidth, nHeightCj, Label = "") self.impe2 = self._addWidget('impe2', 'FixedText', nX2, nY3+28, nWidth, nHeightCj, Label = "") self.impe3 = self._addWidget('impe3', 'FixedText', nX2, nY3+35, nWidth, nHeightCj, Label = "") # group box // indicatif gb_ind = self._addWidget('groupbox_ind', 'GroupBox', nX1-5, nY4, nGroupBoxWith, 234, Label = "Indicatif", \ FontDescriptor = xFDmode, FontRelief = 1, TextColor = nColorHead) self.ipre = self._addWidget('ipre', 'FixedText', nX1, nY4+12, nWidth, nHeight, Label = "Présent", \ FontDescriptor = xFDtemps, FontRelief = 1, TextColor = nColorHead2) self.ipre1 = self._addWidget('ipre1', 'FixedText', nX1, nY4+21, nWidth, nHeightCj, Label = "") self.ipre2 = self._addWidget('ipre2', 'FixedText', nX1, nY4+28, nWidth, nHeightCj, Label = "") self.ipre3 = self._addWidget('ipre3', 'FixedText', nX1, nY4+35, nWidth, nHeightCj, Label = "") self.ipre4 = self._addWidget('ipre4', 'FixedText', nX1, nY4+42, nWidth, nHeightCj, Label = "") self.ipre5 = self._addWidget('ipre5', 'FixedText', nX1, nY4+49, nWidth, nHeightCj, Label = "") self.ipre6 = self._addWidget('ipre6', 'FixedText', nX1, nY4+56, nWidth, nHeightCj, Label = "") self.iimp = self._addWidget('iimp', 'FixedText', nX1, nY5+12, nWidth, nHeight, Label = "Imparfait", \ FontDescriptor = xFDtemps, FontRelief = 1, TextColor = nColorHead2) self.iimp1 = self._addWidget('iimp1', 'FixedText', nX1, nY5+21, nWidth, nHeightCj, Label = "") self.iimp2 = self._addWidget('iimp2', 'FixedText', nX1, nY5+28, nWidth, nHeightCj, Label = "") self.iimp3 = self._addWidget('iimp3', 'FixedText', nX1, nY5+35, nWidth, nHeightCj, Label = "") self.iimp4 = self._addWidget('iimp4', 'FixedText', nX1, nY5+42, nWidth, nHeightCj, Label = "") self.iimp5 = self._addWidget('iimp5', 'FixedText', nX1, nY5+49, nWidth, nHeightCj, Label = "") self.iimp6 = self._addWidget('iimp6', 'FixedText', nX1, nY5+56, nWidth, nHeightCj, Label = "") self.ipsi = self._addWidget('ipsi', 'FixedText', nX1, nY6+12, nWidth, nHeight, Label = "Passé Simple", \ FontDescriptor = xFDtemps, FontRelief = 1, TextColor = nColorHead2) self.ipsi1 = self._addWidget('ipsi1', 'FixedText', nX1, nY6+21, nWidth, nHeightCj, Label = "") self.ipsi2 = self._addWidget('ipsi2', 'FixedText', nX1, nY6+28, nWidth, nHeightCj, Label = "") self.ipsi3 = self._addWidget('ipsi3', 'FixedText', nX1, nY6+35, nWidth, nHeightCj, Label = "") self.ipsi4 = self._addWidget('ipsi4', 'FixedText', nX1, nY6+42, nWidth, nHeightCj, Label = "") self.ipsi5 = self._addWidget('ipsi5', 'FixedText', nX1, nY6+49, nWidth, nHeightCj, Label = "") self.ipsi6 = self._addWidget('ipsi6', 'FixedText', nX1, nY6+56, nWidth, nHeightCj, Label = "") self.ifut = self._addWidget('ifut', 'FixedText', nX1, nY7+12, nWidth, nHeight, Label = "Futur", \ FontDescriptor = xFDtemps, FontRelief = 1, TextColor = nColorHead2) self.ifut1 = self._addWidget('ifut1', 'FixedText', nX1, nY7+21, nWidth, nHeightCj, Label = "") self.ifut2 = self._addWidget('ifut2', 'FixedText', nX1, nY7+28, nWidth, nHeightCj, Label = "") self.ifut3 = self._addWidget('ifut3', 'FixedText', nX1, nY7+35, nWidth, nHeightCj, Label = "") self.ifut4 = self._addWidget('ifut4', 'FixedText', nX1, nY7+42, nWidth, nHeightCj, Label = "") self.ifut5 = self._addWidget('ifut5', 'FixedText', nX1, nY7+49, nWidth, nHeightCj, Label = "") self.ifut6 = self._addWidget('ifut6', 'FixedText', nX1, nY7+56, nWidth, nHeightCj, Label = "") self.infomsg = self._addWidget('infomsg', 'FixedText', nX1-5, nY7+73, 120, 20, FontDescriptor = xFDinfo, \ MultiLine = True, TextColor = 0x333333, Label = self.sWarning) # group box // subjonctif gb_sub = self._addWidget('groupbox_sub', 'GroupBox', nX2-5, nY4, nGroupBoxWith, 123, Label = "Subjonctif", \ FontDescriptor = xFDmode, FontRelief = 1, TextColor = nColorHead) self.spre = self._addWidget('spre', 'FixedText', nX2, nY4+12, nWidth, nHeight, Label = "Présent", \ FontDescriptor = xFDtemps, FontRelief = 1, TextColor = nColorHead2) self.spre1 = self._addWidget('spre1', 'FixedText', nX2, nY4+21, nWidth, nHeightCj, Label = "") self.spre2 = self._addWidget('spre2', 'FixedText', nX2, nY4+28, nWidth, nHeightCj, Label = "") self.spre3 = self._addWidget('spre3', 'FixedText', nX2, nY4+35, nWidth, nHeightCj, Label = "") self.spre4 = self._addWidget('spre4', 'FixedText', nX2, nY4+42, nWidth, nHeightCj, Label = "") self.spre5 = self._addWidget('spre5', 'FixedText', nX2, nY4+49, nWidth, nHeightCj, Label = "") self.spre6 = self._addWidget('spre6', 'FixedText', nX2, nY4+56, nWidth, nHeightCj, Label = "") self.simp = self._addWidget('simp', 'FixedText', nX2, nY5+12, nWidth, nHeight, Label = "Imparfait", \ FontDescriptor = xFDtemps, FontRelief = 1, TextColor = nColorHead2) self.simp1 = self._addWidget('simp1', 'FixedText', nX2, nY5+21, nWidth, nHeightCj, Label = "") self.simp2 = self._addWidget('simp2', 'FixedText', nX2, nY5+28, nWidth, nHeightCj, Label = "") self.simp3 = self._addWidget('simp3', 'FixedText', nX2, nY5+35, nWidth, nHeightCj, Label = "") self.simp4 = self._addWidget('simp4', 'FixedText', nX2, nY5+42, nWidth, nHeightCj, Label = "") self.simp5 = self._addWidget('simp5', 'FixedText', nX2, nY5+49, nWidth, nHeightCj, Label = "") self.simp6 = self._addWidget('simp6', 'FixedText', nX2, nY5+56, nWidth, nHeightCj, Label = "") # group box // conditionnel gb_cond = self._addWidget('groupbox_cond', 'GroupBox', nX2-5, nY6b, nGroupBoxWith, 123, Label = "Conditionnel", \ FontDescriptor = xFDmode, FontRelief = 1, TextColor = nColorHead) self.conda = self._addWidget('conda', 'FixedText', nX2, nY6b+12, nWidth, nHeight, Label = "Présent", \ FontDescriptor = xFDtemps, FontRelief = 1, TextColor = nColorHead2) self.conda1 = self._addWidget('conda1', 'FixedText', nX2, nY6b+21, nWidth, nHeightCj, Label = "") self.conda2 = self._addWidget('conda2', 'FixedText', nX2, nY6b+28, nWidth, nHeightCj, Label = "") self.conda3 = self._addWidget('conda3', 'FixedText', nX2, nY6b+35, nWidth, nHeightCj, Label = "") self.conda4 = self._addWidget('conda4', 'FixedText', nX2, nY6b+42, nWidth, nHeightCj, Label = "") self.conda5 = self._addWidget('conda5', 'FixedText', nX2, nY6b+49, nWidth, nHeightCj, Label = "") self.conda6 = self._addWidget('conda6', 'FixedText', nX2, nY6b+56, nWidth, nHeightCj, Label = "") self.condb = self._addWidget('condb', 'FixedText', nX2, nY7b+12, nWidth, nHeight, Label = "", \ FontDescriptor = xFDtemps, FontRelief = 1, TextColor = nColorHead2) self.condb1 = self._addWidget('condb1', 'FixedText', nX2, nY7b+21, nWidth, nHeightCj, Label = "") self.condb2 = self._addWidget('condb2', 'FixedText', nX2, nY7b+28, nWidth, nHeightCj, Label = "") self.condb3 = self._addWidget('condb3', 'FixedText', nX2, nY7b+35, nWidth, nHeightCj, Label = "") self.condb4 = self._addWidget('condb4', 'FixedText', nX2, nY7b+42, nWidth, nHeightCj, Label = "") self.condb5 = self._addWidget('condb5', 'FixedText', nX2, nY7b+49, nWidth, nHeightCj, Label = "") self.condb6 = self._addWidget('condb6', 'FixedText', nX2, nY7b+56, nWidth, nHeightCj, Label = "") # dialog height self.xDialog.Height = 350 xWindowSize = helpers.getWindowSize() self.xDialog.PositionX = int((xWindowSize.Width / 2) - (self.xDialog.Width / 2)) self.xDialog.PositionY = int((xWindowSize.Height / 2) - (self.xDialog.Height / 2)) ## container self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx) self.xContainer.setModel(self.xDialog) self.xContainer.setVisible(False) #self.xContainer.getControl('input').addEventListener(self) #self.xContainer.getControl('input').addEventCommand('New') self.xContainer.getControl('cbutton').addActionListener(self) self.xContainer.getControl('cbutton').setActionCommand('New') self.xContainer.getControl('oneg').addActionListener(self) self.xContainer.getControl('oneg').setActionCommand('Change') self.xContainer.getControl('opro').addActionListener(self) self.xContainer.getControl('opro').setActionCommand('Change') self.xContainer.getControl('oint').addActionListener(self) self.xContainer.getControl('oint').setActionCommand('Change') self.xContainer.getControl('otco').addActionListener(self) self.xContainer.getControl('otco').setActionCommand('Change') self.xContainer.getControl('ofem').addActionListener(self) self.xContainer.getControl('ofem').setActionCommand('Change') ## set verb self.input.Text = sArgs if sArgs else "être" self._newVerb() ## mysterious action xToolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx) self.xContainer.createPeer(xToolkit, None) self.xContainer.execute() # XActionListener def actionPerformed (self, xActionEvent): try: if xActionEvent.ActionCommand == 'Close': self.xContainer.endExecute() elif xActionEvent.ActionCommand == 'New': self._newVerb() elif xActionEvent.ActionCommand == 'Change': self._displayResults() else: print(str(xActionEvent)) except: traceback.print_exc() # XJobExecutor def trigger (self, args): try: xDialog = Conjugueur(self.ctx) xDialog.run(args) except: traceback.print_exc() def _newVerb (self): self.oneg.State = False self.opro.State = False self.oint.State = False self.otco.State = False self.ofem.State = False # request analyzing sVerb = self.input.Text.strip().lower().replace(u"’", "'").replace(" ", " ") if sVerb: if sVerb.startswith("ne pas "): self.oneg.State = True sVerb = sVerb[7:] if sVerb.startswith("se "): self.opro.State = True sVerb = sVerb[3:] elif sVerb.startswith("s'"): self.opro.State = True sVerb = sVerb[2:] if sVerb.endswith("?"): self.oint.State = True sVerb = sVerb.rstrip(" ?") if not conj_fr.isVerb(sVerb): self.input.TextColor = 0xAA2200 else: self.input.TextColor = 0x666666 self.oVerb = conj_fr.Verb(sVerb) sRawInfo = conj_fr.getVtyp(sVerb) self.info.Label = self.oVerb.sInfo self.opro.Label = "pronominal" if sRawInfo.endswith("zz"): self.opro.State = False self.opro.Enabled = False self.otco.State = False self.otco.Enabled = False self.infomsg.Label = self.sWarning else: self.infomsg.Label = "" if sRawInfo[5] == "_": self.opro.State = False self.opro.Enabled = False elif sRawInfo[5] == "q" or sRawInfo[5] == "e": self.opro.State = False self.opro.Enabled = True elif sRawInfo[5] == "p" or sRawInfo[5] == "r": self.opro.State = True self.opro.Enabled = False elif sRawInfo[5] == "!": self.opro.Label = "cas particuliers" self.opro.State = False self.opro.Enabled = False else: self.opro.Label = "# erreur #" self.opro.State = False self.opro.Enabled = False self.otco.Enabled = True self._displayResults() def _displayResults (self): try: self._setTitles() # participes passés self.ppas1.Label = self.oVerb.participePasse(":Q1") self.ppas2.Label = self.oVerb.participePasse(":Q2") self.ppas3.Label = self.oVerb.participePasse(":Q3") self.ppas4.Label = self.oVerb.participePasse(":Q4") # infinitif self.infi.Label = self.oVerb.infinitif(self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) # participe présent self.ppre.Label = self.oVerb.participePresent(self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) # conjugaisons self.ipre1.Label = self.oVerb.conjugue(":Ip", ":1s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.ipre2.Label = self.oVerb.conjugue(":Ip", ":2s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.ipre3.Label = self.oVerb.conjugue(":Ip", ":3s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.ipre4.Label = self.oVerb.conjugue(":Ip", ":1p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.ipre5.Label = self.oVerb.conjugue(":Ip", ":2p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.ipre6.Label = self.oVerb.conjugue(":Ip", ":3p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.iimp1.Label = self.oVerb.conjugue(":Iq", ":1s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.iimp2.Label = self.oVerb.conjugue(":Iq", ":2s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.iimp3.Label = self.oVerb.conjugue(":Iq", ":3s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.iimp4.Label = self.oVerb.conjugue(":Iq", ":1p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.iimp5.Label = self.oVerb.conjugue(":Iq", ":2p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.iimp6.Label = self.oVerb.conjugue(":Iq", ":3p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.ipsi1.Label = self.oVerb.conjugue(":Is", ":1s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.ipsi2.Label = self.oVerb.conjugue(":Is", ":2s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.ipsi3.Label = self.oVerb.conjugue(":Is", ":3s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.ipsi4.Label = self.oVerb.conjugue(":Is", ":1p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.ipsi5.Label = self.oVerb.conjugue(":Is", ":2p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.ipsi6.Label = self.oVerb.conjugue(":Is", ":3p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.ifut1.Label = self.oVerb.conjugue(":If", ":1s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.ifut2.Label = self.oVerb.conjugue(":If", ":2s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.ifut3.Label = self.oVerb.conjugue(":If", ":3s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.ifut4.Label = self.oVerb.conjugue(":If", ":1p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.ifut5.Label = self.oVerb.conjugue(":If", ":2p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.ifut6.Label = self.oVerb.conjugue(":If", ":3p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.conda1.Label = self.oVerb.conjugue(":K", ":1s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.conda2.Label = self.oVerb.conjugue(":K", ":2s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.conda3.Label = self.oVerb.conjugue(":K", ":3s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.conda4.Label = self.oVerb.conjugue(":K", ":1p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.conda5.Label = self.oVerb.conjugue(":K", ":2p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.conda6.Label = self.oVerb.conjugue(":K", ":3p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) if not self.oint.State: self.spre1.Label = self.oVerb.conjugue(":Sp", ":1s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.spre2.Label = self.oVerb.conjugue(":Sp", ":2s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.spre3.Label = self.oVerb.conjugue(":Sp", ":3s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.spre4.Label = self.oVerb.conjugue(":Sp", ":1p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.spre5.Label = self.oVerb.conjugue(":Sp", ":2p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.spre6.Label = self.oVerb.conjugue(":Sp", ":3p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.simp1.Label = self.oVerb.conjugue(":Sq", ":1s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.simp2.Label = self.oVerb.conjugue(":Sq", ":2s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.simp3.Label = self.oVerb.conjugue(":Sq", ":3s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.simp4.Label = self.oVerb.conjugue(":Sq", ":1p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.simp5.Label = self.oVerb.conjugue(":Sq", ":2p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.simp6.Label = self.oVerb.conjugue(":Sq", ":3p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.impe1.Label = self.oVerb.imperatif(":2s", self.opro.State, self.oneg.State, self.otco.State, self.ofem.State) self.impe2.Label = self.oVerb.imperatif(":1p", self.opro.State, self.oneg.State, self.otco.State, self.ofem.State) self.impe3.Label = self.oVerb.imperatif(":2p", self.opro.State, self.oneg.State, self.otco.State, self.ofem.State) else: self.spre.Label = "" self.spre1.Label = "" self.spre2.Label = "" self.spre3.Label = "" self.spre4.Label = "" self.spre5.Label = "" self.spre6.Label = "" self.simp.Label = "" self.simp1.Label = "" self.simp2.Label = "" self.simp3.Label = "" self.simp4.Label = "" self.simp5.Label = "" self.simp6.Label = "" self.impe.Label = "" self.impe1.Label = "" self.impe2.Label = "" self.impe3.Label = "" if self.otco.State: self.condb1.Label = self.oVerb.conjugue(":Sq", ":1s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.condb2.Label = self.oVerb.conjugue(":Sq", ":2s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.condb3.Label = self.oVerb.conjugue(":Sq", ":3s", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.condb4.Label = self.oVerb.conjugue(":Sq", ":1p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.condb5.Label = self.oVerb.conjugue(":Sq", ":2p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) self.condb6.Label = self.oVerb.conjugue(":Sq", ":3p", self.opro.State, self.oneg.State, self.otco.State, self.oint.State, self.ofem.State) else: self.condb1.Label = "" self.condb2.Label = "" self.condb3.Label = "" self.condb4.Label = "" self.condb5.Label = "" self.condb6.Label = "" self.input.Text = "" # refresh self.xContainer.setVisible(True) except: traceback.print_exc() def _setTitles (self): if not self.otco.State: self.ipre.Label = "Présent" self.ifut.Label = "Futur" self.iimp.Label = "Imparfait" self.ipsi.Label = "Passé simple" self.spre.Label = "Présent" self.simp.Label = "Imparfait" self.conda.Label = "Présent" self.condb.Label = "" self.impe.Label = "Présent" else: self.ipre.Label = "Passé composé" self.ifut.Label = "Futur antérieur" self.iimp.Label = "Plus-que-parfait" self.ipsi.Label = "Passé antérieur" self.spre.Label = "Passé" self.simp.Label = "Plus-que-parfait" self.conda.Label = "Passé (1ʳᵉ forme)" self.condb.Label = "Passé (2ᵉ forme)" self.impe.Label = "Passé" # g_ImplementationHelper = unohelper.ImplementationHelper() # g_ImplementationHelper.addImplementation(Conjugueur, 'dicollecte.Conjugueur', ('com.sun.star.task.Job',)) |
Added gc_lang/fr/oxt/ContextMenu/ContextMenu.py version [3b33016da8].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | # -*- coding: utf8 -*- # Grammalecte - Lexicographe # by Olivier R. License: MPL 2 import uno import unohelper import traceback from com.sun.star.task import XJob from com.sun.star.ui import XContextMenuInterceptor #from com.sun.star.ui.ContextMenuInterceptorAction import IGNORED #from com.sun.star.ui.ContextMenuInterceptorAction import EXECUTE_MODIFIED import grammalecte.fr.lexicographe as lxg from grammalecte.ibdawg import IBDAWG from grammalecte.echo import echo import helpers xDesktop = None oDict = None oLexicographe = None class MyContextMenuInterceptor (XContextMenuInterceptor, unohelper.Base): def __init__ (self, ctx): self.ctx = ctx def notifyContextMenuExecute (self, xEvent): sWord = self._getWord() try: aItem, aVerb = oLexicographe.analyzeWord(sWord) if not aItem: return uno.Enum("com.sun.star.ui.ContextMenuInterceptorAction", "IGNORED") # don’t work on AOO, have to import the value #return IGNORED xContextMenu = xEvent.ActionTriggerContainer if xContextMenu: # entries index i = xContextMenu.Count nUnoConstantLine = uno.getConstantByName("com.sun.star.ui.ActionTriggerSeparatorType.LINE") # word analysis i = self._addItemToContextMenu(xContextMenu, i, "ActionTriggerSeparator", SeparatorType=nUnoConstantLine) for item in aItem: if isinstance(item, str): i = self._addItemToContextMenu(xContextMenu, i, "ActionTrigger", Text=item, CommandURL="service:net.grammalecte.AppLauncher?None") elif isinstance(item, tuple): sRoot, lMorph = item # submenu xSubMenuContainer = xContextMenu.createInstance("com.sun.star.ui.ActionTriggerContainer") for j, s in enumerate(lMorph): self._addItemToContextMenu(xSubMenuContainer, j, "ActionTrigger", Text=s, CommandURL="service:net.grammalecte.AppLauncher?None") # create root menu entry i = self._addItemToContextMenu(xContextMenu, i, "ActionTrigger", Text=sRoot, SubContainer=xSubMenuContainer) else: i = self._addItemToContextMenu(xContextMenu, i, "ActionTrigger", Text="# erreur : {}".format(item)) # Links to Conjugueur if aVerb: i = self._addItemToContextMenu(xContextMenu, i, "ActionTriggerSeparator", SeparatorType=nUnoConstantLine) for sVerb in aVerb: i = self._addItemToContextMenu(xContextMenu, i, "ActionTrigger", Text="Conjuguer “{}”…".format(sVerb), CommandURL="service:net.grammalecte.AppLauncher?CJ/"+sVerb) # Search xDoc = xDesktop.getCurrentComponent() xViewCursor = xDoc.CurrentController.ViewCursor if not xViewCursor.isCollapsed(): sSelec = xViewCursor.getString() if sSelec.count(" ") <= 2: i = self._addItemToContextMenu(xContextMenu, i, "ActionTriggerSeparator", SeparatorType=nUnoConstantLine) # submenu xSubMenuContainer = xContextMenu.createInstance("com.sun.star.ui.ActionTriggerContainer") self._addItemToContextMenu(xSubMenuContainer, 0, "ActionTrigger", Text="insensible à la casse", CommandURL="service:net.grammalecte.AppLauncher?FA/nn/"+sSelec) self._addItemToContextMenu(xSubMenuContainer, 1, "ActionTrigger", Text="casse préservée", CommandURL="service:net.grammalecte.AppLauncher?FA/yn/"+sSelec) self._addItemToContextMenu(xSubMenuContainer, 2, "ActionTrigger", Text="mot(s) entier(s)", CommandURL="service:net.grammalecte.AppLauncher?FA/ny/"+sSelec) self._addItemToContextMenu(xSubMenuContainer, 3, "ActionTrigger", Text="casse préservée + mot(s) entier(s)", CommandURL="service:net.grammalecte.AppLauncher?FA/yy/"+sSelec) # create root menu entry i = self._addItemToContextMenu(xContextMenu, i, "ActionTrigger", Text="Rechercher “{}”".format(sSelec), SubContainer=xSubMenuContainer) # The controller should execute the modified context menu and stop notifying other interceptors. return uno.Enum("com.sun.star.ui.ContextMenuInterceptorAction", "EXECUTE_MODIFIED") # don’t work on AOO, have to import the value #return EXECUTE_MODIFIED # Doesn’t work since LO 5.3 except: traceback.print_exc() return uno.Enum("com.sun.star.ui.ContextMenuInterceptorAction", "IGNORED") # don’t work on AOO, have to import the value #return IGNORED # Doesn’t work since LO 5.3 def _addItemToContextMenu (self, xContextMenu, i, sType, **args): xMenuItem = xContextMenu.createInstance("com.sun.star.ui."+sType) #echo("com.sun.star.ui."+sType) for k, v in args.items(): xMenuItem.setPropertyValue(k, v) #print("> ", k, v, xMenuItem) xContextMenu.insertByIndex(i, xMenuItem) return i + 1 def _getWord (self): try: xDoc = xDesktop.getCurrentComponent() xViewCursor = xDoc.CurrentController.ViewCursor if xViewCursor.CharLocale.Language != "fr": return "" xText = xViewCursor.Text xCursor = xText.createTextCursorByRange(xViewCursor) xCursor.gotoStartOfWord(False) xCursor.gotoEndOfWord(True) except: traceback.print_exc() return xCursor.String.strip('.') class JobExecutor (XJob, unohelper.Base): def __init__ (self, ctx): self.ctx = ctx global xDesktop global oDict global oLexicographe try: if not xDesktop: xDesktop = self.ctx.getServiceManager().createInstanceWithContext('com.sun.star.frame.Desktop', self.ctx) if not oDict: xCurCtx = uno.getComponentContext() oGC = self.ctx.ServiceManager.createInstanceWithContext("org.openoffice.comp.pyuno.Lightproof.grammalecte", self.ctx) if hasattr(oGC, "getDictionary"): # https://bugs.documentfoundation.org/show_bug.cgi?id=97790 oDict = oGC.getDictionary() else: oDict = IBDAWG("French.bdic") if not oLexicographe: oLexicographe = lxg.Lexicographe(oDict) except: traceback.print_exc() def execute (self, args): if not args: return try: # what version of the software? xSettings = helpers.getConfigSetting("org.openoffice.Setup/Product", False) sProdName = xSettings.getByName("ooName") sVersion = xSettings.getByName("ooSetupVersion") if (sProdName == "LibreOffice" and sVersion < "4") or sProdName == "OpenOffice.org": return # what event? bCorrectEvent = False for arg in args: if arg.Name == "Environment": for v in arg.Value: if v.Name == "EnvType" and v.Value == "DOCUMENTEVENT": bCorrectEvent = True elif v.Name == "EventName": pass # check is correct event #print "Event: %s" % v.Value elif v.Name == "Model": model = v.Value if bCorrectEvent: if model.supportsService("com.sun.star.text.TextDocument"): xController = model.getCurrentController() if xController: xController.registerContextMenuInterceptor(MyContextMenuInterceptor(self.ctx)) #print("OFF") except: traceback.print_exc() g_ImplementationHelper = unohelper.ImplementationHelper() g_ImplementationHelper.addImplementation(JobExecutor, "grammalecte.ContextMenuHandler", ("grammalecte.ContextMenuHandler",),) |
Added gc_lang/fr/oxt/ContextMenu/jobs.xcu version [5be359105c].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <?xml version="1.0" encoding="UTF-8"?> <oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:install="http://openoffice.org/2004/installation" oor:name="Jobs" oor:package="org.openoffice.Office"> <node oor:name="Jobs"> <node oor:name="StartIA" oor:op="replace"> <prop oor:name="Service"> <value>grammalecte.ContextMenuHandler</value> </prop> </node> </node> <node oor:name="Events"> <node oor:name="OnNew" oor:op="fuse"> <node oor:name="JobList"> <node oor:name="StartIA" oor:op="replace"/> </node> </node> <node oor:name="OnLoad" oor:op="fuse"> <node oor:name="JobList"> <node oor:name="StartIA" oor:op="replace"/> </node> </node> </node> </oor:component-data> |
Added gc_lang/fr/oxt/Dictionnaires/DictionarySwitcher.py version [1105138890].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | # -*- coding: utf8 -*- # French Dictionary Switcher # by Olivier R. # License: MPL 2 import unohelper import uno import re import traceback import helpers import ds_strings from com.sun.star.task import XJobExecutor from com.sun.star.awt import XActionListener from com.sun.star.beans import PropertyValue class FrenchDictionarySwitcher (unohelper.Base, XActionListener, XJobExecutor): def __init__ (self, ctx): self.ctx = ctx self.xSvMgr = self.ctx.ServiceManager self.xContainer = None self.dialog = None self.xRB_m = None self.xRB_c = None self.xRB_r = None self.xRB_f = None self.sCurrentDic = '' self.sSelectedDic = '' def addWidget (self, name, wtype, x, y, w, h, **kwargs): xWidget = self.dialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype) xWidget.Name = name xWidget.PositionX = x xWidget.PositionY = y xWidget.Width = w xWidget.Height = h for k, w in kwargs.items(): setattr(xWidget, k, w) self.dialog.insertByName(name, xWidget) return xWidget def run (self, sLang): dUI = ds_strings.getUI(sLang) # what is the current dictionary xSettings = helpers.getConfigSetting("/org.openoffice.Office.Linguistic/ServiceManager/Dictionaries/HunSpellDic_fr", False) xLocations = xSettings.getByName("Locations") m = re.search(r"fr-(\w*)\.(?:dic|aff)", xLocations[0]) self.sCurrentDic = m.group(1) # dialog self.dialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx) self.dialog.Width = 200 self.dialog.Height = 290 self.dialog.Title = dUI.get('title', "#title#") xWindowSize = helpers.getWindowSize() self.dialog.PositionX = int((xWindowSize.Width / 2) - (self.dialog.Width / 2)) self.dialog.PositionY = int((xWindowSize.Height / 2) - (self.dialog.Height / 2)) # xWidgets padding = 10 hspace = 60 posY1 = 20; posY2 = posY1 + hspace; posY3 = posY2 + hspace; posY4 = posY3 + hspace; posY5 = posY4 + hspace + 10; nLblWidth = 170 nLblHeight = 20 nDescWidth = 170 nDescHeight = 40 xFD1 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFD1.Height = 12 xFD1.Name = "Verdana" xFD2 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFD2.Height = 11 xFD2.Name = "Verdana" xFD3 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFD3.Height = 10 xFD3.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD") xFD3.Name = "Verdana" gbm = self.addWidget('groupbox', 'GroupBox', 5, 5, 190, 260, Label = dUI.get('choose', "#choose#"), FontDescriptor = xFD1, FontRelief = 1, TextColor = 0xAA2200) # Note: the only way to group RadioButtons is to create them successively rbm_m = self.addWidget('rb-moderne', 'RadioButton', padding, posY1, nLblWidth, nLblHeight, Label = dUI.get('moderne', "#moderne#"), FontDescriptor = xFD2, FontRelief = 1, TextColor = 0x0022AA) self.xRB_m = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx) self.xRB_m.setModel(rbm_m) rbm_c = self.addWidget('rb-classique', 'RadioButton', padding, posY2, nLblWidth, nLblHeight, Label = dUI.get('classique', "#classique#"), FontDescriptor = xFD2, FontRelief = 1, TextColor = 0x0022AA) self.xRB_c = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx) self.xRB_c.setModel(rbm_c) rbm_r = self.addWidget('rb-reforme1990', 'RadioButton', padding, posY3, nLblWidth, nLblHeight, Label = dUI.get('reforme1990', "#reforme1990#"), FontDescriptor = xFD2, FontRelief = 1, TextColor = 0x0022AA) self.xRB_r = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx) self.xRB_r.setModel(rbm_r) rbm_t = self.addWidget('rb-toutesvariantes', 'RadioButton', padding, posY4, nLblWidth, nLblHeight, Label = dUI.get('toutesvariantes', "#toutesvariantes#"), FontDescriptor = xFD2, FontRelief = 1, TextColor = 0x0022AA) self.xRB_t = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlRadioButton', self.ctx) self.xRB_t.setModel(rbm_t) label_m = self.addWidget('label_m', 'FixedText', 20, posY1+10, nDescWidth, nDescHeight, Label = dUI.get('descModern', "#descModern#"), MultiLine = True) label_c = self.addWidget('label_c', 'FixedText', 20, posY2+10, nDescWidth, nDescHeight, Label = dUI.get('descClassic', "#descClassic#"), MultiLine = True) label_r = self.addWidget('label_r', 'FixedText', 20, posY3+10, nDescWidth, nDescHeight, Label = dUI.get('descReform', "#descReform#"), MultiLine = True) label_t = self.addWidget('label_t', 'FixedText', 20, posY4+10, nDescWidth, nDescHeight, Label = dUI.get('descAllvar', "#descAllvar#"), MultiLine = True) if self.sCurrentDic: self.setRadioButton(self.sCurrentDic) sMsgLabel = dUI.get('restart', "#restart#") bButtonActive = True else: sMsgLabel = dUI.get('error', "#error#") bButtonActive = False label_info = self.addWidget('label_info', 'FixedText', 10, posY4+50, 180, 10, Label = sMsgLabel, TextColor = 0xAA2200, MultiLine = True) button = self.addWidget('select', 'Button', padding+40, posY5, 100, 14, Label = dUI.get('select', "#select#"), FontDescriptor = xFD3, TextColor = 0x004400, Enabled = bButtonActive) # container self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx) self.xContainer.setModel(self.dialog) self.xContainer.getControl('select').addActionListener(self) self.xContainer.setVisible(False) toolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx) self.xContainer.createPeer(toolkit, None) self.xContainer.execute() def setRadioButton (self, sDic): if sDic == 'moderne': self.xRB_m.setState(True) elif sDic == 'classique': self.xRB_c.setState(True) elif sDic == 'reforme1990': self.xRB_r.setState(True) elif sDic == 'toutesvariantes': self.xRB_t.setState(True) else: pass # XActionListener def actionPerformed (self, actionEvent): try: if self.xRB_m.getState(): self.sSelectedDic = 'moderne' elif self.xRB_c.getState(): self.sSelectedDic = 'classique' elif self.xRB_r.getState(): self.sSelectedDic = 'reforme1990' elif self.xRB_t.getState(): self.sSelectedDic = 'toutesvariantes' else: # no dictionary selected pass if self.sSelectedDic and self.sSelectedDic != self.sCurrentDic : # Modify the registry xSettings = helpers.getConfigSetting("/org.openoffice.Office.Linguistic/ServiceManager/Dictionaries/HunSpellDic_fr", True) xLocations = xSettings.getByName("Locations") v1 = xLocations[0].replace(self.sCurrentDic, self.sSelectedDic) v2 = xLocations[1].replace(self.sCurrentDic, self.sSelectedDic) #xSettings.replaceByName("Locations", xLocations) # doesn't work, see line below uno.invoke(xSettings, "replaceByName", ("Locations", uno.Any("[]string", (v1, v2)))) xSettings.commitChanges() self.xContainer.endExecute() except: traceback.print_exc() # XJobExecutor def trigger (self, args): try: dialog = FrenchDictionarySwitcher(self.ctx) dialog.run() except: traceback.print_exc() #g_ImplementationHelper = unohelper.ImplementationHelper() #g_ImplementationHelper.addImplementation(FrenchDictionarySwitcher, 'dicollecte.FrenchDictionarySwitcher', ('com.sun.star.task.Job',)) |
Added gc_lang/fr/oxt/Dictionnaires/dictionaries.xcu version [fb466201bf].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | <?xml version="1.0" encoding="UTF-8"?> <oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="Linguistic" oor:package="org.openoffice.Office"> <node oor:name="ServiceManager"> <node oor:name="Dictionaries"> <node oor:name="HunSpellDic_fr" oor:op="fuse"> <prop oor:name="Locations" oor:type="oor:string-list"> <value>%origin%/dictionaries/fr-classique.aff %origin%/dictionaries/fr-classique.dic</value> </prop> <prop oor:name="Format" oor:type="xs:string"> <value>DICT_SPELL</value> </prop> <prop oor:name="Locales" oor:type="oor:string-list"> <value>fr-FR fr-BE fr-CA fr-CH fr-LU fr-MC fr-BF fr-CI fr-SN fr-ML fr-NE fr-TG fr-BJ</value> <!-- France, Belgique, Canada, Suisse, Luxembourg, Monaco --> <!-- Burkina Faso, Côte d’Ivoire, Sénégal, Mali, Niger, Togo, Benin --> </prop> </node> <node oor:name="HyphDic_fr" oor:op="fuse"> <prop oor:name="Locations" oor:type="oor:string-list"> <value>%origin%/dictionaries/hyph_fr.dic</value> </prop> <prop oor:name="Format" oor:type="xs:string"> <value>DICT_HYPH</value> </prop> <prop oor:name="Locales" oor:type="oor:string-list"> <value>fr-FR fr-BE fr-CA fr-CH fr-LU fr-MC fr-BF fr-CI fr-SN fr-ML fr-NE fr-TG fr-BJ</value> </prop> </node> <node oor:name="ThesDic_fr" oor:op="fuse"> <prop oor:name="Locations" oor:type="oor:string-list"> <value>%origin%/dictionaries/thes_fr.dat %origin%/dictionaries/thes_fr.idx</value> </prop> <prop oor:name="Format" oor:type="xs:string"> <value>DICT_THES</value> </prop> <prop oor:name="Locales" oor:type="oor:string-list"> <value>fr-FR fr-BE fr-CA fr-CH fr-LU fr-MC fr-BF fr-CI fr-SN fr-ML fr-NE fr-TG fr-BJ</value> </prop> </node> </node> </node> </oor:component-data> |
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/README_dict_fr.txt version [b1d836334b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | _______________________________________________________________________________ DICTIONNAIRES ORTHOGRAPHIQUES FRANÇAIS version 6.0.3 Olivier R. - dicollecte<at>free<dot>fr Dicollecte : http://www.dicollecte.org/ Licence : MPL : Mozilla Public License version 2.0 -- http://www.mozilla.org/MPL/2.0/ Ce dictionnaire ne peut fonctionner qu’avec un logiciel utilisant le correcteur Hunspell : OpenOffice.org 3.2+, Firefox 4+, Thunderbird 5+ Principaux contributeurs : - Jean-Luc T. ; - Sylvain P. ; - Laurent Dubois ; - Dominique Pellé ; - Pierre Poisson ; - Pierre-Yves ; - Pierre Choffardet ; - Leywen ; - Romain Muller et Serge Bibauw, de l’association RENOUVO, grâce à qui la nouvelle orthographe et ses anciennes variantes ont pu être établies ; - Chantal Contant, pour ses recherches sur la réforme de 1990 ; - Benoît Sagot, qui nous a autorisé à comparer notre lexique avec Lefff, ce qui a mis en évidence des dizaines d’erreurs d’étiquetage grammatical ; - Philipp Burgess, pour la normalisation Unicode avec Hunspell. Merci aussi à tous ceux qui ont apporté leur pierre à l’édifice. http://www.dicollecte.org/members.php?prj=fr Pour participer à l’amélioration du dictionnaire, allez sur : http://www.dicollecte.org/home.php?prj=fr _______________________________________________________________________________ À propos des différents dictionnaires français _______________________________________________________________________________ En 1990, le Conseil supérieur à la langue française et l’Académie française ont proposé une réforme de l’orthographe qui concerne plusieurs milliers de mots. L’emploi des nouvelles graphies n’est pas obligatoire. Les anciennes comme les nouvelles sont considérées comme correctes. Pour en savoir plus sur la réforme de 1990 : http://www.renouvo.org/regles.php http://www.orthographe-recommandee.info/ Malgré les rectifications modestes apportées par cette réforme, la nouvelle orthographe suscite beaucoup de polémiques. Afin de satisfaire les exigences de chacun, quatre dictionnaires existent, respectant différemment cette réforme. Dictionnaire “Moderne” Ce dictionnaire propose une sélection des graphies classiques et réformées, suivant la lente évolution de l’orthographe actuelle. Ce dictionnaire contient les graphies les moins polémiques de la réforme. Dictionnaire “Classique” [recommandé] Ce dictionnaire est une extension du dictionnaire «Moderne» et propose en sus des graphies alternatives, parfois encore très usitées, parfois tombées en désuétude. Dictionnaire “Réforme 1990” Ce dictionnaire ne connaît que les graphies nouvelles des mots concernés par la réforme de 1990. Dictionnaire “Toutes variantes” Ce dictionnaire contient les nouvelles et les anciennes graphies des mots concernés par la réforme de 1990. |
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/README_hyph_fr-2.9.txt version [ffc9ffe80a].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | _____________________________________________________________________________ Motifs de division des mots pour le français (fr) Version 2.9 Licence : GNU LGPL. Origine : Basé sur les motifs de division de TeX *hyph-fr.tex*, version renommée (juin 2008) du fichier *frhyph.tex* (V2.12, 2002/12/11) pour la cohérence avec d'autres fichiers de motifs de division de la collection hyph-utf8. Voir http://tug.org/tex-hyphen pour plus d'informations. Les motifs de division de TeX sont publiés sous la licence LaTeX Project Public License (LPPL) -- http://www.latex-project.org/lppl.txt Licence : Les adaptations pour OpenOffice.org sont publiées sous la licence GNU Lesser General Public License (LGPL) version 2.1 ou supérieure -- http://www.gnu.org/licenses/ Auteurs : 2.9 Marc Lodewijck <mlodewijck@gmail.com> 2.0 Paul Pichaureau <paul.pichaureau@alcandre.net> 1.0 Blaise Drayer <blaise@drayer.ch> Journal : 2.9 Nouvelle version révisée et augmentée : + Traitement des noms composés à trait d'union + Redressement de motifs altérés 2.0 Traitement des mots avec apostrophe 1.0 Première conversion Ce dictionnaire devrait être conforme à toutes les variantes régionales du français. _____________________________________________________________________ French word hyphenation patterns Version 2.9 Language: French (fr). License: GNU LGPL. Origin: Based on the TeX hyphenation tables *hyph-fr.tex*, renamed (June 2008) from *frhyph.tex* (V2.12, 2002/12/11) for consistency with other files with hyphenation patterns in hyph-utf8 package. See http://tug.org/tex-hyphen for more details. The TeX hyphenation tables are released under the LaTeX Project Public License (LPPL) -- http://www.latex-project.org/lppl.txt License: OpenOffice.org adaptions of this package are licensed under the GNU Lesser General Public License (LGPL) version 2.1 or higher -- http://www.gnu.org/licenses/ Authors: 2.9 Marc Lodewijck <mlodewijck@gmail.com> 2.0 Paul Pichaureau <paul.pichaureau@alcandre.net> 1.0 Blaise Drayer <blaise@drayer.ch> Log: 2.9 New revised and expanded version: + Processing of hyphenated compounds + Correction of altered patterns 2.0 Fix for words with apostrophe 1.0 First conversion This dictionary is based on syllable matching patterns and therefore should be usable under other variations of French. |
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/README_hyph_fr-3.0.txt version [b9b9e15d66].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | _____________________________________________________________________________ Motifs de division des mots pour le français (fr) Version 3.0.1 Licence : GNU LGPL. Origine : Basé sur les motifs de division de TeX *hyph-fr.tex*, version renommée (juin 2008) du fichier *frhyph.tex* (V2.12, 2002/12/11) pour la cohérence avec d'autres fichiers de motifs de division de la collection hyph-utf8. Voir http://tug.org/tex-hyphen pour plus d'informations. Les motifs de division de TeX sont publiés sous la licence LaTeX Project Public License (LPPL) -- http://www.latex-project.org/lppl.txt Licence : Les adaptations pour OpenOffice.org sont publiées sous la licence GNU Lesser General Public License (LGPL) version 2.1 ou supérieure -- http://www.gnu.org/licenses/ Auteurs : 3.0 Marc Lodewijck <mlodewijck@gmail.com> 2.0 Paul Pichaureau <paul.pichaureau@alcandre.net> 1.0 Blaise Drayer <blaise@drayer.ch> Journal : 3.0.1 Correction d’un bug: COUMPOUNDLEFTHYPHENMIN -> COMPOUNDLEFTHYPHENMIN 3.0 Nouvelle version révisée et augmentée : + Conversion au format de codage Unicode UTF-8 + Traitement des noms composés à trait d'union + Redressement de motifs altérés 2.0 Traitement des mots avec apostrophe 1.0 Première conversion Ce dictionnaire devrait être conforme à toutes les variantes régionales du français. _____________________________________________________________________ French word hyphenation patterns Version 3.0 Language: French (fr). License: GNU LGPL. Origin: Based on the TeX hyphenation tables *hyph-fr.tex*, renamed (June 2008) from *frhyph.tex* (V2.12, 2002/12/11) for consistency with other files with hyphenation patterns in hyph-utf8 package. See http://tug.org/tex-hyphen for more details. The TeX hyphenation tables are released under the LaTeX Project Public License (LPPL) -- http://www.latex-project.org/lppl.txt License: OpenOffice.org adaptions of this package are licensed under the GNU Lesser General Public License (LGPL) version 2.1 or higher -- http://www.gnu.org/licenses/ Authors: 3.0 Marc Lodewijck <mlodewijck@gmail.com> 2.0 Paul Pichaureau <paul.pichaureau@alcandre.net> 1.0 Blaise Drayer <blaise@drayer.ch> Log: 3.0.1 Bug fix: COUMPOUNDLEFTHYPHENMIN -> COMPOUNDLEFTHYPHENMIN 3.0 New revised and expanded version: + Conversion to UTF-8 Unicode encoding + Processing of hyphenated compounds + Correction of altered patterns 2.0 Fix for words with apostrophe 1.0 First conversion This dictionary is based on syllable matching patterns and therefore should be usable under other variations of French. |
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/README_thes_fr.txt version [952166381e].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | _______________________________________________________________________________ Dictionnaire des synonymes français myThes version 2.3 Par Frédéric Labbé Pour les mises à jour, allez sur Dicollecte : http://www.dicollecte.org/home.php?prj=fr Licence: LGPL : GNU Lesser General Public License version 2.1 ou supérieure -- http://www.gnu.org/licenses/lgpl-2.1.html _______________________________________________________________________________ Ce dictionnaire des synonymes est encore en cours d'élaboration. Actuellement, seules les graphies précédant la réforme de l'orthographe de 1990 sont reconnues. _______________________________________________________________________________ Historique _______________________________________________________________________________ * myThes est le format de thesaurus de OOo à partir de la version 2.0 developpé par Kevin Hendricks sur la base des travaux de l'université de Priceton: http://lingucomponent.openoffice.org/thesaurus.html Cette version est incompatible avec le format binaire utilisé pour les versions 1.x d'OpenOffice.org. * La conception du thesaurus dans le format 1.0 a été initiée par Frederic Labbé. * La version 2 a été transformée par la société Indesko. Laurent Godard (lgodard@indesko.com) Les catégories grammaticales des mots ont été complétées sur la base de InDico, dictionnaire taggué developpé par InDesko et issu de la transformation des listes de l'abu (http://abu.cnam.fr/) * La version 2.1 n'apporte que la reconnaissance des mots avec ligatures. Ce thesaurus a été découvert ici : http://user.services.openoffice.org/fr/forum/viewtopic.php?p=15783#15783 * La version 2.2 est générée à partir de la base de données de Dicollecte. Pour l'instant, seules quelques modifications ont été faites. * Version 2.3 : nettoyage des entrées erronées. _______________________________________________________________________________ |
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/fr-classique.aff version [4d3dfc11d3].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 8383 8384 8385 8386 8387 8388 8389 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 8420 8421 8422 8423 8424 8425 8426 8427 8428 8429 8430 8431 8432 8433 8434 8435 8436 8437 8438 8439 8440 8441 8442 8443 8444 8445 8446 8447 8448 8449 8450 8451 8452 8453 8454 8455 8456 8457 8458 8459 8460 8461 8462 8463 8464 8465 8466 8467 8468 8469 8470 8471 8472 8473 8474 8475 8476 8477 8478 8479 8480 8481 8482 8483 8484 8485 8486 8487 8488 8489 8490 8491 8492 8493 8494 8495 8496 8497 8498 8499 8500 8501 8502 8503 8504 8505 8506 8507 8508 8509 8510 8511 8512 8513 8514 8515 8516 8517 8518 8519 8520 8521 8522 8523 8524 8525 8526 8527 8528 8529 8530 8531 8532 8533 8534 8535 8536 8537 8538 8539 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 8550 8551 8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 8566 8567 8568 8569 8570 8571 8572 8573 8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 8588 8589 8590 8591 8592 8593 8594 8595 8596 8597 8598 8599 8600 8601 8602 8603 8604 8605 8606 8607 8608 8609 8610 8611 8612 8613 8614 8615 8616 8617 8618 8619 8620 8621 8622 8623 8624 8625 8626 8627 8628 8629 8630 8631 8632 8633 8634 8635 8636 8637 8638 8639 8640 8641 8642 8643 8644 8645 8646 8647 8648 8649 8650 8651 8652 8653 8654 8655 8656 8657 8658 8659 8660 8661 8662 8663 8664 8665 8666 8667 8668 8669 8670 8671 8672 8673 8674 8675 8676 8677 8678 8679 8680 8681 8682 8683 8684 8685 8686 8687 8688 8689 8690 8691 8692 8693 8694 8695 8696 8697 8698 8699 8700 8701 8702 8703 8704 8705 8706 8707 8708 8709 8710 8711 8712 8713 8714 8715 8716 8717 8718 8719 8720 8721 8722 8723 8724 8725 8726 8727 8728 8729 8730 8731 8732 8733 8734 8735 8736 8737 8738 8739 8740 8741 8742 8743 8744 8745 8746 8747 8748 8749 8750 8751 8752 8753 8754 8755 8756 8757 8758 8759 8760 8761 8762 8763 8764 8765 8766 8767 8768 8769 8770 8771 8772 8773 8774 8775 8776 8777 8778 8779 8780 8781 8782 8783 8784 8785 8786 8787 8788 8789 8790 8791 8792 8793 8794 8795 8796 8797 8798 8799 8800 8801 8802 8803 8804 8805 8806 8807 8808 8809 8810 8811 8812 8813 8814 8815 8816 8817 8818 8819 8820 8821 8822 8823 8824 8825 8826 8827 8828 8829 8830 8831 8832 8833 8834 8835 8836 8837 8838 8839 8840 8841 8842 8843 8844 8845 8846 8847 8848 8849 8850 8851 8852 8853 8854 8855 8856 8857 8858 8859 8860 8861 8862 8863 8864 8865 8866 8867 8868 8869 8870 8871 8872 8873 8874 8875 8876 8877 8878 8879 8880 8881 8882 8883 8884 8885 8886 8887 8888 8889 8890 8891 8892 8893 8894 8895 8896 8897 8898 8899 8900 8901 8902 8903 8904 8905 8906 8907 8908 8909 8910 8911 8912 8913 8914 8915 8916 8917 8918 8919 8920 8921 8922 8923 8924 8925 8926 8927 8928 8929 8930 8931 8932 8933 8934 8935 8936 8937 8938 8939 8940 8941 8942 8943 8944 8945 8946 8947 8948 8949 8950 8951 8952 8953 8954 8955 8956 8957 8958 8959 8960 8961 8962 8963 8964 8965 8966 8967 8968 8969 8970 8971 8972 8973 8974 | # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. # AFFIXES DU DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “CLASSIQUE” v6.0.3 # par Olivier R. -- licence MPL 2.0 # Généré le 25-04-2017 à 13:20 # Pour améliorer le dictionnaire, allez sur http://www.dicollecte.org/ SET UTF-8 WORDCHARS -’'1234567890. TRY esntiarulodcpmévqfgbhàxèjyêMILzACçôîPâùJFSûBVœRDGNETHXkïOwKWYUëQÉZŒüãÎáöóÈíæÅñäśńÿ MAP 25 MAP aàâäAÀÂÄ MAP eéèêëEÉÈÊË MAP iîïyIÎÏY MAP oôöOÔÖ MAP uùûüUÙÛÜ MAP cçCÇ MAP bB MAP dD MAP fF MAP gG MAP hH MAP jJ MAP kK MAP lL MAP mM MAP nN MAP pP MAP qQ MAP rR MAP sS MAP tT MAP vV MAP wW MAP xX MAP zZ REP 82 REP ^Ca$ Ça REP ^l l' REP ^d d' REP ^n n' REP ^s s' REP ^j j' REP ^m m' REP ^t t' REP ^c c' REP f ph REP ph f REP c qu REP qu c REP k qu REP qu k REP x ct REP ct x REP bb b REP b bb REP cc c REP c cc REP ff f REP f ff REP ll l REP l ll REP mm m REP m mm REP nn n REP n nn REP pp p REP p pp REP rr r REP r rr REP ss s REP s ss REP ss c REP c ss REP ss ç REP ç ss REP tt t REP t tt REP œ oe REP oe œ REP æ ae REP ae æ REP ai é REP é ai REP ai è REP è ai REP ai ê REP ê ai REP ei é REP é ei REP ei è REP è ei REP ei ê REP ê ei REP o au REP au o REP o eau REP eau o REP ett èt REP èt ett REP ell èl REP èl ell REP t th REP th t REP ième$ e REP ème$ e REP è$ e REP mn$ min REP ogue$ ogiste REP ogiste$ ogue REP disez$ dites REP fesez$ faites REP faisez$ faites REP puit puits REP sanctionnable punissable REP questionnable discutable REP antitartre détartrant REP email courriel REP construirent construisirent KEY azertyuiop|qsdfghjklmù|wxcvbn|aéz|yèu|iço|oàp|aqz|zse|edr|rft|tgy|yhu|uji|iko|olpm|qws|sxd|dcf|fvg|gbh|hnj ICONV 41 ICONV ’ ' ICONV ʼ ' ICONV ffi ffi ICONV ffl ffl ICONV ff ff ICONV ſt ft ICONV fi fi ICONV fl fl ICONV st st ICONV à à ICONV â â ICONV ä ä ICONV é é ICONV è è ICONV ê ê ICONV ë ë ICONV î î ICONV ï ï ICONV ô ô ICONV ö ö ICONV ù ù ICONV û û ICONV ü ü ICONV ÿ ÿ ICONV ç ç ICONV À À ICONV   ICONV Ä Ä ICONV É É ICONV È È ICONV Ê Ê ICONV Ë Ë ICONV Î Î ICONV Ï Ï ICONV Ô Ô ICONV Ö Ö ICONV Ù Ù ICONV Û Û ICONV Ü Ü ICONV Ÿ Ÿ ICONV Ç Ç OCONV 1 OCONV ' ’ FLAG long FULLSTRIP NEEDAFFIX () FORBIDDENWORD {} CIRCUMFIX ** KEEPCASE || NOSUGGEST -- BREAK 7 BREAK - BREAK . BREAK · BREAK ^' BREAK ^‘ BREAK '$ BREAK ’$ PFX L' Y 34 PFX L' 0 l' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX L' a l'A a PFX L' à l'À à PFX L' â l' â PFX L' e l'E e PFX L' é l'É é PFX L' è l'È è PFX L' ê l'Ê ê PFX L' i l'I i PFX L' î l'Î î PFX L' o l'O o PFX L' ô l'Ô ô PFX L' u l'U u PFX L' y l'Y y PFX L' h l'H h PFX L' œ l'Œ œ PFX L' æ l'Æ æ PFX L' 0 L' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX L' a L'A a PFX L' à L'À à PFX L' â L' â PFX L' e L'E e PFX L' é L'É é PFX L' è L'È è PFX L' ê L'Ê ê PFX L' i L'I i PFX L' î L'Î î PFX L' o L'O o PFX L' ô L'Ô ô PFX L' u L'U u PFX L' y L'Y y PFX L' h L'H h PFX L' œ L'Œ œ PFX L' æ L'Æ æ PFX D' Y 34 PFX D' 0 d' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX D' a d'A a PFX D' à d'À à PFX D' â d' â PFX D' e d'E e PFX D' é d'É é PFX D' è d'È è PFX D' ê d'Ê ê PFX D' i d'I i PFX D' î d'Î î PFX D' o d'O o PFX D' ô d'Ô ô PFX D' u d'U u PFX D' y d'Y y PFX D' h d'H h PFX D' œ d'Œ œ PFX D' æ d'Æ æ PFX D' 0 D' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX D' a D'A a PFX D' à D'À à PFX D' â D' â PFX D' e D'E e PFX D' é D'É é PFX D' è D'È è PFX D' ê D'Ê ê PFX D' i D'I i PFX D' î D'Î î PFX D' o D'O o PFX D' ô D'Ô ô PFX D' u D'U u PFX D' y D'Y y PFX D' h D'H h PFX D' œ D'Œ œ PFX D' æ D'Æ æ PFX Q' Y 34 PFX Q' 0 qu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q' a qu'A a PFX Q' à qu'À à PFX Q' â qu' â PFX Q' e qu'E e PFX Q' é qu'É é PFX Q' è qu'È è PFX Q' ê qu'Ê ê PFX Q' i qu'I i PFX Q' î qu'Î î PFX Q' o qu'O o PFX Q' ô qu'Ô ô PFX Q' u qu'U u PFX Q' y qu'Y y PFX Q' h qu'H h PFX Q' œ qu'Œ œ PFX Q' æ qu'Æ æ PFX Q' 0 Qu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q' a Qu'A a PFX Q' à Qu'À à PFX Q' â Qu' â PFX Q' e Qu'E e PFX Q' é Qu'É é PFX Q' è Qu'È è PFX Q' ê Qu'Ê ê PFX Q' i Qu'I i PFX Q' î Qu'Î î PFX Q' o Qu'O o PFX Q' ô Qu'Ô ô PFX Q' u Qu'U u PFX Q' y Qu'Y y PFX Q' h Qu'H h PFX Q' œ Qu'Œ œ PFX Q' æ Qu'Æ æ PFX Q* Y 6 PFX Q* 0 quoiqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q* 0 puisqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q* 0 lorsqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q* 0 Quoiqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q* 0 Puisqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q* 0 Lorsqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Qj Y 1 PFX Qj 0 jusqu' [aàâeèéêiîoôuyhœæ] PFX Si Y 1 PFX Si 0 s' . SFX S. Y 1 SFX S. 0 s [^sxz] SFX S= Y 1 SFX S= 0 s [^sxz] SFX X. Y 3 SFX X. 0 x [aeoœ]u SFX X. l ux al SFX X. il ux ail SFX A. Y 9 SFX A. 0 s [^sxz] SFX A. an en an SFX A. f ves f SFX A. h hes h SFX A. s ses s SFX A. x xes x SFX A. y ies y SFX A. zz zzes zz SFX A. z zzes [^z]z SFX I. Y 7 SFX I. 0 s [^sxz] SFX I. a e a SFX I. e i e SFX I. en ina en SFX I. o i o SFX I. um a um SFX I. us i us SFX F. Y 78 SFX F. 0 s [eë] SFX F. e 0 [éiï]e SFX F. e s [éiï]e SFX F. rice eur [dt]rice SFX F. rice eurs [dt]rice SFX F. de d de SFX F. de ds de SFX F. fe f fe SFX F. fe fs fe SFX F. anche anc anche SFX F. anche ancs anche SFX F. èche ec èche SFX F. èche ecs èche SFX F. aiche ais aiche SFX F. aîche ais aîche SFX F. khe kh khe SFX F. khe khs khe SFX F. he h [ut]he SFX F. he hs [ut]he SFX F. ke k [^è]ke SFX F. ke ks [^è]ke SFX F. èke ek èke SFX F. èke eks èke SFX F. le l [aiouûh]le SFX F. le ls [aiouûh]le SFX F. lle l [eiu]lle SFX F. lle ls [eiu]lle SFX F. olle ou olle SFX F. olle ous olle SFX F. olle ol olle SFX F. olle ols olle SFX F. ne n [aiouï]ne SFX F. ne ns [aiouï]ne SFX F. nne n [aeo]nne SFX F. nne ns [aeo]nne SFX F. ène en ène SFX F. ène ens ène SFX F. igne in igne SFX F. igne ins igne SFX F. re r [aiouûy]re SFX F. re rs [aiouûy]re SFX F. ère er ère SFX F. ère ers ère SFX F. se s [^us]se SFX F. esse e [^eo].esse SFX F. esse es [^eo].esse SFX F. rofesse rofès rofesse SFX F. eresse eur eresse SFX F. eresse eurs eresse SFX F. oresse eur oresse SFX F. oresse eurs oresse SFX F. sse s [^e]sse SFX F. use us [^eo]use SFX F. euse eur euse SFX F. euse eurs euse SFX F. te t [^èt]te SFX F. te ts [^èt]te SFX F. tte t tte SFX F. tte ts tte SFX F. ète et ète SFX F. ète ets ète SFX F. ue u [^gq]ue SFX F. ue us [^gq]ue SFX F. gue g gue SFX F. gue gs gue SFX F. cque c cque SFX F. cque cs cque SFX F. que c [^c]que SFX F. que cs [^c]que SFX F. ève ef ève SFX F. ève efs ève SFX F. ve f [iïu]ve SFX F. ve fs [iïu]ve SFX F. uë u uë SFX F. uë us uë SFX F. üe u üe SFX F. üe us üe SFX F. ze z ze SFX W. N 15 SFX W. e es e SFX W. ce x ce SFX W. use ux [eo]use SFX W. ausse aux ausse SFX W. ousse oux ousse SFX W. ale al ale SFX W. ale aux ale SFX W. elle eau elle SFX W. elle eaux elle SFX W. elle el [bv]elle SFX W. elle els [bv]elle SFX W. ieille ieux ieille SFX W. ieille ieil ieille SFX W. ofolle oufou ofolle SFX W. ofolle oufous ofolle SFX S* Y 2 SFX S* 0 0/D'L'Q' [^sxz] SFX S* 0 s/D'Q' [^sxz] SFX X* Y 4 SFX X* 0 0/D'L'Q' [ul] SFX X* 0 x/D'Q' [aeoœ]u SFX X* l ux/D'Q' al SFX X* il ux/D'Q' ail SFX A* Y 20 SFX A* an an/D'L'Q' an SFX A* an ans/D'Q' an SFX A* an en/D'Q' an SFX A* f f/D'L'Q' f SFX A* f fs/D'Q' f SFX A* f ves/D'Q' f SFX A* h h/D'L'Q' h SFX A* h hs/D'Q' h SFX A* h hes/D'Q' h SFX A* s s/D'L'Q' s SFX A* s ses/D'Q' s SFX A* x x/D'L'Q' x SFX A* x xes/D'Q' x SFX A* y y/D'L'Q' y SFX A* y ys/D'Q' y SFX A* y ies/D'Q' y SFX A* zz zz/D'L'Q' zz SFX A* zz zzes/D'Q' zz SFX A* z z/D'L'Q' [^z]z SFX A* z zzes/D'Q' [^z]z SFX I* Y 17 SFX I* a a/D'L'Q' a SFX I* a as/D'Q' a SFX I* a e/D'Q' a SFX I* e e/D'L'Q' e SFX I* e es/D'Q' e SFX I* e i/D'Q' e SFX I* en en/D'L'Q' en SFX I* en ens/D'Q' en SFX I* en ina/D'Q' en SFX I* o o/D'L'Q' o SFX I* o os/D'Q' o SFX I* o i/D'Q' o SFX I* um um/D'L'Q' um SFX I* um ums/D'Q' um SFX I* um a/D'Q' um SFX I* us us/D'L'Q' us SFX I* us i/D'Q' us SFX F* Y 59 SFX F* 0 0/D'L'Q' [eë] SFX F* 0 s/D'Q' [eë] SFX F* e 0/D'L'Q' [éiï]e SFX F* e s/D'Q' [éiï]e SFX F* rice eur/D'L'Q' [dt]rice SFX F* rice eurs/D'Q' [dt]rice SFX F* de d/D'L'Q' de SFX F* de ds/D'Q' de SFX F* he h/D'L'Q' [ut]he SFX F* he hs/D'Q' [ut]he SFX F* èke ek/D'L'Q' èke SFX F* èke eks/D'Q' èke SFX F* le l/D'L'Q' [aiouû]le SFX F* le ls/D'Q' [aiouû]le SFX F* lle l/D'L'Q' [eiu]lle SFX F* lle ls/D'Q' [eiu]lle SFX F* ne n/D'L'Q' [aiouï]ne SFX F* ne ns/D'Q' [aiouï]ne SFX F* nne n/D'L'Q' [aeo]nne SFX F* nne ns/D'Q' [aeo]nne SFX F* gne n/D'L'Q' igne SFX F* gne ns/D'Q' igne SFX F* re r/D'L'Q' [aiouûy]re SFX F* re rs/D'Q' [aiouûy]re SFX F* ère er/D'L'Q' ère SFX F* ère ers/D'Q' ère SFX F* se s/D'L'Q' [^us]se SFX F* esse e/D'L'Q' [^eo].esse SFX F* esse es/D'Q' [^eo].esse SFX F* eresse eur/D'L'Q' eresse SFX F* eresse eurs/D'Q' eresse SFX F* oresse eur/D'L'Q' oresse SFX F* oresse eurs/D'Q' oresse SFX F* sse s/D'L'Q' [^e]sse SFX F* use us/D'L'Q' [^eo]use SFX F* euse eur/D'L'Q' euse SFX F* euse eurs/D'Q' euse SFX F* te t/D'L'Q' [^èt]te SFX F* te ts/D'Q' [^èt]te SFX F* tte t/D'L'Q' tte SFX F* tte ts/D'Q' tte SFX F* ète et/D'L'Q' ète SFX F* ète ets/D'Q' ète SFX F* ue u/D'L'Q' [^gq]ue SFX F* ue us/D'Q' [^gq]ue SFX F* gue g/D'L'Q' gue SFX F* gue gs/D'Q' gue SFX F* cque c/D'L'Q' cque SFX F* cque cs/D'Q' cque SFX F* que c/D'L'Q' [^c]que SFX F* que cs/D'Q' [^c]que SFX F* ève ef/D'L'Q' ève SFX F* ève efs/D'Q' ève SFX F* ve f/D'L'Q' [iïu]ve SFX F* ve fs/D'Q' [iïu]ve SFX F* uë u/D'L'Q' uë SFX F* uë us/D'Q' uë SFX F* üe u/D'L'Q' üe SFX F* üe us/D'Q' üe SFX W* Y 10 SFX W* 0 0/D'L'Q' e SFX W* e es/D'Q' e SFX W* ce x/D'L'Q' ce SFX W* use ux/D'L'Q' [eo]use SFX W* ousse oux/D'L'Q' ousse SFX W* ausse aux/D'L'Q' ausse SFX W* ale al/D'L'Q' ale SFX W* ale aux/D'Q' ale SFX W* elle eau/D'L'Q' elle SFX W* elle eaux/D'Q' elle PFX Um Y 29 PFX Um 0 0/S. . PFX Um 0 l' [aàâeèéêiîoôuyœæ] PFX Um 0 d'/S. [aàâeèéêiîoôuyœæ] PFX Um 0 yotta/S. . PFX Um 0 zetta/S. . PFX Um 0 exa/S. . PFX Um 0 l'exa . PFX Um 0 d'exa/S. . PFX Um 0 peta/S. . PFX Um 0 téra/S. . PFX Um 0 giga/S. . PFX Um 0 méga/S. . PFX Um 0 kilo/S. . PFX Um 0 hecto/S. . PFX Um 0 l'hecto . PFX Um 0 d'hecto/S. . PFX Um 0 déca/S. . PFX Um 0 déci/S. . PFX Um 0 centi/S. . PFX Um 0 milli/S. . PFX Um 0 micro/S. . PFX Um 0 nano/S. . PFX Um 0 pico/S. . PFX Um 0 femto/S. . PFX Um 0 atto/S. . PFX Um 0 l'atto . PFX Um 0 d'atto/S. . PFX Um 0 zepto/S. . PFX Um 0 yocto/S. . PFX Ui Y 28 PFX Ui 0 l' [aàâeèéêiîoôuyœæ] PFX Ui 0 d' [aàâeèéêiîoôuyœæ] PFX Ui 0 yotta . PFX Ui 0 zetta . PFX Ui 0 exa . PFX Ui 0 l'exa . PFX Ui 0 d'exa . PFX Ui 0 peta . PFX Ui 0 téra . PFX Ui 0 giga . PFX Ui 0 méga . PFX Ui 0 kilo . PFX Ui 0 hecto . PFX Ui 0 l'hecto . PFX Ui 0 d'hecto . PFX Ui 0 déca . PFX Ui 0 déci . PFX Ui 0 centi . PFX Ui 0 milli . PFX Ui 0 micro . PFX Ui 0 nano . PFX Ui 0 pico . PFX Ui 0 femto . PFX Ui 0 atto . PFX Ui 0 l'atto . PFX Ui 0 d'atto . PFX Ui 0 zepto . PFX Ui 0 yocto . PFX U. Y 20 PFX U. 0 Y . PFX U. 0 Z . PFX U. 0 E . PFX U. 0 P . PFX U. 0 T . PFX U. 0 G . PFX U. 0 M . PFX U. 0 k . PFX U. 0 h . PFX U. 0 da . PFX U. 0 d . PFX U. 0 c . PFX U. 0 m . PFX U. 0 µ . PFX U. 0 n . PFX U. 0 p . PFX U. 0 f . PFX U. 0 a . PFX U. 0 z . PFX U. 0 y . PFX n' Y 1 PFX n' 0 n' [aàâeèéêiîoôuyhœæ] PFX q' Y 1 PFX q' 0 qu' [aàâeèéêiîoôuyhœæ] PFX d' Y 1 PFX d' 0 d' [aàâeèéêiîoôuyhœæ] PFX j' Y 1 PFX j' 0 j' [aàâeèéêiîoôuyhœæ] PFX c' Y 2 PFX c' 0 c' [eé] PFX c' 0 ç' a PFX l' Y 1 PFX l' 0 l' [aàâeèéêiîoôuyhœæ] PFX m' Y 1 PFX m' 0 m' [aàâeèéêiîoôuyhœæ] PFX t' Y 1 PFX t' 0 t' [aàâeèéêiîoôuyhœæ] PFX s' Y 1 PFX s' 0 s' [aàâeèéêiîoôuyhœæ] SFX zA Y 49 SFX zA voir voir/n'q'd'l'm't' avoir SFX zA voir yant/n'q'l'm't' avoir SFX zA avoir eu avoir SFX zA avoir eus avoir SFX zA avoir eue avoir SFX zA avoir eues avoir SFX zA voir i/n'q'j'l't' avoir SFX zA voir s/n'q'l'm't' avoir SFX zA voir 0/n'q'c'l'm't' avoir SFX zA voir vons/n'q'l't' avoir SFX zA voir vez/n'q'l'm' avoir SFX zA avoir ont/n'q'l'm't' avoir SFX zA voir vais/n'q'j'l'm't' avoir SFX zA voir vait/n'q'c'l'm't' avoir SFX zA voir vions/n'q'l't' avoir SFX zA voir viez/n'q'l'm' avoir SFX zA voir vaient/n'q'l'm't' avoir SFX zA avoir eus/n'q'j'l'm't' avoir SFX zA avoir eut/n'q'c'l'm't' avoir SFX zA avoir eûmes/n'q'l't' avoir SFX zA avoir eûtes/n'q'l'm' avoir SFX zA avoir eurent/n'q'l'm't' avoir SFX zA voir urai/n'q'j'l'm't' avoir SFX zA voir uras/n'q'l'm't' avoir SFX zA voir ura/n'q'c'l'm't' avoir SFX zA voir urons/n'q'l't' avoir SFX zA voir urez/n'q'l'm' avoir SFX zA voir uront/n'q'l'm't' avoir SFX zA voir urais/n'q'j'l'm't' avoir SFX zA voir urait/n'q'c'l'm't' avoir SFX zA voir urions/n'q'l't' avoir SFX zA voir uriez/n'q'l'm' avoir SFX zA voir uraient/n'q'l'm't' avoir SFX zA voir ie/n'j'l'm't' avoir SFX zA voir ies/n'l'm't' avoir SFX zA voir it/n'q'c'l'm't' avoir SFX zA voir yons/n'l't' avoir SFX zA voir yez/n'l'm' avoir SFX zA voir ient/n'q'l'm't' avoir SFX zA avoir eusse/n'q'j'l'm't' avoir SFX zA avoir eussé/n'q'l'm't' avoir SFX zA avoir eusses/n'q'l'm't' avoir SFX zA avoir eût/n'q'c'l'm't' avoir SFX zA avoir eussions/n'q'l't' avoir SFX zA avoir eussiez/n'q'l'm' avoir SFX zA avoir eussent/n'q'l'm't' avoir SFX zA voir ie/n' avoir SFX zA voir yons/n' avoir SFX zA voir yez/n' avoir SFX zE Y 45 SFX zE tre tre/n'q'd'l'm't's' être SFX zE être étant/n'q'l'm't's' être SFX zE être été être SFX zE être suis être SFX zE être es/n'q'l'm't' être SFX zE être est/n'q'c'l'm't's' être SFX zE être sommes être SFX zE tre tes/n'q'l'm' être SFX zE être sont être SFX zE être étais/n'q'j'l'm't' être SFX zE être était/n'q'c'l'm't's' être SFX zE être étions/n'q'l't' être SFX zE être étiez/n'q'l'm' être SFX zE être étaient/n'q'c'l'm't's' être SFX zE être fus être SFX zE être fut être SFX zE être fûmes être SFX zE être fûtes être SFX zE être furent être SFX zE être serai être SFX zE être seras être SFX zE être sera être SFX zE être serons être SFX zE être serez être SFX zE être seront être SFX zE être serais être SFX zE être serait être SFX zE être serions être SFX zE être seriez être SFX zE être seraient être SFX zE être sois être SFX zE être soit être SFX zE être soyons être SFX zE être soyez être SFX zE être soient être SFX zE être fusse être SFX zE être fussé être SFX zE être fusses être SFX zE être fût être SFX zE être fussions être SFX zE être fussiez être SFX zE être fussent être SFX zE être sois être SFX zE être soyons être SFX zE être soyez être SFX a0 N 101 SFX a0 er ant [^cg]er SFX a0 cer çant cer SFX a0 ger geant ger SFX a0 er e [^y]er SFX a0 yer ye [^ou]yer SFX a0 yer ie [aou]yer SFX a0 er es [^y]er SFX a0 yer yes [^ou]yer SFX a0 yer ies [aou]yer SFX a0 er ons [^cg]er SFX a0 cer çons cer SFX a0 ger geons ger SFX a0 er ez er SFX a0 er ent [^y]er SFX a0 yer yent [^ou]yer SFX a0 yer ient [aou]yer SFX a0 er ais [^cg]er SFX a0 cer çais cer SFX a0 ger geais ger SFX a0 er ait [^cg]er SFX a0 cer çait cer SFX a0 ger geait ger SFX a0 er ions er SFX a0 er iez er SFX a0 er aient [^cg]er SFX a0 cer çaient cer SFX a0 ger geaient ger SFX a0 er ai [^cg]er SFX a0 cer çai cer SFX a0 ger geai ger SFX a0 er as [^cg]er SFX a0 cer ças cer SFX a0 ger geas ger SFX a0 er a [^cg]er SFX a0 cer ça cer SFX a0 ger gea ger SFX a0 er âmes [^cg]er SFX a0 cer çâmes cer SFX a0 ger geâmes ger SFX a0 er âtes [^cg]er SFX a0 cer çâtes cer SFX a0 ger geâtes ger SFX a0 er èrent er SFX a0 er erai [^y]er SFX a0 yer yerai [^ou]yer SFX a0 yer ierai [aou]yer SFX a0 er eras [^y]er SFX a0 yer yeras [^ou]yer SFX a0 yer ieras [aou]yer SFX a0 er era [^y]er SFX a0 yer yera [^ou]yer SFX a0 yer iera [aou]yer SFX a0 er erons [^y]er SFX a0 yer yerons [^ou]yer SFX a0 yer ierons [aou]yer SFX a0 er erez [^y]er SFX a0 yer yerez [^ou]yer SFX a0 yer ierez [aou]yer SFX a0 er eront [^y]er SFX a0 yer yeront [^ou]yer SFX a0 yer ieront [aou]yer SFX a0 er erais [^y]er SFX a0 yer yerais [^ou]yer SFX a0 yer ierais [aou]yer SFX a0 er erait [^y]er SFX a0 yer yerait [^ou]yer SFX a0 yer ierait [aou]yer SFX a0 er erions [^y]er SFX a0 yer yerions [^ou]yer SFX a0 yer ierions [aou]yer SFX a0 er eriez [^y]er SFX a0 yer yeriez [^ou]yer SFX a0 yer ieriez [aou]yer SFX a0 er eraient [^y]er SFX a0 yer yeraient [^ou]yer SFX a0 yer ieraient [aou]yer SFX a0 er asse [^cg]er SFX a0 cer çasse cer SFX a0 ger geasse ger SFX a0 er asses [^cg]er SFX a0 cer çasses cer SFX a0 ger geasses ger SFX a0 er ât [^cg]er SFX a0 cer çât cer SFX a0 ger geât ger SFX a0 er assions [^cg]er SFX a0 cer çassions cer SFX a0 ger geassions ger SFX a0 er assiez [^cg]er SFX a0 cer çassiez cer SFX a0 ger geassiez ger SFX a0 er assent [^cg]er SFX a0 cer çassent cer SFX a0 ger geassent ger SFX a0 er e [^y]er SFX a0 yer ye [^ou]yer SFX a0 yer ie [aou]yer SFX a0 er ons [^cg]er SFX a0 cer çons cer SFX a0 ger geons ger SFX a0 er ez er SFX a1 Y 102 SFX a1 er er/n'q'd' er SFX a1 er ant/n'q' [^cg]er SFX a1 cer çant/n'q' cer SFX a1 ger geant/n'q' ger SFX a1 er e/n'q'j' [^y]er SFX a1 yer ye/n'q'j' [^ou]yer SFX a1 yer ie/n'q'j' [aou]yer SFX a1 er es/n' [^y]er SFX a1 yer yes/n' [^ou]yer SFX a1 yer ies/n' [aou]yer SFX a1 er ons/n' [^cg]er SFX a1 cer çons/n' cer SFX a1 ger geons/n' ger SFX a1 er ez/n' er SFX a1 er ent/n'q' [^y]er SFX a1 yer yent/n'q' [^ou]yer SFX a1 yer ient/n'q' [aou]yer SFX a1 er ais/n'j' [^cg]er SFX a1 cer çais/n'j' cer SFX a1 ger geais/n'j' ger SFX a1 er ait/n'q' [^cg]er SFX a1 cer çait/n'q' cer SFX a1 ger geait/n'q' ger SFX a1 er ions/n' er SFX a1 er iez/n' er SFX a1 er aient/n'q' [^cg]er SFX a1 cer çaient/n'q' cer SFX a1 ger geaient/n'q' ger SFX a1 er ai/n'j' [^cg]er SFX a1 cer çai/n'j' cer SFX a1 ger geai/n'j' ger SFX a1 er as/n' [^cg]er SFX a1 cer ças/n' cer SFX a1 ger geas/n' ger SFX a1 er a/n'q' [^cg]er SFX a1 cer ça/n'q' cer SFX a1 ger gea/n'q' ger SFX a1 er âmes/n' [^cg]er SFX a1 cer çâmes/n' cer SFX a1 ger geâmes/n' ger SFX a1 er âtes/n' [^cg]er SFX a1 cer çâtes/n' cer SFX a1 ger geâtes/n' ger SFX a1 er èrent/n'q' er SFX a1 er erai/n'j' [^y]er SFX a1 yer yerai/n'j' [^ou]yer SFX a1 yer ierai/n'j' [aou]yer SFX a1 er eras/n' [^y]er SFX a1 yer yeras/n' [^ou]yer SFX a1 yer ieras/n' [aou]yer SFX a1 er era/n'q' [^y]er SFX a1 yer yera/n'q' [^ou]yer SFX a1 yer iera/n'q' [aou]yer SFX a1 er erons/n' [^y]er SFX a1 yer yerons/n' [^ou]yer SFX a1 yer ierons/n' [aou]yer SFX a1 er erez/n' [^y]er SFX a1 yer yerez/n' [^ou]yer SFX a1 yer ierez/n' [aou]yer SFX a1 er eront/n'q' [^y]er SFX a1 yer yeront/n'q' [^ou]yer SFX a1 yer ieront/n'q' [aou]yer SFX a1 er erais/n'j' [^y]er SFX a1 yer yerais/n'j' [^ou]yer SFX a1 yer ierais/n'j' [aou]yer SFX a1 er erait/n'q' [^y]er SFX a1 yer yerait/n'q' [^ou]yer SFX a1 yer ierait/n'q' [aou]yer SFX a1 er erions/n' [^y]er SFX a1 yer yerions/n' [^ou]yer SFX a1 yer ierions/n' [aou]yer SFX a1 er eriez/n' [^y]er SFX a1 yer yeriez/n' [^ou]yer SFX a1 yer ieriez/n' [aou]yer SFX a1 er eraient/n'q' [^y]er SFX a1 yer yeraient/n'q' [^ou]yer SFX a1 yer ieraient/n'q' [aou]yer SFX a1 er asse/n'j' [^cg]er SFX a1 cer çasse/n'j' cer SFX a1 ger geasse/n'j' ger SFX a1 er asses/n' [^cg]er SFX a1 cer çasses/n' cer SFX a1 ger geasses/n' ger SFX a1 er ât/n'q' [^cg]er SFX a1 cer çât/n'q' cer SFX a1 ger geât/n'q' ger SFX a1 er assions/n' [^cg]er SFX a1 cer çassions/n' cer SFX a1 ger geassions/n' ger SFX a1 er assiez/n' [^cg]er SFX a1 cer çassiez/n' cer SFX a1 ger geassiez/n' ger SFX a1 er assent/n'q' [^cg]er SFX a1 cer çassent/n'q' cer SFX a1 ger geassent/n'q' ger SFX a1 er e/n' [^y]er SFX a1 yer ye/n' [^ou]yer SFX a1 yer ie/n' [aou]yer SFX a1 er ons/n' [^cg]er SFX a1 cer çons/n' cer SFX a1 ger geons/n' ger SFX a1 er ez/n' er SFX a2 Y 102 SFX a2 er er/n'q'd'l'm't's' er SFX a2 er ant/n'q'l'm't's' [^cg]er SFX a2 cer çant/n'q'l'm't's' cer SFX a2 ger geant/n'q'l'm't's' ger SFX a2 er e/n'q'j'l'm't's' [^y]er SFX a2 yer ye/n'q'j'l'm't's' [^ou]yer SFX a2 yer ie/n'q'j'l'm't's' [aou]yer SFX a2 er es/n'q'l'm' [^y]er SFX a2 yer yes/n'q'l'm' [^ou]yer SFX a2 yer ies/n'q'l'm' [aou]yer SFX a2 er ons/n'q'l't' [^cg]er SFX a2 cer çons/n'q'l't' cer SFX a2 ger geons/n'q'l't' ger SFX a2 er ez/n'q'l'm' er SFX a2 er ent/n'q'l'm't's' [^y]er SFX a2 yer yent/n'q'l'm't's' [^ou]yer SFX a2 yer ient/n'q'l'm't's' [aou]yer SFX a2 er ais/n'q'j'l'm't' [^cg]er SFX a2 cer çais/n'q'j'l'm't' cer SFX a2 ger geais/n'q'j'l'm't' ger SFX a2 er ait/n'q'l'm't's' [^cg]er SFX a2 cer çait/n'q'l'm't's' cer SFX a2 ger geait/n'q'l'm't's' ger SFX a2 er ions/n'q'l't' er SFX a2 er iez/n'q'l'm' er SFX a2 er aient/n'q'l'm't's' [^cg]er SFX a2 cer çaient/n'q'l'm't's' cer SFX a2 ger geaient/n'q'l'm't's' ger SFX a2 er ai/n'q'j'l't' [^cg]er SFX a2 cer çai/n'q'j'l't' cer SFX a2 ger geai/n'q'j'l't' ger SFX a2 er as/n'q'l'm' [^cg]er SFX a2 cer ças/n'q'l'm' cer SFX a2 ger geas/n'q'l'm' ger SFX a2 er a/n'q'l'm't's' [^cg]er SFX a2 cer ça/n'q'l'm't's' cer SFX a2 ger gea/n'q'l'm't's' ger SFX a2 er âmes/n'q'l't' [^cg]er SFX a2 cer çâmes/n'q'l't' cer SFX a2 ger geâmes/n'q'l't' ger SFX a2 er âtes/n'q'l'm' [^cg]er SFX a2 cer çâtes/n'q'l'm' cer SFX a2 ger geâtes/n'q'l'm' ger SFX a2 er èrent/n'q'l'm't's' er SFX a2 er erai/n'q'j'l't' [^y]er SFX a2 yer yerai/n'q'j'l't' [^ou]yer SFX a2 yer ierai/n'q'j'l't' [aou]yer SFX a2 er eras/n'q'l'm' [^y]er SFX a2 yer yeras/n'q'l'm' [^ou]yer SFX a2 yer ieras/n'q'l'm' [aou]yer SFX a2 er era/n'q'l'm't's' [^y]er SFX a2 yer yera/n'q'l'm't's' [^ou]yer SFX a2 yer iera/n'q'l'm't's' [aou]yer SFX a2 er erons/n'q'l't' [^y]er SFX a2 yer yerons/n'q'l't' [^ou]yer SFX a2 yer ierons/n'q'l't' [aou]yer SFX a2 er erez/n'q'l'm' [^y]er SFX a2 yer yerez/n'q'l'm' [^ou]yer SFX a2 yer ierez/n'q'l'm' [aou]yer SFX a2 er eront/n'q'l'm't's' [^y]er SFX a2 yer yeront/n'q'l'm't's' [^ou]yer SFX a2 yer ieront/n'q'l'm't's' [aou]yer SFX a2 er erais/n'q'j'l'm't' [^y]er SFX a2 yer yerais/n'q'j'l'm't' [^ou]yer SFX a2 yer ierais/n'q'j'l'm't' [aou]yer SFX a2 er erait/n'q'l'm't's' [^y]er SFX a2 yer yerait/n'q'l'm't's' [^ou]yer SFX a2 yer ierait/n'q'l'm't's' [aou]yer SFX a2 er erions/n'q'l't' [^y]er SFX a2 yer yerions/n'q'l't' [^ou]yer SFX a2 yer ierions/n'q'l't' [aou]yer SFX a2 er eriez/n'q'l'm' [^y]er SFX a2 yer yeriez/n'q'l'm' [^ou]yer SFX a2 yer ieriez/n'q'l'm' [aou]yer SFX a2 er eraient/n'q'l'm't's' [^y]er SFX a2 yer yeraient/n'q'l'm't's' [^ou]yer SFX a2 yer ieraient/n'q'l'm't's' [aou]yer SFX a2 er asse/n'q'j'l't' [^cg]er SFX a2 cer çasse/n'q'j'l't' cer SFX a2 ger geasse/n'q'j'l't' ger SFX a2 er asses/n'q'l'm' [^cg]er SFX a2 cer çasses/n'q'l'm' cer SFX a2 ger geasses/n'q'l'm' ger SFX a2 er ât/n'q'l'm't's' [^cg]er SFX a2 cer çât/n'q'l'm't's' cer SFX a2 ger geât/n'q'l'm't's' ger SFX a2 er assions/n'q'l't' [^cg]er SFX a2 cer çassions/n'q'l't' cer SFX a2 ger geassions/n'q'l't' ger SFX a2 er assiez/n'q'l'm' [^cg]er SFX a2 cer çassiez/n'q'l'm' cer SFX a2 ger geassiez/n'q'l'm' ger SFX a2 er assent/n'q'l'm't's' [^cg]er SFX a2 cer çassent/n'q'l'm't's' cer SFX a2 ger geassent/n'q'l'm't's' ger SFX a2 er e/n'l'm' [^y]er SFX a2 yer ye/n'l'm' [^ou]yer SFX a2 yer ie/n'l'm' [aou]yer SFX a2 er ons/n'l' [^cg]er SFX a2 cer çons/n'l' cer SFX a2 ger geons/n'l' ger SFX a2 er ez/n'l'm' er SFX a3 Y 102 SFX a3 er er/m't's' er SFX a3 er ant/m't's' [^cg]er SFX a3 cer çant/m't's' cer SFX a3 ger geant/m't's' ger SFX a3 er e/m's' [^y]er SFX a3 yer ye/m's' [^ou]yer SFX a3 yer ie/m's' [aou]yer SFX a3 er es/t' [^y]er SFX a3 yer yes/t' [^ou]yer SFX a3 yer ies/t' [aou]yer SFX a3 er ons [^cg]er SFX a3 cer çons cer SFX a3 ger geons ger SFX a3 r z er SFX a3 er ent/s' [^y]er SFX a3 yer yent/s' [^ou]yer SFX a3 yer ient/s' [aou]yer SFX a3 er ais/m' [^cg]er SFX a3 cer çais/m' cer SFX a3 ger geais/m' ger SFX a3 er ait/s' [^cg]er SFX a3 cer çait/s' cer SFX a3 ger geait/s' ger SFX a3 er ions er SFX a3 er iez er SFX a3 er aient/s' [^cg]er SFX a3 cer çaient/s' cer SFX a3 ger geaient/s' ger SFX a3 er ai/m' [^cg]er SFX a3 cer çai/m' cer SFX a3 ger geai/m' ger SFX a3 er as/t' [^cg]er SFX a3 cer ças/t' cer SFX a3 ger geas/t' ger SFX a3 er a/s' [^cg]er SFX a3 cer ça/s' cer SFX a3 ger gea/s' ger SFX a3 er âmes [^cg]er SFX a3 cer çâmes cer SFX a3 ger geâmes ger SFX a3 er âtes [^cg]er SFX a3 cer çâtes/s' cer SFX a3 ger geâtes/s' ger SFX a3 er èrent/s' er SFX a3 er erai/m' [^y]er SFX a3 yer yerai/m' [^ou]yer SFX a3 yer ierai/m' [aou]yer SFX a3 er eras/t' [^y]er SFX a3 yer yeras/t' [^ou]yer SFX a3 yer ieras/t' [aou]yer SFX a3 er era/s' [^y]er SFX a3 yer yera/s' [^ou]yer SFX a3 yer iera/s' [aou]yer SFX a3 er erons [^y]er SFX a3 yer yerons [^ou]yer SFX a3 yer ierons [aou]yer SFX a3 er erez [^y]er SFX a3 yer yerez [^ou]yer SFX a3 yer ierez [aou]yer SFX a3 er eront/s' [^y]er SFX a3 yer yeront/s' [^ou]yer SFX a3 yer ieront/s' [aou]yer SFX a3 er erais/m't' [^y]er SFX a3 yer yerais/m't' [^ou]yer SFX a3 yer ierais/m't' [aou]yer SFX a3 er erait/s' [^y]er SFX a3 yer yerait/s' [^ou]yer SFX a3 yer ierait/s' [aou]yer SFX a3 er erions [^y]er SFX a3 yer yerions [^ou]yer SFX a3 yer ierions [aou]yer SFX a3 er eriez [^y]er SFX a3 yer yeriez [^ou]yer SFX a3 yer ieriez [aou]yer SFX a3 er eraient/s' [^y]er SFX a3 yer yeraient/s' [^ou]yer SFX a3 yer ieraient/s' [aou]yer SFX a3 er asse/m' [^cg]er SFX a3 cer çasse/m' cer SFX a3 ger geasse/m' ger SFX a3 er asses/t' [^cg]er SFX a3 cer çasses/t' cer SFX a3 ger geasses/t' ger SFX a3 er ât/s' [^cg]er SFX a3 cer çât/s' cer SFX a3 ger geât/s' ger SFX a3 er assions [^cg]er SFX a3 cer çassions cer SFX a3 ger geassions ger SFX a3 er assiez [^cg]er SFX a3 cer çassiez cer SFX a3 ger geassiez ger SFX a3 er assent/s' [^cg]er SFX a3 cer çassent/s' cer SFX a3 ger geassent/s' ger SFX a3 er e/t' [^y]er SFX a3 yer ye/t' [^ou]yer SFX a3 yer ie/t' [aou]yer SFX a3 er ons [^cg]er SFX a3 cer çons cer SFX a3 ger geons ger SFX a3 er ez er SFX a4 Y 102 SFX a4 er er/n'q'd'l'm't's' er SFX a4 er ant/n'q'l'm't's' [^cg]er SFX a4 cer çant/n'q'l'm't's' cer SFX a4 ger geant/n'q'l'm't's' ger SFX a4 er e/n'q'j'l'm't's' [^y]er SFX a4 yer ye/n'q'j'l'm't's' [^ou]yer SFX a4 yer ie/n'q'j'l'm't's' [aou]yer SFX a4 er es/n'q'l'm't' [^y]er SFX a4 yer yes/n'q'l'm't' [^ou]yer SFX a4 yer ies/n'q'l'm't' [aou]yer SFX a4 er ons/n'q'l't' [^cg]er SFX a4 cer çons/n'q'l't' cer SFX a4 ger geons/n'q'l't' ger SFX a4 er ez/n'q'l'm' er SFX a4 er ent/n'q'l'm't's' [^y]er SFX a4 yer yent/n'q'l'm't's' [^ou]yer SFX a4 yer ient/n'q'l'm't's' [aou]yer SFX a4 er ais/n'q'j'l'm't' [^cg]er SFX a4 cer çais/n'q'j'l'm't' cer SFX a4 ger geais/n'q'j'l'm't' ger SFX a4 er ait/n'q'l'm't's' [^cg]er SFX a4 cer çait/n'q'l'm't's' cer SFX a4 ger geait/n'q'l'm't's' ger SFX a4 er ions/n'q'l't' er SFX a4 er iez/n'q'l'm' er SFX a4 er aient/n'q'l'm't's' [^cg]er SFX a4 cer çaient/n'q'l'm't's' cer SFX a4 ger geaient/n'q'l'm't's' ger SFX a4 er ai/n'q'j'l'm't' [^cg]er SFX a4 cer çai/n'q'j'l'm't' cer SFX a4 ger geai/n'q'j'l'm't' ger SFX a4 er as/n'q'l'm't' [^cg]er SFX a4 cer ças/n'q'l'm't' cer SFX a4 ger geas/n'q'l'm't' ger SFX a4 er a/n'q'l'm't's' [^cg]er SFX a4 cer ça/n'q'l'm't's' cer SFX a4 ger gea/n'q'l'm't's' ger SFX a4 er âmes/n'q'l't' [^cg]er SFX a4 cer çâmes/n'q'l't' cer SFX a4 ger geâmes/n'q'l't' ger SFX a4 er âtes/n'q'l'm' [^cg]er SFX a4 cer çâtes/n'q'l'm' cer SFX a4 ger geâtes/n'q'l'm' ger SFX a4 er èrent/n'q'l'm't's' er SFX a4 er erai/n'q'j'l'm't' [^y]er SFX a4 yer yerai/n'q'j'l'm't' [^ou]yer SFX a4 yer ierai/n'q'j'l'm't' [aou]yer SFX a4 er eras/n'q'l'm't' [^y]er SFX a4 yer yeras/n'q'l'm't' [^ou]yer SFX a4 yer ieras/n'q'l'm't' [aou]yer SFX a4 er era/n'q'l'm't's' [^y]er SFX a4 yer yera/n'q'l'm't's' [^ou]yer SFX a4 yer iera/n'q'l'm't's' [aou]yer SFX a4 er erons/n'q'l't' [^y]er SFX a4 yer yerons/n'q'l't' [^ou]yer SFX a4 yer ierons/n'q'l't' [aou]yer SFX a4 er erez/n'q'l'm' [^y]er SFX a4 yer yerez/n'q'l'm' [^ou]yer SFX a4 yer ierez/n'q'l'm' [aou]yer SFX a4 er eront/n'q'l'm't's' [^y]er SFX a4 yer yeront/n'q'l'm't's' [^ou]yer SFX a4 yer ieront/n'q'l'm't's' [aou]yer SFX a4 er erais/n'q'j'l'm't' [^y]er SFX a4 yer yerais/n'q'j'l'm't' [^ou]yer SFX a4 yer ierais/n'q'j'l'm't' [aou]yer SFX a4 er erait/n'q'l'm't's' [^y]er SFX a4 yer yerait/n'q'l'm't's' [^ou]yer SFX a4 yer ierait/n'q'l'm't's' [aou]yer SFX a4 er erions/n'q'l't' [^y]er SFX a4 yer yerions/n'q'l't' [^ou]yer SFX a4 yer ierions/n'q'l't' [aou]yer SFX a4 er eriez/n'q'l'm' [^y]er SFX a4 yer yeriez/n'q'l'm' [^ou]yer SFX a4 yer ieriez/n'q'l'm' [aou]yer SFX a4 er eraient/n'q'l'm't's' [^y]er SFX a4 yer yeraient/n'q'l'm't's' [^ou]yer SFX a4 yer ieraient/n'q'l'm't's' [aou]yer SFX a4 er asse/n'q'j'l'm't' [^cg]er SFX a4 cer çasse/n'q'j'l'm't' cer SFX a4 ger geasse/n'q'j'l'm't' ger SFX a4 er asses/n'q'l'm't' [^cg]er SFX a4 cer çasses/n'q'l'm't' cer SFX a4 ger geasses/n'q'l'm't' ger SFX a4 er ât/n'q'l'm't's' [^cg]er SFX a4 cer çât/n'q'l'm't's' cer SFX a4 ger geât/n'q'l'm't's' ger SFX a4 er assions/n'q'l't' [^cg]er SFX a4 cer çassions/n'q'l't' cer SFX a4 ger geassions/n'q'l't' ger SFX a4 er assiez/n'q'l'm' [^cg]er SFX a4 cer çassiez/n'q'l'm' cer SFX a4 ger geassiez/n'q'l'm' ger SFX a4 er assent/n'q'l'm't's' [^cg]er SFX a4 cer çassent/n'q'l'm't's' cer SFX a4 ger geassent/n'q'l'm't's' ger SFX a4 er e/n'l'm't' [^y]er SFX a4 yer ye/n'l'm't' [^ou]yer SFX a4 yer ie/n'l'm't' [aou]yer SFX a4 er ons/n'l' [^cg]er SFX a4 cer çons/n'l' cer SFX a4 ger geons/n'l' ger SFX a4 er ez/n'l'm' er SFX a5 Y 102 SFX a5 er er/n'q'd'm't's' er SFX a5 er ant/n'q'm't's' [^cg]er SFX a5 cer çant/n'q'm't's' cer SFX a5 ger geant/n'q'm't's' ger SFX a5 er e/n'q'j'm't's' [^y]er SFX a5 yer ye/n'q'j'm't's' [^ou]yer SFX a5 yer ie/n'q'j'm't's' [aou]yer SFX a5 er es/n'm't' [^y]er SFX a5 yer yes/n'm't' [^ou]yer SFX a5 yer ies/n'm't' [aou]yer SFX a5 er ons/n't' [^cg]er SFX a5 cer çons/n't' cer SFX a5 ger geons/n't' ger SFX a5 r z/n'm' er SFX a5 er ent/n'q'm't's' [^y]er SFX a5 yer yent/n'q'm't's' [^ou]yer SFX a5 yer ient/n'q'm't's' [aou]yer SFX a5 er ais/n'j'm't' [^cg]er SFX a5 cer çais/n'j'm't' cer SFX a5 ger geais/n'j'm't' ger SFX a5 er ait/n'q'm't's' [^cg]er SFX a5 cer çait/n'q'm't's' cer SFX a5 ger geait/n'q'm't's' ger SFX a5 er ions/n't' er SFX a5 er iez/n'm' er SFX a5 er aient/n'q'm't's' [^cg]er SFX a5 cer çaient/n'q'm't's' cer SFX a5 ger geaient/n'q'm't's' ger SFX a5 er ai/n'j'm't' [^cg]er SFX a5 cer çai/n'j'm't' cer SFX a5 ger geai/n'j'm't' ger SFX a5 er as/n'm't' [^cg]er SFX a5 cer ças/n'm't' cer SFX a5 ger geas/n'm't' ger SFX a5 er a/n'q'm't's' [^cg]er SFX a5 cer ça/n'q'm't's' cer SFX a5 ger gea/n'q'm't's' ger SFX a5 er âmes/n't' [^cg]er SFX a5 cer çâmes/n't' cer SFX a5 ger geâmes/n't' ger SFX a5 er âtes/n'm' [^cg]er SFX a5 cer çâtes/n'm' cer SFX a5 ger geâtes/n'm' ger SFX a5 er èrent/n'q'm't's' er SFX a5 er erai/n'j'm't' [^y]er SFX a5 yer yerai/n'j'm't' [^ou]yer SFX a5 yer ierai/n'j'm't' [aou]yer SFX a5 er eras/n'm't' [^y]er SFX a5 yer yeras/n'm't' [^ou]yer SFX a5 yer ieras/n'm't' [aou]yer SFX a5 er era/n'q'm't's' [^y]er SFX a5 yer yera/n'q'm't's' [^ou]yer SFX a5 yer iera/n'q'm't's' [aou]yer SFX a5 er erons/n't' [^y]er SFX a5 yer yerons/n't' [^ou]yer SFX a5 yer ierons/n't' [aou]yer SFX a5 er erez/n'm' [^y]er SFX a5 yer yerez/n'm' [^ou]yer SFX a5 yer ierez/n'm' [aou]yer SFX a5 er eront/n'q'm't's' [^y]er SFX a5 yer yeront/n'q'm't's' [^ou]yer SFX a5 yer ieront/n'q'm't's' [aou]yer SFX a5 er erais/n'j'm't' [^y]er SFX a5 yer yerais/n'j'm't' [^ou]yer SFX a5 yer ierais/n'j'm't' [aou]yer SFX a5 er erait/n'q'm't's' [^y]er SFX a5 yer yerait/n'q'm't's' [^ou]yer SFX a5 yer ierait/n'q'm't's' [aou]yer SFX a5 er erions/n't' [^y]er SFX a5 yer yerions/n't' [^ou]yer SFX a5 yer ierions/n't' [aou]yer SFX a5 er eriez/n'm' [^y]er SFX a5 yer yeriez/n'm' [^ou]yer SFX a5 yer ieriez/n'm' [aou]yer SFX a5 er eraient/n'q'm't's' [^y]er SFX a5 yer yeraient/n'q'm't's' [^ou]yer SFX a5 yer ieraient/n'q'm't's' [aou]yer SFX a5 er asse/n'j'm't' [^cg]er SFX a5 cer çasse/n'j'm't' cer SFX a5 ger geasse/n'j'm't' ger SFX a5 er asses/n'm't' [^cg]er SFX a5 cer çasses/n'm't' cer SFX a5 ger geasses/n'm't' ger SFX a5 er ât/n'q'm't's' [^cg]er SFX a5 cer çât/n'q'm't's' cer SFX a5 ger geât/n'q'm't's' ger SFX a5 er assions/n't' [^cg]er SFX a5 cer çassions/n't' cer SFX a5 ger geassions/n't' ger SFX a5 er assiez/n'm' [^cg]er SFX a5 cer çassiez/n'm' cer SFX a5 ger geassiez/n'm' ger SFX a5 er assent/n'q'm't's' [^cg]er SFX a5 cer çassent/n'q'm't's' cer SFX a5 ger geassent/n'q'm't's' ger SFX a5 er e/n'm' [^y]er SFX a5 yer e/n'm' [^ou]yer SFX a5 yer ie/n'm' [aou]yer SFX a5 er ons/n' [^cg]er SFX a5 cer çons/n' cer SFX a5 ger geons/n' ger SFX a5 er ez/n'm' er SFX a6 Y 72 SFX a6 er er/s' er SFX a6 er ant/s' [^cg]er SFX a6 cer çant/s' cer SFX a6 ger geant/s' ger SFX a6 er e/s' [^y]er SFX a6 yer ye/s' [^ou]yer SFX a6 yer ie/s' [aou]yer SFX a6 er ons [^cg]er SFX a6 cer çons cer SFX a6 ger geons ger SFX a6 er ez er SFX a6 er ent/s' [^y]er SFX a6 yer yent/s' [^ou]yer SFX a6 yer ient/s' [aou]yer SFX a6 er ait/s' [^cg]er SFX a6 cer çait/s' cer SFX a6 ger geait/s' ger SFX a6 er ions er SFX a6 er iez er SFX a6 er aient/s' [^cg]er SFX a6 cer çaient/s' cer SFX a6 ger geaient/s' ger SFX a6 er a/s' [^cg]er SFX a6 cer ça/s' cer SFX a6 ger gea/s' ger SFX a6 er âmes [^cg]er SFX a6 cer çâmes cer SFX a6 ger geâmes ger SFX a6 er âtes [^cg]er SFX a6 cer çâtes/s' cer SFX a6 ger geâtes/s' ger SFX a6 er èrent/s' er SFX a6 er era/s' [^y]er SFX a6 yer yera/s' [^ou]yer SFX a6 yer iera/s' [aou]yer SFX a6 er erons [^y]er SFX a6 yer yerons [^ou]yer SFX a6 yer ierons [aou]yer SFX a6 er erez [^y]er SFX a6 yer yerez [^ou]yer SFX a6 yer ierez [aou]yer SFX a6 er eront/s' [^y]er SFX a6 yer yeront/s' [^ou]yer SFX a6 yer ieront/s' [aou]yer SFX a6 er erait/s' [^y]er SFX a6 yer yerait/s' [^ou]yer SFX a6 yer ierait/s' [aou]yer SFX a6 er erions [^y]er SFX a6 yer yerions [^ou]yer SFX a6 yer ierions [aou]yer SFX a6 er eriez [^y]er SFX a6 yer yeriez [^ou]yer SFX a6 yer ieriez [aou]yer SFX a6 er eraient/s' [^y]er SFX a6 yer yeraient/s' [^ou]yer SFX a6 yer ieraient/s' [aou]yer SFX a6 er ât/s' [^cg]er SFX a6 cer çât/s' cer SFX a6 ger geât/s' ger SFX a6 er assions [^cg]er SFX a6 cer çassions cer SFX a6 ger geassions ger SFX a6 er assiez [^cg]er SFX a6 cer çassiez cer SFX a6 ger geassiez ger SFX a6 er assent/s' [^cg]er SFX a6 cer çassent/s' cer SFX a6 ger geassent/s' ger SFX a6 er ons [^cg]er SFX a6 cer çons cer SFX a6 ger geons ger SFX a6 er ez er SFX a8 N 16 SFX a8 er er/n'd' er SFX a8 er ant [^cg]er SFX a8 cer çant cer SFX a8 ger geant ger SFX a8 er e/n' er SFX a8 er ait/n' [^cg]er SFX a8 cer çait/n' cer SFX a8 ger geait/n' ger SFX a8 er a/n' [^cg]er SFX a8 cer ça/n' cer SFX a8 ger gea/n' ger SFX a8 er era/n' er SFX a8 er erait/n' er SFX a8 er ât/n' [^cg]er SFX a8 cer çât/n' cer SFX a8 ger geât/n' ger SFX a9 N 10 SFX a9 er ent/n' er SFX a9 er aient/n' [^cg]er SFX a9 cer çaient/n' cer SFX a9 ger geaient/n' ger SFX a9 er èrent/n' er SFX a9 er eront/n' er SFX a9 er eraient/n' er SFX a9 er assent/n' [^cg]er SFX a9 cer çassent/n' cer SFX a9 ger geassent/n' ger SFX b0 N 189 SFX b0 er ant [^c]er SFX b0 cer çant cer SFX b0 ecer èce ecer SFX b0 emer ème emer SFX b0 ener ène ener SFX b0 eper èpe eper SFX b0 erer ère erer SFX b0 eser èse eser SFX b0 ever ève ever SFX b0 evrer èvre evrer SFX b0 eter ète eter SFX b0 eler èle eler SFX b0 ecer èces ecer SFX b0 emer èmes emer SFX b0 ener ènes ener SFX b0 eper èpes eper SFX b0 erer ères erer SFX b0 eser èses eser SFX b0 ever èves ever SFX b0 evrer èvres evrer SFX b0 eter ètes eter SFX b0 eler èles eler SFX b0 er ons [^c]er SFX b0 cer çons cer SFX b0 er ez er SFX b0 ecer ècent ecer SFX b0 emer èment emer SFX b0 ener ènent ener SFX b0 eper èpent eper SFX b0 erer èrent erer SFX b0 eser èsent eser SFX b0 ever èvent ever SFX b0 evrer èvrent evrer SFX b0 eter ètent eter SFX b0 eler èlent eler SFX b0 er ais [^c]er SFX b0 cer çais cer SFX b0 er ait [^c]er SFX b0 cer çait cer SFX b0 er ions er SFX b0 er iez er SFX b0 er aient [^c]er SFX b0 cer çaient cer SFX b0 er ai [^c]er SFX b0 cer çai cer SFX b0 er as [^c]er SFX b0 cer ças cer SFX b0 er a [^c]er SFX b0 cer ça cer SFX b0 er âmes [^c]er SFX b0 cer çâmes cer SFX b0 er âtes [^c]er SFX b0 cer çâtes cer SFX b0 er èrent er SFX b0 ecer ècerai ecer SFX b0 emer èmerai emer SFX b0 ener ènerai ener SFX b0 eper èperai eper SFX b0 erer èrerai erer SFX b0 eser èserai eser SFX b0 ever èverai ever SFX b0 evrer èvrerai evrer SFX b0 eter èterai eter SFX b0 eler èlerai eler SFX b0 ecer èceras ecer SFX b0 emer èmeras emer SFX b0 ener èneras ener SFX b0 eper èperas eper SFX b0 erer èreras erer SFX b0 eser èseras eser SFX b0 ever èveras ever SFX b0 evrer èvreras evrer SFX b0 eter èteras eter SFX b0 eler èleras eler SFX b0 ecer ècera ecer SFX b0 emer èmera emer SFX b0 ener ènera ener SFX b0 eper èpera eper SFX b0 erer èrera erer SFX b0 eser èsera eser SFX b0 ever èvera ever SFX b0 evrer èvrera evrer SFX b0 eter ètera eter SFX b0 eler èlera eler SFX b0 ecer ècerons ecer SFX b0 emer èmerons emer SFX b0 ener ènerons ener SFX b0 eper èperons eper SFX b0 erer èrerons erer SFX b0 eser èserons eser SFX b0 ever èverons ever SFX b0 evrer èvrerons evrer SFX b0 eter èterons eter SFX b0 eler èlerons eler SFX b0 ecer ècerez ecer SFX b0 emer èmerez emer SFX b0 ener ènerez ener SFX b0 eper èperez eper SFX b0 erer èrerez erer SFX b0 eser èserez eser SFX b0 ever èverez ever SFX b0 evrer èvrerez evrer SFX b0 eter èterez eter SFX b0 eler èlerez eler SFX b0 ecer èceront ecer SFX b0 emer èmeront emer SFX b0 ener èneront ener SFX b0 eper èperont eper SFX b0 erer èreront erer SFX b0 eser èseront eser SFX b0 ever èveront ever SFX b0 evrer èvreront evrer SFX b0 eter èteront eter SFX b0 eler èleront eler SFX b0 ecer ècerais ecer SFX b0 emer èmerais emer SFX b0 ener ènerais ener SFX b0 eper èperais eper SFX b0 erer èrerais erer SFX b0 eser èserais eser SFX b0 ever èverais ever SFX b0 evrer èvrerais evrer SFX b0 eter èterais eter SFX b0 eler èlerais eler SFX b0 ecer ècerait ecer SFX b0 emer èmerait emer SFX b0 ener ènerait ener SFX b0 eper èperait eper SFX b0 erer èrerait erer SFX b0 eser èserait eser SFX b0 ever èverait ever SFX b0 evrer èvrerait evrer SFX b0 eter èterait eter SFX b0 eler èlerait eler SFX b0 ecer ècerions ecer SFX b0 emer èmerions emer SFX b0 ener ènerions ener SFX b0 eper èperions eper SFX b0 erer èrerions erer SFX b0 eser èserions eser SFX b0 ever èverions ever SFX b0 evrer èvrerions evrer SFX b0 eter èterions eter SFX b0 eler èlerions eler SFX b0 ecer èceriez ecer SFX b0 emer èmeriez emer SFX b0 ener èneriez ener SFX b0 eper èperiez eper SFX b0 erer èreriez erer SFX b0 eser èseriez eser SFX b0 ever èveriez ever SFX b0 evrer èvreriez evrer SFX b0 eter èteriez eter SFX b0 eler èleriez eler SFX b0 ecer èceraient ecer SFX b0 emer èmeraient emer SFX b0 ener èneraient ener SFX b0 eper èperaient eper SFX b0 erer èreraient erer SFX b0 eser èseraient eser SFX b0 ever èveraient ever SFX b0 evrer èvreraient evrer SFX b0 eter èteraient eter SFX b0 eler èleraient eler SFX b0 er asse [^c]er SFX b0 cer çasse cer SFX b0 er asses [^c]er SFX b0 cer çasses cer SFX b0 er ât [^c]er SFX b0 cer çât cer SFX b0 er assions [^c]er SFX b0 cer çassions cer SFX b0 er assiez [^c]er SFX b0 cer çassiez cer SFX b0 er assent [^c]er SFX b0 cer çassent cer SFX b0 ecer èce ecer SFX b0 emer ème emer SFX b0 ener ène ener SFX b0 eper èpe eper SFX b0 erer ère erer SFX b0 eser èse eser SFX b0 ever ève ever SFX b0 evrer èvre evrer SFX b0 eter ète eter SFX b0 eler èle eler SFX b0 er ons [^c]er SFX b0 cer çons cer SFX b0 er ez er SFX b1 Y 190 SFX b1 er er/n'q'd' er SFX b1 er ant/n'q' [^c]er SFX b1 cer çant/n'q' cer SFX b1 ecer èce/n'j'q' ecer SFX b1 emer ème/n'j'q' emer SFX b1 ener ène/n'j'q' ener SFX b1 eper èpe/n'j'q' eper SFX b1 erer ère/n'j'q' erer SFX b1 eser èse/n'j'q' eser SFX b1 ever ève/n'j'q' ever SFX b1 evrer èvre/n'j'q' evrer SFX b1 eter ète/n'j'q' eter SFX b1 eler èle/n'j'q' eler SFX b1 ecer èces/n' ecer SFX b1 emer èmes/n' emer SFX b1 ener ènes/n' ener SFX b1 eper èpes/n' eper SFX b1 erer ères/n' erer SFX b1 eser èses/n' eser SFX b1 ever èves/n' ever SFX b1 evrer èvres/n' evrer SFX b1 eter ètes/n' eter SFX b1 eler èles/n' eler SFX b1 er ons/n' [^c]er SFX b1 cer çons/n' cer SFX b1 er ez/n' er SFX b1 ecer ècent/n'q' ecer SFX b1 emer èment/n'q' emer SFX b1 ener ènent/n'q' ener SFX b1 eper èpent/n'q' eper SFX b1 erer èrent/n'q' erer SFX b1 eser èsent/n'q' eser SFX b1 ever èvent/n'q' ever SFX b1 evrer èvrent/n'q' evrer SFX b1 eter ètent/n'q' eter SFX b1 eler èlent/n'q' eler SFX b1 er ais/n'j' [^c]er SFX b1 cer çais/n'j' cer SFX b1 er ait/n'q' [^c]er SFX b1 cer çait/n'q' cer SFX b1 er ions/n' er SFX b1 er iez/n' er SFX b1 er aient/n'q' [^c]er SFX b1 cer çaient/n'q' cer SFX b1 er ai/n'j' [^c]er SFX b1 cer çai/n'j' cer SFX b1 er as/n' [^c]er SFX b1 cer ças/n' cer SFX b1 er a/n'q' [^c]er SFX b1 cer ça/n'q' cer SFX b1 er âmes/n' [^c]er SFX b1 cer çâmes/n' cer SFX b1 er âtes/n' [^c]er SFX b1 cer çâtes/n' cer SFX b1 er èrent/n'q' er SFX b1 ecer ècerai/n'j' ecer SFX b1 emer èmerai/n'j' emer SFX b1 ener ènerai/n'j' ener SFX b1 eper èperai/n'j' eper SFX b1 erer èrerai/n'j' erer SFX b1 eser èserai/n'j' eser SFX b1 ever èverai/n'j' ever SFX b1 evrer èvrerai/n'j' evrer SFX b1 eter èterai/n'j' eter SFX b1 eler èlerai/n'j' eler SFX b1 ecer èceras/n' ecer SFX b1 emer èmeras/n' emer SFX b1 ener èneras/n' ener SFX b1 eper èperas/n' eper SFX b1 erer èreras/n' erer SFX b1 eser èseras/n' eser SFX b1 ever èveras/n' ever SFX b1 evrer èvreras/n' evrer SFX b1 eter èteras/n' eter SFX b1 eler èleras/n' eler SFX b1 ecer ècera/n'q' ecer SFX b1 emer èmera/n'q' emer SFX b1 ener ènera/n'q' ener SFX b1 eper èpera/n'q' eper SFX b1 erer èrera/n'q' erer SFX b1 eser èsera/n'q' eser SFX b1 ever èvera/n'q' ever SFX b1 evrer èvrera/n'q' evrer SFX b1 eter ètera/n'q' eter SFX b1 eler èlera/n'q' eler SFX b1 ecer ècerons/n' ecer SFX b1 emer èmerons/n' emer SFX b1 ener ènerons/n' ener SFX b1 eper èperons/n' eper SFX b1 erer èrerons/n' erer SFX b1 eser èserons/n' eser SFX b1 ever èverons/n' ever SFX b1 evrer èvrerons/n' evrer SFX b1 eter èterons/n' eter SFX b1 eler èlerons/n' eler SFX b1 ecer ècerez/n' ecer SFX b1 emer èmerez/n' emer SFX b1 ener ènerez/n' ener SFX b1 eper èperez/n' eper SFX b1 erer èrerez/n' erer SFX b1 eser èserez/n' eser SFX b1 ever èverez/n' ever SFX b1 evrer èvrerez/n' evrer SFX b1 eter èterez/n' eter SFX b1 eler èlerez/n' eler SFX b1 ecer èceront/n'q' ecer SFX b1 emer èmeront/n'q' emer SFX b1 ener èneront/n'q' ener SFX b1 eper èperont/n'q' eper SFX b1 erer èreront/n'q' erer SFX b1 eser èseront/n'q' eser SFX b1 ever èveront/n'q' ever SFX b1 evrer èvreront/n'q' evrer SFX b1 eter èteront/n'q' eter SFX b1 eler èleront/n'q' eler SFX b1 ecer ècerais/n'j' ecer SFX b1 emer èmerais/n'j' emer SFX b1 ener ènerais/n'j' ener SFX b1 eper èperais/n'j' eper SFX b1 erer èrerais/n'j' erer SFX b1 eser èserais/n'j' eser SFX b1 ever èverais/n'j' ever SFX b1 evrer èvrerais/n'j' evrer SFX b1 eter èterais/n'j' eter SFX b1 eler èlerais/n' eler SFX b1 ecer ècerait/n'q' ecer SFX b1 emer èmerait/n'q' emer SFX b1 ener ènerait/n'q' ener SFX b1 eper èperait/n'q' eper SFX b1 erer èrerait/n'q' erer SFX b1 eser èserait/n'q' eser SFX b1 ever èverait/n'q' ever SFX b1 evrer èvrerait/n'q' evrer SFX b1 eter èterait/n'q' eter SFX b1 eler èlerait/n'q' eler SFX b1 ecer ècerions/n' ecer SFX b1 emer èmerions/n' emer SFX b1 ener ènerions/n' ener SFX b1 eper èperions/n' eper SFX b1 erer èrerions/n' erer SFX b1 eser èserions/n' eser SFX b1 ever èverions/n' ever SFX b1 evrer èvrerions/n' evrer SFX b1 eter èterions/n' eter SFX b1 eler èlerions/n' eler SFX b1 ecer èceriez/n' ecer SFX b1 emer èmeriez/n' emer SFX b1 ener èneriez/n' ener SFX b1 eper èperiez/n' eper SFX b1 erer èreriez/n' erer SFX b1 eser èseriez/n' eser SFX b1 ever èveriez/n' ever SFX b1 evrer èvreriez/n' evrer SFX b1 eter èteriez/n' eter SFX b1 eler èleriez/n' eler SFX b1 ecer èceraient/n'q' ecer SFX b1 emer èmeraient/n'q' emer SFX b1 ener èneraient/n'q' ener SFX b1 eper èperaient/n'q' eper SFX b1 erer èreraient/n'q' erer SFX b1 eser èseraient/n'q' eser SFX b1 ever èveraient/n'q' ever SFX b1 evrer èvreraient/n'q' evrer SFX b1 eter èteraient/n'q' eter SFX b1 eler èleraient/n'q' eler SFX b1 er asse/n'j' [^c]er SFX b1 cer çasse/n'j' cer SFX b1 er asses/n' [^c]er SFX b1 cer çasses/n' cer SFX b1 er ât/n'q' [^c]er SFX b1 cer çât/n'q' cer SFX b1 er assions/n' [^c]er SFX b1 cer çassions/n' cer SFX b1 er assiez/n' [^c]er SFX b1 cer çassiez/n' cer SFX b1 er assent/n'q' [^c]er SFX b1 cer çassent/n'q' cer SFX b1 ecer èce/n' ecer SFX b1 emer ème/n' emer SFX b1 ener ène/n' ener SFX b1 eper èpe/n' eper SFX b1 erer ère/n' erer SFX b1 eser èse/n' eser SFX b1 ever ève/n' ever SFX b1 evrer èvre/n' evrer SFX b1 eter ète/n' eter SFX b1 eler èle/n' eler SFX b1 er ons/n' [^c]er SFX b1 cer çons/n' cer SFX b1 er ez/n' er SFX b2 Y 190 SFX b2 er er/n'q'd'l'm't's' er SFX b2 er ant/n'q'l'm't's' [^c]er SFX b2 cer çant/n'q'l'm't's' cer SFX b2 ecer èce/n'q'j'l'm't's' ecer SFX b2 emer ème/n'q'j'l'm't's' emer SFX b2 ener ène/n'q'j'l'm't's' ener SFX b2 eper èpe/n'q'j'l'm't's' eper SFX b2 erer ère/n'q'j'l'm't's' erer SFX b2 eser èse/n'q'j'l'm't's' eser SFX b2 ever ève/n'q'j'l'm't's' ever SFX b2 evrer èvre/n'q'j'l'm't's' evrer SFX b2 eter ète/n'q'j'l'm't's' eter SFX b2 eler èle/n'q'j'l'm't's' eler SFX b2 ecer èces/n'q'l'm' ecer SFX b2 emer èmes/n'q'l'm' emer SFX b2 ener ènes/n'q'l'm' ener SFX b2 eper èpes/n'q'l'm' eper SFX b2 erer ères/n'q'l'm' erer SFX b2 eser èses/n'q'l'm' eser SFX b2 ever èves/n'q'l'm' ever SFX b2 evrer èvres/n'q'l'm' evrer SFX b2 eter ètes/n'q'l'm' eter SFX b2 eler èles/n'q'l'm' eler SFX b2 er ons/n'q'l't' [^c]er SFX b2 cer çons/n'q'l't' cer SFX b2 er ez/n'q'l'm' er SFX b2 ecer ècent/n'q'l'm't's' ecer SFX b2 emer èment/n'q'l'm't's' emer SFX b2 ener ènent/n'q'l'm't's' ener SFX b2 eper èpent/n'q'l'm't's' eper SFX b2 erer èrent/n'q'l'm't's' erer SFX b2 eser èsent/n'q'l'm't's' eser SFX b2 ever èvent/n'q'l'm't's' ever SFX b2 evrer èvrent/n'q'l'm't's' evrer SFX b2 eter ètent/n'q'l'm't's' eter SFX b2 eler èlent/n'q'l'm't's' eler SFX b2 er ais/n'q'j'l'm't' [^c]er SFX b2 cer çais/n'q'j'l'm't' cer SFX b2 er ait/n'q'l'm't's' [^c]er SFX b2 cer çait/n'q'l'm't's' cer SFX b2 er ions/n'q'l't' er SFX b2 er iez/n'q'l'm' er SFX b2 er aient/n'q'l'm't's' [^c]er SFX b2 cer çaient/n'q'l'm't's' cer SFX b2 er ai/n'q'j'l't' [^c]er SFX b2 cer çai/n'q'j'l't' cer SFX b2 er as/n'q'l'm' [^c]er SFX b2 cer ças/n'q'l'm' cer SFX b2 er a/n'q'l'm't's' [^c]er SFX b2 cer ça/n'q'l'm't's' cer SFX b2 er âmes/n'q'l't' [^c]er SFX b2 cer çâmes/n'q'l't' cer SFX b2 er âtes/n'q'l'm' [^c]er SFX b2 cer çâtes/n'q'l'm' cer SFX b2 er èrent/n'q'l'm't's' er SFX b2 ecer ècerai/n'q'j'l't' ecer SFX b2 emer èmerai/n'q'j'l't' emer SFX b2 ener ènerai/n'q'j'l't' ener SFX b2 eper èperai/n'q'j'l't' eper SFX b2 erer èrerai/n'q'j'l't' erer SFX b2 eser èserai/n'q'j'l't' eser SFX b2 ever èverai/n'q'j'l't' ever SFX b2 evrer èvrerai/n'q'j'l't' evrer SFX b2 eter èterai/n'q'j'l't' eter SFX b2 eler èlerai/n'q'j'l't' eler SFX b2 ecer èceras/n'q'l'm' ecer SFX b2 emer èmeras/n'q'l'm' emer SFX b2 ener èneras/n'q'l'm' ener SFX b2 eper èperas/n'q'l'm' eper SFX b2 erer èreras/n'q'l'm' erer SFX b2 eser èseras/n'q'l'm' eser SFX b2 ever èveras/n'q'l'm' ever SFX b2 evrer èvreras/n'q'l'm' evrer SFX b2 eter èteras/n'q'l'm' eter SFX b2 eler èleras/n'q'l'm' eler SFX b2 ecer ècera/n'q'l'm't's' ecer SFX b2 emer èmera/n'q'l'm't's' emer SFX b2 ener ènera/n'q'l'm't's' ener SFX b2 eper èpera/n'q'l'm't's' eper SFX b2 erer èrera/n'q'l'm't's' erer SFX b2 eser èsera/n'q'l'm't's' eser SFX b2 ever èvera/n'q'l'm't's' ever SFX b2 evrer èvrera/n'q'l'm't's' evrer SFX b2 eter ètera/n'q'l'm't's' eter SFX b2 eler èlera/n'q'l'm't's' eler SFX b2 ecer ècerons/n'q'l't' ecer SFX b2 emer èmerons/n'q'l't' emer SFX b2 ener ènerons/n'q'l't' ener SFX b2 eper èperons/n'q'l't' eper SFX b2 erer èrerons/n'q'l't' erer SFX b2 eser èserons/n'q'l't' eser SFX b2 ever èverons/n'q'l't' ever SFX b2 evrer èvrerons/n'q'l't' evrer SFX b2 eter èterons/n'q'l't' eter SFX b2 eler èlerons/n'q'l't' eler SFX b2 ecer ècerez/n'q'l'm' ecer SFX b2 emer èmerez/n'q'l'm' emer SFX b2 ener ènerez/n'q'l'm' ener SFX b2 eper èperez/n'q'l'm' eper SFX b2 erer èrerez/n'q'l'm' erer SFX b2 eser èserez/n'q'l'm' eser SFX b2 ever èverez/n'q'l'm' ever SFX b2 evrer èvrerez/n'q'l'm' evrer SFX b2 eter èterez/n'q'l'm' eter SFX b2 eler èlerez/n'q'l'm' eler SFX b2 ecer èceront/n'q'l'm't's' ecer SFX b2 emer èmeront/n'q'l'm't's' emer SFX b2 ener èneront/n'q'l'm't's' ener SFX b2 eper èperont/n'q'l'm't's' eper SFX b2 erer èreront/n'q'l'm't's' erer SFX b2 eser èseront/n'q'l'm't's' eser SFX b2 ever èveront/n'q'l'm't's' ever SFX b2 evrer èvreront/n'q'l'm't's' evrer SFX b2 eter èteront/n'q'l'm't's' eter SFX b2 eler èleront/n'q'l'm't's' eler SFX b2 ecer ècerais/n'q'j'l'm't' ecer SFX b2 emer èmerais/n'q'j'l'm't' emer SFX b2 ener ènerais/n'q'j'l'm't' ener SFX b2 eper èperais/n'q'j'l'm't' eper SFX b2 erer èrerais/n'q'j'l'm't' erer SFX b2 eser èserais/n'q'j'l'm't' eser SFX b2 ever èverais/n'q'j'l'm't' ever SFX b2 evrer èvrerais/n'q'j'l'm't' evrer SFX b2 eter èterais/n'q'j'l'm't' eter SFX b2 eler èlerais/n'q'j'l'm't' eler SFX b2 ecer ècerait/n'q'l'm't's' ecer SFX b2 emer èmerait/n'q'l'm't's' emer SFX b2 ener ènerait/n'q'l'm't's' ener SFX b2 eper èperait/n'q'l'm't's' eper SFX b2 erer èrerait/n'q'l'm't's' erer SFX b2 eser èserait/n'q'l'm't's' eser SFX b2 ever èverait/n'q'l'm't's' ever SFX b2 evrer èvrerait/n'q'l'm't's' evrer SFX b2 eter èterait/n'q'l'm't's' eter SFX b2 eler èlerait/n'q'l'm't's' eler SFX b2 ecer ècerions/n'q'l't' ecer SFX b2 emer èmerions/n'q'l't' emer SFX b2 ener ènerions/n'q'l't' ener SFX b2 eper èperions/n'q'l't' eper SFX b2 erer èrerions/n'q'l't' erer SFX b2 eser èserions/n'q'l't' eser SFX b2 ever èverions/n'q'l't' ever SFX b2 evrer èvrerions/n'q'l't' evrer SFX b2 eter èterions/n'q'l't' eter SFX b2 eler èlerions/n'q'l't' eler SFX b2 ecer èceriez/n'q'l'm' ecer SFX b2 emer èmeriez/n'q'l'm' emer SFX b2 ener èneriez/n'q'l'm' ener SFX b2 eper èperiez/n'q'l'm' eper SFX b2 erer èreriez/n'q'l'm' erer SFX b2 eser èseriez/n'q'l'm' eser SFX b2 ever èveriez/n'q'l'm' ever SFX b2 evrer èvreriez/n'q'l'm' evrer SFX b2 eter èteriez/n'q'l'm' eter SFX b2 eler èleriez/n'q'l'm' eler SFX b2 ecer èceraient/n'q'l'm't's' ecer SFX b2 emer èmeraient/n'q'l'm't's' emer SFX b2 ener èneraient/n'q'l'm't's' ener SFX b2 eper èperaient/n'q'l'm't's' eper SFX b2 erer èreraient/n'q'l'm't's' erer SFX b2 eser èseraient/n'q'l'm't's' eser SFX b2 ever èveraient/n'q'l'm't's' ever SFX b2 evrer èvreraient/n'q'l'm't's' evrer SFX b2 eter èteraient/n'q'l'm't's' eter SFX b2 eler èleraient/n'q'l'm't's' eler SFX b2 er asse/n'q'j'l't' [^c]er SFX b2 cer çasse/n'q'j'l't' cer SFX b2 er asses/n'q'l'm' [^c]er SFX b2 cer çasses/n'q'l'm' cer SFX b2 er ât/n'q'l'm't's' [^c]er SFX b2 cer çât/n'q'l'm't's' cer SFX b2 er assions/n'q'l't' [^c]er SFX b2 cer çassions/n'q'l't' cer SFX b2 er assiez/n'q'l'm' [^c]er SFX b2 cer çassiez/n'q'l'm' cer SFX b2 er assent/n'q'l'm't's' [^c]er SFX b2 cer çassent/n'q'l'm't's' cer SFX b2 ecer èce/n'l'm' ecer SFX b2 emer ème/n'l'm' emer SFX b2 ener ène/n'l'm' ener SFX b2 eper èpe/n'l'm' eper SFX b2 erer ère/n'l'm' erer SFX b2 eser èse/n'l'm' eser SFX b2 ever ève/n'l'm' ever SFX b2 evrer èvre/n'l'm' evrer SFX b2 eter ète/n'l'm' eter SFX b2 eler èle/n'l'm' eler SFX b2 er ons/n'l' [^c]er SFX b2 cer çons/n'l' cer SFX b2 er ez/n'l'm' er SFX b3 Y 190 SFX b3 er er/m't's' er SFX b3 er ant/m't's' [^c]er SFX b3 cer çant/m't's' cer SFX b3 ecer èce/m's' ecer SFX b3 emer ème/m's' emer SFX b3 ener ène/m's' ener SFX b3 eper èpe/m's' eper SFX b3 erer ère/m's' erer SFX b3 eser èse/m's' eser SFX b3 ever ève/m's' ever SFX b3 evrer èvre/m's' evrer SFX b3 eter ète/m's' eter SFX b3 eler èle/m's' eler SFX b3 ecer èces/t' ecer SFX b3 emer èmes/t' emer SFX b3 ener ènes/t' ener SFX b3 eper èpes/t' eper SFX b3 erer ères/t' erer SFX b3 eser èses/t' eser SFX b3 ever èves/t' ever SFX b3 evrer èvres/t' evrer SFX b3 eter ètes/t' eter SFX b3 eler èles/t' eler SFX b3 er ons [^c]er SFX b3 cer çons cer SFX b3 er ez er SFX b3 ecer ècent/s' ecer SFX b3 emer èment/s' emer SFX b3 ener ènent/s' ener SFX b3 eper èpent/s' eper SFX b3 erer èrent/s' erer SFX b3 eser èsent/s' eser SFX b3 ever èvent/s' ever SFX b3 evrer èvrent/s' evrer SFX b3 eter ètent/s' eter SFX b3 eler èlent/s' eler SFX b3 er ais/m't' [^c]er SFX b3 cer çais/m't' cer SFX b3 er ait/s' [^c]er SFX b3 cer çait/s' cer SFX b3 er ions er SFX b3 er iez er SFX b3 er aient/s' [^c]er SFX b3 cer çaient/s' cer SFX b3 er ai/m' [^c]er SFX b3 cer çai/m' cer SFX b3 er as/t' [^c]er SFX b3 cer ças/t' cer SFX b3 er a/s' [^c]er SFX b3 cer ça/s' cer SFX b3 er âmes [^c]er SFX b3 cer çâmes cer SFX b3 er âtes [^c]er SFX b3 cer çâtes cer SFX b3 er èrent/s' er SFX b3 ecer ècerai/m' ecer SFX b3 emer èmerai/m' emer SFX b3 ener ènerai/m' ener SFX b3 eper èperai/m' eper SFX b3 erer èrerai/m' erer SFX b3 eser èserai/m' eser SFX b3 ever èverai/m' ever SFX b3 evrer èvrerai/m' evrer SFX b3 eter èterai/m' eter SFX b3 eler èlerai/m' eler SFX b3 ecer èceras/t' ecer SFX b3 emer èmeras/t' emer SFX b3 ener èneras/t' ener SFX b3 eper èperas/t' eper SFX b3 erer èreras/t' erer SFX b3 eser èseras/t' eser SFX b3 ever èveras/t' ever SFX b3 evrer èvreras/t' evrer SFX b3 eter èteras/t' eter SFX b3 eler èleras/t' eler SFX b3 ecer ècera/s' ecer SFX b3 emer èmera/s' emer SFX b3 ener ènera/s' ener SFX b3 eper èpera/s' eper SFX b3 erer èrera/s' erer SFX b3 eser èsera/s' eser SFX b3 ever èvera/s' ever SFX b3 evrer èvrera/s' evrer SFX b3 eter ètera/s' eter SFX b3 eler èlera/s' eler SFX b3 ecer ècerons ecer SFX b3 emer èmerons emer SFX b3 ener ènerons ener SFX b3 eper èperons eper SFX b3 erer èrerons erer SFX b3 eser èserons eser SFX b3 ever èverons ever SFX b3 evrer èvrerons evrer SFX b3 eter èterons eter SFX b3 eler èlerons eler SFX b3 ecer ècerez ecer SFX b3 emer èmerez emer SFX b3 ener ènerez ener SFX b3 eper èperez eper SFX b3 erer èrerez erer SFX b3 eser èserez eser SFX b3 ever èverez ever SFX b3 evrer èvrerez evrer SFX b3 eter èterez eter SFX b3 eler èlerez eler SFX b3 ecer èceront/s' ecer SFX b3 emer èmeront/s' emer SFX b3 ener èneront/s' ener SFX b3 eper èperont/s' eper SFX b3 erer èreront/s' erer SFX b3 eser èseront/s' eser SFX b3 ever èveront/s' ever SFX b3 evrer èvreront/s' evrer SFX b3 eter èteront/s' eter SFX b3 eler èleront/s' eler SFX b3 ecer ècerais/m't' ecer SFX b3 emer èmerais/m't' emer SFX b3 ener ènerais/m't' ener SFX b3 eper èperais/m't' eper SFX b3 erer èrerais/m't' erer SFX b3 eser èserais/m't' eser SFX b3 ever èverais/m't' ever SFX b3 evrer èvrerais/m't' evrer SFX b3 eter èterais/m't' eter SFX b3 eler èlerais/m't' eler SFX b3 ecer ècerait/s' ecer SFX b3 emer èmerait/s' emer SFX b3 ener ènerait/s' ener SFX b3 eper èperait/s' eper SFX b3 erer èrerait/s' erer SFX b3 eser èserait/s' eser SFX b3 ever èverait/s' ever SFX b3 evrer èvrerait/s' evrer SFX b3 eter èterait/s' eter SFX b3 eler èlerait/s' eler SFX b3 ecer ècerions ecer SFX b3 emer èmerions emer SFX b3 ener ènerions ener SFX b3 eper èperions eper SFX b3 erer èrerions erer SFX b3 eser èserions eser SFX b3 ever èverions ever SFX b3 evrer èvrerions evrer SFX b3 eter èterions eter SFX b3 eler èlerions eler SFX b3 ecer èceriez ecer SFX b3 emer èmeriez emer SFX b3 ener èneriez ener SFX b3 eper èperiez eper SFX b3 erer èreriez erer SFX b3 eser èseriez eser SFX b3 ever èveriez ever SFX b3 evrer èvreriez evrer SFX b3 eter èteriez eter SFX b3 eler èleriez eler SFX b3 ecer èceraient/s' ecer SFX b3 emer èmeraient/s' emer SFX b3 ener èneraient/s' ener SFX b3 eper èperaient/s' eper SFX b3 erer èreraient/s' erer SFX b3 eser èseraient/s' eser SFX b3 ever èveraient/s' ever SFX b3 evrer èvreraient/s' evrer SFX b3 eter èteraient/s' eter SFX b3 eler èleraient/s' eler SFX b3 er asse/m' [^c]er SFX b3 cer çasse/m' cer SFX b3 er asses/t' [^c]er SFX b3 cer çasses/t' cer SFX b3 er ât/s' [^c]er SFX b3 cer çât/s' cer SFX b3 er assions [^c]er SFX b3 cer çassions cer SFX b3 er assiez [^c]er SFX b3 cer çassiez cer SFX b3 er assent/s' [^c]er SFX b3 cer çassent/s' cer SFX b3 ecer èce/t' ecer SFX b3 emer ème/t' emer SFX b3 ener ène/t' ener SFX b3 eper èpe/t' eper SFX b3 erer ère/t' erer SFX b3 eser èse/t' eser SFX b3 ever ève/t' ever SFX b3 evrer èvre/t' evrer SFX b3 eter ète/t' eter SFX b3 eler èle/t' eler SFX b3 er ons [^c]er SFX b3 cer çons cer SFX b3 er ez er SFX b4 Y 190 SFX b4 er er/n'q'd'l'm't's' er SFX b4 er ant/n'q'l'm't's' [^c]er SFX b4 cer çant/n'q'l'm't's' cer SFX b4 ecer èce/n'q'j'l'm't's' ecer SFX b4 emer ème/n'q'j'l'm't's' emer SFX b4 ener ène/n'q'j'l'm't's' ener SFX b4 eper èpe/n'q'j'l'm't's' eper SFX b4 erer ère/n'q'j'l'm't's' erer SFX b4 eser èse/n'q'j'l'm't's' eser SFX b4 ever ève/n'q'j'l'm't's' ever SFX b4 evrer èvre/n'q'j'l'm't's' evrer SFX b4 eter ète/n'q'j'l'm't's' eter SFX b4 eler èle/n'q'j'l'm't's' eler SFX b4 ecer èces/n'q'l'm't' ecer SFX b4 emer èmes/n'q'l'm't' emer SFX b4 ener ènes/n'q'l'm't' ener SFX b4 eper èpes/n'q'l'm't' eper SFX b4 erer ères/n'q'l'm't' erer SFX b4 eser èses/n'q'l'm't' eser SFX b4 ever èves/n'q'l'm't' ever SFX b4 evrer èvres/n'q'l'm't' evrer SFX b4 eter ètes/n'q'l'm't' eter SFX b4 eler èles/n'q'l'm't' eler SFX b4 er ons/n'q'l't' [^c]er SFX b4 cer çons/n'q'l't' cer SFX b4 er ez/n'q'l'm' er SFX b4 ecer ècent/n'q'l'm't's' ecer SFX b4 emer èment/n'q'l'm't's' emer SFX b4 ener ènent/n'q'l'm't's' ener SFX b4 eper èpent/n'q'l'm't's' eper SFX b4 erer èrent/n'q'l'm't's' erer SFX b4 eser èsent/n'q'l'm't's' eser SFX b4 ever èvent/n'q'l'm't's' ever SFX b4 evrer èvrent/n'q'l'm't's' evrer SFX b4 eter ètent/n'q'l'm't's' eter SFX b4 eler èlent/n'q'l'm't's' eler SFX b4 er ais/n'q'j'l'm't' [^c]er SFX b4 cer çais/n'q'j'l'm't' cer SFX b4 er ait/n'q'l'm't's' [^c]er SFX b4 cer çait/n'q'l'm't's' cer SFX b4 er ions/n'q'l't' er SFX b4 er iez/n'q'l'm' er SFX b4 er aient/n'q'l'm't's' [^c]er SFX b4 cer çaient/n'q'l'm't's' cer SFX b4 er ai/n'q'j'l'm't' [^c]er SFX b4 cer çai/n'q'j'l'm't' cer SFX b4 er as/n'q'l'm't' [^c]er SFX b4 cer ças/n'q'l'm't' cer SFX b4 er a/n'q'l'm't's' [^c]er SFX b4 cer ça/n'q'l'm't's' cer SFX b4 er âmes/n'q'l't' [^c]er SFX b4 cer çâmes/n'q'l't' cer SFX b4 er âtes/n'q'l'm' [^c]er SFX b4 cer çâtes/n'q'l'm' cer SFX b4 er èrent/n'q'l'm't's' er SFX b4 ecer ècerai/n'q'j'l'm't' ecer SFX b4 emer èmerai/n'q'j'l'm't' emer SFX b4 ener ènerai/n'q'j'l'm't' ener SFX b4 eper èperai/n'q'j'l'm't' eper SFX b4 erer èrerai/n'q'j'l'm't' erer SFX b4 eser èserai/n'q'j'l'm't' eser SFX b4 ever èverai/n'q'j'l'm't' ever SFX b4 evrer èvrerai/n'q'j'l'm't' evrer SFX b4 eter èterai/n'q'j'l'm't' eter SFX b4 eler èlerai/n'q'j'l'm't' eler SFX b4 ecer èceras/n'q'l'm't' ecer SFX b4 emer èmeras/n'q'l'm't' emer SFX b4 ener èneras/n'q'l'm't' ener SFX b4 eper èperas/n'q'l'm't' eper SFX b4 erer èreras/n'q'l'm't' erer SFX b4 eser èseras/n'q'l'm't' eser SFX b4 ever èveras/n'q'l'm't' ever SFX b4 evrer èvreras/n'q'l'm't' evrer SFX b4 eter èteras/n'q'l'm't' eter SFX b4 eler èleras/n'q'l'm't' eler SFX b4 ecer ècera/n'q'l'm't's' ecer SFX b4 emer èmera/n'q'l'm't's' emer SFX b4 ener ènera/n'q'l'm't's' ener SFX b4 eper èpera/n'q'l'm't's' eper SFX b4 erer èrera/n'q'l'm't's' erer SFX b4 eser èsera/n'q'l'm't's' eser SFX b4 ever èvera/n'q'l'm't's' ever SFX b4 evrer èvrera/n'q'l'm't's' evrer SFX b4 eter ètera/n'q'l'm't's' eter SFX b4 eler èlera/n'q'l'm't's' eler SFX b4 ecer ècerons/n'q'l't' ecer SFX b4 emer èmerons/n'q'l't' emer SFX b4 ener ènerons/n'q'l't' ener SFX b4 eper èperons/n'q'l't' eper SFX b4 erer èrerons/n'q'l't' erer SFX b4 eser èserons/n'q'l't' eser SFX b4 ever èverons/n'q'l't' ever SFX b4 evrer èvrerons/n'q'l't' evrer SFX b4 eter èterons/n'q'l't' eter SFX b4 eler èlerons/n'q'l't' eler SFX b4 ecer ècerez/n'q'l'm' ecer SFX b4 emer èmerez/n'q'l'm' emer SFX b4 ener ènerez/n'q'l'm' ener SFX b4 eper èperez/n'q'l'm' eper SFX b4 erer èrerez/n'q'l'm' erer SFX b4 eser èserez/n'q'l'm' eser SFX b4 ever èverez/n'q'l'm' ever SFX b4 evrer èvrerez/n'q'l'm' evrer SFX b4 eter èterez/n'q'l'm' eter SFX b4 eler èlerez/n'q'l'm' eler SFX b4 ecer èceront/n'q'l'm't's' ecer SFX b4 emer èmeront/n'q'l'm't's' emer SFX b4 ener èneront/n'q'l'm't's' ener SFX b4 eper èperont/n'q'l'm't's' eper SFX b4 erer èreront/n'q'l'm't's' erer SFX b4 eser èseront/n'q'l'm't's' eser SFX b4 ever èveront/n'q'l'm't's' ever SFX b4 evrer èvreront/n'q'l'm't's' evrer SFX b4 eter èteront/n'q'l'm't's' eter SFX b4 eler èleront/n'q'l'm't's' eler SFX b4 ecer ècerais/n'q'j'l'm't' ecer SFX b4 emer èmerais/n'q'j'l'm't' emer SFX b4 ener ènerais/n'q'j'l'm't' ener SFX b4 eper èperais/n'q'j'l'm't' eper SFX b4 erer èrerais/n'q'j'l'm't' erer SFX b4 eser èserais/n'q'j'l'm't' eser SFX b4 ever èverais/n'q'j'l'm't' ever SFX b4 evrer èvrerais/n'q'j'l'm't' evrer SFX b4 eter èterais/n'q'j'l'm't' eter SFX b4 eler èlerais/n'q'j'l'm't' eler SFX b4 ecer ècerait/n'q'l'm't's' ecer SFX b4 emer èmerait/n'q'l'm't's' emer SFX b4 ener ènerait/n'q'l'm't's' ener SFX b4 eper èperait/n'q'l'm't's' eper SFX b4 erer èrerait/n'q'l'm't's' erer SFX b4 eser èserait/n'q'l'm't's' eser SFX b4 ever èverait/n'q'l'm't's' ever SFX b4 evrer èvrerait/n'q'l'm't's' evrer SFX b4 eter èterait/n'q'l'm't's' eter SFX b4 eler èlerait/n'q'l'm't's' eler SFX b4 ecer ècerions/n'q'l't' ecer SFX b4 emer èmerions/n'q'l't' emer SFX b4 ener ènerions/n'q'l't' ener SFX b4 eper èperions/n'q'l't' eper SFX b4 erer èrerions/n'q'l't' erer SFX b4 eser èserions/n'q'l't' eser SFX b4 ever èverions/n'q'l't' ever SFX b4 evrer èvrerions/n'q'l't' evrer SFX b4 eter èterions/n'q'l't' eter SFX b4 eler èlerions/n'q'l't' eler SFX b4 ecer èceriez/n'q'l'm' ecer SFX b4 emer èmeriez/n'q'l'm' emer SFX b4 ener èneriez/n'q'l'm' ener SFX b4 eper èperiez/n'q'l'm' eper SFX b4 erer èreriez/n'q'l'm' erer SFX b4 eser èseriez/n'q'l'm' eser SFX b4 ever èveriez/n'q'l'm' ever SFX b4 evrer èvreriez/n'q'l'm' evrer SFX b4 eter èteriez/n'q'l'm' eter SFX b4 eler èleriez/n'q'l'm' eler SFX b4 ecer èceraient/n'q'l'm't's' ecer SFX b4 emer èmeraient/n'q'l'm't's' emer SFX b4 ener èneraient/n'q'l'm't's' ener SFX b4 eper èperaient/n'q'l'm't's' eper SFX b4 erer èreraient/n'q'l'm't's' erer SFX b4 eser èseraient/n'q'l'm't's' eser SFX b4 ever èveraient/n'q'l'm't's' ever SFX b4 evrer èvreraient/n'q'l'm't's' evrer SFX b4 eter èteraient/n'q'l'm't's' eter SFX b4 eler èleraient/n'q'l'm't's' eler SFX b4 er asse/n'q'j'l'm't' [^c]er SFX b4 cer çasse/n'q'j'l'm't' cer SFX b4 er asses/n'q'l'm't' [^c]er SFX b4 cer çasses/n'q'l'm't' cer SFX b4 er ât/n'q'l'm't's' [^c]er SFX b4 cer çât/n'q'l'm't's' cer SFX b4 er assions/n'q'l't' [^c]er SFX b4 cer çassions/n'q'l't' cer SFX b4 er assiez/n'q'l'm' [^c]er SFX b4 cer çassiez/n'q'l'm' cer SFX b4 er assent/n'q'l'm't's' [^c]er SFX b4 cer çassent/n'q'l'm't's' cer SFX b4 ecer èce/n'l'm't' ecer SFX b4 emer ème/n'l'm't' emer SFX b4 ener ène/n'l'm't' ener SFX b4 eper èpe/n'l'm't' eper SFX b4 erer ère/n'l'm't' erer SFX b4 eser èse/n'l'm't' eser SFX b4 ever ève/n'l'm't' ever SFX b4 evrer èvre/n'l'm't' evrer SFX b4 eter ète/n'l'm't' eter SFX b4 eler èle/n'l'm't' eler SFX b4 er ons/n'l' [^c]er SFX b4 cer çons/n'l' cer SFX b4 er ez/n'l'm' er SFX b5 Y 190 SFX b5 er er/n'q'd'm't's' er SFX b5 er ant/n'q'm't's' [^c]er SFX b5 cer çant/n'q'm't's' cer SFX b5 ecer èce/n'q'j'm't's' ecer SFX b5 emer ème/n'q'j'm't's' emer SFX b5 ener ène/n'q'j'm't's' ener SFX b5 eper èpe/n'q'j'm't's' eper SFX b5 erer ère/n'q'j'm't's' erer SFX b5 eser èse/n'q'j'm't's' eser SFX b5 ever ève/n'q'j'm't's' ever SFX b5 evrer èvre/n'q'j'm't's' evrer SFX b5 eter ète/n'q'j'm't's' eter SFX b5 eler èle/n'q'j'm't's' eler SFX b5 ecer èces/n'm't' ecer SFX b5 emer èmes/n'm't' emer SFX b5 ener ènes/n'm't' ener SFX b5 eper èpes/n'm't' eper SFX b5 erer ères/n'm't' erer SFX b5 eser èses/n'm't' eser SFX b5 ever èves/n'm't' ever SFX b5 evrer èvres/n'm't' evrer SFX b5 eter ètes/n'm't' eter SFX b5 eler èles/n'm't' eler SFX b5 er ons/n't' [^c]er SFX b5 cer çons/n't' cer SFX b5 er ez/n'm' er SFX b5 ecer ècent/n'q'm't's' ecer SFX b5 emer èment/n'q'm't's' emer SFX b5 ener ènent/n'q'm't's' ener SFX b5 eper èpent/n'q'm't's' eper SFX b5 erer èrent/n'q'm't's' erer SFX b5 eser èsent/n'q'm't's' eser SFX b5 ever èvent/n'q'm't's' ever SFX b5 evrer èvrent/n'q'm't's' evrer SFX b5 eter ètent/n'q'm't's' eter SFX b5 eler èlent/n'q'm't's' eler SFX b5 er ais/n'j'm't' [^c]er SFX b5 cer çais/n'j'm't' cer SFX b5 er ait/n'q'm't's' [^c]er SFX b5 cer çait/n'q'm't's' cer SFX b5 er ions/n't' er SFX b5 er iez/n'm' er SFX b5 er aient/n'q'm't's' [^c]er SFX b5 cer çaient/n'q'm't's' cer SFX b5 er ai/n'j'm't' [^c]er SFX b5 cer çai/n'j'm't' cer SFX b5 er as/n'm't' [^c]er SFX b5 cer ças/n'm't' cer SFX b5 er a/n'q'm't's' [^c]er SFX b5 cer ça/n'q'm't's' cer SFX b5 er âmes/n't' [^c]er SFX b5 cer çâmes/n't' cer SFX b5 er âtes/n'm' [^c]er SFX b5 cer çâtes/n'm' cer SFX b5 er èrent/n'q'm't's' er SFX b5 ecer ècerai/n'j'm't' ecer SFX b5 emer èmerai/n'j'm't' emer SFX b5 ener ènerai/n'j'm't' ener SFX b5 eper èperai/n'j'm't' eper SFX b5 erer èrerai/n'j'm't' erer SFX b5 eser èserai/n'j'm't' eser SFX b5 ever èverai/n'j'm't' ever SFX b5 evrer èvrerai/n'j'm't' evrer SFX b5 eter èterai/n'j'm't' eter SFX b5 eler èlerai/n'j'm't' eler SFX b5 ecer èceras/n'm't' ecer SFX b5 emer èmeras/n'm't' emer SFX b5 ener èneras/n'm't' ener SFX b5 eper èperas/n'm't' eper SFX b5 erer èreras/n'm't' erer SFX b5 eser èseras/n'm't' eser SFX b5 ever èveras/n'm't' ever SFX b5 evrer èvreras/n'm't' evrer SFX b5 eter èteras/n'm't' eter SFX b5 eler èleras/n'm't' eler SFX b5 ecer ècera/n'q'm't's' ecer SFX b5 emer èmera/n'q'm't's' emer SFX b5 ener ènera/n'q'm't's' ener SFX b5 eper èpera/n'q'm't's' eper SFX b5 erer èrera/n'q'm't's' erer SFX b5 eser èsera/n'q'm't's' eser SFX b5 ever èvera/n'q'm't's' ever SFX b5 evrer èvrera/n'q'm't's' evrer SFX b5 eter ètera/n'q'm't's' eter SFX b5 eler èlera/n'q'm't's' eler SFX b5 ecer ècerons/n't' ecer SFX b5 emer èmerons/n't' emer SFX b5 ener ènerons/n't' ener SFX b5 eper èperons/n't' eper SFX b5 erer èrerons/n't' erer SFX b5 eser èserons/n't' eser SFX b5 ever èverons/n't' ever SFX b5 evrer èvrerons/n't' evrer SFX b5 eter èterons/n't' eter SFX b5 eler èlerons/n't' eler SFX b5 ecer ècerez/n'm' ecer SFX b5 emer èmerez/n'm' emer SFX b5 ener ènerez/n'm' ener SFX b5 eper èperez/n'm' eper SFX b5 erer èrerez/n'm' erer SFX b5 eser èserez/n'm' eser SFX b5 ever èverez/n'm' ever SFX b5 evrer èvrerez/n'm' evrer SFX b5 eter èterez/n'm' eter SFX b5 eler èlerez/n'm' eler SFX b5 ecer èceront/n'q'm't's' ecer SFX b5 emer èmeront/n'q'm't's' emer SFX b5 ener èneront/n'q'm't's' ener SFX b5 eper èperont/n'q'm't's' eper SFX b5 erer èreront/n'q'm't's' erer SFX b5 eser èseront/n'q'm't's' eser SFX b5 ever èveront/n'q'm't's' ever SFX b5 evrer èvreront/n'q'm't's' evrer SFX b5 eter èteront/n'q'm't's' eter SFX b5 eler èleront/n'q'm't's' eler SFX b5 ecer ècerais/n'j'm't' ecer SFX b5 emer èmerais/n'j'm't' emer SFX b5 ener ènerais/n'j'm't' ener SFX b5 eper èperais/n'j'm't' eper SFX b5 erer èrerais/n'j'm't' erer SFX b5 eser èserais/n'j'm't' eser SFX b5 ever èverais/n'j'm't' ever SFX b5 evrer èvrerais/n'j'm't' evrer SFX b5 eter èterais/n'j'm't' eter SFX b5 eler èlerais/n'j'm't' eler SFX b5 ecer ècerait/n'q'm't's' ecer SFX b5 emer èmerait/n'q'm't's' emer SFX b5 ener ènerait/n'q'm't's' ener SFX b5 eper èperait/n'q'm't's' eper SFX b5 erer èrerait/n'q'm't's' erer SFX b5 eser èserait/n'q'm't's' eser SFX b5 ever èverait/n'q'm't's' ever SFX b5 evrer èvrerait/n'q'm't's' evrer SFX b5 eter èterait/n'q'm't's' eter SFX b5 eler èlerait/n'q'm't's' eler SFX b5 ecer ècerions/n't' ecer SFX b5 emer èmerions/n't' emer SFX b5 ener ènerions/n't' ener SFX b5 eper èperions/n't' eper SFX b5 erer èrerions/n't' erer SFX b5 eser èserions/n't' eser SFX b5 ever èverions/n't' ever SFX b5 evrer èvrerions/n't' evrer SFX b5 eter èterions/n't' eter SFX b5 eler èlerions/n't' eler SFX b5 ecer èceriez/n'm' ecer SFX b5 emer èmeriez/n'm' emer SFX b5 ener èneriez/n'm' ener SFX b5 eper èperiez/n'm' eper SFX b5 erer èreriez/n'm' erer SFX b5 eser èseriez/n'm' eser SFX b5 ever èveriez/n'm' ever SFX b5 evrer èvreriez/n'm' evrer SFX b5 eter èteriez/n'm' eter SFX b5 eler èleriez/n'm' eler SFX b5 ecer èceraient/n'q'm't's' ecer SFX b5 emer èmeraient/n'q'm't's' emer SFX b5 ener èneraient/n'q'm't's' ener SFX b5 eper èperaient/n'q'm't's' eper SFX b5 erer èreraient/n'q'm't's' erer SFX b5 eser èseraient/n'q'm't's' eser SFX b5 ever èveraient/n'q'm't's' ever SFX b5 evrer èvreraient/n'q'm't's' evrer SFX b5 eter èteraient/n'q'm't's' eter SFX b5 eler èleraient/n'q'm't's' eler SFX b5 er asse/n'j'm't' [^c]er SFX b5 cer çasse/n'j'm't' cer SFX b5 er asses/n'm't' [^c]er SFX b5 cer çasses/n'm't' cer SFX b5 er ât/n'q'm't's' [^c]er SFX b5 cer çât/n'q'm't's' cer SFX b5 er assions/n't' [^c]er SFX b5 cer çassions/n't' cer SFX b5 er assiez/n'm' [^c]er SFX b5 cer çassiez/n'm' cer SFX b5 er assent/n'q'm't's' [^c]er SFX b5 cer çassent/n'q'm't's' cer SFX b5 ecer èce/n'm' ecer SFX b5 emer ème/n'm' emer SFX b5 ener ène/n'm' ener SFX b5 eper èpe/n'm' eper SFX b5 erer ère/n'm' erer SFX b5 eser èse/n'm' eser SFX b5 ever ève/n'm' ever SFX b5 evrer èvre/n'm' evrer SFX b5 eter ète/n'm' eter SFX b5 eler èle/n'm' eler SFX b5 er ons/n' [^c]er SFX b5 cer çons/n' cer SFX b5 er ez/n' er SFX c0 N 151 SFX c0 er ant [^cg]er SFX c0 écer éçant écer SFX c0 éger égeant éger SFX c0 ébrer èbre ébrer SFX c0 écer èce écer SFX c0 écher èche écher SFX c0 écrer ècre écrer SFX c0 éder ède éder SFX c0 éger ège éger SFX c0 égler ègle égler SFX c0 égner ègne égner SFX c0 égrer ègre égrer SFX c0 éguer ègue éguer SFX c0 éler èle éler SFX c0 émer ème émer SFX c0 éner ène éner SFX c0 éper èpe éper SFX c0 équer èque équer SFX c0 érer ère érer SFX c0 éser èse éser SFX c0 éter ète éter SFX c0 étrer ètre étrer SFX c0 évrer èvre évrer SFX c0 éyer èye éyer SFX c0 ébrer èbres ébrer SFX c0 écer èces écer SFX c0 écher èches écher SFX c0 écrer ècres écrer SFX c0 éder èdes éder SFX c0 éger èges éger SFX c0 égler ègles égler SFX c0 égner ègnes égner SFX c0 égrer ègres égrer SFX c0 éguer ègues éguer SFX c0 éler èles éler SFX c0 émer èmes émer SFX c0 éner ènes éner SFX c0 éper èpes éper SFX c0 équer èques équer SFX c0 érer ères érer SFX c0 éser èses éser SFX c0 éter ètes éter SFX c0 étrer ètres étrer SFX c0 évrer èvres évrer SFX c0 éyer èyes éyer SFX c0 er ons [^cg]er SFX c0 écer éçons écer SFX c0 éger égeons éger SFX c0 er ez er SFX c0 ébrer èbrent ébrer SFX c0 écer ècent écer SFX c0 écher èchent écher SFX c0 écrer ècrent écrer SFX c0 éder èdent éder SFX c0 éger ègent éger SFX c0 égler èglent égler SFX c0 égner ègnent égner SFX c0 égrer ègrent égrer SFX c0 éguer èguent éguer SFX c0 éler èlent éler SFX c0 émer èment émer SFX c0 éner ènent éner SFX c0 éper èpent éper SFX c0 équer èquent équer SFX c0 érer èrent érer SFX c0 éser èsent éser SFX c0 éter ètent éter SFX c0 étrer ètrent étrer SFX c0 évrer èvrent évrer SFX c0 éyer èyent éyer SFX c0 er ais [^cg]er SFX c0 écer éçais écer SFX c0 éger égeais éger SFX c0 er ait [^cg]er SFX c0 écer éçait écer SFX c0 éger égeait éger SFX c0 er ions er SFX c0 er iez er SFX c0 er aient [^cg]er SFX c0 écer éçaient écer SFX c0 éger égeaient éger SFX c0 er ai [^cg]er SFX c0 écer éçai écer SFX c0 éger égeai éger SFX c0 er as [^cg]er SFX c0 écer éças écer SFX c0 éger égeas éger SFX c0 er a [^cg]er SFX c0 écer éça écer SFX c0 éger égea éger SFX c0 er âmes [^cg]er SFX c0 écer éçâmes écer SFX c0 éger égeâmes éger SFX c0 er âtes [^cg]er SFX c0 écer éçâtes écer SFX c0 éger égeâtes éger SFX c0 er èrent er SFX c0 er erai er SFX c0 er eras er SFX c0 er era er SFX c0 er erons er SFX c0 er erez er SFX c0 er eront er SFX c0 er erais er SFX c0 er erait er SFX c0 er erions er SFX c0 er eriez er SFX c0 er eraient er SFX c0 er asse [^cg]er SFX c0 écer éçasse écer SFX c0 éger égeasse éger SFX c0 er asses [^cg]er SFX c0 écer éçasses écer SFX c0 éger égeasses éger SFX c0 er ât [^cg]er SFX c0 écer éçât écer SFX c0 éger égeât éger SFX c0 er assions [^cg]er SFX c0 écer éçassions écer SFX c0 éger égeassions éger SFX c0 er assiez [^cg]er SFX c0 écer éçassiez écer SFX c0 éger égeassiez éger SFX c0 er assent [^cg]er SFX c0 écer éçassent écer SFX c0 éger égeassent éger SFX c0 ébrer èbre ébrer SFX c0 écer èce écer SFX c0 écher èche écher SFX c0 écrer ècre écrer SFX c0 éder ède éder SFX c0 éger ège éger SFX c0 égler ègle égler SFX c0 égner ègne égner SFX c0 égrer ègre égrer SFX c0 éguer ègue éguer SFX c0 éler èle éler SFX c0 émer ème émer SFX c0 éner ène éner SFX c0 éper èpe éper SFX c0 équer èque équer SFX c0 érer ère érer SFX c0 éser èse éser SFX c0 éter ète éter SFX c0 étrer ètre étrer SFX c0 évrer èvre évrer SFX c0 éyer èye éyer SFX c0 er ons [^cg]er SFX c0 écer éçons écer SFX c0 éger égeons éger SFX c0 er ez er SFX c1 Y 152 SFX c1 r r/n'q'd' er SFX c1 er ant/n'q' [^cg]er SFX c1 écer éçant/n'q' écer SFX c1 éger égeant/n'q' éger SFX c1 ébrer èbre/n'q'j' ébrer SFX c1 écer èce/n'q'j' écer SFX c1 écher èche/n'q'j' écher SFX c1 écrer ècre/n'q'j' écrer SFX c1 éder ède/n'q'j' éder SFX c1 éger ège/n'q'j' éger SFX c1 égler ègle/n'q'j' égler SFX c1 égner ègne/n'q'j' égner SFX c1 égrer ègre/n'q'j' égrer SFX c1 éguer ègue/n'q'j' éguer SFX c1 éler èle/n'q'j' éler SFX c1 émer ème/n'q'j' émer SFX c1 éner ène/n'q'j' éner SFX c1 éper èpe/n'q'j' éper SFX c1 équer èque/n'q'j' équer SFX c1 érer ère/n'q'j' érer SFX c1 éser èse/n'q'j' éser SFX c1 éter ète/n'q'j' éter SFX c1 étrer ètre/n'q'j' étrer SFX c1 évrer èvre/n'q'j' évrer SFX c1 éyer èye/n'q'j' éyer SFX c1 ébrer èbres/n' ébrer SFX c1 écer èces/n' écer SFX c1 écher èches/n' écher SFX c1 écrer ècres/n' écrer SFX c1 éder èdes/n' éder SFX c1 éger èges/n' éger SFX c1 égler ègles/n' égler SFX c1 égner ègnes/n' égner SFX c1 égrer ègres/n' égrer SFX c1 éguer ègues/n' éguer SFX c1 éler èles/n' éler SFX c1 émer èmes/n' émer SFX c1 éner ènes/n' éner SFX c1 éper èpes/n' éper SFX c1 équer èques/n' équer SFX c1 érer ères/n' érer SFX c1 éser èses/n' éser SFX c1 éter ètes/n' éter SFX c1 étrer ètres/n' étrer SFX c1 évrer èvres/n' évrer SFX c1 éyer èyes/n' éyer SFX c1 er ons/n' [^cg]er SFX c1 écer éçons/n' écer SFX c1 éger égeons/n' éger SFX c1 er ez/n' er SFX c1 ébrer èbrent/n'q' ébrer SFX c1 écer ècent/n'q' écer SFX c1 écher èchent/n'q' écher SFX c1 écrer ècrent/n'q' écrer SFX c1 éder èdent/n'q' éder SFX c1 éger ègent/n'q' éger SFX c1 égler èglent/n'q' égler SFX c1 égner ègnent/n'q' égner SFX c1 égrer ègrent/n'q' égrer SFX c1 éguer èguent/n'q' éguer SFX c1 éler èlent/n'q' éler SFX c1 émer èment/n'q' émer SFX c1 éner ènent/n'q' éner SFX c1 éper èpent/n'q' éper SFX c1 équer èquent/n'q' équer SFX c1 érer èrent/n'q' érer SFX c1 éser èsent/n'q' éser SFX c1 éter ètent/n'q' éter SFX c1 étrer ètrent/n'q' étrer SFX c1 évrer èvrent/n'q' évrer SFX c1 éyer èyent/n'q' éyer SFX c1 er ais/n'j' [^cg]er SFX c1 écer éçais/n'j' écer SFX c1 éger égeais/n'j' éger SFX c1 er ait/n'q' [^cg]er SFX c1 écer éçait/n'q' écer SFX c1 éger égeait/n'q' éger SFX c1 er ions/n' er SFX c1 er iez/n' er SFX c1 er aient/n'q' [^cg]er SFX c1 écer éçaient/n'q' écer SFX c1 éger égeaient/n'q' éger SFX c1 er ai/n'j' [^cg]er SFX c1 écer éçai/n'j' écer SFX c1 éger égeai/n'j' éger SFX c1 er as/n' [^cg]er SFX c1 écer éças/n' écer SFX c1 éger égeas/n' éger SFX c1 er a/n'q' [^cg]er SFX c1 écer éça/n'q' écer SFX c1 éger égea/n'q' éger SFX c1 er âmes/n' [^cg]er SFX c1 écer éçâmes/n' écer SFX c1 éger égeâmes/n' éger SFX c1 er âtes/n' [^cg]er SFX c1 écer éçâtes/n' écer SFX c1 éger égeâtes/n' éger SFX c1 er èrent/n'q' er SFX c1 er erai/n'j' er SFX c1 er eras/n' er SFX c1 er era/n'q' er SFX c1 er erons/n' er SFX c1 er erez/n' er SFX c1 er eront/n'q' er SFX c1 er erais/n'j' er SFX c1 er erait/n'q' er SFX c1 er erions/n' er SFX c1 er eriez/n' er SFX c1 er eraient/n'q' er SFX c1 er asse/n'j' [^cg]er SFX c1 écer éçasse/n'j' écer SFX c1 éger égeasse/n'j' éger SFX c1 er asses/n' [^cg]er SFX c1 écer éçasses/n' écer SFX c1 éger égeasses/n' éger SFX c1 er ât/n'q' [^cg]er SFX c1 écer éçât/n'q' écer SFX c1 éger égeât/n'q' éger SFX c1 er assions/n' [^cg]er SFX c1 écer éçassions/n' écer SFX c1 éger égeassions/n' éger SFX c1 er assiez/n' [^cg]er SFX c1 écer éçassiez/n' écer SFX c1 éger égeassiez/n' éger SFX c1 er assent/n'q' [^cg]er SFX c1 écer éçassent/n'q' écer SFX c1 éger égeassent/n'q' éger SFX c1 ébrer èbre/n' ébrer SFX c1 écer èce/n' écer SFX c1 écher èche/n' écher SFX c1 écrer ècre/n' écrer SFX c1 éder ède/n' éder SFX c1 éger ège/n' éger SFX c1 égler ègle/n' égler SFX c1 égner ègne/n' égner SFX c1 égrer ègre/n' égrer SFX c1 éguer ègue/n' éguer SFX c1 éler èle/n' éler SFX c1 émer ème/n' émer SFX c1 éner ène/n' éner SFX c1 éper èpe/n' éper SFX c1 équer èque/n' équer SFX c1 érer ère/n' érer SFX c1 éser èse/n' éser SFX c1 éter ète/n' éter SFX c1 étrer ètre/n' étrer SFX c1 évrer èvre/n' évrer SFX c1 éyer èye/n' éyer SFX c1 er ons/n' [^cg]er SFX c1 écer éçons/n' écer SFX c1 éger égeons/n' éger SFX c1 er ez/n' er SFX c2 Y 152 SFX c2 er er/n'q'd'l'm't's' er SFX c2 er ant/n'q'l'm't's' [^cg]er SFX c2 écer éçant/n'q'l'm't's' écer SFX c2 éger égeant/n'q'l'm't's' éger SFX c2 ébrer èbre/n'q'j'l'm't's' ébrer SFX c2 écer èce/n'q'j'l'm't's' écer SFX c2 écher èche/n'q'j'l'm't's' écher SFX c2 écrer ècre/n'q'j'l'm't's' écrer SFX c2 éder ède/n'q'j'l'm't's' éder SFX c2 éger ège/n'q'j'l'm't's' éger SFX c2 égler ègle/n'q'j'l'm't's' égler SFX c2 égner ègne/n'q'j'l'm't's' égner SFX c2 égrer ègre/n'q'j'l'm't's' égrer SFX c2 éguer ègue/n'q'j'l'm't's' éguer SFX c2 éler èle/n'q'j'l'm't's' éler SFX c2 émer ème/n'q'j'l'm't's' émer SFX c2 éner ène/n'q'j'l'm't's' éner SFX c2 éper èpe/n'q'j'l'm't's' éper SFX c2 équer èque/n'q'j'l'm't's' équer SFX c2 érer ère/n'q'j'l'm't's' érer SFX c2 éser èse/n'q'j'l'm't's' éser SFX c2 éter ète/n'q'j'l'm't's' éter SFX c2 étrer ètre/n'q'j'l'm't's' étrer SFX c2 évrer èvre/n'q'j'l'm't's' évrer SFX c2 éyer èye/n'q'j'l'm't's' éyer SFX c2 ébrer èbres/n'q'l'm' ébrer SFX c2 écer èces/n'q'l'm' écer SFX c2 écher èches/n'q'l'm' écher SFX c2 écrer ècres/n'q'l'm' écrer SFX c2 éder èdes/n'q'l'm' éder SFX c2 éger èges/n'q'l'm' éger SFX c2 égler ègles/n'q'l'm' égler SFX c2 égner ègnes/n'q'l'm' égner SFX c2 égrer ègres/n'q'l'm' égrer SFX c2 éguer ègues/n'q'l'm' éguer SFX c2 éler èles/n'q'l'm' éler SFX c2 émer èmes/n'q'l'm' émer SFX c2 éner ènes/n'q'l'm' éner SFX c2 éper èpes/n'q'l'm' éper SFX c2 équer èques/n'q'l'm' équer SFX c2 érer ères/n'q'l'm' érer SFX c2 éser èses/n'q'l'm' éser SFX c2 éter ètes/n'q'l'm' éter SFX c2 étrer ètres/n'q'l'm' étrer SFX c2 évrer èvres/n'q'l'm' évrer SFX c2 éyer èyes/n'q'l'm' éyer SFX c2 er ons/n'q'l't' [^cg]er SFX c2 écer éçons/n'q'l't' écer SFX c2 éger égeons/n'q'l't' éger SFX c2 er ez/n'q'l'm' er SFX c2 ébrer èbrent/n'q'l'm't's' ébrer SFX c2 écer ècent/n'q'l'm't's' écer SFX c2 écher èchent/n'q'l'm't's' écher SFX c2 écrer ècrent/n'q'l'm't's' écrer SFX c2 éder èdent/n'q'l'm't's' éder SFX c2 éger ègent/n'q'l'm't's' éger SFX c2 égler èglent/n'q'l'm't's' égler SFX c2 égner ègnent/n'q'l'm't's' égner SFX c2 égrer ègrent/n'q'l'm't's' égrer SFX c2 éguer èguent/n'q'l'm't's' éguer SFX c2 éler èlent/n'q'l'm't's' éler SFX c2 émer èment/n'q'l'm't's' émer SFX c2 éner ènent/n'q'l'm't's' éner SFX c2 éper èpent/n'q'l'm't's' éper SFX c2 équer èquent/n'q'l'm't's' équer SFX c2 érer èrent/n'q'l'm't's' érer SFX c2 éser èsent/n'q'l'm't's' éser SFX c2 éter ètent/n'q'l'm't's' éter SFX c2 étrer ètrent/n'q'l'm't's' étrer SFX c2 évrer èvrent/n'q'l'm't's' évrer SFX c2 éyer èyent/n'q'l'm't's' éyer SFX c2 er ais/n'q'j'l'm't' [^cg]er SFX c2 écer éçais/n'q'j'l'm't' écer SFX c2 éger égeais/n'q'j'l'm't' éger SFX c2 er ait/n'q'l'm't's' [^cg]er SFX c2 écer éçait/n'q'l'm't's' écer SFX c2 éger égeait/n'q'l'm't's' éger SFX c2 er ions/n'q'l't' er SFX c2 er iez/n'q'l'm' er SFX c2 er aient/n'q'l'm't's' [^cg]er SFX c2 écer éçaient/n'q'l'm't's' écer SFX c2 éger égeaient/n'q'l'm't's' éger SFX c2 er ai/n'q'j'l't' [^cg]er SFX c2 écer éçai/n'q'j'l't' écer SFX c2 éger égeai/n'q'j'l't' éger SFX c2 er as/n'q'l'm' [^cg]er SFX c2 écer éças/n'q'l'm' écer SFX c2 éger égeas/n'q'l'm' éger SFX c2 er a/n'q'l'm't's' [^cg]er SFX c2 écer éça/n'q'l'm't's' écer SFX c2 éger égea/n'q'l'm't's' éger SFX c2 er âmes/n'q'l't' [^cg]er SFX c2 écer éçâmes/n'q'l't' écer SFX c2 éger égeâmes/n'q'l't' éger SFX c2 er âtes/n'q'l'm' [^cg]er SFX c2 écer éçâtes/n'q'l'm' écer SFX c2 éger égeâtes/n'q'l'm' éger SFX c2 er èrent/n'q'l'm't's' er SFX c2 er erai/n'q'j'l't' er SFX c2 er eras/n'q'l'm' er SFX c2 er era/n'q'l'm't's' er SFX c2 er erons/n'q'l't' er SFX c2 er erez/n'q'l'm' er SFX c2 er eront/n'q'l'm't's' er SFX c2 er erais/n'q'j'l'm't' er SFX c2 er erait/n'q'l'm't's' er SFX c2 er erions/n'q'l't' er SFX c2 er eriez/n'q'l'm' er SFX c2 er eraient/n'q'l'm't's' er SFX c2 er asse/n'q'j'l't' [^cg]er SFX c2 écer éçasse/n'q'j'l't' écer SFX c2 éger égeasse/n'q'j'l't' éger SFX c2 er asses/n'q'l'm' [^cg]er SFX c2 écer éçasses/n'q'l'm' écer SFX c2 éger égeasses/n'q'l'm' éger SFX c2 er ât/n'q'l'm't's' [^cg]er SFX c2 écer éçât/n'q'l'm't's' écer SFX c2 éger égeât/n'q'l'm't's' éger SFX c2 er assions/n'q'l't' [^cg]er SFX c2 écer éçassions/n'q'l't' écer SFX c2 éger égeassions/n'q'l't' éger SFX c2 er assiez/n'q'l'm' [^cg]er SFX c2 écer éçassiez/n'q'l'm' écer SFX c2 éger égeassiez/n'q'l'm' éger SFX c2 er assent/n'q'l'm't's' [^cg]er SFX c2 écer éçassent/n'q'l'm't's' écer SFX c2 éger égeassent/n'q'l'm't's' éger SFX c2 ébrer èbre/n'l'm' ébrer SFX c2 écer èce/n'l'm' écer SFX c2 écher èche/n'l'm' écher SFX c2 écrer ècre/n'l'm' écrer SFX c2 éder ède/n'l'm' éder SFX c2 éger ège/n'l'm' éger SFX c2 égler ègle/n'l'm' égler SFX c2 égner ègne/n'l'm' égner SFX c2 égrer ègre/n'l'm' égrer SFX c2 éguer ègue/n'l'm' éguer SFX c2 éler èle/n'l'm' éler SFX c2 émer ème/n'l'm' émer SFX c2 éner ène/n'l'm' éner SFX c2 éper èpe/n'l'm' éper SFX c2 équer èque/n'l'm' équer SFX c2 érer ère/n'l'm' érer SFX c2 éser èse/n'l'm' éser SFX c2 éter ète/n'l'm' éter SFX c2 étrer ètre/n'l'm' étrer SFX c2 évrer èvre/n'l'm' évrer SFX c2 éyer èye/n'l'm' éyer SFX c2 er ons/n'l' [^cg]er SFX c2 écer éçons/n'l' écer SFX c2 éger égeons/n'l' éger SFX c2 er ez/n'l'm' er SFX c3 Y 152 SFX c3 er er/m't's' er SFX c3 er ant/m't's' [^cg]er SFX c3 écer éçant/m't's' écer SFX c3 éger égeant/m't's' éger SFX c3 ébrer èbre/m's' ébrer SFX c3 écer èce/m's' écer SFX c3 écher èche/m's' écher SFX c3 écrer ècre/m's' écrer SFX c3 éder ède/m's' éder SFX c3 éger ège/m's' éger SFX c3 égler ègle/m's' égler SFX c3 égner ègne/m's' égner SFX c3 égrer ègre/m's' égrer SFX c3 éguer ègue/m's' éguer SFX c3 éler èle/m's' éler SFX c3 émer ème/m's' émer SFX c3 éner ène/m's' éner SFX c3 éper èpe/m's' éper SFX c3 équer èque/m's' équer SFX c3 érer ère/m's' érer SFX c3 éser èse/m's' éser SFX c3 éter ète/m's' éter SFX c3 étrer ètre/m's' étrer SFX c3 évrer èvre/m's' évrer SFX c3 éyer èye/m's' éyer SFX c3 ébrer èbres/t' ébrer SFX c3 écer èces/t' écer SFX c3 écher èches/t' écher SFX c3 écrer ècres/t' écrer SFX c3 éder èdes/t' éder SFX c3 éger èges/t' éger SFX c3 égler ègles/t' égler SFX c3 égner ègnes/t' égner SFX c3 égrer ègres/t' égrer SFX c3 éguer ègues/t' éguer SFX c3 éler èles/t' éler SFX c3 émer èmes/t' émer SFX c3 éner ènes/t' éner SFX c3 éper èpes/t' éper SFX c3 équer èques/t' équer SFX c3 érer ères/t' érer SFX c3 éser èses/t' éser SFX c3 éter ètes/t' éter SFX c3 étrer ètres/t' étrer SFX c3 évrer èvres/t' évrer SFX c3 éyer èyes/t' éyer SFX c3 er ons [^cg]er SFX c3 écer éçons écer SFX c3 éger égeons éger SFX c3 er ez er SFX c3 ébrer èbrent/s' ébrer SFX c3 écer ècent/s' écer SFX c3 écher èchent/s' écher SFX c3 écrer ècrent/s' écrer SFX c3 éder èdent/s' éder SFX c3 éger ègent/s' éger SFX c3 égler èglent/s' égler SFX c3 égner ègnent/s' égner SFX c3 égrer ègrent/s' égrer SFX c3 éguer èguent/s' éguer SFX c3 éler èlent/s' éler SFX c3 émer èment/s' émer SFX c3 éner ènent/s' éner SFX c3 éper èpent/s' éper SFX c3 équer èquent/s' équer SFX c3 érer èrent/s' érer SFX c3 éser èsent/s' éser SFX c3 éter ètent/s' éter SFX c3 étrer ètrent/s' étrer SFX c3 évrer èvrent/s' évrer SFX c3 éyer èyent/s' éyer SFX c3 er ais/m't' [^cg]er SFX c3 écer éçais/m't' écer SFX c3 éger égeais/m't' éger SFX c3 er ait/s' [^cg]er SFX c3 écer éçait/s' écer SFX c3 éger égeait/s' éger SFX c3 er ions er SFX c3 er iez er SFX c3 er aient/s' [^cg]er SFX c3 écer éçaient/s' écer SFX c3 éger égeaient/s' éger SFX c3 er ai/m' [^cg]er SFX c3 écer éçai/m' écer SFX c3 éger égeai/m' éger SFX c3 er as/t' [^cg]er SFX c3 écer éças/t' écer SFX c3 éger égeas/t' éger SFX c3 er a/s' [^cg]er SFX c3 écer éça/s' écer SFX c3 éger égea/s' éger SFX c3 er âmes [^cg]er SFX c3 écer éçâmes écer SFX c3 éger égeâmes éger SFX c3 er âtes [^cg]er SFX c3 écer éçâtes écer SFX c3 éger égeâtes éger SFX c3 er èrent/s' er SFX c3 er erai/m' er SFX c3 er eras/t' er SFX c3 er era/s' er SFX c3 er erons er SFX c3 er erez er SFX c3 er eront/s' er SFX c3 er erais/m't' er SFX c3 er erait/s' er SFX c3 er erions er SFX c3 er eriez er SFX c3 er eraient/s' er SFX c3 er asse/m' [^cg]er SFX c3 écer éçasse/m' écer SFX c3 éger égeasse/m' éger SFX c3 er asses/t' [^cg]er SFX c3 écer éçasses/t' écer SFX c3 éger égeasses/t' éger SFX c3 er ât/s' [^cg]er SFX c3 écer éçât/s' écer SFX c3 éger égeât/s' éger SFX c3 er assions [^cg]er SFX c3 écer éçassions écer SFX c3 éger égeassions éger SFX c3 er assiez [^cg]er SFX c3 écer éçassiez écer SFX c3 éger égeassiez éger SFX c3 er assent/s' [^cg]er SFX c3 écer éçassent/s' écer SFX c3 éger égeassent/s' éger SFX c3 ébrer èbre/t' ébrer SFX c3 écer èce/t' écer SFX c3 écher èche/t' écher SFX c3 écrer ècre/t' écrer SFX c3 éder ède/t' éder SFX c3 éger ège/t' éger SFX c3 égler ègle/t' égler SFX c3 égner ègne/t' égner SFX c3 égrer ègre/t' égrer SFX c3 éguer ègue/t' éguer SFX c3 éler èle/t' éler SFX c3 émer ème/t' émer SFX c3 éner ène/t' éner SFX c3 éper èpe/t' éper SFX c3 équer èque/t' équer SFX c3 érer ère/t' érer SFX c3 éser èse/t' éser SFX c3 éter ète/t' éter SFX c3 étrer ètre/t' étrer SFX c3 évrer èvre/t' évrer SFX c3 éyer èye/t' éyer SFX c3 er ons [^cg]er SFX c3 écer éçons écer SFX c3 éger égeons éger SFX c3 er ez er SFX c4 Y 152 SFX c4 er er/n'q'd'l'm't's' er SFX c4 er ant/n'q'l'm't's' [^cg]er SFX c4 écer éçant/n'q'l'm't's' écer SFX c4 éger égeant/n'q'l'm't's' éger SFX c4 ébrer èbre/n'q'j'l'm't's' ébrer SFX c4 écer èce/n'q'j'l'm't's' écer SFX c4 écher èche/n'q'j'l'm't's' écher SFX c4 écrer ècre/n'q'j'l'm't's' écrer SFX c4 éder ède/n'q'j'l'm't's' éder SFX c4 éger ège/n'q'j'l'm't's' éger SFX c4 égler ègle/n'q'j'l'm't's' égler SFX c4 égner ègne/n'q'j'l'm't's' égner SFX c4 égrer ègre/n'q'j'l'm't's' égrer SFX c4 éguer ègue/n'q'j'l'm't's' éguer SFX c4 éler èle/n'q'j'l'm't's' éler SFX c4 émer ème/n'q'j'l'm't's' émer SFX c4 éner ène/n'q'j'l'm't's' éner SFX c4 éper èpe/n'q'j'l'm't's' éper SFX c4 équer èque/n'q'j'l'm't's' équer SFX c4 érer ère/n'q'j'l'm't's' érer SFX c4 éser èse/n'q'j'l'm't's' éser SFX c4 éter ète/n'q'j'l'm't's' éter SFX c4 étrer ètre/n'q'j'l'm't's' étrer SFX c4 évrer èvre/n'q'j'l'm't's' évrer SFX c4 éyer èye/n'q'j'l'm't's' éyer SFX c4 ébrer èbres/n'q'l'm't' ébrer SFX c4 écer èces/n'q'l'm't' écer SFX c4 écher èches/n'q'l'm't' écher SFX c4 écrer ècres/n'q'l'm't' écrer SFX c4 éder èdes/n'q'l'm't' éder SFX c4 éger èges/n'q'l'm't' éger SFX c4 égler ègles/n'q'l'm't' égler SFX c4 égner ègnes/n'q'l'm't' égner SFX c4 égrer ègres/n'q'l'm't' égrer SFX c4 éguer ègues/n'q'l'm't' éguer SFX c4 éler èles/n'q'l'm't' éler SFX c4 émer èmes/n'q'l'm't' émer SFX c4 éner ènes/n'q'l'm't' éner SFX c4 éper èpes/n'q'l'm't' éper SFX c4 équer èques/n'q'l'm't' équer SFX c4 érer ères/n'q'l'm't' érer SFX c4 éser èses/n'q'l'm't' éser SFX c4 éter ètes/n'q'l'm't' éter SFX c4 étrer ètres/n'q'l'm't' étrer SFX c4 évrer èvres/n'q'l'm't' évrer SFX c4 éyer èyes/n'q'l'm't' éyer SFX c4 er ons/n'q'l't' [^cg]er SFX c4 écer éçons/n'q'l't' écer SFX c4 éger égeons/n'q'l't' éger SFX c4 er ez/n'q'l'm' er SFX c4 ébrer èbrent/n'q'l'm't's' ébrer SFX c4 écer ècent/n'q'l'm't's' écer SFX c4 écher èchent/n'q'l'm't's' écher SFX c4 écrer ècrent/n'q'l'm't's' écrer SFX c4 éder èdent/n'q'l'm't's' éder SFX c4 éger ègent/n'q'l'm't's' éger SFX c4 égler èglent/n'q'l'm't's' égler SFX c4 égner ègnent/n'q'l'm't's' égner SFX c4 égrer ègrent/n'q'l'm't's' égrer SFX c4 éguer èguent/n'q'l'm't's' éguer SFX c4 éler èlent/n'q'l'm't's' éler SFX c4 émer èment/n'q'l'm't's' émer SFX c4 éner ènent/n'q'l'm't's' éner SFX c4 éper èpent/n'q'l'm't's' éper SFX c4 équer èquent/n'q'l'm't's' équer SFX c4 érer èrent/n'q'l'm't's' érer SFX c4 éser èsent/n'q'l'm't's' éser SFX c4 éter ètent/n'q'l'm't's' éter SFX c4 étrer ètrent/n'q'l'm't's' étrer SFX c4 évrer èvrent/n'q'l'm't's' évrer SFX c4 éyer èyent/n'q'l'm't's' éyer SFX c4 er ais/n'q'j'l'm't' [^cg]er SFX c4 écer éçais/n'q'j'l'm't' écer SFX c4 éger égeais/n'q'j'l'm't' éger SFX c4 er ait/n'q'l'm't's' [^cg]er SFX c4 écer éçait/n'q'l'm't's' écer SFX c4 éger égeait/n'q'l'm't's' éger SFX c4 er ions/n'q'l't' er SFX c4 er iez/n'q'l'm' er SFX c4 er aient/n'q'l'm't's' [^cg]er SFX c4 écer éçaient/n'q'l'm't's' écer SFX c4 éger égeaient/n'q'l'm't's' éger SFX c4 er ai/n'q'j'l'm't' [^cg]er SFX c4 écer éçai/n'q'j'l'm't' écer SFX c4 éger égeai/n'q'j'l'm't' éger SFX c4 er as/n'q'l'm't' [^cg]er SFX c4 écer éças/n'q'l'm't' écer SFX c4 éger égeas/n'q'l'm't' éger SFX c4 er a/n'q'l'm't's' [^cg]er SFX c4 écer éça/n'q'l'm't's' écer SFX c4 éger égea/n'q'l'm't's' éger SFX c4 er âmes/n'q'l't' [^cg]er SFX c4 écer éçâmes/n'q'l't' écer SFX c4 éger égeâmes/n'q'l't' éger SFX c4 er âtes/n'q'l'm' [^cg]er SFX c4 écer éçâtes/n'q'l'm' écer SFX c4 éger égeâtes/n'q'l'm' éger SFX c4 er èrent/n'q'l'm't's' er SFX c4 er erai/n'q'j'l'm't' er SFX c4 er eras/n'q'l'm't' er SFX c4 er era/n'q'l'm't's' er SFX c4 er erons/n'q'l't' er SFX c4 er erez/n'q'l'm' er SFX c4 er eront/n'q'l'm't's' er SFX c4 er erais/n'q'j'l'm't' er SFX c4 er erait/n'q'l'm't's' er SFX c4 er erions/n'q'l't' er SFX c4 er eriez/n'q'l'm' er SFX c4 er eraient/n'q'l'm't's' er SFX c4 er asse/n'q'j'l'm't' [^cg]er SFX c4 écer éçasse/n'q'j'l'm't' écer SFX c4 éger égeasse/n'q'j'l'm't' éger SFX c4 er asses/n'q'l'm't' [^cg]er SFX c4 écer éçasses/n'q'l'm't' écer SFX c4 éger égeasses/n'q'l'm't' éger SFX c4 er ât/n'q'l'm't's' [^cg]er SFX c4 écer éçât/n'q'l'm't's' écer SFX c4 éger égeât/n'q'l'm't's' éger SFX c4 er assions/n'q'l't' [^cg]er SFX c4 écer éçassions/n'q'l't' écer SFX c4 éger égeassions/n'q'l't' éger SFX c4 er assiez/n'q'l'm' [^cg]er SFX c4 écer éçassiez/n'q'l'm' écer SFX c4 éger égeassiez/n'q'l'm' éger SFX c4 er assent/n'q'l'm't's' [^cg]er SFX c4 écer éçassent/n'q'l'm't's' écer SFX c4 éger égeassent/n'q'l'm't's' éger SFX c4 ébrer èbre/n'l'm't' ébrer SFX c4 écer èce/n'l'm't' écer SFX c4 écher èche/n'l'm't' écher SFX c4 écrer ècre/n'l'm't' écrer SFX c4 éder ède/n'l'm't' éder SFX c4 éger ège/n'l'm't' éger SFX c4 égler ègle/n'l'm't' égler SFX c4 égner ègne/n'l'm't' égner SFX c4 égrer ègre/n'l'm't' égrer SFX c4 éguer ègue/n'l'm't' éguer SFX c4 éler èle/n'l'm't' éler SFX c4 émer ème/n'l'm't' émer SFX c4 éner ène/n'l'm't' éner SFX c4 éper èpe/n'l'm't' éper SFX c4 équer èque/n'l'm't' équer SFX c4 érer ère/n'l'm't' érer SFX c4 éser èse/n'l'm't' éser SFX c4 éter ète/n'l'm't' éter SFX c4 étrer ètre/n'l'm't' étrer SFX c4 évrer èvre/n'l'm't' évrer SFX c4 éyer èye/n'l'm't' éyer SFX c4 er ons/n'l' [^cg]er SFX c4 écer éçons/n'l' écer SFX c4 éger égeons/n'l' éger SFX c4 er ez/n'l'm' er SFX c5 Y 152 SFX c5 er er/n'q'd'm't's' er SFX c5 er ant/n'q'm't's' [^cg]er SFX c5 écer éçant/m'q'm't's' écer SFX c5 éger égeant/m'q'l't's' éger SFX c5 ébrer èbre/n'q'j'm't's' ébrer SFX c5 écer èce/n'q'j'm't's' écer SFX c5 écher èche/n'q'j'm't's' écher SFX c5 écrer ècre/n'q'j'm't's' écrer SFX c5 éder ède/n'q'j'm't's' éder SFX c5 éger ège/n'q'j'm't's' éger SFX c5 égler ègle/n'q'j'm't's' égler SFX c5 égner ègne/n'q'j'm't's' égner SFX c5 égrer ègre/n'q'j'm't's' égrer SFX c5 éguer ègue/n'q'j'm't's' éguer SFX c5 éler èle/n'q'j'm't's' éler SFX c5 émer ème/n'q'j'm't's' émer SFX c5 éner ène/n'q'j'm't's' éner SFX c5 éper èpe/n'q'j'm't's' éper SFX c5 équer èque/n'q'j'm't's' équer SFX c5 érer ère/n'q'j'm't's' érer SFX c5 éser èse/n'q'j'm't's' éser SFX c5 éter ète/n'q'j'm't's' éter SFX c5 étrer ètre/n'q'j'm't's' étrer SFX c5 évrer èvre/n'q'j'm't's' évrer SFX c5 éyer èye/n'q'j'm't's' éyer SFX c5 ébrer èbres/n'm't' ébrer SFX c5 écer èces/n'm't' écer SFX c5 écher èches/n'm't' écher SFX c5 écrer ècres/n'm't' écrer SFX c5 éder èdes/n'm't' éder SFX c5 éger èges/n'm't' éger SFX c5 égler ègles/n'm't' égler SFX c5 égner ègnes/n'm't' égner SFX c5 égrer ègres/n'm't' égrer SFX c5 éguer ègues/n'm't' éguer SFX c5 éler èles/n'm't' éler SFX c5 émer èmes/n'm't' émer SFX c5 éner ènes/n'm't' éner SFX c5 éper èpes/n'm't' éper SFX c5 équer èques/n'm't' équer SFX c5 érer ères/n'm't' érer SFX c5 éser èses/n'm't' éser SFX c5 éter ètes/n'm't' éter SFX c5 étrer ètres/n'm't' étrer SFX c5 évrer èvres/n'm't' évrer SFX c5 éyer èyes/n'm't' éyer SFX c5 er ons/n't' [^cg]er SFX c5 écer éçons/n't' écer SFX c5 éger égeons/n't' éger SFX c5 er ez/n'm' er SFX c5 ébrer èbrent/n'q'm't's' ébrer SFX c5 écer ècent/n'q'm't's' écer SFX c5 écher èchent/n'q'm't's' écher SFX c5 écrer ècrent/n'q'm't's' écrer SFX c5 éder èdent/n'q'm't's' éder SFX c5 éger ègent/n'q'm't's' éger SFX c5 égler èglent/n'q'm't's' égler SFX c5 égner ègnent/n'q'm't's' égner SFX c5 égrer ègrent/n'q'm't's' égrer SFX c5 éguer èguent/n'q'm't's' éguer SFX c5 éler èlent/n'q'm't's' éler SFX c5 émer èment/n'q'm't's' émer SFX c5 éner ènent/n'q'm't's' éner SFX c5 éper èpent/n'q'm't's' éper SFX c5 équer èquent/n'q'm't's' équer SFX c5 érer èrent/n'q'm't's' érer SFX c5 éser èsent/n'q'm't's' éser SFX c5 éter ètent/n'q'm't's' éter SFX c5 étrer ètrent/n'q'm't's' étrer SFX c5 évrer èvrent/n'q'm't's' évrer SFX c5 éyer èyent/n'q'm't's' éyer SFX c5 er ais/n'j'm't' [^cg]er SFX c5 écer éçais/n'j'm't' écer SFX c5 éger égeais/n'j'm't' éger SFX c5 er ait/n'q'm't's' [^cg]er SFX c5 écer éçait/n'q'm't's' écer SFX c5 éger égeait/n'q'm't's' éger SFX c5 er ions/n't' er SFX c5 er iez/n'm' er SFX c5 er aient/n'q'm't's' [^cg]er SFX c5 écer éçaient/n'q'm't's' écer SFX c5 éger égeaient/n'q'm't's' éger SFX c5 er ai/n'j'm't' [^cg]er SFX c5 écer éçai/n'j'm't' écer SFX c5 éger égeai/n'j'm't' éger SFX c5 er as/n'm't' [^cg]er SFX c5 écer éças/n'm't' écer SFX c5 éger égeas/n'm't' éger SFX c5 er a/n'q'm't's' [^cg]er SFX c5 écer éça/n'q'm't's' écer SFX c5 éger égea/n'q'm't's' éger SFX c5 er âmes/n't' [^cg]er SFX c5 écer éçâmes/n't' écer SFX c5 éger égeâmes/n't' éger SFX c5 er âtes/n'm' [^cg]er SFX c5 écer éçâtes/n'm' écer SFX c5 éger égeâtes/n'm' éger SFX c5 er èrent/n'q'm't's' er SFX c5 er erai/n'j'm't' er SFX c5 er eras/n'm't' er SFX c5 er era/n'q'm't's' er SFX c5 er erons/n't' er SFX c5 er erez/n'm' er SFX c5 er eront/n'q'm't's' er SFX c5 er erais/n'j'm't' er SFX c5 er erait/n'q'm't's' er SFX c5 er erions/n't' er SFX c5 er eriez/n'm' er SFX c5 er eraient/n'q'm't's' er SFX c5 er asse/n'j'm't' [^cg]er SFX c5 écer éçasse/n'j'm't' écer SFX c5 éger égeasse/n'j'm't' éger SFX c5 er asses/n'm't' [^cg]er SFX c5 écer éçasses/n'm't' écer SFX c5 éger égeasses/n'm't' éger SFX c5 er ât/n'q'm't's' [^cg]er SFX c5 écer éçât/n'q'm't's' écer SFX c5 éger égeât/n'q'm't's' éger SFX c5 er assions/n't' [^cg]er SFX c5 écer éçassions/n't' écer SFX c5 éger égeassions/n't' éger SFX c5 er assiez/n'm' [^cg]er SFX c5 écer éçassiez/n'm' écer SFX c5 éger égeassiez/n'm' éger SFX c5 er assent/n'q'm't's' [^cg]er SFX c5 écer éçassent/n'q'm't's' écer SFX c5 éger égeassent/n'q'm't's' éger SFX c5 ébrer èbre/n'm' ébrer SFX c5 écer èce/n'm' écer SFX c5 écher èche/n'm' écher SFX c5 écrer ècre/n'm' écrer SFX c5 éder ède/n'm' éder SFX c5 éger ège/n'm' éger SFX c5 égler ègle/n'm' égler SFX c5 égner ègne/n'm' égner SFX c5 égrer ègre/n'm' égrer SFX c5 éguer ègue/n'm' éguer SFX c5 éler èle/n'm' éler SFX c5 émer ème/n'm' émer SFX c5 éner ène/n'm' éner SFX c5 éper èpe/n'm' éper SFX c5 équer èque/n'm' équer SFX c5 érer ère/n'm' érer SFX c5 éser èse/n'm' éser SFX c5 éter ète/n'm' éter SFX c5 étrer ètre/n'm' étrer SFX c5 évrer èvre/n'm' évrer SFX c5 éyer èye/n'm' éyer SFX c5 er ons/n' [^cg]er SFX c5 écer éçons/n' écer SFX c5 éger égeons/n' éger SFX c5 er ez/n' er SFX d0 N 82 SFX d0 er ant er SFX d0 eter ette jeter SFX d0 eter ette [^j]eter SFX d0 eler elle ppeler SFX d0 eler elle [^p].eler SFX d0 eter ettes jeter SFX d0 eter ettes [^j]eter SFX d0 eler elles ppeler SFX d0 eler elles [^p].eler SFX d0 er ons er SFX d0 er ez er SFX d0 eter ettent jeter SFX d0 eter ettent [^j]eter SFX d0 eler ellent ppeler SFX d0 eler ellent [^p].eler SFX d0 er ais er SFX d0 er ait er SFX d0 er ions er SFX d0 er iez er SFX d0 er aient er SFX d0 er ai er SFX d0 er as er SFX d0 er a er SFX d0 er âmes er SFX d0 er âtes er SFX d0 er èrent er SFX d0 eter etterai jeter SFX d0 eter etterai [^j]eter SFX d0 eler ellerai ppeler SFX d0 eler ellerai [^p].eler SFX d0 eter etteras jeter SFX d0 eter etteras [^j]eter SFX d0 eler elleras ppeler SFX d0 eler elleras [^p].eler SFX d0 eter ettera jeter SFX d0 eter ettera [^j]eter SFX d0 eler ellera ppeler SFX d0 eler ellera [^p].eler SFX d0 eter etterons jeter SFX d0 eter etterons [^j]eter SFX d0 eler ellerons ppeler SFX d0 eler ellerons [^p].eler SFX d0 eter etterez jeter SFX d0 eter etterez [^j]eter SFX d0 eler ellerez ppeler SFX d0 eler ellerez [^p].eler SFX d0 eter etteront jeter SFX d0 eter etteront [^j]eter SFX d0 eler elleront ppeler SFX d0 eler elleront [^p].eler SFX d0 eter etterais jeter SFX d0 eter etterais [^j]eter SFX d0 eler ellerais ppeler SFX d0 eler ellerais [^p].eler SFX d0 eter etterait jeter SFX d0 eter etterait [^j]eter SFX d0 eler ellerait ppeler SFX d0 eler ellerait [^p].eler SFX d0 eter etterions jeter SFX d0 eter etterions [^j]eter SFX d0 eler ellerions ppeler SFX d0 eler ellerions [^p].eler SFX d0 eter etteriez jeter SFX d0 eter etteriez [^j]eter SFX d0 eler elleriez ppeler SFX d0 eler elleriez [^p].eler SFX d0 eter etteraient jeter SFX d0 eter etteraient [^j]eter SFX d0 eler elleraient ppeler SFX d0 eler elleraient [^p].eler SFX d0 er asse er SFX d0 er asses er SFX d0 er ât er SFX d0 er assions er SFX d0 er assiez er SFX d0 er assent er SFX d0 eter ette jeter SFX d0 eter ette [^j]eter SFX d0 eler elle ppeler SFX d0 eler elle [^p].eler SFX d0 er ons er SFX d0 er ez er SFX d1 Y 83 SFX d1 er er/n'q'd' er SFX d1 er ant/n'q' er SFX d1 eter ette/n'q'j' jeter SFX d1 eter ette/n'q'j' [^j]eter SFX d1 eler elle/n'q'j' ppeler SFX d1 eler elle/n'q'j' [^p].eler SFX d1 eter ettes/n' jeter SFX d1 eter ettes/n' [^j]eter SFX d1 eler elles/n' ppeler SFX d1 eler elles/n' [^p].eler SFX d1 er ons/n' er SFX d1 er ez/n' er SFX d1 eter ettent/n'q' jeter SFX d1 eter ettent/n'q' [^j]eter SFX d1 eler ellent/n'q' ppeler SFX d1 eler ellent/n'q' [^p].eler SFX d1 er ais/n'j' er SFX d1 er ait/n'q' er SFX d1 er ions/n' er SFX d1 er iez/n' er SFX d1 er aient/n'q' er SFX d1 er ai/n'j' er SFX d1 er as/n' er SFX d1 er a/n'q' er SFX d1 er âmes/n' er SFX d1 er âtes/n' er SFX d1 er èrent/n'q' er SFX d1 eter etterai/n'j' jeter SFX d1 eter etterai/n'j' [^j]eter SFX d1 eler ellerai/n'j' ppeler SFX d1 eler ellerai/n'j' [^p].eler SFX d1 eter etteras/n' jeter SFX d1 eter etteras/n' [^j]eter SFX d1 eler elleras/n' ppeler SFX d1 eler elleras/n' [^p].eler SFX d1 eter ettera/n'q' jeter SFX d1 eter ettera/n'q' [^j]eter SFX d1 eler ellera/n'q' ppeler SFX d1 eler ellera/n'q' [^p].eler SFX d1 eter etterons/n' jeter SFX d1 eter etterons/n' [^j]eter SFX d1 eler ellerons/n' ppeler SFX d1 eler ellerons/n' [^p].eler SFX d1 eter etterez/n' jeter SFX d1 eter etterez/n' [^j]eter SFX d1 eler ellerez/n' ppeler SFX d1 eler ellerez/n' [^p].eler SFX d1 eter etteront/n'q' jeter SFX d1 eter etteront/n'q' [^j]eter SFX d1 eler elleront/n'q' ppeler SFX d1 eler elleront/n'q' [^p].eler SFX d1 eter etterais/n'j' jeter SFX d1 eter etterais/n'j' [^j]eter SFX d1 eler ellerais/n'j' ppeler SFX d1 eler ellerais/n'j' [^p].eler SFX d1 eter etterait/n'q' jeter SFX d1 eter etterait/n'q' [^j]eter SFX d1 eler ellerait/n'q' ppeler SFX d1 eler ellerait/n'q' [^p].eler SFX d1 eter etterions/n' jeter SFX d1 eter etterions/n' [^j]eter SFX d1 eler ellerions/n' ppeler SFX d1 eler ellerions/n' [^p].eler SFX d1 eter etteriez/n' jeter SFX d1 eter etteriez/n' [^j]eter SFX d1 eler elleriez/n' ppeler SFX d1 eler elleriez/n' [^p].eler SFX d1 eter etteraient/n'q' jeter SFX d1 eter etteraient/n'q' [^j]eter SFX d1 eler elleraient/n'q' ppeler SFX d1 eler elleraient/n'q' [^p].eler SFX d1 er asse/n'j' er SFX d1 er asses/n' er SFX d1 er ât/n'q' er SFX d1 er assions/n' er SFX d1 er assiez/n' er SFX d1 er assent/n'q' er SFX d1 eter ette/n' jeter SFX d1 eter ette/n' [^j]eter SFX d1 eler elle/n' ppeler SFX d1 eler elle/n' [^p].eler SFX d1 er ons/n' er SFX d1 er ez/n' er SFX d2 Y 83 SFX d2 er er/n'q'd'l'm't's' er SFX d2 er ant/n'q'l'm't's' er SFX d2 eter ette/n'q'j'l'm't's' jeter SFX d2 eter ette/n'q'j'l'm't's' [^j]eter SFX d2 eler elle/n'q'j'l'm't's' ppeler SFX d2 eler elle/n'q'j'l'm't's' [^p].eler SFX d2 eter ettes/n'q'l'm' jeter SFX d2 eter ettes/n'q'l'm' [^j]eter SFX d2 eler elles/n'q'l'm' ppeler SFX d2 eler elles/n'q'l'm' [^p].eler SFX d2 er ons/n'q'l't' er SFX d2 er ez/n'q'l'm' er SFX d2 eter ettent/n'q'l'm't's' jeter SFX d2 eter ettent/n'q'l'm't's' [^j]eter SFX d2 eler ellent/n'q'l'm't's' ppeler SFX d2 eler ellent/n'q'l'm't's' [^p].eler SFX d2 er ais/n'q'j'l'm't' er SFX d2 er ait/n'q'l'm't's' er SFX d2 er ions/n'q'l't' er SFX d2 er iez/n'q'l'm' er SFX d2 er aient/n'q'l'm't's' er SFX d2 er ai/n'q'j'l't' er SFX d2 er as/n'q'l'm' er SFX d2 er a/n'q'l'm't's' er SFX d2 er âmes/n'q'l't' er SFX d2 er âtes/n'q'l'm' er SFX d2 er èrent/n'q'l'm't's' er SFX d2 eter etterai/n'q'j'l't' jeter SFX d2 eter etterai/n'q'j'l't' [^j]eter SFX d2 eler ellerai/n'q'j'l't' ppeler SFX d2 eler ellerai/n'q'j'l't' [^p].eler SFX d2 eter etteras/n'q'l'm' jeter SFX d2 eter etteras/n'q'l'm' [^j]eter SFX d2 eler elleras/n'q'l'm' ppeler SFX d2 eler elleras/n'q'l'm' [^p].eler SFX d2 eter ettera/n'q'l'm't's' jeter SFX d2 eter ettera/n'q'l'm't's' [^j]eter SFX d2 eler ellera/n'q'l'm't's' ppeler SFX d2 eler ellera/n'q'l'm't's' [^p].eler SFX d2 eter etterons/n'q'l't' jeter SFX d2 eter etterons/n'q'l't' [^j]eter SFX d2 eler ellerons/n'q'l't' ppeler SFX d2 eler ellerons/n'q'l't' [^p].eler SFX d2 eter etterez/n'q'l'm' jeter SFX d2 eter etterez/n'q'l'm' [^j]eter SFX d2 eler ellerez/n'q'l'm' ppeler SFX d2 eler ellerez/n'q'l'm' [^p].eler SFX d2 eter etteront/n'q'l'm't's' jeter SFX d2 eter etteront/n'q'l'm't's' [^j]eter SFX d2 eler elleront/n'q'l'm't's' ppeler SFX d2 eler elleront/n'q'l'm't's' [^p].eler SFX d2 eter etterais/n'q'j'l'm't' jeter SFX d2 eter etterais/n'q'j'l'm't' [^j]eter SFX d2 eler ellerais/n'q'j'l'm't' ppeler SFX d2 eler ellerais/n'q'j'l'm't' [^p].eler SFX d2 eter etterait/n'q'l'm't's' jeter SFX d2 eter etterait/n'q'l'm't's' [^j]eter SFX d2 eler ellerait/n'q'l'm't's' ppeler SFX d2 eler ellerait/n'q'l'm't's' [^p].eler SFX d2 eter etterions/n'q'l't' jeter SFX d2 eter etterions/n'q'l't' [^j]eter SFX d2 eler ellerions/n'q'l't' ppeler SFX d2 eler ellerions/n'q'l't' [^p].eler SFX d2 eter etteriez/n'q'l'm' jeter SFX d2 eter etteriez/n'q'l'm' [^j]eter SFX d2 eler elleriez/n'q'l'm' ppeler SFX d2 eler elleriez/n'q'l'm' [^p].eler SFX d2 eter etteraient/n'q'l'm't's' jeter SFX d2 eter etteraient/n'q'l'm't's' [^j]eter SFX d2 eler elleraient/n'q'l'm't's' ppeler SFX d2 eler elleraient/n'q'l'm't's' [^p].eler SFX d2 er asse/n'q'j'l't' er SFX d2 er asses/n'q'l'm' er SFX d2 er ât/n'q'l'm't's' er SFX d2 er assions/n'q'l't' er SFX d2 er assiez/n'q'l'm' er SFX d2 er assent/n'q'l'm't's' er SFX d2 eter ette/n'l'm' jeter SFX d2 eter ette/n'l'm' [^j]eter SFX d2 eler elle/n'l'm' ppeler SFX d2 eler elle/n'l'm' [^p].eler SFX d2 er ons/n'l' er SFX d2 er ez/n'l'm' er SFX d3 Y 83 SFX d3 er er/m't's' er SFX d3 er ant/m't's' er SFX d3 eter ette/m's' jeter SFX d3 eter ette/m's' [^j]eter SFX d3 eler elle/m's' ppeler SFX d3 eler elle/m's' [^p].eler SFX d3 eter ettes/t' jeter SFX d3 eter ettes/t' [^j]eter SFX d3 eler elles/t' ppeler SFX d3 eler elles/t' [^p].eler SFX d3 er ons er SFX d3 er ez er SFX d3 eter ettent/s' jeter SFX d3 eter ettent/s' [^j]eter SFX d3 eler ellent/s' ppeler SFX d3 eler ellent/s' [^p].eler SFX d3 er ais/m't' er SFX d3 er ait/s' er SFX d3 er ions er SFX d3 er iez er SFX d3 er aient/s' er SFX d3 er ai/m' er SFX d3 er as/t' er SFX d3 er a/s' er SFX d3 er âmes er SFX d3 er âtes er SFX d3 er èrent/s' er SFX d3 eter etterai/m' jeter SFX d3 eter etterai/m' [^j]eter SFX d3 eler ellerai/m' ppeler SFX d3 eler ellerai/m' [^p].eler SFX d3 eter etteras/t' jeter SFX d3 eter etteras/t' [^j]eter SFX d3 eler elleras/t' ppeler SFX d3 eler elleras/t' [^p].eler SFX d3 eter ettera/s' jeter SFX d3 eter ettera/s' [^j]eter SFX d3 eler ellera/s' ppeler SFX d3 eler ellera/s' [^p].eler SFX d3 eter etterons jeter SFX d3 eter etterons [^j]eter SFX d3 eler ellerons ppeler SFX d3 eler ellerons [^p].eler SFX d3 eter etterez jeter SFX d3 eter etterez [^j]eter SFX d3 eler ellerez ppeler SFX d3 eler ellerez [^p].eler SFX d3 eter etteront/s' jeter SFX d3 eter etteront/s' [^j]eter SFX d3 eler elleront/s' ppeler SFX d3 eler elleront/s' [^p].eler SFX d3 eter etterais/m't' jeter SFX d3 eter etterais/m't' [^j]eter SFX d3 eler ellerais/m't' ppeler SFX d3 eler ellerais/m't' [^p].eler SFX d3 eter etterait/s' jeter SFX d3 eter etterait/s' [^j]eter SFX d3 eler ellerait/s' ppeler SFX d3 eler ellerait/s' [^p].eler SFX d3 eter etterions jeter SFX d3 eter etterions [^j]eter SFX d3 eler ellerions ppeler SFX d3 eler ellerions [^p].eler SFX d3 eter etteriez jeter SFX d3 eter etteriez [^j]eter SFX d3 eler elleriez ppeler SFX d3 eler elleriez [^p].eler SFX d3 eter etteraient/s' jeter SFX d3 eter etteraient/s' [^j]eter SFX d3 eler elleraient/s' ppeler SFX d3 eler elleraient/s' [^p].eler SFX d3 er asse/m' er SFX d3 er asses/t' er SFX d3 er ât/s' er SFX d3 er assions er SFX d3 er assiez er SFX d3 er assent/s' er SFX d3 eter ette/t' jeter SFX d3 eter ette/t' [^j]eter SFX d3 eler elle/t' ppeler SFX d3 eler elle/t' [^p].eler SFX d3 er ons er SFX d3 er ez er SFX d4 Y 98 SFX d4 er er/n'q'd'l'm't's' er SFX d4 er ant/n'q'l'm't's' er SFX d4 eter ette/n'q'j'l'm't's' jeter SFX d4 eter ette/n'q'j'l'm't's' [^j]eter SFX d4 eler elle/n'q'j'l'm't's' ppeler SFX d4 eler elle/n'q'j'l'm't's' [^p].eler SFX d4 eler elle/n'q'j'l'm't's' épeler SFX d4 eter ettes/n'q'l'm't' jeter SFX d4 eter ettes/n'q'l'm't' [^j]eter SFX d4 eler elles/n'q'l'm't' ppeler SFX d4 eler elles/n'q'l'm't' [^p].eler SFX d4 eler elles/n'q'l'm't' épeler SFX d4 er ons/n'q'l't' er SFX d4 er ez/n'q'l'm' er SFX d4 eter ettent/n'q'l'm't's' jeter SFX d4 eter ettent/n'q'l'm't's' [^j]eter SFX d4 eler ellent/n'q'l'm't's' ppeler SFX d4 eler ellent/n'q'l'm't's' [^p].eler SFX d4 eler ellent/n'q'l'm't's' épeler SFX d4 er ais/n'q'j'l'm't' er SFX d4 er ait/n'q'l'm't's' er SFX d4 er ions/n'q'l't' er SFX d4 er iez/n'q'l'm' er SFX d4 er aient/n'q'l'm't's' er SFX d4 er ai/n'q'j'l'm't' er SFX d4 er as/n'q'l'm't' er SFX d4 er a/n'q'l'm't's' er SFX d4 er âmes/n'q'l't' er SFX d4 er âtes/n'q'l'm' er SFX d4 er èrent/n'q'l'm't's' er SFX d4 eter etterai/n'q'j'l'm't' jeter SFX d4 eter etterai/n'q'j'l'm't' [^j]eter SFX d4 eler ellerai/n'q'j'l'm't' ppeler SFX d4 eler ellerai/n'q'j'l'm't' [^p].eler SFX d4 eler ellerai/n'q'j'l'm't' épeler SFX d4 eter etteras/n'q'l'm't' jeter SFX d4 eter etteras/n'q'l'm't' [^j]eter SFX d4 eler elleras/n'q'l'm't' ppeler SFX d4 eler elleras/n'q'l'm't' [^p].eler SFX d4 eler elleras/n'q'l'm't' épeler SFX d4 eter ettera/n'q'l'm't's' jeter SFX d4 eter ettera/n'q'l'm't's' [^j]eter SFX d4 eler ellera/n'q'l'm't's' ppeler SFX d4 eler ellera/n'q'l'm't's' [^p].eler SFX d4 eler ellera/n'q'l'm't's' épeler SFX d4 eter etterons/n'q'l't' jeter SFX d4 eter etterons/n'q'l't' [^j]eter SFX d4 eler ellerons/n'q'l't' ppeler SFX d4 eler ellerons/n'q'l't' [^p].eler SFX d4 eler ellerons/n'q'l't' épeler SFX d4 eter etterez/n'q'l'm' jeter SFX d4 eter etterez/n'q'l'm' [^j]eter SFX d4 eler ellerez/n'q'l'm' ppeler SFX d4 eler ellerez/n'q'l'm' [^p].eler SFX d4 eler ellerez/n'q'l'm' épeler SFX d4 eter etteront/n'q'l'm't's' jeter SFX d4 eter etteront/n'q'l'm't's' [^j]eter SFX d4 eler elleront/n'q'l'm't's' ppeler SFX d4 eler elleront/n'q'l'm't's' [^p].eler SFX d4 eler elleront/n'q'l'm't's' épeler SFX d4 eter etterais/n'q'j'l'm't' jeter SFX d4 eter etterais/n'q'j'l'm't' [^j]eter SFX d4 eler ellerais/n'q'j'l'm't' ppeler SFX d4 eler ellerais/n'q'j'l'm't' [^p].eler SFX d4 eler ellerais/n'q'j'l'm't' épeler SFX d4 eter etterait/n'q'l'm't's' jeter SFX d4 eter etterait/n'q'l'm't's' [^j]eter SFX d4 eler ellerait/n'q'l'm't's' ppeler SFX d4 eler ellerait/n'q'l'm't's' [^p].eler SFX d4 eler ellerait/n'q'l'm't's' épeler SFX d4 eter etterions/n'q'l't' jeter SFX d4 eter etterions/n'q'l't' [^j]eter SFX d4 eler ellerions/n'q'l't' ppeler SFX d4 eler ellerions/n'q'l't' [^p].eler SFX d4 eler ellerions/n'q'l't' épeler SFX d4 eter etteriez/n'q'l'm' jeter SFX d4 eter etteriez/n'q'l'm' [^j]eter SFX d4 eler elleriez/n'q'l'm' ppeler SFX d4 eler elleriez/n'q'l'm' [^p].eler SFX d4 eler elleriez/n'q'l'm' épeler SFX d4 eter etteraient/n'q'l'm't's' jeter SFX d4 eter etteraient/n'q'l'm't's' [^j]eter SFX d4 eler elleraient/n'q'l'm't's' ppeler SFX d4 eler elleraient/n'q'l'm't's' [^p].eler SFX d4 eler elleraient/n'q'l'm't's' épeler SFX d4 er asse/n'q'j'l'm't' er SFX d4 er asses/n'q'l'm't' er SFX d4 er ât/n'q'l'm't's' er SFX d4 er assions/n'q'l't' er SFX d4 er assiez/n'q'l'm' er SFX d4 er assent/n'q'l'm't's' er SFX d4 eter ette/n'l'm't' jeter SFX d4 eter ette/n'l'm't' [^j]eter SFX d4 eler elle/n'l'm't' ppeler SFX d4 eler elle/n'l'm't' [^p].eler SFX d4 eler elle/n'l'm't' épeler SFX d4 er ons/n'l' er SFX d4 er ez/n'l'm' er SFX d5 Y 83 SFX d5 er er/m'q'd'm't's' er SFX d5 er ant/m'q'd'm't's' er SFX d5 eter ette/n'q'j'm't's' jeter SFX d5 eter ette/n'q'j'm't's' [^j]eter SFX d5 eler elle/n'q'j'm't's' ppeler SFX d5 eler elle/n'q'j'm't's' [^p].eler SFX d5 eter ettes/n'm't' jeter SFX d5 eter ettes/n'm't' [^j]eter SFX d5 eler elles/n'm't' ppeler SFX d5 eler elles/n'm't' [^p].eler SFX d5 er ons/n't' er SFX d5 er ez/n'm' er SFX d5 eter ettent/n'q'm't's' jeter SFX d5 eter ettent/n'q'm't's' [^j]eter SFX d5 eler ellent/n'q'm't's' ppeler SFX d5 eler ellent/n'q'm't's' [^p].eler SFX d5 er ais/n'j'm't' er SFX d5 er ait/n'q'm't's' er SFX d5 er ions/n't' er SFX d5 er iez/n'm' er SFX d5 er aient/n'q'm't's' er SFX d5 er ai/n'j'm't' er SFX d5 er as/n'm't' er SFX d5 er a/n'q'm't's' er SFX d5 er âmes/n't' er SFX d5 er âtes/n'm' er SFX d5 er èrent/n'q'm't's' er SFX d5 eter etterai/n'j'm't' jeter SFX d5 eter etterai/n'j'm't' [^j]eter SFX d5 eler ellerai/n'j'm't' ppeler SFX d5 eler ellerai/n'j'm't' [^p].eler SFX d5 eter etteras/n'm't' jeter SFX d5 eter etteras/n'm't' [^j]eter SFX d5 eler elleras/n'm't' ppeler SFX d5 eler elleras/n'm't' [^p].eler SFX d5 eter ettera/n'q'm't's' jeter SFX d5 eter ettera/n'q'm't's' [^j]eter SFX d5 eler ellera/n'q'm't's' ppeler SFX d5 eler ellera/n'q'm't's' [^p].eler SFX d5 eter etterons/n't' jeter SFX d5 eter etterons/n't' [^j]eter SFX d5 eler ellerons/n't' ppeler SFX d5 eler ellerons/n't' [^p].eler SFX d5 eter etterez/n'm' jeter SFX d5 eter etterez/n'm' [^j]eter SFX d5 eler ellerez/n'm' ppeler SFX d5 eler ellerez/n'm' [^p].eler SFX d5 eter etteront/n'q'm't's' jeter SFX d5 eter etteront/n'q'm't's' [^j]eter SFX d5 eler elleront/n'q'm't's' ppeler SFX d5 eler elleront/n'q'm't's' [^p].eler SFX d5 eter etterais/n'j'm't' jeter SFX d5 eter etterais/n'j'm't' [^j]eter SFX d5 eler ellerais/n'j'm't' ppeler SFX d5 eler ellerais/n'j'm't' [^p].eler SFX d5 eter etterait/n'q'm't's' jeter SFX d5 eter etterait/n'q'm't's' [^j]eter SFX d5 eler ellerait/n'q'm't's' ppeler SFX d5 eler ellerait/n'q'm't's' [^p].eler SFX d5 eter etterions/n't' jeter SFX d5 eter etterions/n't' [^j]eter SFX d5 eler ellerions/n't' ppeler SFX d5 eler ellerions/n't' [^p].eler SFX d5 eter etteriez/n'm' jeter SFX d5 eter etteriez/n'm' [^j]eter SFX d5 eler elleriez/n'm' ppeler SFX d5 eler elleriez/n'm' [^p].eler SFX d5 eter etteraient/n'q'm't's' jeter SFX d5 eter etteraient/n'q'm't's' [^j]eter SFX d5 eler elleraient/n'q'm't's' ppeler SFX d5 eler elleraient/n'q'm't's' [^p].eler SFX d5 er asse/n'j'm't' er SFX d5 er asses/n'm't' er SFX d5 er ât/n'q'm't's' er SFX d5 er assions/n't' er SFX d5 er assiez/n'm' er SFX d5 er assent/n'q'm't's' er SFX d5 eter ette/m' jeter SFX d5 eter ette/m' [^j]eter SFX d5 eler elle/m' ppeler SFX d5 eler elle/m' [^p].eler SFX d5 er ons er SFX d5 er ez er SFX aA Y 54 SFX aA ller ller/n'q'd'm't' aller SFX aA ller llant/n'q'm't' aller SFX aA ller llé/q' aller SFX aA ller llés/q' aller SFX aA ller llée/q' aller SFX aA ller llées/q' aller SFX aA aller vais aller SFX aA aller vas aller SFX aA aller va aller SFX aA ller llons/n'q' aller SFX aA ller llez/n'q' aller SFX aA aller vont aller SFX aA ller llais/n'q'j' aller SFX aA ller llait/n'q'm't' aller SFX aA ller llions/n'q' aller SFX aA ller lliez/n'q' aller SFX aA ller llaient/n'q'm't' aller SFX aA ller llai/n'q'j' aller SFX aA ller llas/n'q' aller SFX aA ller lla/n'q'm't' aller SFX aA ller llâmes/n'q' aller SFX aA ller llâtes/n'q' aller SFX aA ller llèrent/n'q'm't' aller SFX aA aller irai/n'q'j' aller SFX aA aller iras/n'q' aller SFX aA aller ira/n'q'm't' aller SFX aA aller irons/n'q' aller SFX aA aller irez/n'q'm't' aller SFX aA aller iront/n'q' aller SFX aA aller irais/n'q'j' aller SFX aA aller irait/n'q'm't' aller SFX aA aller irions/n'q' aller SFX aA aller iriez/n'q' aller SFX aA aller iraient/n'q'm't' aller SFX aA ller ille/n'q'j'm't' aller SFX aA ller illes/n' aller SFX aA ller llions/n' aller SFX aA ller lliez/n' aller SFX aA ller illent/n'q'm't' aller SFX aA ller llasse/n'q'j' aller SFX aA ller llasses/n'q' aller SFX aA ller llât/n'q'm't' aller SFX aA ller llassions/n'q' aller SFX aA ller llassiez/n'q' aller SFX aA ller llassent/n'q'm't' aller SFX aA ller llons/n' aller SFX aA aller va aller SFX aA aller vas-y aller SFX aA aller va-t'en aller SFX aA ller llons-y aller SFX aA ller llons-nous-en aller SFX aA ller llez/n' aller SFX aA ller llez-y aller SFX aA ller llez-vous-en aller SFX aD Y 44 SFX aD voyer voyer/n'q'd'l'm't's' envoyer SFX aD voyer voyant/n'q'l'm't's' envoyer SFX aD voyer voyé/q' envoyer SFX aD voyer voyés/q' envoyer SFX aD voyer voyée/q' envoyer SFX aD voyer voyées/q' envoyer SFX aD voyer voie/n'q'j'l'm't's' envoyer SFX aD voyer voies/n'q'l'm't' envoyer SFX aD voyer voyons/n'q'l't' envoyer SFX aD voyer voyez/n'q'l'm' envoyer SFX aD voyer voient/n'q'l'm't's' envoyer SFX aD voyer voyais/n'q'j'l'm't' envoyer SFX aD voyer voyait/n'q'l'm't's' envoyer SFX aD voyer voyions/n'q'l't' envoyer SFX aD voyer voyiez/n'q'l'm' envoyer SFX aD voyer voyaient/n'q'l'm't's' envoyer SFX aD voyer voyai/n'q'j'l'm't' envoyer SFX aD voyer voyas/n'q'l'm't' envoyer SFX aD voyer voya/n'q'l'm't's' envoyer SFX aD voyer voyâmes/n'q'l't' envoyer SFX aD voyer voyâtes/n'q'l'm' envoyer SFX aD voyer voyèrent/n'q'l'm't's' envoyer SFX aD voyer verrai/n'q'j'l'm't' envoyer SFX aD voyer verras/n'q'l'm't' envoyer SFX aD voyer verra/n'q'l'm't's' envoyer SFX aD voyer verrons/n'q'l't' envoyer SFX aD voyer verrez/n'q'l'm' envoyer SFX aD voyer verront/n'q'l'm't's' envoyer SFX aD voyer verrais/n'q'j'l'm't' envoyer SFX aD voyer verrait/n'q'l'm't's' envoyer SFX aD voyer verrions/n'q'l't' envoyer SFX aD voyer verriez/n'q'l'm' envoyer SFX aD voyer verraient/n'q'l'm't's' envoyer SFX aD voyer voie/n'q'j'l'm't's' envoyer SFX aD voyer voies/n'l'm't' envoyer SFX aD voyer voyasse/n'q'j'l'm't' envoyer SFX aD voyer voyasses/n'q'l'm't' envoyer SFX aD voyer voyât/n'q'l'm't's' envoyer SFX aD voyer voyassions/n'q'l't' envoyer SFX aD voyer voyassiez/n'q'l'm' envoyer SFX aD voyer voyassent/n'q'l'm't's' envoyer SFX aD voyer voie/n'l'm't' envoyer SFX aD voyer voyons/n'l' envoyer SFX aD voyer voyez/n'l'm' envoyer SFX aE Y 6 SFX aE direr direr/n'q'd'l'm't's' direr SFX aE direr dirant/n'q'l'm't's' direr SFX aE direr diré/q' direr SFX aE direr dirés/q' direr SFX aE direr dirée/q' direr SFX aE direr dirées/q' direr SFX aF N 17 SFX aF cerner cernant er SFX aF cerner cerné er SFX aF cerner cernés er SFX aF cerner cernée er SFX aF cerner cernées er SFX aF cerner cerne er SFX aF cerner cernent er SFX aF cerner cernait er SFX aF cerner cernaient er SFX aF cerner cerna er SFX aF cerner cernèrent er SFX aF cerner cernera er SFX aF cerner cerneront er SFX aF cerner cernerait er SFX aF cerner cerneraient er SFX aF cerner cernât er SFX aF cerner cernassent er SFX aG Y 19 SFX aG er er/n'q'd'm't' er SFX aG er ant/n'q'm't' er SFX aG mber mbé mber SFX aG lter lté lter SFX aG lter ltés lter SFX aG lter ltée lter SFX aG lter ltées lter SFX aG er e/n'q'm't' er SFX aG er ent/n'q'm't' er SFX aG er ait/n'q'm't' er SFX aG er aient/n'q'm't' er SFX aG er a/n'q'm't' er SFX aG er èrent/n'q'm't' er SFX aG er era/n'q'm't' er SFX aG er eront/n'q'm't' er SFX aG er erait/n'q'm't' er SFX aG er eraient/n'q'm't' er SFX aG er ât/n'q'm't' er SFX aG er assent/n'q'm't' er SFX aH N 38 SFX aH er ant gger SFX aH er é gger SFX aH er e gger SFX aH er es gger SFX aH er ons gger SFX aH er ez gger SFX aH er ent gger SFX aH er ais gger SFX aH er ait gger SFX aH er ions gger SFX aH er iez gger SFX aH er aient gger SFX aH er ai gger SFX aH er as gger SFX aH er a gger SFX aH er âmes gger SFX aH er âtes gger SFX aH er èrent gger SFX aH er erai gger SFX aH er eras gger SFX aH er era gger SFX aH er erons gger SFX aH er erez gger SFX aH er eront gger SFX aH er erais gger SFX aH er erait gger SFX aH er erions gger SFX aH er eriez gger SFX aH er eraient gger SFX aH er asse gger SFX aH er asses gger SFX aH er ât gger SFX aH er assions gger SFX aH er assiez gger SFX aH er assent gger SFX aH er e gger SFX aH er ons gger SFX aH er ez gger SFX aY N 41 SFX aY neler nelant neler SFX aY neler nelé neler SFX aY neler nelés neler SFX aY neler nelée neler SFX aY neler nelées neler SFX aY éneler énelle éneler SFX aY éneler énelles éneler SFX aY neler nelons neler SFX aY neler nelez neler SFX aY éneler énellent éneler SFX aY neler nelais neler SFX aY neler nelait neler SFX aY neler nelions neler SFX aY neler neliez neler SFX aY neler nelaient neler SFX aY neler nelai neler SFX aY neler nelas neler SFX aY neler nela neler SFX aY neler nelâmes neler SFX aY neler nelâtes neler SFX aY neler nelèrent neler SFX aY éneler énellerai éneler SFX aY éneler énelleras éneler SFX aY éneler énellera éneler SFX aY éneler énellerons éneler SFX aY éneler énellerez éneler SFX aY éneler énelleront éneler SFX aY éneler énellerais éneler SFX aY éneler énellerait éneler SFX aY éneler énellerions éneler SFX aY éneler énelleriez éneler SFX aY éneler énelleraient éneler SFX aY neler nelasse neler SFX aY neler nelasses neler SFX aY neler nelât neler SFX aY neler nelassions neler SFX aY neler nelassiez neler SFX aY neler nelassent neler SFX aY éneler énelle éneler SFX aY neler nelons neler SFX aY neler nelez neler SFX aZ N 41 SFX aZ teler telant teler SFX aZ teler telé teler SFX aZ teler telés teler SFX aZ teler telée teler SFX aZ teler telées teler SFX aZ ételer ételle ételer SFX aZ ételer ételles ételer SFX aZ teler telons teler SFX aZ teler telez teler SFX aZ ételer étellent ételer SFX aZ teler telais teler SFX aZ teler telait teler SFX aZ teler telions teler SFX aZ teler teliez teler SFX aZ teler telaient teler SFX aZ teler telai teler SFX aZ teler telas teler SFX aZ teler tela teler SFX aZ teler telâmes teler SFX aZ teler telâtes teler SFX aZ teler telèrent teler SFX aZ ételer étellerai ételer SFX aZ ételer ételleras ételer SFX aZ ételer étellera ételer SFX aZ ételer étellerons ételer SFX aZ ételer étellerez ételer SFX aZ ételer ételleront ételer SFX aZ ételer étellerais ételer SFX aZ ételer étellerait ételer SFX aZ ételer étellerions ételer SFX aZ ételer ételleriez ételer SFX aZ ételer ételleraient ételer SFX aZ teler telasse teler SFX aZ teler telasses teler SFX aZ teler telât teler SFX aZ teler telassions teler SFX aZ teler telassiez teler SFX aZ teler telassent teler SFX aZ ételer ételle ételer SFX aZ teler telons teler SFX aZ teler telez teler SFX dA Y 42 SFX dA peler peler/n'q'd'l'm't's' peler SFX dA peler pelant/n'q'l'm't's' peler SFX dA peler pelé/q' peler SFX dA peler pelés/q' peler SFX dA peler pelée/q' peler SFX dA peler pelées/q' peler SFX dA peler pelle/n'q'j'l'm't's' peler SFX dA peler pelles/n'q'l'm' peler SFX dA peler pelons/n'q'l't' peler SFX dA peler pelez/n'q'l'm' peler SFX dA peler pellent/n'q'l'm't's' peler SFX dA peler pelais/n'q'j'l't' peler SFX dA peler pelait/n'q'l'm't's' peler SFX dA peler pelions/n'q'l't' peler SFX dA peler peliez/n'q'l'm' peler SFX dA peler pelaient/n'q'l'm't's' peler SFX dA peler pelai/n'q'j'l't' peler SFX dA peler pelas/n'q'l'm' peler SFX dA peler pela/n'q'l'm't's' peler SFX dA peler pelâmes/n'q'l't' peler SFX dA peler pelâtes/n'q'l'm' peler SFX dA peler pelèrent/n'q'l'm't's' peler SFX dA peler pellerai/n'q'j'l't' peler SFX dA peler pelleras/n'q'l'm' peler SFX dA peler pellera/n'q'l'm't's' peler SFX dA peler pellerons/n'q'l't' peler SFX dA peler pellerez/n'q'l'm' peler SFX dA peler pelleront/n'q'l'm't's' peler SFX dA peler pellerais/n'q'j'l't' peler SFX dA peler pellerait/n'q'l'm't's' peler SFX dA peler pellerions/n'q'l't' peler SFX dA peler pelleriez/n'q'l'm' peler SFX dA peler pelleraient/n'q'l'm't's' peler SFX dA peler pelasse/n'q'j'l't' peler SFX dA peler pelasses/n'q'l'm' peler SFX dA peler pelât/n'q'l'm't's' peler SFX dA peler pelassions/n'q'l't' peler SFX dA peler pelassiez/n'q'l'm' peler SFX dA peler pelassent/n'q'l'm't's' peler SFX dA peler pelle/n'l'm' peler SFX dA peler pelons/n'l' peler SFX dA peler pelez/n'l'm' peler SFX f0 Y 32 SFX f0 ir issant ir SFX f0 ir is ir SFX f0 ir it ir SFX f0 ir issons ir SFX f0 ir issez ir SFX f0 ir issent ir SFX f0 ir issais ir SFX f0 ir issait ir SFX f0 ir issions ir SFX f0 ir issiez ir SFX f0 ir issaient ir SFX f0 ir îmes ir SFX f0 ir îtes ir SFX f0 ir irent ir SFX f0 ir irai ir SFX f0 ir iras ir SFX f0 ir ira ir SFX f0 ir irons ir SFX f0 ir irez ir SFX f0 ir iront ir SFX f0 ir irais ir SFX f0 ir irait ir SFX f0 ir irions ir SFX f0 ir iriez ir SFX f0 ir iraient ir SFX f0 ir isse ir SFX f0 ir isses ir SFX f0 ir isse ir SFX f0 ir ît ir SFX f0 ir is ir SFX f0 ir issons ir SFX f0 ir issez ir SFX f1 Y 33 SFX f1 ir ir/n'q'd' ir SFX f1 ir issant/n'q' ir SFX f1 ir is/n'j' ir SFX f1 ir it/n'q' ir SFX f1 ir issons/n' ir SFX f1 ir issez/n' ir SFX f1 ir issent/n'q' ir SFX f1 ir issais/n'j' ir SFX f1 ir issait/n'q' ir SFX f1 ir issions/n' ir SFX f1 ir issiez/n' ir SFX f1 ir issaient/n'q' ir SFX f1 ir îmes/n' ir SFX f1 ir îtes/n' ir SFX f1 ir irent/n'q' ir SFX f1 ir irai/n'j' ir SFX f1 ir iras/n' ir SFX f1 ir ira/n'q' ir SFX f1 ir irons/n' ir SFX f1 ir irez/n' ir SFX f1 ir iront/n'q' ir SFX f1 ir irais/n'j' ir SFX f1 ir irait/n'q' ir SFX f1 ir irions/n' ir SFX f1 ir iriez/n' ir SFX f1 ir iraient/n'q' ir SFX f1 ir isse/n'j' ir SFX f1 ir isses/n' ir SFX f1 ir isse/n'q' ir SFX f1 ir ît/n'q' ir SFX f1 ir is/n' ir SFX f1 ir issons/n' ir SFX f1 ir issez/n' ir SFX f2 Y 33 SFX f2 ir ir/n'q'd'l'm't's' ir SFX f2 ir issant/n'q'l'm't's' ir SFX f2 ir is/n'q'j'l't' ir SFX f2 ir it/n'q'l'm't's' ir SFX f2 ir issons/n'q'l't' ir SFX f2 ir issez/n'q'l'm' ir SFX f2 ir issent/n'q'l'm't's' ir SFX f2 ir issais/n'q'j'l't' ir SFX f2 ir issait/n'q'l'm't's' ir SFX f2 ir issions/n'q'l't' ir SFX f2 ir issiez/n'q'l'm' ir SFX f2 ir issaient/n'q'l'm't's' ir SFX f2 ir îmes/n'q'l't' ir SFX f2 ir îtes/n'q'l'm' ir SFX f2 ir irent/n'q'l'm't's' ir SFX f2 ir irai/n'q'j'l't' ir SFX f2 ir iras/n'q'l'm't' ir SFX f2 ir ira/n'q'l'm't's' ir SFX f2 ir irons/n'q'l't' ir SFX f2 ir irez/n'q'l'm' ir SFX f2 ir iront/n'q'l'm't's' ir SFX f2 ir irais/n'q'j'l'm't' ir SFX f2 ir irait/n'q'l'm't's' ir SFX f2 ir irions/n'q'l't' ir SFX f2 ir iriez/n'q'l'm' ir SFX f2 ir iraient/n'q'l'm't's' ir SFX f2 ir isse/n'q'j'l't' ir SFX f2 ir isses/n'q'l'm' ir SFX f2 ir isse/n'q'l'm't's' ir SFX f2 ir ît/n'q'l'm't's' ir SFX f2 ir is/n'l'm' ir SFX f2 ir issons/n'l' ir SFX f2 ir issez/n'l'm' ir SFX f3 Y 33 SFX f3 ir ir/m't's' ir SFX f3 ir issant/m't's' ir SFX f3 ir is/m't' ir SFX f3 ir it/s' ir SFX f3 ir issons ir SFX f3 ir issez ir SFX f3 ir issent/s' ir SFX f3 ir issais/m't' ir SFX f3 ir issait/s' ir SFX f3 ir issions ir SFX f3 ir issiez ir SFX f3 ir issaient/s' ir SFX f3 ir îmes ir SFX f3 ir îtes ir SFX f3 ir irent/s' ir SFX f3 ir irai/m' ir SFX f3 ir iras/t' ir SFX f3 ir ira/s' ir SFX f3 ir irons ir SFX f3 ir irez ir SFX f3 ir iront/s' ir SFX f3 ir irais/m't' ir SFX f3 ir irait/s' ir SFX f3 ir irions ir SFX f3 ir iriez ir SFX f3 ir iraient/s' ir SFX f3 ir isse/m' ir SFX f3 ir isses/t' ir SFX f3 ir isse/s' ir SFX f3 ir ît/s' ir SFX f3 ir is/t' ir SFX f3 ir issons ir SFX f3 ir issez ir SFX f4 Y 33 SFX f4 ir ir/n'q'd'l'm't's' ir SFX f4 ir issant/n'q'l'm't's' ir SFX f4 ir is/n'q'j'l'm't' ir SFX f4 ir it/n'q'l'm't's' ir SFX f4 ir issons/n'q'l't' ir SFX f4 ir issez/n'q'l'm' ir SFX f4 ir issent/n'q'l'm't's' ir SFX f4 ir issais/n'q'j'l'm't' ir SFX f4 ir issait/n'q'l'm't's' ir SFX f4 ir issions/n'q'l't' ir SFX f4 ir issiez/n'q'l'm' ir SFX f4 ir issaient/n'q'l'm't's' ir SFX f4 ir îmes/n'q'l't' ir SFX f4 ir îtes/n'q'l'm' ir SFX f4 ir irent/n'q'l'm't's' ir SFX f4 ir irai/n'q'j'l'm't' ir SFX f4 ir iras/n'q'l'm't' ir SFX f4 ir ira/n'q'l'm't's' ir SFX f4 ir irons/n'q'l't' ir SFX f4 ir irez/n'q'l'm' ir SFX f4 ir iront/n'q'l'm't's' ir SFX f4 ir irais/n'q'j'l'm't' ir SFX f4 ir irait/n'q'l'm't's' ir SFX f4 ir irions/n'q'l't' ir SFX f4 ir iriez/n'q'l'm' ir SFX f4 ir iraient/n'q'l'm't's' ir SFX f4 ir isse/n'q'j'l'm't' ir SFX f4 ir isses/n'q'l'm't' ir SFX f4 ir isse/n'q'l'm't's' ir SFX f4 ir ît/n'q'l'm't's' ir SFX f4 ir is/n'l'm't' ir SFX f4 ir issons/n'l' ir SFX f4 ir issez/n'l'm' ir SFX f5 Y 33 SFX f5 ir ir/n'q'd'm't's' ir SFX f5 ir issant/n'q'm't's' ir SFX f5 ir is/n'j'm't' ir SFX f5 ir it/n'q'm't's' ir SFX f5 ir issons/n't' ir SFX f5 ir issez/n'm' ir SFX f5 ir issent/n'q'm't's' ir SFX f5 ir issais/n'j'm't' ir SFX f5 ir issait/n'q'm't's' ir SFX f5 ir issions/n't' ir SFX f5 ir issiez/n'm' ir SFX f5 ir issaient/n'q'm't's' ir SFX f5 ir îmes/n't' ir SFX f5 ir îtes/n'm' ir SFX f5 ir irent/n'q'm't's' ir SFX f5 ir irai/n'j'm't' ir SFX f5 ir iras/n'm't' ir SFX f5 ir ira/n'q'm't's' ir SFX f5 ir irons/n't' ir SFX f5 ir irez/n'm' ir SFX f5 ir iront/n'q'm't's' ir SFX f5 ir irais/n'j'm't' ir SFX f5 ir irait/n'q'm't's' ir SFX f5 ir irions/n't' ir SFX f5 ir iriez/n'm' ir SFX f5 ir iraient/n'q'm't's' ir SFX f5 ir isse/n'j'm't' ir SFX f5 ir isses/n'm't' ir SFX f5 ir isse/n'q'm't's' ir SFX f5 ir ît/n'q'm't's' ir SFX f5 ir is/n'm' ir SFX f5 ir issons/n' ir SFX f5 ir issez/n'm' ir SFX fA N 37 SFX fA aïr aïssant aïr SFX fA aïr aï aïr SFX fA aïr aïs aïr SFX fA aïr aïe aïr SFX fA aïr aïes aïr SFX fA aïr ais aïr SFX fA aïr ait aïr SFX fA aïr aïssons aïr SFX fA aïr aïssez aïr SFX fA aïr aïssent aïr SFX fA aïr aïssais aïr SFX fA aïr aïssait aïr SFX fA aïr aïssions aïr SFX fA aïr aïssiez aïr SFX fA aïr aïssaient aïr SFX fA aïr aïs aïr SFX fA aïr aït aïr SFX fA aïr aïmes aïr SFX fA aïr aïtes aïr SFX fA aïr aïrent aïr SFX fA aïr aïrai aïr SFX fA aïr aïras aïr SFX fA aïr aïra aïr SFX fA aïr aïrons aïr SFX fA aïr aïrez aïr SFX fA aïr aïront aïr SFX fA aïr aïrais aïr SFX fA aïr aïrait aïr SFX fA aïr aïrions aïr SFX fA aïr aïriez aïr SFX fA aïr aïraient aïr SFX fA aïr aïsse aïr SFX fA aïr aïsses aïr SFX fA aïr aïsse aïr SFX fA aïr ais aïr SFX fA aïr aïssons aïr SFX fA aïr aïssez aïr SFX fB Y 29 SFX fB haïr haïr/s' aïr SFX fB haïr haïssant/s' aïr SFX fB haïr haï aïr SFX fB haïr haïs aïr SFX fB haïr haïe aïr SFX fB haïr haïes aïr SFX fB haïr hait/s' aïr SFX fB haïr haïssons aïr SFX fB haïr haïssez aïr SFX fB haïr haïssent/s' aïr SFX fB haïr haïssait/s' aïr SFX fB haïr haïssions aïr SFX fB haïr haïssiez aïr SFX fB haïr haïssaient/s' aïr SFX fB haïr haït/s' aïr SFX fB haïr haïmes aïr SFX fB haïr haïtes aïr SFX fB haïr haïrent/s' aïr SFX fB haïr haïra/s' aïr SFX fB haïr haïrons aïr SFX fB haïr haïrez aïr SFX fB haïr haïront/s' aïr SFX fB haïr haïrait/s' aïr SFX fB haïr haïrions aïr SFX fB haïr haïriez aïr SFX fB haïr haïraient/s' aïr SFX fB haïr haïsse/s' aïr SFX fB haïr haïssons-nous aïr SFX fB haïr haïssez-vous aïr SFX fC Y 11 SFX fC partir partir/n'q'd'l'm't's' impartir SFX fC partir partissant/n'q'l'm't's' impartir SFX fC partir parti/q' impartir SFX fC partir partis/q' impartir SFX fC partir partie/q' impartir SFX fC partir parties/q' impartir SFX fC partir partis/n'q'j'l'm't' impartir SFX fC partir partit/n'q'l'm't's' impartir SFX fC partir partissons/n'q'l't' impartir SFX fC partir partissez/n'q'l'm' impartir SFX fC partir partissent/n'q'l'm't's' impartir SFX fD N 11 SFX fD ortir ortissant sortir SFX fD ortir ortit sortir SFX fD ortir ortissent sortir SFX fD ortir ortissait sortir SFX fD ortir ortissaient sortir SFX fD ortir ortira sortir SFX fD ortir ortiront sortir SFX fD ortir ortirait sortir SFX fD ortir ortiraient sortir SFX fD ortir ortisse sortir SFX fD ortir ortît sortir SFX fY N 37 SFX fY uïr uïr/s' uïr SFX fY uïr uïssant/m't's' uïr SFX fY uïr uï uïr SFX fY uïr uïs uïr SFX fY uïr uïe uïr SFX fY uïr uïes uïr SFX fY uïr uïs/m't' uïr SFX fY uïr uït/s' uïr SFX fY uïr uïssons uïr SFX fY uïr uïssez uïr SFX fY uïr uïssent/s' uïr SFX fY uïr uïssais/m't' uïr SFX fY uïr uïssait/s' uïr SFX fY uïr uïssions uïr SFX fY uïr uïssiez uïr SFX fY uïr uïssaient/s' uïr SFX fY uïr uîmes uïr SFX fY uïr uîtes uïr SFX fY uïr uïrent/s' uïr SFX fY uïr uïrai/m' uïr SFX fY uïr uïras/t' uïr SFX fY uïr uïra/s' uïr SFX fY uïr uïrons uïr SFX fY uïr uïrez uïr SFX fY uïr uïront/s' uïr SFX fY uïr uïrais/m't' uïr SFX fY uïr uïrait/s' uïr SFX fY uïr uïrions uïr SFX fY uïr uïriez uïr SFX fY uïr uïraient/s' uïr SFX fY uïr uïsse/m' uïr SFX fY uïr uïsses/t' uïr SFX fY uïr uïsse/s' uïr SFX fY uïr uît/s' uïr SFX fY uïr uïs/t' uïr SFX fY uïr uïssons uïr SFX fY uïr uïssez uïr SFX fZ N 7 SFX fZ gir gissant agir SFX fZ gir git agir SFX fZ gir gissait agir SFX fZ gir gira agir SFX fZ gir girait agir SFX fZ gir gisse agir SFX fZ gir gît agir SFX p+ Y 8 SFX p+ er é/L'D'Q' er SFX p+ er és/D'Q' er SFX p+ er ée/L'D'Q' er SFX p+ er ées/D'Q' er SFX p+ ir i/L'D'Q' ir SFX p+ ir is/D'Q' ir SFX p+ ir ie/L'D'Q' ir SFX p+ ir ies/D'Q' ir SFX p. Y 2 SFX p. er é/q' er SFX p. ir i/q' ir SFX i0 Y 39 SFX i0 enir enir/n'q'd' enir SFX i0 enir enant/n'q' enir SFX i0 enir iens/n'j' enir SFX i0 enir ient/n'q' enir SFX i0 enir enons/n' enir SFX i0 enir enez/n' enir SFX i0 enir iennent/n'q' enir SFX i0 enir enais/n'j' enir SFX i0 enir enait/n'q' enir SFX i0 enir enions/n' enir SFX i0 enir eniez/n' enir SFX i0 enir enaient/n'q' enir SFX i0 enir ins/n'j' enir SFX i0 enir int/n'q' enir SFX i0 enir înmes/n' enir SFX i0 enir întes/n' enir SFX i0 enir inrent/n'q' enir SFX i0 enir iendrai/n'j' enir SFX i0 enir iendras/n' enir SFX i0 enir iendra/n'q' enir SFX i0 enir iendrons/n' enir SFX i0 enir iendrez/n' enir SFX i0 enir iendront/n'q' enir SFX i0 enir iendrais/n'j' enir SFX i0 enir iendrait/n'q' enir SFX i0 enir iendrions/n' enir SFX i0 enir iendriez/n' enir SFX i0 enir iendraient/n'q' enir SFX i0 enir ienne/n'q'j' enir SFX i0 enir iennes/n' enir SFX i0 enir insse/n'j' enir SFX i0 enir insses/n' enir SFX i0 enir înt/n'q' enir SFX i0 enir inssions/n' enir SFX i0 enir inssiez/n' enir SFX i0 enir inssent/n'q' enir SFX i0 enir iens/n' enir SFX i0 enir enons/n' enir SFX i0 enir enez/n' enir SFX i1 Y 39 SFX i1 enir enir/n'q'd'l'm't's' enir SFX i1 enir enant/n'q'l'm't's' enir SFX i1 enir iens/n'q'j'l'm't' enir SFX i1 enir ient/n'q'l'm't's' enir SFX i1 enir enons/n'q'l't' enir SFX i1 enir enez/n'q'l'm' enir SFX i1 enir iennent/n'q'l'm't's' enir SFX i1 enir enais/n'q'j'l'm't' enir SFX i1 enir enait/n'q'l'm't's' enir SFX i1 enir enions/n'q'l't' enir SFX i1 enir eniez/n'q'l'm' enir SFX i1 enir enaient/n'q'l'm't's' enir SFX i1 enir ins/n'q'j'l'm't' enir SFX i1 enir int/n'q'l'm't's' enir SFX i1 enir înmes/n'q'l't' enir SFX i1 enir întes/n'q'l'm' enir SFX i1 enir inrent/n'q'l'm't's' enir SFX i1 enir iendrai/n'q'j'l'm't' enir SFX i1 enir iendras/n'q'l'm't' enir SFX i1 enir iendra/n'q'l'm't's' enir SFX i1 enir iendrons/n'q'l't' enir SFX i1 enir iendrez/n'q'l'm' enir SFX i1 enir iendront/n'q'l'm't's' enir SFX i1 enir iendrais/n'q'j'l'm't' enir SFX i1 enir iendrait/n'q'l'm't's' enir SFX i1 enir iendrions/n'q'l't' enir SFX i1 enir iendriez/n'q'l'm' enir SFX i1 enir iendraient/n'q'l'm't's' enir SFX i1 enir ienne/n'q'j'l'm't's' enir SFX i1 enir iennes/n'l'm't' enir SFX i1 enir insse/n'q'j'l'm't' enir SFX i1 enir insses/n'q'l'm't' enir SFX i1 enir înt/n'q'l'm't's' enir SFX i1 enir inssions/n'q'l't' enir SFX i1 enir inssiez/n'q'l'm' enir SFX i1 enir inssent/n'q'l'm't's' enir SFX i1 enir iens/n'l'm't' enir SFX i1 enir enons/n'l' enir SFX i1 enir enez/n'l'm' enir SFX i2 Y 39 SFX i2 enir enir/m't's' enir SFX i2 enir enant/m't's' enir SFX i2 enir iens/m't' enir SFX i2 enir ient/s' enir SFX i2 enir enons enir SFX i2 enir enez enir SFX i2 enir iennent/s' enir SFX i2 enir enais/m't' enir SFX i2 enir enait/s' enir SFX i2 enir enions enir SFX i2 enir eniez enir SFX i2 enir enaient/s' enir SFX i2 enir ins/m't' enir SFX i2 enir int/s' enir SFX i2 enir înmes enir SFX i2 enir întes enir SFX i2 enir inrent/s' enir SFX i2 enir iendrai/m' enir SFX i2 enir iendras/t' enir SFX i2 enir iendra/s' enir SFX i2 enir iendrons enir SFX i2 enir iendrez enir SFX i2 enir iendront/s' enir SFX i2 enir iendrais/m't' enir SFX i2 enir iendrait/s' enir SFX i2 enir iendrions enir SFX i2 enir iendriez enir SFX i2 enir iendraient/s' enir SFX i2 enir ienne/m's' enir SFX i2 enir iennes/t' enir SFX i2 enir insse/m' enir SFX i2 enir insses/t' enir SFX i2 enir înt/s' enir SFX i2 enir inssions enir SFX i2 enir inssiez enir SFX i2 enir inssent/s' enir SFX i2 enir iens/t' enir SFX i2 enir enons enir SFX i2 enir enez enir SFX i5 N 38 SFX i5 tir tant tir SFX i5 tir s tir SFX i5 tir t tir SFX i5 tir tons tir SFX i5 tir tez tir SFX i5 tir tent tir SFX i5 tir tais tir SFX i5 tir tait tir SFX i5 tir tions tir SFX i5 tir tiez tir SFX i5 tir taient tir SFX i5 tir tis tir SFX i5 tir tit tir SFX i5 tir tîmes tir SFX i5 tir tîtes tir SFX i5 tir tirent tir SFX i5 tir tirai tir SFX i5 tir tiras tir SFX i5 tir tira tir SFX i5 tir tirons tir SFX i5 tir tirez tir SFX i5 tir tiront tir SFX i5 tir tirais tir SFX i5 tir tirait tir SFX i5 tir tirions tir SFX i5 tir tiriez tir SFX i5 tir tiraient tir SFX i5 tir te tir SFX i5 tir tes tir SFX i5 tir tisse tir SFX i5 tir tisses tir SFX i5 tir tît tir SFX i5 tir tissions tir SFX i5 tir tissiez tir SFX i5 tir tissent tir SFX i5 tir s tir SFX i5 tir tons tir SFX i5 tir tez tir SFX iA Y 19 SFX iA dvenir dvenir/n'q'd'm't' venir SFX iA dvenir dvenant/n'q'm't' venir SFX iA dvenir dvenu/Q' venir SFX iA dvenir dvenus/Q' venir SFX iA dvenir dvenue/Q' venir SFX iA dvenir dvenues/Q' venir SFX iA dvenir dvient/n'q'm't' venir SFX iA dvenir dviennent/n'q' venir SFX iA dvenir dvenait/n'q'm't' venir SFX iA dvenir dvenaient/n'q' venir SFX iA dvenir dvint/n'q'm't' venir SFX iA dvenir dvinrent/n'q' venir SFX iA dvenir dviendra/n'q'm't' venir SFX iA dvenir dviendront/n'q' venir SFX iA dvenir dviendrait/n'q'm't' venir SFX iA dvenir dviendraient/n'q' venir SFX iA dvenir dvienne/n'q'm't' venir SFX iA dvenir dvînt/n'q'm't' venir SFX iA dvenir dvinssent/n'q' venir SFX iB Y 40 SFX iB partenir partenir/n'q'd'm't's' tenir SFX iB partenir partenant/n'q'm't's' tenir SFX iB partenir partenu/q' tenir SFX iB partenir partiens/n'j'm't' tenir SFX iB partenir partient/n'q'm't's' tenir SFX iB partenir partenons/n't' tenir SFX iB partenir partenez/n'm' tenir SFX iB partenir partiennent/n'q'm't's' tenir SFX iB partenir partenais/n'j'm't' tenir SFX iB partenir partenait/n'q'm't's' tenir SFX iB partenir partenions/n't' tenir SFX iB partenir parteniez/n'm' tenir SFX iB partenir partenaient/n'q'm't's' tenir SFX iB partenir partins/n'j'm't' tenir SFX iB partenir partint/n'q'm't's' tenir SFX iB partenir partînmes/n't' tenir SFX iB partenir partîntes/n'm' tenir SFX iB partenir partinrent/n'q'm't's' tenir SFX iB partenir partiendrai/n'j'm't' tenir SFX iB partenir partiendras/n'm't' tenir SFX iB partenir partiendra/n'q'm't's' tenir SFX iB partenir partiendrons/n't' tenir SFX iB partenir partiendrez/n'm' tenir SFX iB partenir partiendront/n'q'm't's' tenir SFX iB partenir partiendrais/n'j'm't' tenir SFX iB partenir partiendrait/n'q'm't's' tenir SFX iB partenir partiendrions/n't' tenir SFX iB partenir partiendriez/n'm' tenir SFX iB partenir partiendraient/n'q'm't's' tenir SFX iB partenir partienne/n'q'j'm't's' tenir SFX iB partenir partiennes/n'm't' tenir SFX iB partenir partinsse/n'j'm't' tenir SFX iB partenir partinsses/n'm't' tenir SFX iB partenir partînt/n'q'm't's' tenir SFX iB partenir partinssions/n't' tenir SFX iB partenir partinssiez/n'm' tenir SFX iB partenir partinssent/n'q'm't's' tenir SFX iB partenir partiens/n'm't' tenir SFX iB partenir partenons/n' tenir SFX iB partenir partenez/n'm' tenir SFX iC Y 41 SFX iC rir rir/n'q'd'l'm't's' [vf]rir SFX iC rir rant/n'q'l'm't's' [vf]rir SFX iC rir ert/L'D'Q' [vf]rir SFX iC rir erts/D'Q' [vf]rir SFX iC rir erte/L'D'Q' [vf]rir SFX iC rir ertes/D'Q' [vf]rir SFX iC rir re/n'q'j'l'm't's' [vf]rir SFX iC rir res/n'q'l'm't' [vf]rir SFX iC rir rons/n'q'l't' [vf]rir SFX iC rir rez/n'q'l'm' [vf]rir SFX iC rir rent/n'q'l'm't's' [vf]rir SFX iC rir rais/n'q'j'l'm't' [vf]rir SFX iC rir rait/n'q'l'm't's' [vf]rir SFX iC rir rions/n'q'l't' [vf]rir SFX iC rir riez/n'q'l'm' [vf]rir SFX iC rir raient/n'q'l'm't's' [vf]rir SFX iC rir ris/n'q'j'l'm't' [vf]rir SFX iC rir rit/n'q'l'm't's' [vf]rir SFX iC rir rîmes/n'q'l't' [vf]rir SFX iC rir rîtes/n'q'l'm' [vf]rir SFX iC rir rirent/n'q'l'm't's' [vf]rir SFX iC rir rirai/n'q'j'l'm't' [vf]rir SFX iC rir riras/n'q'l'm't' [vf]rir SFX iC rir rira/n'q'l'm't's' [vf]rir SFX iC rir rirons/n'q'l't' [vf]rir SFX iC rir rirez/n'q'l'm' [vf]rir SFX iC rir riront/n'q'l'm't's' [vf]rir SFX iC rir rirais/n'q'j'l'm't' [vf]rir SFX iC rir rirait/n'q'l'm't's' [vf]rir SFX iC rir ririons/n'q'l't' [vf]rir SFX iC rir ririez/n'q'l'm' [vf]rir SFX iC rir riraient/n'q'l'm't's' [vf]rir SFX iC rir risse/n'q'j'l'm't' [vf]rir SFX iC rir risses/n'q'l'm't' [vf]rir SFX iC rir rît/n'q'l'm't's' [vf]rir SFX iC rir rissions/n'q'l't' [vf]rir SFX iC rir rissiez/n'q'l'm' [vf]rir SFX iC rir rissent/n'q'l'm't's' [vf]rir SFX iC rir re/n'l'm't' [vf]rir SFX iC rir rons/n'l' [vf]rir SFX iC rir rez/n'l'm' [vf]rir SFX iD Y 43 SFX iD courir courir/n'q'd' courir SFX iD courir courant/n'q' courir SFX iD courir couru courir SFX iD courir courus courir SFX iD courir courue courir SFX iD courir courues courir SFX iD courir cours/n'j' courir SFX iD courir court/n' courir SFX iD courir courons/n' courir SFX iD courir courez/n' courir SFX iD courir courent/n' courir SFX iD courir courais/n'j' courir SFX iD courir courait/n' courir SFX iD courir courions/n' courir SFX iD courir couriez/n' courir SFX iD courir couraient/n' courir SFX iD courir courus/n'j' courir SFX iD courir courut/n' courir SFX iD courir courûmes/n' courir SFX iD courir courûtes/n' courir SFX iD courir coururent/n' courir SFX iD courir courrai/n'j' courir SFX iD courir courras/n' courir SFX iD courir courra/n' courir SFX iD courir courrons/n' courir SFX iD courir courrez/n' courir SFX iD courir courront/n' courir SFX iD courir courrais/n'j' courir SFX iD courir courrait/n' courir SFX iD courir courrions/n' courir SFX iD courir courriez/n' courir SFX iD courir courraient/n' courir SFX iD courir coure/n'j' courir SFX iD courir coures/n' courir SFX iD courir courusse/n'j' courir SFX iD courir courusses/n' courir SFX iD courir courût/n' courir SFX iD courir courussions/n' courir SFX iD courir courussiez/n' courir SFX iD courir courussent/n' courir SFX iD courir cours/n' courir SFX iD courir courons/n' courir SFX iD courir courez/n' courir SFX iE Y 43 SFX iE ourir ourir/n'q'd'l'm't's' courir SFX iE ourir ourant/n'q'm't's' courir SFX iE ourir ouru/L'D'Q' courir SFX iE ourir ourus/D'Q' courir SFX iE ourir ourue/L'D'Q' courir SFX iE ourir ourues/D'Q' courir SFX iE ourir ours/n'q'j'l'm't' courir SFX iE ourir ourt/n'q'l's' courir SFX iE ourir ourons/n'q'l' courir SFX iE ourir ourez/n'q'l' courir SFX iE ourir ourent/n'q'l's' courir SFX iE ourir ourais/n'q'j'l'm't' courir SFX iE ourir ourait/n'q'l's' courir SFX iE ourir ourions/n'q'l' courir SFX iE ourir ouriez/n'q'l' courir SFX iE ourir ouraient/n'q'l's' courir SFX iE ourir ourus/n'q'j'l'm't' courir SFX iE ourir ourut/n'q'l's' courir SFX iE ourir ourûmes/n'q'l' courir SFX iE ourir ourûtes/n'q'l' courir SFX iE ourir oururent/n'q'l's' courir SFX iE ourir ourrai/n'q'j'l'm' courir SFX iE ourir ourras/n'q'l't' courir SFX iE ourir ourra/n'q'l's' courir SFX iE ourir ourrons/n'q'l' courir SFX iE ourir ourrez/n'q'l' courir SFX iE ourir ourront/n'q'l's' courir SFX iE ourir ourrais/n'q'j'l'm't' courir SFX iE ourir ourrait/n'q'l's' courir SFX iE ourir ourrions/n'q'l' courir SFX iE ourir ourriez/n'q'l' courir SFX iE ourir ourraient/n'q'l's' courir SFX iE ourir oure/n'q'j'l'm's' courir SFX iE ourir oures/n'l't' courir SFX iE ourir ourusse/n'q'j'l'm' courir SFX iE ourir ourusses/n'q'l't' courir SFX iE ourir ourût/n'q'l's' courir SFX iE ourir ourussions/n'q'l' courir SFX iE ourir ourussiez/n'q'l' courir SFX iE ourir ourussent/n'q'l's' courir SFX iE ourir ours/n'l' courir SFX iE ourir ourons/n'l' courir SFX iE ourir ourez/n'l' courir SFX iF N 42 SFX iF ervir ervant servir SFX iF ervir ervi servir SFX iF ervir ervis servir SFX iF ervir ervie servir SFX iF ervir ervies servir SFX iF ervir ers servir SFX iF ervir ert servir SFX iF ervir ervons servir SFX iF ervir ervez servir SFX iF ervir ervent servir SFX iF ervir ervais servir SFX iF ervir ervait servir SFX iF ervir ervions servir SFX iF ervir erviez servir SFX iF ervir ervaient servir SFX iF ervir ervis servir SFX iF ervir ervit servir SFX iF ervir ervîmes servir SFX iF ervir ervîtes servir SFX iF ervir ervirent servir SFX iF ervir ervirai servir SFX iF ervir erviras servir SFX iF ervir ervira servir SFX iF ervir ervirons servir SFX iF ervir ervirez servir SFX iF ervir erviront servir SFX iF ervir ervirais servir SFX iF ervir ervirait servir SFX iF ervir ervirions servir SFX iF ervir erviriez servir SFX iF ervir erviraient servir SFX iF ervir erve servir SFX iF ervir erves servir SFX iF ervir ervisse servir SFX iF ervir ervisses servir SFX iF ervir ervît servir SFX iF ervir ervissions servir SFX iF ervir ervissiez servir SFX iF ervir ervissent servir SFX iF ervir ers servir SFX iF ervir ervons servir SFX iF ervir ervez servir SFX iG N 42 SFX iG êtir êtant vêtir SFX iG êtir êtu vêtir SFX iG êtir êtus vêtir SFX iG êtir êtue vêtir SFX iG êtir êtues vêtir SFX iG êtir êts vêtir SFX iG êtir êt vêtir SFX iG êtir êtons vêtir SFX iG êtir êtez vêtir SFX iG êtir êtent vêtir SFX iG êtir êtais vêtir SFX iG êtir êtait vêtir SFX iG êtir êtions vêtir SFX iG êtir êtiez vêtir SFX iG êtir êtaient vêtir SFX iG êtir êtis vêtir SFX iG êtir êtit vêtir SFX iG êtir êtîmes vêtir SFX iG êtir êtîtes vêtir SFX iG êtir êtirent vêtir SFX iG êtir êtirai vêtir SFX iG êtir êtiras vêtir SFX iG êtir êtira vêtir SFX iG êtir êtirons vêtir SFX iG êtir êtirez vêtir SFX iG êtir êtiront vêtir SFX iG êtir êtirais vêtir SFX iG êtir êtirait vêtir SFX iG êtir êtirions vêtir SFX iG êtir êtiriez vêtir SFX iG êtir êtiraient vêtir SFX iG êtir ête vêtir SFX iG êtir êtes vêtir SFX iG êtir êtisse vêtir SFX iG êtir êtisses vêtir SFX iG êtir êtît vêtir SFX iG êtir êtissions vêtir SFX iG êtir êtissiez vêtir SFX iG êtir êtissent vêtir SFX iG êtir êts vêtir SFX iG êtir êtons vêtir SFX iG êtir êtez vêtir SFX iI N 39 SFX iI ormir ormant dormir SFX iI ormir ormi dormir SFX iI ormir ors dormir SFX iI ormir ort dormir SFX iI ormir ormons dormir SFX iI ormir ormez dormir SFX iI ormir orment dormir SFX iI ormir ormais dormir SFX iI ormir ormait dormir SFX iI ormir ormions dormir SFX iI ormir ormiez dormir SFX iI ormir ormaient dormir SFX iI ormir ormis dormir SFX iI ormir ormit dormir SFX iI ormir ormîmes dormir SFX iI ormir ormîtes dormir SFX iI ormir ormirent dormir SFX iI ormir ormirai dormir SFX iI ormir ormiras dormir SFX iI ormir ormira dormir SFX iI ormir ormirons dormir SFX iI ormir ormirez dormir SFX iI ormir ormiront dormir SFX iI ormir ormirais dormir SFX iI ormir ormirait dormir SFX iI ormir ormirions dormir SFX iI ormir ormiriez dormir SFX iI ormir ormiraient dormir SFX iI ormir orme dormir SFX iI ormir ormes dormir SFX iI ormir ormisse dormir SFX iI ormir ormisses dormir SFX iI ormir ormît dormir SFX iI ormir ormissions dormir SFX iI ormir ormissiez dormir SFX iI ormir ormissent dormir SFX iI ormir ors dormir SFX iI ormir ormons dormir SFX iI ormir ormez dormir SFX iJ Y 43 SFX iJ dormir dormir/n'q'd'l'm't's' dormir SFX iJ dormir dormant/n'q'l'm't's' dormir SFX iJ dormir dormi/L'D'Q' dormir SFX iJ dormir dormis/D'Q' dormir SFX iJ dormir dormie/L'D'Q' dormir SFX iJ dormir dormies/D'Q' dormir SFX iJ dormir dors/n'q'j'l'm't' dormir SFX iJ dormir dort/n'q'l'm't's' dormir SFX iJ dormir dormons/n'q'l't' dormir SFX iJ dormir dormez/n'q'l'm' dormir SFX iJ dormir dorment/n'q'l'm't's' dormir SFX iJ dormir dormais/n'q'j'l'm't' dormir SFX iJ dormir dormait/n'q'l'm't's' dormir SFX iJ dormir dormions/n'q'l't' dormir SFX iJ dormir dormiez/n'q'l'm' dormir SFX iJ dormir dormaient/n'q'l'm't's' dormir SFX iJ dormir dormis/n'q'j'l'm't' dormir SFX iJ dormir dormit/n'q'l'm't's' dormir SFX iJ dormir dormîmes/n'q'l't' dormir SFX iJ dormir dormîtes/n'q'l'm' dormir SFX iJ dormir dormirent/n'q'l'm't's' dormir SFX iJ dormir dormirai/n'q'j'l'm't' dormir SFX iJ dormir dormiras/n'q'l'm't' dormir SFX iJ dormir dormira/n'q'l'm't's' dormir SFX iJ dormir dormirons/n'q'l't' dormir SFX iJ dormir dormirez/n'q'l'm' dormir SFX iJ dormir dormiront/n'q'l'm't's' dormir SFX iJ dormir dormirais/n'q'j'l'm't' dormir SFX iJ dormir dormirait/n'q'l'm't's' dormir SFX iJ dormir dormirions/n'q'l't' dormir SFX iJ dormir dormiriez/n'q'l'm' dormir SFX iJ dormir dormiraient/n'q'l'm't's' dormir SFX iJ dormir dorme/n'q'j'l'm't's' dormir SFX iJ dormir dormes/n'l'm't' dormir SFX iJ dormir dormisse/n'q'j'l'm't' dormir SFX iJ dormir dormisses/n'q'l'm't' dormir SFX iJ dormir dormît/n'q'l'm't's' dormir SFX iJ dormir dormissions/n'q'l't' dormir SFX iJ dormir dormissiez/n'q'l'm' dormir SFX iJ dormir dormissent/n'q'l'm't's' dormir SFX iJ dormir dors/n'l'm't' dormir SFX iJ dormir dormons/n'l' dormir SFX iJ dormir dormez/n'l'm' dormir SFX iK Y 42 SFX iK quérir quérir/n'q'd'l'm't's' quérir SFX iK quérir quérant/n'q'l'm't's' quérir SFX iK quérir quis/L'D'Q' quérir SFX iK quérir quise/L'D'Q' quérir SFX iK quérir quises/D'Q' quérir SFX iK quérir quiers/n'q'j'l'm't' quérir SFX iK quérir quiert/n'q'l'm't's' quérir SFX iK quérir quérons/n'q'l't' quérir SFX iK quérir quérez/n'q'l'm' quérir SFX iK quérir quièrent/n'q'l'm't's' quérir SFX iK quérir quérais/n'q'j'l'm't' quérir SFX iK quérir quérait/n'q'l'm't's' quérir SFX iK quérir quérions/n'q'l't' quérir SFX iK quérir quériez/n'q'l'm' quérir SFX iK quérir quéraient/n'q'l'm't's' quérir SFX iK quérir quis/n'q'j'l'm't' quérir SFX iK quérir quit/n'q'l'm't's' quérir SFX iK quérir quîmes/n'q'l't' quérir SFX iK quérir quîtes/n'q'l'm' quérir SFX iK quérir quirent/n'q'l'm't's' quérir SFX iK quérir querrai/n'q'j'l'm't' quérir SFX iK quérir querras/n'q'l'm't' quérir SFX iK quérir querra/n'q'l'm't's' quérir SFX iK quérir querrons/n'q'l't' quérir SFX iK quérir querrez/n'q'l'm' quérir SFX iK quérir querront/n'q'l'm't's' quérir SFX iK quérir querrais/n'q'j'l'm't' quérir SFX iK quérir querrait/n'q'l'm't's' quérir SFX iK quérir querrions/n'q'l't' quérir SFX iK quérir querriez/n'q'l'm' quérir SFX iK quérir querraient/n'q'l'm't's' quérir SFX iK quérir quière/n'q'j'l'm't's' quérir SFX iK quérir quières/n'l'm't' quérir SFX iK quérir quisse/n'q'j'l'm't' quérir SFX iK quérir quisses/n'q'l'm't' quérir SFX iK quérir quît/n'q'l'm't's' quérir SFX iK quérir quissions/n'q'l't' quérir SFX iK quérir quissiez/n'q'l'm' quérir SFX iK quérir quissent/n'q'l'm't's' quérir SFX iK quérir quiers/n'l'm't' quérir SFX iK quérir quérons/n'l' quérir SFX iK quérir quérez/n'l'm' quérir SFX iM Y 42 SFX iM quérir quérir/m't's' quérir SFX iM quérir quérant/m't's' quérir SFX iM quérir quis/L'D'Q' quérir SFX iM quérir quise/L'D'Q' quérir SFX iM quérir quises/D'Q' quérir SFX iM quérir quiers/m't' quérir SFX iM quérir quiert/s' quérir SFX iM quérir quérons quérir SFX iM quérir quérez quérir SFX iM quérir quièrent/s' quérir SFX iM quérir quérais/m't' quérir SFX iM quérir quérait/s' quérir SFX iM quérir quérions quérir SFX iM quérir quériez quérir SFX iM quérir quéraient/s' quérir SFX iM quérir quis/m't' quérir SFX iM quérir quit/s' quérir SFX iM quérir quîmes quérir SFX iM quérir quîtes quérir SFX iM quérir quirent/s' quérir SFX iM quérir querrai/m' quérir SFX iM quérir querras/t' quérir SFX iM quérir querra/s' quérir SFX iM quérir querrons quérir SFX iM quérir querrez quérir SFX iM quérir querront/s' quérir SFX iM quérir querrais/m't' quérir SFX iM quérir querrait/s' quérir SFX iM quérir querrions quérir SFX iM quérir querriez quérir SFX iM quérir querraient/s' quérir SFX iM quérir quière/m's' quérir SFX iM quérir quières/t' quérir SFX iM quérir quisse/m' quérir SFX iM quérir quisses/t' quérir SFX iM quérir quît/s' quérir SFX iM quérir quissions quérir SFX iM quérir quissiez quérir SFX iM quérir quissent/s' quérir SFX iM quérir quiers/t' quérir SFX iM quérir quérons quérir SFX iM quérir quérez quérir SFX iN N 40 SFX iN uir uyant fuir SFX iN uir ui fuir SFX iN uir uis fuir SFX iN uir uie fuir SFX iN uir uies fuir SFX iN uir uis fuir SFX iN uir uit fuir SFX iN uir uyons fuir SFX iN uir uyez fuir SFX iN uir uient fuir SFX iN uir uyais fuir SFX iN uir uyait fuir SFX iN uir uyions fuir SFX iN uir uyiez fuir SFX iN uir uyaient fuir SFX iN uir uîmes fuir SFX iN uir uîtes fuir SFX iN uir uirent fuir SFX iN uir uirai fuir SFX iN uir uiras fuir SFX iN uir uira fuir SFX iN uir uirons fuir SFX iN uir uirez fuir SFX iN uir uiront fuir SFX iN uir uirais fuir SFX iN uir uirait fuir SFX iN uir uirions fuir SFX iN uir uiriez fuir SFX iN uir uiraient fuir SFX iN uir uie fuir SFX iN uir uies fuir SFX iN uir uisse fuir SFX iN uir uisses fuir SFX iN uir uît fuir SFX iN uir uissions fuir SFX iN uir uissiez fuir SFX iN uir uissent fuir SFX iN uir uis fuir SFX iN uir uyons fuir SFX iN uir uyez fuir SFX iO Y 41 SFX iO fuir fuir/m't's' enfuir SFX iO fuir fuyant/m't's' enfuir SFX iO fuir fui/L'D'Q' enfuir SFX iO fuir fuis/D'Q' enfuir SFX iO fuir fuie/L'D'Q' enfuir SFX iO fuir fuies/D'Q' enfuir SFX iO fuir fuis/m't' enfuir SFX iO fuir fuit/s' enfuir SFX iO fuir fuyons enfuir SFX iO fuir fuyez enfuir SFX iO fuir fuient/s' enfuir SFX iO fuir fuyais/m't' enfuir SFX iO fuir fuyait/s' enfuir SFX iO fuir fuyions enfuir SFX iO fuir fuyiez enfuir SFX iO fuir fuyaient/s' enfuir SFX iO fuir fuîmes enfuir SFX iO fuir fuîtes enfuir SFX iO fuir fuirent/s' enfuir SFX iO fuir fuirai/m' enfuir SFX iO fuir fuiras/t' enfuir SFX iO fuir fuira/s' enfuir SFX iO fuir fuirons enfuir SFX iO fuir fuirez enfuir SFX iO fuir fuiront/s' enfuir SFX iO fuir fuirais/m't' enfuir SFX iO fuir fuirait/s' enfuir SFX iO fuir fuirions enfuir SFX iO fuir fuiriez enfuir SFX iO fuir fuiraient/s' enfuir SFX iO fuir fuie/m's' enfuir SFX iO fuir fuies/t' enfuir SFX iO fuir fuisse/m' enfuir SFX iO fuir fuisses/t' enfuir SFX iO fuir fuît/s' enfuir SFX iO fuir fuissions enfuir SFX iO fuir fuissiez enfuir SFX iO fuir fuissent/s' enfuir SFX iO fuir fuis/t' enfuir SFX iO fuir fuyons enfuir SFX iO fuir fuyez enfuir SFX iP N 42 SFX iP ourir ourant mourir SFX iP ourir ort mourir SFX iP ourir orts mourir SFX iP ourir orte mourir SFX iP ourir ortes mourir SFX iP ourir eurs mourir SFX iP ourir eurt mourir SFX iP ourir ourons mourir SFX iP ourir ourez mourir SFX iP ourir eurent mourir SFX iP ourir ourais mourir SFX iP ourir ourait mourir SFX iP ourir ourions mourir SFX iP ourir ouriez mourir SFX iP ourir ouraient mourir SFX iP ourir ourus mourir SFX iP ourir ourut mourir SFX iP ourir ourûmes mourir SFX iP ourir ourûtes mourir SFX iP ourir oururent mourir SFX iP ourir ourrai mourir SFX iP ourir ourras mourir SFX iP ourir ourra mourir SFX iP ourir ourrons mourir SFX iP ourir ourrez mourir SFX iP ourir ourront mourir SFX iP ourir ourrais mourir SFX iP ourir ourrait mourir SFX iP ourir ourrions mourir SFX iP ourir ourriez mourir SFX iP ourir ourraient mourir SFX iP ourir eure mourir SFX iP ourir eures mourir SFX iP ourir ourusse mourir SFX iP ourir ourusses mourir SFX iP ourir ourût mourir SFX iP ourir ourussions mourir SFX iP ourir ourussiez mourir SFX iP ourir ourussent mourir SFX iP ourir eurs mourir SFX iP ourir ourons mourir SFX iP ourir ourez mourir SFX iQ N 42 SFX iQ ouillir ouillant bouillir SFX iQ ouillir ouilli bouillir SFX iQ ouillir ouillis bouillir SFX iQ ouillir ouillie bouillir SFX iQ ouillir ouillies bouillir SFX iQ ouillir ous bouillir SFX iQ ouillir out bouillir SFX iQ ouillir ouillons bouillir SFX iQ ouillir ouillez bouillir SFX iQ ouillir ouillent bouillir SFX iQ ouillir ouillais bouillir SFX iQ ouillir ouillait bouillir SFX iQ ouillir ouillions bouillir SFX iQ ouillir ouilliez bouillir SFX iQ ouillir ouillaient bouillir SFX iQ ouillir ouillis bouillir SFX iQ ouillir ouillit bouillir SFX iQ ouillir ouillîmes bouillir SFX iQ ouillir ouillîtes bouillir SFX iQ ouillir ouillirent bouillir SFX iQ ouillir ouillirai bouillir SFX iQ ouillir ouilliras bouillir SFX iQ ouillir ouillira bouillir SFX iQ ouillir ouillirons bouillir SFX iQ ouillir ouillirez bouillir SFX iQ ouillir ouilliront bouillir SFX iQ ouillir ouillirais bouillir SFX iQ ouillir ouillirait bouillir SFX iQ ouillir ouillirions bouillir SFX iQ ouillir ouilliriez bouillir SFX iQ ouillir ouilliraient bouillir SFX iQ ouillir ouille bouillir SFX iQ ouillir ouilles bouillir SFX iQ ouillir ouillisse bouillir SFX iQ ouillir ouillisses bouillir SFX iQ ouillir ouillît bouillir SFX iQ ouillir ouillissions bouillir SFX iQ ouillir ouillissiez bouillir SFX iQ ouillir ouillissent bouillir SFX iQ ouillir ous bouillir SFX iQ ouillir ouillons bouillir SFX iQ ouillir ouillez bouillir SFX iR Y 41 SFX iR ueillir ueillir/n'q'd'l'm't's' cueillir SFX iR ueillir ueillant/n'q'l'm't's' cueillir SFX iR ueillir ueilli/L'D'Q' cueillir SFX iR ueillir ueillis/D'Q' cueillir SFX iR ueillir ueillie/L'D'Q' cueillir SFX iR ueillir ueillies/D'Q' cueillir SFX iR ueillir ueille/n'q'j'l'm't's' cueillir SFX iR ueillir ueilles/n'q'l'm' cueillir SFX iR ueillir ueillons/n'q'l't' cueillir SFX iR ueillir ueillez/n'q'l'm' cueillir SFX iR ueillir ueillent/n'q'l'm't's' cueillir SFX iR ueillir ueillais/n'q'j'l't' cueillir SFX iR ueillir ueillait/n'q'l'm't's' cueillir SFX iR ueillir ueillions/n'q'l't' cueillir SFX iR ueillir ueilliez/n'q'l'm' cueillir SFX iR ueillir ueillaient/n'q'l'm't's' cueillir SFX iR ueillir ueillis/n'q'j'l't' cueillir SFX iR ueillir ueillit/n'q'l'm't's' cueillir SFX iR ueillir ueillîmes/n'q'l't' cueillir SFX iR ueillir ueillîtes/n'q'l'm' cueillir SFX iR ueillir ueillirent/n'q'l'm't's' cueillir SFX iR ueillir ueillerai/n'q'j'l't' cueillir SFX iR ueillir ueilleras/n'q'l'm' cueillir SFX iR ueillir ueillera/n'q'l'm't's' cueillir SFX iR ueillir ueillerons/n'q'l't' cueillir SFX iR ueillir ueillerez/n'q'l'm' cueillir SFX iR ueillir ueilleront/n'q'l'm't's' cueillir SFX iR ueillir ueillerais/n'q'j'l't' cueillir SFX iR ueillir ueillerait/n'q'l'm't's' cueillir SFX iR ueillir ueillerions/n'q'l't' cueillir SFX iR ueillir ueilleriez/n'q'l'm' cueillir SFX iR ueillir ueilleraient/n'q'l'm't's' cueillir SFX iR ueillir ueillisse/n'q'j'l't' cueillir SFX iR ueillir ueillisses/n'q'l'm' cueillir SFX iR ueillir ueillît/n'q'l'm't's' cueillir SFX iR ueillir ueillissions/n'q'l't' cueillir SFX iR ueillir ueillissiez/n'q'l'm' cueillir SFX iR ueillir ueillissent/n'q'l'm't's' cueillir SFX iR ueillir ueille/n'l'm' cueillir SFX iR ueillir ueillons/n'l' cueillir SFX iR ueillir ueillez/n'l'm' cueillir SFX iS N 37 SFX iS aillir aillant aillir SFX iS aillir ailli aillir SFX iS aillir aille aillir SFX iS aillir ailles aillir SFX iS aillir aillons aillir SFX iS aillir aillez aillir SFX iS aillir aillent aillir SFX iS aillir aillais aillir SFX iS aillir aillait aillir SFX iS aillir aillions aillir SFX iS aillir ailliez aillir SFX iS aillir aillaient aillir SFX iS aillir aillis aillir SFX iS aillir aillit aillir SFX iS aillir aillîmes aillir SFX iS aillir aillîtes aillir SFX iS aillir aillirent aillir SFX iS aillir aillirai aillir SFX iS aillir ailliras aillir SFX iS aillir aillira aillir SFX iS aillir aillirons aillir SFX iS aillir aillirez aillir SFX iS aillir ailliront aillir SFX iS aillir aillirais aillir SFX iS aillir aillirait aillir SFX iS aillir aillirions aillir SFX iS aillir ailliriez aillir SFX iS aillir ailliraient aillir SFX iS aillir aillisse aillir SFX iS aillir aillisses aillir SFX iS aillir aillît aillir SFX iS aillir aillissions aillir SFX iS aillir aillissiez aillir SFX iS aillir aillissent aillir SFX iS aillir aille aillir SFX iS aillir aillons aillir SFX iS aillir aillez aillir SFX iT Y 41 SFX iT saillir saillir/n'q'd'l'm't's' aillir SFX iT saillir saillant/n'q'l'm't's' aillir SFX iT saillir sailli/L'D'Q' aillir SFX iT saillir saillis/D'Q' aillir SFX iT saillir saillie/L'D'Q' aillir SFX iT saillir saillies/D'Q' aillir SFX iT saillir saille/n'q'j'l'm't's' aillir SFX iT saillir sailles/n'q'l'm't' aillir SFX iT saillir saillons/n'q'l't' aillir SFX iT saillir saillez/n'q'l'm' aillir SFX iT saillir saillent/n'q'l'm't's' aillir SFX iT saillir saillais/n'q'j'l'm't' aillir SFX iT saillir saillait/n'q'l'm't's' aillir SFX iT saillir saillions/n'q'l't' aillir SFX iT saillir sailliez/n'q'l'm' aillir SFX iT saillir saillaient/n'q'l'm't's' aillir SFX iT saillir saillis/n'q'j'l'm't' aillir SFX iT saillir saillit/n'q'l'm't's' aillir SFX iT saillir saillîmes/n'q'l't' aillir SFX iT saillir saillîtes/n'q'l'm' aillir SFX iT saillir saillirent/n'q'l'm't's' aillir SFX iT saillir saillirai/n'q'j'l'm't' aillir SFX iT saillir sailliras/n'q'l'm't' aillir SFX iT saillir saillira/n'q'l'm't's' aillir SFX iT saillir saillirons/n'q'l't' aillir SFX iT saillir saillirez/n'q'l'm' aillir SFX iT saillir sailliront/n'q'l'm't's' aillir SFX iT saillir saillirais/n'q'j'l'm't' aillir SFX iT saillir saillirait/n'q'l'm't's' aillir SFX iT saillir saillirions/n'q'l't' aillir SFX iT saillir sailliriez/n'q'l'm' aillir SFX iT saillir sailliraient/n'q'l'm't's' aillir SFX iT saillir saillisse/n'q'j'l'm't' aillir SFX iT saillir saillisses/n'q'l'm't' aillir SFX iT saillir saillît/n'q'l'm't's' aillir SFX iT saillir saillissions/n'q'l't' aillir SFX iT saillir saillissiez/n'q'l'm' aillir SFX iT saillir saillissent/n'q'l'm't's' aillir SFX iT saillir saille/n'l'm' aillir SFX iT saillir saillons/n'l' aillir SFX iT saillir saillez/n'l'm' aillir SFX iU N 36 SFX iU aillir aillant faillir SFX iU aillir ailli faillir SFX iU aillir aux faillir SFX iU aillir aut faillir SFX iU aillir aillons faillir SFX iU aillir aillez faillir SFX iU aillir aillent faillir SFX iU aillir aillais faillir SFX iU aillir aillait faillir SFX iU aillir aillions faillir SFX iU aillir ailliez faillir SFX iU aillir aillaient faillir SFX iU aillir aillis faillir SFX iU aillir aillit faillir SFX iU aillir aillîmes faillir SFX iU aillir aillîtes faillir SFX iU aillir aillirent faillir SFX iU aillir aillirai faillir SFX iU aillir ailliras faillir SFX iU aillir aillira faillir SFX iU aillir aillirons faillir SFX iU aillir aillirez faillir SFX iU aillir ailliront faillir SFX iU aillir aillirais faillir SFX iU aillir aillirait faillir SFX iU aillir aillirions faillir SFX iU aillir ailliriez faillir SFX iU aillir ailliraient faillir SFX iU aillir aille faillir SFX iU aillir ailles faillir SFX iU aillir aillisse faillir SFX iU aillir aillisses faillir SFX iU aillir aillît faillir SFX iU aillir aillissions faillir SFX iU aillir aillissiez faillir SFX iU aillir aillissent faillir SFX iV N 11 SFX iV ésir isant gésir SFX iV ésir is gésir SFX iV ésir ît gésir SFX iV ésir isons gésir SFX iV ésir isez gésir SFX iV ésir isent gésir SFX iV ésir isais gésir SFX iV ésir isait gésir SFX iV ésir isions gésir SFX iV ésir isiez gésir SFX iV ésir isaient gésir SFX iW Y 54 SFX iW uïr uïr/n'q'd'l'm't's' ouïr SFX iW uïr yant/n'q'l'm't's' ouïr SFX iW uïr uï/L'D'Q' ouïr SFX iW uïr uïs/D'Q' ouïr SFX iW uïr uïe/L'D'Q' ouïr SFX iW uïr uïes/D'Q' ouïr SFX iW uïr is/n'q'j'l'm't' ouïr SFX iW uïr it/n'q'l'm't' ouïr SFX iW uïr yons/n'q'l't' ouïr SFX iW uïr yez/n'q'l'm' ouïr SFX iW uïr ient/n'q'l'm't's' ouïr SFX iW uïr yais/n'q'j'l'm't' ouïr SFX iW uïr yait/n'q'l'm't' ouïr SFX iW uïr yions/n'q'l't' ouïr SFX iW uïr yiez/n'q'l'm' ouïr SFX iW uïr yaient/n'q'l'm't's' ouïr SFX iW uïr uïs/n'q'j'l'm't' ouïr SFX iW uïr uït/n'q'l'm't' ouïr SFX iW uïr uïmes/n'q'l't' ouïr SFX iW uïr uïtes/n'q'l'm' ouïr SFX iW uïr uïrent/n'q'l'm't's' ouïr SFX iW uïr uïrai/n'q'j'l'm't' ouïr SFX iW uïr rrai/n'q'j'l'm't' ouïr SFX iW uïr uïras/n'q'l'm't' ouïr SFX iW uïr rras/n'q'l'm't' ouïr SFX iW uïr uïra/n'q'l'm't' ouïr SFX iW uïr rra/n'q'l'm't' ouïr SFX iW uïr uïrons/n'q'l't' ouïr SFX iW uïr rrons/n'q'l't' ouïr SFX iW uïr uïrez/n'q'l'm' ouïr SFX iW uïr rrez/n'q'l'm' ouïr SFX iW uïr uïront/n'q'l'm't's' ouïr SFX iW uïr rront/n'q'l'm't's' ouïr SFX iW uïr uïrais/n'q'j'l'm't' ouïr SFX iW uïr rrais/n'q'j'l'm't' ouïr SFX iW uïr uïrait/n'q'l'm't' ouïr SFX iW uïr rrait/n'q'l'm't' ouïr SFX iW uïr uïrions/n'q'l't' ouïr SFX iW uïr rrions/n'q'l't' ouïr SFX iW uïr uïriez/n'q'l'm' ouïr SFX iW uïr rriez/n'q'l'm' ouïr SFX iW uïr uïraient/n'q'l'm't's' ouïr SFX iW uïr rraient/n'q'l'm't's' ouïr SFX iW uïr ie/n'q'j'l'm't's' ouïr SFX iW uïr ies/n'l'm't' ouïr SFX iW uïr uïsse/n'q'j'l'm't' ouïr SFX iW uïr uïsses/n'q'l'm't' ouïr SFX iW uïr uït/n'q'l'm't' ouïr SFX iW uïr uïssions/n'q'l't' ouïr SFX iW uïr uïssiez/n'q'l'm' ouïr SFX iW uïr uïssent/n'q'l'm't's' ouïr SFX iW uïr is/n'l'm' ouïr SFX iW uïr yons/n'l' ouïr SFX iW uïr yez/n'l'm' ouïr SFX iX N 4 SFX iX érir éru férir SFX iX érir érus férir SFX iX érir érue férir SFX iX érir érues férir SFX iY Y 5 SFX iY ssir ssir/n'q'd' issir SFX iY ssir ssu/L'D'Q' issir SFX iY ssir ssus/D'Q' issir SFX iY ssir ssue/L'D'Q' issir SFX iY ssir ssues/D'Q' issir SFX pA N 42 SFX pA ouvoir ouvant pouvoir SFX pA ouvoir u pouvoir SFX pA ouvoir eux pouvoir SFX pA ouvoir uis pouvoir SFX pA ouvoir eut pouvoir SFX pA ouvoir ouvons pouvoir SFX pA ouvoir ouvez pouvoir SFX pA ouvoir euvent pouvoir SFX pA ouvoir ouvais pouvoir SFX pA ouvoir ouvait pouvoir SFX pA ouvoir ouvions pouvoir SFX pA ouvoir ouviez pouvoir SFX pA ouvoir ouvaient pouvoir SFX pA ouvoir us pouvoir SFX pA ouvoir ut pouvoir SFX pA ouvoir ûmes pouvoir SFX pA ouvoir ûtes pouvoir SFX pA ouvoir urent pouvoir SFX pA ouvoir ourrai pouvoir SFX pA ouvoir ourras pouvoir SFX pA ouvoir ourra pouvoir SFX pA ouvoir ourrons pouvoir SFX pA ouvoir ourrez pouvoir SFX pA ouvoir ourront pouvoir SFX pA ouvoir ourrais pouvoir SFX pA ouvoir ourrait pouvoir SFX pA ouvoir ourrions pouvoir SFX pA ouvoir ourriez pouvoir SFX pA ouvoir ourraient pouvoir SFX pA ouvoir uisse pouvoir SFX pA ouvoir uissé pouvoir SFX pA ouvoir uisses pouvoir SFX pA ouvoir uissions pouvoir SFX pA ouvoir uissiez pouvoir SFX pA ouvoir uissent pouvoir SFX pA ouvoir usse pouvoir SFX pA ouvoir ussé pouvoir SFX pA ouvoir usses pouvoir SFX pA ouvoir ût pouvoir SFX pA ouvoir ussions pouvoir SFX pA ouvoir ussiez pouvoir SFX pA ouvoir ussent pouvoir SFX pB N 47 SFX pB ouloir oulant vouloir SFX pB ouloir oulu vouloir SFX pB ouloir oulus vouloir SFX pB ouloir oulue vouloir SFX pB ouloir oulues vouloir SFX pB ouloir eux vouloir SFX pB ouloir eut vouloir SFX pB ouloir oulons vouloir SFX pB ouloir oulez vouloir SFX pB ouloir eulent vouloir SFX pB ouloir oulais vouloir SFX pB ouloir oulait vouloir SFX pB ouloir oulions vouloir SFX pB ouloir ouliez vouloir SFX pB ouloir oulaient vouloir SFX pB ouloir oulus vouloir SFX pB ouloir oulut vouloir SFX pB ouloir oulûmes vouloir SFX pB ouloir oulûtes vouloir SFX pB ouloir oulurent vouloir SFX pB ouloir oudrai vouloir SFX pB ouloir oudras vouloir SFX pB ouloir oudra vouloir SFX pB ouloir oudrons vouloir SFX pB ouloir oudrez vouloir SFX pB ouloir oudront vouloir SFX pB ouloir oudrais vouloir SFX pB ouloir oudrait vouloir SFX pB ouloir oudrions vouloir SFX pB ouloir oudriez vouloir SFX pB ouloir oudraient vouloir SFX pB ouloir euille vouloir SFX pB ouloir euillé vouloir SFX pB ouloir euilles vouloir SFX pB ouloir euillent vouloir SFX pB ouloir oulusse vouloir SFX pB ouloir oulusses vouloir SFX pB ouloir oulût vouloir SFX pB ouloir oulussions vouloir SFX pB ouloir oulussiez vouloir SFX pB ouloir oulussent vouloir SFX pB ouloir euille vouloir SFX pB ouloir eux vouloir SFX pB ouloir euillons vouloir SFX pB ouloir oulons vouloir SFX pB ouloir euillez vouloir SFX pB ouloir oulez vouloir SFX pC N 43 SFX pC evoir evant devoir SFX pC evoir û redevoir SFX pC evoir us devoir SFX pC evoir ue devoir SFX pC evoir ues devoir SFX pC evoir ois devoir SFX pC evoir oit devoir SFX pC evoir evons devoir SFX pC evoir evez devoir SFX pC evoir oivent devoir SFX pC evoir evais devoir SFX pC evoir evait devoir SFX pC evoir evions devoir SFX pC evoir eviez devoir SFX pC evoir evaient devoir SFX pC evoir us devoir SFX pC evoir ut devoir SFX pC evoir ûmes devoir SFX pC evoir ûtes devoir SFX pC evoir urent devoir SFX pC evoir evrai devoir SFX pC evoir evras devoir SFX pC evoir evra devoir SFX pC evoir evrons devoir SFX pC evoir evrez devoir SFX pC evoir evront devoir SFX pC evoir evrais devoir SFX pC evoir evrait devoir SFX pC evoir evrions devoir SFX pC evoir evriez devoir SFX pC evoir evraient devoir SFX pC evoir oive devoir SFX pC evoir oives devoir SFX pC evoir usse devoir SFX pC evoir ussé devoir SFX pC evoir usses devoir SFX pC evoir ût devoir SFX pC evoir ussions devoir SFX pC evoir ussiez devoir SFX pC evoir ussent devoir SFX pC evoir ois devoir SFX pC evoir evons devoir SFX pC evoir evez devoir SFX pD N 1 SFX pD evoir û devoir SFX pE N 45 SFX pE avoir achant savoir SFX pE avoir u savoir SFX pE avoir us savoir SFX pE avoir ue savoir SFX pE avoir ues savoir SFX pE avoir ais savoir SFX pE avoir ait savoir SFX pE avoir avons savoir SFX pE avoir avez savoir SFX pE avoir avent savoir SFX pE avoir avais savoir SFX pE avoir avait savoir SFX pE avoir avions savoir SFX pE avoir aviez savoir SFX pE avoir avaient savoir SFX pE avoir us savoir SFX pE avoir ut savoir SFX pE avoir ûmes savoir SFX pE avoir ûtes savoir SFX pE avoir urent savoir SFX pE avoir aurai savoir SFX pE avoir auras savoir SFX pE avoir aura savoir SFX pE avoir aurons savoir SFX pE avoir aurez savoir SFX pE avoir auront savoir SFX pE avoir aurais savoir SFX pE avoir aurait savoir SFX pE avoir aurions savoir SFX pE avoir auriez savoir SFX pE avoir auraient savoir SFX pE avoir ache savoir SFX pE avoir aches savoir SFX pE avoir achions savoir SFX pE avoir achiez savoir SFX pE avoir achent savoir SFX pE avoir usse savoir SFX pE avoir usses savoir SFX pE avoir ût savoir SFX pE avoir ussions savoir SFX pE avoir ussiez savoir SFX pE avoir ussent savoir SFX pE avoir ache savoir SFX pE avoir achons savoir SFX pE avoir achez savoir SFX pF Y 54 SFX pF oir oir/n'q'd'l'm't's' voir SFX pF oir oyant/n'q'l'm't's' voir SFX pF oir u/L'D'Q' voir SFX pF oir us/D'Q' voir SFX pF oir ue/L'D'Q' voir SFX pF oir ues/D'Q' voir SFX pF oir ois/n'q'j'l'm't' voir SFX pF oir oit/n'q'l'm't's' voir SFX pF oir oyons/n'q'l't' voir SFX pF oir oyez/n'q'l'm' voir SFX pF oir oient/n'q'l'm't's' voir SFX pF oir oyais/n'q'j'l'm't' voir SFX pF oir oyait/n'q'l'm't's' voir SFX pF oir oyions/n'q'l't' voir SFX pF oir oyiez/n'q'l'm' voir SFX pF oir oyaient/n'q'l'm't's' voir SFX pF oir is/n'q'j'l'm't' voir SFX pF oir it/n'q'l'm't's' voir SFX pF oir îmes/n'q'l't' voir SFX pF oir îtes/n'q'l'm' voir SFX pF oir irent/n'q'l'm't's' voir SFX pF oir errai/n'q'j'l'm't' [^é]voir SFX pF oir oirai évoir SFX pF oir erras/n'q'l'm't' [^é]voir SFX pF oir oiras évoir SFX pF oir erra/n'q'l'm't's' [^é]voir SFX pF oir oira évoir SFX pF oir errons/n'q'l't' [^é]voir SFX pF oir oirons évoir SFX pF oir errez/n'q'l'm' [^é]voir SFX pF oir oirez évoir SFX pF oir erront/n'q'l'm't's' [^é]voir SFX pF oir oiront évoir SFX pF oir errais/n'q'j'l'm't' [^é]voir SFX pF oir oirais évoir SFX pF oir errait/n'q'l'm't's' [^é]voir SFX pF oir oirait évoir SFX pF oir errions/n'q'l't' [^é]voir SFX pF oir oirions évoir SFX pF oir erriez/n'q'l'm' [^é]voir SFX pF oir oiriez évoir SFX pF oir erraient/n'q'l'm't's' [^é]voir SFX pF oir oiraient évoir SFX pF oir oie/n'q'j'l'm't's' voir SFX pF oir oies/n'l'm't' voir SFX pF oir isse/n'q'j'l'm't' voir SFX pF oir isses/n'q'l'm't' voir SFX pF oir ît/n'q'l'm't's' voir SFX pF oir issions/n'q'l't' voir SFX pF oir issiez/n'q'l'm' voir SFX pF oir issent/n'q'l'm't's' voir SFX pF oir ois/n'l'm' voir SFX pF oir oyons/n'l' voir SFX pF oir oyez/n'l'm' voir SFX pG Y 11 SFX pG oir errai voir SFX pG oir erras voir SFX pG oir erra voir SFX pG oir errons voir SFX pG oir errez voir SFX pG oir erront voir SFX pG oir errais voir SFX pG oir errait voir SFX pG oir errions voir SFX pG oir erriez voir SFX pG oir erraient voir SFX pH Y 43 SFX pH ouvoir ouvoir/n'q'd'l'm't's' mouvoir SFX pH ouvoir ouvant/n'q'l'm't's' mouvoir SFX pH ouvoir u/L'D'Q' .mouvoir SFX pH ouvoir us/D'Q' mouvoir SFX pH ouvoir ue/L'D'Q' mouvoir SFX pH ouvoir ues/D'Q' mouvoir SFX pH ouvoir eus/n'q'j'l'm't' mouvoir SFX pH ouvoir eut/n'q'l'm't's' mouvoir SFX pH ouvoir ouvons/n'q'l't' mouvoir SFX pH ouvoir ouvez/n'q'l'm' mouvoir SFX pH ouvoir euvent/n'q'l'm't's' mouvoir SFX pH ouvoir ouvais/n'q'j'l'm't' mouvoir SFX pH ouvoir ouvait/n'q'l'm't's' mouvoir SFX pH ouvoir ouvions/n'q'l't' mouvoir SFX pH ouvoir ouviez/n'q'l'm' mouvoir SFX pH ouvoir ouvaient/n'q'l'm't's' mouvoir SFX pH ouvoir us/n'q'j'l'm't' mouvoir SFX pH ouvoir ut/n'q'l'm't's' mouvoir SFX pH ouvoir ûmes/n'q'l't' mouvoir SFX pH ouvoir ûtes/n'q'l'm' mouvoir SFX pH ouvoir urent/n'q'l'm't's' mouvoir SFX pH ouvoir ouvrai/n'q'j'l'm't' mouvoir SFX pH ouvoir ouvras/n'q'l'm't' mouvoir SFX pH ouvoir ouvra/n'q'l'm't's' mouvoir SFX pH ouvoir ouvrons/n'q'l't' mouvoir SFX pH ouvoir ouvrez/n'q'l'm' mouvoir SFX pH ouvoir ouvront/n'q'l'm't's' mouvoir SFX pH ouvoir ouvrais/n'q'j'l'm't' mouvoir SFX pH ouvoir ouvrait/n'q'l'm't's' mouvoir SFX pH ouvoir ouvrions/n'q'l't' mouvoir SFX pH ouvoir ouvriez/n'q'l'm' mouvoir SFX pH ouvoir ouvraient/n'q'l'm't's' mouvoir SFX pH ouvoir euve/n'q'j'l'm't's' mouvoir SFX pH ouvoir euves/n'l'm't' mouvoir SFX pH ouvoir usse/n'q'j'l'm't' mouvoir SFX pH ouvoir usses/n'q'l'm't' mouvoir SFX pH ouvoir ût/n'q'l'm't's' mouvoir SFX pH ouvoir ussions/n'q'l't' mouvoir SFX pH ouvoir ussiez/n'q'l'm' mouvoir SFX pH ouvoir ussent/n'q'l'm't's' mouvoir SFX pH ouvoir eus/n'l'm' mouvoir SFX pH ouvoir ouvons/n'l' mouvoir SFX pH ouvoir ouvez/n'l'm' mouvoir SFX pI N 1 SFX pI ouvoir û/q' mouvoir SFX pJ N 42 SFX pJ ourvoir ourvoyant pourvoir SFX pJ ourvoir ourvu pourvoir SFX pJ ourvoir ourvus pourvoir SFX pJ ourvoir ourvue pourvoir SFX pJ ourvoir ourvues pourvoir SFX pJ ourvoir ourvois pourvoir SFX pJ ourvoir ourvoit pourvoir SFX pJ ourvoir ourvoyons pourvoir SFX pJ ourvoir ourvoyez pourvoir SFX pJ ourvoir ourvoient pourvoir SFX pJ ourvoir ourvoyais pourvoir SFX pJ ourvoir ourvoyait pourvoir SFX pJ ourvoir ourvoyions pourvoir SFX pJ ourvoir ourvoyiez pourvoir SFX pJ ourvoir ourvoyaient pourvoir SFX pJ ourvoir ourvus pourvoir SFX pJ ourvoir ourvut pourvoir SFX pJ ourvoir ourvûmes pourvoir SFX pJ ourvoir ourvûtes pourvoir SFX pJ ourvoir ourvurent pourvoir SFX pJ ourvoir ourvoirai pourvoir SFX pJ ourvoir ourvoiras pourvoir SFX pJ ourvoir ourvoira pourvoir SFX pJ ourvoir ourvoirons pourvoir SFX pJ ourvoir ourvoirez pourvoir SFX pJ ourvoir ourvoiront pourvoir SFX pJ ourvoir ourvoirais pourvoir SFX pJ ourvoir ourvoirait pourvoir SFX pJ ourvoir ourvoirions pourvoir SFX pJ ourvoir ourvoiriez pourvoir SFX pJ ourvoir ourvoiraient pourvoir SFX pJ ourvoir ourvoie pourvoir SFX pJ ourvoir ourvoies pourvoir SFX pJ ourvoir ourvusse pourvoir SFX pJ ourvoir ourvusses pourvoir SFX pJ ourvoir ourvût pourvoir SFX pJ ourvoir ourvussions pourvoir SFX pJ ourvoir ourvussiez pourvoir SFX pJ ourvoir ourvussent pourvoir SFX pJ ourvoir ourvois pourvoir SFX pJ ourvoir ourvoyons pourvoir SFX pJ ourvoir ourvoyez pourvoir SFX pK Y 43 SFX pK cevoir cevoir/n'q'd'l'm't's' cevoir SFX pK cevoir cevant/n'q'l'm't's' cevoir SFX pK cevoir çu/L'D'Q' cevoir SFX pK cevoir çus/D'Q' cevoir SFX pK cevoir çue/L'D'Q' cevoir SFX pK cevoir çues/D'Q' cevoir SFX pK cevoir çois/n'q'j'l'm't' cevoir SFX pK cevoir çoit/n'q'l'm't's' cevoir SFX pK cevoir cevons/n'q'l't' cevoir SFX pK cevoir cevez/n'q'l'm' cevoir SFX pK cevoir çoivent/n'q'l'm't's' cevoir SFX pK cevoir cevais/n'q'j'l'm't' cevoir SFX pK cevoir cevait/n'q'l'm't's' cevoir SFX pK cevoir cevions/n'q'l't' cevoir SFX pK cevoir ceviez/n'q'l'm' cevoir SFX pK cevoir cevaient/n'q'l'm't's' cevoir SFX pK cevoir çus/n'q'j'l'm't' cevoir SFX pK cevoir çut/n'q'l'm't's' cevoir SFX pK cevoir çûmes/n'q'l't' cevoir SFX pK cevoir çûtes/n'q'l'm' cevoir SFX pK cevoir çurent/n'q'l'm't's' cevoir SFX pK cevoir cevrai/n'q'j'l'm't' cevoir SFX pK cevoir cevras/n'q'l'm't' cevoir SFX pK cevoir cevra/n'q'l'm't's' cevoir SFX pK cevoir cevrons/n'q'l't' cevoir SFX pK cevoir cevrez/n'q'l'm' cevoir SFX pK cevoir cevront/n'q'l'm't's' cevoir SFX pK cevoir cevrais/n'q'j'l'm't' cevoir SFX pK cevoir cevrait/n'q'l'm't's' cevoir SFX pK cevoir cevrions/n'q'l't' cevoir SFX pK cevoir cevriez/n'q'l'm' cevoir SFX pK cevoir cevraient/n'q'l'm't's' cevoir SFX pK cevoir çoive/n'q'j'l'm't's' cevoir SFX pK cevoir çoives/n'l'm't' cevoir SFX pK cevoir çusse/n'q'j'l'm't' cevoir SFX pK cevoir çusses/n'q'l'm't' cevoir SFX pK cevoir çût/n'q'l'm't's' cevoir SFX pK cevoir çussions/n'q'l't' cevoir SFX pK cevoir çussiez/n'q'l'm' cevoir SFX pK cevoir çussent/n'q'l'm't's' cevoir SFX pK cevoir çois/n'l'm't' cevoir SFX pK cevoir cevons/n'l' cevoir SFX pK cevoir cevez/n'l'm' cevoir SFX pM N 40 SFX pM aloir alant valoir SFX pM aloir alu valoir SFX pM aloir aux valoir SFX pM aloir aut valoir SFX pM aloir alons valoir SFX pM aloir alez valoir SFX pM aloir alent valoir SFX pM aloir alais valoir SFX pM aloir alait valoir SFX pM aloir alions valoir SFX pM aloir aliez valoir SFX pM aloir alaient valoir SFX pM aloir alus valoir SFX pM aloir alut valoir SFX pM aloir alûmes valoir SFX pM aloir alûtes valoir SFX pM aloir alurent valoir SFX pM aloir audrai valoir SFX pM aloir audras valoir SFX pM aloir audra valoir SFX pM aloir audrons valoir SFX pM aloir audrez valoir SFX pM aloir audront valoir SFX pM aloir audrais valoir SFX pM aloir audrait valoir SFX pM aloir audrions valoir SFX pM aloir audriez valoir SFX pM aloir audraient valoir SFX pM aloir aille valoir SFX pM aloir ailles valoir SFX pM aloir aillent valoir SFX pM aloir alusse valoir SFX pM aloir alusses valoir SFX pM aloir alût valoir SFX pM aloir alussions valoir SFX pM aloir alussiez valoir SFX pM aloir alussent valoir SFX pM aloir aux valoir SFX pM aloir alons valoir SFX pM aloir alez valoir SFX pN Y 43 SFX pN valoir valoir/n'q'd'm't's' valoir SFX pN valoir valant/n'q'm't's' valoir SFX pN valoir vaux/n'j'm't' valoir SFX pN valoir vaut/n'm't's' valoir SFX pN valoir valons/n't' valoir SFX pN valoir valez/n'm' valoir SFX pN valoir valent/n'm't's' quivaloir SFX pN valoir valent révaloir SFX pN valoir valais/n'j'm't' valoir SFX pN valoir valait/n'm't's' valoir SFX pN valoir valions/n't' valoir SFX pN valoir valiez/n'm' valoir SFX pN valoir valaient/n'm't's' valoir SFX pN valoir valus/n'j'm't' valoir SFX pN valoir valut/n'm't's' valoir SFX pN valoir valûmes/n't' valoir SFX pN valoir valûtes/n'm' valoir SFX pN valoir valurent/n'm't's' valoir SFX pN valoir vaudrai/n'j'm't' valoir SFX pN valoir vaudras/n'm't' valoir SFX pN valoir vaudra/n'm't's' valoir SFX pN valoir vaudrons/n't' valoir SFX pN valoir vaudrez/n'm' valoir SFX pN valoir vaudront/n'm't's' valoir SFX pN valoir vaudrais/n'j'm't' valoir SFX pN valoir vaudrait/n'm't's' valoir SFX pN valoir vaudrions/n't' valoir SFX pN valoir vaudriez/n'm' valoir SFX pN valoir vaudraient/n'm't's' valoir SFX pN valoir vaille/n'j'm't's' quivaloir SFX pN valoir vale révaloir SFX pN valoir vailles/n'm't' quivaloir SFX pN valoir vales révaloir SFX pN valoir vaillent/n'm't's' quivaloir SFX pN valoir valusse/n'j'm't' valoir SFX pN valoir valusses/n'm't' valoir SFX pN valoir valût/n'm't's' valoir SFX pN valoir valussions/n't' valoir SFX pN valoir valussiez/n'm' valoir SFX pN valoir valussent/n'm't's' valoir SFX pN valoir vaux valoir SFX pN valoir valons valoir SFX pN valoir valez valoir SFX pO N 16 SFX pO valoir valant revaloir SFX pO valoir valu revaloir SFX pO valoir valus revaloir SFX pO valoir value revaloir SFX pO valoir values revaloir SFX pO valoir vaudrai revaloir SFX pO valoir vaudras revaloir SFX pO valoir vaudra revaloir SFX pO valoir vaudrons revaloir SFX pO valoir vaudrez revaloir SFX pO valoir vaudront revaloir SFX pO valoir vaudrais revaloir SFX pO valoir vaudrait revaloir SFX pO valoir vaudrions revaloir SFX pO valoir vaudriez revaloir SFX pO valoir vaudraient revaloir SFX pP N 1 SFX pP paroir parant comparoir SFX pQ N 1 SFX pQ haloir haut chaloir SFX pR Y 2 SFX pR pparoir pparoir/n'q'd' apparoir SFX pR pparoir ppert/n'q' apparoir SFX pS Y 69 SFX pS oir oir/n'q'd'l'm't's' oir SFX pS sseoir sseyant/n'q'l'm't's' seoir SFX pS sseoir ssoyant/n'q'l'm't's' seoir SFX pS sseoir ssis/L'D'Q' seoir SFX pS sseoir ssise/L'D'Q' seoir SFX pS sseoir ssises/D'Q' seoir SFX pS sseoir ssieds/n'q'j'l'm't' seoir SFX pS sseoir ssied/n'q'l'm't's' seoir SFX pS sseoir sseyons/n'q'l't' seoir SFX pS sseoir sseyez/n'q'l'm' seoir SFX pS sseoir sseyent/n'q'l'm't's' seoir SFX pS sseoir ssois/n'q'j'l'm't' seoir SFX pS sseoir ssoit/n'q'l'm't's' seoir SFX pS sseoir ssoyons/n'q'l't' seoir SFX pS sseoir ssoyez/n'q'l'm' seoir SFX pS sseoir ssoient/n'q'l'm't's' seoir SFX pS sseoir sseyais/n'q'j'l'm't' seoir SFX pS sseoir sseyait/n'q'l'm't's' seoir SFX pS sseoir sseyions/n'q'l't' seoir SFX pS sseoir sseyiez/n'q'l'm' seoir SFX pS sseoir sseyaient/n'q'l'm't's' seoir SFX pS sseoir ssoyais/n'q'j'l'm't' seoir SFX pS sseoir ssoyait/n'q'l'm't's' seoir SFX pS sseoir ssoyions/n'q'l't' seoir SFX pS sseoir ssoyiez/n'q'l'm' seoir SFX pS sseoir ssoyaient/n'q'l'm't's' seoir SFX pS sseoir ssis/n'q'j'l'm't' seoir SFX pS sseoir ssit/n'q'l'm't's' seoir SFX pS sseoir ssîmes/n'q'l't' seoir SFX pS sseoir ssîtes/n'q'l'm' seoir SFX pS sseoir ssirent/n'q'l'm't's' seoir SFX pS sseoir ssiérai/n'q'j'l'm't' seoir SFX pS sseoir ssiéras/n'q'l'm't' seoir SFX pS sseoir ssiéra/n'q'l'm't's' seoir SFX pS sseoir ssiérons/n'q'l't' seoir SFX pS sseoir ssiérez/n'q'l'm' seoir SFX pS sseoir ssiéront/n'q'l'm't's' seoir SFX pS sseoir ssoirai/n'q'j'l'm't' seoir SFX pS sseoir ssoiras/n'q'l'm't' seoir SFX pS sseoir ssoira/n'q'l'm't's' seoir SFX pS sseoir ssoirons/n'q'l't' seoir SFX pS sseoir ssoirez/n'q'l'm' seoir SFX pS sseoir ssoiront/n'q'l'm't's' seoir SFX pS sseoir ssiérais/n'q'j'l'm't' seoir SFX pS sseoir ssiérait/n'q'l'm't's' seoir SFX pS sseoir ssiérions/n'q'l't' seoir SFX pS sseoir ssiériez/n'q'l'm' seoir SFX pS sseoir ssiéraient/n'q'l'm't's' seoir SFX pS sseoir ssoirais/n'q'j'l'm't' seoir SFX pS sseoir ssoirait/n'q'l'm't's' seoir SFX pS sseoir ssoirions/n'q'l't' seoir SFX pS sseoir ssoiriez/n'q'l'm' seoir SFX pS sseoir ssoiraient/n'q'l'm't's' seoir SFX pS sseoir sseye/n'q'j'l'm't's' seoir SFX pS sseoir sseyes/n'l'm't' seoir SFX pS sseoir ssoie/n'q'j'l'm't's' seoir SFX pS sseoir ssoies/n'l'm't' seoir SFX pS sseoir ssisse/n'q'j'l'm't' seoir SFX pS sseoir ssisses/n'q'l'm't' seoir SFX pS sseoir ssît/n'q'l'm't's' seoir SFX pS sseoir ssissions/n'q'l't' seoir SFX pS sseoir ssissiez/n'q'l'm' seoir SFX pS sseoir ssissent/n'q'l'm't's' seoir SFX pS sseoir ssieds/n'l'm't' seoir SFX pS sseoir sseyons/n'l' seoir SFX pS sseoir sseyez/n'l'm' seoir SFX pS sseoir ssois/n'l'm't' seoir SFX pS sseoir ssoyons/n'l' seoir SFX pS sseoir ssoyez/n'l'm' seoir SFX pT N 41 SFX pT urseoir ursoyant seoir SFX pT urseoir ursis seoir SFX pT urseoir ursise seoir SFX pT urseoir ursises seoir SFX pT urseoir ursois seoir SFX pT urseoir ursoit seoir SFX pT urseoir ursoyons seoir SFX pT urseoir ursoyez seoir SFX pT urseoir ursoient seoir SFX pT urseoir ursoyais seoir SFX pT urseoir ursoyait seoir SFX pT urseoir ursoyions seoir SFX pT urseoir ursoyiez seoir SFX pT urseoir ursoyaient seoir SFX pT urseoir ursis seoir SFX pT urseoir ursit seoir SFX pT urseoir ursîmes seoir SFX pT urseoir ursîtes seoir SFX pT urseoir ursirent seoir SFX pT urseoir urseoirai seoir SFX pT urseoir urseoiras seoir SFX pT urseoir urseoira seoir SFX pT urseoir urseoirons seoir SFX pT urseoir urseoirez seoir SFX pT urseoir urseoiront seoir SFX pT urseoir urseoirais seoir SFX pT urseoir urseoirait seoir SFX pT urseoir urseoirions seoir SFX pT urseoir urseoiriez seoir SFX pT urseoir urseoiraient seoir SFX pT urseoir ursoie seoir SFX pT urseoir ursoies seoir SFX pT urseoir ursisse seoir SFX pT urseoir ursisses seoir SFX pT urseoir ursît seoir SFX pT urseoir ursissions seoir SFX pT urseoir ursissiez seoir SFX pT urseoir ursissent seoir SFX pT urseoir ursois seoir SFX pT urseoir ursoyons seoir SFX pT urseoir ursoyez seoir SFX pU N 4 SFX pU eoir éant seoir SFX pU eoir is seoir SFX pU eoir ise seoir SFX pU eoir ises seoir SFX pV N 13 SFX pV eoir éant seoir SFX pV eoir eyant seoir SFX pV eoir is seoir SFX pV eoir ied seoir SFX pV eoir iéent seoir SFX pV eoir eyait seoir SFX pV eoir eyaient seoir SFX pV eoir iéra seoir SFX pV eoir iéront seoir SFX pV eoir iérait seoir SFX pV eoir iéraient seoir SFX pV eoir iée seoir SFX pV eoir iéent seoir SFX pW N 11 SFX pW sseoir sséant seoir SFX pW sseoir ssied seoir SFX pW sseoir ssiéent seoir SFX pW sseoir sseyait seoir SFX pW sseoir sseyaient seoir SFX pW sseoir ssiéra seoir SFX pW sseoir ssiéront seoir SFX pW sseoir ssiérait seoir SFX pW sseoir ssiéraient seoir SFX pW sseoir ssiée seoir SFX pW sseoir ssiéent seoir SFX pX N 52 SFX pX hoir hu choir SFX pX hoir hus choir SFX pX hoir hue choir SFX pX hoir hues choir SFX pX hoir hois choir SFX pX hoir hoit choir SFX pX hoir hoyons choir SFX pX hoir hoyez choir SFX pX hoir hoient choir SFX pX hoir hoyais déchoir SFX pX hoir hoyait déchoir SFX pX hoir hoyions déchoir SFX pX hoir hoyiez déchoir SFX pX hoir hoyaient déchoir SFX pX hoir hus choir SFX pX hoir hut choir SFX pX hoir hûmes choir SFX pX hoir hûtes choir SFX pX hoir hurent choir SFX pX hoir hoirai choir SFX pX hoir herrai choir SFX pX hoir hoiras choir SFX pX hoir herras choir SFX pX hoir hoira choir SFX pX hoir herra choir SFX pX hoir hoirons choir SFX pX hoir herrons choir SFX pX hoir hoirez choir SFX pX hoir herrez choir SFX pX hoir hoiront choir SFX pX hoir herront choir SFX pX hoir hoirais choir SFX pX hoir herrais choir SFX pX hoir hoirait choir SFX pX hoir herrait choir SFX pX hoir hoirions choir SFX pX hoir herrions choir SFX pX hoir hoiriez choir SFX pX hoir herriez choir SFX pX hoir hoiraient choir SFX pX hoir herraient choir SFX pX hoir hoie choir SFX pX hoir hoies choir SFX pX hoir husse choir SFX pX hoir husses choir SFX pX hoir hût choir SFX pX hoir hussions choir SFX pX hoir hussiez choir SFX pX hoir hussent choir SFX pX hoir hois déchoir SFX pX hoir hoyons déchoir SFX pX hoir hoyez déchoir SFX pY Y 26 SFX pY choir choir/n'q'd' échoir SFX pY choir chéant/n'q' échoir SFX pY choir chu/L'D'Q' échoir SFX pY choir chus/D'Q' échoir SFX pY choir chue/L'D'Q' échoir SFX pY choir chues/D'Q' échoir SFX pY choir choit/n'q' échoir SFX pY choir chet/n'q' échoir SFX pY choir choient/n'q' échoir SFX pY choir chéent/n'q' échoir SFX pY choir choyait/n'q' échoir SFX pY choir choyaient/n'q' échoir SFX pY choir chut/n'q' échoir SFX pY choir churent/n'q' échoir SFX pY choir choira/n'q' échoir SFX pY choir cherra/n'q' échoir SFX pY choir choiront/n'q' échoir SFX pY choir cherront/n'q' échoir SFX pY choir choirait/n'q' échoir SFX pY choir cherrait/n'q' échoir SFX pY choir choiraient/n'q' échoir SFX pY choir cherraient/n'q' échoir SFX pY choir choie/n'q' échoir SFX pY choir choient/n'q' échoir SFX pY choir chût/n'q' échoir SFX pY choir chussent/n'q' échoir SFX pZ N 18 SFX pZ euvoir euvant pleuvoir SFX pZ euvoir u pleuvoir SFX pZ euvoir eut pleuvoir SFX pZ euvoir euvent pleuvoir SFX pZ euvoir euvait pleuvoir SFX pZ euvoir euvaient pleuvoir SFX pZ euvoir ut pleuvoir SFX pZ euvoir urent pleuvoir SFX pZ euvoir euvra pleuvoir SFX pZ euvoir euvront pleuvoir SFX pZ euvoir euvrait pleuvoir SFX pZ euvoir euvraient pleuvoir SFX pZ euvoir euve pleuvoir SFX pZ euvoir ût pleuvoir SFX pZ euvoir ussent pleuvoir SFX pZ euvoir eus pleuvoir SFX pZ euvoir euvons pleuvoir SFX pZ euvoir euvez pleuvoir SFX qA N 8 SFX qA alloir allu falloir SFX qA alloir aut falloir SFX qA alloir allait falloir SFX qA alloir allut falloir SFX qA alloir audra falloir SFX qA alloir audrait falloir SFX qA alloir aille falloir SFX qA alloir allût falloir SFX rA Y 28 SFX rA lore lore/n'q'd'l'm't's' clore SFX rA lore losant/n'q'l'm't's' clore SFX rA lore los/L'D'Q' clore SFX rA lore lose/L'D'Q' clore SFX rA lore loses/D'Q' clore SFX rA lore los/n'q'j'l'm't' clore SFX rA lore lot/n'q'l'm't's' .clore SFX rA lore losons/n'q'l't' clore SFX rA lore losez/n'q'l'm' clore SFX rA lore losent/n'q'l'm't's' clore SFX rA lore lorai/n'q'j'l'm't' clore SFX rA lore loras/n'q'l'm't' clore SFX rA lore lora/n'q'l'm't's' clore SFX rA lore lorons/n'q'l't' clore SFX rA lore lorez/n'q'l'm' clore SFX rA lore loront/n'q'l'm't's' clore SFX rA lore lorais/n'q'j'l'm't' clore SFX rA lore lorait/n'q'l'm't's' clore SFX rA lore lorions/n'q'l't' clore SFX rA lore loriez/n'q'l'm' clore SFX rA lore loraient/n'q'l'm't's' clore SFX rA lore lose/n'q'j'l'm't's' clore SFX rA lore loses/n'l'm't' clore SFX rA lore losions/n'l't' clore SFX rA lore losiez/n'l'm' clore SFX rA lore los/n'l'm' clore SFX rA lore losons/n'l' clore SFX rA lore losez/n'l'm' clore SFX rB Y 1 SFX rB lore lôt clore SFX rC Y 28 SFX rC clore clore/n'q'd' clore SFX rC clore closant/n'q' clore SFX rC clore clos/L'D'Q' clore SFX rC clore close/L'D'Q' clore SFX rC clore closes/D'Q' clore SFX rC clore clos/n'j' clore SFX rC clore clot/n'q' clore SFX rC clore closons/n' clore SFX rC clore closez/n' clore SFX rC clore closent/n'q' clore SFX rC clore clorai/n'j' clore SFX rC clore cloras/n' clore SFX rC clore clora/n'q' clore SFX rC clore clorons/n' clore SFX rC clore clorez/n' clore SFX rC clore cloront/n'q' clore SFX rC clore clorais/n'j' clore SFX rC clore clorait/n'q' clore SFX rC clore clorions/n' clore SFX rC clore cloriez/n' clore SFX rC clore cloraient/n'q' clore SFX rC clore close/n'q'j' clore SFX rC clore closes/n' clore SFX rC clore closions/n' clore SFX rC clore closiez/n' clore SFX rC clore clos/n' clore SFX rC clore closons/n' clore SFX rC clore closez/n' clore SFX rD N 3 SFX rD clore clos clore SFX rD clore close clore SFX rD clore closes clore SFX tA Y 44 SFX tA re re/n'q'd'l'm't's' [dp]re SFX tA re ant/n'q'l'm't's' [dp]re SFX tA re u/L'D'Q' [dp]re SFX tA re us/D'Q' [dp]re SFX tA re ue/L'D'Q' [dp]re SFX tA re ues/D'Q' [dp]re SFX tA re s/n'q'j'l'm't' [dp]re SFX tA dre d/n'q'l'm't's' dre SFX tA pre pt/n'q'l'm't's' pre SFX tA re ons/n'q'l't' [dp]re SFX tA re ez/n'q'l'm' [dp]re SFX tA re ent/n'q'l'm't's' [dp]re SFX tA re ais/n'q'j'l'm't' [dp]re SFX tA re ait/n'q'l'm't's' [dp]re SFX tA re ions/n'q'l't' [dp]re SFX tA re iez/n'q'l'm' [dp]re SFX tA re aient/n'q'l'm't's' [dp]re SFX tA re is/n'q'j'l'm't' [dp]re SFX tA re it/n'q'l'm't's' [dp]re SFX tA re îmes/n'q'l't' [dp]re SFX tA re îtes/n'q'l'm' [dp]re SFX tA re irent/n'q'l'm't's' [dp]re SFX tA re rai/n'q'j'l'm't' [dp]re SFX tA re ras/n'q'l'm't' [dp]re SFX tA re ra/n'q'l'm't's' [dp]re SFX tA re rons/n'q'l't' [dp]re SFX tA re rez/n'q'l'm' [dp]re SFX tA re ront/n'q'l'm't's' [dp]re SFX tA re rais/n'q'j'l'm't' [dp]re SFX tA re rait/n'q'l'm't's' [dp]re SFX tA re rions/n'q'l't' [dp]re SFX tA re riez/n'q'l'm' [dp]re SFX tA re raient/n'q'l'm't's' [dp]re SFX tA re e/n'q'j'l'm't's' [dp]re SFX tA re es/n'l'm't' [dp]re SFX tA re isse/n'q'j'l'm't' [dp]re SFX tA re isses/n'q'l'm't' [dp]re SFX tA re ît/n'q'l'm't's' [dp]re SFX tA re issions/n'q'l't' [dp]re SFX tA re issiez/n'q'l'm' [dp]re SFX tA re issent/n'q'l'm't's' [dp]re SFX tA re s/n'l'm't' [dp]re SFX tA re ons/n'l' [dp]re SFX tA re ez/n'l'm' [dp]re SFX tD Y 43 SFX tD perdre perdre/m't's' perdre SFX tD perdre perdant/m't's' perdre SFX tD perdre perdu perdre SFX tD perdre perdus perdre SFX tD perdre perdue perdre SFX tD perdre perdues perdre SFX tD perdre perds/m't' perdre SFX tD perdre perd/s' perdre SFX tD perdre perdons perdre SFX tD perdre perdez perdre SFX tD perdre perdent/s' perdre SFX tD perdre perdais/m't' perdre SFX tD perdre perdait/s' perdre SFX tD perdre perdions perdre SFX tD perdre perdiez perdre SFX tD perdre perdaient/s' perdre SFX tD perdre perdis/m't' perdre SFX tD perdre perdit/s' perdre SFX tD perdre perdîmes perdre SFX tD perdre perdîtes perdre SFX tD perdre perdirent/s' perdre SFX tD perdre perdrai/m' perdre SFX tD perdre perdras/t' perdre SFX tD perdre perdra/s' perdre SFX tD perdre perdrons perdre SFX tD perdre perdrez perdre SFX tD perdre perdront/s' perdre SFX tD perdre perdrais/m't' perdre SFX tD perdre perdrait/s' perdre SFX tD perdre perdrions perdre SFX tD perdre perdriez perdre SFX tD perdre perdraient/s' perdre SFX tD perdre perde/m's' perdre SFX tD perdre perdes/t' perdre SFX tD perdre perdisse/m' perdre SFX tD perdre perdisses/t' perdre SFX tD perdre perdît/s' perdre SFX tD perdre perdissions perdre SFX tD perdre perdissiez perdre SFX tD perdre perdissent/s' perdre SFX tD perdre perds/t' perdre SFX tD perdre perdons perdre SFX tD perdre perdez perdre SFX tE N 38 SFX tE dre dant dre SFX tE dre ds dre SFX tE dre d dre SFX tE dre dons dre SFX tE dre dez dre SFX tE dre dent dre SFX tE dre dais dre SFX tE dre dait dre SFX tE dre dions dre SFX tE dre diez dre SFX tE dre daient dre SFX tE dre dis dre SFX tE dre dit dre SFX tE dre dîmes dre SFX tE dre dîtes dre SFX tE dre dirent dre SFX tE dre drai dre SFX tE dre dras dre SFX tE dre dra dre SFX tE dre drons dre SFX tE dre drez dre SFX tE dre dront dre SFX tE dre drais dre SFX tE dre drait dre SFX tE dre drions dre SFX tE dre driez dre SFX tE dre draient dre SFX tE dre de dre SFX tE dre des dre SFX tE dre disse dre SFX tE dre disses dre SFX tE dre dît dre SFX tE dre dissions dre SFX tE dre dissiez dre SFX tE dre dissent dre SFX tE dre ds dre SFX tE dre dons dre SFX tE dre dez dre SFX tF Y 42 SFX tF rendre rendre/n'q'd'l'm't's' prendre SFX tF rendre renant/n'q'l'm't's' prendre SFX tF rendre ris/L'D'Q' prendre SFX tF rendre rise/L'D'Q' prendre SFX tF rendre rises/D'Q' prendre SFX tF rendre rends/n'q'j'l'm't' prendre SFX tF rendre rend/n'q'l'm't's' prendre SFX tF rendre renons/n'q'l't' prendre SFX tF rendre renez/n'q'l'm' prendre SFX tF rendre rennent/n'q'l'm't's' prendre SFX tF rendre renais/n'q'j'l'm't' prendre SFX tF rendre renait/n'q'l'm't's' prendre SFX tF rendre renions/n'q'l't' prendre SFX tF rendre reniez/n'q'l'm' prendre SFX tF rendre renaient/n'q'l'm't's' prendre SFX tF rendre ris/n'q'j'l'm't' prendre SFX tF rendre rit/n'q'l'm't's' prendre SFX tF rendre rîmes/n'q'l't' prendre SFX tF rendre rîtes/n'q'l'm' prendre SFX tF rendre rirent/n'q'l'm't's' prendre SFX tF rendre rendrai/n'q'j'l'm't' prendre SFX tF rendre rendras/n'q'l'm't' prendre SFX tF rendre rendra/n'q'l'm't's' prendre SFX tF rendre rendrons/n'q'l't' prendre SFX tF rendre rendrez/n'q'l'm' prendre SFX tF rendre rendront/n'q'l'm't's' prendre SFX tF rendre rendrais/n'q'j'l'm't' prendre SFX tF rendre rendrait/n'q'l'm't's' prendre SFX tF rendre rendrions/n'q'l't' prendre SFX tF rendre rendriez/n'q'l'm' prendre SFX tF rendre rendraient/n'q'l'm't's' prendre SFX tF rendre renne/n'q'j'l'm't's' prendre SFX tF rendre rennes/n'l'm't' prendre SFX tF rendre risse/n'q'j'l'm't' prendre SFX tF rendre risses/n'q'l'm't' prendre SFX tF rendre rît/n'q'l'm't's' prendre SFX tF rendre rissions/n'q'l't' prendre SFX tF rendre rissiez/n'q'l'm' prendre SFX tF rendre rissent/n'q'l'm't's' prendre SFX tF rendre rends/n'l'm' prendre SFX tF rendre renons/n'l' prendre SFX tF rendre renez/n'l'm' prendre SFX tG Y 42 SFX tG prendre prendre/m't's' prendre SFX tG prendre prenant/m't's' prendre SFX tG prendre pris/L'D'Q' prendre SFX tG prendre prise/L'D'Q' prendre SFX tG prendre prises/D'Q' prendre SFX tG prendre prends/m't' prendre SFX tG prendre prend/s' prendre SFX tG prendre prenons prendre SFX tG prendre prenez prendre SFX tG prendre prennent/s' prendre SFX tG prendre prenais/m't' prendre SFX tG prendre prenait/s' prendre SFX tG prendre prenions prendre SFX tG prendre preniez prendre SFX tG prendre prenaient/s' prendre SFX tG prendre pris/m't' prendre SFX tG prendre prit/s' prendre SFX tG prendre prîmes prendre SFX tG prendre prîtes prendre SFX tG prendre prirent/s' prendre SFX tG prendre prendrai/m' prendre SFX tG prendre prendras/t' prendre SFX tG prendre prendra/s' prendre SFX tG prendre prendrons prendre SFX tG prendre prendrez prendre SFX tG prendre prendront/s' prendre SFX tG prendre prendrais/m't' prendre SFX tG prendre prendrait/s' prendre SFX tG prendre prendrions prendre SFX tG prendre prendriez prendre SFX tG prendre prendraient/s' prendre SFX tG prendre prenne/m's' prendre SFX tG prendre prennes/t' prendre SFX tG prendre prisse/m' prendre SFX tG prendre prisses/t' prendre SFX tG prendre prît/s' prendre SFX tG prendre prissions prendre SFX tG prendre prissiez prendre SFX tG prendre prissent/s' prendre SFX tG prendre prends/t' prendre SFX tG prendre prenons prendre SFX tG prendre prenez prendre SFX tM N 31 SFX tM outre outant foutre SFX tM outre outu foutre SFX tM outre outus foutre SFX tM outre outue foutre SFX tM outre outues foutre SFX tM outre ous foutre SFX tM outre out foutre SFX tM outre outons foutre SFX tM outre outez foutre SFX tM outre outent foutre SFX tM outre outais foutre SFX tM outre outait foutre SFX tM outre outions foutre SFX tM outre outiez foutre SFX tM outre outaient foutre SFX tM outre outrai foutre SFX tM outre outras foutre SFX tM outre outra foutre SFX tM outre outrons foutre SFX tM outre outrez foutre SFX tM outre outront foutre SFX tM outre outrais foutre SFX tM outre outrait foutre SFX tM outre outrions foutre SFX tM outre outriez foutre SFX tM outre outraient foutre SFX tM outre oute foutre SFX tM outre outes foutre SFX tM outre ous foutre SFX tM outre outons foutre SFX tM outre outez foutre SFX tU N 4 SFX tU istre issu tistre SFX tU istre issus tistre SFX tU istre issue tistre SFX tU istre issues tistre SFX uA Y 45 SFX uA tre tre/n'q'd'l'm't's' tre SFX uA tre tant/n'q'l'm't's' tre SFX uA tre tu/L'D'Q' tre SFX uA tre tus/D'Q' tre SFX uA tre tue/L'D'Q' tre SFX uA tre tues/D'Q' tre SFX uA ttre ts/n'q'j'l'm't' ttre SFX uA ttre t/n'q'l'm't's' ttre SFX uA tre ts/n'q'j'l'm't' embatre SFX uA tre t/n'q'l'm't's' embatre SFX uA tre tons/n'q'l't' tre SFX uA tre tez/n'q'l'm' tre SFX uA tre tent/n'q'l'm't's' tre SFX uA tre tais/n'q'j'l'm't' tre SFX uA tre tait/n'q'l'm't's' tre SFX uA tre tions/n'q'l't' tre SFX uA tre tiez/n'q'l'm' tre SFX uA tre taient/n'q'l'm't's' tre SFX uA tre tis/n'q'j'l'm't' tre SFX uA tre tit/n'q'l'm't's' tre SFX uA tre tîmes/n'q'l't' tre SFX uA tre tîtes/n'q'l'm' tre SFX uA tre tirent/n'q'l'm't's' tre SFX uA tre trai/n'q'j'l'm't' tre SFX uA tre tras/n'q'l'm't' tre SFX uA tre tra/n'q'l'm't's' tre SFX uA tre trons/n'q'l't' tre SFX uA tre trez/n'q'l'm' tre SFX uA tre tront/n'q'l'm't's' tre SFX uA tre trais/n'q'j'l'm't' tre SFX uA tre trait/n'q'l'm't's' tre SFX uA tre trions/n'q'l't' tre SFX uA tre triez/n'q'l'm' tre SFX uA tre traient/n'q'l'm't's' tre SFX uA tre te/n'q'j'l'm't's' tre SFX uA tre tes/n'l'm't' tre SFX uA tre tisse/n'q'j'l'm't' tre SFX uA tre tisses/n'q'l'm't' tre SFX uA tre tît/n'q'l'm't's' tre SFX uA tre tissions/n'q'l't' tre SFX uA tre tissiez/n'q'l'm' tre SFX uA tre tissent/n'q'l'm't's' tre SFX uA tre s/n'l'm't' tre SFX uA tre tons/n'l' tre SFX uA tre tez/n'l'm' tre SFX uC Y 43 SFX uC battre battre/m't's' battre SFX uC battre battant/m't's' battre SFX uC battre battu battre SFX uC battre battus battre SFX uC battre battue battre SFX uC battre battues battre SFX uC battre bats/m't' battre SFX uC battre bat/s' battre SFX uC battre battons battre SFX uC battre battez battre SFX uC battre battent/s' battre SFX uC battre battais/m't' battre SFX uC battre battait/s' battre SFX uC battre battions battre SFX uC battre battiez battre SFX uC battre battaient/s' battre SFX uC battre battis/m't' battre SFX uC battre battit/s' battre SFX uC battre battîmes battre SFX uC battre battîtes battre SFX uC battre battirent/s' battre SFX uC battre battrai/m' battre SFX uC battre battras/t' battre SFX uC battre battra/s' battre SFX uC battre battrons battre SFX uC battre battrez battre SFX uC battre battront/s' battre SFX uC battre battrais/m't' battre SFX uC battre battrait/s' battre SFX uC battre battrions battre SFX uC battre battriez battre SFX uC battre battraient/s' battre SFX uC battre batte/m's' battre SFX uC battre battes/t' battre SFX uC battre battisse/m' battre SFX uC battre battisses/t' battre SFX uC battre battît/s' battre SFX uC battre battissions battre SFX uC battre battissiez battre SFX uC battre battissent/s' battre SFX uC battre bats/t' battre SFX uC battre battons battre SFX uC battre battez battre SFX uD Y 33 SFX uD battre battre/s' battre SFX uD battre battant/s' battre SFX uD battre battu battre SFX uD battre battus battre SFX uD battre battue battre SFX uD battre battues battre SFX uD battre bat/s' battre SFX uD battre battons battre SFX uD battre battez battre SFX uD battre battent/s' battre SFX uD battre battait/s' battre SFX uD battre battions battre SFX uD battre battiez battre SFX uD battre battaient/s' battre SFX uD battre battit/s' battre SFX uD battre battîmes battre SFX uD battre battîtes battre SFX uD battre battirent/s' battre SFX uD battre battra/s' battre SFX uD battre battrons battre SFX uD battre battrez battre SFX uD battre battront/s' battre SFX uD battre battrait/s' battre SFX uD battre battrions battre SFX uD battre battriez battre SFX uD battre battraient/s' battre SFX uD battre batte/s' battre SFX uD battre battît/s' battre SFX uD battre battissions battre SFX uD battre battissiez battre SFX uD battre battissent/s' battre SFX uD battre battons-nous battre SFX uD battre battez-vous battre SFX vA Y 42 SFX vA ettre ettre/n'q'd'l'm't's' mettre SFX vA ettre ettant/n'q'l'm't's' mettre SFX vA ettre is/L'D'Q' mettre SFX vA ettre ise/L'D'Q' mettre SFX vA ettre ises/D'Q' mettre SFX vA ettre ets/n'q'j'l'm't' mettre SFX vA ettre et/n'q'l'm't's' mettre SFX vA ettre ettons/n'q'l't' mettre SFX vA ettre ettez/n'q'l'm' mettre SFX vA ettre ettent/n'q'l'm't's' mettre SFX vA ettre ettais/n'q'j'l'm't' mettre SFX vA ettre ettait/n'q'l'm't's' mettre SFX vA ettre ettions/n'q'l't' mettre SFX vA ettre ettiez/n'q'l'm' mettre SFX vA ettre ettaient/n'q'l'm't's' mettre SFX vA ettre is/n'q'j'l'm't' mettre SFX vA ettre it/n'q'l'm't's' mettre SFX vA ettre îmes/n'q'l't' mettre SFX vA ettre îtes/n'q'l'm' mettre SFX vA ettre irent/n'q'l'm't's' mettre SFX vA ettre ettrai/n'q'j'l'm't' mettre SFX vA ettre ettras/n'q'l'm't' mettre SFX vA ettre ettra/n'q'l'm't's' mettre SFX vA ettre ettrons/n'q'l't' mettre SFX vA ettre ettrez/n'q'l'm' mettre SFX vA ettre ettront/n'q'l'm't's' mettre SFX vA ettre ettrais/n'q'j'l'm't' mettre SFX vA ettre ettrait/n'q'l'm't's' mettre SFX vA ettre ettrions/n'q'l't' mettre SFX vA ettre ettriez/n'q'l'm' mettre SFX vA ettre ettraient/n'q'l'm't's' mettre SFX vA ettre ette/n'q'j'l'm't's' mettre SFX vA ettre ettes/n'l'm't' mettre SFX vA ettre isse/n'q'j'l'm't' mettre SFX vA ettre isses/n'q'l'm't' mettre SFX vA ettre ît/n'q'l'm't's' mettre SFX vA ettre issions/n'q'l't' mettre SFX vA ettre issiez/n'q'l'm' mettre SFX vA ettre issent/n'q'l'm't's' mettre SFX vA ettre ets/n'l'm't' mettre SFX vA ettre ettons/n'l' mettre SFX vA ettre ettez/n'l'm' mettre SFX vC Y 42 SFX vC mettre mettre/m't's' mettre SFX vC mettre mettant/m't's' mettre SFX vC mettre mis mettre SFX vC mettre mise mettre SFX vC mettre mises mettre SFX vC mettre mets/m't' mettre SFX vC mettre met/s' mettre SFX vC mettre mettons mettre SFX vC mettre mettez mettre SFX vC mettre mettent/s' mettre SFX vC mettre mettais/m't' mettre SFX vC mettre mettait/s' mettre SFX vC mettre mettions mettre SFX vC mettre mettiez mettre SFX vC mettre mettaient/s' mettre SFX vC mettre mis/m't' mettre SFX vC mettre mit/s' mettre SFX vC mettre mîmes mettre SFX vC mettre mîtes mettre SFX vC mettre mirent/s' mettre SFX vC mettre mettrai/m' mettre SFX vC mettre mettras/t' mettre SFX vC mettre mettra/s' mettre SFX vC mettre mettrons mettre SFX vC mettre mettrez mettre SFX vC mettre mettront/s' mettre SFX vC mettre mettrais/m't' mettre SFX vC mettre mettrait/s' mettre SFX vC mettre mettrions mettre SFX vC mettre mettriez mettre SFX vC mettre mettraient/s' mettre SFX vC mettre mette/m's' mettre SFX vC mettre mettes/t' mettre SFX vC mettre misse/m' mettre SFX vC mettre misses/t' mettre SFX vC mettre mît/s' mettre SFX vC mettre missions mettre SFX vC mettre missiez mettre SFX vC mettre missent/s' mettre SFX vC mettre mets mettre SFX vC mettre mettons mettre SFX vC mettre mettez mettre SFX wA N 42 SFX wA eindre eignant eindre SFX wA eindre eint eindre SFX wA eindre eints eindre SFX wA eindre einte eindre SFX wA eindre eintes eindre SFX wA eindre eins eindre SFX wA eindre eint eindre SFX wA eindre eignons eindre SFX wA eindre eignez eindre SFX wA eindre eignent eindre SFX wA eindre eignais eindre SFX wA eindre eignait eindre SFX wA eindre eignions eindre SFX wA eindre eigniez eindre SFX wA eindre eignaient eindre SFX wA eindre eignis eindre SFX wA eindre eignit eindre SFX wA eindre eignîmes eindre SFX wA eindre eignîtes eindre SFX wA eindre eignirent eindre SFX wA eindre eindrai eindre SFX wA eindre eindras eindre SFX wA eindre eindra eindre SFX wA eindre eindrons eindre SFX wA eindre eindrez eindre SFX wA eindre eindront eindre SFX wA eindre eindrais eindre SFX wA eindre eindrait eindre SFX wA eindre eindrions eindre SFX wA eindre eindriez eindre SFX wA eindre eindraient eindre SFX wA eindre eigne eindre SFX wA eindre eignes eindre SFX wA eindre eignisse eindre SFX wA eindre eignisses eindre SFX wA eindre eignît eindre SFX wA eindre eignissions eindre SFX wA eindre eignissiez eindre SFX wA eindre eignissent eindre SFX wA eindre eins eindre SFX wA eindre eignons eindre SFX wA eindre eignez eindre SFX wB Y 43 SFX wB indre indre/n'q'd'l'm't's' indre SFX wB indre ignant/n'q'l'm't's' indre SFX wB indre int/L'D'Q' indre SFX wB indre ints/D'Q' indre SFX wB indre inte/L'D'Q' indre SFX wB indre intes/D'Q' indre SFX wB indre ins/n'q'j'l'm't' indre SFX wB indre int/n'q'l'm't's' indre SFX wB indre ignons/n'q'l't' indre SFX wB indre ignez/n'q'l'm' indre SFX wB indre ignent/n'q'l'm't's' indre SFX wB indre ignais/n'q'j'l'm't' indre SFX wB indre ignait/n'q'l'm't's' indre SFX wB indre ignions/n'q'l't' indre SFX wB indre igniez/n'q'l'm' indre SFX wB indre ignaient/n'q'l'm't's' indre SFX wB indre ignis/n'q'j'l'm't' indre SFX wB indre ignit/n'q'l'm't's' indre SFX wB indre ignîmes/n'q'l't' indre SFX wB indre ignîtes/n'q'l'm' indre SFX wB indre ignirent/n'q'l'm't's' indre SFX wB indre indrai/n'q'j'l'm't' indre SFX wB indre indras/n'q'l'm't' indre SFX wB indre indra/n'q'l'm't's' indre SFX wB indre indrons/n'q'l't' indre SFX wB indre indrez/n'q'l'm' indre SFX wB indre indront/n'q'l'm't's' indre SFX wB indre indrais/n'q'j'l'm't' indre SFX wB indre indrait/n'q'l'm't's' indre SFX wB indre indrions/n'q'l't' indre SFX wB indre indriez/n'q'l'm' indre SFX wB indre indraient/n'q'l'm't's' indre SFX wB indre igne/n'q'j'l'm't's' indre SFX wB indre ignes/n'l'm't' indre SFX wB indre ignisse/n'q'j'l'm't' indre SFX wB indre ignisses/n'q'l'm't' indre SFX wB indre ignît/n'q'l'm't's' indre SFX wB indre ignissions/n'q'l't' indre SFX wB indre ignissiez/n'q'l'm' indre SFX wB indre ignissent/n'q'l'm't's' indre SFX wB indre ins/n'l'm't' indre SFX wB indre ignons/n'l' indre SFX wB indre ignez/n'l'm' indre SFX wD N 45 SFX wD aire aisant faire SFX wD aire ait faire SFX wD aire aits faire SFX wD aire aite faire SFX wD aire aites faire SFX wD aire ais faire SFX wD aire ait faire SFX wD aire aisons faire SFX wD aire aites faire SFX wD aire ont faire SFX wD aire aisais faire SFX wD aire aisait faire SFX wD aire aisions faire SFX wD aire aisiez faire SFX wD aire aisaient faire SFX wD aire is faire SFX wD aire it faire SFX wD aire îmes faire SFX wD aire îtes faire SFX wD aire irent faire SFX wD aire erai faire SFX wD aire eras faire SFX wD aire era faire SFX wD aire erons faire SFX wD aire erez faire SFX wD aire eront faire SFX wD aire erais faire SFX wD aire erait faire SFX wD aire erions faire SFX wD aire eriez faire SFX wD aire eraient faire SFX wD aire asse faire SFX wD aire asses faire SFX wD aire assions faire SFX wD aire assiez faire SFX wD aire assent faire SFX wD aire isse faire SFX wD aire isses faire SFX wD aire ît faire SFX wD aire issions faire SFX wD aire issiez faire SFX wD aire issent faire SFX wD aire ais faire SFX wD aire aisons faire SFX wD aire aites faire SFX wF N 13 SFX wF faire faisant faire SFX wF faire fait faire SFX wF faire faits faire SFX wF faire faite faire SFX wF faire faites faire SFX wF faire fais faire SFX wF faire fait faire SFX wF faire faisons faire SFX wF faire faites faire SFX wF faire font faire SFX wF faire fais faire SFX wF faire faisons faire SFX wF faire faites faire SFX wG N 5 SFX wG aire aisant faire SFX wG aire ait faire SFX wG aire aits faire SFX wG aire aite faire SFX wG aire aites faire SFX wL Y 32 SFX wL raire raire/n'q'd'l'm't's' traire SFX wL raire rayant/n'q'l'm't's' traire SFX wL raire rait/L'D'Q' traire SFX wL raire raits/D'Q' traire SFX wL raire raite/L'D'Q' traire SFX wL raire raites/D'Q' traire SFX wL raire rais/n'q'j'l'm't' traire SFX wL raire rait/n'q'l'm't's' traire SFX wL raire rayons/n'q'l't' traire SFX wL raire rayez/n'q'l'm' traire SFX wL raire raient/n'q'l'm't's' traire SFX wL raire rayais/n'q'j'l'm't' traire SFX wL raire rayait/n'q'l'm't's' traire SFX wL raire rayions/n'q'l't' traire SFX wL raire rayiez/n'q'l'm' traire SFX wL raire rayaient/n'q'l'm't's' traire SFX wL raire rairai/n'q'j'l'm't' traire SFX wL raire rairas/n'q'l'm't' traire SFX wL raire raira/n'q'l'm't's' traire SFX wL raire rairons/n'q'l't' traire SFX wL raire rairez/n'q'l'm' traire SFX wL raire rairont/n'q'l'm't's' traire SFX wL raire rairais/n'q'j'l'm't' traire SFX wL raire rairait/n'q'l'm't's' traire SFX wL raire rairions/n'q'l't' traire SFX wL raire rairiez/n'q'l'm' traire SFX wL raire rairaient/n'q'l'm't's' traire SFX wL raire raie/n'q'j'l'm't's' traire SFX wL raire raies/n'q'l'm't' traire SFX wL raire rais/n'l'm't' traire SFX wL raire rayons/n'l' traire SFX wL raire rayez/n'l'm' traire SFX wM N 28 SFX wM aire ayant raire SFX wM aire ait raire SFX wM aire ais raire SFX wM aire ait raire SFX wM aire ayons raire SFX wM aire ayez raire SFX wM aire aient raire SFX wM aire ayais raire SFX wM aire ayait raire SFX wM aire ayions raire SFX wM aire ayiez raire SFX wM aire ayaient raire SFX wM aire airai raire SFX wM aire airas raire SFX wM aire aira raire SFX wM aire airons raire SFX wM aire airez raire SFX wM aire airont raire SFX wM aire airais raire SFX wM aire airait raire SFX wM aire airions raire SFX wM aire airiez raire SFX wM aire airaient raire SFX wM aire aie raire SFX wM aire aies raire SFX wM aire ais raire SFX wM aire ayons raire SFX wM aire ayez raire SFX wN N 39 SFX wN aire aisant aire SFX wN aire ais aire SFX wN aire ait taire SFX wN aire aît plaire SFX wN aire aisons aire SFX wN aire aisez aire SFX wN aire aisent aire SFX wN aire aisais aire SFX wN aire aisait aire SFX wN aire aisions aire SFX wN aire aisiez aire SFX wN aire aisaient aire SFX wN aire us aire SFX wN aire ut aire SFX wN aire ûmes aire SFX wN aire ûtes aire SFX wN aire urent aire SFX wN aire airai aire SFX wN aire airas aire SFX wN aire aira aire SFX wN aire airons aire SFX wN aire airez aire SFX wN aire airont aire SFX wN aire airais aire SFX wN aire airait aire SFX wN aire airions aire SFX wN aire airiez aire SFX wN aire airaient aire SFX wN aire aise aire SFX wN aire aises aire SFX wN aire usse aire SFX wN aire usses aire SFX wN aire ût aire SFX wN aire ussions aire SFX wN aire ussiez aire SFX wN aire ussent aire SFX wN aire ais aire SFX wN aire aisons aire SFX wN aire aisez aire SFX wO N 42 SFX wO aindre aignant aindre SFX wO aindre aint aindre SFX wO aindre aints aindre SFX wO aindre ainte aindre SFX wO aindre aintes aindre SFX wO aindre ains aindre SFX wO aindre aint aindre SFX wO aindre aignons aindre SFX wO aindre aignez aindre SFX wO aindre aignent aindre SFX wO aindre aignais aindre SFX wO aindre aignait aindre SFX wO aindre aignions aindre SFX wO aindre aigniez aindre SFX wO aindre aignaient aindre SFX wO aindre aignis aindre SFX wO aindre aignit aindre SFX wO aindre aignîmes aindre SFX wO aindre aignîtes aindre SFX wO aindre aignirent aindre SFX wO aindre aindrai aindre SFX wO aindre aindras aindre SFX wO aindre aindra aindre SFX wO aindre aindrons aindre SFX wO aindre aindrez aindre SFX wO aindre aindront aindre SFX wO aindre aindrais aindre SFX wO aindre aindrait aindre SFX wO aindre aindrions aindre SFX wO aindre aindriez aindre SFX wO aindre aindraient aindre SFX wO aindre aigne aindre SFX wO aindre aignes aindre SFX wO aindre aignisse aindre SFX wO aindre aignisses aindre SFX wO aindre aignît aindre SFX wO aindre aignissions aindre SFX wO aindre aignissiez aindre SFX wO aindre aignissent aindre SFX wO aindre ains aindre SFX wO aindre aignons aindre SFX wO aindre aignez aindre SFX wP N 42 SFX wP aincre ainquant vaincre SFX wP aincre aincu vaincre SFX wP aincre aincus vaincre SFX wP aincre aincue vaincre SFX wP aincre aincues vaincre SFX wP aincre aincs vaincre SFX wP aincre ainc vaincre SFX wP aincre ainquons vaincre SFX wP aincre ainquez vaincre SFX wP aincre ainquent vaincre SFX wP aincre ainquais vaincre SFX wP aincre ainquait vaincre SFX wP aincre ainquions vaincre SFX wP aincre ainquiez vaincre SFX wP aincre ainquaient vaincre SFX wP aincre ainquis vaincre SFX wP aincre ainquit vaincre SFX wP aincre ainquîmes vaincre SFX wP aincre ainquîtes vaincre SFX wP aincre ainquirent vaincre SFX wP aincre aincrai vaincre SFX wP aincre aincras vaincre SFX wP aincre aincra vaincre SFX wP aincre aincrons vaincre SFX wP aincre aincrez vaincre SFX wP aincre aincront vaincre SFX wP aincre aincrais vaincre SFX wP aincre aincrait vaincre SFX wP aincre aincrions vaincre SFX wP aincre aincriez vaincre SFX wP aincre aincraient vaincre SFX wP aincre ainque vaincre SFX wP aincre ainques vaincre SFX wP aincre ainquisse vaincre SFX wP aincre ainquisses vaincre SFX wP aincre ainquît vaincre SFX wP aincre ainquissions vaincre SFX wP aincre ainquissiez vaincre SFX wP aincre ainquissent vaincre SFX wP aincre aincs vaincre SFX wP aincre ainquons vaincre SFX wP aincre ainquez vaincre SFX wQ Y 42 SFX wQ tre tre/n'q'd'm't's' tre SFX wQ aître aissant/n'q'd'm't's' aître SFX wQ aître ais/n'q'j'm't' aître SFX wQ aître aît/n'q'm't's' aître SFX wQ aître aissons/n'q't' aître SFX wQ aître aissez/n'q'm' aître SFX wQ aître aissent/n'q'm't's' aître SFX wQ aître aissais/n'q'j'm't' aître SFX wQ aître aissait/n'q'm't's' aître SFX wQ aître aissions/n'q't' aître SFX wQ aître aissiez/n'q'm' aître SFX wQ aître aissaient/n'q'm't's' aître SFX wQ aître us/n'q'j'm't' aître SFX wQ aître ut/n'q'm't's' aître SFX wQ aître ûmes/n'q't' aître SFX wQ aître ûtes/n'q'm' aître SFX wQ aître urent/n'q'm't's' aître SFX wQ tre trai/n'q'j'm't' tre SFX wQ tre tras/n'q'm't' tre SFX wQ tre tra/n'q'm't's' tre SFX wQ tre trons/n'q't' tre SFX wQ tre trez/n'q'm' tre SFX wQ tre tront/n'q'm't's' tre SFX wQ tre trais/n'q'j'm't' tre SFX wQ tre trait/n'q'm't's' tre SFX wQ tre trions/n'q't' tre SFX wQ tre triez/n'q'm' tre SFX wQ tre traient/n'q'm't's' tre SFX wQ aître aisse/n'q'j'm't's' aître SFX wQ aître aisses/n'q'm't' aître SFX wQ aître usse/n'q'j'm't' aître SFX wQ aître usses/n'q'm't' aître SFX wQ aître ût/n'q'm't's' aître SFX wQ aître ussions/n'q't' aître SFX wQ aître ussiez/n'q'm' aître SFX wQ aître ussent/n'q'm't's' aître SFX wQ aître ais/n'm' paraître SFX wQ aître ais connaître SFX wQ aître aissons/n' paraître SFX wQ aître aissons connaître SFX wQ aître aissez/n'm' paraître SFX wQ aître aissez connaître SFX wR N 42 SFX wR aître aissant naître SFX wR aître é naître SFX wR aître és naître SFX wR aître ée naître SFX wR aître ées naître SFX wR aître ais naître SFX wR aître aît naître SFX wR aître aissons naître SFX wR aître aissez naître SFX wR aître aissent naître SFX wR aître aissais naître SFX wR aître aissait naître SFX wR aître aissions naître SFX wR aître aissiez naître SFX wR aître aissaient naître SFX wR aître aquis naître SFX wR aître aquit naître SFX wR aître aquîmes naître SFX wR aître aquîtes naître SFX wR aître aquirent naître SFX wR tre trai tre SFX wR tre tras tre SFX wR tre tra tre SFX wR tre trons tre SFX wR tre trez tre SFX wR tre tront tre SFX wR tre trais tre SFX wR tre trait tre SFX wR tre trions tre SFX wR tre triez tre SFX wR tre traient tre SFX wR aître aisse naître SFX wR aître aisses naître SFX wR aître aquisse naître SFX wR aître aquisses naître SFX wR aître aquît naître SFX wR aître aquissions naître SFX wR aître aquissiez naître SFX wR aître aquissent naître SFX wR aître ais naître SFX wR aître aissons naître SFX wR aître aissez naître SFX wS N 42 SFX wS aître aissant paître SFX wS aître u repaître SFX wS aître us repaître SFX wS aître ue repaître SFX wS aître ues repaître SFX wS aître ais paître SFX wS aître aît paître SFX wS aître aissons paître SFX wS aître aissez paître SFX wS aître aissent paître SFX wS aître aissais paître SFX wS aître aissait paître SFX wS aître aissions paître SFX wS aître aissiez paître SFX wS aître aissaient paître SFX wS aître us repaître SFX wS aître ut repaître SFX wS aître ûmes repaître SFX wS aître ûtes repaître SFX wS aître urent repaître SFX wS tre trai tre SFX wS tre tras tre SFX wS tre tra tre SFX wS tre trons tre SFX wS tre trez tre SFX wS tre tront tre SFX wS tre trais tre SFX wS tre trait tre SFX wS tre trions tre SFX wS tre triez tre SFX wS tre traient tre SFX wS aître aisse paître SFX wS aître aisses paître SFX wS aître usse repaître SFX wS aître usses repaître SFX wS aître ût repaître SFX wS aître ussions repaître SFX wS aître ussiez repaître SFX wS aître ussent repaître SFX wS aître ais paître SFX wS aître aissons paître SFX wS aître aissez paître SFX wT N 46 SFX wT roître roissant croître SFX wT roître rû recroître SFX wT roître rûs recroître SFX wT roître rûe recroître SFX wT roître rûes recroître SFX wT roître ru décroître SFX wT roître rus décroître SFX wT roître rue décroître SFX wT roître rues décroître SFX wT roître rois .croître SFX wT roître roît .croître SFX wT roître roissons croître SFX wT roître roissez croître SFX wT roître roissent croître SFX wT roître roissais croître SFX wT roître roissait croître SFX wT roître roissions croître SFX wT roître roissiez croître SFX wT roître roissaient croître SFX wT roître rus .croître SFX wT roître rut .croître SFX wT roître rûmes croître SFX wT roître rûtes croître SFX wT roître rurent .croître SFX wT tre trai tre SFX wT tre tras tre SFX wT tre tra tre SFX wT tre trons tre SFX wT tre trez tre SFX wT tre tront tre SFX wT tre trais tre SFX wT tre trait tre SFX wT tre trions tre SFX wT tre triez tre SFX wT tre traient tre SFX wT roître roisse croître SFX wT roître roisses croître SFX wT roître russe .croître SFX wT roître russes .croître SFX wT roître rût croître SFX wT roître russions .croître SFX wT roître russiez .croître SFX wT roître russent .croître SFX wT roître rois .croître SFX wT roître roissons croître SFX wT roître roissez croître SFX wU N 15 SFX wU roître rû croître SFX wU roître rûs croître SFX wU roître rûe croître SFX wU roître rûes croître SFX wU roître roîs croître SFX wU roître roît croître SFX wU roître rûs croître SFX wU roître rût croître SFX wU roître rûrent croître SFX wU roître rûsse croître SFX wU roître rûsses croître SFX wU roître rûssions croître SFX wU roître rûssiez croître SFX wU roître rûssent croître SFX wU roître roîs croître SFX wV Y 43 SFX wV tre tre/n'q'd'l'm't's' tre SFX wV croître croissant/n'q'd'l'm't's' croître SFX wV croître cru/L'D'Q' croître SFX wV croître crus/D'Q' croître SFX wV croître crue/L'D'Q' croître SFX wV croître crues/D'Q' croître SFX wV croître crois/n'q'j'l'm't' croître SFX wV croître croît/n'q'l's' croître SFX wV croître croissons/n'q'l' croître SFX wV croître croissez/n'q'l' croître SFX wV croître croissent/n'q'l's' croître SFX wV croître croissais/n'q'j'l'm't' croître SFX wV croître croissait/n'q'l's' croître SFX wV croître croissions/n'q'l' croître SFX wV croître croissiez/n'q'l' croître SFX wV croître croissaient/n'q'l's' croître SFX wV croître crus/n'q'j'l'm't' croître SFX wV croître crut/n'q'l's' croître SFX wV croître crûmes/n'q'l' croître SFX wV croître crûtes/n'q'l' croître SFX wV croître crurent/n'q'l's' croître SFX wV tre trai/n'q'j'l'm' tre SFX wV tre tras/n'q'l't' tre SFX wV tre tra/n'q'l's' tre SFX wV tre trons/n'q'l' tre SFX wV tre trez/n'q'l' tre SFX wV tre tront/n'q'l's' tre SFX wV tre trais/n'q'j'l'm't' tre SFX wV tre trait/n'q'l's' tre SFX wV tre trions/n'q'l' tre SFX wV tre triez/n'q'l' tre SFX wV tre traient/n'q'l's' tre SFX wV croître croisse/n'q'j'l'm's' croître SFX wV croître croisses/n'q'l't' croître SFX wV croître crusse/n'q'j'l'm' croître SFX wV croître crusses/n'q'l't' croître SFX wV croître crût/n'q'l's' croître SFX wV croître crussions/n'q'l' croître SFX wV croître crussiez/n'q'l' croître SFX wV croître crussent/n'q'l's' croître SFX wV croître crois/n'l'm' croître SFX wV croître croissons/n'l' croître SFX wV croître croissez/n'l'm' croître SFX xA N 42 SFX xA roire royant croire SFX xA roire ru croire SFX xA roire rus croire SFX xA roire rue croire SFX xA roire rues croire SFX xA roire rois croire SFX xA roire roit croire SFX xA roire royons croire SFX xA roire royez croire SFX xA roire roient croire SFX xA roire royais croire SFX xA roire royait croire SFX xA roire royions croire SFX xA roire royiez croire SFX xA roire royaient croire SFX xA roire rus croire SFX xA roire rut croire SFX xA roire rûmes croire SFX xA roire rûtes croire SFX xA roire rurent croire SFX xA roire roirai croire SFX xA roire roiras croire SFX xA roire roira croire SFX xA roire roirons croire SFX xA roire roirez croire SFX xA roire roiront croire SFX xA roire roirais croire SFX xA roire roirait croire SFX xA roire roirions croire SFX xA roire roiriez croire SFX xA roire roiraient croire SFX xA roire roie croire SFX xA roire roies croire SFX xA roire russe croire SFX xA roire russes croire SFX xA roire rût croire SFX xA roire russions croire SFX xA roire russiez croire SFX xA roire russent croire SFX xA roire rois croire SFX xA roire royons croire SFX xA roire royez croire SFX xC N 42 SFX xC oire uvant boire SFX xC oire u boire SFX xC oire us boire SFX xC oire ue boire SFX xC oire ues boire SFX xC oire ois boire SFX xC oire oit boire SFX xC oire uvons boire SFX xC oire uvez boire SFX xC oire oivent boire SFX xC oire uvais boire SFX xC oire uvait boire SFX xC oire uvions boire SFX xC oire uviez boire SFX xC oire uvaient boire SFX xC oire us boire SFX xC oire ut boire SFX xC oire ûmes boire SFX xC oire ûtes boire SFX xC oire urent boire SFX xC oire oirai boire SFX xC oire oiras boire SFX xC oire oira boire SFX xC oire oirons boire SFX xC oire oirez boire SFX xC oire oiront boire SFX xC oire oirais boire SFX xC oire oirait boire SFX xC oire oirions boire SFX xC oire oiriez boire SFX xC oire oiraient boire SFX xC oire oive boire SFX xC oire oives boire SFX xC oire usse boire SFX xC oire usses boire SFX xC oire ût boire SFX xC oire ussions boire SFX xC oire ussiez boire SFX xC oire ussent boire SFX xC oire ois boire SFX xC oire uvons boire SFX xC oire uvez boire SFX xD Y 43 SFX xD boire boire/m't's' boire SFX xD boire buvant/m't's' boire SFX xD boire bu boire SFX xD boire bus boire SFX xD boire bue boire SFX xD boire bues boire SFX xD boire bois/m't' boire SFX xD boire boit/s' boire SFX xD boire buvons boire SFX xD boire buvez boire SFX xD boire boivent/s' boire SFX xD boire buvais/m't' boire SFX xD boire buvait/s' boire SFX xD boire buvions boire SFX xD boire buviez boire SFX xD boire buvaient/s' boire SFX xD boire bus/m't' boire SFX xD boire but/s' boire SFX xD boire bûmes boire SFX xD boire bûtes boire SFX xD boire burent/s' boire SFX xD boire boirai/m' boire SFX xD boire boiras/t' boire SFX xD boire boira/s' boire SFX xD boire boirons boire SFX xD boire boirez boire SFX xD boire boiront/s' boire SFX xD boire boirais/m't' boire SFX xD boire boirait/s' boire SFX xD boire boirions boire SFX xD boire boiriez boire SFX xD boire boiraient/s' boire SFX xD boire boive/m's' boire SFX xD boire boives/t' boire SFX xD boire busse/m' boire SFX xD boire busses/t' boire SFX xD boire bût/s' boire SFX xD boire bussions boire SFX xD boire bussiez boire SFX xD boire bussent/s' boire SFX xD boire bois/t' boire SFX xD boire buvons boire SFX xD boire buvez boire SFX xJ N 3 SFX xJ clure clus clure SFX xJ clure cluse clure SFX xJ clure cluses clure SFX xK Y 40 SFX xK clure clure/n'q'd'l'm't's' clure SFX xK clure cluant/n'q'l'm't's' clure SFX xK clure clus/L'D'Q' clure SFX xK clure cluse/L'D'Q' clure SFX xK clure cluses/D'Q' clure SFX xK clure clus/n'q'j'l' clure SFX xK clure clut/n'q'l' clure SFX xK clure cluons/n'q'l' clure SFX xK clure cluez/n'q'l' clure SFX xK clure cluent/n'q'l' clure SFX xK clure cluais/n'q'j'l' clure SFX xK clure cluait/n'q'l' clure SFX xK clure cluions/n'q'l' clure SFX xK clure cluiez/n'q'l' clure SFX xK clure cluaient/n'q'l' clure SFX xK clure clûmes/n'q'l' clure SFX xK clure clûtes/n'q'l' clure SFX xK clure clurent/n'q'l' clure SFX xK clure clurai/n'q'j'l' clure SFX xK clure cluras/n'q'l' clure SFX xK clure clura/n'q'l' clure SFX xK clure clurons/n'q'l' clure SFX xK clure clurez/n'q'l' clure SFX xK clure cluront/n'q'l' clure SFX xK clure clurais/n'q'j'l' clure SFX xK clure clurait/n'q'l' clure SFX xK clure clurions/n'q'l' clure SFX xK clure cluriez/n'q'l' clure SFX xK clure cluraient/n'q'l' clure SFX xK clure clue/n'q'j'l' clure SFX xK clure clues/n'q'l' clure SFX xK clure clusse/n'q'j'l' clure SFX xK clure clusses/n'q'l' clure SFX xK clure clût/n'q'l' clure SFX xK clure clussions/n'q'l' clure SFX xK clure clussiez/n'q'l' clure SFX xK clure clussent/n'q'l' clure SFX xK clure clus/n'l' clure SFX xK clure cluons/n'l' clure SFX xK clure cluez/n'l' clure SFX xL Y 44 SFX xL clure clure/n'q'd'l'm't's' clure SFX xL clure cluant/n'q'l'm't's' clure SFX xL clure clus/L'D'Q' inclure SFX xL clure cluse/L'D'Q' inclure SFX xL clure cluses/D'Q' inclure SFX xL clure clu/L'D'Q' [eo].clure SFX xL clure clus/D'Q' [eo].clure SFX xL clure clue/L'D'Q' [eo].clure SFX xL clure clues/D'Q' [eo].clure SFX xL clure clus/n'q'j'l'm't' clure SFX xL clure clut/n'q'l'm't's' clure SFX xL clure cluons/n'q'l't' clure SFX xL clure cluez/n'q'l'm' clure SFX xL clure cluent/n'q'l'm't's' clure SFX xL clure cluais/n'q'j'l'm't' clure SFX xL clure cluait/n'q'l'm't's' clure SFX xL clure cluions/n'q'l't' clure SFX xL clure cluiez/n'q'l'm' clure SFX xL clure cluaient/n'q'l'm't's' clure SFX xL clure clûmes/n'q'l't' clure SFX xL clure clûtes/n'q'l'm' clure SFX xL clure clurent/n'q'l'm't's' clure SFX xL clure clurai/n'q'j'l'm't' clure SFX xL clure cluras/n'q'l'm't' clure SFX xL clure clura/n'q'l'm't's' clure SFX xL clure clurons/n'q'l't' clure SFX xL clure clurez/n'q'l'm' clure SFX xL clure cluront/n'q'l'm't's' clure SFX xL clure clurais/n'q'j'l'm't' clure SFX xL clure clurait/n'q'l'm't's' clure SFX xL clure clurions/n'q'l't' clure SFX xL clure cluriez/n'q'l'm' clure SFX xL clure cluraient/n'q'l'm't's' clure SFX xL clure clue/n'q'j'l'm't's' clure SFX xL clure clues/n'l'm't' clure SFX xL clure clusse/n'q'j'l'm't' clure SFX xL clure clusses/n'q'l'm't' clure SFX xL clure clût/n'q'l'm't's' clure SFX xL clure clussions/n'q'l't' clure SFX xL clure clussiez/n'q'l'm' clure SFX xL clure clussent/n'q'l'm't's' clure SFX xL clure clus/n'l'm't' clure SFX xL clure cluons/n'l' clure SFX xL clure cluez/n'l'm' clure SFX xM N 14 SFX xM ourdre ourdant sourdre SFX xM ourdre ourd sourdre SFX xM ourdre ourdent sourdre SFX xM ourdre ourdait sourdre SFX xM ourdre ourdaient sourdre SFX xM ourdre ourdit sourdre SFX xM ourdre ourdirent sourdre SFX xM ourdre ourdra sourdre SFX xM ourdre ourdront sourdre SFX xM ourdre ourdrait sourdre SFX xM ourdre ourdraient sourdre SFX xM ourdre ourde sourdre SFX xM ourdre ourdît sourdre SFX xM ourdre ourdissent sourdre SFX xN Y 46 SFX xN soudre soudre/n'q'd'l'm't's' soudre SFX xN soudre solvant/n'q'l'm't's' soudre SFX xN soudre solu résoudre SFX xN soudre solus résoudre SFX xN soudre solue résoudre SFX xN soudre solues résoudre SFX xN soudre sous/L'D'Q' soudre SFX xN soudre soute/L'D'Q' soudre SFX xN soudre soutes/D'Q' soudre SFX xN soudre sous/n'q'j'l'm't' soudre SFX xN soudre sout/n'q'l'm't's' soudre SFX xN soudre solvons/n'q'l't' soudre SFX xN soudre solvez/n'q'l'm' soudre SFX xN soudre solvent/n'q'l'm't's' soudre SFX xN soudre solvais/n'q'j'l'm't' soudre SFX xN soudre solvait/n'q'l'm't's' soudre SFX xN soudre solvions/n'q'l't' soudre SFX xN soudre solviez/n'q'l'm' soudre SFX xN soudre solvaient/n'q'l'm't's' soudre SFX xN soudre solus/n'q'j'l'm't' soudre SFX xN soudre solut/n'q'l'm't's' soudre SFX xN soudre solûmes/n'q'l't' soudre SFX xN soudre solûtes/n'q'l'm' soudre SFX xN soudre solurent/n'q'l'm't's' soudre SFX xN soudre soudrai/n'q'j'l'm't' soudre SFX xN soudre soudras/n'q'l'm't' soudre SFX xN soudre soudra/n'q'l'm't's' soudre SFX xN soudre soudrons/n'q'l't' soudre SFX xN soudre soudrez/n'q'l'm' soudre SFX xN soudre soudront/n'q'l'm't's' soudre SFX xN soudre soudrais/n'q'j'l'm't' soudre SFX xN soudre soudrait/n'q'l'm't's' soudre SFX xN soudre soudrions/n'q'l't' soudre SFX xN soudre soudriez/n'q'l'm' soudre SFX xN soudre soudraient/n'q'l'm't's' soudre SFX xN soudre solve/n'q'j'l'm't's' soudre SFX xN soudre solves/n'l'm't' soudre SFX xN soudre solusse/n'q'j'l'm't' soudre SFX xN soudre solusses/n'q'l'm't' soudre SFX xN soudre solût/n'q'l'm't's' soudre SFX xN soudre solussions/n'q'l't' soudre SFX xN soudre solussiez/n'q'l'm' soudre SFX xN soudre solussent/n'q'l'm't's' soudre SFX xN soudre sous/n'l'm' soudre SFX xN soudre solvons/n'l' soudre SFX xN soudre solvez/n'l'm' soudre SFX xO N 42 SFX xO oudre ousant coudre SFX xO oudre ousu coudre SFX xO oudre ousus coudre SFX xO oudre ousue coudre SFX xO oudre ousues coudre SFX xO oudre ouds coudre SFX xO oudre oud coudre SFX xO oudre ousons coudre SFX xO oudre ousez coudre SFX xO oudre ousent coudre SFX xO oudre ousais coudre SFX xO oudre ousait coudre SFX xO oudre ousions coudre SFX xO oudre ousiez coudre SFX xO oudre ousaient coudre SFX xO oudre ousis coudre SFX xO oudre ousit coudre SFX xO oudre ousîmes coudre SFX xO oudre ousîtes coudre SFX xO oudre ousirent coudre SFX xO oudre oudrai coudre SFX xO oudre oudras coudre SFX xO oudre oudra coudre SFX xO oudre oudrons coudre SFX xO oudre oudrez coudre SFX xO oudre oudront coudre SFX xO oudre oudrais coudre SFX xO oudre oudrait coudre SFX xO oudre oudrions coudre SFX xO oudre oudriez coudre SFX xO oudre oudraient coudre SFX xO oudre ouse coudre SFX xO oudre ouses coudre SFX xO oudre ousisse coudre SFX xO oudre ousisses coudre SFX xO oudre ousît coudre SFX xO oudre ousissions coudre SFX xO oudre ousissiez coudre SFX xO oudre ousissent coudre SFX xO oudre ouds coudre SFX xO oudre ousons coudre SFX xO oudre ousez coudre SFX xP Y 43 SFX xP oudre oudre/n'q'd'l' moudre SFX xP oudre oulant/n'q'l' moudre SFX xP oudre oulu/L'D'Q' moudre SFX xP oudre oulus/D'Q' moudre SFX xP oudre oulue/L'D'Q' moudre SFX xP oudre oulues/D'Q' moudre SFX xP oudre ouds/n'q'l' moudre SFX xP oudre oud/n'q'l' moudre SFX xP oudre oulons/n'q'l' moudre SFX xP oudre oulez/n'q'l' moudre SFX xP oudre oulent/n'q'l' moudre SFX xP oudre oulais/n'q'l' moudre SFX xP oudre oulait/n'q'l' moudre SFX xP oudre oulions/n'q'l' moudre SFX xP oudre ouliez/n'q'l' moudre SFX xP oudre oulaient/n'q'l' moudre SFX xP oudre oulus/n'q'l' moudre SFX xP oudre oulut/n'q'l' moudre SFX xP oudre oulûmes/n'q'l' moudre SFX xP oudre oulûtes/n'q'l' moudre SFX xP oudre oulurent/n'q'l' moudre SFX xP oudre oudrai/n'q'l' moudre SFX xP oudre oudras/n'q'l' moudre SFX xP oudre oudra/n'q'l' moudre SFX xP oudre oudrons/n'q'l' moudre SFX xP oudre oudrez/n'q'l' moudre SFX xP oudre oudront/n'q'l' moudre SFX xP oudre oudrais/n'q'l' moudre SFX xP oudre oudrait/n'q'l' moudre SFX xP oudre oudrions/n'q'l' moudre SFX xP oudre oudriez/n'q'l' moudre SFX xP oudre oudraient/n'q'l' moudre SFX xP oudre oule/n'q'l' moudre SFX xP oudre oules/n'l' moudre SFX xP oudre oulusse/n'q'l' moudre SFX xP oudre oulusses/n'q'l' moudre SFX xP oudre oulût/n'q'l' moudre SFX xP oudre oulussions/n'q'l' moudre SFX xP oudre oulussiez/n'q'l' moudre SFX xP oudre oulussent/n'q'l' moudre SFX xP oudre ouds/n'l'm' moudre SFX xP oudre oulons/n'l' moudre SFX xP oudre oulez/n'l'm' moudre SFX xQ N 42 SFX xQ uivre uivant suivre SFX xQ uivre uivi suivre SFX xQ uivre uivis suivre SFX xQ uivre uivie suivre SFX xQ uivre uivies suivre SFX xQ uivre uis suivre SFX xQ uivre uit suivre SFX xQ uivre uivons suivre SFX xQ uivre uivez suivre SFX xQ uivre uivent suivre SFX xQ uivre uivais suivre SFX xQ uivre uivait suivre SFX xQ uivre uivions suivre SFX xQ uivre uiviez suivre SFX xQ uivre uivaient suivre SFX xQ uivre uivis suivre SFX xQ uivre uivit suivre SFX xQ uivre uivîmes suivre SFX xQ uivre uivîtes suivre SFX xQ uivre uivirent suivre SFX xQ uivre uivrai suivre SFX xQ uivre uivras suivre SFX xQ uivre uivra suivre SFX xQ uivre uivrons suivre SFX xQ uivre uivrez suivre SFX xQ uivre uivront suivre SFX xQ uivre uivrais suivre SFX xQ uivre uivrait suivre SFX xQ uivre uivrions suivre SFX xQ uivre uivriez suivre SFX xQ uivre uivraient suivre SFX xQ uivre uive suivre SFX xQ uivre uives suivre SFX xQ uivre uivisse suivre SFX xQ uivre uivisses suivre SFX xQ uivre uivît suivre SFX xQ uivre uivissions suivre SFX xQ uivre uivissiez suivre SFX xQ uivre uivissent suivre SFX xQ uivre uis suivre SFX xQ uivre uivons suivre SFX xQ uivre uivez suivre SFX xR Y 16 SFX xR suivre suivre/s' suivre SFX xR suivre suivant/s' suivre SFX xR suivre suivi suivre SFX xR suivre suit/s' suivre SFX xR suivre suivent/s' suivre SFX xR suivre suivait/s' suivre SFX xR suivre suivaient/s' suivre SFX xR suivre suivit/s' suivre SFX xR suivre suivirent/s' suivre SFX xR suivre suivra/s' suivre SFX xR suivre suivront/s' suivre SFX xR suivre suivrait/s' suivre SFX xR suivre suivraient/s' suivre SFX xR suivre suive/s' suivre SFX xR suivre suivît/s' suivre SFX xR suivre suivissent/s' suivre SFX xS N 38 SFX xS ivre ivant vivre SFX xS ivre is vivre SFX xS ivre it vivre SFX xS ivre ivons vivre SFX xS ivre ivez vivre SFX xS ivre ivent vivre SFX xS ivre ivais vivre SFX xS ivre ivait vivre SFX xS ivre ivions vivre SFX xS ivre iviez vivre SFX xS ivre ivaient vivre SFX xS ivre écus vivre SFX xS ivre écut vivre SFX xS ivre écûmes vivre SFX xS ivre écûtes vivre SFX xS ivre écurent vivre SFX xS ivre ivrai vivre SFX xS ivre ivras vivre SFX xS ivre ivra vivre SFX xS ivre ivrons vivre SFX xS ivre ivrez vivre SFX xS ivre ivront vivre SFX xS ivre ivrais vivre SFX xS ivre ivrait vivre SFX xS ivre ivrions vivre SFX xS ivre ivriez vivre SFX xS ivre ivraient vivre SFX xS ivre ive vivre SFX xS ivre ives vivre SFX xS ivre écusse vivre SFX xS ivre écusses vivre SFX xS ivre écût vivre SFX xS ivre écussions vivre SFX xS ivre écussiez vivre SFX xS ivre écussent vivre SFX xS ivre is vivre SFX xS ivre ivons vivre SFX xS ivre ivez vivre SFX y1 Y 43 SFX y1 crire crire/n'q'd'l'm't's' crire SFX y1 crire crivant/n'q'l'm't's' crire SFX y1 crire crit/L'D'Q' crire SFX y1 crire crits/D'Q' crire SFX y1 crire crite/L'D'Q' crire SFX y1 crire crites/D'Q' crire SFX y1 crire cris/n'q'j'l'm't' crire SFX y1 crire crit/n'q'l'm't's' crire SFX y1 crire crivons/n'q'l't' crire SFX y1 crire crivez/n'q'l'm' crire SFX y1 crire crivent/n'q'l'm't's' crire SFX y1 crire crivais/n'q'j'l'm't' crire SFX y1 crire crivait/n'q'l'm't's' crire SFX y1 crire crivions/n'q'l't' crire SFX y1 crire criviez/n'q'l'm' crire SFX y1 crire crivaient/n'q'l'm't's' crire SFX y1 crire crivis/n'q'j'l'm't' crire SFX y1 crire crivit/n'q'l'm't's' crire SFX y1 crire crivîmes/n'q'l't' crire SFX y1 crire crivîtes/n'q'l'm' crire SFX y1 crire crivirent/n'q'l'm't's' crire SFX y1 crire crirai/n'q'j'l'm't' crire SFX y1 crire criras/n'q'l'm't' crire SFX y1 crire crira/n'q'l'm't's' crire SFX y1 crire crirons/n'q'l't' crire SFX y1 crire crirez/n'q'l'm' crire SFX y1 crire criront/n'q'l'm't's' crire SFX y1 crire crirais/n'q'j'l'm't' crire SFX y1 crire crirait/n'q'l'm't's' crire SFX y1 crire cririons/n'q'l't' crire SFX y1 crire cririez/n'q'l'm' crire SFX y1 crire criraient/n'q'l'm't's' crire SFX y1 crire crive/n'q'j'l'm't's' crire SFX y1 crire crives/n'l'm't' crire SFX y1 crire crivisse/n'q'j'l'm't' crire SFX y1 crire crivisses/n'q'l'm't' crire SFX y1 crire crivît/n'q'l'm't's' crire SFX y1 crire crivissions/n'q'l't' crire SFX y1 crire crivissiez/n'q'l'm' crire SFX y1 crire crivissent/n'q'l'm't's' crire SFX y1 crire cris/n'l'm't' crire SFX y1 crire crivons/n'l' crire SFX y1 crire crivez/n'l'm' crire SFX yA N 42 SFX yA ire isant lire SFX yA ire u lire SFX yA ire us lire SFX yA ire ue lire SFX yA ire ues lire SFX yA ire is lire SFX yA ire it lire SFX yA ire isons lire SFX yA ire isez lire SFX yA ire isent lire SFX yA ire isais lire SFX yA ire isait lire SFX yA ire isions lire SFX yA ire isiez lire SFX yA ire isaient lire SFX yA ire us lire SFX yA ire ut lire SFX yA ire ûmes lire SFX yA ire ûtes lire SFX yA ire urent lire SFX yA ire irai lire SFX yA ire iras lire SFX yA ire ira lire SFX yA ire irons lire SFX yA ire irez lire SFX yA ire iront lire SFX yA ire irais lire SFX yA ire irait lire SFX yA ire irions lire SFX yA ire iriez lire SFX yA ire iraient lire SFX yA ire ise lire SFX yA ire ises lire SFX yA ire usse lire SFX yA ire usses lire SFX yA ire ût lire SFX yA ire ussions lire SFX yA ire ussiez lire SFX yA ire ussent lire SFX yA ire is lire SFX yA ire isons lire SFX yA ire isez lire SFX yB Y 43 SFX yB lire lire/n'q'd'l'm't's' lire SFX yB lire lisant/n'q'l'm't's' lire SFX yB lire lu/L'D'Q' lire SFX yB lire lus/D'Q' lire SFX yB lire lue/L'D'Q' lire SFX yB lire lues/D'Q' lire SFX yB lire lis/n'q'j'l'm't' lire SFX yB lire lit/n'q'l'm't's' lire SFX yB lire lisons/n'q'l't' lire SFX yB lire lisez/n'q'l'm' lire SFX yB lire lisent/n'q'l'm't's' lire SFX yB lire lisais/n'q'j'l'm't' lire SFX yB lire lisait/n'q'l'm't's' lire SFX yB lire lisions/n'q'l't' lire SFX yB lire lisiez/n'q'l'm' lire SFX yB lire lisaient/n'q'l'm't's' lire SFX yB lire lus/n'q'j'l'm't' lire SFX yB lire lut/n'q'l'm't's' lire SFX yB lire lûmes/n'q'l't' lire SFX yB lire lûtes/n'q'l'm' lire SFX yB lire lurent/n'q'l'm't's' lire SFX yB lire lirai/n'q'j'l'm't' lire SFX yB lire liras/n'q'l'm't' lire SFX yB lire lira/n'q'l'm't's' lire SFX yB lire lirons/n'q'l't' lire SFX yB lire lirez/n'q'l'm' lire SFX yB lire liront/n'q'l'm't's' lire SFX yB lire lirais/n'q'j'l'm't' lire SFX yB lire lirait/n'q'l'm't's' lire SFX yB lire lirions/n'q'l't' lire SFX yB lire liriez/n'q'l'm' lire SFX yB lire liraient/n'q'l'm't's' lire SFX yB lire lise/n'q'j'l'm't's' lire SFX yB lire lises/n'l'm't' lire SFX yB lire lusse/n'q'j'l'm't' lire SFX yB lire lusses/n'q'l'm't' lire SFX yB lire lût/n'q'l'm't's' lire SFX yB lire lussions/n'q'l't' lire SFX yB lire lussiez/n'q'l'm' lire SFX yB lire lussent/n'q'l'm't's' lire SFX yB lire lis/n'l'm' lire SFX yB lire lisons/n'l' lire SFX yB lire lisez/n'l'm' lire SFX yC N 40 SFX yC ire isant dire SFX yC ire it dire SFX yC ire its dire SFX yC ire ite dire SFX yC ire ites dire SFX yC ire is dire SFX yC ire it dire SFX yC ire isons dire SFX yC ire ites dire SFX yC ire isent dire SFX yC ire isais dire SFX yC ire isait dire SFX yC ire isions dire SFX yC ire isiez dire SFX yC ire isaient dire SFX yC ire îmes dire SFX yC ire îtes dire SFX yC ire irent dire SFX yC ire irai dire SFX yC ire iras dire SFX yC ire ira dire SFX yC ire irons dire SFX yC ire irez dire SFX yC ire iront dire SFX yC ire irais dire SFX yC ire irait dire SFX yC ire irions dire SFX yC ire iriez dire SFX yC ire iraient dire SFX yC ire ise dire SFX yC ire ises dire SFX yC ire isse dire SFX yC ire isses dire SFX yC ire ît dire SFX yC ire issions dire SFX yC ire issiez dire SFX yC ire issent dire SFX yC ire is dire SFX yC ire isons dire SFX yC ire ites dire SFX yD Y 41 SFX yD dire dire/n'q'd'l'm't's' dire SFX yD dire disant/n'q'l'm't's' dire SFX yD dire dit/L'D'Q' dire SFX yD dire dits/D'Q' dire SFX yD dire dite/L'D'Q' dire SFX yD dire dites/D'Q' dire SFX yD dire dis/n'q'j'l'm't' dire SFX yD dire dit/n'q'l'm't's' dire SFX yD dire disons/n'q'l't' dire SFX yD dire disez/n'q'l'm' dire SFX yD dire disent/n'q'l'm't's' dire SFX yD dire disais/n'q'j'l'm't' dire SFX yD dire disait/n'q'l'm't's' dire SFX yD dire disions/n'q'l't' dire SFX yD dire disiez/n'q'l'm' dire SFX yD dire disaient/n'q'l'm't's' dire SFX yD dire dîmes/n'q'l't' dire SFX yD dire dîtes/n'q'l'm' dire SFX yD dire dirent/n'q'l'm't's' dire SFX yD dire dirai/n'q'j'l'm't' dire SFX yD dire diras/n'q'l'm't' dire SFX yD dire dira/n'q'l'm't's' dire SFX yD dire dirons/n'q'l't' dire SFX yD dire direz/n'q'l'm' dire SFX yD dire diront/n'q'l'm't's' dire SFX yD dire dirais/n'q'j'l'm't' dire SFX yD dire dirait/n'q'l'm't's' dire SFX yD dire dirions/n'q'l't' dire SFX yD dire diriez/n'q'l'm' dire SFX yD dire diraient/n'q'l'm't's' dire SFX yD dire dise/n'q'j'l'm't's' dire SFX yD dire dises/n'l'm't' dire SFX yD dire disse/n'q'j'l'm't' dire SFX yD dire disses/n'q'l'm't' dire SFX yD dire dît/n'q'l'm't's' dire SFX yD dire dissions/n'q'l't' dire SFX yD dire dissiez/n'q'l'm' dire SFX yD dire dissent/n'q'l'm't's' dire SFX yD dire dis/n'l'm't' dire SFX yD dire disons/n'l' dire SFX yD dire disez/n'l'm' dire SFX yE N 37 SFX yE édire édisant édire SFX yE édire édit édire SFX yE édire édis édire SFX yE édire édit édire SFX yE édire édisons édire SFX yE édire édisez édire SFX yE édire édisent édire SFX yE édire édisais édire SFX yE édire édisait édire SFX yE édire édisions édire SFX yE édire édisiez édire SFX yE édire édisaient édire SFX yE édire édîmes édire SFX yE édire édîtes édire SFX yE édire édirent édire SFX yE édire édirai édire SFX yE édire édiras édire SFX yE édire édira édire SFX yE édire édirons édire SFX yE édire édirez édire SFX yE édire édiront édire SFX yE édire édirais édire SFX yE édire édirait édire SFX yE édire édirions édire SFX yE édire édiriez édire SFX yE édire édiraient édire SFX yE édire édise édire SFX yE édire édises édire SFX yE édire édisse édire SFX yE édire édisses édire SFX yE édire édît édire SFX yE édire édissions édire SFX yE édire édissiez édire SFX yE édire édissent édire SFX yE édire édis édire SFX yE édire édisons édire SFX yE édire édisez édire SFX yF N 36 SFX yF audire audissant udire SFX yF audire audit udire SFX yF audire audits udire SFX yF audire audite udire SFX yF audire audites udire SFX yF audire audis udire SFX yF audire audit udire SFX yF audire audissons udire SFX yF audire audissez udire SFX yF audire audissent udire SFX yF audire audissais udire SFX yF audire audissait udire SFX yF audire audissions udire SFX yF audire audissiez udire SFX yF audire audissaient udire SFX yF audire audîmes udire SFX yF audire audîtes udire SFX yF audire audirent udire SFX yF audire audirai udire SFX yF audire audiras udire SFX yF audire audira udire SFX yF audire audirons udire SFX yF audire audirez udire SFX yF audire audiront udire SFX yF audire audirais udire SFX yF audire audirait udire SFX yF audire audirions udire SFX yF audire audiriez udire SFX yF audire audiraient udire SFX yF audire audisse udire SFX yF audire audisses udire SFX yF audire audisse udire SFX yF audire audît udire SFX yF audire audis udire SFX yF audire audissons udire SFX yF audire audissez udire SFX yG Y 38 SFX yG dire dire/m't's' dire SFX yG dire disant/m't's' dire SFX yG dire dit dire SFX yG dire dis/m't' dire SFX yG dire dit/s' dire SFX yG dire disons dire SFX yG dire disez dire SFX yG dire disent/s' dire SFX yG dire disais/m't' dire SFX yG dire disait/s' dire SFX yG dire disions dire SFX yG dire disiez dire SFX yG dire disaient/s' dire SFX yG dire dîmes dire SFX yG dire dîtes dire SFX yG dire dirent/s' dire SFX yG dire dirai/m' dire SFX yG dire diras/t' dire SFX yG dire dira/s' dire SFX yG dire dirons dire SFX yG dire direz dire SFX yG dire diront/s' dire SFX yG dire dirais/m't' dire SFX yG dire dirait/s' dire SFX yG dire dirions dire SFX yG dire diriez dire SFX yG dire diraient/s' dire SFX yG dire dise/m's' dire SFX yG dire dises/t' dire SFX yG dire disse/m' dire SFX yG dire disses/t' dire SFX yG dire dît/s' dire SFX yG dire dissions dire SFX yG dire dissiez dire SFX yG dire dissent/s' dire SFX yG dire dis/t' dire SFX yG dire disons dire SFX yG dire disez dire SFX yJ N 7 SFX yJ ruire ruissant uire SFX yJ ruire rui uire SFX yJ ruire ruit uire SFX yJ ruire ruissent uire SFX yJ ruire ruissait uire SFX yJ ruire ruissaient uire SFX yJ ruire ruisse uire SFX yK N 4 SFX yK bduire bduit uire SFX yK bduire bduits uire SFX yK bduire bduite uire SFX yK bduire bduites uire SFX yL Y 43 SFX yL uire uire/n'q'd'l'm't's' uire SFX yL uire uisant/n'q'l'm't's' uire SFX yL uire uit/L'D'Q' uire SFX yL uire uits/D'Q' uire SFX yL uire uite/L'D'Q' uire SFX yL uire uites/D'Q' uire SFX yL uire uis/n'q'j'l'm't' uire SFX yL uire uit/n'q'l'm't's' uire SFX yL uire uisons/n'q'l't' uire SFX yL uire uisez/n'q'l'm' uire SFX yL uire uisent/n'q'l'm't's' uire SFX yL uire uisais/n'q'j'l'm't' uire SFX yL uire uisait/n'q'l'm't's' uire SFX yL uire uisions/n'q'l't' uire SFX yL uire uisiez/n'q'l'm' uire SFX yL uire uisaient/n'q'l'm't's' uire SFX yL uire uisis/n'q'j'l'm't' uire SFX yL uire uisit/n'q'l'm't's' uire SFX yL uire uisîmes/n'q'l't' uire SFX yL uire uisîtes/n'q'l'm' uire SFX yL uire uisirent/n'q'l'm't's' uire SFX yL uire uirai/n'q'j'l't' uire SFX yL uire uiras/n'q'l'm' uire SFX yL uire uira/n'q'l'm't's' uire SFX yL uire uirons/n'q'l't' uire SFX yL uire uirez/n'q'l'm' uire SFX yL uire uiront/n'q'l'm't's' uire SFX yL uire uirais/n'q'j'l'm't' uire SFX yL uire uirait/n'q'l'm't's' uire SFX yL uire uirions/n'q'l't' uire SFX yL uire uiriez/n'q'l'm' uire SFX yL uire uiraient/n'q'l'm't's' uire SFX yL uire uise/n'q'j'l'm't's' uire SFX yL uire uises/n'l'm' uire SFX yL uire uisisse/n'q'j'l't' uire SFX yL uire uisisses/n'q'l'm' uire SFX yL uire uisît/n'q'l'm't's' uire SFX yL uire uisissions/n'q'l't' uire SFX yL uire uisissiez/n'q'l'm' uire SFX yL uire uisissent/n'q'l'm't's' uire SFX yL uire uis/n'l'm' uire SFX yL uire uisons/n'l' uire SFX yL uire uisez/n'l'm' uire SFX yM Y 43 SFX yM uire uire/n'q'd'l'm't's' uire SFX yM uire uisant/n'q'l'm't's' uire SFX yM uire uit/L'D'Q' uire SFX yM uire uits/D'Q' uire SFX yM uire uite/L'D'Q' uire SFX yM uire uites/D'Q' uire SFX yM uire uis/n'q'j'l'm't' uire SFX yM uire uit/n'q'l'm't's' uire SFX yM uire uisons/n'q'l't' uire SFX yM uire uisez/n'q'l'm' uire SFX yM uire uisent/n'q'l'm't's' uire SFX yM uire uisais/n'q'j'l'm't' uire SFX yM uire uisait/n'q'l'm't's' uire SFX yM uire uisions/n'q'l't' uire SFX yM uire uisiez/n'q'l'm' uire SFX yM uire uisaient/n'q'l'm't's' uire SFX yM uire uisis/n'q'j'l'm't' uire SFX yM uire uisit/n'q'l'm't's' uire SFX yM uire uisîmes/n'q'l't' uire SFX yM uire uisîtes/n'q'l'm' uire SFX yM uire uisirent/n'q'l'm't's' uire SFX yM uire uirai/n'q'j'l'm't' uire SFX yM uire uiras/n'q'l'm't' uire SFX yM uire uira/n'q'l'm't's' uire SFX yM uire uirons/n'q'l't' uire SFX yM uire uirez/n'q'l'm' uire SFX yM uire uiront/n'q'l'm't's' uire SFX yM uire uirais/n'q'j'l'm't' uire SFX yM uire uirait/n'q'l'm't's' uire SFX yM uire uirions/n'q'l't' uire SFX yM uire uiriez/n'q'l'm' uire SFX yM uire uiraient/n'q'l'm't's' uire SFX yM uire uise/n'q'j'l'm't's' uire SFX yM uire uises/n'l'm't' uire SFX yM uire uisisse/n'q'j'l'm't' uire SFX yM uire uisisses/n'q'l'm't' uire SFX yM uire uisît/n'q'l'm't's' uire SFX yM uire uisissions/n'q'l't' uire SFX yM uire uisissiez/n'q'l'm' uire SFX yM uire uisissent/n'q'l'm't's' uire SFX yM uire uis/n'l'm't' uire SFX yM uire uisons/n'l' uire SFX yM uire uisez/n'l'm' uire SFX yN Y 33 SFX yN truire truire/s' uire SFX yN truire truisant/s' uire SFX yN truire truit uire SFX yN truire truits uire SFX yN truire truite uire SFX yN truire truites uire SFX yN truire truit/s' uire SFX yN truire truisons uire SFX yN truire truisez uire SFX yN truire truisent/s' uire SFX yN truire truisait/s' uire SFX yN truire truisions uire SFX yN truire truisiez uire SFX yN truire truisaient/s' uire SFX yN truire truisit/s' uire SFX yN truire truisîmes uire SFX yN truire truisîtes uire SFX yN truire truisirent/s' uire SFX yN truire truira/s' uire SFX yN truire truirons uire SFX yN truire truirez uire SFX yN truire truiront/s' uire SFX yN truire truirait/s' uire SFX yN truire truirions uire SFX yN truire truiriez uire SFX yN truire truiraient/s' uire SFX yN truire truise/s' uire SFX yN truire truisît/s' uire SFX yN truire truisissions uire SFX yN truire truisissiez uire SFX yN truire truisissent/s' uire SFX yN truire truisons-nous uire SFX yN truire truisez-vous uire SFX yO Y 43 SFX yO détruire détruire/m't's' détruire SFX yO détruire détruisant/m't's' détruire SFX yO détruire détruit détruire SFX yO détruire détruits détruire SFX yO détruire détruite détruire SFX yO détruire détruites détruire SFX yO détruire détruis/m't' détruire SFX yO détruire détruit/s' détruire SFX yO détruire détruisons détruire SFX yO détruire détruisez détruire SFX yO détruire détruisent/s' détruire SFX yO détruire détruisais/m't' détruire SFX yO détruire détruisait/s' détruire SFX yO détruire détruisions détruire SFX yO détruire détruisiez détruire SFX yO détruire détruisaient/s' détruire SFX yO détruire détruisis/m't' détruire SFX yO détruire détruisit/s' détruire SFX yO détruire détruisîmes détruire SFX yO détruire détruisîtes détruire SFX yO détruire détruisirent/s' détruire SFX yO détruire détruirai/m' détruire SFX yO détruire détruiras/t' détruire SFX yO détruire détruira/s' détruire SFX yO détruire détruirons détruire SFX yO détruire détruirez détruire SFX yO détruire détruiront/s' détruire SFX yO détruire détruirais/m't' détruire SFX yO détruire détruirait/s' détruire SFX yO détruire détruirions détruire SFX yO détruire détruiriez détruire SFX yO détruire détruiraient/s' détruire SFX yO détruire détruise/m's' détruire SFX yO détruire détruises/t' détruire SFX yO détruire détruisisse/m' détruire SFX yO détruire détruisisses/t' détruire SFX yO détruire détruisît/s' détruire SFX yO détruire détruisissions détruire SFX yO détruire détruisissiez détruire SFX yO détruire détruisissent/s' détruire SFX yO détruire détruis/t' détruire SFX yO détruire détruisons détruire SFX yO détruire détruisez détruire SFX yU N 39 SFX yU uire uisant uire SFX yU uire ui uire SFX yU uire uis uire SFX yU uire uit uire SFX yU uire uisons uire SFX yU uire uisez uire SFX yU uire uisent uire SFX yU uire uisais uire SFX yU uire uisait uire SFX yU uire uisions uire SFX yU uire uisiez uire SFX yU uire uisaient uire SFX yU uire uisis uire SFX yU uire uisit uire SFX yU uire uisîmes uire SFX yU uire uisîtes uire SFX yU uire uisirent uire SFX yU uire uirai uire SFX yU uire uiras uire SFX yU uire uira uire SFX yU uire uirons uire SFX yU uire uirez uire SFX yU uire uiront uire SFX yU uire uirais uire SFX yU uire uirait uire SFX yU uire uirions uire SFX yU uire uiriez uire SFX yU uire uiraient uire SFX yU uire uise uire SFX yU uire uises uire SFX yU uire uisisse uire SFX yU uire uisisses uire SFX yU uire uisît uire SFX yU uire uisissions uire SFX yU uire uisissiez uire SFX yU uire uisissent uire SFX yU uire uis uire SFX yU uire uisons uire SFX yU uire uisez uire SFX yV N 44 SFX yV ire isant ire SFX yV ire it nfire SFX yV ire its nfire SFX yV ire ite nfire SFX yV ire ites nfire SFX yV ire is cire SFX yV ire ise cire SFX yV ire ises cire SFX yV ire i ffire SFX yV ire is ire SFX yV ire it ire SFX yV ire isons ire SFX yV ire isez ire SFX yV ire isent ire SFX yV ire isais ire SFX yV ire isait ire SFX yV ire isions ire SFX yV ire isiez ire SFX yV ire isaient ire SFX yV ire îmes ire SFX yV ire îtes ire SFX yV ire irent ire SFX yV ire irai ire SFX yV ire iras ire SFX yV ire ira ire SFX yV ire irons ire SFX yV ire irez ire SFX yV ire iront ire SFX yV ire irais ire SFX yV ire irait ire SFX yV ire irions ire SFX yV ire iriez ire SFX yV ire iraient ire SFX yV ire ise ire SFX yV ire ises ire SFX yV ire isse ire SFX yV ire isses ire SFX yV ire ît ire SFX yV ire issions ire SFX yV ire issiez ire SFX yV ire issent ire SFX yV ire is ire SFX yV ire isons ire SFX yV ire isez ire SFX yW N 37 SFX yW ire iant rire SFX yW ire i rire SFX yW ire is rire SFX yW ire it rire SFX yW ire ions rire SFX yW ire iez rire SFX yW ire ient rire SFX yW ire iais rire SFX yW ire iait rire SFX yW ire iions rire SFX yW ire iiez rire SFX yW ire iaient rire SFX yW ire îmes rire SFX yW ire îtes rire SFX yW ire irent rire SFX yW ire irai rire SFX yW ire iras rire SFX yW ire ira rire SFX yW ire irons rire SFX yW ire irez rire SFX yW ire iront rire SFX yW ire irais rire SFX yW ire irait rire SFX yW ire irions rire SFX yW ire iriez rire SFX yW ire iraient rire SFX yW ire ie rire SFX yW ire ies rire SFX yW ire isse rire SFX yW ire isses rire SFX yW ire ît rire SFX yW ire issions rire SFX yW ire issiez rire SFX yW ire issent rire SFX yW ire is rire SFX yW ire ions rire SFX yW ire iez rire SFX yX Y 30 SFX yX nuire nuire/s' nuire SFX yX nuire nuisant/s' nuire SFX yX nuire nui nuire SFX yX nuire nuit/s' nuire SFX yX nuire nuisons nuire SFX yX nuire nuisez nuire SFX yX nuire nuisent/s' nuire SFX yX nuire nuisait/s' nuire SFX yX nuire nuisions nuire SFX yX nuire nuisiez nuire SFX yX nuire nuisaient/s' nuire SFX yX nuire nuisit/s' nuire SFX yX nuire nuisîmes nuire SFX yX nuire nuisîtes nuire SFX yX nuire nuisirent/s' nuire SFX yX nuire nuira/s' nuire SFX yX nuire nuirons nuire SFX yX nuire nuirez nuire SFX yX nuire nuiront/s' nuire SFX yX nuire nuirait/s' nuire SFX yX nuire nuirions nuire SFX yX nuire nuiriez nuire SFX yX nuire nuiraient/s' nuire SFX yX nuire nuise/s' nuire SFX yX nuire nuisît/s' nuire SFX yX nuire nuisissions nuire SFX yX nuire nuisissiez nuire SFX yX nuire nuisissent/s' nuire SFX yX nuire nuisons-nous nuire SFX yX nuire nuisez-vous nuire SFX yY Y 4 SFX yY ccire ccire/n'q'd'l'm't's' occire SFX yY ccire ccis/L'D'Q' occire SFX yY ccire ccise/L'D'Q' occire SFX yY ccire ccises/D'Q' occire SFX yZ N 13 SFX yZ rire risant rire SFX yZ rire rit rire SFX yZ rire rits rire SFX yZ rire rite rire SFX yZ rire rites rire SFX yZ rire ris rire SFX yZ rire rit rire SFX yZ rire rirai rire SFX yZ rire riras rire SFX yZ rire rira rire SFX yZ rire rirais rire SFX yZ rire rirait rire SFX yZ rire ris rire SFX q+ Y 32 SFX q+ enir enu/L'D'Q' enir SFX q+ enir enus/D'Q' enir SFX q+ enir enue/L'D'Q' enir SFX q+ enir enues/D'Q' enir SFX q+ tir ti/L'D'Q' tir SFX q+ tir tis/D'Q' tir SFX q+ tir tie/L'D'Q' tir SFX q+ tir ties/D'Q' tir SFX q+ courir couru/L'D'Q' courir SFX q+ courir courus/D'Q' courir SFX q+ courir courue/L'D'Q' courir SFX q+ courir courues/D'Q' courir SFX q+ ivre écu vivre SFX q+ ivre écus vivre SFX q+ ivre écue vivre SFX q+ ivre écues vivre SFX q+ aire u aire SFX q+ aire us aire SFX q+ aire ue aire SFX q+ aire ues aire SFX q+ dre du dre SFX q+ dre dus dre SFX q+ dre due dre SFX q+ dre dues dre SFX q+ valoir valu .valoir SFX q+ valoir valus .valoir SFX q+ valoir value .valoir SFX q+ valoir values .valoir SFX q+ aître u/L'D'Q' aître SFX q+ aître us/D'Q' aître SFX q+ aître ue/L'D'Q' aître SFX q+ aître ues/D'Q' aître SFX q. Y 8 SFX q. enir enu/q' enir SFX q. tir ti/q' tir SFX q. courir couru/q' courir SFX q. ivre écu vivre SFX q. aire u aire SFX q. dre du dre SFX q. valoir valu/q' .valoir SFX q. aître u/q' aître |
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/fr-classique.dic version [8624e8d9fb].
more than 10,000 changes
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/fr-moderne.aff version [31703ae008].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 8383 8384 8385 8386 8387 8388 8389 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 8420 8421 8422 8423 8424 8425 8426 8427 8428 8429 8430 8431 8432 8433 8434 8435 8436 8437 8438 8439 8440 8441 8442 8443 8444 8445 8446 8447 8448 8449 8450 8451 8452 8453 8454 8455 8456 8457 8458 8459 8460 8461 8462 8463 8464 8465 8466 8467 8468 8469 8470 8471 8472 8473 8474 8475 8476 8477 8478 8479 8480 8481 8482 8483 8484 8485 8486 8487 8488 8489 8490 8491 8492 8493 8494 8495 8496 8497 8498 8499 8500 8501 8502 8503 8504 8505 8506 8507 8508 8509 8510 8511 8512 8513 8514 8515 8516 8517 8518 8519 8520 8521 8522 8523 8524 8525 8526 8527 8528 8529 8530 8531 8532 8533 8534 8535 8536 8537 8538 8539 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 8550 8551 8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 8566 8567 8568 8569 8570 8571 8572 8573 8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 8588 8589 8590 8591 8592 8593 8594 8595 8596 8597 8598 8599 8600 8601 8602 8603 8604 8605 8606 8607 8608 8609 8610 8611 8612 8613 8614 8615 8616 8617 8618 8619 8620 8621 8622 8623 8624 8625 8626 8627 8628 8629 8630 8631 8632 8633 8634 8635 8636 8637 8638 8639 8640 8641 8642 8643 8644 8645 8646 8647 8648 8649 8650 8651 8652 8653 8654 8655 8656 8657 8658 8659 8660 8661 8662 8663 8664 8665 8666 8667 8668 8669 8670 8671 8672 8673 8674 8675 8676 8677 8678 8679 8680 8681 8682 8683 8684 8685 8686 8687 8688 8689 8690 8691 8692 8693 8694 8695 8696 8697 8698 8699 8700 8701 8702 8703 8704 8705 8706 8707 8708 8709 8710 8711 8712 8713 8714 8715 8716 8717 8718 8719 8720 8721 8722 8723 8724 8725 8726 8727 8728 8729 8730 8731 8732 8733 8734 8735 8736 8737 8738 8739 8740 8741 8742 8743 8744 8745 8746 8747 8748 8749 8750 8751 8752 8753 8754 8755 8756 8757 8758 8759 8760 8761 8762 8763 8764 8765 8766 8767 8768 8769 8770 8771 8772 8773 8774 8775 8776 8777 8778 8779 8780 8781 8782 8783 8784 8785 8786 8787 8788 8789 8790 8791 8792 8793 8794 8795 8796 8797 8798 8799 8800 8801 8802 8803 8804 8805 8806 8807 8808 8809 8810 8811 8812 8813 8814 8815 8816 8817 8818 8819 8820 8821 8822 8823 8824 8825 8826 8827 8828 8829 8830 8831 8832 8833 8834 8835 8836 8837 8838 8839 8840 8841 8842 8843 8844 8845 8846 8847 8848 8849 8850 8851 8852 8853 8854 8855 8856 8857 8858 8859 8860 8861 8862 8863 8864 8865 8866 8867 8868 8869 8870 8871 8872 8873 8874 8875 8876 8877 8878 8879 8880 8881 8882 8883 8884 8885 8886 8887 8888 8889 8890 8891 8892 8893 8894 8895 8896 8897 8898 8899 8900 8901 8902 8903 8904 8905 8906 8907 8908 8909 8910 8911 8912 8913 8914 8915 8916 8917 8918 8919 8920 8921 8922 8923 8924 8925 8926 8927 8928 8929 8930 8931 8932 8933 8934 8935 8936 8937 8938 8939 8940 8941 8942 8943 8944 8945 8946 | # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. # AFFIXES DU DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “MODERNE” v6.0.3 # par Olivier R. -- licence MPL 2.0 # Généré le 25-04-2017 à 13:20 # Pour améliorer le dictionnaire, allez sur http://www.dicollecte.org/ SET UTF-8 WORDCHARS -’'1234567890. TRY esntiarulodcpmévqfgbhàxèjyêMILzACçôîPâùJFSûBVœRDGNETHXkïOwKWYUëQÉZŒüãÎáöóÈíæÅñäśńÿ MAP 25 MAP aàâäAÀÂÄ MAP eéèêëEÉÈÊË MAP iîïyIÎÏY MAP oôöOÔÖ MAP uùûüUÙÛÜ MAP cçCÇ MAP bB MAP dD MAP fF MAP gG MAP hH MAP jJ MAP kK MAP lL MAP mM MAP nN MAP pP MAP qQ MAP rR MAP sS MAP tT MAP vV MAP wW MAP xX MAP zZ REP 82 REP ^Ca$ Ça REP ^l l' REP ^d d' REP ^n n' REP ^s s' REP ^j j' REP ^m m' REP ^t t' REP ^c c' REP f ph REP ph f REP c qu REP qu c REP k qu REP qu k REP x ct REP ct x REP bb b REP b bb REP cc c REP c cc REP ff f REP f ff REP ll l REP l ll REP mm m REP m mm REP nn n REP n nn REP pp p REP p pp REP rr r REP r rr REP ss s REP s ss REP ss c REP c ss REP ss ç REP ç ss REP tt t REP t tt REP œ oe REP oe œ REP æ ae REP ae æ REP ai é REP é ai REP ai è REP è ai REP ai ê REP ê ai REP ei é REP é ei REP ei è REP è ei REP ei ê REP ê ei REP o au REP au o REP o eau REP eau o REP ett èt REP èt ett REP ell èl REP èl ell REP t th REP th t REP ième$ e REP ème$ e REP è$ e REP mn$ min REP ogue$ ogiste REP ogiste$ ogue REP disez$ dites REP fesez$ faites REP faisez$ faites REP puit puits REP sanctionnable punissable REP questionnable discutable REP antitartre détartrant REP email courriel REP construirent construisirent KEY azertyuiop|qsdfghjklmù|wxcvbn|aéz|yèu|iço|oàp|aqz|zse|edr|rft|tgy|yhu|uji|iko|olpm|qws|sxd|dcf|fvg|gbh|hnj ICONV 41 ICONV ’ ' ICONV ʼ ' ICONV ffi ffi ICONV ffl ffl ICONV ff ff ICONV ſt ft ICONV fi fi ICONV fl fl ICONV st st ICONV à à ICONV â â ICONV ä ä ICONV é é ICONV è è ICONV ê ê ICONV ë ë ICONV î î ICONV ï ï ICONV ô ô ICONV ö ö ICONV ù ù ICONV û û ICONV ü ü ICONV ÿ ÿ ICONV ç ç ICONV À À ICONV   ICONV Ä Ä ICONV É É ICONV È È ICONV Ê Ê ICONV Ë Ë ICONV Î Î ICONV Ï Ï ICONV Ô Ô ICONV Ö Ö ICONV Ù Ù ICONV Û Û ICONV Ü Ü ICONV Ÿ Ÿ ICONV Ç Ç OCONV 1 OCONV ' ’ FLAG long FULLSTRIP NEEDAFFIX () FORBIDDENWORD {} CIRCUMFIX ** KEEPCASE || NOSUGGEST -- BREAK 7 BREAK - BREAK . BREAK · BREAK ^' BREAK ^‘ BREAK '$ BREAK ’$ PFX L' Y 34 PFX L' 0 l' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX L' a l'A a PFX L' à l'À à PFX L' â l' â PFX L' e l'E e PFX L' é l'É é PFX L' è l'È è PFX L' ê l'Ê ê PFX L' i l'I i PFX L' î l'Î î PFX L' o l'O o PFX L' ô l'Ô ô PFX L' u l'U u PFX L' y l'Y y PFX L' h l'H h PFX L' œ l'Œ œ PFX L' æ l'Æ æ PFX L' 0 L' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX L' a L'A a PFX L' à L'À à PFX L' â L' â PFX L' e L'E e PFX L' é L'É é PFX L' è L'È è PFX L' ê L'Ê ê PFX L' i L'I i PFX L' î L'Î î PFX L' o L'O o PFX L' ô L'Ô ô PFX L' u L'U u PFX L' y L'Y y PFX L' h L'H h PFX L' œ L'Œ œ PFX L' æ L'Æ æ PFX D' Y 34 PFX D' 0 d' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX D' a d'A a PFX D' à d'À à PFX D' â d' â PFX D' e d'E e PFX D' é d'É é PFX D' è d'È è PFX D' ê d'Ê ê PFX D' i d'I i PFX D' î d'Î î PFX D' o d'O o PFX D' ô d'Ô ô PFX D' u d'U u PFX D' y d'Y y PFX D' h d'H h PFX D' œ d'Œ œ PFX D' æ d'Æ æ PFX D' 0 D' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX D' a D'A a PFX D' à D'À à PFX D' â D' â PFX D' e D'E e PFX D' é D'É é PFX D' è D'È è PFX D' ê D'Ê ê PFX D' i D'I i PFX D' î D'Î î PFX D' o D'O o PFX D' ô D'Ô ô PFX D' u D'U u PFX D' y D'Y y PFX D' h D'H h PFX D' œ D'Œ œ PFX D' æ D'Æ æ PFX Q' Y 34 PFX Q' 0 qu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q' a qu'A a PFX Q' à qu'À à PFX Q' â qu' â PFX Q' e qu'E e PFX Q' é qu'É é PFX Q' è qu'È è PFX Q' ê qu'Ê ê PFX Q' i qu'I i PFX Q' î qu'Î î PFX Q' o qu'O o PFX Q' ô qu'Ô ô PFX Q' u qu'U u PFX Q' y qu'Y y PFX Q' h qu'H h PFX Q' œ qu'Œ œ PFX Q' æ qu'Æ æ PFX Q' 0 Qu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q' a Qu'A a PFX Q' à Qu'À à PFX Q' â Qu' â PFX Q' e Qu'E e PFX Q' é Qu'É é PFX Q' è Qu'È è PFX Q' ê Qu'Ê ê PFX Q' i Qu'I i PFX Q' î Qu'Î î PFX Q' o Qu'O o PFX Q' ô Qu'Ô ô PFX Q' u Qu'U u PFX Q' y Qu'Y y PFX Q' h Qu'H h PFX Q' œ Qu'Œ œ PFX Q' æ Qu'Æ æ PFX Q* Y 6 PFX Q* 0 quoiqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q* 0 puisqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q* 0 lorsqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q* 0 Quoiqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q* 0 Puisqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q* 0 Lorsqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Qj Y 1 PFX Qj 0 jusqu' [aàâeèéêiîoôuyhœæ] PFX Si Y 1 PFX Si 0 s' . SFX S. Y 1 SFX S. 0 s [^sxz] SFX S= Y 1 SFX S= 0 s [^sxz] SFX X. Y 3 SFX X. 0 x [aeoœ]u SFX X. l ux al SFX X. il ux ail SFX A. Y 1 SFX A. 0 s [^sxz] SFX I. Y 1 SFX I. 0 s [^sxz] SFX F. Y 78 SFX F. 0 s [eë] SFX F. e 0 [éiï]e SFX F. e s [éiï]e SFX F. rice eur [dt]rice SFX F. rice eurs [dt]rice SFX F. de d de SFX F. de ds de SFX F. fe f fe SFX F. fe fs fe SFX F. anche anc anche SFX F. anche ancs anche SFX F. èche ec èche SFX F. èche ecs èche SFX F. aiche ais aiche SFX F. aîche ais aîche SFX F. khe kh khe SFX F. khe khs khe SFX F. he h [ut]he SFX F. he hs [ut]he SFX F. ke k [^è]ke SFX F. ke ks [^è]ke SFX F. èke ek èke SFX F. èke eks èke SFX F. le l [aiouûh]le SFX F. le ls [aiouûh]le SFX F. lle l [eiu]lle SFX F. lle ls [eiu]lle SFX F. olle ou olle SFX F. olle ous olle SFX F. olle ol olle SFX F. olle ols olle SFX F. ne n [aiouï]ne SFX F. ne ns [aiouï]ne SFX F. nne n [aeo]nne SFX F. nne ns [aeo]nne SFX F. ène en ène SFX F. ène ens ène SFX F. igne in igne SFX F. igne ins igne SFX F. re r [aiouûy]re SFX F. re rs [aiouûy]re SFX F. ère er ère SFX F. ère ers ère SFX F. se s [^us]se SFX F. esse e [^eo].esse SFX F. esse es [^eo].esse SFX F. rofesse rofès rofesse SFX F. eresse eur eresse SFX F. eresse eurs eresse SFX F. oresse eur oresse SFX F. oresse eurs oresse SFX F. sse s [^e]sse SFX F. use us [^eo]use SFX F. euse eur euse SFX F. euse eurs euse SFX F. te t [^èt]te SFX F. te ts [^èt]te SFX F. tte t tte SFX F. tte ts tte SFX F. ète et ète SFX F. ète ets ète SFX F. ue u [^gq]ue SFX F. ue us [^gq]ue SFX F. gue g gue SFX F. gue gs gue SFX F. cque c cque SFX F. cque cs cque SFX F. que c [^c]que SFX F. que cs [^c]que SFX F. ève ef ève SFX F. ève efs ève SFX F. ve f [iïu]ve SFX F. ve fs [iïu]ve SFX F. uë u uë SFX F. uë us uë SFX F. üe u üe SFX F. üe us üe SFX F. ze z ze SFX W. N 15 SFX W. e es e SFX W. ce x ce SFX W. use ux [eo]use SFX W. ausse aux ausse SFX W. ousse oux ousse SFX W. ale al ale SFX W. ale aux ale SFX W. elle eau elle SFX W. elle eaux elle SFX W. elle el [bv]elle SFX W. elle els [bv]elle SFX W. ieille ieux ieille SFX W. ieille ieil ieille SFX W. ofolle oufou ofolle SFX W. ofolle oufous ofolle SFX S* Y 2 SFX S* 0 0/D'L'Q' [^sxz] SFX S* 0 s/D'Q' [^sxz] SFX X* Y 4 SFX X* 0 0/D'L'Q' [ul] SFX X* 0 x/D'Q' [aeoœ]u SFX X* l ux/D'Q' al SFX X* il ux/D'Q' ail SFX A* Y 12 SFX A* an an/D'L'Q' an SFX A* an ans/D'Q' an SFX A* f f/D'L'Q' f SFX A* f fs/D'Q' f SFX A* h h/D'L'Q' h SFX A* h hs/D'Q' h SFX A* s s/D'L'Q' s SFX A* x x/D'L'Q' x SFX A* y y/D'L'Q' y SFX A* y ys/D'Q' y SFX A* zz zz/D'L'Q' zz SFX A* z z/D'L'Q' [^z]z SFX I* Y 11 SFX I* a a/D'L'Q' a SFX I* a as/D'Q' a SFX I* e e/D'L'Q' e SFX I* e es/D'Q' e SFX I* en en/D'L'Q' en SFX I* en ens/D'Q' en SFX I* o o/D'L'Q' o SFX I* o os/D'Q' o SFX I* um um/D'L'Q' um SFX I* um ums/D'Q' um SFX I* us us/D'L'Q' us SFX F* Y 59 SFX F* 0 0/D'L'Q' [eë] SFX F* 0 s/D'Q' [eë] SFX F* e 0/D'L'Q' [éiï]e SFX F* e s/D'Q' [éiï]e SFX F* rice eur/D'L'Q' [dt]rice SFX F* rice eurs/D'Q' [dt]rice SFX F* de d/D'L'Q' de SFX F* de ds/D'Q' de SFX F* he h/D'L'Q' [ut]he SFX F* he hs/D'Q' [ut]he SFX F* èke ek/D'L'Q' èke SFX F* èke eks/D'Q' èke SFX F* le l/D'L'Q' [aiouû]le SFX F* le ls/D'Q' [aiouû]le SFX F* lle l/D'L'Q' [eiu]lle SFX F* lle ls/D'Q' [eiu]lle SFX F* ne n/D'L'Q' [aiouï]ne SFX F* ne ns/D'Q' [aiouï]ne SFX F* nne n/D'L'Q' [aeo]nne SFX F* nne ns/D'Q' [aeo]nne SFX F* gne n/D'L'Q' igne SFX F* gne ns/D'Q' igne SFX F* re r/D'L'Q' [aiouûy]re SFX F* re rs/D'Q' [aiouûy]re SFX F* ère er/D'L'Q' ère SFX F* ère ers/D'Q' ère SFX F* se s/D'L'Q' [^us]se SFX F* esse e/D'L'Q' [^eo].esse SFX F* esse es/D'Q' [^eo].esse SFX F* eresse eur/D'L'Q' eresse SFX F* eresse eurs/D'Q' eresse SFX F* oresse eur/D'L'Q' oresse SFX F* oresse eurs/D'Q' oresse SFX F* sse s/D'L'Q' [^e]sse SFX F* use us/D'L'Q' [^eo]use SFX F* euse eur/D'L'Q' euse SFX F* euse eurs/D'Q' euse SFX F* te t/D'L'Q' [^èt]te SFX F* te ts/D'Q' [^èt]te SFX F* tte t/D'L'Q' tte SFX F* tte ts/D'Q' tte SFX F* ète et/D'L'Q' ète SFX F* ète ets/D'Q' ète SFX F* ue u/D'L'Q' [^gq]ue SFX F* ue us/D'Q' [^gq]ue SFX F* gue g/D'L'Q' gue SFX F* gue gs/D'Q' gue SFX F* cque c/D'L'Q' cque SFX F* cque cs/D'Q' cque SFX F* que c/D'L'Q' [^c]que SFX F* que cs/D'Q' [^c]que SFX F* ève ef/D'L'Q' ève SFX F* ève efs/D'Q' ève SFX F* ve f/D'L'Q' [iïu]ve SFX F* ve fs/D'Q' [iïu]ve SFX F* uë u/D'L'Q' uë SFX F* uë us/D'Q' uë SFX F* üe u/D'L'Q' üe SFX F* üe us/D'Q' üe SFX W* Y 10 SFX W* 0 0/D'L'Q' e SFX W* e es/D'Q' e SFX W* ce x/D'L'Q' ce SFX W* use ux/D'L'Q' [eo]use SFX W* ousse oux/D'L'Q' ousse SFX W* ausse aux/D'L'Q' ausse SFX W* ale al/D'L'Q' ale SFX W* ale aux/D'Q' ale SFX W* elle eau/D'L'Q' elle SFX W* elle eaux/D'Q' elle PFX Um Y 29 PFX Um 0 0/S. . PFX Um 0 l' [aàâeèéêiîoôuyœæ] PFX Um 0 d'/S. [aàâeèéêiîoôuyœæ] PFX Um 0 yotta/S. . PFX Um 0 zetta/S. . PFX Um 0 exa/S. . PFX Um 0 l'exa . PFX Um 0 d'exa/S. . PFX Um 0 peta/S. . PFX Um 0 téra/S. . PFX Um 0 giga/S. . PFX Um 0 méga/S. . PFX Um 0 kilo/S. . PFX Um 0 hecto/S. . PFX Um 0 l'hecto . PFX Um 0 d'hecto/S. . PFX Um 0 déca/S. . PFX Um 0 déci/S. . PFX Um 0 centi/S. . PFX Um 0 milli/S. . PFX Um 0 micro/S. . PFX Um 0 nano/S. . PFX Um 0 pico/S. . PFX Um 0 femto/S. . PFX Um 0 atto/S. . PFX Um 0 l'atto . PFX Um 0 d'atto/S. . PFX Um 0 zepto/S. . PFX Um 0 yocto/S. . PFX Ui Y 28 PFX Ui 0 l' [aàâeèéêiîoôuyœæ] PFX Ui 0 d' [aàâeèéêiîoôuyœæ] PFX Ui 0 yotta . PFX Ui 0 zetta . PFX Ui 0 exa . PFX Ui 0 l'exa . PFX Ui 0 d'exa . PFX Ui 0 peta . PFX Ui 0 téra . PFX Ui 0 giga . PFX Ui 0 méga . PFX Ui 0 kilo . PFX Ui 0 hecto . PFX Ui 0 l'hecto . PFX Ui 0 d'hecto . PFX Ui 0 déca . PFX Ui 0 déci . PFX Ui 0 centi . PFX Ui 0 milli . PFX Ui 0 micro . PFX Ui 0 nano . PFX Ui 0 pico . PFX Ui 0 femto . PFX Ui 0 atto . PFX Ui 0 l'atto . PFX Ui 0 d'atto . PFX Ui 0 zepto . PFX Ui 0 yocto . PFX U. Y 20 PFX U. 0 Y . PFX U. 0 Z . PFX U. 0 E . PFX U. 0 P . PFX U. 0 T . PFX U. 0 G . PFX U. 0 M . PFX U. 0 k . PFX U. 0 h . PFX U. 0 da . PFX U. 0 d . PFX U. 0 c . PFX U. 0 m . PFX U. 0 µ . PFX U. 0 n . PFX U. 0 p . PFX U. 0 f . PFX U. 0 a . PFX U. 0 z . PFX U. 0 y . PFX n' Y 1 PFX n' 0 n' [aàâeèéêiîoôuyhœæ] PFX q' Y 1 PFX q' 0 qu' [aàâeèéêiîoôuyhœæ] PFX d' Y 1 PFX d' 0 d' [aàâeèéêiîoôuyhœæ] PFX j' Y 1 PFX j' 0 j' [aàâeèéêiîoôuyhœæ] PFX c' Y 2 PFX c' 0 c' [eé] PFX c' 0 ç' a PFX l' Y 1 PFX l' 0 l' [aàâeèéêiîoôuyhœæ] PFX m' Y 1 PFX m' 0 m' [aàâeèéêiîoôuyhœæ] PFX t' Y 1 PFX t' 0 t' [aàâeèéêiîoôuyhœæ] PFX s' Y 1 PFX s' 0 s' [aàâeèéêiîoôuyhœæ] SFX zA Y 49 SFX zA voir voir/n'q'd'l'm't' avoir SFX zA voir yant/n'q'l'm't' avoir SFX zA avoir eu avoir SFX zA avoir eus avoir SFX zA avoir eue avoir SFX zA avoir eues avoir SFX zA voir i/n'q'j'l't' avoir SFX zA voir s/n'q'l'm't' avoir SFX zA voir 0/n'q'c'l'm't' avoir SFX zA voir vons/n'q'l't' avoir SFX zA voir vez/n'q'l'm' avoir SFX zA avoir ont/n'q'l'm't' avoir SFX zA voir vais/n'q'j'l'm't' avoir SFX zA voir vait/n'q'c'l'm't' avoir SFX zA voir vions/n'q'l't' avoir SFX zA voir viez/n'q'l'm' avoir SFX zA voir vaient/n'q'l'm't' avoir SFX zA avoir eus/n'q'j'l'm't' avoir SFX zA avoir eut/n'q'c'l'm't' avoir SFX zA avoir eûmes/n'q'l't' avoir SFX zA avoir eûtes/n'q'l'm' avoir SFX zA avoir eurent/n'q'l'm't' avoir SFX zA voir urai/n'q'j'l'm't' avoir SFX zA voir uras/n'q'l'm't' avoir SFX zA voir ura/n'q'c'l'm't' avoir SFX zA voir urons/n'q'l't' avoir SFX zA voir urez/n'q'l'm' avoir SFX zA voir uront/n'q'l'm't' avoir SFX zA voir urais/n'q'j'l'm't' avoir SFX zA voir urait/n'q'c'l'm't' avoir SFX zA voir urions/n'q'l't' avoir SFX zA voir uriez/n'q'l'm' avoir SFX zA voir uraient/n'q'l'm't' avoir SFX zA voir ie/n'j'l'm't' avoir SFX zA voir ies/n'l'm't' avoir SFX zA voir it/n'q'c'l'm't' avoir SFX zA voir yons/n'l't' avoir SFX zA voir yez/n'l'm' avoir SFX zA voir ient/n'q'l'm't' avoir SFX zA avoir eusse/n'q'j'l'm't' avoir SFX zA avoir eussé/n'q'l'm't' avoir SFX zA avoir eusses/n'q'l'm't' avoir SFX zA avoir eût/n'q'c'l'm't' avoir SFX zA avoir eussions/n'q'l't' avoir SFX zA avoir eussiez/n'q'l'm' avoir SFX zA avoir eussent/n'q'l'm't' avoir SFX zA voir ie/n' avoir SFX zA voir yons/n' avoir SFX zA voir yez/n' avoir SFX zE Y 45 SFX zE tre tre/n'q'd'l'm't's' être SFX zE être étant/n'q'l'm't's' être SFX zE être été être SFX zE être suis être SFX zE être es/n'q'l'm't' être SFX zE être est/n'q'c'l'm't's' être SFX zE être sommes être SFX zE tre tes/n'q'l'm' être SFX zE être sont être SFX zE être étais/n'q'j'l'm't' être SFX zE être était/n'q'c'l'm't's' être SFX zE être étions/n'q'l't' être SFX zE être étiez/n'q'l'm' être SFX zE être étaient/n'q'c'l'm't's' être SFX zE être fus être SFX zE être fut être SFX zE être fûmes être SFX zE être fûtes être SFX zE être furent être SFX zE être serai être SFX zE être seras être SFX zE être sera être SFX zE être serons être SFX zE être serez être SFX zE être seront être SFX zE être serais être SFX zE être serait être SFX zE être serions être SFX zE être seriez être SFX zE être seraient être SFX zE être sois être SFX zE être soit être SFX zE être soyons être SFX zE être soyez être SFX zE être soient être SFX zE être fusse être SFX zE être fussé être SFX zE être fusses être SFX zE être fût être SFX zE être fussions être SFX zE être fussiez être SFX zE être fussent être SFX zE être sois être SFX zE être soyons être SFX zE être soyez être SFX a0 N 101 SFX a0 er ant [^cg]er SFX a0 cer çant cer SFX a0 ger geant ger SFX a0 er e [^y]er SFX a0 yer ye [^ou]yer SFX a0 yer ie [aou]yer SFX a0 er es [^y]er SFX a0 yer yes [^ou]yer SFX a0 yer ies [aou]yer SFX a0 er ons [^cg]er SFX a0 cer çons cer SFX a0 ger geons ger SFX a0 er ez er SFX a0 er ent [^y]er SFX a0 yer yent [^ou]yer SFX a0 yer ient [aou]yer SFX a0 er ais [^cg]er SFX a0 cer çais cer SFX a0 ger geais ger SFX a0 er ait [^cg]er SFX a0 cer çait cer SFX a0 ger geait ger SFX a0 er ions er SFX a0 er iez er SFX a0 er aient [^cg]er SFX a0 cer çaient cer SFX a0 ger geaient ger SFX a0 er ai [^cg]er SFX a0 cer çai cer SFX a0 ger geai ger SFX a0 er as [^cg]er SFX a0 cer ças cer SFX a0 ger geas ger SFX a0 er a [^cg]er SFX a0 cer ça cer SFX a0 ger gea ger SFX a0 er âmes [^cg]er SFX a0 cer çâmes cer SFX a0 ger geâmes ger SFX a0 er âtes [^cg]er SFX a0 cer çâtes cer SFX a0 ger geâtes ger SFX a0 er èrent er SFX a0 er erai [^y]er SFX a0 yer yerai [^ou]yer SFX a0 yer ierai [aou]yer SFX a0 er eras [^y]er SFX a0 yer yeras [^ou]yer SFX a0 yer ieras [aou]yer SFX a0 er era [^y]er SFX a0 yer yera [^ou]yer SFX a0 yer iera [aou]yer SFX a0 er erons [^y]er SFX a0 yer yerons [^ou]yer SFX a0 yer ierons [aou]yer SFX a0 er erez [^y]er SFX a0 yer yerez [^ou]yer SFX a0 yer ierez [aou]yer SFX a0 er eront [^y]er SFX a0 yer yeront [^ou]yer SFX a0 yer ieront [aou]yer SFX a0 er erais [^y]er SFX a0 yer yerais [^ou]yer SFX a0 yer ierais [aou]yer SFX a0 er erait [^y]er SFX a0 yer yerait [^ou]yer SFX a0 yer ierait [aou]yer SFX a0 er erions [^y]er SFX a0 yer yerions [^ou]yer SFX a0 yer ierions [aou]yer SFX a0 er eriez [^y]er SFX a0 yer yeriez [^ou]yer SFX a0 yer ieriez [aou]yer SFX a0 er eraient [^y]er SFX a0 yer yeraient [^ou]yer SFX a0 yer ieraient [aou]yer SFX a0 er asse [^cg]er SFX a0 cer çasse cer SFX a0 ger geasse ger SFX a0 er asses [^cg]er SFX a0 cer çasses cer SFX a0 ger geasses ger SFX a0 er ât [^cg]er SFX a0 cer çât cer SFX a0 ger geât ger SFX a0 er assions [^cg]er SFX a0 cer çassions cer SFX a0 ger geassions ger SFX a0 er assiez [^cg]er SFX a0 cer çassiez cer SFX a0 ger geassiez ger SFX a0 er assent [^cg]er SFX a0 cer çassent cer SFX a0 ger geassent ger SFX a0 er e [^y]er SFX a0 yer ye [^ou]yer SFX a0 yer ie [aou]yer SFX a0 er ons [^cg]er SFX a0 cer çons cer SFX a0 ger geons ger SFX a0 er ez er SFX a1 Y 102 SFX a1 er er/n'q'd' er SFX a1 er ant/n'q' [^cg]er SFX a1 cer çant/n'q' cer SFX a1 ger geant/n'q' ger SFX a1 er e/n'q'j' [^y]er SFX a1 yer ye/n'q'j' [^ou]yer SFX a1 yer ie/n'q'j' [aou]yer SFX a1 er es/n' [^y]er SFX a1 yer yes/n' [^ou]yer SFX a1 yer ies/n' [aou]yer SFX a1 er ons/n' [^cg]er SFX a1 cer çons/n' cer SFX a1 ger geons/n' ger SFX a1 er ez/n' er SFX a1 er ent/n'q' [^y]er SFX a1 yer yent/n'q' [^ou]yer SFX a1 yer ient/n'q' [aou]yer SFX a1 er ais/n'j' [^cg]er SFX a1 cer çais/n'j' cer SFX a1 ger geais/n'j' ger SFX a1 er ait/n'q' [^cg]er SFX a1 cer çait/n'q' cer SFX a1 ger geait/n'q' ger SFX a1 er ions/n' er SFX a1 er iez/n' er SFX a1 er aient/n'q' [^cg]er SFX a1 cer çaient/n'q' cer SFX a1 ger geaient/n'q' ger SFX a1 er ai/n'j' [^cg]er SFX a1 cer çai/n'j' cer SFX a1 ger geai/n'j' ger SFX a1 er as/n' [^cg]er SFX a1 cer ças/n' cer SFX a1 ger geas/n' ger SFX a1 er a/n'q' [^cg]er SFX a1 cer ça/n'q' cer SFX a1 ger gea/n'q' ger SFX a1 er âmes/n' [^cg]er SFX a1 cer çâmes/n' cer SFX a1 ger geâmes/n' ger SFX a1 er âtes/n' [^cg]er SFX a1 cer çâtes/n' cer SFX a1 ger geâtes/n' ger SFX a1 er èrent/n'q' er SFX a1 er erai/n'j' [^y]er SFX a1 yer yerai/n'j' [^ou]yer SFX a1 yer ierai/n'j' [aou]yer SFX a1 er eras/n' [^y]er SFX a1 yer yeras/n' [^ou]yer SFX a1 yer ieras/n' [aou]yer SFX a1 er era/n'q' [^y]er SFX a1 yer yera/n'q' [^ou]yer SFX a1 yer iera/n'q' [aou]yer SFX a1 er erons/n' [^y]er SFX a1 yer yerons/n' [^ou]yer SFX a1 yer ierons/n' [aou]yer SFX a1 er erez/n' [^y]er SFX a1 yer yerez/n' [^ou]yer SFX a1 yer ierez/n' [aou]yer SFX a1 er eront/n'q' [^y]er SFX a1 yer yeront/n'q' [^ou]yer SFX a1 yer ieront/n'q' [aou]yer SFX a1 er erais/n'j' [^y]er SFX a1 yer yerais/n'j' [^ou]yer SFX a1 yer ierais/n'j' [aou]yer SFX a1 er erait/n'q' [^y]er SFX a1 yer yerait/n'q' [^ou]yer SFX a1 yer ierait/n'q' [aou]yer SFX a1 er erions/n' [^y]er SFX a1 yer yerions/n' [^ou]yer SFX a1 yer ierions/n' [aou]yer SFX a1 er eriez/n' [^y]er SFX a1 yer yeriez/n' [^ou]yer SFX a1 yer ieriez/n' [aou]yer SFX a1 er eraient/n'q' [^y]er SFX a1 yer yeraient/n'q' [^ou]yer SFX a1 yer ieraient/n'q' [aou]yer SFX a1 er asse/n'j' [^cg]er SFX a1 cer çasse/n'j' cer SFX a1 ger geasse/n'j' ger SFX a1 er asses/n' [^cg]er SFX a1 cer çasses/n' cer SFX a1 ger geasses/n' ger SFX a1 er ât/n'q' [^cg]er SFX a1 cer çât/n'q' cer SFX a1 ger geât/n'q' ger SFX a1 er assions/n' [^cg]er SFX a1 cer çassions/n' cer SFX a1 ger geassions/n' ger SFX a1 er assiez/n' [^cg]er SFX a1 cer çassiez/n' cer SFX a1 ger geassiez/n' ger SFX a1 er assent/n'q' [^cg]er SFX a1 cer çassent/n'q' cer SFX a1 ger geassent/n'q' ger SFX a1 er e/n' [^y]er SFX a1 yer ye/n' [^ou]yer SFX a1 yer ie/n' [aou]yer SFX a1 er ons/n' [^cg]er SFX a1 cer çons/n' cer SFX a1 ger geons/n' ger SFX a1 er ez/n' er SFX a2 Y 102 SFX a2 er er/n'q'd'l'm't's' er SFX a2 er ant/n'q'l'm't's' [^cg]er SFX a2 cer çant/n'q'l'm't's' cer SFX a2 ger geant/n'q'l'm't's' ger SFX a2 er e/n'q'j'l'm't's' [^y]er SFX a2 yer ye/n'q'j'l'm't's' [^ou]yer SFX a2 yer ie/n'q'j'l'm't's' [aou]yer SFX a2 er es/n'q'l'm' [^y]er SFX a2 yer yes/n'q'l'm' [^ou]yer SFX a2 yer ies/n'q'l'm' [aou]yer SFX a2 er ons/n'q'l't' [^cg]er SFX a2 cer çons/n'q'l't' cer SFX a2 ger geons/n'q'l't' ger SFX a2 er ez/n'q'l'm' er SFX a2 er ent/n'q'l'm't's' [^y]er SFX a2 yer yent/n'q'l'm't's' [^ou]yer SFX a2 yer ient/n'q'l'm't's' [aou]yer SFX a2 er ais/n'q'j'l'm't' [^cg]er SFX a2 cer çais/n'q'j'l'm't' cer SFX a2 ger geais/n'q'j'l'm't' ger SFX a2 er ait/n'q'l'm't's' [^cg]er SFX a2 cer çait/n'q'l'm't's' cer SFX a2 ger geait/n'q'l'm't's' ger SFX a2 er ions/n'q'l't' er SFX a2 er iez/n'q'l'm' er SFX a2 er aient/n'q'l'm't's' [^cg]er SFX a2 cer çaient/n'q'l'm't's' cer SFX a2 ger geaient/n'q'l'm't's' ger SFX a2 er ai/n'q'j'l't' [^cg]er SFX a2 cer çai/n'q'j'l't' cer SFX a2 ger geai/n'q'j'l't' ger SFX a2 er as/n'q'l'm' [^cg]er SFX a2 cer ças/n'q'l'm' cer SFX a2 ger geas/n'q'l'm' ger SFX a2 er a/n'q'l'm't's' [^cg]er SFX a2 cer ça/n'q'l'm't's' cer SFX a2 ger gea/n'q'l'm't's' ger SFX a2 er âmes/n'q'l't' [^cg]er SFX a2 cer çâmes/n'q'l't' cer SFX a2 ger geâmes/n'q'l't' ger SFX a2 er âtes/n'q'l'm' [^cg]er SFX a2 cer çâtes/n'q'l'm' cer SFX a2 ger geâtes/n'q'l'm' ger SFX a2 er èrent/n'q'l'm't's' er SFX a2 er erai/n'q'j'l't' [^y]er SFX a2 yer yerai/n'q'j'l't' [^ou]yer SFX a2 yer ierai/n'q'j'l't' [aou]yer SFX a2 er eras/n'q'l'm' [^y]er SFX a2 yer yeras/n'q'l'm' [^ou]yer SFX a2 yer ieras/n'q'l'm' [aou]yer SFX a2 er era/n'q'l'm't's' [^y]er SFX a2 yer yera/n'q'l'm't's' [^ou]yer SFX a2 yer iera/n'q'l'm't's' [aou]yer SFX a2 er erons/n'q'l't' [^y]er SFX a2 yer yerons/n'q'l't' [^ou]yer SFX a2 yer ierons/n'q'l't' [aou]yer SFX a2 er erez/n'q'l'm' [^y]er SFX a2 yer yerez/n'q'l'm' [^ou]yer SFX a2 yer ierez/n'q'l'm' [aou]yer SFX a2 er eront/n'q'l'm't's' [^y]er SFX a2 yer yeront/n'q'l'm't's' [^ou]yer SFX a2 yer ieront/n'q'l'm't's' [aou]yer SFX a2 er erais/n'q'j'l'm't' [^y]er SFX a2 yer yerais/n'q'j'l'm't' [^ou]yer SFX a2 yer ierais/n'q'j'l'm't' [aou]yer SFX a2 er erait/n'q'l'm't's' [^y]er SFX a2 yer yerait/n'q'l'm't's' [^ou]yer SFX a2 yer ierait/n'q'l'm't's' [aou]yer SFX a2 er erions/n'q'l't' [^y]er SFX a2 yer yerions/n'q'l't' [^ou]yer SFX a2 yer ierions/n'q'l't' [aou]yer SFX a2 er eriez/n'q'l'm' [^y]er SFX a2 yer yeriez/n'q'l'm' [^ou]yer SFX a2 yer ieriez/n'q'l'm' [aou]yer SFX a2 er eraient/n'q'l'm't's' [^y]er SFX a2 yer yeraient/n'q'l'm't's' [^ou]yer SFX a2 yer ieraient/n'q'l'm't's' [aou]yer SFX a2 er asse/n'q'j'l't' [^cg]er SFX a2 cer çasse/n'q'j'l't' cer SFX a2 ger geasse/n'q'j'l't' ger SFX a2 er asses/n'q'l'm' [^cg]er SFX a2 cer çasses/n'q'l'm' cer SFX a2 ger geasses/n'q'l'm' ger SFX a2 er ât/n'q'l'm't's' [^cg]er SFX a2 cer çât/n'q'l'm't's' cer SFX a2 ger geât/n'q'l'm't's' ger SFX a2 er assions/n'q'l't' [^cg]er SFX a2 cer çassions/n'q'l't' cer SFX a2 ger geassions/n'q'l't' ger SFX a2 er assiez/n'q'l'm' [^cg]er SFX a2 cer çassiez/n'q'l'm' cer SFX a2 ger geassiez/n'q'l'm' ger SFX a2 er assent/n'q'l'm't's' [^cg]er SFX a2 cer çassent/n'q'l'm't's' cer SFX a2 ger geassent/n'q'l'm't's' ger SFX a2 er e/n'l'm' [^y]er SFX a2 yer ye/n'l'm' [^ou]yer SFX a2 yer ie/n'l'm' [aou]yer SFX a2 er ons/n'l' [^cg]er SFX a2 cer çons/n'l' cer SFX a2 ger geons/n'l' ger SFX a2 er ez/n'l'm' er SFX a3 Y 102 SFX a3 er er/m't's' er SFX a3 er ant/m't's' [^cg]er SFX a3 cer çant/m't's' cer SFX a3 ger geant/m't's' ger SFX a3 er e/m's' [^y]er SFX a3 yer ye/m's' [^ou]yer SFX a3 yer ie/m's' [aou]yer SFX a3 er es/t' [^y]er SFX a3 yer yes/t' [^ou]yer SFX a3 yer ies/t' [aou]yer SFX a3 er ons [^cg]er SFX a3 cer çons cer SFX a3 ger geons ger SFX a3 r z er SFX a3 er ent/s' [^y]er SFX a3 yer yent/s' [^ou]yer SFX a3 yer ient/s' [aou]yer SFX a3 er ais/m' [^cg]er SFX a3 cer çais/m' cer SFX a3 ger geais/m' ger SFX a3 er ait/s' [^cg]er SFX a3 cer çait/s' cer SFX a3 ger geait/s' ger SFX a3 er ions er SFX a3 er iez er SFX a3 er aient/s' [^cg]er SFX a3 cer çaient/s' cer SFX a3 ger geaient/s' ger SFX a3 er ai/m' [^cg]er SFX a3 cer çai/m' cer SFX a3 ger geai/m' ger SFX a3 er as/t' [^cg]er SFX a3 cer ças/t' cer SFX a3 ger geas/t' ger SFX a3 er a/s' [^cg]er SFX a3 cer ça/s' cer SFX a3 ger gea/s' ger SFX a3 er âmes [^cg]er SFX a3 cer çâmes cer SFX a3 ger geâmes ger SFX a3 er âtes [^cg]er SFX a3 cer çâtes/s' cer SFX a3 ger geâtes/s' ger SFX a3 er èrent/s' er SFX a3 er erai/m' [^y]er SFX a3 yer yerai/m' [^ou]yer SFX a3 yer ierai/m' [aou]yer SFX a3 er eras/t' [^y]er SFX a3 yer yeras/t' [^ou]yer SFX a3 yer ieras/t' [aou]yer SFX a3 er era/s' [^y]er SFX a3 yer yera/s' [^ou]yer SFX a3 yer iera/s' [aou]yer SFX a3 er erons [^y]er SFX a3 yer yerons [^ou]yer SFX a3 yer ierons [aou]yer SFX a3 er erez [^y]er SFX a3 yer yerez [^ou]yer SFX a3 yer ierez [aou]yer SFX a3 er eront/s' [^y]er SFX a3 yer yeront/s' [^ou]yer SFX a3 yer ieront/s' [aou]yer SFX a3 er erais/m't' [^y]er SFX a3 yer yerais/m't' [^ou]yer SFX a3 yer ierais/m't' [aou]yer SFX a3 er erait/s' [^y]er SFX a3 yer yerait/s' [^ou]yer SFX a3 yer ierait/s' [aou]yer SFX a3 er erions [^y]er SFX a3 yer yerions [^ou]yer SFX a3 yer ierions [aou]yer SFX a3 er eriez [^y]er SFX a3 yer yeriez [^ou]yer SFX a3 yer ieriez [aou]yer SFX a3 er eraient/s' [^y]er SFX a3 yer yeraient/s' [^ou]yer SFX a3 yer ieraient/s' [aou]yer SFX a3 er asse/m' [^cg]er SFX a3 cer çasse/m' cer SFX a3 ger geasse/m' ger SFX a3 er asses/t' [^cg]er SFX a3 cer çasses/t' cer SFX a3 ger geasses/t' ger SFX a3 er ât/s' [^cg]er SFX a3 cer çât/s' cer SFX a3 ger geât/s' ger SFX a3 er assions [^cg]er SFX a3 cer çassions cer SFX a3 ger geassions ger SFX a3 er assiez [^cg]er SFX a3 cer çassiez cer SFX a3 ger geassiez ger SFX a3 er assent/s' [^cg]er SFX a3 cer çassent/s' cer SFX a3 ger geassent/s' ger SFX a3 er e/t' [^y]er SFX a3 yer ye/t' [^ou]yer SFX a3 yer ie/t' [aou]yer SFX a3 er ons [^cg]er SFX a3 cer çons cer SFX a3 ger geons ger SFX a3 er ez er SFX a4 Y 102 SFX a4 er er/n'q'd'l'm't's' er SFX a4 er ant/n'q'l'm't's' [^cg]er SFX a4 cer çant/n'q'l'm't's' cer SFX a4 ger geant/n'q'l'm't's' ger SFX a4 er e/n'q'j'l'm't's' [^y]er SFX a4 yer ye/n'q'j'l'm't's' [^ou]yer SFX a4 yer ie/n'q'j'l'm't's' [aou]yer SFX a4 er es/n'q'l'm't' [^y]er SFX a4 yer yes/n'q'l'm't' [^ou]yer SFX a4 yer ies/n'q'l'm't' [aou]yer SFX a4 er ons/n'q'l't' [^cg]er SFX a4 cer çons/n'q'l't' cer SFX a4 ger geons/n'q'l't' ger SFX a4 er ez/n'q'l'm' er SFX a4 er ent/n'q'l'm't's' [^y]er SFX a4 yer yent/n'q'l'm't's' [^ou]yer SFX a4 yer ient/n'q'l'm't's' [aou]yer SFX a4 er ais/n'q'j'l'm't' [^cg]er SFX a4 cer çais/n'q'j'l'm't' cer SFX a4 ger geais/n'q'j'l'm't' ger SFX a4 er ait/n'q'l'm't's' [^cg]er SFX a4 cer çait/n'q'l'm't's' cer SFX a4 ger geait/n'q'l'm't's' ger SFX a4 er ions/n'q'l't' er SFX a4 er iez/n'q'l'm' er SFX a4 er aient/n'q'l'm't's' [^cg]er SFX a4 cer çaient/n'q'l'm't's' cer SFX a4 ger geaient/n'q'l'm't's' ger SFX a4 er ai/n'q'j'l'm't' [^cg]er SFX a4 cer çai/n'q'j'l'm't' cer SFX a4 ger geai/n'q'j'l'm't' ger SFX a4 er as/n'q'l'm't' [^cg]er SFX a4 cer ças/n'q'l'm't' cer SFX a4 ger geas/n'q'l'm't' ger SFX a4 er a/n'q'l'm't's' [^cg]er SFX a4 cer ça/n'q'l'm't's' cer SFX a4 ger gea/n'q'l'm't's' ger SFX a4 er âmes/n'q'l't' [^cg]er SFX a4 cer çâmes/n'q'l't' cer SFX a4 ger geâmes/n'q'l't' ger SFX a4 er âtes/n'q'l'm' [^cg]er SFX a4 cer çâtes/n'q'l'm' cer SFX a4 ger geâtes/n'q'l'm' ger SFX a4 er èrent/n'q'l'm't's' er SFX a4 er erai/n'q'j'l'm't' [^y]er SFX a4 yer yerai/n'q'j'l'm't' [^ou]yer SFX a4 yer ierai/n'q'j'l'm't' [aou]yer SFX a4 er eras/n'q'l'm't' [^y]er SFX a4 yer yeras/n'q'l'm't' [^ou]yer SFX a4 yer ieras/n'q'l'm't' [aou]yer SFX a4 er era/n'q'l'm't's' [^y]er SFX a4 yer yera/n'q'l'm't's' [^ou]yer SFX a4 yer iera/n'q'l'm't's' [aou]yer SFX a4 er erons/n'q'l't' [^y]er SFX a4 yer yerons/n'q'l't' [^ou]yer SFX a4 yer ierons/n'q'l't' [aou]yer SFX a4 er erez/n'q'l'm' [^y]er SFX a4 yer yerez/n'q'l'm' [^ou]yer SFX a4 yer ierez/n'q'l'm' [aou]yer SFX a4 er eront/n'q'l'm't's' [^y]er SFX a4 yer yeront/n'q'l'm't's' [^ou]yer SFX a4 yer ieront/n'q'l'm't's' [aou]yer SFX a4 er erais/n'q'j'l'm't' [^y]er SFX a4 yer yerais/n'q'j'l'm't' [^ou]yer SFX a4 yer ierais/n'q'j'l'm't' [aou]yer SFX a4 er erait/n'q'l'm't's' [^y]er SFX a4 yer yerait/n'q'l'm't's' [^ou]yer SFX a4 yer ierait/n'q'l'm't's' [aou]yer SFX a4 er erions/n'q'l't' [^y]er SFX a4 yer yerions/n'q'l't' [^ou]yer SFX a4 yer ierions/n'q'l't' [aou]yer SFX a4 er eriez/n'q'l'm' [^y]er SFX a4 yer yeriez/n'q'l'm' [^ou]yer SFX a4 yer ieriez/n'q'l'm' [aou]yer SFX a4 er eraient/n'q'l'm't's' [^y]er SFX a4 yer yeraient/n'q'l'm't's' [^ou]yer SFX a4 yer ieraient/n'q'l'm't's' [aou]yer SFX a4 er asse/n'q'j'l'm't' [^cg]er SFX a4 cer çasse/n'q'j'l'm't' cer SFX a4 ger geasse/n'q'j'l'm't' ger SFX a4 er asses/n'q'l'm't' [^cg]er SFX a4 cer çasses/n'q'l'm't' cer SFX a4 ger geasses/n'q'l'm't' ger SFX a4 er ât/n'q'l'm't's' [^cg]er SFX a4 cer çât/n'q'l'm't's' cer SFX a4 ger geât/n'q'l'm't's' ger SFX a4 er assions/n'q'l't' [^cg]er SFX a4 cer çassions/n'q'l't' cer SFX a4 ger geassions/n'q'l't' ger SFX a4 er assiez/n'q'l'm' [^cg]er SFX a4 cer çassiez/n'q'l'm' cer SFX a4 ger geassiez/n'q'l'm' ger SFX a4 er assent/n'q'l'm't's' [^cg]er SFX a4 cer çassent/n'q'l'm't's' cer SFX a4 ger geassent/n'q'l'm't's' ger SFX a4 er e/n'l'm't' [^y]er SFX a4 yer ye/n'l'm't' [^ou]yer SFX a4 yer ie/n'l'm't' [aou]yer SFX a4 er ons/n'l' [^cg]er SFX a4 cer çons/n'l' cer SFX a4 ger geons/n'l' ger SFX a4 er ez/n'l'm' er SFX a5 Y 102 SFX a5 er er/n'q'd'm't's' er SFX a5 er ant/n'q'm't's' [^cg]er SFX a5 cer çant/n'q'm't's' cer SFX a5 ger geant/n'q'm't's' ger SFX a5 er e/n'q'j'm't's' [^y]er SFX a5 yer ye/n'q'j'm't's' [^ou]yer SFX a5 yer ie/n'q'j'm't's' [aou]yer SFX a5 er es/n'm't' [^y]er SFX a5 yer yes/n'm't' [^ou]yer SFX a5 yer ies/n'm't' [aou]yer SFX a5 er ons/n't' [^cg]er SFX a5 cer çons/n't' cer SFX a5 ger geons/n't' ger SFX a5 r z/n'm' er SFX a5 er ent/n'q'm't's' [^y]er SFX a5 yer yent/n'q'm't's' [^ou]yer SFX a5 yer ient/n'q'm't's' [aou]yer SFX a5 er ais/n'j'm't' [^cg]er SFX a5 cer çais/n'j'm't' cer SFX a5 ger geais/n'j'm't' ger SFX a5 er ait/n'q'm't's' [^cg]er SFX a5 cer çait/n'q'm't's' cer SFX a5 ger geait/n'q'm't's' ger SFX a5 er ions/n't' er SFX a5 er iez/n'm' er SFX a5 er aient/n'q'm't's' [^cg]er SFX a5 cer çaient/n'q'm't's' cer SFX a5 ger geaient/n'q'm't's' ger SFX a5 er ai/n'j'm't' [^cg]er SFX a5 cer çai/n'j'm't' cer SFX a5 ger geai/n'j'm't' ger SFX a5 er as/n'm't' [^cg]er SFX a5 cer ças/n'm't' cer SFX a5 ger geas/n'm't' ger SFX a5 er a/n'q'm't's' [^cg]er SFX a5 cer ça/n'q'm't's' cer SFX a5 ger gea/n'q'm't's' ger SFX a5 er âmes/n't' [^cg]er SFX a5 cer çâmes/n't' cer SFX a5 ger geâmes/n't' ger SFX a5 er âtes/n'm' [^cg]er SFX a5 cer çâtes/n'm' cer SFX a5 ger geâtes/n'm' ger SFX a5 er èrent/n'q'm't's' er SFX a5 er erai/n'j'm't' [^y]er SFX a5 yer yerai/n'j'm't' [^ou]yer SFX a5 yer ierai/n'j'm't' [aou]yer SFX a5 er eras/n'm't' [^y]er SFX a5 yer yeras/n'm't' [^ou]yer SFX a5 yer ieras/n'm't' [aou]yer SFX a5 er era/n'q'm't's' [^y]er SFX a5 yer yera/n'q'm't's' [^ou]yer SFX a5 yer iera/n'q'm't's' [aou]yer SFX a5 er erons/n't' [^y]er SFX a5 yer yerons/n't' [^ou]yer SFX a5 yer ierons/n't' [aou]yer SFX a5 er erez/n'm' [^y]er SFX a5 yer yerez/n'm' [^ou]yer SFX a5 yer ierez/n'm' [aou]yer SFX a5 er eront/n'q'm't's' [^y]er SFX a5 yer yeront/n'q'm't's' [^ou]yer SFX a5 yer ieront/n'q'm't's' [aou]yer SFX a5 er erais/n'j'm't' [^y]er SFX a5 yer yerais/n'j'm't' [^ou]yer SFX a5 yer ierais/n'j'm't' [aou]yer SFX a5 er erait/n'q'm't's' [^y]er SFX a5 yer yerait/n'q'm't's' [^ou]yer SFX a5 yer ierait/n'q'm't's' [aou]yer SFX a5 er erions/n't' [^y]er SFX a5 yer yerions/n't' [^ou]yer SFX a5 yer ierions/n't' [aou]yer SFX a5 er eriez/n'm' [^y]er SFX a5 yer yeriez/n'm' [^ou]yer SFX a5 yer ieriez/n'm' [aou]yer SFX a5 er eraient/n'q'm't's' [^y]er SFX a5 yer yeraient/n'q'm't's' [^ou]yer SFX a5 yer ieraient/n'q'm't's' [aou]yer SFX a5 er asse/n'j'm't' [^cg]er SFX a5 cer çasse/n'j'm't' cer SFX a5 ger geasse/n'j'm't' ger SFX a5 er asses/n'm't' [^cg]er SFX a5 cer çasses/n'm't' cer SFX a5 ger geasses/n'm't' ger SFX a5 er ât/n'q'm't's' [^cg]er SFX a5 cer çât/n'q'm't's' cer SFX a5 ger geât/n'q'm't's' ger SFX a5 er assions/n't' [^cg]er SFX a5 cer çassions/n't' cer SFX a5 ger geassions/n't' ger SFX a5 er assiez/n'm' [^cg]er SFX a5 cer çassiez/n'm' cer SFX a5 ger geassiez/n'm' ger SFX a5 er assent/n'q'm't's' [^cg]er SFX a5 cer çassent/n'q'm't's' cer SFX a5 ger geassent/n'q'm't's' ger SFX a5 er e/n'm' [^y]er SFX a5 yer e/n'm' [^ou]yer SFX a5 yer ie/n'm' [aou]yer SFX a5 er ons/n' [^cg]er SFX a5 cer çons/n' cer SFX a5 ger geons/n' ger SFX a5 er ez/n'm' er SFX a6 Y 72 SFX a6 er er/s' er SFX a6 er ant/s' [^cg]er SFX a6 cer çant/s' cer SFX a6 ger geant/s' ger SFX a6 er e/s' [^y]er SFX a6 yer ye/s' [^ou]yer SFX a6 yer ie/s' [aou]yer SFX a6 er ons [^cg]er SFX a6 cer çons cer SFX a6 ger geons ger SFX a6 er ez er SFX a6 er ent/s' [^y]er SFX a6 yer yent/s' [^ou]yer SFX a6 yer ient/s' [aou]yer SFX a6 er ait/s' [^cg]er SFX a6 cer çait/s' cer SFX a6 ger geait/s' ger SFX a6 er ions er SFX a6 er iez er SFX a6 er aient/s' [^cg]er SFX a6 cer çaient/s' cer SFX a6 ger geaient/s' ger SFX a6 er a/s' [^cg]er SFX a6 cer ça/s' cer SFX a6 ger gea/s' ger SFX a6 er âmes [^cg]er SFX a6 cer çâmes cer SFX a6 ger geâmes ger SFX a6 er âtes [^cg]er SFX a6 cer çâtes/s' cer SFX a6 ger geâtes/s' ger SFX a6 er èrent/s' er SFX a6 er era/s' [^y]er SFX a6 yer yera/s' [^ou]yer SFX a6 yer iera/s' [aou]yer SFX a6 er erons [^y]er SFX a6 yer yerons [^ou]yer SFX a6 yer ierons [aou]yer SFX a6 er erez [^y]er SFX a6 yer yerez [^ou]yer SFX a6 yer ierez [aou]yer SFX a6 er eront/s' [^y]er SFX a6 yer yeront/s' [^ou]yer SFX a6 yer ieront/s' [aou]yer SFX a6 er erait/s' [^y]er SFX a6 yer yerait/s' [^ou]yer SFX a6 yer ierait/s' [aou]yer SFX a6 er erions [^y]er SFX a6 yer yerions [^ou]yer SFX a6 yer ierions [aou]yer SFX a6 er eriez [^y]er SFX a6 yer yeriez [^ou]yer SFX a6 yer ieriez [aou]yer SFX a6 er eraient/s' [^y]er SFX a6 yer yeraient/s' [^ou]yer SFX a6 yer ieraient/s' [aou]yer SFX a6 er ât/s' [^cg]er SFX a6 cer çât/s' cer SFX a6 ger geât/s' ger SFX a6 er assions [^cg]er SFX a6 cer çassions cer SFX a6 ger geassions ger SFX a6 er assiez [^cg]er SFX a6 cer çassiez cer SFX a6 ger geassiez ger SFX a6 er assent/s' [^cg]er SFX a6 cer çassent/s' cer SFX a6 ger geassent/s' ger SFX a6 er ons [^cg]er SFX a6 cer çons cer SFX a6 ger geons ger SFX a6 er ez er SFX a8 N 16 SFX a8 er er/n'd' er SFX a8 er ant [^cg]er SFX a8 cer çant cer SFX a8 ger geant ger SFX a8 er e/n' er SFX a8 er ait/n' [^cg]er SFX a8 cer çait/n' cer SFX a8 ger geait/n' ger SFX a8 er a/n' [^cg]er SFX a8 cer ça/n' cer SFX a8 ger gea/n' ger SFX a8 er era/n' er SFX a8 er erait/n' er SFX a8 er ât/n' [^cg]er SFX a8 cer çât/n' cer SFX a8 ger geât/n' ger SFX a9 N 10 SFX a9 er ent/n' er SFX a9 er aient/n' [^cg]er SFX a9 cer çaient/n' cer SFX a9 ger geaient/n' ger SFX a9 er èrent/n' er SFX a9 er eront/n' er SFX a9 er eraient/n' er SFX a9 er assent/n' [^cg]er SFX a9 cer çassent/n' cer SFX a9 ger geassent/n' ger SFX b0 N 189 SFX b0 er ant [^c]er SFX b0 cer çant cer SFX b0 ecer èce ecer SFX b0 emer ème emer SFX b0 ener ène ener SFX b0 eper èpe eper SFX b0 erer ère erer SFX b0 eser èse eser SFX b0 ever ève ever SFX b0 evrer èvre evrer SFX b0 eter ète eter SFX b0 eler èle eler SFX b0 ecer èces ecer SFX b0 emer èmes emer SFX b0 ener ènes ener SFX b0 eper èpes eper SFX b0 erer ères erer SFX b0 eser èses eser SFX b0 ever èves ever SFX b0 evrer èvres evrer SFX b0 eter ètes eter SFX b0 eler èles eler SFX b0 er ons [^c]er SFX b0 cer çons cer SFX b0 er ez er SFX b0 ecer ècent ecer SFX b0 emer èment emer SFX b0 ener ènent ener SFX b0 eper èpent eper SFX b0 erer èrent erer SFX b0 eser èsent eser SFX b0 ever èvent ever SFX b0 evrer èvrent evrer SFX b0 eter ètent eter SFX b0 eler èlent eler SFX b0 er ais [^c]er SFX b0 cer çais cer SFX b0 er ait [^c]er SFX b0 cer çait cer SFX b0 er ions er SFX b0 er iez er SFX b0 er aient [^c]er SFX b0 cer çaient cer SFX b0 er ai [^c]er SFX b0 cer çai cer SFX b0 er as [^c]er SFX b0 cer ças cer SFX b0 er a [^c]er SFX b0 cer ça cer SFX b0 er âmes [^c]er SFX b0 cer çâmes cer SFX b0 er âtes [^c]er SFX b0 cer çâtes cer SFX b0 er èrent er SFX b0 ecer ècerai ecer SFX b0 emer èmerai emer SFX b0 ener ènerai ener SFX b0 eper èperai eper SFX b0 erer èrerai erer SFX b0 eser èserai eser SFX b0 ever èverai ever SFX b0 evrer èvrerai evrer SFX b0 eter èterai eter SFX b0 eler èlerai eler SFX b0 ecer èceras ecer SFX b0 emer èmeras emer SFX b0 ener èneras ener SFX b0 eper èperas eper SFX b0 erer èreras erer SFX b0 eser èseras eser SFX b0 ever èveras ever SFX b0 evrer èvreras evrer SFX b0 eter èteras eter SFX b0 eler èleras eler SFX b0 ecer ècera ecer SFX b0 emer èmera emer SFX b0 ener ènera ener SFX b0 eper èpera eper SFX b0 erer èrera erer SFX b0 eser èsera eser SFX b0 ever èvera ever SFX b0 evrer èvrera evrer SFX b0 eter ètera eter SFX b0 eler èlera eler SFX b0 ecer ècerons ecer SFX b0 emer èmerons emer SFX b0 ener ènerons ener SFX b0 eper èperons eper SFX b0 erer èrerons erer SFX b0 eser èserons eser SFX b0 ever èverons ever SFX b0 evrer èvrerons evrer SFX b0 eter èterons eter SFX b0 eler èlerons eler SFX b0 ecer ècerez ecer SFX b0 emer èmerez emer SFX b0 ener ènerez ener SFX b0 eper èperez eper SFX b0 erer èrerez erer SFX b0 eser èserez eser SFX b0 ever èverez ever SFX b0 evrer èvrerez evrer SFX b0 eter èterez eter SFX b0 eler èlerez eler SFX b0 ecer èceront ecer SFX b0 emer èmeront emer SFX b0 ener èneront ener SFX b0 eper èperont eper SFX b0 erer èreront erer SFX b0 eser èseront eser SFX b0 ever èveront ever SFX b0 evrer èvreront evrer SFX b0 eter èteront eter SFX b0 eler èleront eler SFX b0 ecer ècerais ecer SFX b0 emer èmerais emer SFX b0 ener ènerais ener SFX b0 eper èperais eper SFX b0 erer èrerais erer SFX b0 eser èserais eser SFX b0 ever èverais ever SFX b0 evrer èvrerais evrer SFX b0 eter èterais eter SFX b0 eler èlerais eler SFX b0 ecer ècerait ecer SFX b0 emer èmerait emer SFX b0 ener ènerait ener SFX b0 eper èperait eper SFX b0 erer èrerait erer SFX b0 eser èserait eser SFX b0 ever èverait ever SFX b0 evrer èvrerait evrer SFX b0 eter èterait eter SFX b0 eler èlerait eler SFX b0 ecer ècerions ecer SFX b0 emer èmerions emer SFX b0 ener ènerions ener SFX b0 eper èperions eper SFX b0 erer èrerions erer SFX b0 eser èserions eser SFX b0 ever èverions ever SFX b0 evrer èvrerions evrer SFX b0 eter èterions eter SFX b0 eler èlerions eler SFX b0 ecer èceriez ecer SFX b0 emer èmeriez emer SFX b0 ener èneriez ener SFX b0 eper èperiez eper SFX b0 erer èreriez erer SFX b0 eser èseriez eser SFX b0 ever èveriez ever SFX b0 evrer èvreriez evrer SFX b0 eter èteriez eter SFX b0 eler èleriez eler SFX b0 ecer èceraient ecer SFX b0 emer èmeraient emer SFX b0 ener èneraient ener SFX b0 eper èperaient eper SFX b0 erer èreraient erer SFX b0 eser èseraient eser SFX b0 ever èveraient ever SFX b0 evrer èvreraient evrer SFX b0 eter èteraient eter SFX b0 eler èleraient eler SFX b0 er asse [^c]er SFX b0 cer çasse cer SFX b0 er asses [^c]er SFX b0 cer çasses cer SFX b0 er ât [^c]er SFX b0 cer çât cer SFX b0 er assions [^c]er SFX b0 cer çassions cer SFX b0 er assiez [^c]er SFX b0 cer çassiez cer SFX b0 er assent [^c]er SFX b0 cer çassent cer SFX b0 ecer èce ecer SFX b0 emer ème emer SFX b0 ener ène ener SFX b0 eper èpe eper SFX b0 erer ère erer SFX b0 eser èse eser SFX b0 ever ève ever SFX b0 evrer èvre evrer SFX b0 eter ète eter SFX b0 eler èle eler SFX b0 er ons [^c]er SFX b0 cer çons cer SFX b0 er ez er SFX b1 Y 190 SFX b1 er er/n'q'd' er SFX b1 er ant/n'q' [^c]er SFX b1 cer çant/n'q' cer SFX b1 ecer èce/n'j'q' ecer SFX b1 emer ème/n'j'q' emer SFX b1 ener ène/n'j'q' ener SFX b1 eper èpe/n'j'q' eper SFX b1 erer ère/n'j'q' erer SFX b1 eser èse/n'j'q' eser SFX b1 ever ève/n'j'q' ever SFX b1 evrer èvre/n'j'q' evrer SFX b1 eter ète/n'j'q' eter SFX b1 eler èle/n'j'q' eler SFX b1 ecer èces/n' ecer SFX b1 emer èmes/n' emer SFX b1 ener ènes/n' ener SFX b1 eper èpes/n' eper SFX b1 erer ères/n' erer SFX b1 eser èses/n' eser SFX b1 ever èves/n' ever SFX b1 evrer èvres/n' evrer SFX b1 eter ètes/n' eter SFX b1 eler èles/n' eler SFX b1 er ons/n' [^c]er SFX b1 cer çons/n' cer SFX b1 er ez/n' er SFX b1 ecer ècent/n'q' ecer SFX b1 emer èment/n'q' emer SFX b1 ener ènent/n'q' ener SFX b1 eper èpent/n'q' eper SFX b1 erer èrent/n'q' erer SFX b1 eser èsent/n'q' eser SFX b1 ever èvent/n'q' ever SFX b1 evrer èvrent/n'q' evrer SFX b1 eter ètent/n'q' eter SFX b1 eler èlent/n'q' eler SFX b1 er ais/n'j' [^c]er SFX b1 cer çais/n'j' cer SFX b1 er ait/n'q' [^c]er SFX b1 cer çait/n'q' cer SFX b1 er ions/n' er SFX b1 er iez/n' er SFX b1 er aient/n'q' [^c]er SFX b1 cer çaient/n'q' cer SFX b1 er ai/n'j' [^c]er SFX b1 cer çai/n'j' cer SFX b1 er as/n' [^c]er SFX b1 cer ças/n' cer SFX b1 er a/n'q' [^c]er SFX b1 cer ça/n'q' cer SFX b1 er âmes/n' [^c]er SFX b1 cer çâmes/n' cer SFX b1 er âtes/n' [^c]er SFX b1 cer çâtes/n' cer SFX b1 er èrent/n'q' er SFX b1 ecer ècerai/n'j' ecer SFX b1 emer èmerai/n'j' emer SFX b1 ener ènerai/n'j' ener SFX b1 eper èperai/n'j' eper SFX b1 erer èrerai/n'j' erer SFX b1 eser èserai/n'j' eser SFX b1 ever èverai/n'j' ever SFX b1 evrer èvrerai/n'j' evrer SFX b1 eter èterai/n'j' eter SFX b1 eler èlerai/n'j' eler SFX b1 ecer èceras/n' ecer SFX b1 emer èmeras/n' emer SFX b1 ener èneras/n' ener SFX b1 eper èperas/n' eper SFX b1 erer èreras/n' erer SFX b1 eser èseras/n' eser SFX b1 ever èveras/n' ever SFX b1 evrer èvreras/n' evrer SFX b1 eter èteras/n' eter SFX b1 eler èleras/n' eler SFX b1 ecer ècera/n'q' ecer SFX b1 emer èmera/n'q' emer SFX b1 ener ènera/n'q' ener SFX b1 eper èpera/n'q' eper SFX b1 erer èrera/n'q' erer SFX b1 eser èsera/n'q' eser SFX b1 ever èvera/n'q' ever SFX b1 evrer èvrera/n'q' evrer SFX b1 eter ètera/n'q' eter SFX b1 eler èlera/n'q' eler SFX b1 ecer ècerons/n' ecer SFX b1 emer èmerons/n' emer SFX b1 ener ènerons/n' ener SFX b1 eper èperons/n' eper SFX b1 erer èrerons/n' erer SFX b1 eser èserons/n' eser SFX b1 ever èverons/n' ever SFX b1 evrer èvrerons/n' evrer SFX b1 eter èterons/n' eter SFX b1 eler èlerons/n' eler SFX b1 ecer ècerez/n' ecer SFX b1 emer èmerez/n' emer SFX b1 ener ènerez/n' ener SFX b1 eper èperez/n' eper SFX b1 erer èrerez/n' erer SFX b1 eser èserez/n' eser SFX b1 ever èverez/n' ever SFX b1 evrer èvrerez/n' evrer SFX b1 eter èterez/n' eter SFX b1 eler èlerez/n' eler SFX b1 ecer èceront/n'q' ecer SFX b1 emer èmeront/n'q' emer SFX b1 ener èneront/n'q' ener SFX b1 eper èperont/n'q' eper SFX b1 erer èreront/n'q' erer SFX b1 eser èseront/n'q' eser SFX b1 ever èveront/n'q' ever SFX b1 evrer èvreront/n'q' evrer SFX b1 eter èteront/n'q' eter SFX b1 eler èleront/n'q' eler SFX b1 ecer ècerais/n'j' ecer SFX b1 emer èmerais/n'j' emer SFX b1 ener ènerais/n'j' ener SFX b1 eper èperais/n'j' eper SFX b1 erer èrerais/n'j' erer SFX b1 eser èserais/n'j' eser SFX b1 ever èverais/n'j' ever SFX b1 evrer èvrerais/n'j' evrer SFX b1 eter èterais/n'j' eter SFX b1 eler èlerais/n' eler SFX b1 ecer ècerait/n'q' ecer SFX b1 emer èmerait/n'q' emer SFX b1 ener ènerait/n'q' ener SFX b1 eper èperait/n'q' eper SFX b1 erer èrerait/n'q' erer SFX b1 eser èserait/n'q' eser SFX b1 ever èverait/n'q' ever SFX b1 evrer èvrerait/n'q' evrer SFX b1 eter èterait/n'q' eter SFX b1 eler èlerait/n'q' eler SFX b1 ecer ècerions/n' ecer SFX b1 emer èmerions/n' emer SFX b1 ener ènerions/n' ener SFX b1 eper èperions/n' eper SFX b1 erer èrerions/n' erer SFX b1 eser èserions/n' eser SFX b1 ever èverions/n' ever SFX b1 evrer èvrerions/n' evrer SFX b1 eter èterions/n' eter SFX b1 eler èlerions/n' eler SFX b1 ecer èceriez/n' ecer SFX b1 emer èmeriez/n' emer SFX b1 ener èneriez/n' ener SFX b1 eper èperiez/n' eper SFX b1 erer èreriez/n' erer SFX b1 eser èseriez/n' eser SFX b1 ever èveriez/n' ever SFX b1 evrer èvreriez/n' evrer SFX b1 eter èteriez/n' eter SFX b1 eler èleriez/n' eler SFX b1 ecer èceraient/n'q' ecer SFX b1 emer èmeraient/n'q' emer SFX b1 ener èneraient/n'q' ener SFX b1 eper èperaient/n'q' eper SFX b1 erer èreraient/n'q' erer SFX b1 eser èseraient/n'q' eser SFX b1 ever èveraient/n'q' ever SFX b1 evrer èvreraient/n'q' evrer SFX b1 eter èteraient/n'q' eter SFX b1 eler èleraient/n'q' eler SFX b1 er asse/n'j' [^c]er SFX b1 cer çasse/n'j' cer SFX b1 er asses/n' [^c]er SFX b1 cer çasses/n' cer SFX b1 er ât/n'q' [^c]er SFX b1 cer çât/n'q' cer SFX b1 er assions/n' [^c]er SFX b1 cer çassions/n' cer SFX b1 er assiez/n' [^c]er SFX b1 cer çassiez/n' cer SFX b1 er assent/n'q' [^c]er SFX b1 cer çassent/n'q' cer SFX b1 ecer èce/n' ecer SFX b1 emer ème/n' emer SFX b1 ener ène/n' ener SFX b1 eper èpe/n' eper SFX b1 erer ère/n' erer SFX b1 eser èse/n' eser SFX b1 ever ève/n' ever SFX b1 evrer èvre/n' evrer SFX b1 eter ète/n' eter SFX b1 eler èle/n' eler SFX b1 er ons/n' [^c]er SFX b1 cer çons/n' cer SFX b1 er ez/n' er SFX b2 Y 190 SFX b2 er er/n'q'd'l'm't's' er SFX b2 er ant/n'q'l'm't's' [^c]er SFX b2 cer çant/n'q'l'm't's' cer SFX b2 ecer èce/n'q'j'l'm't's' ecer SFX b2 emer ème/n'q'j'l'm't's' emer SFX b2 ener ène/n'q'j'l'm't's' ener SFX b2 eper èpe/n'q'j'l'm't's' eper SFX b2 erer ère/n'q'j'l'm't's' erer SFX b2 eser èse/n'q'j'l'm't's' eser SFX b2 ever ève/n'q'j'l'm't's' ever SFX b2 evrer èvre/n'q'j'l'm't's' evrer SFX b2 eter ète/n'q'j'l'm't's' eter SFX b2 eler èle/n'q'j'l'm't's' eler SFX b2 ecer èces/n'q'l'm' ecer SFX b2 emer èmes/n'q'l'm' emer SFX b2 ener ènes/n'q'l'm' ener SFX b2 eper èpes/n'q'l'm' eper SFX b2 erer ères/n'q'l'm' erer SFX b2 eser èses/n'q'l'm' eser SFX b2 ever èves/n'q'l'm' ever SFX b2 evrer èvres/n'q'l'm' evrer SFX b2 eter ètes/n'q'l'm' eter SFX b2 eler èles/n'q'l'm' eler SFX b2 er ons/n'q'l't' [^c]er SFX b2 cer çons/n'q'l't' cer SFX b2 er ez/n'q'l'm' er SFX b2 ecer ècent/n'q'l'm't's' ecer SFX b2 emer èment/n'q'l'm't's' emer SFX b2 ener ènent/n'q'l'm't's' ener SFX b2 eper èpent/n'q'l'm't's' eper SFX b2 erer èrent/n'q'l'm't's' erer SFX b2 eser èsent/n'q'l'm't's' eser SFX b2 ever èvent/n'q'l'm't's' ever SFX b2 evrer èvrent/n'q'l'm't's' evrer SFX b2 eter ètent/n'q'l'm't's' eter SFX b2 eler èlent/n'q'l'm't's' eler SFX b2 er ais/n'q'j'l'm't' [^c]er SFX b2 cer çais/n'q'j'l'm't' cer SFX b2 er ait/n'q'l'm't's' [^c]er SFX b2 cer çait/n'q'l'm't's' cer SFX b2 er ions/n'q'l't' er SFX b2 er iez/n'q'l'm' er SFX b2 er aient/n'q'l'm't's' [^c]er SFX b2 cer çaient/n'q'l'm't's' cer SFX b2 er ai/n'q'j'l't' [^c]er SFX b2 cer çai/n'q'j'l't' cer SFX b2 er as/n'q'l'm' [^c]er SFX b2 cer ças/n'q'l'm' cer SFX b2 er a/n'q'l'm't's' [^c]er SFX b2 cer ça/n'q'l'm't's' cer SFX b2 er âmes/n'q'l't' [^c]er SFX b2 cer çâmes/n'q'l't' cer SFX b2 er âtes/n'q'l'm' [^c]er SFX b2 cer çâtes/n'q'l'm' cer SFX b2 er èrent/n'q'l'm't's' er SFX b2 ecer ècerai/n'q'j'l't' ecer SFX b2 emer èmerai/n'q'j'l't' emer SFX b2 ener ènerai/n'q'j'l't' ener SFX b2 eper èperai/n'q'j'l't' eper SFX b2 erer èrerai/n'q'j'l't' erer SFX b2 eser èserai/n'q'j'l't' eser SFX b2 ever èverai/n'q'j'l't' ever SFX b2 evrer èvrerai/n'q'j'l't' evrer SFX b2 eter èterai/n'q'j'l't' eter SFX b2 eler èlerai/n'q'j'l't' eler SFX b2 ecer èceras/n'q'l'm' ecer SFX b2 emer èmeras/n'q'l'm' emer SFX b2 ener èneras/n'q'l'm' ener SFX b2 eper èperas/n'q'l'm' eper SFX b2 erer èreras/n'q'l'm' erer SFX b2 eser èseras/n'q'l'm' eser SFX b2 ever èveras/n'q'l'm' ever SFX b2 evrer èvreras/n'q'l'm' evrer SFX b2 eter èteras/n'q'l'm' eter SFX b2 eler èleras/n'q'l'm' eler SFX b2 ecer ècera/n'q'l'm't's' ecer SFX b2 emer èmera/n'q'l'm't's' emer SFX b2 ener ènera/n'q'l'm't's' ener SFX b2 eper èpera/n'q'l'm't's' eper SFX b2 erer èrera/n'q'l'm't's' erer SFX b2 eser èsera/n'q'l'm't's' eser SFX b2 ever èvera/n'q'l'm't's' ever SFX b2 evrer èvrera/n'q'l'm't's' evrer SFX b2 eter ètera/n'q'l'm't's' eter SFX b2 eler èlera/n'q'l'm't's' eler SFX b2 ecer ècerons/n'q'l't' ecer SFX b2 emer èmerons/n'q'l't' emer SFX b2 ener ènerons/n'q'l't' ener SFX b2 eper èperons/n'q'l't' eper SFX b2 erer èrerons/n'q'l't' erer SFX b2 eser èserons/n'q'l't' eser SFX b2 ever èverons/n'q'l't' ever SFX b2 evrer èvrerons/n'q'l't' evrer SFX b2 eter èterons/n'q'l't' eter SFX b2 eler èlerons/n'q'l't' eler SFX b2 ecer ècerez/n'q'l'm' ecer SFX b2 emer èmerez/n'q'l'm' emer SFX b2 ener ènerez/n'q'l'm' ener SFX b2 eper èperez/n'q'l'm' eper SFX b2 erer èrerez/n'q'l'm' erer SFX b2 eser èserez/n'q'l'm' eser SFX b2 ever èverez/n'q'l'm' ever SFX b2 evrer èvrerez/n'q'l'm' evrer SFX b2 eter èterez/n'q'l'm' eter SFX b2 eler èlerez/n'q'l'm' eler SFX b2 ecer èceront/n'q'l'm't's' ecer SFX b2 emer èmeront/n'q'l'm't's' emer SFX b2 ener èneront/n'q'l'm't's' ener SFX b2 eper èperont/n'q'l'm't's' eper SFX b2 erer èreront/n'q'l'm't's' erer SFX b2 eser èseront/n'q'l'm't's' eser SFX b2 ever èveront/n'q'l'm't's' ever SFX b2 evrer èvreront/n'q'l'm't's' evrer SFX b2 eter èteront/n'q'l'm't's' eter SFX b2 eler èleront/n'q'l'm't's' eler SFX b2 ecer ècerais/n'q'j'l'm't' ecer SFX b2 emer èmerais/n'q'j'l'm't' emer SFX b2 ener ènerais/n'q'j'l'm't' ener SFX b2 eper èperais/n'q'j'l'm't' eper SFX b2 erer èrerais/n'q'j'l'm't' erer SFX b2 eser èserais/n'q'j'l'm't' eser SFX b2 ever èverais/n'q'j'l'm't' ever SFX b2 evrer èvrerais/n'q'j'l'm't' evrer SFX b2 eter èterais/n'q'j'l'm't' eter SFX b2 eler èlerais/n'q'j'l'm't' eler SFX b2 ecer ècerait/n'q'l'm't's' ecer SFX b2 emer èmerait/n'q'l'm't's' emer SFX b2 ener ènerait/n'q'l'm't's' ener SFX b2 eper èperait/n'q'l'm't's' eper SFX b2 erer èrerait/n'q'l'm't's' erer SFX b2 eser èserait/n'q'l'm't's' eser SFX b2 ever èverait/n'q'l'm't's' ever SFX b2 evrer èvrerait/n'q'l'm't's' evrer SFX b2 eter èterait/n'q'l'm't's' eter SFX b2 eler èlerait/n'q'l'm't's' eler SFX b2 ecer ècerions/n'q'l't' ecer SFX b2 emer èmerions/n'q'l't' emer SFX b2 ener ènerions/n'q'l't' ener SFX b2 eper èperions/n'q'l't' eper SFX b2 erer èrerions/n'q'l't' erer SFX b2 eser èserions/n'q'l't' eser SFX b2 ever èverions/n'q'l't' ever SFX b2 evrer èvrerions/n'q'l't' evrer SFX b2 eter èterions/n'q'l't' eter SFX b2 eler èlerions/n'q'l't' eler SFX b2 ecer èceriez/n'q'l'm' ecer SFX b2 emer èmeriez/n'q'l'm' emer SFX b2 ener èneriez/n'q'l'm' ener SFX b2 eper èperiez/n'q'l'm' eper SFX b2 erer èreriez/n'q'l'm' erer SFX b2 eser èseriez/n'q'l'm' eser SFX b2 ever èveriez/n'q'l'm' ever SFX b2 evrer èvreriez/n'q'l'm' evrer SFX b2 eter èteriez/n'q'l'm' eter SFX b2 eler èleriez/n'q'l'm' eler SFX b2 ecer èceraient/n'q'l'm't's' ecer SFX b2 emer èmeraient/n'q'l'm't's' emer SFX b2 ener èneraient/n'q'l'm't's' ener SFX b2 eper èperaient/n'q'l'm't's' eper SFX b2 erer èreraient/n'q'l'm't's' erer SFX b2 eser èseraient/n'q'l'm't's' eser SFX b2 ever èveraient/n'q'l'm't's' ever SFX b2 evrer èvreraient/n'q'l'm't's' evrer SFX b2 eter èteraient/n'q'l'm't's' eter SFX b2 eler èleraient/n'q'l'm't's' eler SFX b2 er asse/n'q'j'l't' [^c]er SFX b2 cer çasse/n'q'j'l't' cer SFX b2 er asses/n'q'l'm' [^c]er SFX b2 cer çasses/n'q'l'm' cer SFX b2 er ât/n'q'l'm't's' [^c]er SFX b2 cer çât/n'q'l'm't's' cer SFX b2 er assions/n'q'l't' [^c]er SFX b2 cer çassions/n'q'l't' cer SFX b2 er assiez/n'q'l'm' [^c]er SFX b2 cer çassiez/n'q'l'm' cer SFX b2 er assent/n'q'l'm't's' [^c]er SFX b2 cer çassent/n'q'l'm't's' cer SFX b2 ecer èce/n'l'm' ecer SFX b2 emer ème/n'l'm' emer SFX b2 ener ène/n'l'm' ener SFX b2 eper èpe/n'l'm' eper SFX b2 erer ère/n'l'm' erer SFX b2 eser èse/n'l'm' eser SFX b2 ever ève/n'l'm' ever SFX b2 evrer èvre/n'l'm' evrer SFX b2 eter ète/n'l'm' eter SFX b2 eler èle/n'l'm' eler SFX b2 er ons/n'l' [^c]er SFX b2 cer çons/n'l' cer SFX b2 er ez/n'l'm' er SFX b3 Y 190 SFX b3 er er/m't's' er SFX b3 er ant/m't's' [^c]er SFX b3 cer çant/m't's' cer SFX b3 ecer èce/m's' ecer SFX b3 emer ème/m's' emer SFX b3 ener ène/m's' ener SFX b3 eper èpe/m's' eper SFX b3 erer ère/m's' erer SFX b3 eser èse/m's' eser SFX b3 ever ève/m's' ever SFX b3 evrer èvre/m's' evrer SFX b3 eter ète/m's' eter SFX b3 eler èle/m's' eler SFX b3 ecer èces/t' ecer SFX b3 emer èmes/t' emer SFX b3 ener ènes/t' ener SFX b3 eper èpes/t' eper SFX b3 erer ères/t' erer SFX b3 eser èses/t' eser SFX b3 ever èves/t' ever SFX b3 evrer èvres/t' evrer SFX b3 eter ètes/t' eter SFX b3 eler èles/t' eler SFX b3 er ons [^c]er SFX b3 cer çons cer SFX b3 er ez er SFX b3 ecer ècent/s' ecer SFX b3 emer èment/s' emer SFX b3 ener ènent/s' ener SFX b3 eper èpent/s' eper SFX b3 erer èrent/s' erer SFX b3 eser èsent/s' eser SFX b3 ever èvent/s' ever SFX b3 evrer èvrent/s' evrer SFX b3 eter ètent/s' eter SFX b3 eler èlent/s' eler SFX b3 er ais/m't' [^c]er SFX b3 cer çais/m't' cer SFX b3 er ait/s' [^c]er SFX b3 cer çait/s' cer SFX b3 er ions er SFX b3 er iez er SFX b3 er aient/s' [^c]er SFX b3 cer çaient/s' cer SFX b3 er ai/m' [^c]er SFX b3 cer çai/m' cer SFX b3 er as/t' [^c]er SFX b3 cer ças/t' cer SFX b3 er a/s' [^c]er SFX b3 cer ça/s' cer SFX b3 er âmes [^c]er SFX b3 cer çâmes cer SFX b3 er âtes [^c]er SFX b3 cer çâtes cer SFX b3 er èrent/s' er SFX b3 ecer ècerai/m' ecer SFX b3 emer èmerai/m' emer SFX b3 ener ènerai/m' ener SFX b3 eper èperai/m' eper SFX b3 erer èrerai/m' erer SFX b3 eser èserai/m' eser SFX b3 ever èverai/m' ever SFX b3 evrer èvrerai/m' evrer SFX b3 eter èterai/m' eter SFX b3 eler èlerai/m' eler SFX b3 ecer èceras/t' ecer SFX b3 emer èmeras/t' emer SFX b3 ener èneras/t' ener SFX b3 eper èperas/t' eper SFX b3 erer èreras/t' erer SFX b3 eser èseras/t' eser SFX b3 ever èveras/t' ever SFX b3 evrer èvreras/t' evrer SFX b3 eter èteras/t' eter SFX b3 eler èleras/t' eler SFX b3 ecer ècera/s' ecer SFX b3 emer èmera/s' emer SFX b3 ener ènera/s' ener SFX b3 eper èpera/s' eper SFX b3 erer èrera/s' erer SFX b3 eser èsera/s' eser SFX b3 ever èvera/s' ever SFX b3 evrer èvrera/s' evrer SFX b3 eter ètera/s' eter SFX b3 eler èlera/s' eler SFX b3 ecer ècerons ecer SFX b3 emer èmerons emer SFX b3 ener ènerons ener SFX b3 eper èperons eper SFX b3 erer èrerons erer SFX b3 eser èserons eser SFX b3 ever èverons ever SFX b3 evrer èvrerons evrer SFX b3 eter èterons eter SFX b3 eler èlerons eler SFX b3 ecer ècerez ecer SFX b3 emer èmerez emer SFX b3 ener ènerez ener SFX b3 eper èperez eper SFX b3 erer èrerez erer SFX b3 eser èserez eser SFX b3 ever èverez ever SFX b3 evrer èvrerez evrer SFX b3 eter èterez eter SFX b3 eler èlerez eler SFX b3 ecer èceront/s' ecer SFX b3 emer èmeront/s' emer SFX b3 ener èneront/s' ener SFX b3 eper èperont/s' eper SFX b3 erer èreront/s' erer SFX b3 eser èseront/s' eser SFX b3 ever èveront/s' ever SFX b3 evrer èvreront/s' evrer SFX b3 eter èteront/s' eter SFX b3 eler èleront/s' eler SFX b3 ecer ècerais/m't' ecer SFX b3 emer èmerais/m't' emer SFX b3 ener ènerais/m't' ener SFX b3 eper èperais/m't' eper SFX b3 erer èrerais/m't' erer SFX b3 eser èserais/m't' eser SFX b3 ever èverais/m't' ever SFX b3 evrer èvrerais/m't' evrer SFX b3 eter èterais/m't' eter SFX b3 eler èlerais/m't' eler SFX b3 ecer ècerait/s' ecer SFX b3 emer èmerait/s' emer SFX b3 ener ènerait/s' ener SFX b3 eper èperait/s' eper SFX b3 erer èrerait/s' erer SFX b3 eser èserait/s' eser SFX b3 ever èverait/s' ever SFX b3 evrer èvrerait/s' evrer SFX b3 eter èterait/s' eter SFX b3 eler èlerait/s' eler SFX b3 ecer ècerions ecer SFX b3 emer èmerions emer SFX b3 ener ènerions ener SFX b3 eper èperions eper SFX b3 erer èrerions erer SFX b3 eser èserions eser SFX b3 ever èverions ever SFX b3 evrer èvrerions evrer SFX b3 eter èterions eter SFX b3 eler èlerions eler SFX b3 ecer èceriez ecer SFX b3 emer èmeriez emer SFX b3 ener èneriez ener SFX b3 eper èperiez eper SFX b3 erer èreriez erer SFX b3 eser èseriez eser SFX b3 ever èveriez ever SFX b3 evrer èvreriez evrer SFX b3 eter èteriez eter SFX b3 eler èleriez eler SFX b3 ecer èceraient/s' ecer SFX b3 emer èmeraient/s' emer SFX b3 ener èneraient/s' ener SFX b3 eper èperaient/s' eper SFX b3 erer èreraient/s' erer SFX b3 eser èseraient/s' eser SFX b3 ever èveraient/s' ever SFX b3 evrer èvreraient/s' evrer SFX b3 eter èteraient/s' eter SFX b3 eler èleraient/s' eler SFX b3 er asse/m' [^c]er SFX b3 cer çasse/m' cer SFX b3 er asses/t' [^c]er SFX b3 cer çasses/t' cer SFX b3 er ât/s' [^c]er SFX b3 cer çât/s' cer SFX b3 er assions [^c]er SFX b3 cer çassions cer SFX b3 er assiez [^c]er SFX b3 cer çassiez cer SFX b3 er assent/s' [^c]er SFX b3 cer çassent/s' cer SFX b3 ecer èce/t' ecer SFX b3 emer ème/t' emer SFX b3 ener ène/t' ener SFX b3 eper èpe/t' eper SFX b3 erer ère/t' erer SFX b3 eser èse/t' eser SFX b3 ever ève/t' ever SFX b3 evrer èvre/t' evrer SFX b3 eter ète/t' eter SFX b3 eler èle/t' eler SFX b3 er ons [^c]er SFX b3 cer çons cer SFX b3 er ez er SFX b4 Y 190 SFX b4 er er/n'q'd'l'm't's' er SFX b4 er ant/n'q'l'm't's' [^c]er SFX b4 cer çant/n'q'l'm't's' cer SFX b4 ecer èce/n'q'j'l'm't's' ecer SFX b4 emer ème/n'q'j'l'm't's' emer SFX b4 ener ène/n'q'j'l'm't's' ener SFX b4 eper èpe/n'q'j'l'm't's' eper SFX b4 erer ère/n'q'j'l'm't's' erer SFX b4 eser èse/n'q'j'l'm't's' eser SFX b4 ever ève/n'q'j'l'm't's' ever SFX b4 evrer èvre/n'q'j'l'm't's' evrer SFX b4 eter ète/n'q'j'l'm't's' eter SFX b4 eler èle/n'q'j'l'm't's' eler SFX b4 ecer èces/n'q'l'm't' ecer SFX b4 emer èmes/n'q'l'm't' emer SFX b4 ener ènes/n'q'l'm't' ener SFX b4 eper èpes/n'q'l'm't' eper SFX b4 erer ères/n'q'l'm't' erer SFX b4 eser èses/n'q'l'm't' eser SFX b4 ever èves/n'q'l'm't' ever SFX b4 evrer èvres/n'q'l'm't' evrer SFX b4 eter ètes/n'q'l'm't' eter SFX b4 eler èles/n'q'l'm't' eler SFX b4 er ons/n'q'l't' [^c]er SFX b4 cer çons/n'q'l't' cer SFX b4 er ez/n'q'l'm' er SFX b4 ecer ècent/n'q'l'm't's' ecer SFX b4 emer èment/n'q'l'm't's' emer SFX b4 ener ènent/n'q'l'm't's' ener SFX b4 eper èpent/n'q'l'm't's' eper SFX b4 erer èrent/n'q'l'm't's' erer SFX b4 eser èsent/n'q'l'm't's' eser SFX b4 ever èvent/n'q'l'm't's' ever SFX b4 evrer èvrent/n'q'l'm't's' evrer SFX b4 eter ètent/n'q'l'm't's' eter SFX b4 eler èlent/n'q'l'm't's' eler SFX b4 er ais/n'q'j'l'm't' [^c]er SFX b4 cer çais/n'q'j'l'm't' cer SFX b4 er ait/n'q'l'm't's' [^c]er SFX b4 cer çait/n'q'l'm't's' cer SFX b4 er ions/n'q'l't' er SFX b4 er iez/n'q'l'm' er SFX b4 er aient/n'q'l'm't's' [^c]er SFX b4 cer çaient/n'q'l'm't's' cer SFX b4 er ai/n'q'j'l'm't' [^c]er SFX b4 cer çai/n'q'j'l'm't' cer SFX b4 er as/n'q'l'm't' [^c]er SFX b4 cer ças/n'q'l'm't' cer SFX b4 er a/n'q'l'm't's' [^c]er SFX b4 cer ça/n'q'l'm't's' cer SFX b4 er âmes/n'q'l't' [^c]er SFX b4 cer çâmes/n'q'l't' cer SFX b4 er âtes/n'q'l'm' [^c]er SFX b4 cer çâtes/n'q'l'm' cer SFX b4 er èrent/n'q'l'm't's' er SFX b4 ecer ècerai/n'q'j'l'm't' ecer SFX b4 emer èmerai/n'q'j'l'm't' emer SFX b4 ener ènerai/n'q'j'l'm't' ener SFX b4 eper èperai/n'q'j'l'm't' eper SFX b4 erer èrerai/n'q'j'l'm't' erer SFX b4 eser èserai/n'q'j'l'm't' eser SFX b4 ever èverai/n'q'j'l'm't' ever SFX b4 evrer èvrerai/n'q'j'l'm't' evrer SFX b4 eter èterai/n'q'j'l'm't' eter SFX b4 eler èlerai/n'q'j'l'm't' eler SFX b4 ecer èceras/n'q'l'm't' ecer SFX b4 emer èmeras/n'q'l'm't' emer SFX b4 ener èneras/n'q'l'm't' ener SFX b4 eper èperas/n'q'l'm't' eper SFX b4 erer èreras/n'q'l'm't' erer SFX b4 eser èseras/n'q'l'm't' eser SFX b4 ever èveras/n'q'l'm't' ever SFX b4 evrer èvreras/n'q'l'm't' evrer SFX b4 eter èteras/n'q'l'm't' eter SFX b4 eler èleras/n'q'l'm't' eler SFX b4 ecer ècera/n'q'l'm't's' ecer SFX b4 emer èmera/n'q'l'm't's' emer SFX b4 ener ènera/n'q'l'm't's' ener SFX b4 eper èpera/n'q'l'm't's' eper SFX b4 erer èrera/n'q'l'm't's' erer SFX b4 eser èsera/n'q'l'm't's' eser SFX b4 ever èvera/n'q'l'm't's' ever SFX b4 evrer èvrera/n'q'l'm't's' evrer SFX b4 eter ètera/n'q'l'm't's' eter SFX b4 eler èlera/n'q'l'm't's' eler SFX b4 ecer ècerons/n'q'l't' ecer SFX b4 emer èmerons/n'q'l't' emer SFX b4 ener ènerons/n'q'l't' ener SFX b4 eper èperons/n'q'l't' eper SFX b4 erer èrerons/n'q'l't' erer SFX b4 eser èserons/n'q'l't' eser SFX b4 ever èverons/n'q'l't' ever SFX b4 evrer èvrerons/n'q'l't' evrer SFX b4 eter èterons/n'q'l't' eter SFX b4 eler èlerons/n'q'l't' eler SFX b4 ecer ècerez/n'q'l'm' ecer SFX b4 emer èmerez/n'q'l'm' emer SFX b4 ener ènerez/n'q'l'm' ener SFX b4 eper èperez/n'q'l'm' eper SFX b4 erer èrerez/n'q'l'm' erer SFX b4 eser èserez/n'q'l'm' eser SFX b4 ever èverez/n'q'l'm' ever SFX b4 evrer èvrerez/n'q'l'm' evrer SFX b4 eter èterez/n'q'l'm' eter SFX b4 eler èlerez/n'q'l'm' eler SFX b4 ecer èceront/n'q'l'm't's' ecer SFX b4 emer èmeront/n'q'l'm't's' emer SFX b4 ener èneront/n'q'l'm't's' ener SFX b4 eper èperont/n'q'l'm't's' eper SFX b4 erer èreront/n'q'l'm't's' erer SFX b4 eser èseront/n'q'l'm't's' eser SFX b4 ever èveront/n'q'l'm't's' ever SFX b4 evrer èvreront/n'q'l'm't's' evrer SFX b4 eter èteront/n'q'l'm't's' eter SFX b4 eler èleront/n'q'l'm't's' eler SFX b4 ecer ècerais/n'q'j'l'm't' ecer SFX b4 emer èmerais/n'q'j'l'm't' emer SFX b4 ener ènerais/n'q'j'l'm't' ener SFX b4 eper èperais/n'q'j'l'm't' eper SFX b4 erer èrerais/n'q'j'l'm't' erer SFX b4 eser èserais/n'q'j'l'm't' eser SFX b4 ever èverais/n'q'j'l'm't' ever SFX b4 evrer èvrerais/n'q'j'l'm't' evrer SFX b4 eter èterais/n'q'j'l'm't' eter SFX b4 eler èlerais/n'q'j'l'm't' eler SFX b4 ecer ècerait/n'q'l'm't's' ecer SFX b4 emer èmerait/n'q'l'm't's' emer SFX b4 ener ènerait/n'q'l'm't's' ener SFX b4 eper èperait/n'q'l'm't's' eper SFX b4 erer èrerait/n'q'l'm't's' erer SFX b4 eser èserait/n'q'l'm't's' eser SFX b4 ever èverait/n'q'l'm't's' ever SFX b4 evrer èvrerait/n'q'l'm't's' evrer SFX b4 eter èterait/n'q'l'm't's' eter SFX b4 eler èlerait/n'q'l'm't's' eler SFX b4 ecer ècerions/n'q'l't' ecer SFX b4 emer èmerions/n'q'l't' emer SFX b4 ener ènerions/n'q'l't' ener SFX b4 eper èperions/n'q'l't' eper SFX b4 erer èrerions/n'q'l't' erer SFX b4 eser èserions/n'q'l't' eser SFX b4 ever èverions/n'q'l't' ever SFX b4 evrer èvrerions/n'q'l't' evrer SFX b4 eter èterions/n'q'l't' eter SFX b4 eler èlerions/n'q'l't' eler SFX b4 ecer èceriez/n'q'l'm' ecer SFX b4 emer èmeriez/n'q'l'm' emer SFX b4 ener èneriez/n'q'l'm' ener SFX b4 eper èperiez/n'q'l'm' eper SFX b4 erer èreriez/n'q'l'm' erer SFX b4 eser èseriez/n'q'l'm' eser SFX b4 ever èveriez/n'q'l'm' ever SFX b4 evrer èvreriez/n'q'l'm' evrer SFX b4 eter èteriez/n'q'l'm' eter SFX b4 eler èleriez/n'q'l'm' eler SFX b4 ecer èceraient/n'q'l'm't's' ecer SFX b4 emer èmeraient/n'q'l'm't's' emer SFX b4 ener èneraient/n'q'l'm't's' ener SFX b4 eper èperaient/n'q'l'm't's' eper SFX b4 erer èreraient/n'q'l'm't's' erer SFX b4 eser èseraient/n'q'l'm't's' eser SFX b4 ever èveraient/n'q'l'm't's' ever SFX b4 evrer èvreraient/n'q'l'm't's' evrer SFX b4 eter èteraient/n'q'l'm't's' eter SFX b4 eler èleraient/n'q'l'm't's' eler SFX b4 er asse/n'q'j'l'm't' [^c]er SFX b4 cer çasse/n'q'j'l'm't' cer SFX b4 er asses/n'q'l'm't' [^c]er SFX b4 cer çasses/n'q'l'm't' cer SFX b4 er ât/n'q'l'm't's' [^c]er SFX b4 cer çât/n'q'l'm't's' cer SFX b4 er assions/n'q'l't' [^c]er SFX b4 cer çassions/n'q'l't' cer SFX b4 er assiez/n'q'l'm' [^c]er SFX b4 cer çassiez/n'q'l'm' cer SFX b4 er assent/n'q'l'm't's' [^c]er SFX b4 cer çassent/n'q'l'm't's' cer SFX b4 ecer èce/n'l'm't' ecer SFX b4 emer ème/n'l'm't' emer SFX b4 ener ène/n'l'm't' ener SFX b4 eper èpe/n'l'm't' eper SFX b4 erer ère/n'l'm't' erer SFX b4 eser èse/n'l'm't' eser SFX b4 ever ève/n'l'm't' ever SFX b4 evrer èvre/n'l'm't' evrer SFX b4 eter ète/n'l'm't' eter SFX b4 eler èle/n'l'm't' eler SFX b4 er ons/n'l' [^c]er SFX b4 cer çons/n'l' cer SFX b4 er ez/n'l'm' er SFX b5 Y 190 SFX b5 er er/n'q'd'm't's' er SFX b5 er ant/n'q'm't's' [^c]er SFX b5 cer çant/n'q'm't's' cer SFX b5 ecer èce/n'q'j'm't's' ecer SFX b5 emer ème/n'q'j'm't's' emer SFX b5 ener ène/n'q'j'm't's' ener SFX b5 eper èpe/n'q'j'm't's' eper SFX b5 erer ère/n'q'j'm't's' erer SFX b5 eser èse/n'q'j'm't's' eser SFX b5 ever ève/n'q'j'm't's' ever SFX b5 evrer èvre/n'q'j'm't's' evrer SFX b5 eter ète/n'q'j'm't's' eter SFX b5 eler èle/n'q'j'm't's' eler SFX b5 ecer èces/n'm't' ecer SFX b5 emer èmes/n'm't' emer SFX b5 ener ènes/n'm't' ener SFX b5 eper èpes/n'm't' eper SFX b5 erer ères/n'm't' erer SFX b5 eser èses/n'm't' eser SFX b5 ever èves/n'm't' ever SFX b5 evrer èvres/n'm't' evrer SFX b5 eter ètes/n'm't' eter SFX b5 eler èles/n'm't' eler SFX b5 er ons/n't' [^c]er SFX b5 cer çons/n't' cer SFX b5 er ez/n'm' er SFX b5 ecer ècent/n'q'm't's' ecer SFX b5 emer èment/n'q'm't's' emer SFX b5 ener ènent/n'q'm't's' ener SFX b5 eper èpent/n'q'm't's' eper SFX b5 erer èrent/n'q'm't's' erer SFX b5 eser èsent/n'q'm't's' eser SFX b5 ever èvent/n'q'm't's' ever SFX b5 evrer èvrent/n'q'm't's' evrer SFX b5 eter ètent/n'q'm't's' eter SFX b5 eler èlent/n'q'm't's' eler SFX b5 er ais/n'j'm't' [^c]er SFX b5 cer çais/n'j'm't' cer SFX b5 er ait/n'q'm't's' [^c]er SFX b5 cer çait/n'q'm't's' cer SFX b5 er ions/n't' er SFX b5 er iez/n'm' er SFX b5 er aient/n'q'm't's' [^c]er SFX b5 cer çaient/n'q'm't's' cer SFX b5 er ai/n'j'm't' [^c]er SFX b5 cer çai/n'j'm't' cer SFX b5 er as/n'm't' [^c]er SFX b5 cer ças/n'm't' cer SFX b5 er a/n'q'm't's' [^c]er SFX b5 cer ça/n'q'm't's' cer SFX b5 er âmes/n't' [^c]er SFX b5 cer çâmes/n't' cer SFX b5 er âtes/n'm' [^c]er SFX b5 cer çâtes/n'm' cer SFX b5 er èrent/n'q'm't's' er SFX b5 ecer ècerai/n'j'm't' ecer SFX b5 emer èmerai/n'j'm't' emer SFX b5 ener ènerai/n'j'm't' ener SFX b5 eper èperai/n'j'm't' eper SFX b5 erer èrerai/n'j'm't' erer SFX b5 eser èserai/n'j'm't' eser SFX b5 ever èverai/n'j'm't' ever SFX b5 evrer èvrerai/n'j'm't' evrer SFX b5 eter èterai/n'j'm't' eter SFX b5 eler èlerai/n'j'm't' eler SFX b5 ecer èceras/n'm't' ecer SFX b5 emer èmeras/n'm't' emer SFX b5 ener èneras/n'm't' ener SFX b5 eper èperas/n'm't' eper SFX b5 erer èreras/n'm't' erer SFX b5 eser èseras/n'm't' eser SFX b5 ever èveras/n'm't' ever SFX b5 evrer èvreras/n'm't' evrer SFX b5 eter èteras/n'm't' eter SFX b5 eler èleras/n'm't' eler SFX b5 ecer ècera/n'q'm't's' ecer SFX b5 emer èmera/n'q'm't's' emer SFX b5 ener ènera/n'q'm't's' ener SFX b5 eper èpera/n'q'm't's' eper SFX b5 erer èrera/n'q'm't's' erer SFX b5 eser èsera/n'q'm't's' eser SFX b5 ever èvera/n'q'm't's' ever SFX b5 evrer èvrera/n'q'm't's' evrer SFX b5 eter ètera/n'q'm't's' eter SFX b5 eler èlera/n'q'm't's' eler SFX b5 ecer ècerons/n't' ecer SFX b5 emer èmerons/n't' emer SFX b5 ener ènerons/n't' ener SFX b5 eper èperons/n't' eper SFX b5 erer èrerons/n't' erer SFX b5 eser èserons/n't' eser SFX b5 ever èverons/n't' ever SFX b5 evrer èvrerons/n't' evrer SFX b5 eter èterons/n't' eter SFX b5 eler èlerons/n't' eler SFX b5 ecer ècerez/n'm' ecer SFX b5 emer èmerez/n'm' emer SFX b5 ener ènerez/n'm' ener SFX b5 eper èperez/n'm' eper SFX b5 erer èrerez/n'm' erer SFX b5 eser èserez/n'm' eser SFX b5 ever èverez/n'm' ever SFX b5 evrer èvrerez/n'm' evrer SFX b5 eter èterez/n'm' eter SFX b5 eler èlerez/n'm' eler SFX b5 ecer èceront/n'q'm't's' ecer SFX b5 emer èmeront/n'q'm't's' emer SFX b5 ener èneront/n'q'm't's' ener SFX b5 eper èperont/n'q'm't's' eper SFX b5 erer èreront/n'q'm't's' erer SFX b5 eser èseront/n'q'm't's' eser SFX b5 ever èveront/n'q'm't's' ever SFX b5 evrer èvreront/n'q'm't's' evrer SFX b5 eter èteront/n'q'm't's' eter SFX b5 eler èleront/n'q'm't's' eler SFX b5 ecer ècerais/n'j'm't' ecer SFX b5 emer èmerais/n'j'm't' emer SFX b5 ener ènerais/n'j'm't' ener SFX b5 eper èperais/n'j'm't' eper SFX b5 erer èrerais/n'j'm't' erer SFX b5 eser èserais/n'j'm't' eser SFX b5 ever èverais/n'j'm't' ever SFX b5 evrer èvrerais/n'j'm't' evrer SFX b5 eter èterais/n'j'm't' eter SFX b5 eler èlerais/n'j'm't' eler SFX b5 ecer ècerait/n'q'm't's' ecer SFX b5 emer èmerait/n'q'm't's' emer SFX b5 ener ènerait/n'q'm't's' ener SFX b5 eper èperait/n'q'm't's' eper SFX b5 erer èrerait/n'q'm't's' erer SFX b5 eser èserait/n'q'm't's' eser SFX b5 ever èverait/n'q'm't's' ever SFX b5 evrer èvrerait/n'q'm't's' evrer SFX b5 eter èterait/n'q'm't's' eter SFX b5 eler èlerait/n'q'm't's' eler SFX b5 ecer ècerions/n't' ecer SFX b5 emer èmerions/n't' emer SFX b5 ener ènerions/n't' ener SFX b5 eper èperions/n't' eper SFX b5 erer èrerions/n't' erer SFX b5 eser èserions/n't' eser SFX b5 ever èverions/n't' ever SFX b5 evrer èvrerions/n't' evrer SFX b5 eter èterions/n't' eter SFX b5 eler èlerions/n't' eler SFX b5 ecer èceriez/n'm' ecer SFX b5 emer èmeriez/n'm' emer SFX b5 ener èneriez/n'm' ener SFX b5 eper èperiez/n'm' eper SFX b5 erer èreriez/n'm' erer SFX b5 eser èseriez/n'm' eser SFX b5 ever èveriez/n'm' ever SFX b5 evrer èvreriez/n'm' evrer SFX b5 eter èteriez/n'm' eter SFX b5 eler èleriez/n'm' eler SFX b5 ecer èceraient/n'q'm't's' ecer SFX b5 emer èmeraient/n'q'm't's' emer SFX b5 ener èneraient/n'q'm't's' ener SFX b5 eper èperaient/n'q'm't's' eper SFX b5 erer èreraient/n'q'm't's' erer SFX b5 eser èseraient/n'q'm't's' eser SFX b5 ever èveraient/n'q'm't's' ever SFX b5 evrer èvreraient/n'q'm't's' evrer SFX b5 eter èteraient/n'q'm't's' eter SFX b5 eler èleraient/n'q'm't's' eler SFX b5 er asse/n'j'm't' [^c]er SFX b5 cer çasse/n'j'm't' cer SFX b5 er asses/n'm't' [^c]er SFX b5 cer çasses/n'm't' cer SFX b5 er ât/n'q'm't's' [^c]er SFX b5 cer çât/n'q'm't's' cer SFX b5 er assions/n't' [^c]er SFX b5 cer çassions/n't' cer SFX b5 er assiez/n'm' [^c]er SFX b5 cer çassiez/n'm' cer SFX b5 er assent/n'q'm't's' [^c]er SFX b5 cer çassent/n'q'm't's' cer SFX b5 ecer èce/n'm' ecer SFX b5 emer ème/n'm' emer SFX b5 ener ène/n'm' ener SFX b5 eper èpe/n'm' eper SFX b5 erer ère/n'm' erer SFX b5 eser èse/n'm' eser SFX b5 ever ève/n'm' ever SFX b5 evrer èvre/n'm' evrer SFX b5 eter ète/n'm' eter SFX b5 eler èle/n'm' eler SFX b5 er ons/n' [^c]er SFX b5 cer çons/n' cer SFX b5 er ez/n' er SFX c0 N 151 SFX c0 er ant [^cg]er SFX c0 écer éçant écer SFX c0 éger égeant éger SFX c0 ébrer èbre ébrer SFX c0 écer èce écer SFX c0 écher èche écher SFX c0 écrer ècre écrer SFX c0 éder ède éder SFX c0 éger ège éger SFX c0 égler ègle égler SFX c0 égner ègne égner SFX c0 égrer ègre égrer SFX c0 éguer ègue éguer SFX c0 éler èle éler SFX c0 émer ème émer SFX c0 éner ène éner SFX c0 éper èpe éper SFX c0 équer èque équer SFX c0 érer ère érer SFX c0 éser èse éser SFX c0 éter ète éter SFX c0 étrer ètre étrer SFX c0 évrer èvre évrer SFX c0 éyer èye éyer SFX c0 ébrer èbres ébrer SFX c0 écer èces écer SFX c0 écher èches écher SFX c0 écrer ècres écrer SFX c0 éder èdes éder SFX c0 éger èges éger SFX c0 égler ègles égler SFX c0 égner ègnes égner SFX c0 égrer ègres égrer SFX c0 éguer ègues éguer SFX c0 éler èles éler SFX c0 émer èmes émer SFX c0 éner ènes éner SFX c0 éper èpes éper SFX c0 équer èques équer SFX c0 érer ères érer SFX c0 éser èses éser SFX c0 éter ètes éter SFX c0 étrer ètres étrer SFX c0 évrer èvres évrer SFX c0 éyer èyes éyer SFX c0 er ons [^cg]er SFX c0 écer éçons écer SFX c0 éger égeons éger SFX c0 er ez er SFX c0 ébrer èbrent ébrer SFX c0 écer ècent écer SFX c0 écher èchent écher SFX c0 écrer ècrent écrer SFX c0 éder èdent éder SFX c0 éger ègent éger SFX c0 égler èglent égler SFX c0 égner ègnent égner SFX c0 égrer ègrent égrer SFX c0 éguer èguent éguer SFX c0 éler èlent éler SFX c0 émer èment émer SFX c0 éner ènent éner SFX c0 éper èpent éper SFX c0 équer èquent équer SFX c0 érer èrent érer SFX c0 éser èsent éser SFX c0 éter ètent éter SFX c0 étrer ètrent étrer SFX c0 évrer èvrent évrer SFX c0 éyer èyent éyer SFX c0 er ais [^cg]er SFX c0 écer éçais écer SFX c0 éger égeais éger SFX c0 er ait [^cg]er SFX c0 écer éçait écer SFX c0 éger égeait éger SFX c0 er ions er SFX c0 er iez er SFX c0 er aient [^cg]er SFX c0 écer éçaient écer SFX c0 éger égeaient éger SFX c0 er ai [^cg]er SFX c0 écer éçai écer SFX c0 éger égeai éger SFX c0 er as [^cg]er SFX c0 écer éças écer SFX c0 éger égeas éger SFX c0 er a [^cg]er SFX c0 écer éça écer SFX c0 éger égea éger SFX c0 er âmes [^cg]er SFX c0 écer éçâmes écer SFX c0 éger égeâmes éger SFX c0 er âtes [^cg]er SFX c0 écer éçâtes écer SFX c0 éger égeâtes éger SFX c0 er èrent er SFX c0 er erai er SFX c0 er eras er SFX c0 er era er SFX c0 er erons er SFX c0 er erez er SFX c0 er eront er SFX c0 er erais er SFX c0 er erait er SFX c0 er erions er SFX c0 er eriez er SFX c0 er eraient er SFX c0 er asse [^cg]er SFX c0 écer éçasse écer SFX c0 éger égeasse éger SFX c0 er asses [^cg]er SFX c0 écer éçasses écer SFX c0 éger égeasses éger SFX c0 er ât [^cg]er SFX c0 écer éçât écer SFX c0 éger égeât éger SFX c0 er assions [^cg]er SFX c0 écer éçassions écer SFX c0 éger égeassions éger SFX c0 er assiez [^cg]er SFX c0 écer éçassiez écer SFX c0 éger égeassiez éger SFX c0 er assent [^cg]er SFX c0 écer éçassent écer SFX c0 éger égeassent éger SFX c0 ébrer èbre ébrer SFX c0 écer èce écer SFX c0 écher èche écher SFX c0 écrer ècre écrer SFX c0 éder ède éder SFX c0 éger ège éger SFX c0 égler ègle égler SFX c0 égner ègne égner SFX c0 égrer ègre égrer SFX c0 éguer ègue éguer SFX c0 éler èle éler SFX c0 émer ème émer SFX c0 éner ène éner SFX c0 éper èpe éper SFX c0 équer èque équer SFX c0 érer ère érer SFX c0 éser èse éser SFX c0 éter ète éter SFX c0 étrer ètre étrer SFX c0 évrer èvre évrer SFX c0 éyer èye éyer SFX c0 er ons [^cg]er SFX c0 écer éçons écer SFX c0 éger égeons éger SFX c0 er ez er SFX c1 Y 152 SFX c1 r r/n'q'd' er SFX c1 er ant/n'q' [^cg]er SFX c1 écer éçant/n'q' écer SFX c1 éger égeant/n'q' éger SFX c1 ébrer èbre/n'q'j' ébrer SFX c1 écer èce/n'q'j' écer SFX c1 écher èche/n'q'j' écher SFX c1 écrer ècre/n'q'j' écrer SFX c1 éder ède/n'q'j' éder SFX c1 éger ège/n'q'j' éger SFX c1 égler ègle/n'q'j' égler SFX c1 égner ègne/n'q'j' égner SFX c1 égrer ègre/n'q'j' égrer SFX c1 éguer ègue/n'q'j' éguer SFX c1 éler èle/n'q'j' éler SFX c1 émer ème/n'q'j' émer SFX c1 éner ène/n'q'j' éner SFX c1 éper èpe/n'q'j' éper SFX c1 équer èque/n'q'j' équer SFX c1 érer ère/n'q'j' érer SFX c1 éser èse/n'q'j' éser SFX c1 éter ète/n'q'j' éter SFX c1 étrer ètre/n'q'j' étrer SFX c1 évrer èvre/n'q'j' évrer SFX c1 éyer èye/n'q'j' éyer SFX c1 ébrer èbres/n' ébrer SFX c1 écer èces/n' écer SFX c1 écher èches/n' écher SFX c1 écrer ècres/n' écrer SFX c1 éder èdes/n' éder SFX c1 éger èges/n' éger SFX c1 égler ègles/n' égler SFX c1 égner ègnes/n' égner SFX c1 égrer ègres/n' égrer SFX c1 éguer ègues/n' éguer SFX c1 éler èles/n' éler SFX c1 émer èmes/n' émer SFX c1 éner ènes/n' éner SFX c1 éper èpes/n' éper SFX c1 équer èques/n' équer SFX c1 érer ères/n' érer SFX c1 éser èses/n' éser SFX c1 éter ètes/n' éter SFX c1 étrer ètres/n' étrer SFX c1 évrer èvres/n' évrer SFX c1 éyer èyes/n' éyer SFX c1 er ons/n' [^cg]er SFX c1 écer éçons/n' écer SFX c1 éger égeons/n' éger SFX c1 er ez/n' er SFX c1 ébrer èbrent/n'q' ébrer SFX c1 écer ècent/n'q' écer SFX c1 écher èchent/n'q' écher SFX c1 écrer ècrent/n'q' écrer SFX c1 éder èdent/n'q' éder SFX c1 éger ègent/n'q' éger SFX c1 égler èglent/n'q' égler SFX c1 égner ègnent/n'q' égner SFX c1 égrer ègrent/n'q' égrer SFX c1 éguer èguent/n'q' éguer SFX c1 éler èlent/n'q' éler SFX c1 émer èment/n'q' émer SFX c1 éner ènent/n'q' éner SFX c1 éper èpent/n'q' éper SFX c1 équer èquent/n'q' équer SFX c1 érer èrent/n'q' érer SFX c1 éser èsent/n'q' éser SFX c1 éter ètent/n'q' éter SFX c1 étrer ètrent/n'q' étrer SFX c1 évrer èvrent/n'q' évrer SFX c1 éyer èyent/n'q' éyer SFX c1 er ais/n'j' [^cg]er SFX c1 écer éçais/n'j' écer SFX c1 éger égeais/n'j' éger SFX c1 er ait/n'q' [^cg]er SFX c1 écer éçait/n'q' écer SFX c1 éger égeait/n'q' éger SFX c1 er ions/n' er SFX c1 er iez/n' er SFX c1 er aient/n'q' [^cg]er SFX c1 écer éçaient/n'q' écer SFX c1 éger égeaient/n'q' éger SFX c1 er ai/n'j' [^cg]er SFX c1 écer éçai/n'j' écer SFX c1 éger égeai/n'j' éger SFX c1 er as/n' [^cg]er SFX c1 écer éças/n' écer SFX c1 éger égeas/n' éger SFX c1 er a/n'q' [^cg]er SFX c1 écer éça/n'q' écer SFX c1 éger égea/n'q' éger SFX c1 er âmes/n' [^cg]er SFX c1 écer éçâmes/n' écer SFX c1 éger égeâmes/n' éger SFX c1 er âtes/n' [^cg]er SFX c1 écer éçâtes/n' écer SFX c1 éger égeâtes/n' éger SFX c1 er èrent/n'q' er SFX c1 er erai/n'j' er SFX c1 er eras/n' er SFX c1 er era/n'q' er SFX c1 er erons/n' er SFX c1 er erez/n' er SFX c1 er eront/n'q' er SFX c1 er erais/n'j' er SFX c1 er erait/n'q' er SFX c1 er erions/n' er SFX c1 er eriez/n' er SFX c1 er eraient/n'q' er SFX c1 er asse/n'j' [^cg]er SFX c1 écer éçasse/n'j' écer SFX c1 éger égeasse/n'j' éger SFX c1 er asses/n' [^cg]er SFX c1 écer éçasses/n' écer SFX c1 éger égeasses/n' éger SFX c1 er ât/n'q' [^cg]er SFX c1 écer éçât/n'q' écer SFX c1 éger égeât/n'q' éger SFX c1 er assions/n' [^cg]er SFX c1 écer éçassions/n' écer SFX c1 éger égeassions/n' éger SFX c1 er assiez/n' [^cg]er SFX c1 écer éçassiez/n' écer SFX c1 éger égeassiez/n' éger SFX c1 er assent/n'q' [^cg]er SFX c1 écer éçassent/n'q' écer SFX c1 éger égeassent/n'q' éger SFX c1 ébrer èbre/n' ébrer SFX c1 écer èce/n' écer SFX c1 écher èche/n' écher SFX c1 écrer ècre/n' écrer SFX c1 éder ède/n' éder SFX c1 éger ège/n' éger SFX c1 égler ègle/n' égler SFX c1 égner ègne/n' égner SFX c1 égrer ègre/n' égrer SFX c1 éguer ègue/n' éguer SFX c1 éler èle/n' éler SFX c1 émer ème/n' émer SFX c1 éner ène/n' éner SFX c1 éper èpe/n' éper SFX c1 équer èque/n' équer SFX c1 érer ère/n' érer SFX c1 éser èse/n' éser SFX c1 éter ète/n' éter SFX c1 étrer ètre/n' étrer SFX c1 évrer èvre/n' évrer SFX c1 éyer èye/n' éyer SFX c1 er ons/n' [^cg]er SFX c1 écer éçons/n' écer SFX c1 éger égeons/n' éger SFX c1 er ez/n' er SFX c2 Y 152 SFX c2 er er/n'q'd'l'm't's' er SFX c2 er ant/n'q'l'm't's' [^cg]er SFX c2 écer éçant/n'q'l'm't's' écer SFX c2 éger égeant/n'q'l'm't's' éger SFX c2 ébrer èbre/n'q'j'l'm't's' ébrer SFX c2 écer èce/n'q'j'l'm't's' écer SFX c2 écher èche/n'q'j'l'm't's' écher SFX c2 écrer ècre/n'q'j'l'm't's' écrer SFX c2 éder ède/n'q'j'l'm't's' éder SFX c2 éger ège/n'q'j'l'm't's' éger SFX c2 égler ègle/n'q'j'l'm't's' égler SFX c2 égner ègne/n'q'j'l'm't's' égner SFX c2 égrer ègre/n'q'j'l'm't's' égrer SFX c2 éguer ègue/n'q'j'l'm't's' éguer SFX c2 éler èle/n'q'j'l'm't's' éler SFX c2 émer ème/n'q'j'l'm't's' émer SFX c2 éner ène/n'q'j'l'm't's' éner SFX c2 éper èpe/n'q'j'l'm't's' éper SFX c2 équer èque/n'q'j'l'm't's' équer SFX c2 érer ère/n'q'j'l'm't's' érer SFX c2 éser èse/n'q'j'l'm't's' éser SFX c2 éter ète/n'q'j'l'm't's' éter SFX c2 étrer ètre/n'q'j'l'm't's' étrer SFX c2 évrer èvre/n'q'j'l'm't's' évrer SFX c2 éyer èye/n'q'j'l'm't's' éyer SFX c2 ébrer èbres/n'q'l'm' ébrer SFX c2 écer èces/n'q'l'm' écer SFX c2 écher èches/n'q'l'm' écher SFX c2 écrer ècres/n'q'l'm' écrer SFX c2 éder èdes/n'q'l'm' éder SFX c2 éger èges/n'q'l'm' éger SFX c2 égler ègles/n'q'l'm' égler SFX c2 égner ègnes/n'q'l'm' égner SFX c2 égrer ègres/n'q'l'm' égrer SFX c2 éguer ègues/n'q'l'm' éguer SFX c2 éler èles/n'q'l'm' éler SFX c2 émer èmes/n'q'l'm' émer SFX c2 éner ènes/n'q'l'm' éner SFX c2 éper èpes/n'q'l'm' éper SFX c2 équer èques/n'q'l'm' équer SFX c2 érer ères/n'q'l'm' érer SFX c2 éser èses/n'q'l'm' éser SFX c2 éter ètes/n'q'l'm' éter SFX c2 étrer ètres/n'q'l'm' étrer SFX c2 évrer èvres/n'q'l'm' évrer SFX c2 éyer èyes/n'q'l'm' éyer SFX c2 er ons/n'q'l't' [^cg]er SFX c2 écer éçons/n'q'l't' écer SFX c2 éger égeons/n'q'l't' éger SFX c2 er ez/n'q'l'm' er SFX c2 ébrer èbrent/n'q'l'm't's' ébrer SFX c2 écer ècent/n'q'l'm't's' écer SFX c2 écher èchent/n'q'l'm't's' écher SFX c2 écrer ècrent/n'q'l'm't's' écrer SFX c2 éder èdent/n'q'l'm't's' éder SFX c2 éger ègent/n'q'l'm't's' éger SFX c2 égler èglent/n'q'l'm't's' égler SFX c2 égner ègnent/n'q'l'm't's' égner SFX c2 égrer ègrent/n'q'l'm't's' égrer SFX c2 éguer èguent/n'q'l'm't's' éguer SFX c2 éler èlent/n'q'l'm't's' éler SFX c2 émer èment/n'q'l'm't's' émer SFX c2 éner ènent/n'q'l'm't's' éner SFX c2 éper èpent/n'q'l'm't's' éper SFX c2 équer èquent/n'q'l'm't's' équer SFX c2 érer èrent/n'q'l'm't's' érer SFX c2 éser èsent/n'q'l'm't's' éser SFX c2 éter ètent/n'q'l'm't's' éter SFX c2 étrer ètrent/n'q'l'm't's' étrer SFX c2 évrer èvrent/n'q'l'm't's' évrer SFX c2 éyer èyent/n'q'l'm't's' éyer SFX c2 er ais/n'q'j'l'm't' [^cg]er SFX c2 écer éçais/n'q'j'l'm't' écer SFX c2 éger égeais/n'q'j'l'm't' éger SFX c2 er ait/n'q'l'm't's' [^cg]er SFX c2 écer éçait/n'q'l'm't's' écer SFX c2 éger égeait/n'q'l'm't's' éger SFX c2 er ions/n'q'l't' er SFX c2 er iez/n'q'l'm' er SFX c2 er aient/n'q'l'm't's' [^cg]er SFX c2 écer éçaient/n'q'l'm't's' écer SFX c2 éger égeaient/n'q'l'm't's' éger SFX c2 er ai/n'q'j'l't' [^cg]er SFX c2 écer éçai/n'q'j'l't' écer SFX c2 éger égeai/n'q'j'l't' éger SFX c2 er as/n'q'l'm' [^cg]er SFX c2 écer éças/n'q'l'm' écer SFX c2 éger égeas/n'q'l'm' éger SFX c2 er a/n'q'l'm't's' [^cg]er SFX c2 écer éça/n'q'l'm't's' écer SFX c2 éger égea/n'q'l'm't's' éger SFX c2 er âmes/n'q'l't' [^cg]er SFX c2 écer éçâmes/n'q'l't' écer SFX c2 éger égeâmes/n'q'l't' éger SFX c2 er âtes/n'q'l'm' [^cg]er SFX c2 écer éçâtes/n'q'l'm' écer SFX c2 éger égeâtes/n'q'l'm' éger SFX c2 er èrent/n'q'l'm't's' er SFX c2 er erai/n'q'j'l't' er SFX c2 er eras/n'q'l'm' er SFX c2 er era/n'q'l'm't's' er SFX c2 er erons/n'q'l't' er SFX c2 er erez/n'q'l'm' er SFX c2 er eront/n'q'l'm't's' er SFX c2 er erais/n'q'j'l'm't' er SFX c2 er erait/n'q'l'm't's' er SFX c2 er erions/n'q'l't' er SFX c2 er eriez/n'q'l'm' er SFX c2 er eraient/n'q'l'm't's' er SFX c2 er asse/n'q'j'l't' [^cg]er SFX c2 écer éçasse/n'q'j'l't' écer SFX c2 éger égeasse/n'q'j'l't' éger SFX c2 er asses/n'q'l'm' [^cg]er SFX c2 écer éçasses/n'q'l'm' écer SFX c2 éger égeasses/n'q'l'm' éger SFX c2 er ât/n'q'l'm't's' [^cg]er SFX c2 écer éçât/n'q'l'm't's' écer SFX c2 éger égeât/n'q'l'm't's' éger SFX c2 er assions/n'q'l't' [^cg]er SFX c2 écer éçassions/n'q'l't' écer SFX c2 éger égeassions/n'q'l't' éger SFX c2 er assiez/n'q'l'm' [^cg]er SFX c2 écer éçassiez/n'q'l'm' écer SFX c2 éger égeassiez/n'q'l'm' éger SFX c2 er assent/n'q'l'm't's' [^cg]er SFX c2 écer éçassent/n'q'l'm't's' écer SFX c2 éger égeassent/n'q'l'm't's' éger SFX c2 ébrer èbre/n'l'm' ébrer SFX c2 écer èce/n'l'm' écer SFX c2 écher èche/n'l'm' écher SFX c2 écrer ècre/n'l'm' écrer SFX c2 éder ède/n'l'm' éder SFX c2 éger ège/n'l'm' éger SFX c2 égler ègle/n'l'm' égler SFX c2 égner ègne/n'l'm' égner SFX c2 égrer ègre/n'l'm' égrer SFX c2 éguer ègue/n'l'm' éguer SFX c2 éler èle/n'l'm' éler SFX c2 émer ème/n'l'm' émer SFX c2 éner ène/n'l'm' éner SFX c2 éper èpe/n'l'm' éper SFX c2 équer èque/n'l'm' équer SFX c2 érer ère/n'l'm' érer SFX c2 éser èse/n'l'm' éser SFX c2 éter ète/n'l'm' éter SFX c2 étrer ètre/n'l'm' étrer SFX c2 évrer èvre/n'l'm' évrer SFX c2 éyer èye/n'l'm' éyer SFX c2 er ons/n'l' [^cg]er SFX c2 écer éçons/n'l' écer SFX c2 éger égeons/n'l' éger SFX c2 er ez/n'l'm' er SFX c3 Y 152 SFX c3 er er/m't's' er SFX c3 er ant/m't's' [^cg]er SFX c3 écer éçant/m't's' écer SFX c3 éger égeant/m't's' éger SFX c3 ébrer èbre/m's' ébrer SFX c3 écer èce/m's' écer SFX c3 écher èche/m's' écher SFX c3 écrer ècre/m's' écrer SFX c3 éder ède/m's' éder SFX c3 éger ège/m's' éger SFX c3 égler ègle/m's' égler SFX c3 égner ègne/m's' égner SFX c3 égrer ègre/m's' égrer SFX c3 éguer ègue/m's' éguer SFX c3 éler èle/m's' éler SFX c3 émer ème/m's' émer SFX c3 éner ène/m's' éner SFX c3 éper èpe/m's' éper SFX c3 équer èque/m's' équer SFX c3 érer ère/m's' érer SFX c3 éser èse/m's' éser SFX c3 éter ète/m's' éter SFX c3 étrer ètre/m's' étrer SFX c3 évrer èvre/m's' évrer SFX c3 éyer èye/m's' éyer SFX c3 ébrer èbres/t' ébrer SFX c3 écer èces/t' écer SFX c3 écher èches/t' écher SFX c3 écrer ècres/t' écrer SFX c3 éder èdes/t' éder SFX c3 éger èges/t' éger SFX c3 égler ègles/t' égler SFX c3 égner ègnes/t' égner SFX c3 égrer ègres/t' égrer SFX c3 éguer ègues/t' éguer SFX c3 éler èles/t' éler SFX c3 émer èmes/t' émer SFX c3 éner ènes/t' éner SFX c3 éper èpes/t' éper SFX c3 équer èques/t' équer SFX c3 érer ères/t' érer SFX c3 éser èses/t' éser SFX c3 éter ètes/t' éter SFX c3 étrer ètres/t' étrer SFX c3 évrer èvres/t' évrer SFX c3 éyer èyes/t' éyer SFX c3 er ons [^cg]er SFX c3 écer éçons écer SFX c3 éger égeons éger SFX c3 er ez er SFX c3 ébrer èbrent/s' ébrer SFX c3 écer ècent/s' écer SFX c3 écher èchent/s' écher SFX c3 écrer ècrent/s' écrer SFX c3 éder èdent/s' éder SFX c3 éger ègent/s' éger SFX c3 égler èglent/s' égler SFX c3 égner ègnent/s' égner SFX c3 égrer ègrent/s' égrer SFX c3 éguer èguent/s' éguer SFX c3 éler èlent/s' éler SFX c3 émer èment/s' émer SFX c3 éner ènent/s' éner SFX c3 éper èpent/s' éper SFX c3 équer èquent/s' équer SFX c3 érer èrent/s' érer SFX c3 éser èsent/s' éser SFX c3 éter ètent/s' éter SFX c3 étrer ètrent/s' étrer SFX c3 évrer èvrent/s' évrer SFX c3 éyer èyent/s' éyer SFX c3 er ais/m't' [^cg]er SFX c3 écer éçais/m't' écer SFX c3 éger égeais/m't' éger SFX c3 er ait/s' [^cg]er SFX c3 écer éçait/s' écer SFX c3 éger égeait/s' éger SFX c3 er ions er SFX c3 er iez er SFX c3 er aient/s' [^cg]er SFX c3 écer éçaient/s' écer SFX c3 éger égeaient/s' éger SFX c3 er ai/m' [^cg]er SFX c3 écer éçai/m' écer SFX c3 éger égeai/m' éger SFX c3 er as/t' [^cg]er SFX c3 écer éças/t' écer SFX c3 éger égeas/t' éger SFX c3 er a/s' [^cg]er SFX c3 écer éça/s' écer SFX c3 éger égea/s' éger SFX c3 er âmes [^cg]er SFX c3 écer éçâmes écer SFX c3 éger égeâmes éger SFX c3 er âtes [^cg]er SFX c3 écer éçâtes écer SFX c3 éger égeâtes éger SFX c3 er èrent/s' er SFX c3 er erai/m' er SFX c3 er eras/t' er SFX c3 er era/s' er SFX c3 er erons er SFX c3 er erez er SFX c3 er eront/s' er SFX c3 er erais/m't' er SFX c3 er erait/s' er SFX c3 er erions er SFX c3 er eriez er SFX c3 er eraient/s' er SFX c3 er asse/m' [^cg]er SFX c3 écer éçasse/m' écer SFX c3 éger égeasse/m' éger SFX c3 er asses/t' [^cg]er SFX c3 écer éçasses/t' écer SFX c3 éger égeasses/t' éger SFX c3 er ât/s' [^cg]er SFX c3 écer éçât/s' écer SFX c3 éger égeât/s' éger SFX c3 er assions [^cg]er SFX c3 écer éçassions écer SFX c3 éger égeassions éger SFX c3 er assiez [^cg]er SFX c3 écer éçassiez écer SFX c3 éger égeassiez éger SFX c3 er assent/s' [^cg]er SFX c3 écer éçassent/s' écer SFX c3 éger égeassent/s' éger SFX c3 ébrer èbre/t' ébrer SFX c3 écer èce/t' écer SFX c3 écher èche/t' écher SFX c3 écrer ècre/t' écrer SFX c3 éder ède/t' éder SFX c3 éger ège/t' éger SFX c3 égler ègle/t' égler SFX c3 égner ègne/t' égner SFX c3 égrer ègre/t' égrer SFX c3 éguer ègue/t' éguer SFX c3 éler èle/t' éler SFX c3 émer ème/t' émer SFX c3 éner ène/t' éner SFX c3 éper èpe/t' éper SFX c3 équer èque/t' équer SFX c3 érer ère/t' érer SFX c3 éser èse/t' éser SFX c3 éter ète/t' éter SFX c3 étrer ètre/t' étrer SFX c3 évrer èvre/t' évrer SFX c3 éyer èye/t' éyer SFX c3 er ons [^cg]er SFX c3 écer éçons écer SFX c3 éger égeons éger SFX c3 er ez er SFX c4 Y 152 SFX c4 er er/n'q'd'l'm't's' er SFX c4 er ant/n'q'l'm't's' [^cg]er SFX c4 écer éçant/n'q'l'm't's' écer SFX c4 éger égeant/n'q'l'm't's' éger SFX c4 ébrer èbre/n'q'j'l'm't's' ébrer SFX c4 écer èce/n'q'j'l'm't's' écer SFX c4 écher èche/n'q'j'l'm't's' écher SFX c4 écrer ècre/n'q'j'l'm't's' écrer SFX c4 éder ède/n'q'j'l'm't's' éder SFX c4 éger ège/n'q'j'l'm't's' éger SFX c4 égler ègle/n'q'j'l'm't's' égler SFX c4 égner ègne/n'q'j'l'm't's' égner SFX c4 égrer ègre/n'q'j'l'm't's' égrer SFX c4 éguer ègue/n'q'j'l'm't's' éguer SFX c4 éler èle/n'q'j'l'm't's' éler SFX c4 émer ème/n'q'j'l'm't's' émer SFX c4 éner ène/n'q'j'l'm't's' éner SFX c4 éper èpe/n'q'j'l'm't's' éper SFX c4 équer èque/n'q'j'l'm't's' équer SFX c4 érer ère/n'q'j'l'm't's' érer SFX c4 éser èse/n'q'j'l'm't's' éser SFX c4 éter ète/n'q'j'l'm't's' éter SFX c4 étrer ètre/n'q'j'l'm't's' étrer SFX c4 évrer èvre/n'q'j'l'm't's' évrer SFX c4 éyer èye/n'q'j'l'm't's' éyer SFX c4 ébrer èbres/n'q'l'm't' ébrer SFX c4 écer èces/n'q'l'm't' écer SFX c4 écher èches/n'q'l'm't' écher SFX c4 écrer ècres/n'q'l'm't' écrer SFX c4 éder èdes/n'q'l'm't' éder SFX c4 éger èges/n'q'l'm't' éger SFX c4 égler ègles/n'q'l'm't' égler SFX c4 égner ègnes/n'q'l'm't' égner SFX c4 égrer ègres/n'q'l'm't' égrer SFX c4 éguer ègues/n'q'l'm't' éguer SFX c4 éler èles/n'q'l'm't' éler SFX c4 émer èmes/n'q'l'm't' émer SFX c4 éner ènes/n'q'l'm't' éner SFX c4 éper èpes/n'q'l'm't' éper SFX c4 équer èques/n'q'l'm't' équer SFX c4 érer ères/n'q'l'm't' érer SFX c4 éser èses/n'q'l'm't' éser SFX c4 éter ètes/n'q'l'm't' éter SFX c4 étrer ètres/n'q'l'm't' étrer SFX c4 évrer èvres/n'q'l'm't' évrer SFX c4 éyer èyes/n'q'l'm't' éyer SFX c4 er ons/n'q'l't' [^cg]er SFX c4 écer éçons/n'q'l't' écer SFX c4 éger égeons/n'q'l't' éger SFX c4 er ez/n'q'l'm' er SFX c4 ébrer èbrent/n'q'l'm't's' ébrer SFX c4 écer ècent/n'q'l'm't's' écer SFX c4 écher èchent/n'q'l'm't's' écher SFX c4 écrer ècrent/n'q'l'm't's' écrer SFX c4 éder èdent/n'q'l'm't's' éder SFX c4 éger ègent/n'q'l'm't's' éger SFX c4 égler èglent/n'q'l'm't's' égler SFX c4 égner ègnent/n'q'l'm't's' égner SFX c4 égrer ègrent/n'q'l'm't's' égrer SFX c4 éguer èguent/n'q'l'm't's' éguer SFX c4 éler èlent/n'q'l'm't's' éler SFX c4 émer èment/n'q'l'm't's' émer SFX c4 éner ènent/n'q'l'm't's' éner SFX c4 éper èpent/n'q'l'm't's' éper SFX c4 équer èquent/n'q'l'm't's' équer SFX c4 érer èrent/n'q'l'm't's' érer SFX c4 éser èsent/n'q'l'm't's' éser SFX c4 éter ètent/n'q'l'm't's' éter SFX c4 étrer ètrent/n'q'l'm't's' étrer SFX c4 évrer èvrent/n'q'l'm't's' évrer SFX c4 éyer èyent/n'q'l'm't's' éyer SFX c4 er ais/n'q'j'l'm't' [^cg]er SFX c4 écer éçais/n'q'j'l'm't' écer SFX c4 éger égeais/n'q'j'l'm't' éger SFX c4 er ait/n'q'l'm't's' [^cg]er SFX c4 écer éçait/n'q'l'm't's' écer SFX c4 éger égeait/n'q'l'm't's' éger SFX c4 er ions/n'q'l't' er SFX c4 er iez/n'q'l'm' er SFX c4 er aient/n'q'l'm't's' [^cg]er SFX c4 écer éçaient/n'q'l'm't's' écer SFX c4 éger égeaient/n'q'l'm't's' éger SFX c4 er ai/n'q'j'l'm't' [^cg]er SFX c4 écer éçai/n'q'j'l'm't' écer SFX c4 éger égeai/n'q'j'l'm't' éger SFX c4 er as/n'q'l'm't' [^cg]er SFX c4 écer éças/n'q'l'm't' écer SFX c4 éger égeas/n'q'l'm't' éger SFX c4 er a/n'q'l'm't's' [^cg]er SFX c4 écer éça/n'q'l'm't's' écer SFX c4 éger égea/n'q'l'm't's' éger SFX c4 er âmes/n'q'l't' [^cg]er SFX c4 écer éçâmes/n'q'l't' écer SFX c4 éger égeâmes/n'q'l't' éger SFX c4 er âtes/n'q'l'm' [^cg]er SFX c4 écer éçâtes/n'q'l'm' écer SFX c4 éger égeâtes/n'q'l'm' éger SFX c4 er èrent/n'q'l'm't's' er SFX c4 er erai/n'q'j'l'm't' er SFX c4 er eras/n'q'l'm't' er SFX c4 er era/n'q'l'm't's' er SFX c4 er erons/n'q'l't' er SFX c4 er erez/n'q'l'm' er SFX c4 er eront/n'q'l'm't's' er SFX c4 er erais/n'q'j'l'm't' er SFX c4 er erait/n'q'l'm't's' er SFX c4 er erions/n'q'l't' er SFX c4 er eriez/n'q'l'm' er SFX c4 er eraient/n'q'l'm't's' er SFX c4 er asse/n'q'j'l'm't' [^cg]er SFX c4 écer éçasse/n'q'j'l'm't' écer SFX c4 éger égeasse/n'q'j'l'm't' éger SFX c4 er asses/n'q'l'm't' [^cg]er SFX c4 écer éçasses/n'q'l'm't' écer SFX c4 éger égeasses/n'q'l'm't' éger SFX c4 er ât/n'q'l'm't's' [^cg]er SFX c4 écer éçât/n'q'l'm't's' écer SFX c4 éger égeât/n'q'l'm't's' éger SFX c4 er assions/n'q'l't' [^cg]er SFX c4 écer éçassions/n'q'l't' écer SFX c4 éger égeassions/n'q'l't' éger SFX c4 er assiez/n'q'l'm' [^cg]er SFX c4 écer éçassiez/n'q'l'm' écer SFX c4 éger égeassiez/n'q'l'm' éger SFX c4 er assent/n'q'l'm't's' [^cg]er SFX c4 écer éçassent/n'q'l'm't's' écer SFX c4 éger égeassent/n'q'l'm't's' éger SFX c4 ébrer èbre/n'l'm't' ébrer SFX c4 écer èce/n'l'm't' écer SFX c4 écher èche/n'l'm't' écher SFX c4 écrer ècre/n'l'm't' écrer SFX c4 éder ède/n'l'm't' éder SFX c4 éger ège/n'l'm't' éger SFX c4 égler ègle/n'l'm't' égler SFX c4 égner ègne/n'l'm't' égner SFX c4 égrer ègre/n'l'm't' égrer SFX c4 éguer ègue/n'l'm't' éguer SFX c4 éler èle/n'l'm't' éler SFX c4 émer ème/n'l'm't' émer SFX c4 éner ène/n'l'm't' éner SFX c4 éper èpe/n'l'm't' éper SFX c4 équer èque/n'l'm't' équer SFX c4 érer ère/n'l'm't' érer SFX c4 éser èse/n'l'm't' éser SFX c4 éter ète/n'l'm't' éter SFX c4 étrer ètre/n'l'm't' étrer SFX c4 évrer èvre/n'l'm't' évrer SFX c4 éyer èye/n'l'm't' éyer SFX c4 er ons/n'l' [^cg]er SFX c4 écer éçons/n'l' écer SFX c4 éger égeons/n'l' éger SFX c4 er ez/n'l'm' er SFX c5 Y 152 SFX c5 er er/n'q'd'm't's' er SFX c5 er ant/n'q'm't's' [^cg]er SFX c5 écer éçant/m'q'm't's' écer SFX c5 éger égeant/m'q'l't's' éger SFX c5 ébrer èbre/n'q'j'm't's' ébrer SFX c5 écer èce/n'q'j'm't's' écer SFX c5 écher èche/n'q'j'm't's' écher SFX c5 écrer ècre/n'q'j'm't's' écrer SFX c5 éder ède/n'q'j'm't's' éder SFX c5 éger ège/n'q'j'm't's' éger SFX c5 égler ègle/n'q'j'm't's' égler SFX c5 égner ègne/n'q'j'm't's' égner SFX c5 égrer ègre/n'q'j'm't's' égrer SFX c5 éguer ègue/n'q'j'm't's' éguer SFX c5 éler èle/n'q'j'm't's' éler SFX c5 émer ème/n'q'j'm't's' émer SFX c5 éner ène/n'q'j'm't's' éner SFX c5 éper èpe/n'q'j'm't's' éper SFX c5 équer èque/n'q'j'm't's' équer SFX c5 érer ère/n'q'j'm't's' érer SFX c5 éser èse/n'q'j'm't's' éser SFX c5 éter ète/n'q'j'm't's' éter SFX c5 étrer ètre/n'q'j'm't's' étrer SFX c5 évrer èvre/n'q'j'm't's' évrer SFX c5 éyer èye/n'q'j'm't's' éyer SFX c5 ébrer èbres/n'm't' ébrer SFX c5 écer èces/n'm't' écer SFX c5 écher èches/n'm't' écher SFX c5 écrer ècres/n'm't' écrer SFX c5 éder èdes/n'm't' éder SFX c5 éger èges/n'm't' éger SFX c5 égler ègles/n'm't' égler SFX c5 égner ègnes/n'm't' égner SFX c5 égrer ègres/n'm't' égrer SFX c5 éguer ègues/n'm't' éguer SFX c5 éler èles/n'm't' éler SFX c5 émer èmes/n'm't' émer SFX c5 éner ènes/n'm't' éner SFX c5 éper èpes/n'm't' éper SFX c5 équer èques/n'm't' équer SFX c5 érer ères/n'm't' érer SFX c5 éser èses/n'm't' éser SFX c5 éter ètes/n'm't' éter SFX c5 étrer ètres/n'm't' étrer SFX c5 évrer èvres/n'm't' évrer SFX c5 éyer èyes/n'm't' éyer SFX c5 er ons/n't' [^cg]er SFX c5 écer éçons/n't' écer SFX c5 éger égeons/n't' éger SFX c5 er ez/n'm' er SFX c5 ébrer èbrent/n'q'm't's' ébrer SFX c5 écer ècent/n'q'm't's' écer SFX c5 écher èchent/n'q'm't's' écher SFX c5 écrer ècrent/n'q'm't's' écrer SFX c5 éder èdent/n'q'm't's' éder SFX c5 éger ègent/n'q'm't's' éger SFX c5 égler èglent/n'q'm't's' égler SFX c5 égner ègnent/n'q'm't's' égner SFX c5 égrer ègrent/n'q'm't's' égrer SFX c5 éguer èguent/n'q'm't's' éguer SFX c5 éler èlent/n'q'm't's' éler SFX c5 émer èment/n'q'm't's' émer SFX c5 éner ènent/n'q'm't's' éner SFX c5 éper èpent/n'q'm't's' éper SFX c5 équer èquent/n'q'm't's' équer SFX c5 érer èrent/n'q'm't's' érer SFX c5 éser èsent/n'q'm't's' éser SFX c5 éter ètent/n'q'm't's' éter SFX c5 étrer ètrent/n'q'm't's' étrer SFX c5 évrer èvrent/n'q'm't's' évrer SFX c5 éyer èyent/n'q'm't's' éyer SFX c5 er ais/n'j'm't' [^cg]er SFX c5 écer éçais/n'j'm't' écer SFX c5 éger égeais/n'j'm't' éger SFX c5 er ait/n'q'm't's' [^cg]er SFX c5 écer éçait/n'q'm't's' écer SFX c5 éger égeait/n'q'm't's' éger SFX c5 er ions/n't' er SFX c5 er iez/n'm' er SFX c5 er aient/n'q'm't's' [^cg]er SFX c5 écer éçaient/n'q'm't's' écer SFX c5 éger égeaient/n'q'm't's' éger SFX c5 er ai/n'j'm't' [^cg]er SFX c5 écer éçai/n'j'm't' écer SFX c5 éger égeai/n'j'm't' éger SFX c5 er as/n'm't' [^cg]er SFX c5 écer éças/n'm't' écer SFX c5 éger égeas/n'm't' éger SFX c5 er a/n'q'm't's' [^cg]er SFX c5 écer éça/n'q'm't's' écer SFX c5 éger égea/n'q'm't's' éger SFX c5 er âmes/n't' [^cg]er SFX c5 écer éçâmes/n't' écer SFX c5 éger égeâmes/n't' éger SFX c5 er âtes/n'm' [^cg]er SFX c5 écer éçâtes/n'm' écer SFX c5 éger égeâtes/n'm' éger SFX c5 er èrent/n'q'm't's' er SFX c5 er erai/n'j'm't' er SFX c5 er eras/n'm't' er SFX c5 er era/n'q'm't's' er SFX c5 er erons/n't' er SFX c5 er erez/n'm' er SFX c5 er eront/n'q'm't's' er SFX c5 er erais/n'j'm't' er SFX c5 er erait/n'q'm't's' er SFX c5 er erions/n't' er SFX c5 er eriez/n'm' er SFX c5 er eraient/n'q'm't's' er SFX c5 er asse/n'j'm't' [^cg]er SFX c5 écer éçasse/n'j'm't' écer SFX c5 éger égeasse/n'j'm't' éger SFX c5 er asses/n'm't' [^cg]er SFX c5 écer éçasses/n'm't' écer SFX c5 éger égeasses/n'm't' éger SFX c5 er ât/n'q'm't's' [^cg]er SFX c5 écer éçât/n'q'm't's' écer SFX c5 éger égeât/n'q'm't's' éger SFX c5 er assions/n't' [^cg]er SFX c5 écer éçassions/n't' écer SFX c5 éger égeassions/n't' éger SFX c5 er assiez/n'm' [^cg]er SFX c5 écer éçassiez/n'm' écer SFX c5 éger égeassiez/n'm' éger SFX c5 er assent/n'q'm't's' [^cg]er SFX c5 écer éçassent/n'q'm't's' écer SFX c5 éger égeassent/n'q'm't's' éger SFX c5 ébrer èbre/n'm' ébrer SFX c5 écer èce/n'm' écer SFX c5 écher èche/n'm' écher SFX c5 écrer ècre/n'm' écrer SFX c5 éder ède/n'm' éder SFX c5 éger ège/n'm' éger SFX c5 égler ègle/n'm' égler SFX c5 égner ègne/n'm' égner SFX c5 égrer ègre/n'm' égrer SFX c5 éguer ègue/n'm' éguer SFX c5 éler èle/n'm' éler SFX c5 émer ème/n'm' émer SFX c5 éner ène/n'm' éner SFX c5 éper èpe/n'm' éper SFX c5 équer èque/n'm' équer SFX c5 érer ère/n'm' érer SFX c5 éser èse/n'm' éser SFX c5 éter ète/n'm' éter SFX c5 étrer ètre/n'm' étrer SFX c5 évrer èvre/n'm' évrer SFX c5 éyer èye/n'm' éyer SFX c5 er ons/n' [^cg]er SFX c5 écer éçons/n' écer SFX c5 éger égeons/n' éger SFX c5 er ez/n' er SFX d0 N 82 SFX d0 er ant er SFX d0 eter ette jeter SFX d0 eter ette [^j]eter SFX d0 eler elle ppeler SFX d0 eler elle [^p].eler SFX d0 eter ettes jeter SFX d0 eter ettes [^j]eter SFX d0 eler elles ppeler SFX d0 eler elles [^p].eler SFX d0 er ons er SFX d0 er ez er SFX d0 eter ettent jeter SFX d0 eter ettent [^j]eter SFX d0 eler ellent ppeler SFX d0 eler ellent [^p].eler SFX d0 er ais er SFX d0 er ait er SFX d0 er ions er SFX d0 er iez er SFX d0 er aient er SFX d0 er ai er SFX d0 er as er SFX d0 er a er SFX d0 er âmes er SFX d0 er âtes er SFX d0 er èrent er SFX d0 eter etterai jeter SFX d0 eter etterai [^j]eter SFX d0 eler ellerai ppeler SFX d0 eler ellerai [^p].eler SFX d0 eter etteras jeter SFX d0 eter etteras [^j]eter SFX d0 eler elleras ppeler SFX d0 eler elleras [^p].eler SFX d0 eter ettera jeter SFX d0 eter ettera [^j]eter SFX d0 eler ellera ppeler SFX d0 eler ellera [^p].eler SFX d0 eter etterons jeter SFX d0 eter etterons [^j]eter SFX d0 eler ellerons ppeler SFX d0 eler ellerons [^p].eler SFX d0 eter etterez jeter SFX d0 eter etterez [^j]eter SFX d0 eler ellerez ppeler SFX d0 eler ellerez [^p].eler SFX d0 eter etteront jeter SFX d0 eter etteront [^j]eter SFX d0 eler elleront ppeler SFX d0 eler elleront [^p].eler SFX d0 eter etterais jeter SFX d0 eter etterais [^j]eter SFX d0 eler ellerais ppeler SFX d0 eler ellerais [^p].eler SFX d0 eter etterait jeter SFX d0 eter etterait [^j]eter SFX d0 eler ellerait ppeler SFX d0 eler ellerait [^p].eler SFX d0 eter etterions jeter SFX d0 eter etterions [^j]eter SFX d0 eler ellerions ppeler SFX d0 eler ellerions [^p].eler SFX d0 eter etteriez jeter SFX d0 eter etteriez [^j]eter SFX d0 eler elleriez ppeler SFX d0 eler elleriez [^p].eler SFX d0 eter etteraient jeter SFX d0 eter etteraient [^j]eter SFX d0 eler elleraient ppeler SFX d0 eler elleraient [^p].eler SFX d0 er asse er SFX d0 er asses er SFX d0 er ât er SFX d0 er assions er SFX d0 er assiez er SFX d0 er assent er SFX d0 eter ette jeter SFX d0 eter ette [^j]eter SFX d0 eler elle ppeler SFX d0 eler elle [^p].eler SFX d0 er ons er SFX d0 er ez er SFX d1 Y 83 SFX d1 er er/n'q'd' er SFX d1 er ant/n'q' er SFX d1 eter ette/n'q'j' jeter SFX d1 eter ette/n'q'j' [^j]eter SFX d1 eler elle/n'q'j' ppeler SFX d1 eler elle/n'q'j' [^p].eler SFX d1 eter ettes/n' jeter SFX d1 eter ettes/n' [^j]eter SFX d1 eler elles/n' ppeler SFX d1 eler elles/n' [^p].eler SFX d1 er ons/n' er SFX d1 er ez/n' er SFX d1 eter ettent/n'q' jeter SFX d1 eter ettent/n'q' [^j]eter SFX d1 eler ellent/n'q' ppeler SFX d1 eler ellent/n'q' [^p].eler SFX d1 er ais/n'j' er SFX d1 er ait/n'q' er SFX d1 er ions/n' er SFX d1 er iez/n' er SFX d1 er aient/n'q' er SFX d1 er ai/n'j' er SFX d1 er as/n' er SFX d1 er a/n'q' er SFX d1 er âmes/n' er SFX d1 er âtes/n' er SFX d1 er èrent/n'q' er SFX d1 eter etterai/n'j' jeter SFX d1 eter etterai/n'j' [^j]eter SFX d1 eler ellerai/n'j' ppeler SFX d1 eler ellerai/n'j' [^p].eler SFX d1 eter etteras/n' jeter SFX d1 eter etteras/n' [^j]eter SFX d1 eler elleras/n' ppeler SFX d1 eler elleras/n' [^p].eler SFX d1 eter ettera/n'q' jeter SFX d1 eter ettera/n'q' [^j]eter SFX d1 eler ellera/n'q' ppeler SFX d1 eler ellera/n'q' [^p].eler SFX d1 eter etterons/n' jeter SFX d1 eter etterons/n' [^j]eter SFX d1 eler ellerons/n' ppeler SFX d1 eler ellerons/n' [^p].eler SFX d1 eter etterez/n' jeter SFX d1 eter etterez/n' [^j]eter SFX d1 eler ellerez/n' ppeler SFX d1 eler ellerez/n' [^p].eler SFX d1 eter etteront/n'q' jeter SFX d1 eter etteront/n'q' [^j]eter SFX d1 eler elleront/n'q' ppeler SFX d1 eler elleront/n'q' [^p].eler SFX d1 eter etterais/n'j' jeter SFX d1 eter etterais/n'j' [^j]eter SFX d1 eler ellerais/n'j' ppeler SFX d1 eler ellerais/n'j' [^p].eler SFX d1 eter etterait/n'q' jeter SFX d1 eter etterait/n'q' [^j]eter SFX d1 eler ellerait/n'q' ppeler SFX d1 eler ellerait/n'q' [^p].eler SFX d1 eter etterions/n' jeter SFX d1 eter etterions/n' [^j]eter SFX d1 eler ellerions/n' ppeler SFX d1 eler ellerions/n' [^p].eler SFX d1 eter etteriez/n' jeter SFX d1 eter etteriez/n' [^j]eter SFX d1 eler elleriez/n' ppeler SFX d1 eler elleriez/n' [^p].eler SFX d1 eter etteraient/n'q' jeter SFX d1 eter etteraient/n'q' [^j]eter SFX d1 eler elleraient/n'q' ppeler SFX d1 eler elleraient/n'q' [^p].eler SFX d1 er asse/n'j' er SFX d1 er asses/n' er SFX d1 er ât/n'q' er SFX d1 er assions/n' er SFX d1 er assiez/n' er SFX d1 er assent/n'q' er SFX d1 eter ette/n' jeter SFX d1 eter ette/n' [^j]eter SFX d1 eler elle/n' ppeler SFX d1 eler elle/n' [^p].eler SFX d1 er ons/n' er SFX d1 er ez/n' er SFX d2 Y 83 SFX d2 er er/n'q'd'l'm't's' er SFX d2 er ant/n'q'l'm't's' er SFX d2 eter ette/n'q'j'l'm't's' jeter SFX d2 eter ette/n'q'j'l'm't's' [^j]eter SFX d2 eler elle/n'q'j'l'm't's' ppeler SFX d2 eler elle/n'q'j'l'm't's' [^p].eler SFX d2 eter ettes/n'q'l'm' jeter SFX d2 eter ettes/n'q'l'm' [^j]eter SFX d2 eler elles/n'q'l'm' ppeler SFX d2 eler elles/n'q'l'm' [^p].eler SFX d2 er ons/n'q'l't' er SFX d2 er ez/n'q'l'm' er SFX d2 eter ettent/n'q'l'm't's' jeter SFX d2 eter ettent/n'q'l'm't's' [^j]eter SFX d2 eler ellent/n'q'l'm't's' ppeler SFX d2 eler ellent/n'q'l'm't's' [^p].eler SFX d2 er ais/n'q'j'l'm't' er SFX d2 er ait/n'q'l'm't's' er SFX d2 er ions/n'q'l't' er SFX d2 er iez/n'q'l'm' er SFX d2 er aient/n'q'l'm't's' er SFX d2 er ai/n'q'j'l't' er SFX d2 er as/n'q'l'm' er SFX d2 er a/n'q'l'm't's' er SFX d2 er âmes/n'q'l't' er SFX d2 er âtes/n'q'l'm' er SFX d2 er èrent/n'q'l'm't's' er SFX d2 eter etterai/n'q'j'l't' jeter SFX d2 eter etterai/n'q'j'l't' [^j]eter SFX d2 eler ellerai/n'q'j'l't' ppeler SFX d2 eler ellerai/n'q'j'l't' [^p].eler SFX d2 eter etteras/n'q'l'm' jeter SFX d2 eter etteras/n'q'l'm' [^j]eter SFX d2 eler elleras/n'q'l'm' ppeler SFX d2 eler elleras/n'q'l'm' [^p].eler SFX d2 eter ettera/n'q'l'm't's' jeter SFX d2 eter ettera/n'q'l'm't's' [^j]eter SFX d2 eler ellera/n'q'l'm't's' ppeler SFX d2 eler ellera/n'q'l'm't's' [^p].eler SFX d2 eter etterons/n'q'l't' jeter SFX d2 eter etterons/n'q'l't' [^j]eter SFX d2 eler ellerons/n'q'l't' ppeler SFX d2 eler ellerons/n'q'l't' [^p].eler SFX d2 eter etterez/n'q'l'm' jeter SFX d2 eter etterez/n'q'l'm' [^j]eter SFX d2 eler ellerez/n'q'l'm' ppeler SFX d2 eler ellerez/n'q'l'm' [^p].eler SFX d2 eter etteront/n'q'l'm't's' jeter SFX d2 eter etteront/n'q'l'm't's' [^j]eter SFX d2 eler elleront/n'q'l'm't's' ppeler SFX d2 eler elleront/n'q'l'm't's' [^p].eler SFX d2 eter etterais/n'q'j'l'm't' jeter SFX d2 eter etterais/n'q'j'l'm't' [^j]eter SFX d2 eler ellerais/n'q'j'l'm't' ppeler SFX d2 eler ellerais/n'q'j'l'm't' [^p].eler SFX d2 eter etterait/n'q'l'm't's' jeter SFX d2 eter etterait/n'q'l'm't's' [^j]eter SFX d2 eler ellerait/n'q'l'm't's' ppeler SFX d2 eler ellerait/n'q'l'm't's' [^p].eler SFX d2 eter etterions/n'q'l't' jeter SFX d2 eter etterions/n'q'l't' [^j]eter SFX d2 eler ellerions/n'q'l't' ppeler SFX d2 eler ellerions/n'q'l't' [^p].eler SFX d2 eter etteriez/n'q'l'm' jeter SFX d2 eter etteriez/n'q'l'm' [^j]eter SFX d2 eler elleriez/n'q'l'm' ppeler SFX d2 eler elleriez/n'q'l'm' [^p].eler SFX d2 eter etteraient/n'q'l'm't's' jeter SFX d2 eter etteraient/n'q'l'm't's' [^j]eter SFX d2 eler elleraient/n'q'l'm't's' ppeler SFX d2 eler elleraient/n'q'l'm't's' [^p].eler SFX d2 er asse/n'q'j'l't' er SFX d2 er asses/n'q'l'm' er SFX d2 er ât/n'q'l'm't's' er SFX d2 er assions/n'q'l't' er SFX d2 er assiez/n'q'l'm' er SFX d2 er assent/n'q'l'm't's' er SFX d2 eter ette/n'l'm' jeter SFX d2 eter ette/n'l'm' [^j]eter SFX d2 eler elle/n'l'm' ppeler SFX d2 eler elle/n'l'm' [^p].eler SFX d2 er ons/n'l' er SFX d2 er ez/n'l'm' er SFX d3 Y 83 SFX d3 er er/m't's' er SFX d3 er ant/m't's' er SFX d3 eter ette/m's' jeter SFX d3 eter ette/m's' [^j]eter SFX d3 eler elle/m's' ppeler SFX d3 eler elle/m's' [^p].eler SFX d3 eter ettes/t' jeter SFX d3 eter ettes/t' [^j]eter SFX d3 eler elles/t' ppeler SFX d3 eler elles/t' [^p].eler SFX d3 er ons er SFX d3 er ez er SFX d3 eter ettent/s' jeter SFX d3 eter ettent/s' [^j]eter SFX d3 eler ellent/s' ppeler SFX d3 eler ellent/s' [^p].eler SFX d3 er ais/m't' er SFX d3 er ait/s' er SFX d3 er ions er SFX d3 er iez er SFX d3 er aient/s' er SFX d3 er ai/m' er SFX d3 er as/t' er SFX d3 er a/s' er SFX d3 er âmes er SFX d3 er âtes er SFX d3 er èrent/s' er SFX d3 eter etterai/m' jeter SFX d3 eter etterai/m' [^j]eter SFX d3 eler ellerai/m' ppeler SFX d3 eler ellerai/m' [^p].eler SFX d3 eter etteras/t' jeter SFX d3 eter etteras/t' [^j]eter SFX d3 eler elleras/t' ppeler SFX d3 eler elleras/t' [^p].eler SFX d3 eter ettera/s' jeter SFX d3 eter ettera/s' [^j]eter SFX d3 eler ellera/s' ppeler SFX d3 eler ellera/s' [^p].eler SFX d3 eter etterons jeter SFX d3 eter etterons [^j]eter SFX d3 eler ellerons ppeler SFX d3 eler ellerons [^p].eler SFX d3 eter etterez jeter SFX d3 eter etterez [^j]eter SFX d3 eler ellerez ppeler SFX d3 eler ellerez [^p].eler SFX d3 eter etteront/s' jeter SFX d3 eter etteront/s' [^j]eter SFX d3 eler elleront/s' ppeler SFX d3 eler elleront/s' [^p].eler SFX d3 eter etterais/m't' jeter SFX d3 eter etterais/m't' [^j]eter SFX d3 eler ellerais/m't' ppeler SFX d3 eler ellerais/m't' [^p].eler SFX d3 eter etterait/s' jeter SFX d3 eter etterait/s' [^j]eter SFX d3 eler ellerait/s' ppeler SFX d3 eler ellerait/s' [^p].eler SFX d3 eter etterions jeter SFX d3 eter etterions [^j]eter SFX d3 eler ellerions ppeler SFX d3 eler ellerions [^p].eler SFX d3 eter etteriez jeter SFX d3 eter etteriez [^j]eter SFX d3 eler elleriez ppeler SFX d3 eler elleriez [^p].eler SFX d3 eter etteraient/s' jeter SFX d3 eter etteraient/s' [^j]eter SFX d3 eler elleraient/s' ppeler SFX d3 eler elleraient/s' [^p].eler SFX d3 er asse/m' er SFX d3 er asses/t' er SFX d3 er ât/s' er SFX d3 er assions er SFX d3 er assiez er SFX d3 er assent/s' er SFX d3 eter ette/t' jeter SFX d3 eter ette/t' [^j]eter SFX d3 eler elle/t' ppeler SFX d3 eler elle/t' [^p].eler SFX d3 er ons er SFX d3 er ez er SFX d4 Y 98 SFX d4 er er/n'q'd'l'm't's' er SFX d4 er ant/n'q'l'm't's' er SFX d4 eter ette/n'q'j'l'm't's' jeter SFX d4 eter ette/n'q'j'l'm't's' [^j]eter SFX d4 eler elle/n'q'j'l'm't's' ppeler SFX d4 eler elle/n'q'j'l'm't's' [^p].eler SFX d4 eler elle/n'q'j'l'm't's' épeler SFX d4 eter ettes/n'q'l'm't' jeter SFX d4 eter ettes/n'q'l'm't' [^j]eter SFX d4 eler elles/n'q'l'm't' ppeler SFX d4 eler elles/n'q'l'm't' [^p].eler SFX d4 eler elles/n'q'l'm't' épeler SFX d4 er ons/n'q'l't' er SFX d4 er ez/n'q'l'm' er SFX d4 eter ettent/n'q'l'm't's' jeter SFX d4 eter ettent/n'q'l'm't's' [^j]eter SFX d4 eler ellent/n'q'l'm't's' ppeler SFX d4 eler ellent/n'q'l'm't's' [^p].eler SFX d4 eler ellent/n'q'l'm't's' épeler SFX d4 er ais/n'q'j'l'm't' er SFX d4 er ait/n'q'l'm't's' er SFX d4 er ions/n'q'l't' er SFX d4 er iez/n'q'l'm' er SFX d4 er aient/n'q'l'm't's' er SFX d4 er ai/n'q'j'l'm't' er SFX d4 er as/n'q'l'm't' er SFX d4 er a/n'q'l'm't's' er SFX d4 er âmes/n'q'l't' er SFX d4 er âtes/n'q'l'm' er SFX d4 er èrent/n'q'l'm't's' er SFX d4 eter etterai/n'q'j'l'm't' jeter SFX d4 eter etterai/n'q'j'l'm't' [^j]eter SFX d4 eler ellerai/n'q'j'l'm't' ppeler SFX d4 eler ellerai/n'q'j'l'm't' [^p].eler SFX d4 eler ellerai/n'q'j'l'm't' épeler SFX d4 eter etteras/n'q'l'm't' jeter SFX d4 eter etteras/n'q'l'm't' [^j]eter SFX d4 eler elleras/n'q'l'm't' ppeler SFX d4 eler elleras/n'q'l'm't' [^p].eler SFX d4 eler elleras/n'q'l'm't' épeler SFX d4 eter ettera/n'q'l'm't's' jeter SFX d4 eter ettera/n'q'l'm't's' [^j]eter SFX d4 eler ellera/n'q'l'm't's' ppeler SFX d4 eler ellera/n'q'l'm't's' [^p].eler SFX d4 eler ellera/n'q'l'm't's' épeler SFX d4 eter etterons/n'q'l't' jeter SFX d4 eter etterons/n'q'l't' [^j]eter SFX d4 eler ellerons/n'q'l't' ppeler SFX d4 eler ellerons/n'q'l't' [^p].eler SFX d4 eler ellerons/n'q'l't' épeler SFX d4 eter etterez/n'q'l'm' jeter SFX d4 eter etterez/n'q'l'm' [^j]eter SFX d4 eler ellerez/n'q'l'm' ppeler SFX d4 eler ellerez/n'q'l'm' [^p].eler SFX d4 eler ellerez/n'q'l'm' épeler SFX d4 eter etteront/n'q'l'm't's' jeter SFX d4 eter etteront/n'q'l'm't's' [^j]eter SFX d4 eler elleront/n'q'l'm't's' ppeler SFX d4 eler elleront/n'q'l'm't's' [^p].eler SFX d4 eler elleront/n'q'l'm't's' épeler SFX d4 eter etterais/n'q'j'l'm't' jeter SFX d4 eter etterais/n'q'j'l'm't' [^j]eter SFX d4 eler ellerais/n'q'j'l'm't' ppeler SFX d4 eler ellerais/n'q'j'l'm't' [^p].eler SFX d4 eler ellerais/n'q'j'l'm't' épeler SFX d4 eter etterait/n'q'l'm't's' jeter SFX d4 eter etterait/n'q'l'm't's' [^j]eter SFX d4 eler ellerait/n'q'l'm't's' ppeler SFX d4 eler ellerait/n'q'l'm't's' [^p].eler SFX d4 eler ellerait/n'q'l'm't's' épeler SFX d4 eter etterions/n'q'l't' jeter SFX d4 eter etterions/n'q'l't' [^j]eter SFX d4 eler ellerions/n'q'l't' ppeler SFX d4 eler ellerions/n'q'l't' [^p].eler SFX d4 eler ellerions/n'q'l't' épeler SFX d4 eter etteriez/n'q'l'm' jeter SFX d4 eter etteriez/n'q'l'm' [^j]eter SFX d4 eler elleriez/n'q'l'm' ppeler SFX d4 eler elleriez/n'q'l'm' [^p].eler SFX d4 eler elleriez/n'q'l'm' épeler SFX d4 eter etteraient/n'q'l'm't's' jeter SFX d4 eter etteraient/n'q'l'm't's' [^j]eter SFX d4 eler elleraient/n'q'l'm't's' ppeler SFX d4 eler elleraient/n'q'l'm't's' [^p].eler SFX d4 eler elleraient/n'q'l'm't's' épeler SFX d4 er asse/n'q'j'l'm't' er SFX d4 er asses/n'q'l'm't' er SFX d4 er ât/n'q'l'm't's' er SFX d4 er assions/n'q'l't' er SFX d4 er assiez/n'q'l'm' er SFX d4 er assent/n'q'l'm't's' er SFX d4 eter ette/n'l'm't' jeter SFX d4 eter ette/n'l'm't' [^j]eter SFX d4 eler elle/n'l'm't' ppeler SFX d4 eler elle/n'l'm't' [^p].eler SFX d4 eler elle/n'l'm't' épeler SFX d4 er ons/n'l' er SFX d4 er ez/n'l'm' er SFX d5 Y 83 SFX d5 er er/m'q'd'm't's' er SFX d5 er ant/m'q'd'm't's' er SFX d5 eter ette/n'q'j'm't's' jeter SFX d5 eter ette/n'q'j'm't's' [^j]eter SFX d5 eler elle/n'q'j'm't's' ppeler SFX d5 eler elle/n'q'j'm't's' [^p].eler SFX d5 eter ettes/n'm't' jeter SFX d5 eter ettes/n'm't' [^j]eter SFX d5 eler elles/n'm't' ppeler SFX d5 eler elles/n'm't' [^p].eler SFX d5 er ons/n't' er SFX d5 er ez/n'm' er SFX d5 eter ettent/n'q'm't's' jeter SFX d5 eter ettent/n'q'm't's' [^j]eter SFX d5 eler ellent/n'q'm't's' ppeler SFX d5 eler ellent/n'q'm't's' [^p].eler SFX d5 er ais/n'j'm't' er SFX d5 er ait/n'q'm't's' er SFX d5 er ions/n't' er SFX d5 er iez/n'm' er SFX d5 er aient/n'q'm't's' er SFX d5 er ai/n'j'm't' er SFX d5 er as/n'm't' er SFX d5 er a/n'q'm't's' er SFX d5 er âmes/n't' er SFX d5 er âtes/n'm' er SFX d5 er èrent/n'q'm't's' er SFX d5 eter etterai/n'j'm't' jeter SFX d5 eter etterai/n'j'm't' [^j]eter SFX d5 eler ellerai/n'j'm't' ppeler SFX d5 eler ellerai/n'j'm't' [^p].eler SFX d5 eter etteras/n'm't' jeter SFX d5 eter etteras/n'm't' [^j]eter SFX d5 eler elleras/n'm't' ppeler SFX d5 eler elleras/n'm't' [^p].eler SFX d5 eter ettera/n'q'm't's' jeter SFX d5 eter ettera/n'q'm't's' [^j]eter SFX d5 eler ellera/n'q'm't's' ppeler SFX d5 eler ellera/n'q'm't's' [^p].eler SFX d5 eter etterons/n't' jeter SFX d5 eter etterons/n't' [^j]eter SFX d5 eler ellerons/n't' ppeler SFX d5 eler ellerons/n't' [^p].eler SFX d5 eter etterez/n'm' jeter SFX d5 eter etterez/n'm' [^j]eter SFX d5 eler ellerez/n'm' ppeler SFX d5 eler ellerez/n'm' [^p].eler SFX d5 eter etteront/n'q'm't's' jeter SFX d5 eter etteront/n'q'm't's' [^j]eter SFX d5 eler elleront/n'q'm't's' ppeler SFX d5 eler elleront/n'q'm't's' [^p].eler SFX d5 eter etterais/n'j'm't' jeter SFX d5 eter etterais/n'j'm't' [^j]eter SFX d5 eler ellerais/n'j'm't' ppeler SFX d5 eler ellerais/n'j'm't' [^p].eler SFX d5 eter etterait/n'q'm't's' jeter SFX d5 eter etterait/n'q'm't's' [^j]eter SFX d5 eler ellerait/n'q'm't's' ppeler SFX d5 eler ellerait/n'q'm't's' [^p].eler SFX d5 eter etterions/n't' jeter SFX d5 eter etterions/n't' [^j]eter SFX d5 eler ellerions/n't' ppeler SFX d5 eler ellerions/n't' [^p].eler SFX d5 eter etteriez/n'm' jeter SFX d5 eter etteriez/n'm' [^j]eter SFX d5 eler elleriez/n'm' ppeler SFX d5 eler elleriez/n'm' [^p].eler SFX d5 eter etteraient/n'q'm't's' jeter SFX d5 eter etteraient/n'q'm't's' [^j]eter SFX d5 eler elleraient/n'q'm't's' ppeler SFX d5 eler elleraient/n'q'm't's' [^p].eler SFX d5 er asse/n'j'm't' er SFX d5 er asses/n'm't' er SFX d5 er ât/n'q'm't's' er SFX d5 er assions/n't' er SFX d5 er assiez/n'm' er SFX d5 er assent/n'q'm't's' er SFX d5 eter ette/m' jeter SFX d5 eter ette/m' [^j]eter SFX d5 eler elle/m' ppeler SFX d5 eler elle/m' [^p].eler SFX d5 er ons er SFX d5 er ez er SFX aA Y 54 SFX aA ller ller/n'q'd'm't' aller SFX aA ller llant/n'q'm't' aller SFX aA ller llé/q' aller SFX aA ller llés/q' aller SFX aA ller llée/q' aller SFX aA ller llées/q' aller SFX aA aller vais aller SFX aA aller vas aller SFX aA aller va aller SFX aA ller llons/n'q' aller SFX aA ller llez/n'q' aller SFX aA aller vont aller SFX aA ller llais/n'q'j' aller SFX aA ller llait/n'q'm't' aller SFX aA ller llions/n'q' aller SFX aA ller lliez/n'q' aller SFX aA ller llaient/n'q'm't' aller SFX aA ller llai/n'q'j' aller SFX aA ller llas/n'q' aller SFX aA ller lla/n'q'm't' aller SFX aA ller llâmes/n'q' aller SFX aA ller llâtes/n'q' aller SFX aA ller llèrent/n'q'm't' aller SFX aA aller irai/n'q'j' aller SFX aA aller iras/n'q' aller SFX aA aller ira/n'q'm't' aller SFX aA aller irons/n'q' aller SFX aA aller irez/n'q'm't' aller SFX aA aller iront/n'q' aller SFX aA aller irais/n'q'j' aller SFX aA aller irait/n'q'm't' aller SFX aA aller irions/n'q' aller SFX aA aller iriez/n'q' aller SFX aA aller iraient/n'q'm't' aller SFX aA ller ille/n'q'j'm't' aller SFX aA ller illes/n' aller SFX aA ller llions/n' aller SFX aA ller lliez/n' aller SFX aA ller illent/n'q'm't' aller SFX aA ller llasse/n'q'j' aller SFX aA ller llasses/n'q' aller SFX aA ller llât/n'q'm't' aller SFX aA ller llassions/n'q' aller SFX aA ller llassiez/n'q' aller SFX aA ller llassent/n'q'm't' aller SFX aA ller llons/n' aller SFX aA aller va aller SFX aA aller vas-y aller SFX aA aller va-t'en aller SFX aA ller llons-y aller SFX aA ller llons-nous-en aller SFX aA ller llez/n' aller SFX aA ller llez-y aller SFX aA ller llez-vous-en aller SFX aD Y 44 SFX aD voyer voyer/n'q'd'l'm't's' envoyer SFX aD voyer voyant/n'q'l'm't's' envoyer SFX aD voyer voyé/q' envoyer SFX aD voyer voyés/q' envoyer SFX aD voyer voyée/q' envoyer SFX aD voyer voyées/q' envoyer SFX aD voyer voie/n'q'j'l'm't's' envoyer SFX aD voyer voies/n'q'l'm't' envoyer SFX aD voyer voyons/n'q'l't' envoyer SFX aD voyer voyez/n'q'l'm' envoyer SFX aD voyer voient/n'q'l'm't's' envoyer SFX aD voyer voyais/n'q'j'l'm't' envoyer SFX aD voyer voyait/n'q'l'm't's' envoyer SFX aD voyer voyions/n'q'l't' envoyer SFX aD voyer voyiez/n'q'l'm' envoyer SFX aD voyer voyaient/n'q'l'm't's' envoyer SFX aD voyer voyai/n'q'j'l'm't' envoyer SFX aD voyer voyas/n'q'l'm't' envoyer SFX aD voyer voya/n'q'l'm't's' envoyer SFX aD voyer voyâmes/n'q'l't' envoyer SFX aD voyer voyâtes/n'q'l'm' envoyer SFX aD voyer voyèrent/n'q'l'm't's' envoyer SFX aD voyer verrai/n'q'j'l'm't' envoyer SFX aD voyer verras/n'q'l'm't' envoyer SFX aD voyer verra/n'q'l'm't's' envoyer SFX aD voyer verrons/n'q'l't' envoyer SFX aD voyer verrez/n'q'l'm' envoyer SFX aD voyer verront/n'q'l'm't's' envoyer SFX aD voyer verrais/n'q'j'l'm't' envoyer SFX aD voyer verrait/n'q'l'm't's' envoyer SFX aD voyer verrions/n'q'l't' envoyer SFX aD voyer verriez/n'q'l'm' envoyer SFX aD voyer verraient/n'q'l'm't's' envoyer SFX aD voyer voie/n'q'j'l'm't's' envoyer SFX aD voyer voies/n'l'm't' envoyer SFX aD voyer voyasse/n'q'j'l'm't' envoyer SFX aD voyer voyasses/n'q'l'm't' envoyer SFX aD voyer voyât/n'q'l'm't's' envoyer SFX aD voyer voyassions/n'q'l't' envoyer SFX aD voyer voyassiez/n'q'l'm' envoyer SFX aD voyer voyassent/n'q'l'm't's' envoyer SFX aD voyer voie/n'l'm't' envoyer SFX aD voyer voyons/n'l' envoyer SFX aD voyer voyez/n'l'm' envoyer SFX aE Y 6 SFX aE direr direr/n'q'd'l'm't's' direr SFX aE direr dirant/n'q'l'm't's' direr SFX aE direr diré/q' direr SFX aE direr dirés/q' direr SFX aE direr dirée/q' direr SFX aE direr dirées/q' direr SFX aF N 17 SFX aF cerner cernant er SFX aF cerner cerné er SFX aF cerner cernés er SFX aF cerner cernée er SFX aF cerner cernées er SFX aF cerner cerne er SFX aF cerner cernent er SFX aF cerner cernait er SFX aF cerner cernaient er SFX aF cerner cerna er SFX aF cerner cernèrent er SFX aF cerner cernera er SFX aF cerner cerneront er SFX aF cerner cernerait er SFX aF cerner cerneraient er SFX aF cerner cernât er SFX aF cerner cernassent er SFX aG Y 19 SFX aG er er/n'q'd'm't' er SFX aG er ant/n'q'm't' er SFX aG mber mbé mber SFX aG lter lté lter SFX aG lter ltés lter SFX aG lter ltée lter SFX aG lter ltées lter SFX aG er e/n'q'm't' er SFX aG er ent/n'q'm't' er SFX aG er ait/n'q'm't' er SFX aG er aient/n'q'm't' er SFX aG er a/n'q'm't' er SFX aG er èrent/n'q'm't' er SFX aG er era/n'q'm't' er SFX aG er eront/n'q'm't' er SFX aG er erait/n'q'm't' er SFX aG er eraient/n'q'm't' er SFX aG er ât/n'q'm't' er SFX aG er assent/n'q'm't' er SFX aH N 38 SFX aH er ant gger SFX aH er é gger SFX aH er e gger SFX aH er es gger SFX aH er ons gger SFX aH er ez gger SFX aH er ent gger SFX aH er ais gger SFX aH er ait gger SFX aH er ions gger SFX aH er iez gger SFX aH er aient gger SFX aH er ai gger SFX aH er as gger SFX aH er a gger SFX aH er âmes gger SFX aH er âtes gger SFX aH er èrent gger SFX aH er erai gger SFX aH er eras gger SFX aH er era gger SFX aH er erons gger SFX aH er erez gger SFX aH er eront gger SFX aH er erais gger SFX aH er erait gger SFX aH er erions gger SFX aH er eriez gger SFX aH er eraient gger SFX aH er asse gger SFX aH er asses gger SFX aH er ât gger SFX aH er assions gger SFX aH er assiez gger SFX aH er assent gger SFX aH er e gger SFX aH er ons gger SFX aH er ez gger SFX aY N 41 SFX aY neler nelant neler SFX aY neler nelé neler SFX aY neler nelés neler SFX aY neler nelée neler SFX aY neler nelées neler SFX aY éneler énelle éneler SFX aY éneler énelles éneler SFX aY neler nelons neler SFX aY neler nelez neler SFX aY éneler énellent éneler SFX aY neler nelais neler SFX aY neler nelait neler SFX aY neler nelions neler SFX aY neler neliez neler SFX aY neler nelaient neler SFX aY neler nelai neler SFX aY neler nelas neler SFX aY neler nela neler SFX aY neler nelâmes neler SFX aY neler nelâtes neler SFX aY neler nelèrent neler SFX aY éneler énellerai éneler SFX aY éneler énelleras éneler SFX aY éneler énellera éneler SFX aY éneler énellerons éneler SFX aY éneler énellerez éneler SFX aY éneler énelleront éneler SFX aY éneler énellerais éneler SFX aY éneler énellerait éneler SFX aY éneler énellerions éneler SFX aY éneler énelleriez éneler SFX aY éneler énelleraient éneler SFX aY neler nelasse neler SFX aY neler nelasses neler SFX aY neler nelât neler SFX aY neler nelassions neler SFX aY neler nelassiez neler SFX aY neler nelassent neler SFX aY éneler énelle éneler SFX aY neler nelons neler SFX aY neler nelez neler SFX aZ N 41 SFX aZ teler telant teler SFX aZ teler telé teler SFX aZ teler telés teler SFX aZ teler telée teler SFX aZ teler telées teler SFX aZ ételer ételle ételer SFX aZ ételer ételles ételer SFX aZ teler telons teler SFX aZ teler telez teler SFX aZ ételer étellent ételer SFX aZ teler telais teler SFX aZ teler telait teler SFX aZ teler telions teler SFX aZ teler teliez teler SFX aZ teler telaient teler SFX aZ teler telai teler SFX aZ teler telas teler SFX aZ teler tela teler SFX aZ teler telâmes teler SFX aZ teler telâtes teler SFX aZ teler telèrent teler SFX aZ ételer étellerai ételer SFX aZ ételer ételleras ételer SFX aZ ételer étellera ételer SFX aZ ételer étellerons ételer SFX aZ ételer étellerez ételer SFX aZ ételer ételleront ételer SFX aZ ételer étellerais ételer SFX aZ ételer étellerait ételer SFX aZ ételer étellerions ételer SFX aZ ételer ételleriez ételer SFX aZ ételer ételleraient ételer SFX aZ teler telasse teler SFX aZ teler telasses teler SFX aZ teler telât teler SFX aZ teler telassions teler SFX aZ teler telassiez teler SFX aZ teler telassent teler SFX aZ ételer ételle ételer SFX aZ teler telons teler SFX aZ teler telez teler SFX dA Y 42 SFX dA peler peler/n'q'd'l'm't's' peler SFX dA peler pelant/n'q'l'm't's' peler SFX dA peler pelé/q' peler SFX dA peler pelés/q' peler SFX dA peler pelée/q' peler SFX dA peler pelées/q' peler SFX dA peler pelle/n'q'j'l'm't's' peler SFX dA peler pelles/n'q'l'm' peler SFX dA peler pelons/n'q'l't' peler SFX dA peler pelez/n'q'l'm' peler SFX dA peler pellent/n'q'l'm't's' peler SFX dA peler pelais/n'q'j'l't' peler SFX dA peler pelait/n'q'l'm't's' peler SFX dA peler pelions/n'q'l't' peler SFX dA peler peliez/n'q'l'm' peler SFX dA peler pelaient/n'q'l'm't's' peler SFX dA peler pelai/n'q'j'l't' peler SFX dA peler pelas/n'q'l'm' peler SFX dA peler pela/n'q'l'm't's' peler SFX dA peler pelâmes/n'q'l't' peler SFX dA peler pelâtes/n'q'l'm' peler SFX dA peler pelèrent/n'q'l'm't's' peler SFX dA peler pellerai/n'q'j'l't' peler SFX dA peler pelleras/n'q'l'm' peler SFX dA peler pellera/n'q'l'm't's' peler SFX dA peler pellerons/n'q'l't' peler SFX dA peler pellerez/n'q'l'm' peler SFX dA peler pelleront/n'q'l'm't's' peler SFX dA peler pellerais/n'q'j'l't' peler SFX dA peler pellerait/n'q'l'm't's' peler SFX dA peler pellerions/n'q'l't' peler SFX dA peler pelleriez/n'q'l'm' peler SFX dA peler pelleraient/n'q'l'm't's' peler SFX dA peler pelasse/n'q'j'l't' peler SFX dA peler pelasses/n'q'l'm' peler SFX dA peler pelât/n'q'l'm't's' peler SFX dA peler pelassions/n'q'l't' peler SFX dA peler pelassiez/n'q'l'm' peler SFX dA peler pelassent/n'q'l'm't's' peler SFX dA peler pelle/n'l'm' peler SFX dA peler pelons/n'l' peler SFX dA peler pelez/n'l'm' peler SFX f0 Y 32 SFX f0 ir issant ir SFX f0 ir is ir SFX f0 ir it ir SFX f0 ir issons ir SFX f0 ir issez ir SFX f0 ir issent ir SFX f0 ir issais ir SFX f0 ir issait ir SFX f0 ir issions ir SFX f0 ir issiez ir SFX f0 ir issaient ir SFX f0 ir îmes ir SFX f0 ir îtes ir SFX f0 ir irent ir SFX f0 ir irai ir SFX f0 ir iras ir SFX f0 ir ira ir SFX f0 ir irons ir SFX f0 ir irez ir SFX f0 ir iront ir SFX f0 ir irais ir SFX f0 ir irait ir SFX f0 ir irions ir SFX f0 ir iriez ir SFX f0 ir iraient ir SFX f0 ir isse ir SFX f0 ir isses ir SFX f0 ir isse ir SFX f0 ir ît ir SFX f0 ir is ir SFX f0 ir issons ir SFX f0 ir issez ir SFX f1 Y 33 SFX f1 ir ir/n'q'd' ir SFX f1 ir issant/n'q' ir SFX f1 ir is/n'j' ir SFX f1 ir it/n'q' ir SFX f1 ir issons/n' ir SFX f1 ir issez/n' ir SFX f1 ir issent/n'q' ir SFX f1 ir issais/n'j' ir SFX f1 ir issait/n'q' ir SFX f1 ir issions/n' ir SFX f1 ir issiez/n' ir SFX f1 ir issaient/n'q' ir SFX f1 ir îmes/n' ir SFX f1 ir îtes/n' ir SFX f1 ir irent/n'q' ir SFX f1 ir irai/n'j' ir SFX f1 ir iras/n' ir SFX f1 ir ira/n'q' ir SFX f1 ir irons/n' ir SFX f1 ir irez/n' ir SFX f1 ir iront/n'q' ir SFX f1 ir irais/n'j' ir SFX f1 ir irait/n'q' ir SFX f1 ir irions/n' ir SFX f1 ir iriez/n' ir SFX f1 ir iraient/n'q' ir SFX f1 ir isse/n'j' ir SFX f1 ir isses/n' ir SFX f1 ir isse/n'q' ir SFX f1 ir ît/n'q' ir SFX f1 ir is/n' ir SFX f1 ir issons/n' ir SFX f1 ir issez/n' ir SFX f2 Y 33 SFX f2 ir ir/n'q'd'l'm't's' ir SFX f2 ir issant/n'q'l'm't's' ir SFX f2 ir is/n'q'j'l't' ir SFX f2 ir it/n'q'l'm't's' ir SFX f2 ir issons/n'q'l't' ir SFX f2 ir issez/n'q'l'm' ir SFX f2 ir issent/n'q'l'm't's' ir SFX f2 ir issais/n'q'j'l't' ir SFX f2 ir issait/n'q'l'm't's' ir SFX f2 ir issions/n'q'l't' ir SFX f2 ir issiez/n'q'l'm' ir SFX f2 ir issaient/n'q'l'm't's' ir SFX f2 ir îmes/n'q'l't' ir SFX f2 ir îtes/n'q'l'm' ir SFX f2 ir irent/n'q'l'm't's' ir SFX f2 ir irai/n'q'j'l't' ir SFX f2 ir iras/n'q'l'm't' ir SFX f2 ir ira/n'q'l'm't's' ir SFX f2 ir irons/n'q'l't' ir SFX f2 ir irez/n'q'l'm' ir SFX f2 ir iront/n'q'l'm't's' ir SFX f2 ir irais/n'q'j'l'm't' ir SFX f2 ir irait/n'q'l'm't's' ir SFX f2 ir irions/n'q'l't' ir SFX f2 ir iriez/n'q'l'm' ir SFX f2 ir iraient/n'q'l'm't's' ir SFX f2 ir isse/n'q'j'l't' ir SFX f2 ir isses/n'q'l'm' ir SFX f2 ir isse/n'q'l'm't's' ir SFX f2 ir ît/n'q'l'm't's' ir SFX f2 ir is/n'l'm' ir SFX f2 ir issons/n'l' ir SFX f2 ir issez/n'l'm' ir SFX f3 Y 33 SFX f3 ir ir/m't's' ir SFX f3 ir issant/m't's' ir SFX f3 ir is/m't' ir SFX f3 ir it/s' ir SFX f3 ir issons ir SFX f3 ir issez ir SFX f3 ir issent/s' ir SFX f3 ir issais/m't' ir SFX f3 ir issait/s' ir SFX f3 ir issions ir SFX f3 ir issiez ir SFX f3 ir issaient/s' ir SFX f3 ir îmes ir SFX f3 ir îtes ir SFX f3 ir irent/s' ir SFX f3 ir irai/m' ir SFX f3 ir iras/t' ir SFX f3 ir ira/s' ir SFX f3 ir irons ir SFX f3 ir irez ir SFX f3 ir iront/s' ir SFX f3 ir irais/m't' ir SFX f3 ir irait/s' ir SFX f3 ir irions ir SFX f3 ir iriez ir SFX f3 ir iraient/s' ir SFX f3 ir isse/m' ir SFX f3 ir isses/t' ir SFX f3 ir isse/s' ir SFX f3 ir ît/s' ir SFX f3 ir is/t' ir SFX f3 ir issons ir SFX f3 ir issez ir SFX f4 Y 33 SFX f4 ir ir/n'q'd'l'm't's' ir SFX f4 ir issant/n'q'l'm't's' ir SFX f4 ir is/n'q'j'l'm't' ir SFX f4 ir it/n'q'l'm't's' ir SFX f4 ir issons/n'q'l't' ir SFX f4 ir issez/n'q'l'm' ir SFX f4 ir issent/n'q'l'm't's' ir SFX f4 ir issais/n'q'j'l'm't' ir SFX f4 ir issait/n'q'l'm't's' ir SFX f4 ir issions/n'q'l't' ir SFX f4 ir issiez/n'q'l'm' ir SFX f4 ir issaient/n'q'l'm't's' ir SFX f4 ir îmes/n'q'l't' ir SFX f4 ir îtes/n'q'l'm' ir SFX f4 ir irent/n'q'l'm't's' ir SFX f4 ir irai/n'q'j'l'm't' ir SFX f4 ir iras/n'q'l'm't' ir SFX f4 ir ira/n'q'l'm't's' ir SFX f4 ir irons/n'q'l't' ir SFX f4 ir irez/n'q'l'm' ir SFX f4 ir iront/n'q'l'm't's' ir SFX f4 ir irais/n'q'j'l'm't' ir SFX f4 ir irait/n'q'l'm't's' ir SFX f4 ir irions/n'q'l't' ir SFX f4 ir iriez/n'q'l'm' ir SFX f4 ir iraient/n'q'l'm't's' ir SFX f4 ir isse/n'q'j'l'm't' ir SFX f4 ir isses/n'q'l'm't' ir SFX f4 ir isse/n'q'l'm't's' ir SFX f4 ir ît/n'q'l'm't's' ir SFX f4 ir is/n'l'm't' ir SFX f4 ir issons/n'l' ir SFX f4 ir issez/n'l'm' ir SFX f5 Y 33 SFX f5 ir ir/n'q'd'm't's' ir SFX f5 ir issant/n'q'm't's' ir SFX f5 ir is/n'j'm't' ir SFX f5 ir it/n'q'm't's' ir SFX f5 ir issons/n't' ir SFX f5 ir issez/n'm' ir SFX f5 ir issent/n'q'm't's' ir SFX f5 ir issais/n'j'm't' ir SFX f5 ir issait/n'q'm't's' ir SFX f5 ir issions/n't' ir SFX f5 ir issiez/n'm' ir SFX f5 ir issaient/n'q'm't's' ir SFX f5 ir îmes/n't' ir SFX f5 ir îtes/n'm' ir SFX f5 ir irent/n'q'm't's' ir SFX f5 ir irai/n'j'm't' ir SFX f5 ir iras/n'm't' ir SFX f5 ir ira/n'q'm't's' ir SFX f5 ir irons/n't' ir SFX f5 ir irez/n'm' ir SFX f5 ir iront/n'q'm't's' ir SFX f5 ir irais/n'j'm't' ir SFX f5 ir irait/n'q'm't's' ir SFX f5 ir irions/n't' ir SFX f5 ir iriez/n'm' ir SFX f5 ir iraient/n'q'm't's' ir SFX f5 ir isse/n'j'm't' ir SFX f5 ir isses/n'm't' ir SFX f5 ir isse/n'q'm't's' ir SFX f5 ir ît/n'q'm't's' ir SFX f5 ir is/n'm' ir SFX f5 ir issons/n' ir SFX f5 ir issez/n'm' ir SFX fA N 37 SFX fA aïr aïssant aïr SFX fA aïr aï aïr SFX fA aïr aïs aïr SFX fA aïr aïe aïr SFX fA aïr aïes aïr SFX fA aïr ais aïr SFX fA aïr ait aïr SFX fA aïr aïssons aïr SFX fA aïr aïssez aïr SFX fA aïr aïssent aïr SFX fA aïr aïssais aïr SFX fA aïr aïssait aïr SFX fA aïr aïssions aïr SFX fA aïr aïssiez aïr SFX fA aïr aïssaient aïr SFX fA aïr aïs aïr SFX fA aïr aït aïr SFX fA aïr aïmes aïr SFX fA aïr aïtes aïr SFX fA aïr aïrent aïr SFX fA aïr aïrai aïr SFX fA aïr aïras aïr SFX fA aïr aïra aïr SFX fA aïr aïrons aïr SFX fA aïr aïrez aïr SFX fA aïr aïront aïr SFX fA aïr aïrais aïr SFX fA aïr aïrait aïr SFX fA aïr aïrions aïr SFX fA aïr aïriez aïr SFX fA aïr aïraient aïr SFX fA aïr aïsse aïr SFX fA aïr aïsses aïr SFX fA aïr aïsse aïr SFX fA aïr ais aïr SFX fA aïr aïssons aïr SFX fA aïr aïssez aïr SFX fB Y 29 SFX fB haïr haïr/s' aïr SFX fB haïr haïssant/s' aïr SFX fB haïr haï aïr SFX fB haïr haïs aïr SFX fB haïr haïe aïr SFX fB haïr haïes aïr SFX fB haïr hait/s' aïr SFX fB haïr haïssons aïr SFX fB haïr haïssez aïr SFX fB haïr haïssent/s' aïr SFX fB haïr haïssait/s' aïr SFX fB haïr haïssions aïr SFX fB haïr haïssiez aïr SFX fB haïr haïssaient/s' aïr SFX fB haïr haït/s' aïr SFX fB haïr haïmes aïr SFX fB haïr haïtes aïr SFX fB haïr haïrent/s' aïr SFX fB haïr haïra/s' aïr SFX fB haïr haïrons aïr SFX fB haïr haïrez aïr SFX fB haïr haïront/s' aïr SFX fB haïr haïrait/s' aïr SFX fB haïr haïrions aïr SFX fB haïr haïriez aïr SFX fB haïr haïraient/s' aïr SFX fB haïr haïsse/s' aïr SFX fB haïr haïssons-nous aïr SFX fB haïr haïssez-vous aïr SFX fC Y 11 SFX fC partir partir/n'q'd'l'm't's' impartir SFX fC partir partissant/n'q'l'm't's' impartir SFX fC partir parti/q' impartir SFX fC partir partis/q' impartir SFX fC partir partie/q' impartir SFX fC partir parties/q' impartir SFX fC partir partis/n'q'j'l'm't' impartir SFX fC partir partit/n'q'l'm't's' impartir SFX fC partir partissons/n'q'l't' impartir SFX fC partir partissez/n'q'l'm' impartir SFX fC partir partissent/n'q'l'm't's' impartir SFX fD N 11 SFX fD ortir ortissant sortir SFX fD ortir ortit sortir SFX fD ortir ortissent sortir SFX fD ortir ortissait sortir SFX fD ortir ortissaient sortir SFX fD ortir ortira sortir SFX fD ortir ortiront sortir SFX fD ortir ortirait sortir SFX fD ortir ortiraient sortir SFX fD ortir ortisse sortir SFX fD ortir ortît sortir SFX fY N 37 SFX fY uïr uïr/s' uïr SFX fY uïr uïssant/m't's' uïr SFX fY uïr uï uïr SFX fY uïr uïs uïr SFX fY uïr uïe uïr SFX fY uïr uïes uïr SFX fY uïr uïs/m't' uïr SFX fY uïr uït/s' uïr SFX fY uïr uïssons uïr SFX fY uïr uïssez uïr SFX fY uïr uïssent/s' uïr SFX fY uïr uïssais/m't' uïr SFX fY uïr uïssait/s' uïr SFX fY uïr uïssions uïr SFX fY uïr uïssiez uïr SFX fY uïr uïssaient/s' uïr SFX fY uïr uîmes uïr SFX fY uïr uîtes uïr SFX fY uïr uïrent/s' uïr SFX fY uïr uïrai/m' uïr SFX fY uïr uïras/t' uïr SFX fY uïr uïra/s' uïr SFX fY uïr uïrons uïr SFX fY uïr uïrez uïr SFX fY uïr uïront/s' uïr SFX fY uïr uïrais/m't' uïr SFX fY uïr uïrait/s' uïr SFX fY uïr uïrions uïr SFX fY uïr uïriez uïr SFX fY uïr uïraient/s' uïr SFX fY uïr uïsse/m' uïr SFX fY uïr uïsses/t' uïr SFX fY uïr uïsse/s' uïr SFX fY uïr uît/s' uïr SFX fY uïr uïs/t' uïr SFX fY uïr uïssons uïr SFX fY uïr uïssez uïr SFX fZ N 7 SFX fZ gir gissant agir SFX fZ gir git agir SFX fZ gir gissait agir SFX fZ gir gira agir SFX fZ gir girait agir SFX fZ gir gisse agir SFX fZ gir gît agir SFX p+ Y 8 SFX p+ er é/L'D'Q' er SFX p+ er és/D'Q' er SFX p+ er ée/L'D'Q' er SFX p+ er ées/D'Q' er SFX p+ ir i/L'D'Q' ir SFX p+ ir is/D'Q' ir SFX p+ ir ie/L'D'Q' ir SFX p+ ir ies/D'Q' ir SFX p. Y 2 SFX p. er é/q' er SFX p. ir i/q' ir SFX i0 Y 39 SFX i0 enir enir/n'q'd' enir SFX i0 enir enant/n'q' enir SFX i0 enir iens/n'j' enir SFX i0 enir ient/n'q' enir SFX i0 enir enons/n' enir SFX i0 enir enez/n' enir SFX i0 enir iennent/n'q' enir SFX i0 enir enais/n'j' enir SFX i0 enir enait/n'q' enir SFX i0 enir enions/n' enir SFX i0 enir eniez/n' enir SFX i0 enir enaient/n'q' enir SFX i0 enir ins/n'j' enir SFX i0 enir int/n'q' enir SFX i0 enir înmes/n' enir SFX i0 enir întes/n' enir SFX i0 enir inrent/n'q' enir SFX i0 enir iendrai/n'j' enir SFX i0 enir iendras/n' enir SFX i0 enir iendra/n'q' enir SFX i0 enir iendrons/n' enir SFX i0 enir iendrez/n' enir SFX i0 enir iendront/n'q' enir SFX i0 enir iendrais/n'j' enir SFX i0 enir iendrait/n'q' enir SFX i0 enir iendrions/n' enir SFX i0 enir iendriez/n' enir SFX i0 enir iendraient/n'q' enir SFX i0 enir ienne/n'q'j' enir SFX i0 enir iennes/n' enir SFX i0 enir insse/n'j' enir SFX i0 enir insses/n' enir SFX i0 enir înt/n'q' enir SFX i0 enir inssions/n' enir SFX i0 enir inssiez/n' enir SFX i0 enir inssent/n'q' enir SFX i0 enir iens/n' enir SFX i0 enir enons/n' enir SFX i0 enir enez/n' enir SFX i1 Y 39 SFX i1 enir enir/n'q'd'l'm't's' enir SFX i1 enir enant/n'q'l'm't's' enir SFX i1 enir iens/n'q'j'l'm't' enir SFX i1 enir ient/n'q'l'm't's' enir SFX i1 enir enons/n'q'l't' enir SFX i1 enir enez/n'q'l'm' enir SFX i1 enir iennent/n'q'l'm't's' enir SFX i1 enir enais/n'q'j'l'm't' enir SFX i1 enir enait/n'q'l'm't's' enir SFX i1 enir enions/n'q'l't' enir SFX i1 enir eniez/n'q'l'm' enir SFX i1 enir enaient/n'q'l'm't's' enir SFX i1 enir ins/n'q'j'l'm't' enir SFX i1 enir int/n'q'l'm't's' enir SFX i1 enir înmes/n'q'l't' enir SFX i1 enir întes/n'q'l'm' enir SFX i1 enir inrent/n'q'l'm't's' enir SFX i1 enir iendrai/n'q'j'l'm't' enir SFX i1 enir iendras/n'q'l'm't' enir SFX i1 enir iendra/n'q'l'm't's' enir SFX i1 enir iendrons/n'q'l't' enir SFX i1 enir iendrez/n'q'l'm' enir SFX i1 enir iendront/n'q'l'm't's' enir SFX i1 enir iendrais/n'q'j'l'm't' enir SFX i1 enir iendrait/n'q'l'm't's' enir SFX i1 enir iendrions/n'q'l't' enir SFX i1 enir iendriez/n'q'l'm' enir SFX i1 enir iendraient/n'q'l'm't's' enir SFX i1 enir ienne/n'q'j'l'm't's' enir SFX i1 enir iennes/n'l'm't' enir SFX i1 enir insse/n'q'j'l'm't' enir SFX i1 enir insses/n'q'l'm't' enir SFX i1 enir înt/n'q'l'm't's' enir SFX i1 enir inssions/n'q'l't' enir SFX i1 enir inssiez/n'q'l'm' enir SFX i1 enir inssent/n'q'l'm't's' enir SFX i1 enir iens/n'l'm't' enir SFX i1 enir enons/n'l' enir SFX i1 enir enez/n'l'm' enir SFX i2 Y 39 SFX i2 enir enir/m't's' enir SFX i2 enir enant/m't's' enir SFX i2 enir iens/m't' enir SFX i2 enir ient/s' enir SFX i2 enir enons enir SFX i2 enir enez enir SFX i2 enir iennent/s' enir SFX i2 enir enais/m't' enir SFX i2 enir enait/s' enir SFX i2 enir enions enir SFX i2 enir eniez enir SFX i2 enir enaient/s' enir SFX i2 enir ins/m't' enir SFX i2 enir int/s' enir SFX i2 enir înmes enir SFX i2 enir întes enir SFX i2 enir inrent/s' enir SFX i2 enir iendrai/m' enir SFX i2 enir iendras/t' enir SFX i2 enir iendra/s' enir SFX i2 enir iendrons enir SFX i2 enir iendrez enir SFX i2 enir iendront/s' enir SFX i2 enir iendrais/m't' enir SFX i2 enir iendrait/s' enir SFX i2 enir iendrions enir SFX i2 enir iendriez enir SFX i2 enir iendraient/s' enir SFX i2 enir ienne/m's' enir SFX i2 enir iennes/t' enir SFX i2 enir insse/m' enir SFX i2 enir insses/t' enir SFX i2 enir înt/s' enir SFX i2 enir inssions enir SFX i2 enir inssiez enir SFX i2 enir inssent/s' enir SFX i2 enir iens/t' enir SFX i2 enir enons enir SFX i2 enir enez enir SFX i5 N 38 SFX i5 tir tant tir SFX i5 tir s tir SFX i5 tir t tir SFX i5 tir tons tir SFX i5 tir tez tir SFX i5 tir tent tir SFX i5 tir tais tir SFX i5 tir tait tir SFX i5 tir tions tir SFX i5 tir tiez tir SFX i5 tir taient tir SFX i5 tir tis tir SFX i5 tir tit tir SFX i5 tir tîmes tir SFX i5 tir tîtes tir SFX i5 tir tirent tir SFX i5 tir tirai tir SFX i5 tir tiras tir SFX i5 tir tira tir SFX i5 tir tirons tir SFX i5 tir tirez tir SFX i5 tir tiront tir SFX i5 tir tirais tir SFX i5 tir tirait tir SFX i5 tir tirions tir SFX i5 tir tiriez tir SFX i5 tir tiraient tir SFX i5 tir te tir SFX i5 tir tes tir SFX i5 tir tisse tir SFX i5 tir tisses tir SFX i5 tir tît tir SFX i5 tir tissions tir SFX i5 tir tissiez tir SFX i5 tir tissent tir SFX i5 tir s tir SFX i5 tir tons tir SFX i5 tir tez tir SFX iA Y 19 SFX iA dvenir dvenir/n'q'd'm't' venir SFX iA dvenir dvenant/n'q'm't' venir SFX iA dvenir dvenu/Q' venir SFX iA dvenir dvenus/Q' venir SFX iA dvenir dvenue/Q' venir SFX iA dvenir dvenues/Q' venir SFX iA dvenir dvient/n'q'm't' venir SFX iA dvenir dviennent/n'q' venir SFX iA dvenir dvenait/n'q'm't' venir SFX iA dvenir dvenaient/n'q' venir SFX iA dvenir dvint/n'q'm't' venir SFX iA dvenir dvinrent/n'q' venir SFX iA dvenir dviendra/n'q'm't' venir SFX iA dvenir dviendront/n'q' venir SFX iA dvenir dviendrait/n'q'm't' venir SFX iA dvenir dviendraient/n'q' venir SFX iA dvenir dvienne/n'q'm't' venir SFX iA dvenir dvînt/n'q'm't' venir SFX iA dvenir dvinssent/n'q' venir SFX iB Y 40 SFX iB partenir partenir/n'q'd'm't's' tenir SFX iB partenir partenant/n'q'm't's' tenir SFX iB partenir partenu/q' tenir SFX iB partenir partiens/n'j'm't' tenir SFX iB partenir partient/n'q'm't's' tenir SFX iB partenir partenons/n't' tenir SFX iB partenir partenez/n'm' tenir SFX iB partenir partiennent/n'q'm't's' tenir SFX iB partenir partenais/n'j'm't' tenir SFX iB partenir partenait/n'q'm't's' tenir SFX iB partenir partenions/n't' tenir SFX iB partenir parteniez/n'm' tenir SFX iB partenir partenaient/n'q'm't's' tenir SFX iB partenir partins/n'j'm't' tenir SFX iB partenir partint/n'q'm't's' tenir SFX iB partenir partînmes/n't' tenir SFX iB partenir partîntes/n'm' tenir SFX iB partenir partinrent/n'q'm't's' tenir SFX iB partenir partiendrai/n'j'm't' tenir SFX iB partenir partiendras/n'm't' tenir SFX iB partenir partiendra/n'q'm't's' tenir SFX iB partenir partiendrons/n't' tenir SFX iB partenir partiendrez/n'm' tenir SFX iB partenir partiendront/n'q'm't's' tenir SFX iB partenir partiendrais/n'j'm't' tenir SFX iB partenir partiendrait/n'q'm't's' tenir SFX iB partenir partiendrions/n't' tenir SFX iB partenir partiendriez/n'm' tenir SFX iB partenir partiendraient/n'q'm't's' tenir SFX iB partenir partienne/n'q'j'm't's' tenir SFX iB partenir partiennes/n'm't' tenir SFX iB partenir partinsse/n'j'm't' tenir SFX iB partenir partinsses/n'm't' tenir SFX iB partenir partînt/n'q'm't's' tenir SFX iB partenir partinssions/n't' tenir SFX iB partenir partinssiez/n'm' tenir SFX iB partenir partinssent/n'q'm't's' tenir SFX iB partenir partiens/n'm't' tenir SFX iB partenir partenons/n' tenir SFX iB partenir partenez/n'm' tenir SFX iC Y 41 SFX iC rir rir/n'q'd'l'm't's' [vf]rir SFX iC rir rant/n'q'l'm't's' [vf]rir SFX iC rir ert/L'D'Q' [vf]rir SFX iC rir erts/D'Q' [vf]rir SFX iC rir erte/L'D'Q' [vf]rir SFX iC rir ertes/D'Q' [vf]rir SFX iC rir re/n'q'j'l'm't's' [vf]rir SFX iC rir res/n'q'l'm't' [vf]rir SFX iC rir rons/n'q'l't' [vf]rir SFX iC rir rez/n'q'l'm' [vf]rir SFX iC rir rent/n'q'l'm't's' [vf]rir SFX iC rir rais/n'q'j'l'm't' [vf]rir SFX iC rir rait/n'q'l'm't's' [vf]rir SFX iC rir rions/n'q'l't' [vf]rir SFX iC rir riez/n'q'l'm' [vf]rir SFX iC rir raient/n'q'l'm't's' [vf]rir SFX iC rir ris/n'q'j'l'm't' [vf]rir SFX iC rir rit/n'q'l'm't's' [vf]rir SFX iC rir rîmes/n'q'l't' [vf]rir SFX iC rir rîtes/n'q'l'm' [vf]rir SFX iC rir rirent/n'q'l'm't's' [vf]rir SFX iC rir rirai/n'q'j'l'm't' [vf]rir SFX iC rir riras/n'q'l'm't' [vf]rir SFX iC rir rira/n'q'l'm't's' [vf]rir SFX iC rir rirons/n'q'l't' [vf]rir SFX iC rir rirez/n'q'l'm' [vf]rir SFX iC rir riront/n'q'l'm't's' [vf]rir SFX iC rir rirais/n'q'j'l'm't' [vf]rir SFX iC rir rirait/n'q'l'm't's' [vf]rir SFX iC rir ririons/n'q'l't' [vf]rir SFX iC rir ririez/n'q'l'm' [vf]rir SFX iC rir riraient/n'q'l'm't's' [vf]rir SFX iC rir risse/n'q'j'l'm't' [vf]rir SFX iC rir risses/n'q'l'm't' [vf]rir SFX iC rir rît/n'q'l'm't's' [vf]rir SFX iC rir rissions/n'q'l't' [vf]rir SFX iC rir rissiez/n'q'l'm' [vf]rir SFX iC rir rissent/n'q'l'm't's' [vf]rir SFX iC rir re/n'l'm't' [vf]rir SFX iC rir rons/n'l' [vf]rir SFX iC rir rez/n'l'm' [vf]rir SFX iD Y 43 SFX iD courir courir/n'q'd' courir SFX iD courir courant/n'q' courir SFX iD courir couru courir SFX iD courir courus courir SFX iD courir courue courir SFX iD courir courues courir SFX iD courir cours/n'j' courir SFX iD courir court/n' courir SFX iD courir courons/n' courir SFX iD courir courez/n' courir SFX iD courir courent/n' courir SFX iD courir courais/n'j' courir SFX iD courir courait/n' courir SFX iD courir courions/n' courir SFX iD courir couriez/n' courir SFX iD courir couraient/n' courir SFX iD courir courus/n'j' courir SFX iD courir courut/n' courir SFX iD courir courûmes/n' courir SFX iD courir courûtes/n' courir SFX iD courir coururent/n' courir SFX iD courir courrai/n'j' courir SFX iD courir courras/n' courir SFX iD courir courra/n' courir SFX iD courir courrons/n' courir SFX iD courir courrez/n' courir SFX iD courir courront/n' courir SFX iD courir courrais/n'j' courir SFX iD courir courrait/n' courir SFX iD courir courrions/n' courir SFX iD courir courriez/n' courir SFX iD courir courraient/n' courir SFX iD courir coure/n'j' courir SFX iD courir coures/n' courir SFX iD courir courusse/n'j' courir SFX iD courir courusses/n' courir SFX iD courir courût/n' courir SFX iD courir courussions/n' courir SFX iD courir courussiez/n' courir SFX iD courir courussent/n' courir SFX iD courir cours/n' courir SFX iD courir courons/n' courir SFX iD courir courez/n' courir SFX iE Y 43 SFX iE ourir ourir/n'q'd'l'm't's' courir SFX iE ourir ourant/n'q'm't's' courir SFX iE ourir ouru/L'D'Q' courir SFX iE ourir ourus/D'Q' courir SFX iE ourir ourue/L'D'Q' courir SFX iE ourir ourues/D'Q' courir SFX iE ourir ours/n'q'j'l'm't' courir SFX iE ourir ourt/n'q'l's' courir SFX iE ourir ourons/n'q'l' courir SFX iE ourir ourez/n'q'l' courir SFX iE ourir ourent/n'q'l's' courir SFX iE ourir ourais/n'q'j'l'm't' courir SFX iE ourir ourait/n'q'l's' courir SFX iE ourir ourions/n'q'l' courir SFX iE ourir ouriez/n'q'l' courir SFX iE ourir ouraient/n'q'l's' courir SFX iE ourir ourus/n'q'j'l'm't' courir SFX iE ourir ourut/n'q'l's' courir SFX iE ourir ourûmes/n'q'l' courir SFX iE ourir ourûtes/n'q'l' courir SFX iE ourir oururent/n'q'l's' courir SFX iE ourir ourrai/n'q'j'l'm' courir SFX iE ourir ourras/n'q'l't' courir SFX iE ourir ourra/n'q'l's' courir SFX iE ourir ourrons/n'q'l' courir SFX iE ourir ourrez/n'q'l' courir SFX iE ourir ourront/n'q'l's' courir SFX iE ourir ourrais/n'q'j'l'm't' courir SFX iE ourir ourrait/n'q'l's' courir SFX iE ourir ourrions/n'q'l' courir SFX iE ourir ourriez/n'q'l' courir SFX iE ourir ourraient/n'q'l's' courir SFX iE ourir oure/n'q'j'l'm's' courir SFX iE ourir oures/n'l't' courir SFX iE ourir ourusse/n'q'j'l'm' courir SFX iE ourir ourusses/n'q'l't' courir SFX iE ourir ourût/n'q'l's' courir SFX iE ourir ourussions/n'q'l' courir SFX iE ourir ourussiez/n'q'l' courir SFX iE ourir ourussent/n'q'l's' courir SFX iE ourir ours/n'l' courir SFX iE ourir ourons/n'l' courir SFX iE ourir ourez/n'l' courir SFX iF N 42 SFX iF ervir ervant servir SFX iF ervir ervi servir SFX iF ervir ervis servir SFX iF ervir ervie servir SFX iF ervir ervies servir SFX iF ervir ers servir SFX iF ervir ert servir SFX iF ervir ervons servir SFX iF ervir ervez servir SFX iF ervir ervent servir SFX iF ervir ervais servir SFX iF ervir ervait servir SFX iF ervir ervions servir SFX iF ervir erviez servir SFX iF ervir ervaient servir SFX iF ervir ervis servir SFX iF ervir ervit servir SFX iF ervir ervîmes servir SFX iF ervir ervîtes servir SFX iF ervir ervirent servir SFX iF ervir ervirai servir SFX iF ervir erviras servir SFX iF ervir ervira servir SFX iF ervir ervirons servir SFX iF ervir ervirez servir SFX iF ervir erviront servir SFX iF ervir ervirais servir SFX iF ervir ervirait servir SFX iF ervir ervirions servir SFX iF ervir erviriez servir SFX iF ervir erviraient servir SFX iF ervir erve servir SFX iF ervir erves servir SFX iF ervir ervisse servir SFX iF ervir ervisses servir SFX iF ervir ervît servir SFX iF ervir ervissions servir SFX iF ervir ervissiez servir SFX iF ervir ervissent servir SFX iF ervir ers servir SFX iF ervir ervons servir SFX iF ervir ervez servir SFX iG N 42 SFX iG êtir êtant vêtir SFX iG êtir êtu vêtir SFX iG êtir êtus vêtir SFX iG êtir êtue vêtir SFX iG êtir êtues vêtir SFX iG êtir êts vêtir SFX iG êtir êt vêtir SFX iG êtir êtons vêtir SFX iG êtir êtez vêtir SFX iG êtir êtent vêtir SFX iG êtir êtais vêtir SFX iG êtir êtait vêtir SFX iG êtir êtions vêtir SFX iG êtir êtiez vêtir SFX iG êtir êtaient vêtir SFX iG êtir êtis vêtir SFX iG êtir êtit vêtir SFX iG êtir êtîmes vêtir SFX iG êtir êtîtes vêtir SFX iG êtir êtirent vêtir SFX iG êtir êtirai vêtir SFX iG êtir êtiras vêtir SFX iG êtir êtira vêtir SFX iG êtir êtirons vêtir SFX iG êtir êtirez vêtir SFX iG êtir êtiront vêtir SFX iG êtir êtirais vêtir SFX iG êtir êtirait vêtir SFX iG êtir êtirions vêtir SFX iG êtir êtiriez vêtir SFX iG êtir êtiraient vêtir SFX iG êtir ête vêtir SFX iG êtir êtes vêtir SFX iG êtir êtisse vêtir SFX iG êtir êtisses vêtir SFX iG êtir êtît vêtir SFX iG êtir êtissions vêtir SFX iG êtir êtissiez vêtir SFX iG êtir êtissent vêtir SFX iG êtir êts vêtir SFX iG êtir êtons vêtir SFX iG êtir êtez vêtir SFX iI N 39 SFX iI ormir ormant dormir SFX iI ormir ormi dormir SFX iI ormir ors dormir SFX iI ormir ort dormir SFX iI ormir ormons dormir SFX iI ormir ormez dormir SFX iI ormir orment dormir SFX iI ormir ormais dormir SFX iI ormir ormait dormir SFX iI ormir ormions dormir SFX iI ormir ormiez dormir SFX iI ormir ormaient dormir SFX iI ormir ormis dormir SFX iI ormir ormit dormir SFX iI ormir ormîmes dormir SFX iI ormir ormîtes dormir SFX iI ormir ormirent dormir SFX iI ormir ormirai dormir SFX iI ormir ormiras dormir SFX iI ormir ormira dormir SFX iI ormir ormirons dormir SFX iI ormir ormirez dormir SFX iI ormir ormiront dormir SFX iI ormir ormirais dormir SFX iI ormir ormirait dormir SFX iI ormir ormirions dormir SFX iI ormir ormiriez dormir SFX iI ormir ormiraient dormir SFX iI ormir orme dormir SFX iI ormir ormes dormir SFX iI ormir ormisse dormir SFX iI ormir ormisses dormir SFX iI ormir ormît dormir SFX iI ormir ormissions dormir SFX iI ormir ormissiez dormir SFX iI ormir ormissent dormir SFX iI ormir ors dormir SFX iI ormir ormons dormir SFX iI ormir ormez dormir SFX iJ Y 43 SFX iJ dormir dormir/n'q'd'l'm't's' dormir SFX iJ dormir dormant/n'q'l'm't's' dormir SFX iJ dormir dormi/L'D'Q' dormir SFX iJ dormir dormis/D'Q' dormir SFX iJ dormir dormie/L'D'Q' dormir SFX iJ dormir dormies/D'Q' dormir SFX iJ dormir dors/n'q'j'l'm't' dormir SFX iJ dormir dort/n'q'l'm't's' dormir SFX iJ dormir dormons/n'q'l't' dormir SFX iJ dormir dormez/n'q'l'm' dormir SFX iJ dormir dorment/n'q'l'm't's' dormir SFX iJ dormir dormais/n'q'j'l'm't' dormir SFX iJ dormir dormait/n'q'l'm't's' dormir SFX iJ dormir dormions/n'q'l't' dormir SFX iJ dormir dormiez/n'q'l'm' dormir SFX iJ dormir dormaient/n'q'l'm't's' dormir SFX iJ dormir dormis/n'q'j'l'm't' dormir SFX iJ dormir dormit/n'q'l'm't's' dormir SFX iJ dormir dormîmes/n'q'l't' dormir SFX iJ dormir dormîtes/n'q'l'm' dormir SFX iJ dormir dormirent/n'q'l'm't's' dormir SFX iJ dormir dormirai/n'q'j'l'm't' dormir SFX iJ dormir dormiras/n'q'l'm't' dormir SFX iJ dormir dormira/n'q'l'm't's' dormir SFX iJ dormir dormirons/n'q'l't' dormir SFX iJ dormir dormirez/n'q'l'm' dormir SFX iJ dormir dormiront/n'q'l'm't's' dormir SFX iJ dormir dormirais/n'q'j'l'm't' dormir SFX iJ dormir dormirait/n'q'l'm't's' dormir SFX iJ dormir dormirions/n'q'l't' dormir SFX iJ dormir dormiriez/n'q'l'm' dormir SFX iJ dormir dormiraient/n'q'l'm't's' dormir SFX iJ dormir dorme/n'q'j'l'm't's' dormir SFX iJ dormir dormes/n'l'm't' dormir SFX iJ dormir dormisse/n'q'j'l'm't' dormir SFX iJ dormir dormisses/n'q'l'm't' dormir SFX iJ dormir dormît/n'q'l'm't's' dormir SFX iJ dormir dormissions/n'q'l't' dormir SFX iJ dormir dormissiez/n'q'l'm' dormir SFX iJ dormir dormissent/n'q'l'm't's' dormir SFX iJ dormir dors/n'l'm't' dormir SFX iJ dormir dormons/n'l' dormir SFX iJ dormir dormez/n'l'm' dormir SFX iK Y 42 SFX iK quérir quérir/n'q'd'l'm't's' quérir SFX iK quérir quérant/n'q'l'm't's' quérir SFX iK quérir quis/L'D'Q' quérir SFX iK quérir quise/L'D'Q' quérir SFX iK quérir quises/D'Q' quérir SFX iK quérir quiers/n'q'j'l'm't' quérir SFX iK quérir quiert/n'q'l'm't's' quérir SFX iK quérir quérons/n'q'l't' quérir SFX iK quérir quérez/n'q'l'm' quérir SFX iK quérir quièrent/n'q'l'm't's' quérir SFX iK quérir quérais/n'q'j'l'm't' quérir SFX iK quérir quérait/n'q'l'm't's' quérir SFX iK quérir quérions/n'q'l't' quérir SFX iK quérir quériez/n'q'l'm' quérir SFX iK quérir quéraient/n'q'l'm't's' quérir SFX iK quérir quis/n'q'j'l'm't' quérir SFX iK quérir quit/n'q'l'm't's' quérir SFX iK quérir quîmes/n'q'l't' quérir SFX iK quérir quîtes/n'q'l'm' quérir SFX iK quérir quirent/n'q'l'm't's' quérir SFX iK quérir querrai/n'q'j'l'm't' quérir SFX iK quérir querras/n'q'l'm't' quérir SFX iK quérir querra/n'q'l'm't's' quérir SFX iK quérir querrons/n'q'l't' quérir SFX iK quérir querrez/n'q'l'm' quérir SFX iK quérir querront/n'q'l'm't's' quérir SFX iK quérir querrais/n'q'j'l'm't' quérir SFX iK quérir querrait/n'q'l'm't's' quérir SFX iK quérir querrions/n'q'l't' quérir SFX iK quérir querriez/n'q'l'm' quérir SFX iK quérir querraient/n'q'l'm't's' quérir SFX iK quérir quière/n'q'j'l'm't's' quérir SFX iK quérir quières/n'l'm't' quérir SFX iK quérir quisse/n'q'j'l'm't' quérir SFX iK quérir quisses/n'q'l'm't' quérir SFX iK quérir quît/n'q'l'm't's' quérir SFX iK quérir quissions/n'q'l't' quérir SFX iK quérir quissiez/n'q'l'm' quérir SFX iK quérir quissent/n'q'l'm't's' quérir SFX iK quérir quiers/n'l'm't' quérir SFX iK quérir quérons/n'l' quérir SFX iK quérir quérez/n'l'm' quérir SFX iM Y 42 SFX iM quérir quérir/m't's' quérir SFX iM quérir quérant/m't's' quérir SFX iM quérir quis/L'D'Q' quérir SFX iM quérir quise/L'D'Q' quérir SFX iM quérir quises/D'Q' quérir SFX iM quérir quiers/m't' quérir SFX iM quérir quiert/s' quérir SFX iM quérir quérons quérir SFX iM quérir quérez quérir SFX iM quérir quièrent/s' quérir SFX iM quérir quérais/m't' quérir SFX iM quérir quérait/s' quérir SFX iM quérir quérions quérir SFX iM quérir quériez quérir SFX iM quérir quéraient/s' quérir SFX iM quérir quis/m't' quérir SFX iM quérir quit/s' quérir SFX iM quérir quîmes quérir SFX iM quérir quîtes quérir SFX iM quérir quirent/s' quérir SFX iM quérir querrai/m' quérir SFX iM quérir querras/t' quérir SFX iM quérir querra/s' quérir SFX iM quérir querrons quérir SFX iM quérir querrez quérir SFX iM quérir querront/s' quérir SFX iM quérir querrais/m't' quérir SFX iM quérir querrait/s' quérir SFX iM quérir querrions quérir SFX iM quérir querriez quérir SFX iM quérir querraient/s' quérir SFX iM quérir quière/m's' quérir SFX iM quérir quières/t' quérir SFX iM quérir quisse/m' quérir SFX iM quérir quisses/t' quérir SFX iM quérir quît/s' quérir SFX iM quérir quissions quérir SFX iM quérir quissiez quérir SFX iM quérir quissent/s' quérir SFX iM quérir quiers/t' quérir SFX iM quérir quérons quérir SFX iM quérir quérez quérir SFX iN N 40 SFX iN uir uyant fuir SFX iN uir ui fuir SFX iN uir uis fuir SFX iN uir uie fuir SFX iN uir uies fuir SFX iN uir uis fuir SFX iN uir uit fuir SFX iN uir uyons fuir SFX iN uir uyez fuir SFX iN uir uient fuir SFX iN uir uyais fuir SFX iN uir uyait fuir SFX iN uir uyions fuir SFX iN uir uyiez fuir SFX iN uir uyaient fuir SFX iN uir uîmes fuir SFX iN uir uîtes fuir SFX iN uir uirent fuir SFX iN uir uirai fuir SFX iN uir uiras fuir SFX iN uir uira fuir SFX iN uir uirons fuir SFX iN uir uirez fuir SFX iN uir uiront fuir SFX iN uir uirais fuir SFX iN uir uirait fuir SFX iN uir uirions fuir SFX iN uir uiriez fuir SFX iN uir uiraient fuir SFX iN uir uie fuir SFX iN uir uies fuir SFX iN uir uisse fuir SFX iN uir uisses fuir SFX iN uir uît fuir SFX iN uir uissions fuir SFX iN uir uissiez fuir SFX iN uir uissent fuir SFX iN uir uis fuir SFX iN uir uyons fuir SFX iN uir uyez fuir SFX iO Y 41 SFX iO fuir fuir/m't's' enfuir SFX iO fuir fuyant/m't's' enfuir SFX iO fuir fui/L'D'Q' enfuir SFX iO fuir fuis/D'Q' enfuir SFX iO fuir fuie/L'D'Q' enfuir SFX iO fuir fuies/D'Q' enfuir SFX iO fuir fuis/m't' enfuir SFX iO fuir fuit/s' enfuir SFX iO fuir fuyons enfuir SFX iO fuir fuyez enfuir SFX iO fuir fuient/s' enfuir SFX iO fuir fuyais/m't' enfuir SFX iO fuir fuyait/s' enfuir SFX iO fuir fuyions enfuir SFX iO fuir fuyiez enfuir SFX iO fuir fuyaient/s' enfuir SFX iO fuir fuîmes enfuir SFX iO fuir fuîtes enfuir SFX iO fuir fuirent/s' enfuir SFX iO fuir fuirai/m' enfuir SFX iO fuir fuiras/t' enfuir SFX iO fuir fuira/s' enfuir SFX iO fuir fuirons enfuir SFX iO fuir fuirez enfuir SFX iO fuir fuiront/s' enfuir SFX iO fuir fuirais/m't' enfuir SFX iO fuir fuirait/s' enfuir SFX iO fuir fuirions enfuir SFX iO fuir fuiriez enfuir SFX iO fuir fuiraient/s' enfuir SFX iO fuir fuie/m's' enfuir SFX iO fuir fuies/t' enfuir SFX iO fuir fuisse/m' enfuir SFX iO fuir fuisses/t' enfuir SFX iO fuir fuît/s' enfuir SFX iO fuir fuissions enfuir SFX iO fuir fuissiez enfuir SFX iO fuir fuissent/s' enfuir SFX iO fuir fuis/t' enfuir SFX iO fuir fuyons enfuir SFX iO fuir fuyez enfuir SFX iP N 42 SFX iP ourir ourant mourir SFX iP ourir ort mourir SFX iP ourir orts mourir SFX iP ourir orte mourir SFX iP ourir ortes mourir SFX iP ourir eurs mourir SFX iP ourir eurt mourir SFX iP ourir ourons mourir SFX iP ourir ourez mourir SFX iP ourir eurent mourir SFX iP ourir ourais mourir SFX iP ourir ourait mourir SFX iP ourir ourions mourir SFX iP ourir ouriez mourir SFX iP ourir ouraient mourir SFX iP ourir ourus mourir SFX iP ourir ourut mourir SFX iP ourir ourûmes mourir SFX iP ourir ourûtes mourir SFX iP ourir oururent mourir SFX iP ourir ourrai mourir SFX iP ourir ourras mourir SFX iP ourir ourra mourir SFX iP ourir ourrons mourir SFX iP ourir ourrez mourir SFX iP ourir ourront mourir SFX iP ourir ourrais mourir SFX iP ourir ourrait mourir SFX iP ourir ourrions mourir SFX iP ourir ourriez mourir SFX iP ourir ourraient mourir SFX iP ourir eure mourir SFX iP ourir eures mourir SFX iP ourir ourusse mourir SFX iP ourir ourusses mourir SFX iP ourir ourût mourir SFX iP ourir ourussions mourir SFX iP ourir ourussiez mourir SFX iP ourir ourussent mourir SFX iP ourir eurs mourir SFX iP ourir ourons mourir SFX iP ourir ourez mourir SFX iQ N 42 SFX iQ ouillir ouillant bouillir SFX iQ ouillir ouilli bouillir SFX iQ ouillir ouillis bouillir SFX iQ ouillir ouillie bouillir SFX iQ ouillir ouillies bouillir SFX iQ ouillir ous bouillir SFX iQ ouillir out bouillir SFX iQ ouillir ouillons bouillir SFX iQ ouillir ouillez bouillir SFX iQ ouillir ouillent bouillir SFX iQ ouillir ouillais bouillir SFX iQ ouillir ouillait bouillir SFX iQ ouillir ouillions bouillir SFX iQ ouillir ouilliez bouillir SFX iQ ouillir ouillaient bouillir SFX iQ ouillir ouillis bouillir SFX iQ ouillir ouillit bouillir SFX iQ ouillir ouillîmes bouillir SFX iQ ouillir ouillîtes bouillir SFX iQ ouillir ouillirent bouillir SFX iQ ouillir ouillirai bouillir SFX iQ ouillir ouilliras bouillir SFX iQ ouillir ouillira bouillir SFX iQ ouillir ouillirons bouillir SFX iQ ouillir ouillirez bouillir SFX iQ ouillir ouilliront bouillir SFX iQ ouillir ouillirais bouillir SFX iQ ouillir ouillirait bouillir SFX iQ ouillir ouillirions bouillir SFX iQ ouillir ouilliriez bouillir SFX iQ ouillir ouilliraient bouillir SFX iQ ouillir ouille bouillir SFX iQ ouillir ouilles bouillir SFX iQ ouillir ouillisse bouillir SFX iQ ouillir ouillisses bouillir SFX iQ ouillir ouillît bouillir SFX iQ ouillir ouillissions bouillir SFX iQ ouillir ouillissiez bouillir SFX iQ ouillir ouillissent bouillir SFX iQ ouillir ous bouillir SFX iQ ouillir ouillons bouillir SFX iQ ouillir ouillez bouillir SFX iR Y 41 SFX iR ueillir ueillir/n'q'd'l'm't's' cueillir SFX iR ueillir ueillant/n'q'l'm't's' cueillir SFX iR ueillir ueilli/L'D'Q' cueillir SFX iR ueillir ueillis/D'Q' cueillir SFX iR ueillir ueillie/L'D'Q' cueillir SFX iR ueillir ueillies/D'Q' cueillir SFX iR ueillir ueille/n'q'j'l'm't's' cueillir SFX iR ueillir ueilles/n'q'l'm' cueillir SFX iR ueillir ueillons/n'q'l't' cueillir SFX iR ueillir ueillez/n'q'l'm' cueillir SFX iR ueillir ueillent/n'q'l'm't's' cueillir SFX iR ueillir ueillais/n'q'j'l't' cueillir SFX iR ueillir ueillait/n'q'l'm't's' cueillir SFX iR ueillir ueillions/n'q'l't' cueillir SFX iR ueillir ueilliez/n'q'l'm' cueillir SFX iR ueillir ueillaient/n'q'l'm't's' cueillir SFX iR ueillir ueillis/n'q'j'l't' cueillir SFX iR ueillir ueillit/n'q'l'm't's' cueillir SFX iR ueillir ueillîmes/n'q'l't' cueillir SFX iR ueillir ueillîtes/n'q'l'm' cueillir SFX iR ueillir ueillirent/n'q'l'm't's' cueillir SFX iR ueillir ueillerai/n'q'j'l't' cueillir SFX iR ueillir ueilleras/n'q'l'm' cueillir SFX iR ueillir ueillera/n'q'l'm't's' cueillir SFX iR ueillir ueillerons/n'q'l't' cueillir SFX iR ueillir ueillerez/n'q'l'm' cueillir SFX iR ueillir ueilleront/n'q'l'm't's' cueillir SFX iR ueillir ueillerais/n'q'j'l't' cueillir SFX iR ueillir ueillerait/n'q'l'm't's' cueillir SFX iR ueillir ueillerions/n'q'l't' cueillir SFX iR ueillir ueilleriez/n'q'l'm' cueillir SFX iR ueillir ueilleraient/n'q'l'm't's' cueillir SFX iR ueillir ueillisse/n'q'j'l't' cueillir SFX iR ueillir ueillisses/n'q'l'm' cueillir SFX iR ueillir ueillît/n'q'l'm't's' cueillir SFX iR ueillir ueillissions/n'q'l't' cueillir SFX iR ueillir ueillissiez/n'q'l'm' cueillir SFX iR ueillir ueillissent/n'q'l'm't's' cueillir SFX iR ueillir ueille/n'l'm' cueillir SFX iR ueillir ueillons/n'l' cueillir SFX iR ueillir ueillez/n'l'm' cueillir SFX iS N 37 SFX iS aillir aillant aillir SFX iS aillir ailli aillir SFX iS aillir aille aillir SFX iS aillir ailles aillir SFX iS aillir aillons aillir SFX iS aillir aillez aillir SFX iS aillir aillent aillir SFX iS aillir aillais aillir SFX iS aillir aillait aillir SFX iS aillir aillions aillir SFX iS aillir ailliez aillir SFX iS aillir aillaient aillir SFX iS aillir aillis aillir SFX iS aillir aillit aillir SFX iS aillir aillîmes aillir SFX iS aillir aillîtes aillir SFX iS aillir aillirent aillir SFX iS aillir aillirai aillir SFX iS aillir ailliras aillir SFX iS aillir aillira aillir SFX iS aillir aillirons aillir SFX iS aillir aillirez aillir SFX iS aillir ailliront aillir SFX iS aillir aillirais aillir SFX iS aillir aillirait aillir SFX iS aillir aillirions aillir SFX iS aillir ailliriez aillir SFX iS aillir ailliraient aillir SFX iS aillir aillisse aillir SFX iS aillir aillisses aillir SFX iS aillir aillît aillir SFX iS aillir aillissions aillir SFX iS aillir aillissiez aillir SFX iS aillir aillissent aillir SFX iS aillir aille aillir SFX iS aillir aillons aillir SFX iS aillir aillez aillir SFX iT Y 41 SFX iT saillir saillir/n'q'd'l'm't's' aillir SFX iT saillir saillant/n'q'l'm't's' aillir SFX iT saillir sailli/L'D'Q' aillir SFX iT saillir saillis/D'Q' aillir SFX iT saillir saillie/L'D'Q' aillir SFX iT saillir saillies/D'Q' aillir SFX iT saillir saille/n'q'j'l'm't's' aillir SFX iT saillir sailles/n'q'l'm't' aillir SFX iT saillir saillons/n'q'l't' aillir SFX iT saillir saillez/n'q'l'm' aillir SFX iT saillir saillent/n'q'l'm't's' aillir SFX iT saillir saillais/n'q'j'l'm't' aillir SFX iT saillir saillait/n'q'l'm't's' aillir SFX iT saillir saillions/n'q'l't' aillir SFX iT saillir sailliez/n'q'l'm' aillir SFX iT saillir saillaient/n'q'l'm't's' aillir SFX iT saillir saillis/n'q'j'l'm't' aillir SFX iT saillir saillit/n'q'l'm't's' aillir SFX iT saillir saillîmes/n'q'l't' aillir SFX iT saillir saillîtes/n'q'l'm' aillir SFX iT saillir saillirent/n'q'l'm't's' aillir SFX iT saillir saillirai/n'q'j'l'm't' aillir SFX iT saillir sailliras/n'q'l'm't' aillir SFX iT saillir saillira/n'q'l'm't's' aillir SFX iT saillir saillirons/n'q'l't' aillir SFX iT saillir saillirez/n'q'l'm' aillir SFX iT saillir sailliront/n'q'l'm't's' aillir SFX iT saillir saillirais/n'q'j'l'm't' aillir SFX iT saillir saillirait/n'q'l'm't's' aillir SFX iT saillir saillirions/n'q'l't' aillir SFX iT saillir sailliriez/n'q'l'm' aillir SFX iT saillir sailliraient/n'q'l'm't's' aillir SFX iT saillir saillisse/n'q'j'l'm't' aillir SFX iT saillir saillisses/n'q'l'm't' aillir SFX iT saillir saillît/n'q'l'm't's' aillir SFX iT saillir saillissions/n'q'l't' aillir SFX iT saillir saillissiez/n'q'l'm' aillir SFX iT saillir saillissent/n'q'l'm't's' aillir SFX iT saillir saille/n'l'm' aillir SFX iT saillir saillons/n'l' aillir SFX iT saillir saillez/n'l'm' aillir SFX iU N 36 SFX iU aillir aillant faillir SFX iU aillir ailli faillir SFX iU aillir aux faillir SFX iU aillir aut faillir SFX iU aillir aillons faillir SFX iU aillir aillez faillir SFX iU aillir aillent faillir SFX iU aillir aillais faillir SFX iU aillir aillait faillir SFX iU aillir aillions faillir SFX iU aillir ailliez faillir SFX iU aillir aillaient faillir SFX iU aillir aillis faillir SFX iU aillir aillit faillir SFX iU aillir aillîmes faillir SFX iU aillir aillîtes faillir SFX iU aillir aillirent faillir SFX iU aillir aillirai faillir SFX iU aillir ailliras faillir SFX iU aillir aillira faillir SFX iU aillir aillirons faillir SFX iU aillir aillirez faillir SFX iU aillir ailliront faillir SFX iU aillir aillirais faillir SFX iU aillir aillirait faillir SFX iU aillir aillirions faillir SFX iU aillir ailliriez faillir SFX iU aillir ailliraient faillir SFX iU aillir aille faillir SFX iU aillir ailles faillir SFX iU aillir aillisse faillir SFX iU aillir aillisses faillir SFX iU aillir aillît faillir SFX iU aillir aillissions faillir SFX iU aillir aillissiez faillir SFX iU aillir aillissent faillir SFX iV N 11 SFX iV ésir isant gésir SFX iV ésir is gésir SFX iV ésir ît gésir SFX iV ésir isons gésir SFX iV ésir isez gésir SFX iV ésir isent gésir SFX iV ésir isais gésir SFX iV ésir isait gésir SFX iV ésir isions gésir SFX iV ésir isiez gésir SFX iV ésir isaient gésir SFX iW Y 54 SFX iW uïr uïr/n'q'd'l'm't's' ouïr SFX iW uïr yant/n'q'l'm't's' ouïr SFX iW uïr uï/L'D'Q' ouïr SFX iW uïr uïs/D'Q' ouïr SFX iW uïr uïe/L'D'Q' ouïr SFX iW uïr uïes/D'Q' ouïr SFX iW uïr is/n'q'j'l'm't' ouïr SFX iW uïr it/n'q'l'm't' ouïr SFX iW uïr yons/n'q'l't' ouïr SFX iW uïr yez/n'q'l'm' ouïr SFX iW uïr ient/n'q'l'm't's' ouïr SFX iW uïr yais/n'q'j'l'm't' ouïr SFX iW uïr yait/n'q'l'm't' ouïr SFX iW uïr yions/n'q'l't' ouïr SFX iW uïr yiez/n'q'l'm' ouïr SFX iW uïr yaient/n'q'l'm't's' ouïr SFX iW uïr uïs/n'q'j'l'm't' ouïr SFX iW uïr uït/n'q'l'm't' ouïr SFX iW uïr uïmes/n'q'l't' ouïr SFX iW uïr uïtes/n'q'l'm' ouïr SFX iW uïr uïrent/n'q'l'm't's' ouïr SFX iW uïr uïrai/n'q'j'l'm't' ouïr SFX iW uïr rrai/n'q'j'l'm't' ouïr SFX iW uïr uïras/n'q'l'm't' ouïr SFX iW uïr rras/n'q'l'm't' ouïr SFX iW uïr uïra/n'q'l'm't' ouïr SFX iW uïr rra/n'q'l'm't' ouïr SFX iW uïr uïrons/n'q'l't' ouïr SFX iW uïr rrons/n'q'l't' ouïr SFX iW uïr uïrez/n'q'l'm' ouïr SFX iW uïr rrez/n'q'l'm' ouïr SFX iW uïr uïront/n'q'l'm't's' ouïr SFX iW uïr rront/n'q'l'm't's' ouïr SFX iW uïr uïrais/n'q'j'l'm't' ouïr SFX iW uïr rrais/n'q'j'l'm't' ouïr SFX iW uïr uïrait/n'q'l'm't' ouïr SFX iW uïr rrait/n'q'l'm't' ouïr SFX iW uïr uïrions/n'q'l't' ouïr SFX iW uïr rrions/n'q'l't' ouïr SFX iW uïr uïriez/n'q'l'm' ouïr SFX iW uïr rriez/n'q'l'm' ouïr SFX iW uïr uïraient/n'q'l'm't's' ouïr SFX iW uïr rraient/n'q'l'm't's' ouïr SFX iW uïr ie/n'q'j'l'm't's' ouïr SFX iW uïr ies/n'l'm't' ouïr SFX iW uïr uïsse/n'q'j'l'm't' ouïr SFX iW uïr uïsses/n'q'l'm't' ouïr SFX iW uïr uït/n'q'l'm't' ouïr SFX iW uïr uïssions/n'q'l't' ouïr SFX iW uïr uïssiez/n'q'l'm' ouïr SFX iW uïr uïssent/n'q'l'm't's' ouïr SFX iW uïr is/n'l'm' ouïr SFX iW uïr yons/n'l' ouïr SFX iW uïr yez/n'l'm' ouïr SFX iX N 4 SFX iX érir éru férir SFX iX érir érus férir SFX iX érir érue férir SFX iX érir érues férir SFX iY Y 5 SFX iY ssir ssir/n'q'd' issir SFX iY ssir ssu/L'D'Q' issir SFX iY ssir ssus/D'Q' issir SFX iY ssir ssue/L'D'Q' issir SFX iY ssir ssues/D'Q' issir SFX pA N 42 SFX pA ouvoir ouvant pouvoir SFX pA ouvoir u pouvoir SFX pA ouvoir eux pouvoir SFX pA ouvoir uis pouvoir SFX pA ouvoir eut pouvoir SFX pA ouvoir ouvons pouvoir SFX pA ouvoir ouvez pouvoir SFX pA ouvoir euvent pouvoir SFX pA ouvoir ouvais pouvoir SFX pA ouvoir ouvait pouvoir SFX pA ouvoir ouvions pouvoir SFX pA ouvoir ouviez pouvoir SFX pA ouvoir ouvaient pouvoir SFX pA ouvoir us pouvoir SFX pA ouvoir ut pouvoir SFX pA ouvoir ûmes pouvoir SFX pA ouvoir ûtes pouvoir SFX pA ouvoir urent pouvoir SFX pA ouvoir ourrai pouvoir SFX pA ouvoir ourras pouvoir SFX pA ouvoir ourra pouvoir SFX pA ouvoir ourrons pouvoir SFX pA ouvoir ourrez pouvoir SFX pA ouvoir ourront pouvoir SFX pA ouvoir ourrais pouvoir SFX pA ouvoir ourrait pouvoir SFX pA ouvoir ourrions pouvoir SFX pA ouvoir ourriez pouvoir SFX pA ouvoir ourraient pouvoir SFX pA ouvoir uisse pouvoir SFX pA ouvoir uissé pouvoir SFX pA ouvoir uisses pouvoir SFX pA ouvoir uissions pouvoir SFX pA ouvoir uissiez pouvoir SFX pA ouvoir uissent pouvoir SFX pA ouvoir usse pouvoir SFX pA ouvoir ussé pouvoir SFX pA ouvoir usses pouvoir SFX pA ouvoir ût pouvoir SFX pA ouvoir ussions pouvoir SFX pA ouvoir ussiez pouvoir SFX pA ouvoir ussent pouvoir SFX pB N 47 SFX pB ouloir oulant vouloir SFX pB ouloir oulu vouloir SFX pB ouloir oulus vouloir SFX pB ouloir oulue vouloir SFX pB ouloir oulues vouloir SFX pB ouloir eux vouloir SFX pB ouloir eut vouloir SFX pB ouloir oulons vouloir SFX pB ouloir oulez vouloir SFX pB ouloir eulent vouloir SFX pB ouloir oulais vouloir SFX pB ouloir oulait vouloir SFX pB ouloir oulions vouloir SFX pB ouloir ouliez vouloir SFX pB ouloir oulaient vouloir SFX pB ouloir oulus vouloir SFX pB ouloir oulut vouloir SFX pB ouloir oulûmes vouloir SFX pB ouloir oulûtes vouloir SFX pB ouloir oulurent vouloir SFX pB ouloir oudrai vouloir SFX pB ouloir oudras vouloir SFX pB ouloir oudra vouloir SFX pB ouloir oudrons vouloir SFX pB ouloir oudrez vouloir SFX pB ouloir oudront vouloir SFX pB ouloir oudrais vouloir SFX pB ouloir oudrait vouloir SFX pB ouloir oudrions vouloir SFX pB ouloir oudriez vouloir SFX pB ouloir oudraient vouloir SFX pB ouloir euille vouloir SFX pB ouloir euillé vouloir SFX pB ouloir euilles vouloir SFX pB ouloir euillent vouloir SFX pB ouloir oulusse vouloir SFX pB ouloir oulusses vouloir SFX pB ouloir oulût vouloir SFX pB ouloir oulussions vouloir SFX pB ouloir oulussiez vouloir SFX pB ouloir oulussent vouloir SFX pB ouloir euille vouloir SFX pB ouloir eux vouloir SFX pB ouloir euillons vouloir SFX pB ouloir oulons vouloir SFX pB ouloir euillez vouloir SFX pB ouloir oulez vouloir SFX pC N 43 SFX pC evoir evant devoir SFX pC evoir û redevoir SFX pC evoir us devoir SFX pC evoir ue devoir SFX pC evoir ues devoir SFX pC evoir ois devoir SFX pC evoir oit devoir SFX pC evoir evons devoir SFX pC evoir evez devoir SFX pC evoir oivent devoir SFX pC evoir evais devoir SFX pC evoir evait devoir SFX pC evoir evions devoir SFX pC evoir eviez devoir SFX pC evoir evaient devoir SFX pC evoir us devoir SFX pC evoir ut devoir SFX pC evoir ûmes devoir SFX pC evoir ûtes devoir SFX pC evoir urent devoir SFX pC evoir evrai devoir SFX pC evoir evras devoir SFX pC evoir evra devoir SFX pC evoir evrons devoir SFX pC evoir evrez devoir SFX pC evoir evront devoir SFX pC evoir evrais devoir SFX pC evoir evrait devoir SFX pC evoir evrions devoir SFX pC evoir evriez devoir SFX pC evoir evraient devoir SFX pC evoir oive devoir SFX pC evoir oives devoir SFX pC evoir usse devoir SFX pC evoir ussé devoir SFX pC evoir usses devoir SFX pC evoir ût devoir SFX pC evoir ussions devoir SFX pC evoir ussiez devoir SFX pC evoir ussent devoir SFX pC evoir ois devoir SFX pC evoir evons devoir SFX pC evoir evez devoir SFX pD N 1 SFX pD evoir û devoir SFX pE N 45 SFX pE avoir achant savoir SFX pE avoir u savoir SFX pE avoir us savoir SFX pE avoir ue savoir SFX pE avoir ues savoir SFX pE avoir ais savoir SFX pE avoir ait savoir SFX pE avoir avons savoir SFX pE avoir avez savoir SFX pE avoir avent savoir SFX pE avoir avais savoir SFX pE avoir avait savoir SFX pE avoir avions savoir SFX pE avoir aviez savoir SFX pE avoir avaient savoir SFX pE avoir us savoir SFX pE avoir ut savoir SFX pE avoir ûmes savoir SFX pE avoir ûtes savoir SFX pE avoir urent savoir SFX pE avoir aurai savoir SFX pE avoir auras savoir SFX pE avoir aura savoir SFX pE avoir aurons savoir SFX pE avoir aurez savoir SFX pE avoir auront savoir SFX pE avoir aurais savoir SFX pE avoir aurait savoir SFX pE avoir aurions savoir SFX pE avoir auriez savoir SFX pE avoir auraient savoir SFX pE avoir ache savoir SFX pE avoir aches savoir SFX pE avoir achions savoir SFX pE avoir achiez savoir SFX pE avoir achent savoir SFX pE avoir usse savoir SFX pE avoir usses savoir SFX pE avoir ût savoir SFX pE avoir ussions savoir SFX pE avoir ussiez savoir SFX pE avoir ussent savoir SFX pE avoir ache savoir SFX pE avoir achons savoir SFX pE avoir achez savoir SFX pF Y 54 SFX pF oir oir/n'q'd'l'm't's' voir SFX pF oir oyant/n'q'l'm't's' voir SFX pF oir u/L'D'Q' voir SFX pF oir us/D'Q' voir SFX pF oir ue/L'D'Q' voir SFX pF oir ues/D'Q' voir SFX pF oir ois/n'q'j'l'm't' voir SFX pF oir oit/n'q'l'm't's' voir SFX pF oir oyons/n'q'l't' voir SFX pF oir oyez/n'q'l'm' voir SFX pF oir oient/n'q'l'm't's' voir SFX pF oir oyais/n'q'j'l'm't' voir SFX pF oir oyait/n'q'l'm't's' voir SFX pF oir oyions/n'q'l't' voir SFX pF oir oyiez/n'q'l'm' voir SFX pF oir oyaient/n'q'l'm't's' voir SFX pF oir is/n'q'j'l'm't' voir SFX pF oir it/n'q'l'm't's' voir SFX pF oir îmes/n'q'l't' voir SFX pF oir îtes/n'q'l'm' voir SFX pF oir irent/n'q'l'm't's' voir SFX pF oir errai/n'q'j'l'm't' [^é]voir SFX pF oir oirai évoir SFX pF oir erras/n'q'l'm't' [^é]voir SFX pF oir oiras évoir SFX pF oir erra/n'q'l'm't's' [^é]voir SFX pF oir oira évoir SFX pF oir errons/n'q'l't' [^é]voir SFX pF oir oirons évoir SFX pF oir errez/n'q'l'm' [^é]voir SFX pF oir oirez évoir SFX pF oir erront/n'q'l'm't's' [^é]voir SFX pF oir oiront évoir SFX pF oir errais/n'q'j'l'm't' [^é]voir SFX pF oir oirais évoir SFX pF oir errait/n'q'l'm't's' [^é]voir SFX pF oir oirait évoir SFX pF oir errions/n'q'l't' [^é]voir SFX pF oir oirions évoir SFX pF oir erriez/n'q'l'm' [^é]voir SFX pF oir oiriez évoir SFX pF oir erraient/n'q'l'm't's' [^é]voir SFX pF oir oiraient évoir SFX pF oir oie/n'q'j'l'm't's' voir SFX pF oir oies/n'l'm't' voir SFX pF oir isse/n'q'j'l'm't' voir SFX pF oir isses/n'q'l'm't' voir SFX pF oir ît/n'q'l'm't's' voir SFX pF oir issions/n'q'l't' voir SFX pF oir issiez/n'q'l'm' voir SFX pF oir issent/n'q'l'm't's' voir SFX pF oir ois/n'l'm' voir SFX pF oir oyons/n'l' voir SFX pF oir oyez/n'l'm' voir SFX pG Y 11 SFX pG oir errai voir SFX pG oir erras voir SFX pG oir erra voir SFX pG oir errons voir SFX pG oir errez voir SFX pG oir erront voir SFX pG oir errais voir SFX pG oir errait voir SFX pG oir errions voir SFX pG oir erriez voir SFX pG oir erraient voir SFX pH Y 43 SFX pH ouvoir ouvoir/n'q'd'l'm't's' mouvoir SFX pH ouvoir ouvant/n'q'l'm't's' mouvoir SFX pH ouvoir u/L'D'Q' .mouvoir SFX pH ouvoir us/D'Q' mouvoir SFX pH ouvoir ue/L'D'Q' mouvoir SFX pH ouvoir ues/D'Q' mouvoir SFX pH ouvoir eus/n'q'j'l'm't' mouvoir SFX pH ouvoir eut/n'q'l'm't's' mouvoir SFX pH ouvoir ouvons/n'q'l't' mouvoir SFX pH ouvoir ouvez/n'q'l'm' mouvoir SFX pH ouvoir euvent/n'q'l'm't's' mouvoir SFX pH ouvoir ouvais/n'q'j'l'm't' mouvoir SFX pH ouvoir ouvait/n'q'l'm't's' mouvoir SFX pH ouvoir ouvions/n'q'l't' mouvoir SFX pH ouvoir ouviez/n'q'l'm' mouvoir SFX pH ouvoir ouvaient/n'q'l'm't's' mouvoir SFX pH ouvoir us/n'q'j'l'm't' mouvoir SFX pH ouvoir ut/n'q'l'm't's' mouvoir SFX pH ouvoir ûmes/n'q'l't' mouvoir SFX pH ouvoir ûtes/n'q'l'm' mouvoir SFX pH ouvoir urent/n'q'l'm't's' mouvoir SFX pH ouvoir ouvrai/n'q'j'l'm't' mouvoir SFX pH ouvoir ouvras/n'q'l'm't' mouvoir SFX pH ouvoir ouvra/n'q'l'm't's' mouvoir SFX pH ouvoir ouvrons/n'q'l't' mouvoir SFX pH ouvoir ouvrez/n'q'l'm' mouvoir SFX pH ouvoir ouvront/n'q'l'm't's' mouvoir SFX pH ouvoir ouvrais/n'q'j'l'm't' mouvoir SFX pH ouvoir ouvrait/n'q'l'm't's' mouvoir SFX pH ouvoir ouvrions/n'q'l't' mouvoir SFX pH ouvoir ouvriez/n'q'l'm' mouvoir SFX pH ouvoir ouvraient/n'q'l'm't's' mouvoir SFX pH ouvoir euve/n'q'j'l'm't's' mouvoir SFX pH ouvoir euves/n'l'm't' mouvoir SFX pH ouvoir usse/n'q'j'l'm't' mouvoir SFX pH ouvoir usses/n'q'l'm't' mouvoir SFX pH ouvoir ût/n'q'l'm't's' mouvoir SFX pH ouvoir ussions/n'q'l't' mouvoir SFX pH ouvoir ussiez/n'q'l'm' mouvoir SFX pH ouvoir ussent/n'q'l'm't's' mouvoir SFX pH ouvoir eus/n'l'm' mouvoir SFX pH ouvoir ouvons/n'l' mouvoir SFX pH ouvoir ouvez/n'l'm' mouvoir SFX pI N 1 SFX pI ouvoir û/q' mouvoir SFX pJ N 42 SFX pJ ourvoir ourvoyant pourvoir SFX pJ ourvoir ourvu pourvoir SFX pJ ourvoir ourvus pourvoir SFX pJ ourvoir ourvue pourvoir SFX pJ ourvoir ourvues pourvoir SFX pJ ourvoir ourvois pourvoir SFX pJ ourvoir ourvoit pourvoir SFX pJ ourvoir ourvoyons pourvoir SFX pJ ourvoir ourvoyez pourvoir SFX pJ ourvoir ourvoient pourvoir SFX pJ ourvoir ourvoyais pourvoir SFX pJ ourvoir ourvoyait pourvoir SFX pJ ourvoir ourvoyions pourvoir SFX pJ ourvoir ourvoyiez pourvoir SFX pJ ourvoir ourvoyaient pourvoir SFX pJ ourvoir ourvus pourvoir SFX pJ ourvoir ourvut pourvoir SFX pJ ourvoir ourvûmes pourvoir SFX pJ ourvoir ourvûtes pourvoir SFX pJ ourvoir ourvurent pourvoir SFX pJ ourvoir ourvoirai pourvoir SFX pJ ourvoir ourvoiras pourvoir SFX pJ ourvoir ourvoira pourvoir SFX pJ ourvoir ourvoirons pourvoir SFX pJ ourvoir ourvoirez pourvoir SFX pJ ourvoir ourvoiront pourvoir SFX pJ ourvoir ourvoirais pourvoir SFX pJ ourvoir ourvoirait pourvoir SFX pJ ourvoir ourvoirions pourvoir SFX pJ ourvoir ourvoiriez pourvoir SFX pJ ourvoir ourvoiraient pourvoir SFX pJ ourvoir ourvoie pourvoir SFX pJ ourvoir ourvoies pourvoir SFX pJ ourvoir ourvusse pourvoir SFX pJ ourvoir ourvusses pourvoir SFX pJ ourvoir ourvût pourvoir SFX pJ ourvoir ourvussions pourvoir SFX pJ ourvoir ourvussiez pourvoir SFX pJ ourvoir ourvussent pourvoir SFX pJ ourvoir ourvois pourvoir SFX pJ ourvoir ourvoyons pourvoir SFX pJ ourvoir ourvoyez pourvoir SFX pK Y 43 SFX pK cevoir cevoir/n'q'd'l'm't's' cevoir SFX pK cevoir cevant/n'q'l'm't's' cevoir SFX pK cevoir çu/L'D'Q' cevoir SFX pK cevoir çus/D'Q' cevoir SFX pK cevoir çue/L'D'Q' cevoir SFX pK cevoir çues/D'Q' cevoir SFX pK cevoir çois/n'q'j'l'm't' cevoir SFX pK cevoir çoit/n'q'l'm't's' cevoir SFX pK cevoir cevons/n'q'l't' cevoir SFX pK cevoir cevez/n'q'l'm' cevoir SFX pK cevoir çoivent/n'q'l'm't's' cevoir SFX pK cevoir cevais/n'q'j'l'm't' cevoir SFX pK cevoir cevait/n'q'l'm't's' cevoir SFX pK cevoir cevions/n'q'l't' cevoir SFX pK cevoir ceviez/n'q'l'm' cevoir SFX pK cevoir cevaient/n'q'l'm't's' cevoir SFX pK cevoir çus/n'q'j'l'm't' cevoir SFX pK cevoir çut/n'q'l'm't's' cevoir SFX pK cevoir çûmes/n'q'l't' cevoir SFX pK cevoir çûtes/n'q'l'm' cevoir SFX pK cevoir çurent/n'q'l'm't's' cevoir SFX pK cevoir cevrai/n'q'j'l'm't' cevoir SFX pK cevoir cevras/n'q'l'm't' cevoir SFX pK cevoir cevra/n'q'l'm't's' cevoir SFX pK cevoir cevrons/n'q'l't' cevoir SFX pK cevoir cevrez/n'q'l'm' cevoir SFX pK cevoir cevront/n'q'l'm't's' cevoir SFX pK cevoir cevrais/n'q'j'l'm't' cevoir SFX pK cevoir cevrait/n'q'l'm't's' cevoir SFX pK cevoir cevrions/n'q'l't' cevoir SFX pK cevoir cevriez/n'q'l'm' cevoir SFX pK cevoir cevraient/n'q'l'm't's' cevoir SFX pK cevoir çoive/n'q'j'l'm't's' cevoir SFX pK cevoir çoives/n'l'm't' cevoir SFX pK cevoir çusse/n'q'j'l'm't' cevoir SFX pK cevoir çusses/n'q'l'm't' cevoir SFX pK cevoir çût/n'q'l'm't's' cevoir SFX pK cevoir çussions/n'q'l't' cevoir SFX pK cevoir çussiez/n'q'l'm' cevoir SFX pK cevoir çussent/n'q'l'm't's' cevoir SFX pK cevoir çois/n'l'm't' cevoir SFX pK cevoir cevons/n'l' cevoir SFX pK cevoir cevez/n'l'm' cevoir SFX pM N 40 SFX pM aloir alant valoir SFX pM aloir alu valoir SFX pM aloir aux valoir SFX pM aloir aut valoir SFX pM aloir alons valoir SFX pM aloir alez valoir SFX pM aloir alent valoir SFX pM aloir alais valoir SFX pM aloir alait valoir SFX pM aloir alions valoir SFX pM aloir aliez valoir SFX pM aloir alaient valoir SFX pM aloir alus valoir SFX pM aloir alut valoir SFX pM aloir alûmes valoir SFX pM aloir alûtes valoir SFX pM aloir alurent valoir SFX pM aloir audrai valoir SFX pM aloir audras valoir SFX pM aloir audra valoir SFX pM aloir audrons valoir SFX pM aloir audrez valoir SFX pM aloir audront valoir SFX pM aloir audrais valoir SFX pM aloir audrait valoir SFX pM aloir audrions valoir SFX pM aloir audriez valoir SFX pM aloir audraient valoir SFX pM aloir aille valoir SFX pM aloir ailles valoir SFX pM aloir aillent valoir SFX pM aloir alusse valoir SFX pM aloir alusses valoir SFX pM aloir alût valoir SFX pM aloir alussions valoir SFX pM aloir alussiez valoir SFX pM aloir alussent valoir SFX pM aloir aux valoir SFX pM aloir alons valoir SFX pM aloir alez valoir SFX pN Y 43 SFX pN valoir valoir/n'q'd'm't's' valoir SFX pN valoir valant/n'q'm't's' valoir SFX pN valoir vaux/n'j'm't' valoir SFX pN valoir vaut/n'm't's' valoir SFX pN valoir valons/n't' valoir SFX pN valoir valez/n'm' valoir SFX pN valoir valent/n'm't's' quivaloir SFX pN valoir valent révaloir SFX pN valoir valais/n'j'm't' valoir SFX pN valoir valait/n'm't's' valoir SFX pN valoir valions/n't' valoir SFX pN valoir valiez/n'm' valoir SFX pN valoir valaient/n'm't's' valoir SFX pN valoir valus/n'j'm't' valoir SFX pN valoir valut/n'm't's' valoir SFX pN valoir valûmes/n't' valoir SFX pN valoir valûtes/n'm' valoir SFX pN valoir valurent/n'm't's' valoir SFX pN valoir vaudrai/n'j'm't' valoir SFX pN valoir vaudras/n'm't' valoir SFX pN valoir vaudra/n'm't's' valoir SFX pN valoir vaudrons/n't' valoir SFX pN valoir vaudrez/n'm' valoir SFX pN valoir vaudront/n'm't's' valoir SFX pN valoir vaudrais/n'j'm't' valoir SFX pN valoir vaudrait/n'm't's' valoir SFX pN valoir vaudrions/n't' valoir SFX pN valoir vaudriez/n'm' valoir SFX pN valoir vaudraient/n'm't's' valoir SFX pN valoir vaille/n'j'm't's' quivaloir SFX pN valoir vale révaloir SFX pN valoir vailles/n'm't' quivaloir SFX pN valoir vales révaloir SFX pN valoir vaillent/n'm't's' quivaloir SFX pN valoir valusse/n'j'm't' valoir SFX pN valoir valusses/n'm't' valoir SFX pN valoir valût/n'm't's' valoir SFX pN valoir valussions/n't' valoir SFX pN valoir valussiez/n'm' valoir SFX pN valoir valussent/n'm't's' valoir SFX pN valoir vaux valoir SFX pN valoir valons valoir SFX pN valoir valez valoir SFX pO N 16 SFX pO valoir valant revaloir SFX pO valoir valu revaloir SFX pO valoir valus revaloir SFX pO valoir value revaloir SFX pO valoir values revaloir SFX pO valoir vaudrai revaloir SFX pO valoir vaudras revaloir SFX pO valoir vaudra revaloir SFX pO valoir vaudrons revaloir SFX pO valoir vaudrez revaloir SFX pO valoir vaudront revaloir SFX pO valoir vaudrais revaloir SFX pO valoir vaudrait revaloir SFX pO valoir vaudrions revaloir SFX pO valoir vaudriez revaloir SFX pO valoir vaudraient revaloir SFX pP N 1 SFX pP paroir parant comparoir SFX pQ N 1 SFX pQ haloir haut chaloir SFX pR Y 2 SFX pR pparoir pparoir/n'q'd' apparoir SFX pR pparoir ppert/n'q' apparoir SFX pS Y 69 SFX pS oir oir/n'q'd'l'm't's' oir SFX pS sseoir sseyant/n'q'l'm't's' seoir SFX pS sseoir ssoyant/n'q'l'm't's' seoir SFX pS sseoir ssis/L'D'Q' seoir SFX pS sseoir ssise/L'D'Q' seoir SFX pS sseoir ssises/D'Q' seoir SFX pS sseoir ssieds/n'q'j'l'm't' seoir SFX pS sseoir ssied/n'q'l'm't's' seoir SFX pS sseoir sseyons/n'q'l't' seoir SFX pS sseoir sseyez/n'q'l'm' seoir SFX pS sseoir sseyent/n'q'l'm't's' seoir SFX pS sseoir ssois/n'q'j'l'm't' seoir SFX pS sseoir ssoit/n'q'l'm't's' seoir SFX pS sseoir ssoyons/n'q'l't' seoir SFX pS sseoir ssoyez/n'q'l'm' seoir SFX pS sseoir ssoient/n'q'l'm't's' seoir SFX pS sseoir sseyais/n'q'j'l'm't' seoir SFX pS sseoir sseyait/n'q'l'm't's' seoir SFX pS sseoir sseyions/n'q'l't' seoir SFX pS sseoir sseyiez/n'q'l'm' seoir SFX pS sseoir sseyaient/n'q'l'm't's' seoir SFX pS sseoir ssoyais/n'q'j'l'm't' seoir SFX pS sseoir ssoyait/n'q'l'm't's' seoir SFX pS sseoir ssoyions/n'q'l't' seoir SFX pS sseoir ssoyiez/n'q'l'm' seoir SFX pS sseoir ssoyaient/n'q'l'm't's' seoir SFX pS sseoir ssis/n'q'j'l'm't' seoir SFX pS sseoir ssit/n'q'l'm't's' seoir SFX pS sseoir ssîmes/n'q'l't' seoir SFX pS sseoir ssîtes/n'q'l'm' seoir SFX pS sseoir ssirent/n'q'l'm't's' seoir SFX pS sseoir ssiérai/n'q'j'l'm't' seoir SFX pS sseoir ssiéras/n'q'l'm't' seoir SFX pS sseoir ssiéra/n'q'l'm't's' seoir SFX pS sseoir ssiérons/n'q'l't' seoir SFX pS sseoir ssiérez/n'q'l'm' seoir SFX pS sseoir ssiéront/n'q'l'm't's' seoir SFX pS sseoir ssoirai/n'q'j'l'm't' seoir SFX pS sseoir ssoiras/n'q'l'm't' seoir SFX pS sseoir ssoira/n'q'l'm't's' seoir SFX pS sseoir ssoirons/n'q'l't' seoir SFX pS sseoir ssoirez/n'q'l'm' seoir SFX pS sseoir ssoiront/n'q'l'm't's' seoir SFX pS sseoir ssiérais/n'q'j'l'm't' seoir SFX pS sseoir ssiérait/n'q'l'm't's' seoir SFX pS sseoir ssiérions/n'q'l't' seoir SFX pS sseoir ssiériez/n'q'l'm' seoir SFX pS sseoir ssiéraient/n'q'l'm't's' seoir SFX pS sseoir ssoirais/n'q'j'l'm't' seoir SFX pS sseoir ssoirait/n'q'l'm't's' seoir SFX pS sseoir ssoirions/n'q'l't' seoir SFX pS sseoir ssoiriez/n'q'l'm' seoir SFX pS sseoir ssoiraient/n'q'l'm't's' seoir SFX pS sseoir sseye/n'q'j'l'm't's' seoir SFX pS sseoir sseyes/n'l'm't' seoir SFX pS sseoir ssoie/n'q'j'l'm't's' seoir SFX pS sseoir ssoies/n'l'm't' seoir SFX pS sseoir ssisse/n'q'j'l'm't' seoir SFX pS sseoir ssisses/n'q'l'm't' seoir SFX pS sseoir ssît/n'q'l'm't's' seoir SFX pS sseoir ssissions/n'q'l't' seoir SFX pS sseoir ssissiez/n'q'l'm' seoir SFX pS sseoir ssissent/n'q'l'm't's' seoir SFX pS sseoir ssieds/n'l'm't' seoir SFX pS sseoir sseyons/n'l' seoir SFX pS sseoir sseyez/n'l'm' seoir SFX pS sseoir ssois/n'l'm't' seoir SFX pS sseoir ssoyons/n'l' seoir SFX pS sseoir ssoyez/n'l'm' seoir SFX pT N 41 SFX pT urseoir ursoyant seoir SFX pT urseoir ursis seoir SFX pT urseoir ursise seoir SFX pT urseoir ursises seoir SFX pT urseoir ursois seoir SFX pT urseoir ursoit seoir SFX pT urseoir ursoyons seoir SFX pT urseoir ursoyez seoir SFX pT urseoir ursoient seoir SFX pT urseoir ursoyais seoir SFX pT urseoir ursoyait seoir SFX pT urseoir ursoyions seoir SFX pT urseoir ursoyiez seoir SFX pT urseoir ursoyaient seoir SFX pT urseoir ursis seoir SFX pT urseoir ursit seoir SFX pT urseoir ursîmes seoir SFX pT urseoir ursîtes seoir SFX pT urseoir ursirent seoir SFX pT urseoir urseoirai seoir SFX pT urseoir urseoiras seoir SFX pT urseoir urseoira seoir SFX pT urseoir urseoirons seoir SFX pT urseoir urseoirez seoir SFX pT urseoir urseoiront seoir SFX pT urseoir urseoirais seoir SFX pT urseoir urseoirait seoir SFX pT urseoir urseoirions seoir SFX pT urseoir urseoiriez seoir SFX pT urseoir urseoiraient seoir SFX pT urseoir ursoie seoir SFX pT urseoir ursoies seoir SFX pT urseoir ursisse seoir SFX pT urseoir ursisses seoir SFX pT urseoir ursît seoir SFX pT urseoir ursissions seoir SFX pT urseoir ursissiez seoir SFX pT urseoir ursissent seoir SFX pT urseoir ursois seoir SFX pT urseoir ursoyons seoir SFX pT urseoir ursoyez seoir SFX pU N 4 SFX pU eoir éant seoir SFX pU eoir is seoir SFX pU eoir ise seoir SFX pU eoir ises seoir SFX pV N 13 SFX pV eoir éant seoir SFX pV eoir eyant seoir SFX pV eoir is seoir SFX pV eoir ied seoir SFX pV eoir iéent seoir SFX pV eoir eyait seoir SFX pV eoir eyaient seoir SFX pV eoir iéra seoir SFX pV eoir iéront seoir SFX pV eoir iérait seoir SFX pV eoir iéraient seoir SFX pV eoir iée seoir SFX pV eoir iéent seoir SFX pW N 11 SFX pW sseoir sséant seoir SFX pW sseoir ssied seoir SFX pW sseoir ssiéent seoir SFX pW sseoir sseyait seoir SFX pW sseoir sseyaient seoir SFX pW sseoir ssiéra seoir SFX pW sseoir ssiéront seoir SFX pW sseoir ssiérait seoir SFX pW sseoir ssiéraient seoir SFX pW sseoir ssiée seoir SFX pW sseoir ssiéent seoir SFX pX N 52 SFX pX hoir hu choir SFX pX hoir hus choir SFX pX hoir hue choir SFX pX hoir hues choir SFX pX hoir hois choir SFX pX hoir hoit choir SFX pX hoir hoyons choir SFX pX hoir hoyez choir SFX pX hoir hoient choir SFX pX hoir hoyais déchoir SFX pX hoir hoyait déchoir SFX pX hoir hoyions déchoir SFX pX hoir hoyiez déchoir SFX pX hoir hoyaient déchoir SFX pX hoir hus choir SFX pX hoir hut choir SFX pX hoir hûmes choir SFX pX hoir hûtes choir SFX pX hoir hurent choir SFX pX hoir hoirai choir SFX pX hoir herrai choir SFX pX hoir hoiras choir SFX pX hoir herras choir SFX pX hoir hoira choir SFX pX hoir herra choir SFX pX hoir hoirons choir SFX pX hoir herrons choir SFX pX hoir hoirez choir SFX pX hoir herrez choir SFX pX hoir hoiront choir SFX pX hoir herront choir SFX pX hoir hoirais choir SFX pX hoir herrais choir SFX pX hoir hoirait choir SFX pX hoir herrait choir SFX pX hoir hoirions choir SFX pX hoir herrions choir SFX pX hoir hoiriez choir SFX pX hoir herriez choir SFX pX hoir hoiraient choir SFX pX hoir herraient choir SFX pX hoir hoie choir SFX pX hoir hoies choir SFX pX hoir husse choir SFX pX hoir husses choir SFX pX hoir hût choir SFX pX hoir hussions choir SFX pX hoir hussiez choir SFX pX hoir hussent choir SFX pX hoir hois déchoir SFX pX hoir hoyons déchoir SFX pX hoir hoyez déchoir SFX pY Y 26 SFX pY choir choir/n'q'd' échoir SFX pY choir chéant/n'q' échoir SFX pY choir chu/L'D'Q' échoir SFX pY choir chus/D'Q' échoir SFX pY choir chue/L'D'Q' échoir SFX pY choir chues/D'Q' échoir SFX pY choir choit/n'q' échoir SFX pY choir chet/n'q' échoir SFX pY choir choient/n'q' échoir SFX pY choir chéent/n'q' échoir SFX pY choir choyait/n'q' échoir SFX pY choir choyaient/n'q' échoir SFX pY choir chut/n'q' échoir SFX pY choir churent/n'q' échoir SFX pY choir choira/n'q' échoir SFX pY choir cherra/n'q' échoir SFX pY choir choiront/n'q' échoir SFX pY choir cherront/n'q' échoir SFX pY choir choirait/n'q' échoir SFX pY choir cherrait/n'q' échoir SFX pY choir choiraient/n'q' échoir SFX pY choir cherraient/n'q' échoir SFX pY choir choie/n'q' échoir SFX pY choir choient/n'q' échoir SFX pY choir chût/n'q' échoir SFX pY choir chussent/n'q' échoir SFX pZ N 18 SFX pZ euvoir euvant pleuvoir SFX pZ euvoir u pleuvoir SFX pZ euvoir eut pleuvoir SFX pZ euvoir euvent pleuvoir SFX pZ euvoir euvait pleuvoir SFX pZ euvoir euvaient pleuvoir SFX pZ euvoir ut pleuvoir SFX pZ euvoir urent pleuvoir SFX pZ euvoir euvra pleuvoir SFX pZ euvoir euvront pleuvoir SFX pZ euvoir euvrait pleuvoir SFX pZ euvoir euvraient pleuvoir SFX pZ euvoir euve pleuvoir SFX pZ euvoir ût pleuvoir SFX pZ euvoir ussent pleuvoir SFX pZ euvoir eus pleuvoir SFX pZ euvoir euvons pleuvoir SFX pZ euvoir euvez pleuvoir SFX qA N 8 SFX qA alloir allu falloir SFX qA alloir aut falloir SFX qA alloir allait falloir SFX qA alloir allut falloir SFX qA alloir audra falloir SFX qA alloir audrait falloir SFX qA alloir aille falloir SFX qA alloir allût falloir SFX rA Y 28 SFX rA lore lore/n'q'd'l'm't's' clore SFX rA lore losant/n'q'l'm't's' clore SFX rA lore los/L'D'Q' clore SFX rA lore lose/L'D'Q' clore SFX rA lore loses/D'Q' clore SFX rA lore los/n'q'j'l'm't' clore SFX rA lore lot/n'q'l'm't's' .clore SFX rA lore losons/n'q'l't' clore SFX rA lore losez/n'q'l'm' clore SFX rA lore losent/n'q'l'm't's' clore SFX rA lore lorai/n'q'j'l'm't' clore SFX rA lore loras/n'q'l'm't' clore SFX rA lore lora/n'q'l'm't's' clore SFX rA lore lorons/n'q'l't' clore SFX rA lore lorez/n'q'l'm' clore SFX rA lore loront/n'q'l'm't's' clore SFX rA lore lorais/n'q'j'l'm't' clore SFX rA lore lorait/n'q'l'm't's' clore SFX rA lore lorions/n'q'l't' clore SFX rA lore loriez/n'q'l'm' clore SFX rA lore loraient/n'q'l'm't's' clore SFX rA lore lose/n'q'j'l'm't's' clore SFX rA lore loses/n'l'm't' clore SFX rA lore losions/n'l't' clore SFX rA lore losiez/n'l'm' clore SFX rA lore los/n'l'm' clore SFX rA lore losons/n'l' clore SFX rA lore losez/n'l'm' clore SFX rB Y 1 SFX rB lore lôt clore SFX rC Y 28 SFX rC clore clore/n'q'd' clore SFX rC clore closant/n'q' clore SFX rC clore clos/L'D'Q' clore SFX rC clore close/L'D'Q' clore SFX rC clore closes/D'Q' clore SFX rC clore clos/n'j' clore SFX rC clore clot/n'q' clore SFX rC clore closons/n' clore SFX rC clore closez/n' clore SFX rC clore closent/n'q' clore SFX rC clore clorai/n'j' clore SFX rC clore cloras/n' clore SFX rC clore clora/n'q' clore SFX rC clore clorons/n' clore SFX rC clore clorez/n' clore SFX rC clore cloront/n'q' clore SFX rC clore clorais/n'j' clore SFX rC clore clorait/n'q' clore SFX rC clore clorions/n' clore SFX rC clore cloriez/n' clore SFX rC clore cloraient/n'q' clore SFX rC clore close/n'q'j' clore SFX rC clore closes/n' clore SFX rC clore closions/n' clore SFX rC clore closiez/n' clore SFX rC clore clos/n' clore SFX rC clore closons/n' clore SFX rC clore closez/n' clore SFX rD N 3 SFX rD clore clos clore SFX rD clore close clore SFX rD clore closes clore SFX tA Y 44 SFX tA re re/n'q'd'l'm't's' [dp]re SFX tA re ant/n'q'l'm't's' [dp]re SFX tA re u/L'D'Q' [dp]re SFX tA re us/D'Q' [dp]re SFX tA re ue/L'D'Q' [dp]re SFX tA re ues/D'Q' [dp]re SFX tA re s/n'q'j'l'm't' [dp]re SFX tA dre d/n'q'l'm't's' dre SFX tA pre pt/n'q'l'm't's' pre SFX tA re ons/n'q'l't' [dp]re SFX tA re ez/n'q'l'm' [dp]re SFX tA re ent/n'q'l'm't's' [dp]re SFX tA re ais/n'q'j'l'm't' [dp]re SFX tA re ait/n'q'l'm't's' [dp]re SFX tA re ions/n'q'l't' [dp]re SFX tA re iez/n'q'l'm' [dp]re SFX tA re aient/n'q'l'm't's' [dp]re SFX tA re is/n'q'j'l'm't' [dp]re SFX tA re it/n'q'l'm't's' [dp]re SFX tA re îmes/n'q'l't' [dp]re SFX tA re îtes/n'q'l'm' [dp]re SFX tA re irent/n'q'l'm't's' [dp]re SFX tA re rai/n'q'j'l'm't' [dp]re SFX tA re ras/n'q'l'm't' [dp]re SFX tA re ra/n'q'l'm't's' [dp]re SFX tA re rons/n'q'l't' [dp]re SFX tA re rez/n'q'l'm' [dp]re SFX tA re ront/n'q'l'm't's' [dp]re SFX tA re rais/n'q'j'l'm't' [dp]re SFX tA re rait/n'q'l'm't's' [dp]re SFX tA re rions/n'q'l't' [dp]re SFX tA re riez/n'q'l'm' [dp]re SFX tA re raient/n'q'l'm't's' [dp]re SFX tA re e/n'q'j'l'm't's' [dp]re SFX tA re es/n'l'm't' [dp]re SFX tA re isse/n'q'j'l'm't' [dp]re SFX tA re isses/n'q'l'm't' [dp]re SFX tA re ît/n'q'l'm't's' [dp]re SFX tA re issions/n'q'l't' [dp]re SFX tA re issiez/n'q'l'm' [dp]re SFX tA re issent/n'q'l'm't's' [dp]re SFX tA re s/n'l'm't' [dp]re SFX tA re ons/n'l' [dp]re SFX tA re ez/n'l'm' [dp]re SFX tD Y 43 SFX tD perdre perdre/m't's' perdre SFX tD perdre perdant/m't's' perdre SFX tD perdre perdu perdre SFX tD perdre perdus perdre SFX tD perdre perdue perdre SFX tD perdre perdues perdre SFX tD perdre perds/m't' perdre SFX tD perdre perd/s' perdre SFX tD perdre perdons perdre SFX tD perdre perdez perdre SFX tD perdre perdent/s' perdre SFX tD perdre perdais/m't' perdre SFX tD perdre perdait/s' perdre SFX tD perdre perdions perdre SFX tD perdre perdiez perdre SFX tD perdre perdaient/s' perdre SFX tD perdre perdis/m't' perdre SFX tD perdre perdit/s' perdre SFX tD perdre perdîmes perdre SFX tD perdre perdîtes perdre SFX tD perdre perdirent/s' perdre SFX tD perdre perdrai/m' perdre SFX tD perdre perdras/t' perdre SFX tD perdre perdra/s' perdre SFX tD perdre perdrons perdre SFX tD perdre perdrez perdre SFX tD perdre perdront/s' perdre SFX tD perdre perdrais/m't' perdre SFX tD perdre perdrait/s' perdre SFX tD perdre perdrions perdre SFX tD perdre perdriez perdre SFX tD perdre perdraient/s' perdre SFX tD perdre perde/m's' perdre SFX tD perdre perdes/t' perdre SFX tD perdre perdisse/m' perdre SFX tD perdre perdisses/t' perdre SFX tD perdre perdît/s' perdre SFX tD perdre perdissions perdre SFX tD perdre perdissiez perdre SFX tD perdre perdissent/s' perdre SFX tD perdre perds/t' perdre SFX tD perdre perdons perdre SFX tD perdre perdez perdre SFX tE N 38 SFX tE dre dant dre SFX tE dre ds dre SFX tE dre d dre SFX tE dre dons dre SFX tE dre dez dre SFX tE dre dent dre SFX tE dre dais dre SFX tE dre dait dre SFX tE dre dions dre SFX tE dre diez dre SFX tE dre daient dre SFX tE dre dis dre SFX tE dre dit dre SFX tE dre dîmes dre SFX tE dre dîtes dre SFX tE dre dirent dre SFX tE dre drai dre SFX tE dre dras dre SFX tE dre dra dre SFX tE dre drons dre SFX tE dre drez dre SFX tE dre dront dre SFX tE dre drais dre SFX tE dre drait dre SFX tE dre drions dre SFX tE dre driez dre SFX tE dre draient dre SFX tE dre de dre SFX tE dre des dre SFX tE dre disse dre SFX tE dre disses dre SFX tE dre dît dre SFX tE dre dissions dre SFX tE dre dissiez dre SFX tE dre dissent dre SFX tE dre ds dre SFX tE dre dons dre SFX tE dre dez dre SFX tF Y 42 SFX tF rendre rendre/n'q'd'l'm't's' prendre SFX tF rendre renant/n'q'l'm't's' prendre SFX tF rendre ris/L'D'Q' prendre SFX tF rendre rise/L'D'Q' prendre SFX tF rendre rises/D'Q' prendre SFX tF rendre rends/n'q'j'l'm't' prendre SFX tF rendre rend/n'q'l'm't's' prendre SFX tF rendre renons/n'q'l't' prendre SFX tF rendre renez/n'q'l'm' prendre SFX tF rendre rennent/n'q'l'm't's' prendre SFX tF rendre renais/n'q'j'l'm't' prendre SFX tF rendre renait/n'q'l'm't's' prendre SFX tF rendre renions/n'q'l't' prendre SFX tF rendre reniez/n'q'l'm' prendre SFX tF rendre renaient/n'q'l'm't's' prendre SFX tF rendre ris/n'q'j'l'm't' prendre SFX tF rendre rit/n'q'l'm't's' prendre SFX tF rendre rîmes/n'q'l't' prendre SFX tF rendre rîtes/n'q'l'm' prendre SFX tF rendre rirent/n'q'l'm't's' prendre SFX tF rendre rendrai/n'q'j'l'm't' prendre SFX tF rendre rendras/n'q'l'm't' prendre SFX tF rendre rendra/n'q'l'm't's' prendre SFX tF rendre rendrons/n'q'l't' prendre SFX tF rendre rendrez/n'q'l'm' prendre SFX tF rendre rendront/n'q'l'm't's' prendre SFX tF rendre rendrais/n'q'j'l'm't' prendre SFX tF rendre rendrait/n'q'l'm't's' prendre SFX tF rendre rendrions/n'q'l't' prendre SFX tF rendre rendriez/n'q'l'm' prendre SFX tF rendre rendraient/n'q'l'm't's' prendre SFX tF rendre renne/n'q'j'l'm't's' prendre SFX tF rendre rennes/n'l'm't' prendre SFX tF rendre risse/n'q'j'l'm't' prendre SFX tF rendre risses/n'q'l'm't' prendre SFX tF rendre rît/n'q'l'm't's' prendre SFX tF rendre rissions/n'q'l't' prendre SFX tF rendre rissiez/n'q'l'm' prendre SFX tF rendre rissent/n'q'l'm't's' prendre SFX tF rendre rends/n'l'm' prendre SFX tF rendre renons/n'l' prendre SFX tF rendre renez/n'l'm' prendre SFX tG Y 42 SFX tG prendre prendre/m't's' prendre SFX tG prendre prenant/m't's' prendre SFX tG prendre pris/L'D'Q' prendre SFX tG prendre prise/L'D'Q' prendre SFX tG prendre prises/D'Q' prendre SFX tG prendre prends/m't' prendre SFX tG prendre prend/s' prendre SFX tG prendre prenons prendre SFX tG prendre prenez prendre SFX tG prendre prennent/s' prendre SFX tG prendre prenais/m't' prendre SFX tG prendre prenait/s' prendre SFX tG prendre prenions prendre SFX tG prendre preniez prendre SFX tG prendre prenaient/s' prendre SFX tG prendre pris/m't' prendre SFX tG prendre prit/s' prendre SFX tG prendre prîmes prendre SFX tG prendre prîtes prendre SFX tG prendre prirent/s' prendre SFX tG prendre prendrai/m' prendre SFX tG prendre prendras/t' prendre SFX tG prendre prendra/s' prendre SFX tG prendre prendrons prendre SFX tG prendre prendrez prendre SFX tG prendre prendront/s' prendre SFX tG prendre prendrais/m't' prendre SFX tG prendre prendrait/s' prendre SFX tG prendre prendrions prendre SFX tG prendre prendriez prendre SFX tG prendre prendraient/s' prendre SFX tG prendre prenne/m's' prendre SFX tG prendre prennes/t' prendre SFX tG prendre prisse/m' prendre SFX tG prendre prisses/t' prendre SFX tG prendre prît/s' prendre SFX tG prendre prissions prendre SFX tG prendre prissiez prendre SFX tG prendre prissent/s' prendre SFX tG prendre prends/t' prendre SFX tG prendre prenons prendre SFX tG prendre prenez prendre SFX tM N 31 SFX tM outre outant foutre SFX tM outre outu foutre SFX tM outre outus foutre SFX tM outre outue foutre SFX tM outre outues foutre SFX tM outre ous foutre SFX tM outre out foutre SFX tM outre outons foutre SFX tM outre outez foutre SFX tM outre outent foutre SFX tM outre outais foutre SFX tM outre outait foutre SFX tM outre outions foutre SFX tM outre outiez foutre SFX tM outre outaient foutre SFX tM outre outrai foutre SFX tM outre outras foutre SFX tM outre outra foutre SFX tM outre outrons foutre SFX tM outre outrez foutre SFX tM outre outront foutre SFX tM outre outrais foutre SFX tM outre outrait foutre SFX tM outre outrions foutre SFX tM outre outriez foutre SFX tM outre outraient foutre SFX tM outre oute foutre SFX tM outre outes foutre SFX tM outre ous foutre SFX tM outre outons foutre SFX tM outre outez foutre SFX tU N 4 SFX tU istre issu tistre SFX tU istre issus tistre SFX tU istre issue tistre SFX tU istre issues tistre SFX uA Y 45 SFX uA tre tre/n'q'd'l'm't's' tre SFX uA tre tant/n'q'l'm't's' tre SFX uA tre tu/L'D'Q' tre SFX uA tre tus/D'Q' tre SFX uA tre tue/L'D'Q' tre SFX uA tre tues/D'Q' tre SFX uA ttre ts/n'q'j'l'm't' ttre SFX uA ttre t/n'q'l'm't's' ttre SFX uA tre ts/n'q'j'l'm't' embatre SFX uA tre t/n'q'l'm't's' embatre SFX uA tre tons/n'q'l't' tre SFX uA tre tez/n'q'l'm' tre SFX uA tre tent/n'q'l'm't's' tre SFX uA tre tais/n'q'j'l'm't' tre SFX uA tre tait/n'q'l'm't's' tre SFX uA tre tions/n'q'l't' tre SFX uA tre tiez/n'q'l'm' tre SFX uA tre taient/n'q'l'm't's' tre SFX uA tre tis/n'q'j'l'm't' tre SFX uA tre tit/n'q'l'm't's' tre SFX uA tre tîmes/n'q'l't' tre SFX uA tre tîtes/n'q'l'm' tre SFX uA tre tirent/n'q'l'm't's' tre SFX uA tre trai/n'q'j'l'm't' tre SFX uA tre tras/n'q'l'm't' tre SFX uA tre tra/n'q'l'm't's' tre SFX uA tre trons/n'q'l't' tre SFX uA tre trez/n'q'l'm' tre SFX uA tre tront/n'q'l'm't's' tre SFX uA tre trais/n'q'j'l'm't' tre SFX uA tre trait/n'q'l'm't's' tre SFX uA tre trions/n'q'l't' tre SFX uA tre triez/n'q'l'm' tre SFX uA tre traient/n'q'l'm't's' tre SFX uA tre te/n'q'j'l'm't's' tre SFX uA tre tes/n'l'm't' tre SFX uA tre tisse/n'q'j'l'm't' tre SFX uA tre tisses/n'q'l'm't' tre SFX uA tre tît/n'q'l'm't's' tre SFX uA tre tissions/n'q'l't' tre SFX uA tre tissiez/n'q'l'm' tre SFX uA tre tissent/n'q'l'm't's' tre SFX uA tre s/n'l'm't' tre SFX uA tre tons/n'l' tre SFX uA tre tez/n'l'm' tre SFX uC Y 43 SFX uC battre battre/m't's' battre SFX uC battre battant/m't's' battre SFX uC battre battu battre SFX uC battre battus battre SFX uC battre battue battre SFX uC battre battues battre SFX uC battre bats/m't' battre SFX uC battre bat/s' battre SFX uC battre battons battre SFX uC battre battez battre SFX uC battre battent/s' battre SFX uC battre battais/m't' battre SFX uC battre battait/s' battre SFX uC battre battions battre SFX uC battre battiez battre SFX uC battre battaient/s' battre SFX uC battre battis/m't' battre SFX uC battre battit/s' battre SFX uC battre battîmes battre SFX uC battre battîtes battre SFX uC battre battirent/s' battre SFX uC battre battrai/m' battre SFX uC battre battras/t' battre SFX uC battre battra/s' battre SFX uC battre battrons battre SFX uC battre battrez battre SFX uC battre battront/s' battre SFX uC battre battrais/m't' battre SFX uC battre battrait/s' battre SFX uC battre battrions battre SFX uC battre battriez battre SFX uC battre battraient/s' battre SFX uC battre batte/m's' battre SFX uC battre battes/t' battre SFX uC battre battisse/m' battre SFX uC battre battisses/t' battre SFX uC battre battît/s' battre SFX uC battre battissions battre SFX uC battre battissiez battre SFX uC battre battissent/s' battre SFX uC battre bats/t' battre SFX uC battre battons battre SFX uC battre battez battre SFX uD Y 33 SFX uD battre battre/s' battre SFX uD battre battant/s' battre SFX uD battre battu battre SFX uD battre battus battre SFX uD battre battue battre SFX uD battre battues battre SFX uD battre bat/s' battre SFX uD battre battons battre SFX uD battre battez battre SFX uD battre battent/s' battre SFX uD battre battait/s' battre SFX uD battre battions battre SFX uD battre battiez battre SFX uD battre battaient/s' battre SFX uD battre battit/s' battre SFX uD battre battîmes battre SFX uD battre battîtes battre SFX uD battre battirent/s' battre SFX uD battre battra/s' battre SFX uD battre battrons battre SFX uD battre battrez battre SFX uD battre battront/s' battre SFX uD battre battrait/s' battre SFX uD battre battrions battre SFX uD battre battriez battre SFX uD battre battraient/s' battre SFX uD battre batte/s' battre SFX uD battre battît/s' battre SFX uD battre battissions battre SFX uD battre battissiez battre SFX uD battre battissent/s' battre SFX uD battre battons-nous battre SFX uD battre battez-vous battre SFX vA Y 42 SFX vA ettre ettre/n'q'd'l'm't's' mettre SFX vA ettre ettant/n'q'l'm't's' mettre SFX vA ettre is/L'D'Q' mettre SFX vA ettre ise/L'D'Q' mettre SFX vA ettre ises/D'Q' mettre SFX vA ettre ets/n'q'j'l'm't' mettre SFX vA ettre et/n'q'l'm't's' mettre SFX vA ettre ettons/n'q'l't' mettre SFX vA ettre ettez/n'q'l'm' mettre SFX vA ettre ettent/n'q'l'm't's' mettre SFX vA ettre ettais/n'q'j'l'm't' mettre SFX vA ettre ettait/n'q'l'm't's' mettre SFX vA ettre ettions/n'q'l't' mettre SFX vA ettre ettiez/n'q'l'm' mettre SFX vA ettre ettaient/n'q'l'm't's' mettre SFX vA ettre is/n'q'j'l'm't' mettre SFX vA ettre it/n'q'l'm't's' mettre SFX vA ettre îmes/n'q'l't' mettre SFX vA ettre îtes/n'q'l'm' mettre SFX vA ettre irent/n'q'l'm't's' mettre SFX vA ettre ettrai/n'q'j'l'm't' mettre SFX vA ettre ettras/n'q'l'm't' mettre SFX vA ettre ettra/n'q'l'm't's' mettre SFX vA ettre ettrons/n'q'l't' mettre SFX vA ettre ettrez/n'q'l'm' mettre SFX vA ettre ettront/n'q'l'm't's' mettre SFX vA ettre ettrais/n'q'j'l'm't' mettre SFX vA ettre ettrait/n'q'l'm't's' mettre SFX vA ettre ettrions/n'q'l't' mettre SFX vA ettre ettriez/n'q'l'm' mettre SFX vA ettre ettraient/n'q'l'm't's' mettre SFX vA ettre ette/n'q'j'l'm't's' mettre SFX vA ettre ettes/n'l'm't' mettre SFX vA ettre isse/n'q'j'l'm't' mettre SFX vA ettre isses/n'q'l'm't' mettre SFX vA ettre ît/n'q'l'm't's' mettre SFX vA ettre issions/n'q'l't' mettre SFX vA ettre issiez/n'q'l'm' mettre SFX vA ettre issent/n'q'l'm't's' mettre SFX vA ettre ets/n'l'm't' mettre SFX vA ettre ettons/n'l' mettre SFX vA ettre ettez/n'l'm' mettre SFX vC Y 42 SFX vC mettre mettre/m't's' mettre SFX vC mettre mettant/m't's' mettre SFX vC mettre mis mettre SFX vC mettre mise mettre SFX vC mettre mises mettre SFX vC mettre mets/m't' mettre SFX vC mettre met/s' mettre SFX vC mettre mettons mettre SFX vC mettre mettez mettre SFX vC mettre mettent/s' mettre SFX vC mettre mettais/m't' mettre SFX vC mettre mettait/s' mettre SFX vC mettre mettions mettre SFX vC mettre mettiez mettre SFX vC mettre mettaient/s' mettre SFX vC mettre mis/m't' mettre SFX vC mettre mit/s' mettre SFX vC mettre mîmes mettre SFX vC mettre mîtes mettre SFX vC mettre mirent/s' mettre SFX vC mettre mettrai/m' mettre SFX vC mettre mettras/t' mettre SFX vC mettre mettra/s' mettre SFX vC mettre mettrons mettre SFX vC mettre mettrez mettre SFX vC mettre mettront/s' mettre SFX vC mettre mettrais/m't' mettre SFX vC mettre mettrait/s' mettre SFX vC mettre mettrions mettre SFX vC mettre mettriez mettre SFX vC mettre mettraient/s' mettre SFX vC mettre mette/m's' mettre SFX vC mettre mettes/t' mettre SFX vC mettre misse/m' mettre SFX vC mettre misses/t' mettre SFX vC mettre mît/s' mettre SFX vC mettre missions mettre SFX vC mettre missiez mettre SFX vC mettre missent/s' mettre SFX vC mettre mets mettre SFX vC mettre mettons mettre SFX vC mettre mettez mettre SFX wA N 42 SFX wA eindre eignant eindre SFX wA eindre eint eindre SFX wA eindre eints eindre SFX wA eindre einte eindre SFX wA eindre eintes eindre SFX wA eindre eins eindre SFX wA eindre eint eindre SFX wA eindre eignons eindre SFX wA eindre eignez eindre SFX wA eindre eignent eindre SFX wA eindre eignais eindre SFX wA eindre eignait eindre SFX wA eindre eignions eindre SFX wA eindre eigniez eindre SFX wA eindre eignaient eindre SFX wA eindre eignis eindre SFX wA eindre eignit eindre SFX wA eindre eignîmes eindre SFX wA eindre eignîtes eindre SFX wA eindre eignirent eindre SFX wA eindre eindrai eindre SFX wA eindre eindras eindre SFX wA eindre eindra eindre SFX wA eindre eindrons eindre SFX wA eindre eindrez eindre SFX wA eindre eindront eindre SFX wA eindre eindrais eindre SFX wA eindre eindrait eindre SFX wA eindre eindrions eindre SFX wA eindre eindriez eindre SFX wA eindre eindraient eindre SFX wA eindre eigne eindre SFX wA eindre eignes eindre SFX wA eindre eignisse eindre SFX wA eindre eignisses eindre SFX wA eindre eignît eindre SFX wA eindre eignissions eindre SFX wA eindre eignissiez eindre SFX wA eindre eignissent eindre SFX wA eindre eins eindre SFX wA eindre eignons eindre SFX wA eindre eignez eindre SFX wB Y 43 SFX wB indre indre/n'q'd'l'm't's' indre SFX wB indre ignant/n'q'l'm't's' indre SFX wB indre int/L'D'Q' indre SFX wB indre ints/D'Q' indre SFX wB indre inte/L'D'Q' indre SFX wB indre intes/D'Q' indre SFX wB indre ins/n'q'j'l'm't' indre SFX wB indre int/n'q'l'm't's' indre SFX wB indre ignons/n'q'l't' indre SFX wB indre ignez/n'q'l'm' indre SFX wB indre ignent/n'q'l'm't's' indre SFX wB indre ignais/n'q'j'l'm't' indre SFX wB indre ignait/n'q'l'm't's' indre SFX wB indre ignions/n'q'l't' indre SFX wB indre igniez/n'q'l'm' indre SFX wB indre ignaient/n'q'l'm't's' indre SFX wB indre ignis/n'q'j'l'm't' indre SFX wB indre ignit/n'q'l'm't's' indre SFX wB indre ignîmes/n'q'l't' indre SFX wB indre ignîtes/n'q'l'm' indre SFX wB indre ignirent/n'q'l'm't's' indre SFX wB indre indrai/n'q'j'l'm't' indre SFX wB indre indras/n'q'l'm't' indre SFX wB indre indra/n'q'l'm't's' indre SFX wB indre indrons/n'q'l't' indre SFX wB indre indrez/n'q'l'm' indre SFX wB indre indront/n'q'l'm't's' indre SFX wB indre indrais/n'q'j'l'm't' indre SFX wB indre indrait/n'q'l'm't's' indre SFX wB indre indrions/n'q'l't' indre SFX wB indre indriez/n'q'l'm' indre SFX wB indre indraient/n'q'l'm't's' indre SFX wB indre igne/n'q'j'l'm't's' indre SFX wB indre ignes/n'l'm't' indre SFX wB indre ignisse/n'q'j'l'm't' indre SFX wB indre ignisses/n'q'l'm't' indre SFX wB indre ignît/n'q'l'm't's' indre SFX wB indre ignissions/n'q'l't' indre SFX wB indre ignissiez/n'q'l'm' indre SFX wB indre ignissent/n'q'l'm't's' indre SFX wB indre ins/n'l'm't' indre SFX wB indre ignons/n'l' indre SFX wB indre ignez/n'l'm' indre SFX wD N 45 SFX wD aire aisant faire SFX wD aire ait faire SFX wD aire aits faire SFX wD aire aite faire SFX wD aire aites faire SFX wD aire ais faire SFX wD aire ait faire SFX wD aire aisons faire SFX wD aire aites faire SFX wD aire ont faire SFX wD aire aisais faire SFX wD aire aisait faire SFX wD aire aisions faire SFX wD aire aisiez faire SFX wD aire aisaient faire SFX wD aire is faire SFX wD aire it faire SFX wD aire îmes faire SFX wD aire îtes faire SFX wD aire irent faire SFX wD aire erai faire SFX wD aire eras faire SFX wD aire era faire SFX wD aire erons faire SFX wD aire erez faire SFX wD aire eront faire SFX wD aire erais faire SFX wD aire erait faire SFX wD aire erions faire SFX wD aire eriez faire SFX wD aire eraient faire SFX wD aire asse faire SFX wD aire asses faire SFX wD aire assions faire SFX wD aire assiez faire SFX wD aire assent faire SFX wD aire isse faire SFX wD aire isses faire SFX wD aire ît faire SFX wD aire issions faire SFX wD aire issiez faire SFX wD aire issent faire SFX wD aire ais faire SFX wD aire aisons faire SFX wD aire aites faire SFX wF N 13 SFX wF faire faisant faire SFX wF faire fait faire SFX wF faire faits faire SFX wF faire faite faire SFX wF faire faites faire SFX wF faire fais faire SFX wF faire fait faire SFX wF faire faisons faire SFX wF faire faites faire SFX wF faire font faire SFX wF faire fais faire SFX wF faire faisons faire SFX wF faire faites faire SFX wG N 5 SFX wG aire aisant faire SFX wG aire ait faire SFX wG aire aits faire SFX wG aire aite faire SFX wG aire aites faire SFX wL Y 32 SFX wL raire raire/n'q'd'l'm't's' traire SFX wL raire rayant/n'q'l'm't's' traire SFX wL raire rait/L'D'Q' traire SFX wL raire raits/D'Q' traire SFX wL raire raite/L'D'Q' traire SFX wL raire raites/D'Q' traire SFX wL raire rais/n'q'j'l'm't' traire SFX wL raire rait/n'q'l'm't's' traire SFX wL raire rayons/n'q'l't' traire SFX wL raire rayez/n'q'l'm' traire SFX wL raire raient/n'q'l'm't's' traire SFX wL raire rayais/n'q'j'l'm't' traire SFX wL raire rayait/n'q'l'm't's' traire SFX wL raire rayions/n'q'l't' traire SFX wL raire rayiez/n'q'l'm' traire SFX wL raire rayaient/n'q'l'm't's' traire SFX wL raire rairai/n'q'j'l'm't' traire SFX wL raire rairas/n'q'l'm't' traire SFX wL raire raira/n'q'l'm't's' traire SFX wL raire rairons/n'q'l't' traire SFX wL raire rairez/n'q'l'm' traire SFX wL raire rairont/n'q'l'm't's' traire SFX wL raire rairais/n'q'j'l'm't' traire SFX wL raire rairait/n'q'l'm't's' traire SFX wL raire rairions/n'q'l't' traire SFX wL raire rairiez/n'q'l'm' traire SFX wL raire rairaient/n'q'l'm't's' traire SFX wL raire raie/n'q'j'l'm't's' traire SFX wL raire raies/n'q'l'm't' traire SFX wL raire rais/n'l'm't' traire SFX wL raire rayons/n'l' traire SFX wL raire rayez/n'l'm' traire SFX wM N 28 SFX wM aire ayant raire SFX wM aire ait raire SFX wM aire ais raire SFX wM aire ait raire SFX wM aire ayons raire SFX wM aire ayez raire SFX wM aire aient raire SFX wM aire ayais raire SFX wM aire ayait raire SFX wM aire ayions raire SFX wM aire ayiez raire SFX wM aire ayaient raire SFX wM aire airai raire SFX wM aire airas raire SFX wM aire aira raire SFX wM aire airons raire SFX wM aire airez raire SFX wM aire airont raire SFX wM aire airais raire SFX wM aire airait raire SFX wM aire airions raire SFX wM aire airiez raire SFX wM aire airaient raire SFX wM aire aie raire SFX wM aire aies raire SFX wM aire ais raire SFX wM aire ayons raire SFX wM aire ayez raire SFX wN N 39 SFX wN aire aisant aire SFX wN aire ais aire SFX wN aire ait taire SFX wN aire aît plaire SFX wN aire aisons aire SFX wN aire aisez aire SFX wN aire aisent aire SFX wN aire aisais aire SFX wN aire aisait aire SFX wN aire aisions aire SFX wN aire aisiez aire SFX wN aire aisaient aire SFX wN aire us aire SFX wN aire ut aire SFX wN aire ûmes aire SFX wN aire ûtes aire SFX wN aire urent aire SFX wN aire airai aire SFX wN aire airas aire SFX wN aire aira aire SFX wN aire airons aire SFX wN aire airez aire SFX wN aire airont aire SFX wN aire airais aire SFX wN aire airait aire SFX wN aire airions aire SFX wN aire airiez aire SFX wN aire airaient aire SFX wN aire aise aire SFX wN aire aises aire SFX wN aire usse aire SFX wN aire usses aire SFX wN aire ût aire SFX wN aire ussions aire SFX wN aire ussiez aire SFX wN aire ussent aire SFX wN aire ais aire SFX wN aire aisons aire SFX wN aire aisez aire SFX wO N 42 SFX wO aindre aignant aindre SFX wO aindre aint aindre SFX wO aindre aints aindre SFX wO aindre ainte aindre SFX wO aindre aintes aindre SFX wO aindre ains aindre SFX wO aindre aint aindre SFX wO aindre aignons aindre SFX wO aindre aignez aindre SFX wO aindre aignent aindre SFX wO aindre aignais aindre SFX wO aindre aignait aindre SFX wO aindre aignions aindre SFX wO aindre aigniez aindre SFX wO aindre aignaient aindre SFX wO aindre aignis aindre SFX wO aindre aignit aindre SFX wO aindre aignîmes aindre SFX wO aindre aignîtes aindre SFX wO aindre aignirent aindre SFX wO aindre aindrai aindre SFX wO aindre aindras aindre SFX wO aindre aindra aindre SFX wO aindre aindrons aindre SFX wO aindre aindrez aindre SFX wO aindre aindront aindre SFX wO aindre aindrais aindre SFX wO aindre aindrait aindre SFX wO aindre aindrions aindre SFX wO aindre aindriez aindre SFX wO aindre aindraient aindre SFX wO aindre aigne aindre SFX wO aindre aignes aindre SFX wO aindre aignisse aindre SFX wO aindre aignisses aindre SFX wO aindre aignît aindre SFX wO aindre aignissions aindre SFX wO aindre aignissiez aindre SFX wO aindre aignissent aindre SFX wO aindre ains aindre SFX wO aindre aignons aindre SFX wO aindre aignez aindre SFX wP N 42 SFX wP aincre ainquant vaincre SFX wP aincre aincu vaincre SFX wP aincre aincus vaincre SFX wP aincre aincue vaincre SFX wP aincre aincues vaincre SFX wP aincre aincs vaincre SFX wP aincre ainc vaincre SFX wP aincre ainquons vaincre SFX wP aincre ainquez vaincre SFX wP aincre ainquent vaincre SFX wP aincre ainquais vaincre SFX wP aincre ainquait vaincre SFX wP aincre ainquions vaincre SFX wP aincre ainquiez vaincre SFX wP aincre ainquaient vaincre SFX wP aincre ainquis vaincre SFX wP aincre ainquit vaincre SFX wP aincre ainquîmes vaincre SFX wP aincre ainquîtes vaincre SFX wP aincre ainquirent vaincre SFX wP aincre aincrai vaincre SFX wP aincre aincras vaincre SFX wP aincre aincra vaincre SFX wP aincre aincrons vaincre SFX wP aincre aincrez vaincre SFX wP aincre aincront vaincre SFX wP aincre aincrais vaincre SFX wP aincre aincrait vaincre SFX wP aincre aincrions vaincre SFX wP aincre aincriez vaincre SFX wP aincre aincraient vaincre SFX wP aincre ainque vaincre SFX wP aincre ainques vaincre SFX wP aincre ainquisse vaincre SFX wP aincre ainquisses vaincre SFX wP aincre ainquît vaincre SFX wP aincre ainquissions vaincre SFX wP aincre ainquissiez vaincre SFX wP aincre ainquissent vaincre SFX wP aincre aincs vaincre SFX wP aincre ainquons vaincre SFX wP aincre ainquez vaincre SFX wQ Y 42 SFX wQ tre tre/n'q'd'm't's' tre SFX wQ aître aissant/n'q'd'm't's' aître SFX wQ aître ais/n'q'j'm't' aître SFX wQ aître aît/n'q'm't's' aître SFX wQ aître aissons/n'q't' aître SFX wQ aître aissez/n'q'm' aître SFX wQ aître aissent/n'q'm't's' aître SFX wQ aître aissais/n'q'j'm't' aître SFX wQ aître aissait/n'q'm't's' aître SFX wQ aître aissions/n'q't' aître SFX wQ aître aissiez/n'q'm' aître SFX wQ aître aissaient/n'q'm't's' aître SFX wQ aître us/n'q'j'm't' aître SFX wQ aître ut/n'q'm't's' aître SFX wQ aître ûmes/n'q't' aître SFX wQ aître ûtes/n'q'm' aître SFX wQ aître urent/n'q'm't's' aître SFX wQ tre trai/n'q'j'm't' tre SFX wQ tre tras/n'q'm't' tre SFX wQ tre tra/n'q'm't's' tre SFX wQ tre trons/n'q't' tre SFX wQ tre trez/n'q'm' tre SFX wQ tre tront/n'q'm't's' tre SFX wQ tre trais/n'q'j'm't' tre SFX wQ tre trait/n'q'm't's' tre SFX wQ tre trions/n'q't' tre SFX wQ tre triez/n'q'm' tre SFX wQ tre traient/n'q'm't's' tre SFX wQ aître aisse/n'q'j'm't's' aître SFX wQ aître aisses/n'q'm't' aître SFX wQ aître usse/n'q'j'm't' aître SFX wQ aître usses/n'q'm't' aître SFX wQ aître ût/n'q'm't's' aître SFX wQ aître ussions/n'q't' aître SFX wQ aître ussiez/n'q'm' aître SFX wQ aître ussent/n'q'm't's' aître SFX wQ aître ais/n'm' paraître SFX wQ aître ais connaître SFX wQ aître aissons/n' paraître SFX wQ aître aissons connaître SFX wQ aître aissez/n'm' paraître SFX wQ aître aissez connaître SFX wR N 42 SFX wR aître aissant naître SFX wR aître é naître SFX wR aître és naître SFX wR aître ée naître SFX wR aître ées naître SFX wR aître ais naître SFX wR aître aît naître SFX wR aître aissons naître SFX wR aître aissez naître SFX wR aître aissent naître SFX wR aître aissais naître SFX wR aître aissait naître SFX wR aître aissions naître SFX wR aître aissiez naître SFX wR aître aissaient naître SFX wR aître aquis naître SFX wR aître aquit naître SFX wR aître aquîmes naître SFX wR aître aquîtes naître SFX wR aître aquirent naître SFX wR tre trai tre SFX wR tre tras tre SFX wR tre tra tre SFX wR tre trons tre SFX wR tre trez tre SFX wR tre tront tre SFX wR tre trais tre SFX wR tre trait tre SFX wR tre trions tre SFX wR tre triez tre SFX wR tre traient tre SFX wR aître aisse naître SFX wR aître aisses naître SFX wR aître aquisse naître SFX wR aître aquisses naître SFX wR aître aquît naître SFX wR aître aquissions naître SFX wR aître aquissiez naître SFX wR aître aquissent naître SFX wR aître ais naître SFX wR aître aissons naître SFX wR aître aissez naître SFX wS N 42 SFX wS aître aissant paître SFX wS aître u repaître SFX wS aître us repaître SFX wS aître ue repaître SFX wS aître ues repaître SFX wS aître ais paître SFX wS aître aît paître SFX wS aître aissons paître SFX wS aître aissez paître SFX wS aître aissent paître SFX wS aître aissais paître SFX wS aître aissait paître SFX wS aître aissions paître SFX wS aître aissiez paître SFX wS aître aissaient paître SFX wS aître us repaître SFX wS aître ut repaître SFX wS aître ûmes repaître SFX wS aître ûtes repaître SFX wS aître urent repaître SFX wS tre trai tre SFX wS tre tras tre SFX wS tre tra tre SFX wS tre trons tre SFX wS tre trez tre SFX wS tre tront tre SFX wS tre trais tre SFX wS tre trait tre SFX wS tre trions tre SFX wS tre triez tre SFX wS tre traient tre SFX wS aître aisse paître SFX wS aître aisses paître SFX wS aître usse repaître SFX wS aître usses repaître SFX wS aître ût repaître SFX wS aître ussions repaître SFX wS aître ussiez repaître SFX wS aître ussent repaître SFX wS aître ais paître SFX wS aître aissons paître SFX wS aître aissez paître SFX wT N 46 SFX wT roître roissant croître SFX wT roître rû recroître SFX wT roître rûs recroître SFX wT roître rûe recroître SFX wT roître rûes recroître SFX wT roître ru décroître SFX wT roître rus décroître SFX wT roître rue décroître SFX wT roître rues décroître SFX wT roître rois .croître SFX wT roître roît .croître SFX wT roître roissons croître SFX wT roître roissez croître SFX wT roître roissent croître SFX wT roître roissais croître SFX wT roître roissait croître SFX wT roître roissions croître SFX wT roître roissiez croître SFX wT roître roissaient croître SFX wT roître rus .croître SFX wT roître rut .croître SFX wT roître rûmes croître SFX wT roître rûtes croître SFX wT roître rurent .croître SFX wT tre trai tre SFX wT tre tras tre SFX wT tre tra tre SFX wT tre trons tre SFX wT tre trez tre SFX wT tre tront tre SFX wT tre trais tre SFX wT tre trait tre SFX wT tre trions tre SFX wT tre triez tre SFX wT tre traient tre SFX wT roître roisse croître SFX wT roître roisses croître SFX wT roître russe .croître SFX wT roître russes .croître SFX wT roître rût croître SFX wT roître russions .croître SFX wT roître russiez .croître SFX wT roître russent .croître SFX wT roître rois .croître SFX wT roître roissons croître SFX wT roître roissez croître SFX wU N 15 SFX wU roître rû croître SFX wU roître rûs croître SFX wU roître rûe croître SFX wU roître rûes croître SFX wU roître roîs croître SFX wU roître roît croître SFX wU roître rûs croître SFX wU roître rût croître SFX wU roître rûrent croître SFX wU roître rûsse croître SFX wU roître rûsses croître SFX wU roître rûssions croître SFX wU roître rûssiez croître SFX wU roître rûssent croître SFX wU roître roîs croître SFX wV Y 43 SFX wV tre tre/n'q'd'l'm't's' tre SFX wV croître croissant/n'q'd'l'm't's' croître SFX wV croître cru/L'D'Q' croître SFX wV croître crus/D'Q' croître SFX wV croître crue/L'D'Q' croître SFX wV croître crues/D'Q' croître SFX wV croître crois/n'q'j'l'm't' croître SFX wV croître croît/n'q'l's' croître SFX wV croître croissons/n'q'l' croître SFX wV croître croissez/n'q'l' croître SFX wV croître croissent/n'q'l's' croître SFX wV croître croissais/n'q'j'l'm't' croître SFX wV croître croissait/n'q'l's' croître SFX wV croître croissions/n'q'l' croître SFX wV croître croissiez/n'q'l' croître SFX wV croître croissaient/n'q'l's' croître SFX wV croître crus/n'q'j'l'm't' croître SFX wV croître crut/n'q'l's' croître SFX wV croître crûmes/n'q'l' croître SFX wV croître crûtes/n'q'l' croître SFX wV croître crurent/n'q'l's' croître SFX wV tre trai/n'q'j'l'm' tre SFX wV tre tras/n'q'l't' tre SFX wV tre tra/n'q'l's' tre SFX wV tre trons/n'q'l' tre SFX wV tre trez/n'q'l' tre SFX wV tre tront/n'q'l's' tre SFX wV tre trais/n'q'j'l'm't' tre SFX wV tre trait/n'q'l's' tre SFX wV tre trions/n'q'l' tre SFX wV tre triez/n'q'l' tre SFX wV tre traient/n'q'l's' tre SFX wV croître croisse/n'q'j'l'm's' croître SFX wV croître croisses/n'q'l't' croître SFX wV croître crusse/n'q'j'l'm' croître SFX wV croître crusses/n'q'l't' croître SFX wV croître crût/n'q'l's' croître SFX wV croître crussions/n'q'l' croître SFX wV croître crussiez/n'q'l' croître SFX wV croître crussent/n'q'l's' croître SFX wV croître crois/n'l'm' croître SFX wV croître croissons/n'l' croître SFX wV croître croissez/n'l'm' croître SFX xA N 42 SFX xA roire royant croire SFX xA roire ru croire SFX xA roire rus croire SFX xA roire rue croire SFX xA roire rues croire SFX xA roire rois croire SFX xA roire roit croire SFX xA roire royons croire SFX xA roire royez croire SFX xA roire roient croire SFX xA roire royais croire SFX xA roire royait croire SFX xA roire royions croire SFX xA roire royiez croire SFX xA roire royaient croire SFX xA roire rus croire SFX xA roire rut croire SFX xA roire rûmes croire SFX xA roire rûtes croire SFX xA roire rurent croire SFX xA roire roirai croire SFX xA roire roiras croire SFX xA roire roira croire SFX xA roire roirons croire SFX xA roire roirez croire SFX xA roire roiront croire SFX xA roire roirais croire SFX xA roire roirait croire SFX xA roire roirions croire SFX xA roire roiriez croire SFX xA roire roiraient croire SFX xA roire roie croire SFX xA roire roies croire SFX xA roire russe croire SFX xA roire russes croire SFX xA roire rût croire SFX xA roire russions croire SFX xA roire russiez croire SFX xA roire russent croire SFX xA roire rois croire SFX xA roire royons croire SFX xA roire royez croire SFX xC N 42 SFX xC oire uvant boire SFX xC oire u boire SFX xC oire us boire SFX xC oire ue boire SFX xC oire ues boire SFX xC oire ois boire SFX xC oire oit boire SFX xC oire uvons boire SFX xC oire uvez boire SFX xC oire oivent boire SFX xC oire uvais boire SFX xC oire uvait boire SFX xC oire uvions boire SFX xC oire uviez boire SFX xC oire uvaient boire SFX xC oire us boire SFX xC oire ut boire SFX xC oire ûmes boire SFX xC oire ûtes boire SFX xC oire urent boire SFX xC oire oirai boire SFX xC oire oiras boire SFX xC oire oira boire SFX xC oire oirons boire SFX xC oire oirez boire SFX xC oire oiront boire SFX xC oire oirais boire SFX xC oire oirait boire SFX xC oire oirions boire SFX xC oire oiriez boire SFX xC oire oiraient boire SFX xC oire oive boire SFX xC oire oives boire SFX xC oire usse boire SFX xC oire usses boire SFX xC oire ût boire SFX xC oire ussions boire SFX xC oire ussiez boire SFX xC oire ussent boire SFX xC oire ois boire SFX xC oire uvons boire SFX xC oire uvez boire SFX xD Y 43 SFX xD boire boire/m't's' boire SFX xD boire buvant/m't's' boire SFX xD boire bu boire SFX xD boire bus boire SFX xD boire bue boire SFX xD boire bues boire SFX xD boire bois/m't' boire SFX xD boire boit/s' boire SFX xD boire buvons boire SFX xD boire buvez boire SFX xD boire boivent/s' boire SFX xD boire buvais/m't' boire SFX xD boire buvait/s' boire SFX xD boire buvions boire SFX xD boire buviez boire SFX xD boire buvaient/s' boire SFX xD boire bus/m't' boire SFX xD boire but/s' boire SFX xD boire bûmes boire SFX xD boire bûtes boire SFX xD boire burent/s' boire SFX xD boire boirai/m' boire SFX xD boire boiras/t' boire SFX xD boire boira/s' boire SFX xD boire boirons boire SFX xD boire boirez boire SFX xD boire boiront/s' boire SFX xD boire boirais/m't' boire SFX xD boire boirait/s' boire SFX xD boire boirions boire SFX xD boire boiriez boire SFX xD boire boiraient/s' boire SFX xD boire boive/m's' boire SFX xD boire boives/t' boire SFX xD boire busse/m' boire SFX xD boire busses/t' boire SFX xD boire bût/s' boire SFX xD boire bussions boire SFX xD boire bussiez boire SFX xD boire bussent/s' boire SFX xD boire bois/t' boire SFX xD boire buvons boire SFX xD boire buvez boire SFX xJ N 3 SFX xJ clure clus clure SFX xJ clure cluse clure SFX xJ clure cluses clure SFX xK Y 40 SFX xK clure clure/n'q'd'l'm't's' clure SFX xK clure cluant/n'q'l'm't's' clure SFX xK clure clus/L'D'Q' clure SFX xK clure cluse/L'D'Q' clure SFX xK clure cluses/D'Q' clure SFX xK clure clus/n'q'j'l' clure SFX xK clure clut/n'q'l' clure SFX xK clure cluons/n'q'l' clure SFX xK clure cluez/n'q'l' clure SFX xK clure cluent/n'q'l' clure SFX xK clure cluais/n'q'j'l' clure SFX xK clure cluait/n'q'l' clure SFX xK clure cluions/n'q'l' clure SFX xK clure cluiez/n'q'l' clure SFX xK clure cluaient/n'q'l' clure SFX xK clure clûmes/n'q'l' clure SFX xK clure clûtes/n'q'l' clure SFX xK clure clurent/n'q'l' clure SFX xK clure clurai/n'q'j'l' clure SFX xK clure cluras/n'q'l' clure SFX xK clure clura/n'q'l' clure SFX xK clure clurons/n'q'l' clure SFX xK clure clurez/n'q'l' clure SFX xK clure cluront/n'q'l' clure SFX xK clure clurais/n'q'j'l' clure SFX xK clure clurait/n'q'l' clure SFX xK clure clurions/n'q'l' clure SFX xK clure cluriez/n'q'l' clure SFX xK clure cluraient/n'q'l' clure SFX xK clure clue/n'q'j'l' clure SFX xK clure clues/n'q'l' clure SFX xK clure clusse/n'q'j'l' clure SFX xK clure clusses/n'q'l' clure SFX xK clure clût/n'q'l' clure SFX xK clure clussions/n'q'l' clure SFX xK clure clussiez/n'q'l' clure SFX xK clure clussent/n'q'l' clure SFX xK clure clus/n'l' clure SFX xK clure cluons/n'l' clure SFX xK clure cluez/n'l' clure SFX xL Y 44 SFX xL clure clure/n'q'd'l'm't's' clure SFX xL clure cluant/n'q'l'm't's' clure SFX xL clure clus/L'D'Q' inclure SFX xL clure cluse/L'D'Q' inclure SFX xL clure cluses/D'Q' inclure SFX xL clure clu/L'D'Q' [eo].clure SFX xL clure clus/D'Q' [eo].clure SFX xL clure clue/L'D'Q' [eo].clure SFX xL clure clues/D'Q' [eo].clure SFX xL clure clus/n'q'j'l'm't' clure SFX xL clure clut/n'q'l'm't's' clure SFX xL clure cluons/n'q'l't' clure SFX xL clure cluez/n'q'l'm' clure SFX xL clure cluent/n'q'l'm't's' clure SFX xL clure cluais/n'q'j'l'm't' clure SFX xL clure cluait/n'q'l'm't's' clure SFX xL clure cluions/n'q'l't' clure SFX xL clure cluiez/n'q'l'm' clure SFX xL clure cluaient/n'q'l'm't's' clure SFX xL clure clûmes/n'q'l't' clure SFX xL clure clûtes/n'q'l'm' clure SFX xL clure clurent/n'q'l'm't's' clure SFX xL clure clurai/n'q'j'l'm't' clure SFX xL clure cluras/n'q'l'm't' clure SFX xL clure clura/n'q'l'm't's' clure SFX xL clure clurons/n'q'l't' clure SFX xL clure clurez/n'q'l'm' clure SFX xL clure cluront/n'q'l'm't's' clure SFX xL clure clurais/n'q'j'l'm't' clure SFX xL clure clurait/n'q'l'm't's' clure SFX xL clure clurions/n'q'l't' clure SFX xL clure cluriez/n'q'l'm' clure SFX xL clure cluraient/n'q'l'm't's' clure SFX xL clure clue/n'q'j'l'm't's' clure SFX xL clure clues/n'l'm't' clure SFX xL clure clusse/n'q'j'l'm't' clure SFX xL clure clusses/n'q'l'm't' clure SFX xL clure clût/n'q'l'm't's' clure SFX xL clure clussions/n'q'l't' clure SFX xL clure clussiez/n'q'l'm' clure SFX xL clure clussent/n'q'l'm't's' clure SFX xL clure clus/n'l'm't' clure SFX xL clure cluons/n'l' clure SFX xL clure cluez/n'l'm' clure SFX xM N 14 SFX xM ourdre ourdant sourdre SFX xM ourdre ourd sourdre SFX xM ourdre ourdent sourdre SFX xM ourdre ourdait sourdre SFX xM ourdre ourdaient sourdre SFX xM ourdre ourdit sourdre SFX xM ourdre ourdirent sourdre SFX xM ourdre ourdra sourdre SFX xM ourdre ourdront sourdre SFX xM ourdre ourdrait sourdre SFX xM ourdre ourdraient sourdre SFX xM ourdre ourde sourdre SFX xM ourdre ourdît sourdre SFX xM ourdre ourdissent sourdre SFX xN Y 46 SFX xN soudre soudre/n'q'd'l'm't's' soudre SFX xN soudre solvant/n'q'l'm't's' soudre SFX xN soudre solu résoudre SFX xN soudre solus résoudre SFX xN soudre solue résoudre SFX xN soudre solues résoudre SFX xN soudre sous/L'D'Q' soudre SFX xN soudre soute/L'D'Q' soudre SFX xN soudre soutes/D'Q' soudre SFX xN soudre sous/n'q'j'l'm't' soudre SFX xN soudre sout/n'q'l'm't's' soudre SFX xN soudre solvons/n'q'l't' soudre SFX xN soudre solvez/n'q'l'm' soudre SFX xN soudre solvent/n'q'l'm't's' soudre SFX xN soudre solvais/n'q'j'l'm't' soudre SFX xN soudre solvait/n'q'l'm't's' soudre SFX xN soudre solvions/n'q'l't' soudre SFX xN soudre solviez/n'q'l'm' soudre SFX xN soudre solvaient/n'q'l'm't's' soudre SFX xN soudre solus/n'q'j'l'm't' soudre SFX xN soudre solut/n'q'l'm't's' soudre SFX xN soudre solûmes/n'q'l't' soudre SFX xN soudre solûtes/n'q'l'm' soudre SFX xN soudre solurent/n'q'l'm't's' soudre SFX xN soudre soudrai/n'q'j'l'm't' soudre SFX xN soudre soudras/n'q'l'm't' soudre SFX xN soudre soudra/n'q'l'm't's' soudre SFX xN soudre soudrons/n'q'l't' soudre SFX xN soudre soudrez/n'q'l'm' soudre SFX xN soudre soudront/n'q'l'm't's' soudre SFX xN soudre soudrais/n'q'j'l'm't' soudre SFX xN soudre soudrait/n'q'l'm't's' soudre SFX xN soudre soudrions/n'q'l't' soudre SFX xN soudre soudriez/n'q'l'm' soudre SFX xN soudre soudraient/n'q'l'm't's' soudre SFX xN soudre solve/n'q'j'l'm't's' soudre SFX xN soudre solves/n'l'm't' soudre SFX xN soudre solusse/n'q'j'l'm't' soudre SFX xN soudre solusses/n'q'l'm't' soudre SFX xN soudre solût/n'q'l'm't's' soudre SFX xN soudre solussions/n'q'l't' soudre SFX xN soudre solussiez/n'q'l'm' soudre SFX xN soudre solussent/n'q'l'm't's' soudre SFX xN soudre sous/n'l'm' soudre SFX xN soudre solvons/n'l' soudre SFX xN soudre solvez/n'l'm' soudre SFX xO N 42 SFX xO oudre ousant coudre SFX xO oudre ousu coudre SFX xO oudre ousus coudre SFX xO oudre ousue coudre SFX xO oudre ousues coudre SFX xO oudre ouds coudre SFX xO oudre oud coudre SFX xO oudre ousons coudre SFX xO oudre ousez coudre SFX xO oudre ousent coudre SFX xO oudre ousais coudre SFX xO oudre ousait coudre SFX xO oudre ousions coudre SFX xO oudre ousiez coudre SFX xO oudre ousaient coudre SFX xO oudre ousis coudre SFX xO oudre ousit coudre SFX xO oudre ousîmes coudre SFX xO oudre ousîtes coudre SFX xO oudre ousirent coudre SFX xO oudre oudrai coudre SFX xO oudre oudras coudre SFX xO oudre oudra coudre SFX xO oudre oudrons coudre SFX xO oudre oudrez coudre SFX xO oudre oudront coudre SFX xO oudre oudrais coudre SFX xO oudre oudrait coudre SFX xO oudre oudrions coudre SFX xO oudre oudriez coudre SFX xO oudre oudraient coudre SFX xO oudre ouse coudre SFX xO oudre ouses coudre SFX xO oudre ousisse coudre SFX xO oudre ousisses coudre SFX xO oudre ousît coudre SFX xO oudre ousissions coudre SFX xO oudre ousissiez coudre SFX xO oudre ousissent coudre SFX xO oudre ouds coudre SFX xO oudre ousons coudre SFX xO oudre ousez coudre SFX xP Y 43 SFX xP oudre oudre/n'q'd'l' moudre SFX xP oudre oulant/n'q'l' moudre SFX xP oudre oulu/L'D'Q' moudre SFX xP oudre oulus/D'Q' moudre SFX xP oudre oulue/L'D'Q' moudre SFX xP oudre oulues/D'Q' moudre SFX xP oudre ouds/n'q'l' moudre SFX xP oudre oud/n'q'l' moudre SFX xP oudre oulons/n'q'l' moudre SFX xP oudre oulez/n'q'l' moudre SFX xP oudre oulent/n'q'l' moudre SFX xP oudre oulais/n'q'l' moudre SFX xP oudre oulait/n'q'l' moudre SFX xP oudre oulions/n'q'l' moudre SFX xP oudre ouliez/n'q'l' moudre SFX xP oudre oulaient/n'q'l' moudre SFX xP oudre oulus/n'q'l' moudre SFX xP oudre oulut/n'q'l' moudre SFX xP oudre oulûmes/n'q'l' moudre SFX xP oudre oulûtes/n'q'l' moudre SFX xP oudre oulurent/n'q'l' moudre SFX xP oudre oudrai/n'q'l' moudre SFX xP oudre oudras/n'q'l' moudre SFX xP oudre oudra/n'q'l' moudre SFX xP oudre oudrons/n'q'l' moudre SFX xP oudre oudrez/n'q'l' moudre SFX xP oudre oudront/n'q'l' moudre SFX xP oudre oudrais/n'q'l' moudre SFX xP oudre oudrait/n'q'l' moudre SFX xP oudre oudrions/n'q'l' moudre SFX xP oudre oudriez/n'q'l' moudre SFX xP oudre oudraient/n'q'l' moudre SFX xP oudre oule/n'q'l' moudre SFX xP oudre oules/n'l' moudre SFX xP oudre oulusse/n'q'l' moudre SFX xP oudre oulusses/n'q'l' moudre SFX xP oudre oulût/n'q'l' moudre SFX xP oudre oulussions/n'q'l' moudre SFX xP oudre oulussiez/n'q'l' moudre SFX xP oudre oulussent/n'q'l' moudre SFX xP oudre ouds/n'l'm' moudre SFX xP oudre oulons/n'l' moudre SFX xP oudre oulez/n'l'm' moudre SFX xQ N 42 SFX xQ uivre uivant suivre SFX xQ uivre uivi suivre SFX xQ uivre uivis suivre SFX xQ uivre uivie suivre SFX xQ uivre uivies suivre SFX xQ uivre uis suivre SFX xQ uivre uit suivre SFX xQ uivre uivons suivre SFX xQ uivre uivez suivre SFX xQ uivre uivent suivre SFX xQ uivre uivais suivre SFX xQ uivre uivait suivre SFX xQ uivre uivions suivre SFX xQ uivre uiviez suivre SFX xQ uivre uivaient suivre SFX xQ uivre uivis suivre SFX xQ uivre uivit suivre SFX xQ uivre uivîmes suivre SFX xQ uivre uivîtes suivre SFX xQ uivre uivirent suivre SFX xQ uivre uivrai suivre SFX xQ uivre uivras suivre SFX xQ uivre uivra suivre SFX xQ uivre uivrons suivre SFX xQ uivre uivrez suivre SFX xQ uivre uivront suivre SFX xQ uivre uivrais suivre SFX xQ uivre uivrait suivre SFX xQ uivre uivrions suivre SFX xQ uivre uivriez suivre SFX xQ uivre uivraient suivre SFX xQ uivre uive suivre SFX xQ uivre uives suivre SFX xQ uivre uivisse suivre SFX xQ uivre uivisses suivre SFX xQ uivre uivît suivre SFX xQ uivre uivissions suivre SFX xQ uivre uivissiez suivre SFX xQ uivre uivissent suivre SFX xQ uivre uis suivre SFX xQ uivre uivons suivre SFX xQ uivre uivez suivre SFX xR Y 16 SFX xR suivre suivre/s' suivre SFX xR suivre suivant/s' suivre SFX xR suivre suivi suivre SFX xR suivre suit/s' suivre SFX xR suivre suivent/s' suivre SFX xR suivre suivait/s' suivre SFX xR suivre suivaient/s' suivre SFX xR suivre suivit/s' suivre SFX xR suivre suivirent/s' suivre SFX xR suivre suivra/s' suivre SFX xR suivre suivront/s' suivre SFX xR suivre suivrait/s' suivre SFX xR suivre suivraient/s' suivre SFX xR suivre suive/s' suivre SFX xR suivre suivît/s' suivre SFX xR suivre suivissent/s' suivre SFX xS N 38 SFX xS ivre ivant vivre SFX xS ivre is vivre SFX xS ivre it vivre SFX xS ivre ivons vivre SFX xS ivre ivez vivre SFX xS ivre ivent vivre SFX xS ivre ivais vivre SFX xS ivre ivait vivre SFX xS ivre ivions vivre SFX xS ivre iviez vivre SFX xS ivre ivaient vivre SFX xS ivre écus vivre SFX xS ivre écut vivre SFX xS ivre écûmes vivre SFX xS ivre écûtes vivre SFX xS ivre écurent vivre SFX xS ivre ivrai vivre SFX xS ivre ivras vivre SFX xS ivre ivra vivre SFX xS ivre ivrons vivre SFX xS ivre ivrez vivre SFX xS ivre ivront vivre SFX xS ivre ivrais vivre SFX xS ivre ivrait vivre SFX xS ivre ivrions vivre SFX xS ivre ivriez vivre SFX xS ivre ivraient vivre SFX xS ivre ive vivre SFX xS ivre ives vivre SFX xS ivre écusse vivre SFX xS ivre écusses vivre SFX xS ivre écût vivre SFX xS ivre écussions vivre SFX xS ivre écussiez vivre SFX xS ivre écussent vivre SFX xS ivre is vivre SFX xS ivre ivons vivre SFX xS ivre ivez vivre SFX y1 Y 43 SFX y1 crire crire/n'q'd'l'm't's' crire SFX y1 crire crivant/n'q'l'm't's' crire SFX y1 crire crit/L'D'Q' crire SFX y1 crire crits/D'Q' crire SFX y1 crire crite/L'D'Q' crire SFX y1 crire crites/D'Q' crire SFX y1 crire cris/n'q'j'l'm't' crire SFX y1 crire crit/n'q'l'm't's' crire SFX y1 crire crivons/n'q'l't' crire SFX y1 crire crivez/n'q'l'm' crire SFX y1 crire crivent/n'q'l'm't's' crire SFX y1 crire crivais/n'q'j'l'm't' crire SFX y1 crire crivait/n'q'l'm't's' crire SFX y1 crire crivions/n'q'l't' crire SFX y1 crire criviez/n'q'l'm' crire SFX y1 crire crivaient/n'q'l'm't's' crire SFX y1 crire crivis/n'q'j'l'm't' crire SFX y1 crire crivit/n'q'l'm't's' crire SFX y1 crire crivîmes/n'q'l't' crire SFX y1 crire crivîtes/n'q'l'm' crire SFX y1 crire crivirent/n'q'l'm't's' crire SFX y1 crire crirai/n'q'j'l'm't' crire SFX y1 crire criras/n'q'l'm't' crire SFX y1 crire crira/n'q'l'm't's' crire SFX y1 crire crirons/n'q'l't' crire SFX y1 crire crirez/n'q'l'm' crire SFX y1 crire criront/n'q'l'm't's' crire SFX y1 crire crirais/n'q'j'l'm't' crire SFX y1 crire crirait/n'q'l'm't's' crire SFX y1 crire cririons/n'q'l't' crire SFX y1 crire cririez/n'q'l'm' crire SFX y1 crire criraient/n'q'l'm't's' crire SFX y1 crire crive/n'q'j'l'm't's' crire SFX y1 crire crives/n'l'm't' crire SFX y1 crire crivisse/n'q'j'l'm't' crire SFX y1 crire crivisses/n'q'l'm't' crire SFX y1 crire crivît/n'q'l'm't's' crire SFX y1 crire crivissions/n'q'l't' crire SFX y1 crire crivissiez/n'q'l'm' crire SFX y1 crire crivissent/n'q'l'm't's' crire SFX y1 crire cris/n'l'm't' crire SFX y1 crire crivons/n'l' crire SFX y1 crire crivez/n'l'm' crire SFX yA N 42 SFX yA ire isant lire SFX yA ire u lire SFX yA ire us lire SFX yA ire ue lire SFX yA ire ues lire SFX yA ire is lire SFX yA ire it lire SFX yA ire isons lire SFX yA ire isez lire SFX yA ire isent lire SFX yA ire isais lire SFX yA ire isait lire SFX yA ire isions lire SFX yA ire isiez lire SFX yA ire isaient lire SFX yA ire us lire SFX yA ire ut lire SFX yA ire ûmes lire SFX yA ire ûtes lire SFX yA ire urent lire SFX yA ire irai lire SFX yA ire iras lire SFX yA ire ira lire SFX yA ire irons lire SFX yA ire irez lire SFX yA ire iront lire SFX yA ire irais lire SFX yA ire irait lire SFX yA ire irions lire SFX yA ire iriez lire SFX yA ire iraient lire SFX yA ire ise lire SFX yA ire ises lire SFX yA ire usse lire SFX yA ire usses lire SFX yA ire ût lire SFX yA ire ussions lire SFX yA ire ussiez lire SFX yA ire ussent lire SFX yA ire is lire SFX yA ire isons lire SFX yA ire isez lire SFX yB Y 43 SFX yB lire lire/n'q'd'l'm't's' lire SFX yB lire lisant/n'q'l'm't's' lire SFX yB lire lu/L'D'Q' lire SFX yB lire lus/D'Q' lire SFX yB lire lue/L'D'Q' lire SFX yB lire lues/D'Q' lire SFX yB lire lis/n'q'j'l'm't' lire SFX yB lire lit/n'q'l'm't's' lire SFX yB lire lisons/n'q'l't' lire SFX yB lire lisez/n'q'l'm' lire SFX yB lire lisent/n'q'l'm't's' lire SFX yB lire lisais/n'q'j'l'm't' lire SFX yB lire lisait/n'q'l'm't's' lire SFX yB lire lisions/n'q'l't' lire SFX yB lire lisiez/n'q'l'm' lire SFX yB lire lisaient/n'q'l'm't's' lire SFX yB lire lus/n'q'j'l'm't' lire SFX yB lire lut/n'q'l'm't's' lire SFX yB lire lûmes/n'q'l't' lire SFX yB lire lûtes/n'q'l'm' lire SFX yB lire lurent/n'q'l'm't's' lire SFX yB lire lirai/n'q'j'l'm't' lire SFX yB lire liras/n'q'l'm't' lire SFX yB lire lira/n'q'l'm't's' lire SFX yB lire lirons/n'q'l't' lire SFX yB lire lirez/n'q'l'm' lire SFX yB lire liront/n'q'l'm't's' lire SFX yB lire lirais/n'q'j'l'm't' lire SFX yB lire lirait/n'q'l'm't's' lire SFX yB lire lirions/n'q'l't' lire SFX yB lire liriez/n'q'l'm' lire SFX yB lire liraient/n'q'l'm't's' lire SFX yB lire lise/n'q'j'l'm't's' lire SFX yB lire lises/n'l'm't' lire SFX yB lire lusse/n'q'j'l'm't' lire SFX yB lire lusses/n'q'l'm't' lire SFX yB lire lût/n'q'l'm't's' lire SFX yB lire lussions/n'q'l't' lire SFX yB lire lussiez/n'q'l'm' lire SFX yB lire lussent/n'q'l'm't's' lire SFX yB lire lis/n'l'm' lire SFX yB lire lisons/n'l' lire SFX yB lire lisez/n'l'm' lire SFX yC N 40 SFX yC ire isant dire SFX yC ire it dire SFX yC ire its dire SFX yC ire ite dire SFX yC ire ites dire SFX yC ire is dire SFX yC ire it dire SFX yC ire isons dire SFX yC ire ites dire SFX yC ire isent dire SFX yC ire isais dire SFX yC ire isait dire SFX yC ire isions dire SFX yC ire isiez dire SFX yC ire isaient dire SFX yC ire îmes dire SFX yC ire îtes dire SFX yC ire irent dire SFX yC ire irai dire SFX yC ire iras dire SFX yC ire ira dire SFX yC ire irons dire SFX yC ire irez dire SFX yC ire iront dire SFX yC ire irais dire SFX yC ire irait dire SFX yC ire irions dire SFX yC ire iriez dire SFX yC ire iraient dire SFX yC ire ise dire SFX yC ire ises dire SFX yC ire isse dire SFX yC ire isses dire SFX yC ire ît dire SFX yC ire issions dire SFX yC ire issiez dire SFX yC ire issent dire SFX yC ire is dire SFX yC ire isons dire SFX yC ire ites dire SFX yD Y 41 SFX yD dire dire/n'q'd'l'm't's' dire SFX yD dire disant/n'q'l'm't's' dire SFX yD dire dit/L'D'Q' dire SFX yD dire dits/D'Q' dire SFX yD dire dite/L'D'Q' dire SFX yD dire dites/D'Q' dire SFX yD dire dis/n'q'j'l'm't' dire SFX yD dire dit/n'q'l'm't's' dire SFX yD dire disons/n'q'l't' dire SFX yD dire disez/n'q'l'm' dire SFX yD dire disent/n'q'l'm't's' dire SFX yD dire disais/n'q'j'l'm't' dire SFX yD dire disait/n'q'l'm't's' dire SFX yD dire disions/n'q'l't' dire SFX yD dire disiez/n'q'l'm' dire SFX yD dire disaient/n'q'l'm't's' dire SFX yD dire dîmes/n'q'l't' dire SFX yD dire dîtes/n'q'l'm' dire SFX yD dire dirent/n'q'l'm't's' dire SFX yD dire dirai/n'q'j'l'm't' dire SFX yD dire diras/n'q'l'm't' dire SFX yD dire dira/n'q'l'm't's' dire SFX yD dire dirons/n'q'l't' dire SFX yD dire direz/n'q'l'm' dire SFX yD dire diront/n'q'l'm't's' dire SFX yD dire dirais/n'q'j'l'm't' dire SFX yD dire dirait/n'q'l'm't's' dire SFX yD dire dirions/n'q'l't' dire SFX yD dire diriez/n'q'l'm' dire SFX yD dire diraient/n'q'l'm't's' dire SFX yD dire dise/n'q'j'l'm't's' dire SFX yD dire dises/n'l'm't' dire SFX yD dire disse/n'q'j'l'm't' dire SFX yD dire disses/n'q'l'm't' dire SFX yD dire dît/n'q'l'm't's' dire SFX yD dire dissions/n'q'l't' dire SFX yD dire dissiez/n'q'l'm' dire SFX yD dire dissent/n'q'l'm't's' dire SFX yD dire dis/n'l'm't' dire SFX yD dire disons/n'l' dire SFX yD dire disez/n'l'm' dire SFX yE N 37 SFX yE édire édisant édire SFX yE édire édit édire SFX yE édire édis édire SFX yE édire édit édire SFX yE édire édisons édire SFX yE édire édisez édire SFX yE édire édisent édire SFX yE édire édisais édire SFX yE édire édisait édire SFX yE édire édisions édire SFX yE édire édisiez édire SFX yE édire édisaient édire SFX yE édire édîmes édire SFX yE édire édîtes édire SFX yE édire édirent édire SFX yE édire édirai édire SFX yE édire édiras édire SFX yE édire édira édire SFX yE édire édirons édire SFX yE édire édirez édire SFX yE édire édiront édire SFX yE édire édirais édire SFX yE édire édirait édire SFX yE édire édirions édire SFX yE édire édiriez édire SFX yE édire édiraient édire SFX yE édire édise édire SFX yE édire édises édire SFX yE édire édisse édire SFX yE édire édisses édire SFX yE édire édît édire SFX yE édire édissions édire SFX yE édire édissiez édire SFX yE édire édissent édire SFX yE édire édis édire SFX yE édire édisons édire SFX yE édire édisez édire SFX yF N 36 SFX yF audire audissant udire SFX yF audire audit udire SFX yF audire audits udire SFX yF audire audite udire SFX yF audire audites udire SFX yF audire audis udire SFX yF audire audit udire SFX yF audire audissons udire SFX yF audire audissez udire SFX yF audire audissent udire SFX yF audire audissais udire SFX yF audire audissait udire SFX yF audire audissions udire SFX yF audire audissiez udire SFX yF audire audissaient udire SFX yF audire audîmes udire SFX yF audire audîtes udire SFX yF audire audirent udire SFX yF audire audirai udire SFX yF audire audiras udire SFX yF audire audira udire SFX yF audire audirons udire SFX yF audire audirez udire SFX yF audire audiront udire SFX yF audire audirais udire SFX yF audire audirait udire SFX yF audire audirions udire SFX yF audire audiriez udire SFX yF audire audiraient udire SFX yF audire audisse udire SFX yF audire audisses udire SFX yF audire audisse udire SFX yF audire audît udire SFX yF audire audis udire SFX yF audire audissons udire SFX yF audire audissez udire SFX yG Y 38 SFX yG dire dire/m't's' dire SFX yG dire disant/m't's' dire SFX yG dire dit dire SFX yG dire dis/m't' dire SFX yG dire dit/s' dire SFX yG dire disons dire SFX yG dire disez dire SFX yG dire disent/s' dire SFX yG dire disais/m't' dire SFX yG dire disait/s' dire SFX yG dire disions dire SFX yG dire disiez dire SFX yG dire disaient/s' dire SFX yG dire dîmes dire SFX yG dire dîtes dire SFX yG dire dirent/s' dire SFX yG dire dirai/m' dire SFX yG dire diras/t' dire SFX yG dire dira/s' dire SFX yG dire dirons dire SFX yG dire direz dire SFX yG dire diront/s' dire SFX yG dire dirais/m't' dire SFX yG dire dirait/s' dire SFX yG dire dirions dire SFX yG dire diriez dire SFX yG dire diraient/s' dire SFX yG dire dise/m's' dire SFX yG dire dises/t' dire SFX yG dire disse/m' dire SFX yG dire disses/t' dire SFX yG dire dît/s' dire SFX yG dire dissions dire SFX yG dire dissiez dire SFX yG dire dissent/s' dire SFX yG dire dis/t' dire SFX yG dire disons dire SFX yG dire disez dire SFX yJ N 7 SFX yJ ruire ruissant uire SFX yJ ruire rui uire SFX yJ ruire ruit uire SFX yJ ruire ruissent uire SFX yJ ruire ruissait uire SFX yJ ruire ruissaient uire SFX yJ ruire ruisse uire SFX yK N 4 SFX yK bduire bduit uire SFX yK bduire bduits uire SFX yK bduire bduite uire SFX yK bduire bduites uire SFX yL Y 43 SFX yL uire uire/n'q'd'l'm't's' uire SFX yL uire uisant/n'q'l'm't's' uire SFX yL uire uit/L'D'Q' uire SFX yL uire uits/D'Q' uire SFX yL uire uite/L'D'Q' uire SFX yL uire uites/D'Q' uire SFX yL uire uis/n'q'j'l'm't' uire SFX yL uire uit/n'q'l'm't's' uire SFX yL uire uisons/n'q'l't' uire SFX yL uire uisez/n'q'l'm' uire SFX yL uire uisent/n'q'l'm't's' uire SFX yL uire uisais/n'q'j'l'm't' uire SFX yL uire uisait/n'q'l'm't's' uire SFX yL uire uisions/n'q'l't' uire SFX yL uire uisiez/n'q'l'm' uire SFX yL uire uisaient/n'q'l'm't's' uire SFX yL uire uisis/n'q'j'l'm't' uire SFX yL uire uisit/n'q'l'm't's' uire SFX yL uire uisîmes/n'q'l't' uire SFX yL uire uisîtes/n'q'l'm' uire SFX yL uire uisirent/n'q'l'm't's' uire SFX yL uire uirai/n'q'j'l't' uire SFX yL uire uiras/n'q'l'm' uire SFX yL uire uira/n'q'l'm't's' uire SFX yL uire uirons/n'q'l't' uire SFX yL uire uirez/n'q'l'm' uire SFX yL uire uiront/n'q'l'm't's' uire SFX yL uire uirais/n'q'j'l'm't' uire SFX yL uire uirait/n'q'l'm't's' uire SFX yL uire uirions/n'q'l't' uire SFX yL uire uiriez/n'q'l'm' uire SFX yL uire uiraient/n'q'l'm't's' uire SFX yL uire uise/n'q'j'l'm't's' uire SFX yL uire uises/n'l'm' uire SFX yL uire uisisse/n'q'j'l't' uire SFX yL uire uisisses/n'q'l'm' uire SFX yL uire uisît/n'q'l'm't's' uire SFX yL uire uisissions/n'q'l't' uire SFX yL uire uisissiez/n'q'l'm' uire SFX yL uire uisissent/n'q'l'm't's' uire SFX yL uire uis/n'l'm' uire SFX yL uire uisons/n'l' uire SFX yL uire uisez/n'l'm' uire SFX yM Y 43 SFX yM uire uire/n'q'd'l'm't's' uire SFX yM uire uisant/n'q'l'm't's' uire SFX yM uire uit/L'D'Q' uire SFX yM uire uits/D'Q' uire SFX yM uire uite/L'D'Q' uire SFX yM uire uites/D'Q' uire SFX yM uire uis/n'q'j'l'm't' uire SFX yM uire uit/n'q'l'm't's' uire SFX yM uire uisons/n'q'l't' uire SFX yM uire uisez/n'q'l'm' uire SFX yM uire uisent/n'q'l'm't's' uire SFX yM uire uisais/n'q'j'l'm't' uire SFX yM uire uisait/n'q'l'm't's' uire SFX yM uire uisions/n'q'l't' uire SFX yM uire uisiez/n'q'l'm' uire SFX yM uire uisaient/n'q'l'm't's' uire SFX yM uire uisis/n'q'j'l'm't' uire SFX yM uire uisit/n'q'l'm't's' uire SFX yM uire uisîmes/n'q'l't' uire SFX yM uire uisîtes/n'q'l'm' uire SFX yM uire uisirent/n'q'l'm't's' uire SFX yM uire uirai/n'q'j'l'm't' uire SFX yM uire uiras/n'q'l'm't' uire SFX yM uire uira/n'q'l'm't's' uire SFX yM uire uirons/n'q'l't' uire SFX yM uire uirez/n'q'l'm' uire SFX yM uire uiront/n'q'l'm't's' uire SFX yM uire uirais/n'q'j'l'm't' uire SFX yM uire uirait/n'q'l'm't's' uire SFX yM uire uirions/n'q'l't' uire SFX yM uire uiriez/n'q'l'm' uire SFX yM uire uiraient/n'q'l'm't's' uire SFX yM uire uise/n'q'j'l'm't's' uire SFX yM uire uises/n'l'm't' uire SFX yM uire uisisse/n'q'j'l'm't' uire SFX yM uire uisisses/n'q'l'm't' uire SFX yM uire uisît/n'q'l'm't's' uire SFX yM uire uisissions/n'q'l't' uire SFX yM uire uisissiez/n'q'l'm' uire SFX yM uire uisissent/n'q'l'm't's' uire SFX yM uire uis/n'l'm't' uire SFX yM uire uisons/n'l' uire SFX yM uire uisez/n'l'm' uire SFX yN Y 33 SFX yN truire truire/s' uire SFX yN truire truisant/s' uire SFX yN truire truit uire SFX yN truire truits uire SFX yN truire truite uire SFX yN truire truites uire SFX yN truire truit/s' uire SFX yN truire truisons uire SFX yN truire truisez uire SFX yN truire truisent/s' uire SFX yN truire truisait/s' uire SFX yN truire truisions uire SFX yN truire truisiez uire SFX yN truire truisaient/s' uire SFX yN truire truisit/s' uire SFX yN truire truisîmes uire SFX yN truire truisîtes uire SFX yN truire truisirent/s' uire SFX yN truire truira/s' uire SFX yN truire truirons uire SFX yN truire truirez uire SFX yN truire truiront/s' uire SFX yN truire truirait/s' uire SFX yN truire truirions uire SFX yN truire truiriez uire SFX yN truire truiraient/s' uire SFX yN truire truise/s' uire SFX yN truire truisît/s' uire SFX yN truire truisissions uire SFX yN truire truisissiez uire SFX yN truire truisissent/s' uire SFX yN truire truisons-nous uire SFX yN truire truisez-vous uire SFX yO Y 43 SFX yO détruire détruire/m't's' détruire SFX yO détruire détruisant/m't's' détruire SFX yO détruire détruit détruire SFX yO détruire détruits détruire SFX yO détruire détruite détruire SFX yO détruire détruites détruire SFX yO détruire détruis/m't' détruire SFX yO détruire détruit/s' détruire SFX yO détruire détruisons détruire SFX yO détruire détruisez détruire SFX yO détruire détruisent/s' détruire SFX yO détruire détruisais/m't' détruire SFX yO détruire détruisait/s' détruire SFX yO détruire détruisions détruire SFX yO détruire détruisiez détruire SFX yO détruire détruisaient/s' détruire SFX yO détruire détruisis/m't' détruire SFX yO détruire détruisit/s' détruire SFX yO détruire détruisîmes détruire SFX yO détruire détruisîtes détruire SFX yO détruire détruisirent/s' détruire SFX yO détruire détruirai/m' détruire SFX yO détruire détruiras/t' détruire SFX yO détruire détruira/s' détruire SFX yO détruire détruirons détruire SFX yO détruire détruirez détruire SFX yO détruire détruiront/s' détruire SFX yO détruire détruirais/m't' détruire SFX yO détruire détruirait/s' détruire SFX yO détruire détruirions détruire SFX yO détruire détruiriez détruire SFX yO détruire détruiraient/s' détruire SFX yO détruire détruise/m's' détruire SFX yO détruire détruises/t' détruire SFX yO détruire détruisisse/m' détruire SFX yO détruire détruisisses/t' détruire SFX yO détruire détruisît/s' détruire SFX yO détruire détruisissions détruire SFX yO détruire détruisissiez détruire SFX yO détruire détruisissent/s' détruire SFX yO détruire détruis/t' détruire SFX yO détruire détruisons détruire SFX yO détruire détruisez détruire SFX yU N 39 SFX yU uire uisant uire SFX yU uire ui uire SFX yU uire uis uire SFX yU uire uit uire SFX yU uire uisons uire SFX yU uire uisez uire SFX yU uire uisent uire SFX yU uire uisais uire SFX yU uire uisait uire SFX yU uire uisions uire SFX yU uire uisiez uire SFX yU uire uisaient uire SFX yU uire uisis uire SFX yU uire uisit uire SFX yU uire uisîmes uire SFX yU uire uisîtes uire SFX yU uire uisirent uire SFX yU uire uirai uire SFX yU uire uiras uire SFX yU uire uira uire SFX yU uire uirons uire SFX yU uire uirez uire SFX yU uire uiront uire SFX yU uire uirais uire SFX yU uire uirait uire SFX yU uire uirions uire SFX yU uire uiriez uire SFX yU uire uiraient uire SFX yU uire uise uire SFX yU uire uises uire SFX yU uire uisisse uire SFX yU uire uisisses uire SFX yU uire uisît uire SFX yU uire uisissions uire SFX yU uire uisissiez uire SFX yU uire uisissent uire SFX yU uire uis uire SFX yU uire uisons uire SFX yU uire uisez uire SFX yV N 44 SFX yV ire isant ire SFX yV ire it nfire SFX yV ire its nfire SFX yV ire ite nfire SFX yV ire ites nfire SFX yV ire is cire SFX yV ire ise cire SFX yV ire ises cire SFX yV ire i ffire SFX yV ire is ire SFX yV ire it ire SFX yV ire isons ire SFX yV ire isez ire SFX yV ire isent ire SFX yV ire isais ire SFX yV ire isait ire SFX yV ire isions ire SFX yV ire isiez ire SFX yV ire isaient ire SFX yV ire îmes ire SFX yV ire îtes ire SFX yV ire irent ire SFX yV ire irai ire SFX yV ire iras ire SFX yV ire ira ire SFX yV ire irons ire SFX yV ire irez ire SFX yV ire iront ire SFX yV ire irais ire SFX yV ire irait ire SFX yV ire irions ire SFX yV ire iriez ire SFX yV ire iraient ire SFX yV ire ise ire SFX yV ire ises ire SFX yV ire isse ire SFX yV ire isses ire SFX yV ire ît ire SFX yV ire issions ire SFX yV ire issiez ire SFX yV ire issent ire SFX yV ire is ire SFX yV ire isons ire SFX yV ire isez ire SFX yW N 37 SFX yW ire iant rire SFX yW ire i rire SFX yW ire is rire SFX yW ire it rire SFX yW ire ions rire SFX yW ire iez rire SFX yW ire ient rire SFX yW ire iais rire SFX yW ire iait rire SFX yW ire iions rire SFX yW ire iiez rire SFX yW ire iaient rire SFX yW ire îmes rire SFX yW ire îtes rire SFX yW ire irent rire SFX yW ire irai rire SFX yW ire iras rire SFX yW ire ira rire SFX yW ire irons rire SFX yW ire irez rire SFX yW ire iront rire SFX yW ire irais rire SFX yW ire irait rire SFX yW ire irions rire SFX yW ire iriez rire SFX yW ire iraient rire SFX yW ire ie rire SFX yW ire ies rire SFX yW ire isse rire SFX yW ire isses rire SFX yW ire ît rire SFX yW ire issions rire SFX yW ire issiez rire SFX yW ire issent rire SFX yW ire is rire SFX yW ire ions rire SFX yW ire iez rire SFX yX Y 30 SFX yX nuire nuire/s' nuire SFX yX nuire nuisant/s' nuire SFX yX nuire nui nuire SFX yX nuire nuit/s' nuire SFX yX nuire nuisons nuire SFX yX nuire nuisez nuire SFX yX nuire nuisent/s' nuire SFX yX nuire nuisait/s' nuire SFX yX nuire nuisions nuire SFX yX nuire nuisiez nuire SFX yX nuire nuisaient/s' nuire SFX yX nuire nuisit/s' nuire SFX yX nuire nuisîmes nuire SFX yX nuire nuisîtes nuire SFX yX nuire nuisirent/s' nuire SFX yX nuire nuira/s' nuire SFX yX nuire nuirons nuire SFX yX nuire nuirez nuire SFX yX nuire nuiront/s' nuire SFX yX nuire nuirait/s' nuire SFX yX nuire nuirions nuire SFX yX nuire nuiriez nuire SFX yX nuire nuiraient/s' nuire SFX yX nuire nuise/s' nuire SFX yX nuire nuisît/s' nuire SFX yX nuire nuisissions nuire SFX yX nuire nuisissiez nuire SFX yX nuire nuisissent/s' nuire SFX yX nuire nuisons-nous nuire SFX yX nuire nuisez-vous nuire SFX yY Y 4 SFX yY ccire ccire/n'q'd'l'm't's' occire SFX yY ccire ccis/L'D'Q' occire SFX yY ccire ccise/L'D'Q' occire SFX yY ccire ccises/D'Q' occire SFX yZ N 13 SFX yZ rire risant rire SFX yZ rire rit rire SFX yZ rire rits rire SFX yZ rire rite rire SFX yZ rire rites rire SFX yZ rire ris rire SFX yZ rire rit rire SFX yZ rire rirai rire SFX yZ rire riras rire SFX yZ rire rira rire SFX yZ rire rirais rire SFX yZ rire rirait rire SFX yZ rire ris rire SFX q+ Y 32 SFX q+ enir enu/L'D'Q' enir SFX q+ enir enus/D'Q' enir SFX q+ enir enue/L'D'Q' enir SFX q+ enir enues/D'Q' enir SFX q+ tir ti/L'D'Q' tir SFX q+ tir tis/D'Q' tir SFX q+ tir tie/L'D'Q' tir SFX q+ tir ties/D'Q' tir SFX q+ courir couru/L'D'Q' courir SFX q+ courir courus/D'Q' courir SFX q+ courir courue/L'D'Q' courir SFX q+ courir courues/D'Q' courir SFX q+ ivre écu vivre SFX q+ ivre écus vivre SFX q+ ivre écue vivre SFX q+ ivre écues vivre SFX q+ aire u aire SFX q+ aire us aire SFX q+ aire ue aire SFX q+ aire ues aire SFX q+ dre du dre SFX q+ dre dus dre SFX q+ dre due dre SFX q+ dre dues dre SFX q+ valoir valu .valoir SFX q+ valoir valus .valoir SFX q+ valoir value .valoir SFX q+ valoir values .valoir SFX q+ aître u/L'D'Q' aître SFX q+ aître us/D'Q' aître SFX q+ aître ue/L'D'Q' aître SFX q+ aître ues/D'Q' aître SFX q. Y 8 SFX q. enir enu/q' enir SFX q. tir ti/q' tir SFX q. courir couru/q' courir SFX q. ivre écu vivre SFX q. aire u aire SFX q. dre du dre SFX q. valoir valu/q' .valoir SFX q. aître u/q' aître |
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/fr-moderne.dic version [6619ddfbaf].
more than 10,000 changes
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/fr-reforme1990.aff version [8d6758f52c].
more than 10,000 changes
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/fr-reforme1990.dic version [45464bd750].
more than 10,000 changes
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/fr-toutesvariantes.aff version [2af86dc167].
more than 10,000 changes
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/fr-toutesvariantes.dic version [1f00669699].
more than 10,000 changes
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/frhyph.tex version [c1857b37d2].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 | % frhyph.tex % French hyphenation patterns %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This file is available for free and can used and redistributed % asis for free. Modified versions should have another name. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \message{frhyph.tex - French hyphenation patterns (V2.12) <2002/12/11>} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *BEFORE* using this file *PLEASE* run checksum on it: % % checksum -v frhyph.tex % % to make sure that it hasn't been damaged. % % Then if you notice anything wrong in french hyphenation please report to % % R. Bastian, D. Flipo, B. Gaulle at the email address: % % cesure-l@gutenberg.eu.org % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% checksum = "37208 1458 3078 34821" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%% The most famous good guys who worked hard to obtain something usable. % Jacques Desarmenien, Universite de Strasbourg : % - << how to run TeX in a French environment: hyphenation, fonts, % typography. >> in Tugboat, 5 (1984) 91-102. and TeX85 conference % - << La division par ordinateur des mots francais : % application a TeX >> in TSI vol. 5 No 4, 1986 (C) AFCET- % Gauthier-Villars % Norman Buckle, UQAH (nb; many additions) % Michael Ferguson, INRS-Telecommunications (mjf) June 1988 % Justin Bur, Universite de Montreal (jbb; checked against original list) % all patterns including apostrophe missing from nb list % after that, GUTenberg and specially Daniel Flipo and Bernard Gaulle % did their best effort to improve the list of patterns. % % ----------------------------------------------------------------- % % Adaption of these patterns for % - TeX Version 3.x and MLTeX 3.x (2.x) % and % - all fonts in T1/`Cork' and/or CM/OT1 encoding % by Bernd Raichle 1996/08/28 (using ideas from `ghyph31.tex' % as of 1994-02-13 maintained by Bernd Raichle). % (An adaption for the old MLTeX 2.x exists but can not be % tested in lack of an executable.) % % ----------------------------------------------------------------- % % The LaTeX2e identification of this file is done with the % \ProvidesFile declaration. The group and \expandafter % constructions keep \ProvidesFile undefined if this file % is not used with LaTeX2e. % \begingroup \expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname ProvidesFile\endcsname\relax \else % unfortnately Babel 3.6 destroys standard LaTeX \ProvidesFile command % thus i check if it's still the good one. --bg 97/04/08 \def\PFnormaldef#1{% \begingroup \catcode`\ 10 % \@makeother\/% \@ifnextchar[{\@providesfile{#1}}{\@providesfile{#1}[]}} \ifx\PFnormaldef\ProvidesFile \ProvidesFile{frhyph.tex}[2002/12/11 % French hyphenation patterns v2.12] \fi \fi % % Next we define some commands which are used inside the patterns. % To keep them local, we enclose the rest of the file in a group % (The \patterns command globally changes the hyphenation trie!). % \begingroup % % Make sure that neither quote nor doublequote are active: \catcode`\'=12 \catcode`\"=12 % % % Because ^^e4 is used in the following macros which is read by % TeX 2.x as ^^e or %, the comment character of TeX, some trick % has to be found to avoid this problem. The same is true for % the normally illegal character ^^? in the TeX 2.x code. % Therefore in the code the exclamationmark ! is used instead of % the circumflex ^ and its \catcode is set appropriately % (normally \catcode`\!=12, in the code \catcode`\!=7). % % The following \catcode, \lccode assignments and macro definitions % are defined in such a way that the following \pattern{...} list % can be used for both, (ML)TeX 2.x and (ML)TeX 3.x. % To implement this, distinguish version 2.x and 3.x of TeX: % \ifnum`\@=`\^^40 % true => TeX 3.x % % Assign appropriate \catcode and \lccode values for all % accented characters used in the patterns: \catcode"E0=11 \lccode"E0="E0 % \`a \catcode"E2=11 \lccode"E2="E2 % \^a \catcode"E7=11 \lccode"E7="E7 % \c{c} \catcode"E8=11 \lccode"E8="E8 % \`e \catcode"E9=11 \lccode"E9="E9 % \'e \catcode"EA=11 \lccode"EA="EA % \^e \catcode"EB=11 \lccode"EB="EB % \"e (*unused*) \catcode"EE=11 \lccode"EE="EE % \^{\i} \catcode"EF=11 \lccode"EF="EF % \"{\i} \catcode"F4=11 \lccode"F4="F4 % \^o \catcode"F7=11 \lccode"F7="F7 % \oe{} \catcode"F9=11 \lccode"F9="F9 % \`u (*unused*) \catcode"FB=11 \lccode"FB="FB % \^u \catcode"FC=11 \lccode"FC="FC % \"u (*unused*) \catcode"B8=11 \lccode"B8="B8 % \"y (*unused*) % \catcode`\!=7 % use !!xy instead of ^^xy % % Define the accent macros in such a way that they % expand to single letters in font encoding T1. \def\E{\errmessage{Hyphenation pattern file corrupted}} \def\`#1{\ifx#1a!!e0\else \ifx#1e!!e8\else \E \fi\fi} \def\'#1{\ifx#1e!!e9\else \E \fi} \def\^#1{\ifx#1a!!e2\else \ifx#1e!!ea% \else \ifx#1i!!ee\else \ifx#1o!!f4% \else \ifx#1u!!fb\else \E \fi\fi\fi\fi\fi} \def\"#1{\ifx#1i!!ef\else \ifx#1e!!eb% \else \ifx#1o!!f6\else \E \fi\fi\fi} \def\c#1{\ifx#1c!!e7\else \E \fi} \def\oe{!!f7}% T1 encoded \oe % For \oe which exists in T1 _and_ OT1 encoded fonts but with % different glyph codes, patterns for both glyphs are included. % Thus you can use either T1 encoded fonts, or OT1 encoded fonts % and MLTeX's character substitution definition. \def\n#1{#1} \catcode'33=11 \lccode'33='33 % \oe \def\oeOT{!![}% OT1 encoded \oe %{]} brace hack % \catcode`\!=12 % \else % TeX 2 % \expandafter\ifx\csname starthyph\endcsname\relax % MLTeX 2.x? \message{This is TeX version 2.x without the MLTeX extensions.} \message{I'm sorry, you cannot use these hyphenation patterns.} \message{To process the french hyphenation patterns you need either} \message{TeX version 3.x, MLTeX 3.x, or MLTeX based on TeX 2.x.} \errmessage{I will ignore the hyphenation patterns.} \endgroup \csname fi\endcsname\csname fi\endcsname\endinput \fi % % Untested macros for MLTeX v2.x replaced by the following message: \message{This is MLTeX based on TeX version 2.x. To use these} \message{patterns please get in contact with the maintainers} \message{mentioned in the comment at the top of this file.} \errmessage{I will ignore the hyphenation patterns.} \endgroup \csname fi\endcsname\endinput % \fi % \lccode`\'=`\' % \patterns{ %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%* 2'2 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%a .a4 'a4 .\^a4 '\^a4 ab2h % df-bg 1998/02/07 for abhorrer .ab3r\'ea 'ab3r\'ea ad2h % df-bg 1998/02/07 for adh\`esion & co a1\`e2dre .ae3s4ch 'ae3s4ch 1alcool a2l1algi .amino1a2c 'amino1a2c .ana3s4tr 'ana3s4tr 1a2nesth\'esi .anti1a2 'anti1a2 .anti1e2 'anti1e2 .anti1\'e2 .anti2enne 'anti2enne 'anti1\'e2 .anti1s2 'anti1s2 .apo2s3ta 'apo2s3ta apo2s3tr archi1\'e2pis .as2ta 'as2ta a2s3tro %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%b 1ba 1b\^a .bai2se3main % hyphen disappeared from french 5/2/94 1be 1b\'e 1b\`e 1b\^e 4be. 4bes. 2bent. % mute syllable: tombent (df) 22/02/94 1bi 1b\^i .bi1a2c .bi1a2t % like .tri1a2t for tri-athlon bg 12/27/93 .bi1au .bio1a2 .bi2s1a2 .bi1u2 1b2l 4ble. 4bles. 2blent. % mute syllable: troublent (df) 28/02/94 1bo 1b\^o 1b2r 4bre. 4bres. 2brent. % mute syllable: palabrent (df) 28/02/94 1bu 1b\^u 1by %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%c 1\c{c} 1ca 1c\^a ca3ou3t2 % for caoutchou... added 3/1/94 df-bg 1ce 1c\'e 1c\`e 1c\^e 4ce. 4ces. % words ending with -cent (df) 22/02/94 2cent. ja3cent. ac3cent. \'e3cent. munifi3cent. r\'eti3cent. privatdo3cent. inno3cent. es3cent. acquies4cent. is3cent. immis4cent. % .ch4 1c2h 4ch. 2chb 4che. 4ches. 2chent. % mute syllable: touchent (df) 22/02/94 .ch\`e2vre3feuille % hyphen disappeared from french 5/2/94 2chg ch2l 4chle. 4chles. chlo2r3a2c chlo2r3\'e2t 2chm 2chn 2chp ch2r 4chre. 4chres. 2chs 2cht 2chw 1ci 1c\^i .ci2s1alp 1c2k 4ck. 2ckb 4cke. 4ckes. 2ckent. % mute syllable: stockent (df) 22/02/94 2ckf 2ckg 2ck3h 2ckp 2cks 2ckt 1c2l 4cle. 4cles. 2clent. % mute syllable: encerclent (df) 28/02/94 1co 1c\^o co1acc co1acq co1a2d co1ap co1ar co1assoc co1assur co1au co1ax 1c\oe0 % final zero essential to terminate cs \n{1c\oeOT} % for \oe in OT1 _and_ T1 font encoding co1\'e2 co1ef co1en co1ex .con4 % missing from nb list .cons4 % missing from nb list .contre1s2c .contre3ma\^itre % hyphen disappeared from french 5/2/94 co2nurb .co1o2 .co2o3lie 1c2r 4cre. 4cres. 2crent. % mute syllable: massacrent (df) 28/02/94 1cu 1c\^u 1cy .cul4 % -- as .con4 .cons4 (march 92) %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%d 1d' 1da 1d\^a .dacryo1a2 d1d2h 1de 1d\'e 1d\`e 1d\^e 4de. 4des. % words ending with -dent (df) 22/02/94 2dent. d\'eca3dent. \'e3dent. cci3dent. inci3dent. confi3dent. tri3dent. dissi3dent. chien3dent. .ar3dent. impu3dent. pru3dent. % .d\'e1a2 .d\'e1io .d\'e1o2 .d\'e2s % originaly in JD file %.d\'e2s1a2 removed 09/17/92 because wrong for the % original JD 500 words test .d\'e3s2a3cr .d\'es2a3m % .d\'es2a2mi introduced 09/17/92 bec. i % can't see why d\'esamidonner ran in JD. % Moved to .d\'es2a3m df 12/27/93. .d\'e3s2a3tell .d\'e3s2astr .d\'e3s2c % 1 moved 3 due to .d\'e2s 09/17/92 %.d\'e2s1e2 removed 09/17/92 because wrong for the % original JD 500 words test .d\'e2s1\'e2 .d\'e3s2\'e3gr .d\'e3s2ensib .d\'e3s2ert .d\'e3s2exu %.d\'e2s3h removed 09/17/92 because wrong for the % original JD 500 words test .d\'e2s1i2 .d\'e3s2i3d .d\'e3s2i3gn .d\'e3s2i3li .d\'e3s2i3nen .d\'e3s2invo .d\'e3s2i3r .d\'e3s2ist %.d\'e2s1o2 removed 09/17/92 because wrong for the % original JD 500 words test .d\'e3s2o3d\'e .d\'e2s1\oe0 % final zero essential to terminate cs \n{.d\'e2s1\oeOT} % for \oe in OT1 _and_ T1 font encoding .d\'e3s2o3l .d\'e3s2o3pil .d\'e3s2orm .d\'e3s2orp .d\'e3s2oufr .d\'e3s2p % 1 moved 3 due to .d\'e2s 09/17/92 .d\'e3s2t % 1 moved 3 due to .d\'e2s 09/17/92 .d\'e2s1u2n 3d2hal 3d2houd 1di 1d\^i di2s3cop .di1a2c\'e .di1a2cid .di1ald .di1a2mi .di1a2tom .di1e2n .di2s3h 2dlent. % mute syllable: jodlent (df) 28/02/94 1do 1d\^o 1d2r 4dre. 4dres. 2drent. % mute syllable: engendrent (df) 28/02/94 d1s2 1du 1d\^u 1dy .dy2s3 .dy2s1a2 .dy2s1i2 .dy2s1o2 % missing from nb list .dy2s1u2 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%e .e4 'e4 .\^e4 '\^e4 .\'e4 '\'e4 .\`e4 '\`e4 \'ed2hi % df-bg 1998/02/07 for r\'edhibitoire 1\'e2drie 1\'e2drique 1\'e2lectr 1\'e2l\'ement .en1a2 'en1a2 1\'e2nerg e2n1i2vr .en1o2 'en1o2 \'epi2s3cop \'epi3s4cope e2s3cop .eu2r1a2 'eu2r1a2 eu1s2tat extra1 extra2c extra2i %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%f 1fa 1f\^a 1fe 1f\'e 1f\`e 1f\^e 4fe. 4fes. 2fent. % mute syllable: agrafent chauffent (df) 22/02/94 % 1fi 1f\^i 1f2l 4fle. 4fles. 2flent. % mute syllable: gonflent (df) 28/02/94 1fo 1f\^o 1f2r 4fre. 4fres. 2frent. % mute syllable: balafrent (df) 28/02/94 f1s2 1fu 1f\^u 1fy %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%g 1ga 1g\^a 1ge 1g\'e 1g\`e 1g\^e 4ge. 4ges. % words ending with -gent (df) 22/02/94 2gent. r\'e3gent. entre3gent. indi3gent. dili3gent. intelli3gent. indul3gent. tan3gent. rin3gent. contin3gent. .ar3gent. 'ar3gent. ser3gent. ter3gent. r\'esur3gent. % 1g2ha 1g2he 1g2hi 1g2ho 1g2hy 1gi 1g\^i 1g2l 4gle. 4gles. 2glent. % mute syllable: meuglent (df) 28/02/94 1g2n 'a2g3nat % (df) 16/01/02 .a2g3nat % (df) 16/01/02 a2g3nos % (df) 16/01/02 (pattern dia2g3n deleted) co2g3niti % (df) 16/01/02 'i2g3n\'e % (df) 16/01/02 .i2g3n\'e % (df) 16/01/02 'i2g3ni % (df) 16/01/02 .i2g3ni % (df) 16/01/02 .ma2g3nicide % (df) 16/01/02 .ma2g3nificat % (df) 16/01/02 .ma2g3num % (df) 16/01/02 o2g3nomoni % (df) 16/01/02 o2g3nosi % (df) 16/01/02 .pro2g3nath % (df) 16/01/02 pu2g3nable % (df) 16/01/02 pu2g3nac % (df) 16/01/02 .sta2g3n .syn2g3nath % (df) 16/01/02 wa2g3n 4gne. 4gnes. 2gnent. % mute syllable: accompagnent (df) 28/02/94 1go 1g\^o 1g2r 4gre. 4gres. 2grent. % mute syllable: immigrent (df) 28/02/94 1gu 1g\^u g1s2 4gue. 4gues. % words ending with -guent (df) 22/02/94 2guent. .on3guent. 'on3guent. % 1gy %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%h 1ha 1h\^a 1he 1h\'e 1h\`e 1h\^e h\'emi1\'e h\'emo1p2t 4he. 4hes. 1hi 1h\^i 1ho 1h\^o 1hu 1h\^u 1hy hypera2 hypere2 hyper\'e2 hyperi2 hypero2 hypers2 hype4r1 hyperu2 hypo1a2 hypo1e2 % missing from nb list hypo1\'e2 hypo1i2 hypo1o2 hypo1s2 hypo1u2 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%i .i4 'i4 .\^i4 '\^i4 i1algi i1arthr i1\`e2dre % ill patterns missing from nb list il2l cil3l rcil4l ucil4l vacil4l gil3l hil3l lil3l l3lion mil3l mil4let \'emil4l semil4l rmil4l armil5l capil3l papil3la papil3le papil3li papil3lom pupil3l piril3l thril3l cyril3l ibril3l pusil3l .stil3l distil3l instil3l fritil3l boutil3l vanil3lin vanil3lis vil3l avil4l chevil4l uevil4l uvil4l xil3l % end of ill patterns 1informat % missing from nb list .in1a2 'in1a2 .in2a3nit 'in2a3nit .in2augur 'in2augur .in1e2 'in1e2 .in1\'e2 'in1\'e2 .in2effab % missing from nb list 'in2effab .in2\'e3lucta 'in2\'e3lucta .in2\'e3narra 'in2\'e3narra .in2ept 'in2ept .in2er 'in2er .in2exora % missing from nb list 'in2exora .in1i2 'in1i2 .in2i3miti 'in2i3miti .in2i3q 'in2i3q .in2i3t 'in2i3t .in1o2 'in1o2 .in2o3cul 'in2o3cul .in2ond 'in2ond .in1s2tab 'in1s2tab 'inte4r3 .intera2 'intera2 .intere2 'intere2 .inter\'e2 'inter\'e2 .interi2 'interi2 .intero2 'intero2 .inte4r3 .interu2 'interu2 .inters2 'inters2 .in1u2 'in1u2 .in2uit 'in2uit .in2u3l 'in2u3l io1a2ct i1oxy i1s2tat %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%j 1j 2jk 4je. 4jes. 2jent. % mute syllable: gal\`ejent (df) 22/02/94 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%k 1ka 1k\^a 1ke 1k\'e 1k\`e 1k\^e 4ke. 4kes. 2kent. % mute syllable: jerkent (df) 22/02/94 1k2h 4kh. .kh4 1ki 1k\^i 1ko 1k\^o 1k2r 1ku 1k\^u 1ky %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%l 1la 1l\^a 1l\`a la2w3re 1le 1l\'e 1l\`e 1l\^e 4le. 4les. % words ending with -lent (df) 22/02/94 2lent. .ta3lent. iva3lent. \'equiva4lent. monova3lent. polyva3lent. re3lent. .do3lent. indo3lent. inso3lent. turbu3lent. succu3lent. f\'ecu3lent. trucu3lent. opu3lent. corpu3lent. ru3lent. sporu4lent. % 1li 1l\^i 1lo 1l\^o l1s2t 1lu 1l\^u 1ly %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%m 1ma 1m\^a .ma2c3k .macro1s2c .ma2l1a2dres .ma2l1a2dro .ma2l1ais\'e .ma2l1ap .ma2l1a2v .ma2l1en .ma2l1int .ma2l1oc .ma2l1o2d .ma2r1x % nb (jbb: ?) 1me 1m\'e 1m\`e 1m\^e .m\'e2g1oh .m\'e2sa % missing from nb list .m\'e3san % missing from nb list .m\'e2s1es .m\'e2s1i .m\'e2s1u2s .m\'eta1s2ta 4me. 4mes. % words ending with -ment (df) 22/02/94 \^a2ment. da2ment. fa2ment. amalga2ment. cla2ment. ra2ment. temp\'era3ment. ta2ment. testa3ment. qua2ment. \`e2ment. car\^e2ment. diaphrag2ment. ryth2ment. ai2ment. rai3ment. ab\^i2ment. \'eci2ment. vidi2ment. subli2ment. \'eli2ment. reli2ment. mi2ment. ani2ment. veni2ment. ri2ment. d\'etri3ment. nutri3ment. inti2ment. esti2ment. l2ment. flam2ment. gram2ment. .gem2ment. om2ment. .com3ment. \^o2ment. slalo2ment. chro2ment. to2ment. ar2ment. .sar3ment. er2ment. antifer3ment. .ser3ment. fir2ment. or2ment. as2ment. au2ment. \'ecu2ment. fu2ment. hu2ment. fichu3ment. llu2ment. plu2ment. bou2ment. bru2ment. su2ment. tu2ment. % 1mi 1m\^i .milli1am 1m2n\'emo 1m2n\`es 1m2n\'esi 1mo 1m\^o 1m\oe0 % final zero essential to terminate cs \n{1m\oeOT} % for \oe in OT1 _and_ T1 font encoding .mono1a2 .mono1e2 .mono1\'e2 .mono1i2 .mono1\"i2d\'e .mono1o2 .mono1u2 .mono1s2 mon2t3r\'eal % missing from nb list m1s2 1mu 1m\^u 1my moye2n1\^a2g %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%n 1na 1n\^a 1ne 1n\'e 1n\`e 1n\^e 4ne. 4nes. % words ending with -nent (df) 22/02/94 2nent. % fric-tionnent - syllable muette - bg 27/12/93 r\'ema3nent. imma3nent. perma3nent. .\'emi3nent. pr\'e\'emi3nent. pro\'emi3nent. sur\'emi3nent. immi3nent. conti3nent. perti3nent. absti3nent. % 1ni 1n\^i 1no 1n\^o 1n\oe0 % final zero essential to terminate cs \n{1n\oeOT} % for \oe in OT1 _and_ T1 font encoding .no2n1obs 1nu 1n\^u n3s2at. n3s2ats. n1x 1ny %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%o .o4 'o4 '\^o4 .\^o4 %'\"o2 % mjf % deleted 3/1/94 df-bg o2b3long 1octet % missing from nb list o1d2l o1\`e2dre o1ioni ombud2s3 omni1s2 o1s2tas o1s2tat o1s2t\'ero o1s2tim o1s2tom o1s2trad o1s2tratu o1s2triction .oua1ou 'oua1ou .ovi1s2c 'ovi1s2c oxy1a2 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%p 1pa 1p\^a pal\'eo1\'e2 .pa2n1a2f .pa2n1a2m\'e .pa2n1a2ra .pa2n1is .pa2n1o2ph .pa2n1opt .pa2r1a2che .pa2r1a2ch\`e .para1s2 .pa2r3h\'e 1pe 1p\'e 1p\`e 1p\^e 4pe. 4pes. % words ending with -pent (df) 22/02/94 2pent. re3pent. .ar3pent. 'ar3pent. ser3pent. % .pen2ta % pent- or penta- but never pen-ta bg 12/27/93 per3h p\'e2nul % p\'e2n1ul moved back 09/17/92 to JD def. .pe4r .per1a2 .per1e2 .per1\'e2 .per1i2 .per1o2 .per1u2 p\'e1r2\'e2q % 2r1 moved 09/17/92 to 1r2(it was a typo) .p\'eri1os .p\'eri1s2 .p\'eri2s3s .p\'eri2s3ta .p\'eri1u2 1p2h .ph4 4ph. .phalan3s2t 4phe. 4phes. 2phent. % mute syllable: triomphent (df) 22/02/94 ph2l 4phle. 4phles. 2phn photo1s2 ph2r 4phre. 4phres. 2phs 2pht 3ph2tal\'e 3ph2tis %%%% Here is an example of a pb involving phonetic and etymologic patterns 5/94 %%%% .phyto3ph2 % originaly, but wrong for phy-toph-thora 9/92 %%%% .phy2topha % for -pharmacie but wrong for phyto-biol.. 5/94 1pi 1p\^i 1p2l 4ple. 4ples. 2plent. % mute syllable: accouplent (df) 28/02/94 .pluri1a 1p2n\'e 1p2neu 1po 1p\^o po1astre poly1a2 poly1e2 poly1\'e2 poly1\`e2 poly1i2 poly1o2 poly1s2 poly1u2 .pon2tet % JD hypenated it asis 09/17/92, exception .pos2t3h .pos2t1in .pos2t1o2 .pos2t3r .post1s2 1p2r 4pre. 4pres. 2prent. % mute syllable: empourprent (df) 28/02/94 .pr\'e1a2 .pr\'e2a3la % missing from nb list .pr\'e2au .pr\'e1\'e2 .pr\'e1e2 .pr\'e1i2 .pr\'e1o2 .pr\'e1u2 .pr\'e1s2 .pro1\'e2 .pro1s2c\'e pro2s3tat .prou3d2h 1p2sych .psycho1a2n 1p2t\`er 1p2t\'er 1pu .pud1d2l 1p\^u 1py %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%q 1q 4que. 4ques. % words ending with -quent (df) 22/02/94 2quent. \'e3quent. \'elo3quent. grandilo3quent. %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%r 1ra 1r\^a radio1a2 % missing from nb list 1re 1r\'e 1r\`e 1r\^e .r\'e1a2 .r\'e2a3le .r\'e2a3lis .r\'e2a3lit .r\'e2aux .r\'e1\'e2 .r\'e1e2 .r\'e2el .r\'e2er .r\'e2\`er .r\'e1i2 .r\'e2i3fi .r\'e1o2 .re1s2 .re2s3cap .re2s3cisi % for res-cision 09/17/92 (missing from nb) .re2s3ciso % for res-cisoire 09/17/92(missing from nb) .re2s3cou .re2s3cri .re2s3pect .re2s3pir .re2s3plend .re2s3pons .re2s3quil .re2s3s .re2s3t .re3s4tab .re3s4tag .re3s4tand .re3s4tat .re3s4t\'en .re3s4t\'er .re3s4tim .re3s4tip .re3s4toc .re3s4top .re3s4tr .re4s5trein .re4s5trict .re4s5trin .re3s4tu .re3s4ty .r\'eu2 %.r\'e1u2 % pattern rejected 12/2/92 % (don't hyphenate as r\'e-union nor r\'eu-nion) .r\'e2uss .r\'etro1a2 4re. 4res. % words ending with -rent (df) 22/02/94 2rent. % es-p\`erent - syllable muette - bg 27/12/93 .pa3rent. appa3rent. transpa3rent. \'e3rent. tor3rent. cur3rent. % 1r2h 4rhe. 4rhes. 2r3heur 2r3hydr 1ri 1r\^i 1ro 1r\^o 1ru 1r\^u 1ry %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%s 1sa 1s\^a .sch4 1s2caph 1s2cl\'er 1s2cop 1s2ch e2s3ch i2s3ch\'e i2s3chia i2s3chio 4sch. 4sche. 4sches. 2schs 1se 1s\'e 1s\`e 1s\^e sesqui1a2 4se. 4ses. % words ending with -sent (df) 22/02/94 2sent. % massent - syllable muette - bg 27/12/93 ab3sent. pr\'e3sent. .res3sent. % .seu2le % jbb .sh4 1s2h 4sh. 4she. 4shes. 2shent. % mute syllable: smashent (df) 22/02/94 2shm 2s3hom 2shr 2shs 1si 1s\^i 1s2lav 1s2lov 1so 1s\^o 1s\oe0 % final zero essential to terminate cs \n{1s\oeOT} % for \oe in OT1 _and_ T1 font encoding 1s2patia 1s2perm 1s2por 1s2ph\`er 1s2ph\'er 1s2piel 1s2piros 1s2tandard 1s2tein st\'er\'eo1s2 1s2tigm 1s2tock 1s2tomos 1s2troph 1s2tructu 1s2tyle 1su 1s\^u .su2b1a2 .su3b2alt .su2b1\'e2 .su3b2\'e3r .su2b1in .su2b3limin .su2b3lin .su2b3lu sub1s2 .su2b1ur supero2 supe4r1 supers2 .su2r1a2 su3r2ah .su3r2a3t .su2r1e2 .su3r2eau .su3r2ell .su3r2et .su2r1\'e2 .su2r3h .su2r1i2m .su2r1inf .su2r1int .su2r1of .su2r1ox 1sy %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%t 1ta 1t\^a 1t\`a tachy1a2 tchin3t2 1te 1t\'e 1t\`e 1t\^e t\'el\'e1e2 t\'el\'e1i2 t\'el\'e1o2b t\'el\'e1o2p t\'el\'e1s2 4te. 4tes. % words ending with -tent (df) 22/02/94 2tent. % mentent - syllable muette - bg 27/12/93 .la3tent. .pa3tent. comp\'e3tent. \'eni3tent. m\'econ3tent. omnipo3tent. ventripo3tent. \'equipo3tent. impo3tent. mit3tent. % .th4 1t2h 4th. 4the. 4thes. thermo1s2 2t3heur 2thl % th2l was wrong for ...ath-lon (jd said 2thl) df 12/27/93 2thm 2thn th2r 4thre. 4thres. 2ths 1ti 1t\^i 1to 1t\^o 1t2r tran2s1a2 tran3s2act tran3s2ats tran2s3h tran2s1o2 tran2s3p tran2s1u2 4tre. 4tres. 2trent. % mute syllable: infiltrent (df) 28/02/94 .tri1a2c .tri1a2n .tri1a2t .tri1o2n t1t2l 1tu 1t\^u tung2s3 1ty %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%u .u4 'u4 .\^u4 '\^u4 uni1o2v uni1a2x u2s3tr %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%v 1va 1v\^a 1ve 1v\'e 1v\`e 1v\^e v\'elo1s2ki 4ve. 4ves. % words ending with -vent (df) 22/02/94 2vent. conni3vent. .sou3vent. % 1vi 1v\^i 1vo 1v\^o vol2t1amp 1v2r 4vre. 4vres. 2vrent. % mute syllable: recouvrent (df) 28/02/94 1vu 1v\^u 1vy %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%w 1wa 1we 4we. 4wes. 2went. % mute syllable: interviewent (df) 22/02/94 1wi 1wo 1wu 1w2r %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%x 2xent. % mute syllable: malaxent (df) 22/02/94 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%y .y4 'y4 y1asth y1s2tom y1algi %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%z 1za 1ze 1z\'e 1z\`e 4ze. 4zes. % words ending with -zent (df) 22/02/94 2zent. privatdo3zent. % 1zi 1zo 1zu 1zy } \endgroup \endinput %% %% End of file `frhyph.tex'. |
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/hyph-fr.tex version [394d4d9505].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 | % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: frhyph.tex <2006-10-20> % Author: R. Bastian, D. Flipo, B. Gaulle <cesure-l at gutenberg.eu.org> % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % % French hyphenation patterns %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This file is available for free and can used and redistributed % asis for free. Modified versions should have another name. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \message{frhyph.tex - French hyphenation patterns (V2.12) <2002/12/11>} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *BEFORE* using this file *PLEASE* run checksum on it: % % checksum -v frhyph.tex % % to make sure that it hasn't been damaged. % % Then if you notice anything wrong in french hyphenation please report to % % R. Bastian, D. Flipo, B. Gaulle at the email address: % % cesure-l@gutenberg.eu.org % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% checksum = "37208 1458 3078 34821" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%% The most famous good guys who worked hard to obtain something usable. % Jacques Desarmenien, Universite de Strasbourg : % - << how to run TeX in a French environment: hyphenation, fonts, % typography. >> in Tugboat, 5 (1984) 91-102. and TeX85 conference % - << La division par ordinateur des mots francais : % application a TeX >> in TSI vol. 5 No 4, 1986 (C) AFCET- % Gauthier-Villars % Norman Buckle, UQAH (nb; many additions) % Michael Ferguson, INRS-Telecommunications (mjf) June 1988 % Justin Bur, Universite de Montreal (jbb; checked against original list) % all patterns including apostrophe missing from nb list % after that, GUTenberg and specially Daniel Flipo and Bernard Gaulle % did their best effort to improve the list of patterns. % % ----------------------------------------------------------------- % % Adaption of these patterns for % - TeX Version 3.x and MLTeX 3.x (2.x) % and % - all fonts in T1/`Cork' and/or CM/OT1 encoding % by Bernd Raichle 1996/08/28 (using ideas from `ghyph31.tex' % as of 1994-02-13 maintained by Bernd Raichle). % (An adaption for the old MLTeX 2.x exists but can not be % tested in lack of an executable.) % % ----------------------------------------------------------------- % \patterns{ %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%* 2'2 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%a .a4 'a4 .â4 'â4 ab2h % df-bg 1998/02/07 for abhorrer .ab3réa 'ab3réa ad2h % df-bg 1998/02/07 for adhèsion & co a1è2dre .ae3s4ch 'ae3s4ch 1alcool a2l1algi .amino1a2c 'amino1a2c .ana3s4tr 'ana3s4tr 1a2nesthési .anti1a2 'anti1a2 .anti1e2 'anti1e2 .anti1é2 .anti2enne 'anti2enne 'anti1é2 .anti1s2 'anti1s2 .apo2s3ta 'apo2s3ta apo2s3tr archi1é2pis .as2ta 'as2ta a2s3tro %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%b 1ba 1bâ .bai2se3main % hyphen disappeared from french 5/2/94 1be 1bé 1bè 1bê 4be. 4bes. 2bent. % mute syllable: tombent (df) 22/02/94 1bi 1bî .bi1a2c .bi1a2t % like .tri1a2t for tri-athlon bg 12/27/93 .bi1au .bio1a2 .bi2s1a2 .bi1u2 1b2l 4ble. 4bles. 2blent. % mute syllable: troublent (df) 28/02/94 1bo 1bô 1b2r 4bre. 4bres. 2brent. % mute syllable: palabrent (df) 28/02/94 1bu 1bû 1by %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%c 1ç 1ca 1câ ca3ou3t2 % for caoutchou... added 3/1/94 df-bg 1ce 1cé 1cè 1cê 4ce. 4ces. % words ending with -cent (df) 22/02/94 2cent. ja3cent. ac3cent. é3cent. munifi3cent. réti3cent. privatdo3cent. inno3cent. es3cent. acquies4cent. is3cent. immis4cent. % .ch4 1c2h 4ch. 2chb 4che. 4ches. 2chent. % mute syllable: touchent (df) 22/02/94 .chè2vre3feuille % hyphen disappeared from french 5/2/94 2chg ch2l 4chle. 4chles. chlo2r3a2c chlo2r3é2t 2chm 2chn 2chp ch2r 4chre. 4chres. 2chs 2cht 2chw 1ci 1cî .ci2s1alp 1c2k 4ck. 2ckb 4cke. 4ckes. 2ckent. % mute syllable: stockent (df) 22/02/94 2ckf 2ckg 2ck3h 2ckp 2cks 2ckt 1c2l 4cle. 4cles. 2clent. % mute syllable: encerclent (df) 28/02/94 1co 1cô co1acc co1acq co1a2d co1ap co1ar co1assoc co1assur co1au co1ax 1cœ co1é2 co1ef co1en co1ex .con4 % missing from nb list .cons4 % missing from nb list .contre1s2c .contre3maître % hyphen disappeared from french 5/2/94 co2nurb .co1o2 .co2o3lie 1c2r 4cre. 4cres. 2crent. % mute syllable: massacrent (df) 28/02/94 1cu 1cû 1cy .cul4 % -- as .con4 .cons4 (march 92) %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%d 1d' 1da 1dâ .dacryo1a2 d1d2h 1de 1dé 1dè 1dê 4de. 4des. % words ending with -dent (df) 22/02/94 2dent. déca3dent. é3dent. cci3dent. inci3dent. confi3dent. tri3dent. dissi3dent. chien3dent. .ar3dent. impu3dent. pru3dent. % .dé1a2 .dé1io .dé1o2 .dé2s % originaly in JD file %.dé2s1a2 removed 09/17/92 because wrong for the % original JD 500 words test .dé3s2a3cr .dés2a3m % .dés2a2mi introduced 09/17/92 bec. i % can't see why désamidonner ran in JD. % Moved to .dés2a3m df 12/27/93. .dé3s2a3tell .dé3s2astr .dé3s2c % 1 moved 3 due to .dé2s 09/17/92 %.dé2s1e2 removed 09/17/92 because wrong for the % original JD 500 words test .dé2s1é2 .dé3s2é3gr .dé3s2ensib .dé3s2ert .dé3s2exu %.dé2s3h removed 09/17/92 because wrong for the % original JD 500 words test .dé2s1i2 .dé3s2i3d .dé3s2i3gn .dé3s2i3li .dé3s2i3nen .dé3s2invo .dé3s2i3r .dé3s2ist %.dé2s1o2 removed 09/17/92 because wrong for the % original JD 500 words test .dé3s2o3dé .dé2s1œ .dé3s2o3l .dé3s2o3pil .dé3s2orm .dé3s2orp .dé3s2oufr .dé3s2p % 1 moved 3 due to .dé2s 09/17/92 .dé3s2t % 1 moved 3 due to .dé2s 09/17/92 .dé2s1u2n 3d2hal 3d2houd 1di 1dî di2s3cop .di1a2cé .di1a2cid .di1ald .di1a2mi .di1a2tom .di1e2n .di2s3h 2dlent. % mute syllable: jodlent (df) 28/02/94 1do 1dô 1d2r 4dre. 4dres. 2drent. % mute syllable: engendrent (df) 28/02/94 d1s2 1du 1dû 1dy .dy2s3 .dy2s1a2 .dy2s1i2 .dy2s1o2 % missing from nb list .dy2s1u2 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%e .e4 'e4 .ê4 'ê4 .é4 'é4 .è4 'è4 éd2hi % df-bg 1998/02/07 for rédhibitoire 1é2drie 1é2drique 1é2lectr 1é2lément .en1a2 'en1a2 1é2nerg e2n1i2vr .en1o2 'en1o2 épi2s3cop épi3s4cope e2s3cop .eu2r1a2 'eu2r1a2 eu1s2tat extra1 extra2c extra2i %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%f 1fa 1fâ 1fe 1fé 1fè 1fê 4fe. 4fes. 2fent. % mute syllable: agrafent chauffent (df) 22/02/94 % 1fi 1fî 1f2l 4fle. 4fles. 2flent. % mute syllable: gonflent (df) 28/02/94 1fo 1fô 1f2r 4fre. 4fres. 2frent. % mute syllable: balafrent (df) 28/02/94 f1s2 1fu 1fû 1fy %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%g 1ga 1gâ 1ge 1gé 1gè 1gê 4ge. 4ges. % words ending with -gent (df) 22/02/94 2gent. ré3gent. entre3gent. indi3gent. dili3gent. intelli3gent. indul3gent. tan3gent. rin3gent. contin3gent. .ar3gent. 'ar3gent. ser3gent. ter3gent. résur3gent. % 1g2ha 1g2he 1g2hi 1g2ho 1g2hy 1gi 1gî 1g2l 4gle. 4gles. 2glent. % mute syllable: meuglent (df) 28/02/94 1g2n 'a2g3nat % (df) 16/01/02 .a2g3nat % (df) 16/01/02 a2g3nos % (df) 16/01/02 (pattern dia2g3n deleted) co2g3niti % (df) 16/01/02 'i2g3né % (df) 16/01/02 .i2g3né % (df) 16/01/02 'i2g3ni % (df) 16/01/02 .i2g3ni % (df) 16/01/02 .ma2g3nicide % (df) 16/01/02 .ma2g3nificat % (df) 16/01/02 .ma2g3num % (df) 16/01/02 o2g3nomoni % (df) 16/01/02 o2g3nosi % (df) 16/01/02 .pro2g3nath % (df) 16/01/02 pu2g3nable % (df) 16/01/02 pu2g3nac % (df) 16/01/02 .sta2g3n .syn2g3nath % (df) 16/01/02 wa2g3n 4gne. 4gnes. 2gnent. % mute syllable: accompagnent (df) 28/02/94 1go 1gô 1g2r 4gre. 4gres. 2grent. % mute syllable: immigrent (df) 28/02/94 1gu 1gû g1s2 4gue. 4gues. % words ending with -guent (df) 22/02/94 2guent. .on3guent. 'on3guent. % 1gy %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%h 1ha 1hâ 1he 1hé 1hè 1hê hémi1é hémo1p2t 4he. 4hes. 1hi 1hî 1ho 1hô 1hu 1hû 1hy hypera2 hypere2 hyperé2 hyperi2 hypero2 hypers2 hype4r1 hyperu2 hypo1a2 hypo1e2 % missing from nb list hypo1é2 hypo1i2 hypo1o2 hypo1s2 hypo1u2 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%i .i4 'i4 .î4 'î4 i1algi i1arthr i1è2dre % ill patterns missing from nb list il2l cil3l rcil4l ucil4l vacil4l gil3l hil3l lil3l l3lion mil3l mil4let émil4l semil4l rmil4l armil5l capil3l papil3la papil3le papil3li papil3lom pupil3l piril3l thril3l cyril3l ibril3l pusil3l .stil3l distil3l instil3l fritil3l boutil3l vanil3lin vanil3lis vil3l avil4l chevil4l uevil4l uvil4l xil3l % end of ill patterns 1informat % missing from nb list .in1a2 'in1a2 .in2a3nit 'in2a3nit .in2augur 'in2augur .in1e2 'in1e2 .in1é2 'in1é2 .in2effab % missing from nb list 'in2effab .in2é3lucta 'in2é3lucta .in2é3narra 'in2é3narra .in2ept 'in2ept .in2er 'in2er .in2exora % missing from nb list 'in2exora .in1i2 'in1i2 .in2i3miti 'in2i3miti .in2i3q 'in2i3q .in2i3t 'in2i3t .in1o2 'in1o2 .in2o3cul 'in2o3cul .in2ond 'in2ond .in1s2tab 'in1s2tab 'inte4r3 .intera2 'intera2 .intere2 'intere2 .interé2 'interé2 .interi2 'interi2 .intero2 'intero2 .inte4r3 .interu2 'interu2 .inters2 'inters2 .in1u2 'in1u2 .in2uit 'in2uit .in2u3l 'in2u3l io1a2ct i1oxy i1s2tat %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%j 1j 2jk 4je. 4jes. 2jent. % mute syllable: galèjent (df) 22/02/94 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%k 1ka 1kâ 1ke 1ké 1kè 1kê 4ke. 4kes. 2kent. % mute syllable: jerkent (df) 22/02/94 1k2h 4kh. .kh4 1ki 1kî 1ko 1kô 1k2r 1ku 1kû 1ky %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%l 1la 1lâ 1là la2w3re 1le 1lé 1lè 1lê 4le. 4les. % words ending with -lent (df) 22/02/94 2lent. .ta3lent. iva3lent. équiva4lent. monova3lent. polyva3lent. re3lent. .do3lent. indo3lent. inso3lent. turbu3lent. succu3lent. fécu3lent. trucu3lent. opu3lent. corpu3lent. ru3lent. sporu4lent. % 1li 1lî 1lo 1lô l1s2t 1lu 1lû 1ly %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%m 1ma 1mâ .ma2c3k .macro1s2c .ma2l1a2dres .ma2l1a2dro .ma2l1aisé .ma2l1ap .ma2l1a2v .ma2l1en .ma2l1int .ma2l1oc .ma2l1o2d .ma2r1x % nb (jbb: ?) 1me 1mé 1mè 1mê .mé2g1oh .mé2sa % missing from nb list .mé3san % missing from nb list .mé2s1es .mé2s1i .mé2s1u2s .méta1s2ta 4me. 4mes. % words ending with -ment (df) 22/02/94 â2ment. da2ment. fa2ment. amalga2ment. cla2ment. ra2ment. tempéra3ment. ta2ment. testa3ment. qua2ment. è2ment. carê2ment. diaphrag2ment. ryth2ment. ai2ment. rai3ment. abî2ment. éci2ment. vidi2ment. subli2ment. éli2ment. reli2ment. mi2ment. ani2ment. veni2ment. ri2ment. détri3ment. nutri3ment. inti2ment. esti2ment. l2ment. flam2ment. gram2ment. .gem2ment. om2ment. .com3ment. ô2ment. slalo2ment. chro2ment. to2ment. ar2ment. .sar3ment. er2ment. antifer3ment. .ser3ment. fir2ment. or2ment. as2ment. au2ment. écu2ment. fu2ment. hu2ment. fichu3ment. llu2ment. plu2ment. bou2ment. bru2ment. su2ment. tu2ment. % 1mi 1mî .milli1am 1m2némo 1m2nès 1m2nési 1mo 1mô 1mœ .mono1a2 .mono1e2 .mono1é2 .mono1i2 .mono1ï2dé .mono1o2 .mono1u2 .mono1s2 mon2t3réal % missing from nb list m1s2 1mu 1mû 1my moye2n1â2g %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%n 1na 1nâ 1ne 1né 1nè 1nê 4ne. 4nes. % words ending with -nent (df) 22/02/94 2nent. % fric-tionnent - syllable muette - bg 27/12/93 réma3nent. imma3nent. perma3nent. .émi3nent. préémi3nent. proémi3nent. surémi3nent. immi3nent. conti3nent. perti3nent. absti3nent. % 1ni 1nî 1no 1nô 1nœ .no2n1obs 1nu 1nû n3s2at. n3s2ats. n1x 1ny %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%o .o4 'o4 'ô4 .ô4 %'\"o2 % mjf % deleted 3/1/94 df-bg o2b3long 1octet % missing from nb list o1d2l o1è2dre o1ioni ombud2s3 omni1s2 o1s2tas o1s2tat o1s2téro o1s2tim o1s2tom o1s2trad o1s2tratu o1s2triction .oua1ou 'oua1ou .ovi1s2c 'ovi1s2c oxy1a2 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%p 1pa 1pâ paléo1é2 .pa2n1a2f .pa2n1a2mé .pa2n1a2ra .pa2n1is .pa2n1o2ph .pa2n1opt .pa2r1a2che .pa2r1a2chè .para1s2 .pa2r3hé 1pe 1pé 1pè 1pê 4pe. 4pes. % words ending with -pent (df) 22/02/94 2pent. re3pent. .ar3pent. 'ar3pent. ser3pent. % .pen2ta % pent- or penta- but never pen-ta bg 12/27/93 per3h pé2nul % pé2n1ul moved back 09/17/92 to JD def. .pe4r .per1a2 .per1e2 .per1é2 .per1i2 .per1o2 .per1u2 pé1r2é2q % 2r1 moved 09/17/92 to 1r2(it was a typo) .péri1os .péri1s2 .péri2s3s .péri2s3ta .péri1u2 1p2h .ph4 4ph. .phalan3s2t 4phe. 4phes. 2phent. % mute syllable: triomphent (df) 22/02/94 ph2l 4phle. 4phles. 2phn photo1s2 ph2r 4phre. 4phres. 2phs 2pht 3ph2talé 3ph2tis %%%% Here is an example of a pb involving phonetic and etymologic patterns 5/94 %%%% .phyto3ph2 % originaly, but wrong for phy-toph-thora 9/92 %%%% .phy2topha % for -pharmacie but wrong for phyto-biol.. 5/94 1pi 1pî 1p2l 4ple. 4ples. 2plent. % mute syllable: accouplent (df) 28/02/94 .pluri1a 1p2né 1p2neu 1po 1pô po1astre poly1a2 poly1e2 poly1é2 poly1è2 poly1i2 poly1o2 poly1s2 poly1u2 .pon2tet % JD hypenated it asis 09/17/92, exception .pos2t3h .pos2t1in .pos2t1o2 .pos2t3r .post1s2 1p2r 4pre. 4pres. 2prent. % mute syllable: empourprent (df) 28/02/94 .pré1a2 .pré2a3la % missing from nb list .pré2au .pré1é2 .pré1e2 .pré1i2 .pré1o2 .pré1u2 .pré1s2 .pro1é2 .pro1s2cé pro2s3tat .prou3d2h 1p2sych .psycho1a2n 1p2tèr 1p2tér 1pu .pud1d2l 1pû 1py %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%q 1q 4que. 4ques. % words ending with -quent (df) 22/02/94 2quent. é3quent. élo3quent. grandilo3quent. %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%r 1ra 1râ radio1a2 % missing from nb list 1re 1ré 1rè 1rê .ré1a2 .ré2a3le .ré2a3lis .ré2a3lit .ré2aux .ré1é2 .ré1e2 .ré2el .ré2er .ré2èr .ré1i2 .ré2i3fi .ré1o2 .re1s2 .re2s3cap .re2s3cisi % for res-cision 09/17/92 (missing from nb) .re2s3ciso % for res-cisoire 09/17/92(missing from nb) .re2s3cou .re2s3cri .re2s3pect .re2s3pir .re2s3plend .re2s3pons .re2s3quil .re2s3s .re2s3t .re3s4tab .re3s4tag .re3s4tand .re3s4tat .re3s4tén .re3s4tér .re3s4tim .re3s4tip .re3s4toc .re3s4top .re3s4tr .re4s5trein .re4s5trict .re4s5trin .re3s4tu .re3s4ty .réu2 %.ré1u2 % pattern rejected 12/2/92 % (don't hyphenate as ré-union nor réu-nion) .ré2uss .rétro1a2 4re. 4res. % words ending with -rent (df) 22/02/94 2rent. % es-pèrent - syllable muette - bg 27/12/93 .pa3rent. appa3rent. transpa3rent. é3rent. tor3rent. cur3rent. % 1r2h 4rhe. 4rhes. 2r3heur 2r3hydr 1ri 1rî 1ro 1rô 1ru 1rû 1ry %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%s 1sa 1sâ .sch4 1s2caph 1s2clér 1s2cop 1s2ch e2s3ch i2s3ché i2s3chia i2s3chio 4sch. 4sche. 4sches. 2schs 1se 1sé 1sè 1sê sesqui1a2 4se. 4ses. % words ending with -sent (df) 22/02/94 2sent. % massent - syllable muette - bg 27/12/93 ab3sent. pré3sent. .res3sent. % .seu2le % jbb .sh4 1s2h 4sh. 4she. 4shes. 2shent. % mute syllable: smashent (df) 22/02/94 2shm 2s3hom 2shr 2shs 1si 1sî 1s2lav 1s2lov 1so 1sô 1sœ 1s2patia 1s2perm 1s2por 1s2phèr 1s2phér 1s2piel 1s2piros 1s2tandard 1s2tein stéréo1s2 1s2tigm 1s2tock 1s2tomos 1s2troph 1s2tructu 1s2tyle 1su 1sû .su2b1a2 .su3b2alt .su2b1é2 .su3b2é3r .su2b1in .su2b3limin .su2b3lin .su2b3lu sub1s2 .su2b1ur supero2 supe4r1 supers2 .su2r1a2 su3r2ah .su3r2a3t .su2r1e2 .su3r2eau .su3r2ell .su3r2et .su2r1é2 .su2r3h .su2r1i2m .su2r1inf .su2r1int .su2r1of .su2r1ox 1sy %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%t 1ta 1tâ 1tà tachy1a2 tchin3t2 1te 1té 1tè 1tê télé1e2 télé1i2 télé1o2b télé1o2p télé1s2 4te. 4tes. % words ending with -tent (df) 22/02/94 2tent. % mentent - syllable muette - bg 27/12/93 .la3tent. .pa3tent. compé3tent. éni3tent. mécon3tent. omnipo3tent. ventripo3tent. équipo3tent. impo3tent. mit3tent. % .th4 1t2h 4th. 4the. 4thes. thermo1s2 2t3heur 2thl % th2l was wrong for ...ath-lon (jd said 2thl) df 12/27/93 2thm 2thn th2r 4thre. 4thres. 2ths 1ti 1tî 1to 1tô 1t2r tran2s1a2 tran3s2act tran3s2ats tran2s3h tran2s1o2 tran2s3p tran2s1u2 4tre. 4tres. 2trent. % mute syllable: infiltrent (df) 28/02/94 .tri1a2c .tri1a2n .tri1a2t .tri1o2n t1t2l 1tu 1tû tung2s3 1ty %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%u .u4 'u4 .û4 'û4 uni1o2v uni1a2x u2s3tr %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%v 1va 1vâ 1ve 1vé 1vè 1vê vélo1s2ki 4ve. 4ves. % words ending with -vent (df) 22/02/94 2vent. conni3vent. .sou3vent. % 1vi 1vî 1vo 1vô vol2t1amp 1v2r 4vre. 4vres. 2vrent. % mute syllable: recouvrent (df) 28/02/94 1vu 1vû 1vy %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%w 1wa 1we 4we. 4wes. 2went. % mute syllable: interviewent (df) 22/02/94 1wi 1wo 1wu 1w2r %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%x 2xent. % mute syllable: malaxent (df) 22/02/94 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%y .y4 'y4 y1asth y1s2tom y1algi %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%z 1za 1ze 1zé 1zè 4ze. 4zes. % words ending with -zent (df) 22/02/94 2zent. privatdo3zent. % 1zi 1zo 1zu 1zy } |
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/hyph_fr.dic version [dcb79e8ef8].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 | UTF-8 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LEFTHYPHENMIN 2 RIGHTHYPHENMIN 2 COMPOUNDLEFTHYPHENMIN 2 COMPOUNDRIGHTHYPHENMIN 2 %%% Do not remove the following line %%% NEXTLEVEL %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2'2 .a4 'a4 .â4 'â4 ab2h a1bî abî1me abî2ment. .a1b2r 'a1b2r .ab1ré 'ab1ré .ab3réa 'ab3réa ab1se ab3sent. abs1ti absti1ne absti3nent. ac1ce ac3cent. ac1q acquies1ce acquies4cent. ad2h aè1d2r a1è2d1re .ae3s4c2h 'ae3s4c2h a1g2n .a1g2n 'a1g2n .ag1na 'ag1na .a2g3nat 'a2g3nat ag1no a2g3nos ai1me ai2ment. a1la a2l1al1gi al1co 1alcool a1ma amal1ga amalga1me amalga2ment. â1me â2ment. .a1mi 'a1mi .ami1no 'ami1no .amino1a2c 'amino1a2c .a1na 'a1na .ana3s4t2r 'ana3s4t2r a1ne anes1t2h anest1hé 1a2nesthé1si a1ni ani1me ani2ment. an1ti .an1ti 'an1ti .anti1a2 'anti1a2 .anti1e2 'anti1e2 .anti1é2 'anti1é2 .anti2en1ne 'anti2en1ne anti1fe antifer1me antifer3ment. .anti1s2 'anti1s2 a1po .a1po 'a1po .apo2s3ta 'apo2s3ta apo2s3t2r ap1pa appa1re appa3rent. ar1c2h arc1hi archié1pi archi1é2pis .ar1de .ar3dent. .ar1ge 'ar1ge .ar3gent. 'ar3gent. ar1me ar2ment. ar1mi armil5l .ar1pe 'ar1pe .ar3pent. 'ar3pent. as1me as2ment. .as2ta 'as2ta as1t2r a2s3t1ro au1me au2ment. a1vi avil4l 1ba .1ba 1bâ .bai1se .baise1ma .bai2se3main 1be 1bé 1bè 1bê 4be. 2bent. 4bes. 1bi .1bi 1bî .bi1a2c .bi1a2t .bi1au .bio1a2 .bi2s1a2 .bi1u2 1b2l b1le 4b4le. 2b2lent. 4b4les. 1bo 1bô bou1me bou2ment. bou1ti boutil3l 1b2r b1re 4b4re. 2b2rent. 4b4res. b1ru bru1me bru2ment. 1bu 1bû 1by 1ç 1ca 1câ ca3ou3t2 ca1pi capil3l ca1rê carê1me carê2ment. c1ci cci1de cci3dent. 1ce 1cé 1cè 1cê 4ce. 2cent. 4ces. 1c2h .1c2h4 4ch. 2chb c1he .c1hè 4c4he. 2chent. 4c4hes. che1vi chevil4l .chè1v2r .chèv1re .chèvre1fe .chèvrefeuil2l .chè2vre3feuil1le 2chg c1hi chien1de chien3dent. ch2l ch1le 4ch4le. 4ch4les. ch1lo chlo1ra chlo2r3a2c chlo1ré chlo2r3é2t 2chm 2chn 2chp ch2r ch1re 4ch4re. 4ch4res. ch1ro chro1me chro2ment. 2chs 2cht 2chw 1ci .1ci 1cî cil3l .ci1sa .ci2s1alp 1c2k 4ck. 2ckb c1ke 4c4ke. 2c2kent. 4c4kes. 2ckf 2ckg 2c1k3h 2ckp 2cks 2ckt 1c2l c1la cla1me cla2ment. c1le 4c4le. 2c2lent. 4c4les. 1co .1co 1cô co1acc co1ac1q co1a2d co1ap co1ar coas1so co1assoc coas1su co1assur co1au co1ax 1cœ co1é2 co1ef co1en co1ex co1g2n cog1ni co2g3ni1ti .com1me .com3ment. com1pé compé1te compé3tent. .con4 con1fi confi1de confi3dent. con1ni conni1ve conni3vent. .cons4 con1ti conti1ne conti3nent. contin1ge contin3gent. .con1t2r .cont1re .contre1ma .contremaî1t2r .cont1re3maît1re .contre1s2c co1nu co2nurb .co1o2 .coo1li .co2o3lie cor1pu corpu1le corpu3lent. 1c2r c1re 4c4re. 2c2rent. 4c4res. 1cu .1cu 1cû .cul4 cur1re cur3rent. 1cy cy1ri cyril3l 1d2'2 1da .1da 1dâ .da1c2r .dac1ry .dacryo1a2 da1me da2ment. d1d2h 1de 1dé .1dé 1dè 1dê 4de. .dé1a2 dé1ca déca1de déca3dent. .dé1io 2dent. .dé1o2 .dé2s 4des. .dé1sa .dé3s2a3c2r .dés2a3m .dé3s2as1t2r .désa1te .dé3s2a3tell .dé3s2c .dé1se .dé2s1é2 .dé3s2é3g2r .désen1si .dé3s2ensib .dé3s2ert .dé3s2exu .dé2s1i2 .dé3s2i3d .dé3s2i3g2n .dé3s2i3li .dési1ne .dé3s2i3nen .dé3s2in1vo .dé3s2i3r .dé3s2ist .dé1so .1dé3s2o3dé .dé2s1œ .dé3s2o3l .déso1pi .dé3s2o3pil .dé3s2orm .dé3s2orp .dé3s2ou1f2r .dé3s2p .dé3s2t .dé1su .dé2s1u2n dé1t2r dét1ri détri1me détri3ment. d1ha 3d2hal d1ho 3d2houd 1di .1di 1dî .di1a2cé .dia1ci .di1a2cid .di1ald .di1a2mi dia1p2h diaph2r diaph1ra diaphrag1me diaphrag2ment. .dia1to .di1a2tom .di1e2n di1li dili1ge dili3gent. dis1co di2s3cop .di2s3h dis1si dissi1de dissi3dent. dis1ti distil3l d1le 2d2lent. 1do .1do 1dô .do1le .do3lent. 1d2r d1re 4d4re. 2d2rent. 4d4res. d1s2 1du 1dû 1dy .1dy .dy2s3 .dy2s1a2 .dy2s1i2 .dy2s1o2 .dy2s1u2 .e4 'e4 .é4 'é4 .è4 'è4 .ê4 'ê4 é1ce é3cent. é1ci éci1me éci2ment. é1cu écu1me écu2ment. é1de é3dent. éd2hi é1d2r éd1ri 1é2drie édri1q 1é2drique é1le é1lé 1é2lec1t2r élé1me 1é2lément é1li éli1me éli2ment. é1lo élo1q élo3quent. è1me è2ment. é1mi .é1mi émil4l .émi1ne .émi3nent. .e1n1a2 'e1n1a2 é1ne 1é2nerg e1ni é1ni éni1te éni3tent. e2n1i2v2r .e1n1o2 'e1n1o2 en1t2r ent1re entre1ge entre3gent. é1pi épis1co épi2s3cop épi3s4co1pe é1q é3quent. équi1po équipo1te équipo3tent. équi1va équiva1le équiva4lent. é1re é3rent. er1me er2ment. es1ce es3cent. e2s3c2h es1co e2s3cop es1ti esti1me esti2ment. .eu2r1a2 'eu2r1a2 eus1ta eu1s2tat ex1t2r ext1ra1 extra2c extra2i 1fa 1fâ fa1me fa2ment. 1fe 1fé 1fè 1fê 4fe. fé1cu fécu1le fécu3lent. 2fent. 4fes. 1fi 1fî fi1c2h fic1hu fichu1me fichu3ment. fir1me fir2ment. 1f2l f1la flam1me flam2ment. f1le 4f4le. 2f2lent. 4f4les. 1fo 1fô 1f2r f1re 4f4re. 2f2rent. 4f4res. f1ri fri1ti fritil3l f1s2 1fu 1fû fu1me fu2ment. 1fy 1ga 1gâ 1ge .1ge 1gé 1gè 1gê 4ge. .gem1me .gem2ment. 2gent. 4ges. 1g2ha 1g2he 1g2hi 1g2ho 1g2hy 1gi 1gî gil3l 1g2l g1le 4g4le. 2g2lent. 4g4les. 1g2n g1ne 4g4ne. 2g2nent. 4g4nes. 1go 1gô 1g2r g1ra gram1me gram2ment. gran1di grandi1lo grandilo1q grandilo3quent. g1re 4g4re. 2g2rent. 4g4res. g1s2 1gu 1gû 4gue. 2guent. 4gues. 1gy 1ha 1hâ 1he 1hé 1hè 1hê 4he. hé1mi hémi1é hé1mo hémo1p2t 4hes. 1hi 1hî hil3l 1ho 1hô 1hu 1hû hu1me hu2ment. 1hy hy1pe hype4r1 hype1ra2 hype1re2 hype1ré2 hype1ri2 hype1ro2 hypers2 hype1ru2 hy1po hypo1a2 hypo1e2 hypo1é2 hypo1i2 hypo1o2 hypo1s2 hypo1u2 .i4 'i4 .î4 'î4 i1al1gi iar1t2h i1arth2r i1b2r ib1ri ibril3l iè1d2r i1è2d1re .i1g2n 'i1g2n .i2g3né 'i2g3né .i2g3ni 'i2g3ni il2l im1ma imma1ne imma3nent. im1mi immi1ne immi3nent. immis1ce immis4cent. im1po impo1te impo3tent. im1pu impu1de impu3dent. .i1n1a2 'i1n1a2 .ina1ni 'ina1ni .in2a3nit 'in2a3nit .inau1gu 'inau1gu .in2augur 'in2augur in1ci inci1de inci3dent. in1di indi1ge indi3gent. in1do indo1le indo3lent. in1du indul1ge indul3gent. .i1n1e2 'i1n1e2 .i1n1é2 'i1n1é2 .inef1fa 'inef1fa .in2effab 'in2effab .iné1lu 'iné1lu .in2é3luc1ta 'in2é3luc1ta .iné1na 'iné1na .in2é3nar1ra 'in2é3nar1ra .in2ept 'in2ept .in2er 'in2er .in2exo1ra 'in2exo1ra in1fo infor1ma 1informat .i1n1i2 'i1n1i2 .ini1mi 'ini1mi .in2i3mi1ti 'in2i3mi1ti .in2i3q 'in2i3q .in2i3t 'in2i3t in1no inno1ce inno3cent. .i1n1o2 'i1n1o2 .ino1cu 'ino1cu .in2o3cul 'in2o3cul .in2ond 'in2ond in1so inso1le inso3lent. .ins1ta 'ins1ta .in1s2tab 'in1s2tab ins1ti instil3l in1te .in1te 'in1te intel1li intelli1ge intelli3gent. .inte4r3 'inte4r3 .inte1ra2 'inte1ra2 .inte1re2 'inte1re2 .inte1ré2 'inte1ré2 .inte1ri2 'inte1ri2 .inte1ro2 'inte1ro2 .inters2 'inters2 .inte1ru2 'inte1ru2 in1ti inti1me inti2ment. .i1n1u2 'i1n1u2 .in2uit 'in2uit .in2u3l 'in2u3l io1a2ct i1oxy is1ce is3cent. i1s2c2h i2s3c1hé isc1hi i2s3chia i2s3chio is1ta i1s2tat i1va iva1le iva3lent. 1j ja1ce ja3cent. 4je. 2jent. 4jes. 2jk 1ka 1kâ 1ke 1ké 1kè 1kê 4ke. 2kent. 4kes. 1k2h .1k2h4 4kh. 1ki 1kî 1ko 1kô 1k2r 1ku 1kû 1ky 1la .1la 1là 1lâ .la1te .la3tent. la1w2r la2w3re 1le 1lé 1lè 1lê 4le. 2lent. 4les. 1li 1lî lil3l l1li l3lion l1lu llu1me llu2ment. l1me l2ment. 1lo 1lô l1s2t 1lu 1lû 1ly 1ma .1ma 1mâ .ma2c3k .ma1c2r .mac1ro .macro1s2c .ma1g2n .mag1ni .magni1ci .ma2g3nici1de .magni1fi .magnifi1ca .ma2g3nificat .mag1nu .ma2g3num .ma1la .mala1d2r .malad1re .ma2l1a2dres .ma2l1a2d1ro .ma2l1ai1sé .ma2l1ap .ma2l1a2v .ma1le .ma2l1en .ma1li .ma2l1int .ma1lo .ma2l1oc .ma2l1o2d .ma2r1x 1me 1mé .1mé 1mè 1mê 4me. mé1co mécon1te mécon3tent. .mé1go .mé2g1oh 4mes. .mé2sa .mé3san .mé1se .mé2s1es .mé2s1i .mé1su .mé2s1u2s .mé1ta .mé1ta1s2ta 1mi .1mi 1mî mil3l .mil3l mil1le mil4let .mil1li .milli1am mi1me mi2ment. mit1te mit3tent. m1né m1nè 1m2né1mo 1m2nès 1m2né1si 1mo .1mo 1mô 1mœ mo1no .mo1no .mono1a2 .mono1e2 .mono1é2 .mono1i2 .mono1ï2dé .mono1o2 .mono1s2 .mono1u2 mono1va monova1le monova3lent. mon1t2r mont1ré mon2t3réal moye1nâ moye2n1â2g m1s2 1mu 1mû mu1ni muni1fi munifi1ce munifi3cent. 1my 1na 1nâ 1ne 1né 1nè 1nê 4ne. 2nent. 4nes. 1ni 1nî 1no .1no 1nô 1nœ .no1no .no2n1obs n1sa n3s2at. n3s2ats. 1nu 1nû nu1t2r nut1ri nutri1me nutri3ment. n1x 1ny .o4 'o4 .ô4 'ô4 o1b2l ob1lo o2b3long oc1te 1octet o1d2l oè1d2r o1è2d1re o1g2n og1no ogno1mo o2g3nomo1ni o2g3no1si o1io1ni om1bu ombud2s3 ô1me ô2ment. om1me om2ment. om1ni omni1po omnipo1te omnipo3tent. omni1s2 .on1gu 'on1gu .on3guent. 'on3guent. o1pu opu1le opu3lent. or1me or2ment. os1ta o1s2tas o1s2tat os1té o1s2té1ro os1ti o1s2tim os1to o1s2tom os1t2r ost1ra o1s2trad o1s2tra1tu ost1ri ostric1ti o1s2triction .oua1ou 'oua1ou .o1vi 'o1vi .ovi1s2c 'ovi1s2c oxy1a2 1pa .1pa 1pâ pa1lé paléo1é2 .pa1na .pa2n1a2f .pa2n1a2mé .pa2n1a2ra .pa1ni .pa2n1is .pa1no .pa2n1o2p2h .pa2n1opt pa1pi papil2l papil3la papil3le papil3li papil1lo papil3lom .pa1ra .para1c2h .pa2r1a2c1he .pa2r1a2c1hè .para1s2 .pa1re .pa3rent. .pa1r2h .pa2r3hé .pa1te .pa3tent. 1pe .1pe 1pé .1pé 1pè 1pê 4pe. 2pent. .pen2ta pé1nu pé2nul .pe4r .pe1r1a2 pé1ré .pe1r1e2 .pe1r1é2 pé1r2é2q pe1r3h .pé1ri .pe1r1i2 .péri1os .péri1s2 .péri2s3s .péri2s3ta .péri1u2 per1ma perma1ne perma3nent. .pe1r1o2 per1ti perti1ne perti3nent. .pe1r1u2 4pes. 1p2h .1p2h4 4ph. .p1ha .pha1la .phalan3s2t p1he 4p4he. 2phent. 4p4hes. ph2l ph1le 4ph4le. 4ph4les. 2phn p1ho pho1to photo1s2 ph2r ph1re 4ph4re. 4ph4res. 2phs 2pht ph1ta 3ph2ta1lé ph1ti 3ph2tis 1pi 1pî pi1ri piril3l 1p2l .1p2l p1le 4p4le. 2p2lent. 4p4les. p1lu .p1lu plu1me plu2ment. .plu1ri .pluri1a p1ne 1p2né 1p2neu 1po .1po 1pô poas1t2r po1ast1re po1ly poly1a2 poly1e2 poly1é2 poly1è2 poly1i2 poly1o2 poly1s2 poly1u2 poly1va polyva1le polyva3lent. .pon1te .pon2tet .pos2t3h .pos1ti .pos2t1in .pos2t1o2 .pos2t3r .post1s2 1p2r .1p2r p1re p1ré .p1ré 4p4re. .pré1a2 .pré2a3la .pré2au .pré1e2 .pré1é2 préé1mi préémi1ne préémi3nent. .pré1i2 2p2rent. .pré1o2 .pré1s2 4p4res. pré1se pré3sent. .pré1u2 p1ri pri1va privat1do privatdo1ce privatdo3cent. privatdo1ze privatdo3zent. p1ro .p1ro .pro1é2 proé1mi proémi1ne proémi3nent. .pro1g2n .prog1na .pro2g3na1t2h .pro1s2cé pros1ta pro2s3tat .prou3d2h p1ru pru1de pru3dent. p1sy .p1sy 1p2sy1c2h .1p2sy1c2h .psyc1ho .psycho1a2n p1té p1tè 1p2tér 1p2tèr 1pu .1pu 1pû .pud1d2l pu1g2n pug1na pugna1b2l pu2g3nab1le pu2g3nac pu1pi pupil3l pu1si pusil3l 1py 1q qua1me qua2ment. 4que. 2quent. 4ques. 1ra 1râ ra1di radio1a2 rai1me rai3ment. ra1me ra2ment. r1ci rcil4l 1re .1re 1ré .1ré 1rè 1rê 4re. .ré1a2 .ré2a3le .réa1li .ré2a3lis .ré2a3lit .ré2aux .ré1e2 .ré1é2 .ré2el .ré2er .ré2èr ré1ge ré3gent. .ré1i2 .ré2i3fi re1le re3lent. re1li reli1me reli2ment. ré1ma réma1ne réma3nent. 2rent. .ré1o2 re1pe re3pent. .re1s2 4res. .res1ca .re2s3cap .res1ci .re2s3ci1si .re2s3ci1so .res1co .re2s3cou .res1c2r .re2s3c1ri .res1pe .re2s3pect .res1pi .re2s3pir .res1p2l .resp1le .re2s3plend .res1po .re2s3pons .res1q .re2s3quil .re2s3s .res1se .res3sent. .re2s3t .res1ta .re3s4tab .re3s4tag .re3s4tand .re3s4tat .res1té .re3s4tén .re3s4tér .res1ti .re3s4tim .re3s4tip .res1to .re3s4toc .re3s4top .re3s4t2r .rest1re .re4s5trein .rest1ri .re4s5trict .re4s5trin .re3s4tu .re3s4ty ré1su résur1ge résur3gent. ré1ti réti1ce réti3cent. .ré1t2r .rét1ro .rétro1a2 .réu2 .ré2uss 1r2h r1he 4r4he. 4r4hes. 2r3heur r1hy 2r3hy1d2r 1ri 1rî ri1me ri2ment. rin1ge rin3gent. r1mi rmil4l 1ro 1rô 1ru 1rû ru1le ru3lent. 1ry ry1t2h ry2thm ryth1me ryth2ment. 1sa .1sa 1sâ .sar1me .sar3ment. s1ca 1s2ca1p2h 1s2c2h .1s2c2h4 4s4ch. sc1he 4s4c4he. 4s4c4hes. 2s2chs s1c2l sc1lé 1s2clér s1co 1s2cop 1se .1se 1sé 1sè 1sê 4se. se1mi semil4l 2sent. ser1ge ser3gent. .ser1me .ser3ment. ser1pe ser3pent. 4ses. ses1q sesqui1a2 .seu2le 1s2h .1s2h4 4sh. s1he 4s4he. 2shent. 4s4hes. 2shm s1ho 2s3hom 2shr 2shs 1si 1sî s1la sla1lo slalo1me slalo2ment. 1s2lav s1lo 1s2lov 1so .1so 1sô 1sœ .sou1ve .sou3vent. s1pa spa1ti 1s2patia s1pe 1s2perm s1p2h sp1hé sp1hè 1s2phér 1s2phèr s1pi 1s2piel spi1ro 1s2piros s1po 1s2por spo1ru sporu1le sporu4lent. s1ta .s1ta .sta2g3n stan1da 1s2tandard s1te s1té 1s2tein sté1ré stéréo1s2 s1ti .s1ti 1s2tigm .stil3l s1to 1s2to1c2k sto1mo 1s2tomos s1t2r st1ro 1s2tro1p2h st1ru 1s2truc1tu s1ty 1s2ty1le 1su .1su 1sû .su2b1a2 .su3b2alt .su2b1é2 .su3b2é3r .su1bi .su2b1in su1b2l .su1b2l sub1li .sub1li subli1me subli2ment. .subli1mi .su2b3limin .su2b3lin .su2b3lu sub1s2 .su1bu .su2b1ur suc1cu succu1le succu3lent. su1me su2ment. su1pe supe4r1 supe1ro2 supers2 su1ra .su2r1a2 su3r2ah .su3r2a3t su1ré .su2r1e2 .su2r1é2 .su3r2eau .su3r2ell suré1mi surémi1ne surémi3nent. .su3r2et .su2r3h .su1ri .su2r1i2m .su2r1inf .su2r1int .su1ro .su2r1of .su2r1ox 1sy .1sy .syn1g2n .syng1na .syn2g3na1t2h 1ta .1ta 1tà 1tâ ta1c2h tac1hy tachy1a2 .ta1le .ta3lent. ta1me ta2ment. tan1ge tan3gent. t1c2h tc1hi tchin3t2 1te 1té 1tè 1tê 4te. té1lé télé1e2 télé1i2 télé1o2b télé1o2p télé1s2 tem1pé tempé1ra tempéra1me tempéra3ment. 2tent. ter1ge ter3gent. 4tes. tes1ta testa1me testa3ment. 1t2h .1t2h4 4th. t1he 4t4he. ther1mo thermo1s2 4t4hes. 2t3heur 2thl 2thm 2thn th2r th1re 4th4re. 4th4res. th1ri thril3l 2ths 1ti 1tî 1to 1tô to1me to2ment. tor1re tor3rent. 1t2r .1t2r t1ra tran2s1a2 tran3s2act tran3s2ats tran2s3h tran2s1o2 tran2s3p trans1pa transpa1re transpa3rent. tran2s1u2 t1re 4t4re. 2t2rent. 4t4res. t1ri .t1ri .tri1a2c .tri1a2n .tri1a2t tri1de tri3dent. .tri1o2n t1ru tru1cu trucu1le trucu3lent. t1t2l 1tu 1tû tu1me tu2ment. tung2s3 tur1bu turbu1le turbu3lent. 1ty .u4 'u4 .û4 'û4 u1ci ucil4l ue1vi uevil4l u1ni uni1a2x uni1o2v u2s3t2r u1vi uvil4l 1va 1vâ va1ci vacil4l va1ni vanil2l vanil1li vanil3lin vanil3lis 1ve 1vé 1vè 1vê 4ve. vé1lo vélo1s2ki ve1ni veni1me veni2ment. 2vent. ven1t2r vent1ri ventri1po ventripo1te ventripo3tent. 4ves. 1vi 1vî vi1di vidi1me vidi2ment. vil3l 1vo 1vô vol1ta vol2t1amp 1v2r v1re 4v4re. 2v2rent. 4v4res. 1vu 1vû 1vy 1wa wa2g3n 1we 4we. 2went. 4wes. 1wi 1wo 1w2r 1wu 2xent. xil3l .y4 'y4 y1al1gi y1as1t2h ys1to y1s2tom 1za 1ze 1zé 1zè 4ze. 2zent. 4zes. 1zi 1zo 1zu 1zy % % Additional patterns start here: % 2’2 ’a4 4a- .á4 'á4 ’á4 4á- .à4 'à4 ’à4 4à- ’â4 4â- .å4 'å4 ’å4 4å- .ä4 'ä4 ’ä4 4ä- .ã4 'ã4 ’ã4 4ã- -5a4 -5á4 -5à4 -5â4 -5å4 -5ä4 -5ã4 abî2ment- ’a1b2r -5a1b2r ’ab1ré -5ab1ré ’ab3réa -5ab3réa ab3sent- absti3nent- ac3cent- acquies4cent- .æ4 'æ4 ’æ4 4æ- -5æ4 ’ae3s4c2h -5ae3s4c2h ’a1g2n -5a1g2n ’ag1na -5ag1na ’a2g3nat -5a2g3nat ai2ment- amalga2ment- â2ment- ’a1mi -5a1mi ’ami1no -5ami1no ’amino1a2c -5amino1a2c ’a1na -5a1na ’ana3s4t2r -5ana3s4t2r ani2ment- ’an1ti -5an1ti ’anti1a2 -5anti1a2 ’anti1e2 ’anti1é2 -5anti1e2 -5anti1é2 ’anti2en1ne -5anti2en1ne antifer3ment- ’anti1s2 -5anti1s2 ’a1po -5a1po ’apo2s3ta -5apo2s3ta appa3rent- -5ar1de -ar3dent- .ar3dent- -5ar3dent. ’ar1ge -5ar1ge -ar3gent- .ar3gent- 'ar3gent- ’ar3gent- ’ar3gent. -5ar3gent. ar2ment- ’ar1pe -5ar1pe -ar3pent- .ar3pent- 'ar3pent- ’ar3pent- ’ar3pent. -5ar3pent. as2ment- ’as2ta -5as2ta au2ment- .b4 'b4 ’b4 4b- -5b4 -5bai1se -5baise1ma -5bai2se3main 4be- 2bent- 4bes- -5bi1a2c -5bi1a2t -5bi1au -5bio1a2 -5bi2s1a2 -5bi1u2 4b4le- 2b2lent- 4b4les- bou2ment- 4b4re- 2b2rent- 4b4res- bru2ment- .c4 'c4 ’c4 4c- .ç4 'ç4 ’ç4 4ç- -5c4 -5ç4 carê2ment- cci3dent- 4ce- 2cent- 4ces- 4ch- 4c4he- -5c1hè 2chent- 4c4hes- -5chè1v2r -5chèv1re -5chèvre1fe -5chèvrefeuil2l -5chè2vre3feuil1le chien3dent- 4ch4le- 4ch4les- 4ch4re- 4ch4res- chro2ment- -5ci1sa -5ci2s1alp 4ck- 4c4ke- 2c2kent- 4c4kes- cla2ment- 4c4le- 2c2lent- 4c4les- -5com1me -com3ment- .com3ment- -5com3ment. compé3tent- -5con4 confi3dent- conni3vent- -5cons4 conti3nent- contin3gent- -5con1t2r -5cont1re -5contre1ma -5contremaî1t2r -5cont1re3maît1re -5contre1s2c -5co1o2 -5coo1li -5co2o3lie corpu3lent- 4c4re- 2c2rent- 4c4res- -5cul4 cur3rent- 1d2’2 .d4 'd4 ’d4 4d- .ð4 'ð4 ’ð4 4ð- -5d4 -5ð4 -5da1c2r -5dac1ry -5dacryo1a2 da2ment- 4de- -5dé1a2 déca3dent- -5dé1io 2dent- -5dé1o2 4des- -5dé2s -5dé1sa -5dé3s2a3c2r -5dés2a3m -5dé3s2as1t2r -5désa1te -5dé3s2a3tell -5dé3s2c -5dé1se -5dé2s1é2 -5dé3s2é3g2r -5désen1si -5dé3s2ensib -5dé3s2ert -5dé3s2exu -5dé2s1i2 -5dé3s2i3d -5dé3s2i3g2n -5dé3s2i3li -5dési1ne -5dé3s2i3nen -5dé3s2in1vo -5dé3s2i3r -5dé3s2ist -5dé1so -5dé2s1œ -5dé3s2o3l -5déso1pi -5dé3s2o3pil -5dé3s2orm -5dé3s2orp -5dé3s2ou1f2r -5dé3s2p -5dé3s2t -5dé1su -5dé2s1u2n détri3ment- -5di1a2cé -5dia1ci -5di1a2cid -5di1ald -5di1a2mi diaphrag2ment- -5dia1to -5di1a2tom -5di1e2n dili3gent- -5di2s3h dissi3dent- 2d2lent- -5do1le -do3lent- .do3lent- -5do3lent. 4d4re- 2d2rent- 4d4res- -5dy2s3 -5dy2s1a2 -5dy2s1i2 -5dy2s1o2 -5dy2s1u2 ’e4 4e- ’é4 4é- ’è4 4è- ’ê4 4ê- .ë4 'ë4 ’ë4 4ë- -5e4 -5é4 -5è4 -5ê4 -5ë4 é3cent- éci2ment- écu2ment- é3dent- éli2ment- élo3quent- è2ment- -5é1mi -5émi1ne -émi3nent- .émi3nent- -5émi3nent. ’e1n1a2 -5e1n1a2 éni3tent- ’e1n1o2 -5e1n1o2 entre3gent- é3quent- équipo3tent- équiva4lent- é3rent- er2ment- es3cent- esti2ment- ’eu2r1a2 -5eu2r1a2 .f4 'f4 ’f4 4f- -5f4 fa2ment- 4fe- fécu3lent- 2fent- 4fes- fichu3ment- fir2ment- flam2ment- 4f4le- 2f2lent- 4f4les- 4f4re- 2f2rent- 4f4res- fu2ment- .g4 'g4 ’g4 4g- -5g4 4ge- -5gem1me -gem2ment- .gem2ment- -5gem2ment. 2gent- 4ges- 4g4le- 2g2lent- 4g4les- 4g4ne- 2g2nent- 4g4nes- gram2ment- grandilo3quent- 4g4re- 2g2rent- 4g4res- 4gue- 2guent- 4gues- .h4 'h4 ’h4 4h- -5h4 4he- 4hes- hu2ment- ’i4 4i- .í4 'í4 ’í4 4í- .ì4 'ì4 ’ì4 4ì- ’î4 4î- .ï4 'ï4 ’ï4 4ï- -5i4 -5í4 -5ì4 -5î4 -5ï4 ’i1g2n -5i1g2n ’i2g3né -5i2g3né ’i2g3ni -5i2g3ni imma3nent- immi3nent- immis4cent- impo3tent- impu3dent- ’i1n1a2 -5i1n1a2 ’ina1ni -5ina1ni ’in2a3nit -5in2a3nit ’inau1gu -5inau1gu ’in2augur -5in2augur inci3dent- indi3gent- indo3lent- indul3gent- ’i1n1e2 ’i1n1é2 -5i1n1e2 -5i1n1é2 ’inef1fa -5inef1fa ’in2effab -5in2effab ’iné1lu -5iné1lu ’in2é3luc1ta -5in2é3luc1ta ’iné1na -5iné1na ’in2é3nar1ra -5in2é3nar1ra ’in2ept -5in2ept ’in2er -5in2er ’in2exo1ra -5in2exo1ra ’i1n1i2 -5i1n1i2 ’ini1mi -5ini1mi ’in2i3mi1ti -5in2i3mi1ti ’in2i3q -5in2i3q ’in2i3t -5in2i3t inno3cent- ’i1n1o2 -5i1n1o2 ’ino1cu -5ino1cu ’in2o3cul -5in2o3cul ’in2ond -5in2ond inso3lent- ’ins1ta -5ins1ta ’in1s2tab -5in1s2tab ’in1te -5in1te intelli3gent- ’inte4r3 -5inte4r3 ’inte1ra2 -5inte1ra2 ’inte1re2 ’inte1ré2 -5inte1re2 -5inte1ré2 ’inte1ri2 -5inte1ri2 ’inte1ro2 -5inte1ro2 ’inters2 -5inters2 ’inte1ru2 -5inte1ru2 inti2ment- ’i1n1u2 -5i1n1u2 ’in2uit -5in2uit ’in2u3l -5in2u3l is3cent- iva3lent- .j4 'j4 ’j4 4j- -5j4 ja3cent- 4je- 2jent- 4jes- .k4 'k4 ’k4 4k- -5k4 4ke- 2kent- 4kes- 4kh- .l4 'l4 ’l4 4l- -5l4 -5la1te -la3tent- .la3tent- -5la3tent. 4le- 2lent- 4les- llu2ment- l2ment- .m4 'm4 ’m4 4m- -5m4 -5ma2c3k -5ma1c2r -5mac1ro -5macro1s2c -5ma1g2n -5mag1ni -5magni1ci -5ma2g3nici1de -5magni1fi -5magnifi1ca -5ma2g3nificat -5mag1nu -5ma2g3num -5ma1la -5mala1d2r -5malad1re -5ma2l1a2dres -5ma2l1a2d1ro -5ma2l1ai1sé -5ma2l1ap -5ma2l1a2v -5ma1le -5ma2l1en -5ma1li -5ma2l1int -5ma1lo -5ma2l1oc -5ma2l1o2d -5ma2r1x 4me- mécon3tent- -5mé1go -5mé2g1oh 4mes- -5mé2sa -5mé3san -5mé1se -5mé2s1es -5mé2s1i -5mé1su -5mé2s1u2s -5mé1ta -5mé1ta1s2ta -5mil3l -5mil1li -5milli1am mi2ment- mit3tent- -5mo1no -5mono1a2 -5mono1e2 -5mono1é2 -5mono1i2 -5mono1ï2dé -5mono1o2 -5mono1s2 -5mono1u2 monova3lent- munifi3cent- .n4 'n4 ’n4 4n- .ñ4 'ñ4 ’ñ4 4ñ- -5n4 -5ñ4 4ne- 2nent- 4nes- -5no1no -5no2n1obs n3s2at- n3s2ats- nutri3ment- ’o4 4o- .ó4 'ó4 ’ó4 4ó- .ò4 'ò4 ’ò4 4ò- ’ô4 4ô- .õ4 'õ4 ’õ4 4õ- .ø4 'ø4 ’ø4 4ø- -5o4 -5ó4 -5ò4 -5ô4 -5õ4 -5ø4 .œ4 'œ4 ’œ4 4œ- -5œ4 ô2ment- om2ment- omnipo3tent- ’on1gu -5on1gu -on3guent- .on3guent- 'on3guent- ’on3guent- ’on3guent. -5on3guent. opu3lent- or2ment- ’oua1ou -5oua1ou ’o1vi -5o1vi ’ovi1s2c -5ovi1s2c .p4 'p4 ’p4 4p- -5p4 -5pa1na -5pa2n1a2f -5pa2n1a2mé -5pa2n1a2ra -5pa1ni -5pa2n1is -5pa1no -5pa2n1o2p2h -5pa2n1opt -5pa1ra -5para1c2h -5pa2r1a2c1he -5pa2r1a2c1hè -5para1s2 -5pa1re -pa3rent- .pa3rent- -5pa3rent. -5pa1r2h -5pa2r3hé -5pa1te -pa3tent- .pa3tent- -5pa3tent. 4pe- 2pent- -5pen2ta -5pe4r -5pe1r1a2 -5pe1r1e2 -5pe1r1é2 -5pé1ri -5pe1r1i2 -5péri1os -5péri1s2 -5péri2s3s -5péri2s3ta -5péri1u2 perma3nent- -5pe1r1o2 perti3nent- -5pe1r1u2 4pes- 4ph- -5p1ha -5pha1la -5phalan3s2t 4p4he- 2phent- 4p4hes- 4ph4le- 4ph4les- 4ph4re- 4ph4res- 4p4le- 2p2lent- 4p4les- -5p1lu plu2ment- -5plu1ri -5pluri1a polyva3lent- -5pon1te -5pon2tet -5pos2t3h -5pos1ti -5pos2t1in -5pos2t1o2 -5pos2t3r -5post1s2 4p4re- -5p1ré -5pré1a2 -5pré2a3la -5pré2au -5pré1e2 -5pré1é2 préémi3nent- -5pré1i2 2p2rent- -5pré1o2 4p4res- -5pré1s2 pré3sent- -5pré1u2 privatdo3cent- privatdo3zent- -5p1ro -5pro1é2 proémi3nent- -5pro1g2n -5prog1na -5pro2g3na1t2h -5pro1s2cé -5prou3d2h pru3dent- -5p1sy -5psyc1ho -5psycho1a2n -5pud1d2l .q4 'q4 ’q4 4q- -5q4 qua2ment- 4que- 2quent- 4ques- .r4 'r4 ’r4 4r- -5r4 rai3ment- ra2ment- 4re- -5ré1a2 -5ré2a3le -5réa1li -5ré2a3lis -5ré2a3lit -5ré2aux -5ré1e2 -5ré1é2 -5ré2el -5ré2er -5ré2èr ré3gent- -5ré1i2 -5ré2i3fi re3lent- reli2ment- réma3nent- 2rent- -5ré1o2 re3pent- 4res- -5re1s2 -5res1ca -5re2s3cap -5res1ci -5re2s3ci1si -5re2s3ci1so -5res1co -5re2s3cou -5res1c2r -5re2s3c1ri -5res1pe -5re2s3pect -5res1pi -5re2s3pir -5res1p2l -5resp1le -5re2s3plend -5res1po -5re2s3pons -5res1q -5re2s3quil -5re2s3s -5res1se -res3sent- .res3sent- -5res3sent. -5re2s3t -5res1ta -5re3s4tab -5re3s4tag -5re3s4tand -5re3s4tat -5res1té -5re3s4tén -5re3s4tér -5res1ti -5re3s4tim -5re3s4tip -5res1to -5re3s4toc -5re3s4top -5re3s4t2r -5rest1re -5re4s5trein -5rest1ri -5re4s5trict -5re4s5trin -5re3s4tu -5re3s4ty résur3gent- réti3cent- -5ré1t2r -5rét1ro -5rétro1a2 -5réu2 -5ré2uss 4r4he- 4r4hes- ri2ment- rin3gent- ru3lent- ryth2ment- .s4 's4 ’s4 4s- .š4 'š4 ’š4 4š- -5s4 -5š4 -5sar1me -sar3ment- .sar3ment- -5sar3ment. 4s4ch- 4s4c4he- 4s4c4hes- 4se- 2sent- ser3gent- -5ser1me -ser3ment- .ser3ment- -5ser3ment. ser3pent- 4ses- -5seu2le 4sh- 4s4he- 2shent- 4s4hes- slalo2ment- -5sou1ve -sou3vent- .sou3vent- -5sou3vent. sporu4lent- -5s1ta -5sta2g3n -5s1ti -5stil3l -5su2b1a2 -5su3b2alt -5su2b1é2 -5su3b2é3r -5su1bi -5su2b1in -5su1b2l -5sub1li subli2ment- -5subli1mi -5su2b3limin -5su2b3lin -5su2b3lu -5su1bu -5su2b1ur succu3lent- su2ment- -5su2r1a2 -5su3r2a3t -5su2r1e2 -5su2r1é2 -5su3r2eau -5su3r2ell surémi3nent- -5su3r2et -5su2r3h -5su1ri -5su2r1i2m -5su2r1inf -5su2r1int -5su1ro -5su2r1of -5su2r1ox -5syn1g2n -5syng1na -5syn2g3na1t2h .t4 't4 ’t4 4t- -5t4 -5ta1le -ta3lent- .ta3lent- -5ta3lent. ta2ment- tan3gent- 4te- tempéra3ment- 2tent- ter3gent- 4tes- testa3ment- 4th- .þ4 'þ4 ’þ4 4þ- -5þ4 4t4he- 4t4hes- 4th4re- 4th4res- to2ment- tor3rent- transpa3rent- 4t4re- 2t2rent- 4t4res- -5t1ri -5tri1a2c -5tri1a2n -5tri1a2t tri3dent- -5tri1o2n trucu3lent- tu2ment- turbu3lent- ’u4 4u- .ú4 'ú4 ’ú4 4ú- .ù4 'ù4 ’ù4 4ù- ’û4 4û- .ü4 'ü4 ’ü4 4ü- -5u4 -5ú4 -5ù4 -5û4 -5ü4 .v4 'v4 ’v4 4v- -5v4 4ve- veni2ment- 2vent- ventripo3tent- 4ves- vidi2ment- 4v4re- 2v2rent- 4v4res- .w4 'w4 ’w4 4w- -5w4 4we- 2went- 4wes- .x4 'x4 ’x4 4x- -5x4 2xent- ’y4 4y- .ý4 'ý4 ’ý4 4ý- .ÿ4 'ÿ4 ’ÿ4 4ÿ- -5y4 -5ý4 -5ÿ4 .z4 'z4 ’z4 4z- .ž4 'ž4 ’ž4 4ž- -5z4 -5ž4 4ze- 2zent- 4zes- |
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/hyph_fr.iso8859-1.dic version [ffb0b705c5].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 | ISO8859-1 2'2 .a4 'a4 .4 '4 ab2h a1b ab1me ab2ment. .a1b2r 'a1b2r .ab1r 'ab1r .ab3ra 'ab3ra ab1se ab3sent. abs1ti absti1ne absti3nent. ac1ce ac3cent. ac1q acquies1ce acquies4cent. ad2h a1d2r a12d1re .ae3s4c2h 'ae3s4c2h a1g2n .a1g2n 'a1g2n .ag1na 'ag1na .a2g3nat 'a2g3nat ag1no a2g3nos ai1me ai2ment. a1la a2l1al1gi al1co 1alcool a1ma amal1ga amalga1me amalga2ment. 1me 2ment. .a1mi 'a1mi .ami1no 'ami1no .amino1a2c 'amino1a2c .a1na 'a1na .ana3s4t2r 'ana3s4t2r a1ne anes1t2h anest1h 1a2nesth1si a1ni ani1me ani2ment. an1ti .an1ti 'an1ti .anti1a2 'anti1a2 .anti1e2 'anti1e2 .anti12 'anti12 .anti2en1ne 'anti2en1ne anti1fe antifer1me antifer3ment. .anti1s2 'anti1s2 a1po .a1po 'a1po .apo2s3ta 'apo2s3ta apo2s3t2r ap1pa appa1re appa3rent. ar1c2h arc1hi archi1pi archi12pis .ar1de .ar3dent. .ar1ge 'ar1ge .ar3gent. 'ar3gent. ar1me ar2ment. ar1mi armil5l .ar1pe 'ar1pe .ar3pent. 'ar3pent. as1me as2ment. .as2ta 'as2ta as1t2r a2s3t1ro au1me au2ment. a1vi avil4l 1ba .1ba 1b .bai1se .baise1ma .bai2se3main 1be 1b 1b 1b 4be. 2bent. 4bes. 1bi .1bi 1b .bi1a2c .bi1a2t .bi1au .bio1a2 .bi2s1a2 .bi1u2 1b2l b1le 4b4le. 2b2lent. 4b4les. 1bo 1b bou1me bou2ment. bou1ti boutil3l 1b2r b1re 4b4re. 2b2rent. 4b4res. b1ru bru1me bru2ment. 1bu 1b 1by 1 1ca 1c ca3ou3t2 ca1pi capil3l ca1r car1me car2ment. c1ci cci1de cci3dent. 1ce 1c 1c 1c 4ce. 2cent. 4ces. 1c2h .1c2h4 4ch. 2chb c1he .c1h 4c4he. 2chent. 4c4hes. che1vi chevil4l .ch1v2r .chv1re .chvre1fe .chvrefeuil2l .ch2vre3feuil1le 2chg c1hi chien1de chien3dent. ch2l ch1le 4ch4le. 4ch4les. ch1lo chlo1ra chlo2r3a2c chlo1r chlo2r32t 2chm 2chn 2chp ch2r ch1re 4ch4re. 4ch4res. ch1ro chro1me chro2ment. 2chs 2cht 2chw 1ci .1ci 1c cil3l .ci1sa .ci2s1alp 1c2k 4ck. 2ckb c1ke 4c4ke. 2c2kent. 4c4kes. 2ckf 2ckg 2c1k3h 2ckp 2cks 2ckt 1c2l c1la cla1me cla2ment. c1le 4c4le. 2c2lent. 4c4les. 1co .1co 1c co1acc co1ac1q co1a2d co1ap co1ar coas1so co1assoc coas1su co1assur co1au co1ax 1c co12 co1ef co1en co1ex co1g2n cog1ni co2g3ni1ti .com1me .com3ment. com1p comp1te comp3tent. .con4 con1fi confi1de confi3dent. con1ni conni1ve conni3vent. .cons4 con1ti conti1ne conti3nent. contin1ge contin3gent. .con1t2r .cont1re .contre1ma .contrema1t2r .cont1re3mat1re .contre1s2c co1nu co2nurb .co1o2 .coo1li .co2o3lie cor1pu corpu1le corpu3lent. 1c2r c1re 4c4re. 2c2rent. 4c4res. 1cu .1cu 1c .cul4 cur1re cur3rent. 1cy cy1ri cyril3l 1d2'2 1da .1da 1d .da1c2r .dac1ry .dacryo1a2 da1me da2ment. d1d2h 1de 1d .1d 1d 1d 4de. .d1a2 d1ca dca1de dca3dent. .d1io 2dent. .d1o2 .d2s 4des. .d1sa .d3s2a3c2r .ds2a3m .d3s2as1t2r .dsa1te .d3s2a3tell .d3s2c .d1se .d2s12 .d3s23g2r .dsen1si .d3s2ensib .d3s2ert .d3s2exu .d2s1i2 .d3s2i3d .d3s2i3g2n .d3s2i3li .dsi1ne .d3s2i3nen .d3s2in1vo .d3s2i3r .d3s2ist .d1so .1d3s2o3d .d2s1 .d3s2o3l .dso1pi .d3s2o3pil .d3s2orm .d3s2orp .d3s2ou1f2r .d3s2p .d3s2t .d1su .d2s1u2n d1t2r dt1ri dtri1me dtri3ment. d1ha 3d2hal d1ho 3d2houd 1di .1di 1d .di1a2c .dia1ci .di1a2cid .di1ald .di1a2mi dia1p2h diaph2r diaph1ra diaphrag1me diaphrag2ment. .dia1to .di1a2tom .di1e2n di1li dili1ge dili3gent. dis1co di2s3cop .di2s3h dis1si dissi1de dissi3dent. dis1ti distil3l d1le 2d2lent. 1do .1do 1d .do1le .do3lent. 1d2r d1re 4d4re. 2d2rent. 4d4res. d1s2 1du 1d 1dy .1dy .dy2s3 .dy2s1a2 .dy2s1i2 .dy2s1o2 .dy2s1u2 .e4 'e4 .4 '4 .4 '4 .4 '4 1ce 3cent. 1ci ci1me ci2ment. 1cu cu1me cu2ment. 1de 3dent. d2hi 1d2r d1ri 12drie dri1q 12drique 1le 1l 12lec1t2r l1me 12lment 1li li1me li2ment. 1lo lo1q lo3quent. 1me 2ment. 1mi .1mi mil4l .mi1ne .mi3nent. .e1n1a2 'e1n1a2 1ne 12nerg e1ni 1ni ni1te ni3tent. e2n1i2v2r .e1n1o2 'e1n1o2 en1t2r ent1re entre1ge entre3gent. 1pi pis1co pi2s3cop pi3s4co1pe 1q 3quent. qui1po quipo1te quipo3tent. qui1va quiva1le quiva4lent. 1re 3rent. er1me er2ment. es1ce es3cent. e2s3c2h es1co e2s3cop es1ti esti1me esti2ment. .eu2r1a2 'eu2r1a2 eus1ta eu1s2tat ex1t2r ext1ra1 extra2c extra2i 1fa 1f fa1me fa2ment. 1fe 1f 1f 1f 4fe. f1cu fcu1le fcu3lent. 2fent. 4fes. 1fi 1f fi1c2h fic1hu fichu1me fichu3ment. fir1me fir2ment. 1f2l f1la flam1me flam2ment. f1le 4f4le. 2f2lent. 4f4les. 1fo 1f 1f2r f1re 4f4re. 2f2rent. 4f4res. f1ri fri1ti fritil3l f1s2 1fu 1f fu1me fu2ment. 1fy 1ga 1g 1ge .1ge 1g 1g 1g 4ge. .gem1me .gem2ment. 2gent. 4ges. 1g2ha 1g2he 1g2hi 1g2ho 1g2hy 1gi 1g gil3l 1g2l g1le 4g4le. 2g2lent. 4g4les. 1g2n g1ne 4g4ne. 2g2nent. 4g4nes. 1go 1g 1g2r g1ra gram1me gram2ment. gran1di grandi1lo grandilo1q grandilo3quent. g1re 4g4re. 2g2rent. 4g4res. g1s2 1gu 1g 4gue. 2guent. 4gues. 1gy 1ha 1h 1he 1h 1h 1h 4he. h1mi hmi1 h1mo hmo1p2t 4hes. 1hi 1h hil3l 1ho 1h 1hu 1h hu1me hu2ment. 1hy hy1pe hype4r1 hype1ra2 hype1re2 hype1r2 hype1ri2 hype1ro2 hypers2 hype1ru2 hy1po hypo1a2 hypo1e2 hypo12 hypo1i2 hypo1o2 hypo1s2 hypo1u2 .i4 'i4 .4 '4 i1al1gi iar1t2h i1arth2r i1b2r ib1ri ibril3l i1d2r i12d1re .i1g2n 'i1g2n .i2g3n 'i2g3n .i2g3ni 'i2g3ni il2l im1ma imma1ne imma3nent. im1mi immi1ne immi3nent. immis1ce immis4cent. im1po impo1te impo3tent. im1pu impu1de impu3dent. .i1n1a2 'i1n1a2 .ina1ni 'ina1ni .in2a3nit 'in2a3nit .inau1gu 'inau1gu .in2augur 'in2augur in1ci inci1de inci3dent. in1di indi1ge indi3gent. in1do indo1le indo3lent. in1du indul1ge indul3gent. .i1n1e2 'i1n1e2 .i1n12 'i1n12 .inef1fa 'inef1fa .in2effab 'in2effab .in1lu 'in1lu .in23luc1ta 'in23luc1ta .in1na 'in1na .in23nar1ra 'in23nar1ra .in2ept 'in2ept .in2er 'in2er .in2exo1ra 'in2exo1ra in1fo infor1ma 1informat .i1n1i2 'i1n1i2 .ini1mi 'ini1mi .in2i3mi1ti 'in2i3mi1ti .in2i3q 'in2i3q .in2i3t 'in2i3t in1no inno1ce inno3cent. .i1n1o2 'i1n1o2 .ino1cu 'ino1cu .in2o3cul 'in2o3cul .in2ond 'in2ond in1so inso1le inso3lent. .ins1ta 'ins1ta .in1s2tab 'in1s2tab ins1ti instil3l in1te .in1te 'in1te intel1li intelli1ge intelli3gent. .inte4r3 'inte4r3 .inte1ra2 'inte1ra2 .inte1re2 'inte1re2 .inte1r2 'inte1r2 .inte1ri2 'inte1ri2 .inte1ro2 'inte1ro2 .inters2 'inters2 .inte1ru2 'inte1ru2 in1ti inti1me inti2ment. .i1n1u2 'i1n1u2 .in2uit 'in2uit .in2u3l 'in2u3l io1a2ct i1oxy is1ce is3cent. i1s2c2h i2s3c1h isc1hi i2s3chia i2s3chio is1ta i1s2tat i1va iva1le iva3lent. 1j ja1ce ja3cent. 4je. 2jent. 4jes. 2jk 1ka 1k 1ke 1k 1k 1k 4ke. 2kent. 4kes. 1k2h .1k2h4 4kh. 1ki 1k 1ko 1k 1k2r 1ku 1k 1ky 1la .1la 1l 1l .la1te .la3tent. la1w2r la2w3re 1le 1l 1l 1l 4le. 2lent. 4les. 1li 1l lil3l l1li l3lion l1lu llu1me llu2ment. l1me l2ment. 1lo 1l l1s2t 1lu 1l 1ly 1ma .1ma 1m .ma2c3k .ma1c2r .mac1ro .macro1s2c .ma1g2n .mag1ni .magni1ci .ma2g3nici1de .magni1fi .magnifi1ca .ma2g3nificat .mag1nu .ma2g3num .ma1la .mala1d2r .malad1re .ma2l1a2dres .ma2l1a2d1ro .ma2l1ai1s .ma2l1ap .ma2l1a2v .ma1le .ma2l1en .ma1li .ma2l1int .ma1lo .ma2l1oc .ma2l1o2d .ma2r1x 1me 1m .1m 1m 1m 4me. m1co mcon1te mcon3tent. .m1go .m2g1oh 4mes. .m2sa .m3san .m1se .m2s1es .m2s1i .m1su .m2s1u2s .m1ta .m1ta1s2ta 1mi .1mi 1m mil3l .mil3l mil1le mil4let .mil1li .milli1am mi1me mi2ment. mit1te mit3tent. m1n m1n 1m2n1mo 1m2ns 1m2n1si 1mo .1mo 1m 1m mo1no .mo1no .mono1a2 .mono1e2 .mono12 .mono1i2 .mono12d .mono1o2 .mono1s2 .mono1u2 mono1va monova1le monova3lent. mon1t2r mont1r mon2t3ral moye1n moye2n12g m1s2 1mu 1m mu1ni muni1fi munifi1ce munifi3cent. 1my 1na 1n 1ne 1n 1n 1n 4ne. 2nent. 4nes. 1ni 1n 1no .1no 1n 1n .no1no .no2n1obs n1sa n3s2at. n3s2ats. 1nu 1n nu1t2r nut1ri nutri1me nutri3ment. n1x 1ny .o4 'o4 .4 '4 o1b2l ob1lo o2b3long oc1te 1octet o1d2l o1d2r o12d1re o1g2n og1no ogno1mo o2g3nomo1ni o2g3no1si o1io1ni om1bu ombud2s3 1me 2ment. om1me om2ment. om1ni omni1po omnipo1te omnipo3tent. omni1s2 .on1gu 'on1gu .on3guent. 'on3guent. o1pu opu1le opu3lent. or1me or2ment. os1ta o1s2tas o1s2tat os1t o1s2t1ro os1ti o1s2tim os1to o1s2tom os1t2r ost1ra o1s2trad o1s2tra1tu ost1ri ostric1ti o1s2triction .oua1ou 'oua1ou .o1vi 'o1vi .ovi1s2c 'ovi1s2c oxy1a2 1pa .1pa 1p pa1l palo12 .pa1na .pa2n1a2f .pa2n1a2m .pa2n1a2ra .pa1ni .pa2n1is .pa1no .pa2n1o2p2h .pa2n1opt pa1pi papil2l papil3la papil3le papil3li papil1lo papil3lom .pa1ra .para1c2h .pa2r1a2c1he .pa2r1a2c1h .para1s2 .pa1re .pa3rent. .pa1r2h .pa2r3h .pa1te .pa3tent. 1pe .1pe 1p .1p 1p 1p 4pe. 2pent. .pen2ta p1nu p2nul .pe4r .pe1r1a2 p1r .pe1r1e2 .pe1r12 p1r22q pe1r3h .p1ri .pe1r1i2 .pri1os .pri1s2 .pri2s3s .pri2s3ta .pri1u2 per1ma perma1ne perma3nent. .pe1r1o2 per1ti perti1ne perti3nent. .pe1r1u2 4pes. 1p2h .1p2h4 4ph. .p1ha .pha1la .phalan3s2t p1he 4p4he. 2phent. 4p4hes. ph2l ph1le 4ph4le. 4ph4les. 2phn p1ho pho1to photo1s2 ph2r ph1re 4ph4re. 4ph4res. 2phs 2pht ph1ta 3ph2ta1l ph1ti 3ph2tis 1pi 1p pi1ri piril3l 1p2l .1p2l p1le 4p4le. 2p2lent. 4p4les. p1lu .p1lu plu1me plu2ment. .plu1ri .pluri1a p1ne 1p2n 1p2neu 1po .1po 1p poas1t2r po1ast1re po1ly poly1a2 poly1e2 poly12 poly12 poly1i2 poly1o2 poly1s2 poly1u2 poly1va polyva1le polyva3lent. .pon1te .pon2tet .pos2t3h .pos1ti .pos2t1in .pos2t1o2 .pos2t3r .post1s2 1p2r .1p2r p1re p1r .p1r 4p4re. .pr1a2 .pr2a3la .pr2au .pr1e2 .pr12 pr1mi prmi1ne prmi3nent. .pr1i2 2p2rent. .pr1o2 .pr1s2 4p4res. pr1se pr3sent. .pr1u2 p1ri pri1va privat1do privatdo1ce privatdo3cent. privatdo1ze privatdo3zent. p1ro .p1ro .pro12 pro1mi promi1ne promi3nent. .pro1g2n .prog1na .pro2g3na1t2h .pro1s2c pros1ta pro2s3tat .prou3d2h p1ru pru1de pru3dent. p1sy .p1sy 1p2sy1c2h .1p2sy1c2h .psyc1ho .psycho1a2n p1t p1t 1p2tr 1p2tr 1pu .1pu 1p .pud1d2l pu1g2n pug1na pugna1b2l pu2g3nab1le pu2g3nac pu1pi pupil3l pu1si pusil3l 1py 1q qua1me qua2ment. 4que. 2quent. 4ques. 1ra 1r ra1di radio1a2 rai1me rai3ment. ra1me ra2ment. r1ci rcil4l 1re .1re 1r .1r 1r 1r 4re. .r1a2 .r2a3le .ra1li .r2a3lis .r2a3lit .r2aux .r1e2 .r12 .r2el .r2er .r2r r1ge r3gent. .r1i2 .r2i3fi re1le re3lent. re1li reli1me reli2ment. r1ma rma1ne rma3nent. 2rent. .r1o2 re1pe re3pent. .re1s2 4res. .res1ca .re2s3cap .res1ci .re2s3ci1si .re2s3ci1so .res1co .re2s3cou .res1c2r .re2s3c1ri .res1pe .re2s3pect .res1pi .re2s3pir .res1p2l .resp1le .re2s3plend .res1po .re2s3pons .res1q .re2s3quil .re2s3s .res1se .res3sent. .re2s3t .res1ta .re3s4tab .re3s4tag .re3s4tand .re3s4tat .res1t .re3s4tn .re3s4tr .res1ti .re3s4tim .re3s4tip .res1to .re3s4toc .re3s4top .re3s4t2r .rest1re .re4s5trein .rest1ri .re4s5trict .re4s5trin .re3s4tu .re3s4ty r1su rsur1ge rsur3gent. r1ti rti1ce rti3cent. .r1t2r .rt1ro .rtro1a2 .ru2 .r2uss 1r2h r1he 4r4he. 4r4hes. 2r3heur r1hy 2r3hy1d2r 1ri 1r ri1me ri2ment. rin1ge rin3gent. r1mi rmil4l 1ro 1r 1ru 1r ru1le ru3lent. 1ry ry1t2h ry2thm ryth1me ryth2ment. 1sa .1sa 1s .sar1me .sar3ment. s1ca 1s2ca1p2h 1s2c2h .1s2c2h4 4s4ch. sc1he 4s4c4he. 4s4c4hes. 2s2chs s1c2l sc1l 1s2clr s1co 1s2cop 1se .1se 1s 1s 1s 4se. se1mi semil4l 2sent. ser1ge ser3gent. .ser1me .ser3ment. ser1pe ser3pent. 4ses. ses1q sesqui1a2 .seu2le 1s2h .1s2h4 4sh. s1he 4s4he. 2shent. 4s4hes. 2shm s1ho 2s3hom 2shr 2shs 1si 1s s1la sla1lo slalo1me slalo2ment. 1s2lav s1lo 1s2lov 1so .1so 1s 1s .sou1ve .sou3vent. s1pa spa1ti 1s2patia s1pe 1s2perm s1p2h sp1h sp1h 1s2phr 1s2phr s1pi 1s2piel spi1ro 1s2piros s1po 1s2por spo1ru sporu1le sporu4lent. s1ta .s1ta .sta2g3n stan1da 1s2tandard s1te s1t 1s2tein st1r stro1s2 s1ti .s1ti 1s2tigm .stil3l s1to 1s2to1c2k sto1mo 1s2tomos s1t2r st1ro 1s2tro1p2h st1ru 1s2truc1tu s1ty 1s2ty1le 1su .1su 1s .su2b1a2 .su3b2alt .su2b12 .su3b23r .su1bi .su2b1in su1b2l .su1b2l sub1li .sub1li subli1me subli2ment. .subli1mi .su2b3limin .su2b3lin .su2b3lu sub1s2 .su1bu .su2b1ur suc1cu succu1le succu3lent. su1me su2ment. su1pe supe4r1 supe1ro2 supers2 su1ra .su2r1a2 su3r2ah .su3r2a3t su1r .su2r1e2 .su2r12 .su3r2eau .su3r2ell sur1mi surmi1ne surmi3nent. .su3r2et .su2r3h .su1ri .su2r1i2m .su2r1inf .su2r1int .su1ro .su2r1of .su2r1ox 1sy .1sy .syn1g2n .syng1na .syn2g3na1t2h 1ta .1ta 1t 1t ta1c2h tac1hy tachy1a2 .ta1le .ta3lent. ta1me ta2ment. tan1ge tan3gent. t1c2h tc1hi tchin3t2 1te 1t 1t 1t 4te. t1l tl1e2 tl1i2 tl1o2b tl1o2p tl1s2 tem1p temp1ra tempra1me tempra3ment. 2tent. ter1ge ter3gent. 4tes. tes1ta testa1me testa3ment. 1t2h .1t2h4 4th. t1he 4t4he. ther1mo thermo1s2 4t4hes. 2t3heur 2thl 2thm 2thn th2r th1re 4th4re. 4th4res. th1ri thril3l 2ths 1ti 1t 1to 1t to1me to2ment. tor1re tor3rent. 1t2r .1t2r t1ra tran2s1a2 tran3s2act tran3s2ats tran2s3h tran2s1o2 tran2s3p trans1pa transpa1re transpa3rent. tran2s1u2 t1re 4t4re. 2t2rent. 4t4res. t1ri .t1ri .tri1a2c .tri1a2n .tri1a2t tri1de tri3dent. .tri1o2n t1ru tru1cu trucu1le trucu3lent. t1t2l 1tu 1t tu1me tu2ment. tung2s3 tur1bu turbu1le turbu3lent. 1ty .u4 'u4 .4 '4 u1ci ucil4l ue1vi uevil4l u1ni uni1a2x uni1o2v u2s3t2r u1vi uvil4l 1va 1v va1ci vacil4l va1ni vanil2l vanil1li vanil3lin vanil3lis 1ve 1v 1v 1v 4ve. v1lo vlo1s2ki ve1ni veni1me veni2ment. 2vent. ven1t2r vent1ri ventri1po ventripo1te ventripo3tent. 4ves. 1vi 1v vi1di vidi1me vidi2ment. vil3l 1vo 1v vol1ta vol2t1amp 1v2r v1re 4v4re. 2v2rent. 4v4res. 1vu 1v 1vy 1wa wa2g3n 1we 4we. 2went. 4wes. 1wi 1wo 1w2r 1wu 2xent. xil3l .y4 'y4 y1al1gi y1as1t2h ys1to y1s2tom 1za 1ze 1z 1z 4ze. 2zent. 4zes. 1zi 1zo 1zu 1zy % % Additional patterns start here: % 22 a4 4a- .4 '4 4 4- .4 '4 4 4- 4 4- .4 '4 4 4- .4 '4 4 4- .4 '4 4 4- -5a4 -54 -54 -54 -54 -54 -54 ab2ment- a1b2r -5a1b2r ab1r -5ab1r ab3ra -5ab3ra ab3sent- absti3nent- ac3cent- acquies4cent- .4 '4 4 4- -54 ae3s4c2h -5ae3s4c2h a1g2n -5a1g2n ag1na -5ag1na a2g3nat -5a2g3nat ai2ment- amalga2ment- 2ment- a1mi -5a1mi ami1no -5ami1no amino1a2c -5amino1a2c a1na -5a1na ana3s4t2r -5ana3s4t2r ani2ment- an1ti -5an1ti anti1a2 -5anti1a2 anti1e2 anti12 -5anti1e2 -5anti12 anti2en1ne -5anti2en1ne antifer3ment- anti1s2 -5anti1s2 a1po -5a1po apo2s3ta -5apo2s3ta appa3rent- -5ar1de -ar3dent- .ar3dent- -5ar3dent. ar1ge -5ar1ge -ar3gent- .ar3gent- 'ar3gent- ar3gent- ar3gent. -5ar3gent. ar2ment- ar1pe -5ar1pe -ar3pent- .ar3pent- 'ar3pent- ar3pent- ar3pent. -5ar3pent. as2ment- as2ta -5as2ta au2ment- .b4 'b4 b4 4b- -5b4 -5bai1se -5baise1ma -5bai2se3main 4be- 2bent- 4bes- -5bi1a2c -5bi1a2t -5bi1au -5bio1a2 -5bi2s1a2 -5bi1u2 4b4le- 2b2lent- 4b4les- bou2ment- 4b4re- 2b2rent- 4b4res- bru2ment- .c4 'c4 c4 4c- .4 '4 4 4- -5c4 -54 car2ment- cci3dent- 4ce- 2cent- 4ces- 4ch- 4c4he- -5c1h 2chent- 4c4hes- -5ch1v2r -5chv1re -5chvre1fe -5chvrefeuil2l -5ch2vre3feuil1le chien3dent- 4ch4le- 4ch4les- 4ch4re- 4ch4res- chro2ment- -5ci1sa -5ci2s1alp 4ck- 4c4ke- 2c2kent- 4c4kes- cla2ment- 4c4le- 2c2lent- 4c4les- -5com1me -com3ment- .com3ment- -5com3ment. comp3tent- -5con4 confi3dent- conni3vent- -5cons4 conti3nent- contin3gent- -5con1t2r -5cont1re -5contre1ma -5contrema1t2r -5cont1re3mat1re -5contre1s2c -5co1o2 -5coo1li -5co2o3lie corpu3lent- 4c4re- 2c2rent- 4c4res- -5cul4 cur3rent- 1d22 .d4 'd4 d4 4d- .4 '4 4 4- -5d4 -54 -5da1c2r -5dac1ry -5dacryo1a2 da2ment- 4de- -5d1a2 dca3dent- -5d1io 2dent- -5d1o2 4des- -5d2s -5d1sa -5d3s2a3c2r -5ds2a3m -5d3s2as1t2r -5dsa1te -5d3s2a3tell -5d3s2c -5d1se -5d2s12 -5d3s23g2r -5dsen1si -5d3s2ensib -5d3s2ert -5d3s2exu -5d2s1i2 -5d3s2i3d -5d3s2i3g2n -5d3s2i3li -5dsi1ne -5d3s2i3nen -5d3s2in1vo -5d3s2i3r -5d3s2ist -5d1so -5d2s1 -5d3s2o3l -5dso1pi -5d3s2o3pil -5d3s2orm -5d3s2orp -5d3s2ou1f2r -5d3s2p -5d3s2t -5d1su -5d2s1u2n dtri3ment- -5di1a2c -5dia1ci -5di1a2cid -5di1ald -5di1a2mi diaphrag2ment- -5dia1to -5di1a2tom -5di1e2n dili3gent- -5di2s3h dissi3dent- 2d2lent- -5do1le -do3lent- .do3lent- -5do3lent. 4d4re- 2d2rent- 4d4res- -5dy2s3 -5dy2s1a2 -5dy2s1i2 -5dy2s1o2 -5dy2s1u2 e4 4e- 4 4- 4 4- 4 4- .4 '4 4 4- -5e4 -54 -54 -54 -54 3cent- ci2ment- cu2ment- 3dent- li2ment- lo3quent- 2ment- -51mi -5mi1ne -mi3nent- .mi3nent- -5mi3nent. e1n1a2 -5e1n1a2 ni3tent- e1n1o2 -5e1n1o2 entre3gent- 3quent- quipo3tent- quiva4lent- 3rent- er2ment- es3cent- esti2ment- eu2r1a2 -5eu2r1a2 .f4 'f4 f4 4f- -5f4 fa2ment- 4fe- fcu3lent- 2fent- 4fes- fichu3ment- fir2ment- flam2ment- 4f4le- 2f2lent- 4f4les- 4f4re- 2f2rent- 4f4res- fu2ment- .g4 'g4 g4 4g- -5g4 4ge- -5gem1me -gem2ment- .gem2ment- -5gem2ment. 2gent- 4ges- 4g4le- 2g2lent- 4g4les- 4g4ne- 2g2nent- 4g4nes- gram2ment- grandilo3quent- 4g4re- 2g2rent- 4g4res- 4gue- 2guent- 4gues- .h4 'h4 h4 4h- -5h4 4he- 4hes- hu2ment- i4 4i- .4 '4 4 4- .4 '4 4 4- 4 4- .4 '4 4 4- -5i4 -54 -54 -54 -54 i1g2n -5i1g2n i2g3n -5i2g3n i2g3ni -5i2g3ni imma3nent- immi3nent- immis4cent- impo3tent- impu3dent- i1n1a2 -5i1n1a2 ina1ni -5ina1ni in2a3nit -5in2a3nit inau1gu -5inau1gu in2augur -5in2augur inci3dent- indi3gent- indo3lent- indul3gent- i1n1e2 i1n12 -5i1n1e2 -5i1n12 inef1fa -5inef1fa in2effab -5in2effab in1lu -5in1lu in23luc1ta -5in23luc1ta in1na -5in1na in23nar1ra -5in23nar1ra in2ept -5in2ept in2er -5in2er in2exo1ra -5in2exo1ra i1n1i2 -5i1n1i2 ini1mi -5ini1mi in2i3mi1ti -5in2i3mi1ti in2i3q -5in2i3q in2i3t -5in2i3t inno3cent- i1n1o2 -5i1n1o2 ino1cu -5ino1cu in2o3cul -5in2o3cul in2ond -5in2ond inso3lent- ins1ta -5ins1ta in1s2tab -5in1s2tab in1te -5in1te intelli3gent- inte4r3 -5inte4r3 inte1ra2 -5inte1ra2 inte1re2 inte1r2 -5inte1re2 -5inte1r2 inte1ri2 -5inte1ri2 inte1ro2 -5inte1ro2 inters2 -5inters2 inte1ru2 -5inte1ru2 inti2ment- i1n1u2 -5i1n1u2 in2uit -5in2uit in2u3l -5in2u3l is3cent- iva3lent- .j4 'j4 j4 4j- -5j4 ja3cent- 4je- 2jent- 4jes- .k4 'k4 k4 4k- -5k4 4ke- 2kent- 4kes- 4kh- .l4 'l4 l4 4l- -5l4 -5la1te -la3tent- .la3tent- -5la3tent. 4le- 2lent- 4les- llu2ment- l2ment- .m4 'm4 m4 4m- -5m4 -5ma2c3k -5ma1c2r -5mac1ro -5macro1s2c -5ma1g2n -5mag1ni -5magni1ci -5ma2g3nici1de -5magni1fi -5magnifi1ca -5ma2g3nificat -5mag1nu -5ma2g3num -5ma1la -5mala1d2r -5malad1re -5ma2l1a2dres -5ma2l1a2d1ro -5ma2l1ai1s -5ma2l1ap -5ma2l1a2v -5ma1le -5ma2l1en -5ma1li -5ma2l1int -5ma1lo -5ma2l1oc -5ma2l1o2d -5ma2r1x 4me- mcon3tent- -5m1go -5m2g1oh 4mes- -5m2sa -5m3san -5m1se -5m2s1es -5m2s1i -5m1su -5m2s1u2s -5m1ta -5m1ta1s2ta -5mil3l -5mil1li -5milli1am mi2ment- mit3tent- -5mo1no -5mono1a2 -5mono1e2 -5mono12 -5mono1i2 -5mono12d -5mono1o2 -5mono1s2 -5mono1u2 monova3lent- munifi3cent- .n4 'n4 n4 4n- .4 '4 4 4- -5n4 -54 4ne- 2nent- 4nes- -5no1no -5no2n1obs n3s2at- n3s2ats- nutri3ment- o4 4o- .4 '4 4 4- .4 '4 4 4- 4 4- .4 '4 4 4- .4 '4 4 4- -5o4 -54 -54 -54 -54 -54 .4 '4 4 4- -54 2ment- om2ment- omnipo3tent- on1gu -5on1gu -on3guent- .on3guent- 'on3guent- on3guent- on3guent. -5on3guent. opu3lent- or2ment- oua1ou -5oua1ou o1vi -5o1vi ovi1s2c -5ovi1s2c .p4 'p4 p4 4p- -5p4 -5pa1na -5pa2n1a2f -5pa2n1a2m -5pa2n1a2ra -5pa1ni -5pa2n1is -5pa1no -5pa2n1o2p2h -5pa2n1opt -5pa1ra -5para1c2h -5pa2r1a2c1he -5pa2r1a2c1h -5para1s2 -5pa1re -pa3rent- .pa3rent- -5pa3rent. -5pa1r2h -5pa2r3h -5pa1te -pa3tent- .pa3tent- -5pa3tent. 4pe- 2pent- -5pen2ta -5pe4r -5pe1r1a2 -5pe1r1e2 -5pe1r12 -5p1ri -5pe1r1i2 -5pri1os -5pri1s2 -5pri2s3s -5pri2s3ta -5pri1u2 perma3nent- -5pe1r1o2 perti3nent- -5pe1r1u2 4pes- 4ph- -5p1ha -5pha1la -5phalan3s2t 4p4he- 2phent- 4p4hes- 4ph4le- 4ph4les- 4ph4re- 4ph4res- 4p4le- 2p2lent- 4p4les- -5p1lu plu2ment- -5plu1ri -5pluri1a polyva3lent- -5pon1te -5pon2tet -5pos2t3h -5pos1ti -5pos2t1in -5pos2t1o2 -5pos2t3r -5post1s2 4p4re- -5p1r -5pr1a2 -5pr2a3la -5pr2au -5pr1e2 -5pr12 prmi3nent- -5pr1i2 2p2rent- -5pr1o2 4p4res- -5pr1s2 pr3sent- -5pr1u2 privatdo3cent- privatdo3zent- -5p1ro -5pro12 promi3nent- -5pro1g2n -5prog1na -5pro2g3na1t2h -5pro1s2c -5prou3d2h pru3dent- -5p1sy -5psyc1ho -5psycho1a2n -5pud1d2l .q4 'q4 q4 4q- -5q4 qua2ment- 4que- 2quent- 4ques- .r4 'r4 r4 4r- -5r4 rai3ment- ra2ment- 4re- -5r1a2 -5r2a3le -5ra1li -5r2a3lis -5r2a3lit -5r2aux -5r1e2 -5r12 -5r2el -5r2er -5r2r r3gent- -5r1i2 -5r2i3fi re3lent- reli2ment- rma3nent- 2rent- -5r1o2 re3pent- 4res- -5re1s2 -5res1ca -5re2s3cap -5res1ci -5re2s3ci1si -5re2s3ci1so -5res1co -5re2s3cou -5res1c2r -5re2s3c1ri -5res1pe -5re2s3pect -5res1pi -5re2s3pir -5res1p2l -5resp1le -5re2s3plend -5res1po -5re2s3pons -5res1q -5re2s3quil -5re2s3s -5res1se -res3sent- .res3sent- -5res3sent. -5re2s3t -5res1ta -5re3s4tab -5re3s4tag -5re3s4tand -5re3s4tat -5res1t -5re3s4tn -5re3s4tr -5res1ti -5re3s4tim -5re3s4tip -5res1to -5re3s4toc -5re3s4top -5re3s4t2r -5rest1re -5re4s5trein -5rest1ri -5re4s5trict -5re4s5trin -5re3s4tu -5re3s4ty rsur3gent- rti3cent- -5r1t2r -5rt1ro -5rtro1a2 -5ru2 -5r2uss 4r4he- 4r4hes- ri2ment- rin3gent- ru3lent- ryth2ment- .s4 's4 s4 4s- .4 '4 4 4- -5s4 -54 -5sar1me -sar3ment- .sar3ment- -5sar3ment. 4s4ch- 4s4c4he- 4s4c4hes- 4se- 2sent- ser3gent- -5ser1me -ser3ment- .ser3ment- -5ser3ment. ser3pent- 4ses- -5seu2le 4sh- 4s4he- 2shent- 4s4hes- slalo2ment- -5sou1ve -sou3vent- .sou3vent- -5sou3vent. sporu4lent- -5s1ta -5sta2g3n -5s1ti -5stil3l -5su2b1a2 -5su3b2alt -5su2b12 -5su3b23r -5su1bi -5su2b1in -5su1b2l -5sub1li subli2ment- -5subli1mi -5su2b3limin -5su2b3lin -5su2b3lu -5su1bu -5su2b1ur succu3lent- su2ment- -5su2r1a2 -5su3r2a3t -5su2r1e2 -5su2r12 -5su3r2eau -5su3r2ell surmi3nent- -5su3r2et -5su2r3h -5su1ri -5su2r1i2m -5su2r1inf -5su2r1int -5su1ro -5su2r1of -5su2r1ox -5syn1g2n -5syng1na -5syn2g3na1t2h .t4 't4 t4 4t- -5t4 -5ta1le -ta3lent- .ta3lent- -5ta3lent. ta2ment- tan3gent- 4te- tempra3ment- 2tent- ter3gent- 4tes- testa3ment- 4th- .4 '4 4 4- -54 4t4he- 4t4hes- 4th4re- 4th4res- to2ment- tor3rent- transpa3rent- 4t4re- 2t2rent- 4t4res- -5t1ri -5tri1a2c -5tri1a2n -5tri1a2t tri3dent- -5tri1o2n trucu3lent- tu2ment- turbu3lent- u4 4u- .4 '4 4 4- .4 '4 4 4- 4 4- .4 '4 4 4- -5u4 -54 -54 -54 -54 .v4 'v4 v4 4v- -5v4 4ve- veni2ment- 2vent- ventripo3tent- 4ves- vidi2ment- 4v4re- 2v2rent- 4v4res- .w4 'w4 w4 4w- -5w4 4we- 2went- 4wes- .x4 'x4 x4 4x- -5x4 2xent- y4 4y- .4 '4 4 4- .4 '4 4 4- -5y4 -54 -54 .z4 'z4 z4 4z- .4 '4 4 4- -5z4 -54 4ze- 2zent- 4zes- |
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/thes_fr.dat version [8e7389c84b].
more than 10,000 changes
Added gc_lang/fr/oxt/Dictionnaires/dictionaries/thes_fr.idx version [e141d55d12].
more than 10,000 changes
Added gc_lang/fr/oxt/Dictionnaires/ds_strings.py version [a63cfffb6b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | # -*- encoding: UTF-8 -*- def getUI (sLang): if sLang in dStrings: return dStrings[sLang] return dStrings["fr"] dStrings = { "fr": { "title": u"Orthographe française", "choose": u"Choisissez un dictionnaire", "select": u"Utiliser ce dictionnaire", "moderne": u"“Moderne”", "classique": u"“Classique” (recommandé)", "reforme1990": u"“Réforme 1990”", "toutesvariantes": u"“Toutes variantes”", "descModern": u"Ce dictionnaire propose l’orthographe telle qu’elle est écrite aujourd’hui le plus couramment. C’est le dictionnaire recommandé si le français n’est pas votre langue maternelle ou si vous ne désirez qu’une seule graphie correcte par mot.", "descClassic": u"Il s’agit du dictionnaire “Moderne”, avec des graphies classiques en sus, certaines encore communément utilisées, d’autres désuètes. C’est le dictionnaire recommandé si le français est votre langue maternelle.", "descReform": u"Avec ce dictionnaire, seule l’orthographe réformée est reconnue. Attendu que bon nombre de graphies réformées sont considérées comme erronées par beaucoup, ce dictionnaire est déconseillé. Les graphies passées dans l’usage sont déjà incluses dans le dictionnaire “Moderne”.", "descAllvar": u"Ce dictionnaire contient les variantes graphiques, classiques, réformées, ainsi que d’autres plus rares encore. Ce dictionnaire est déconseillé à ceux qui ne connaissent pas très bien la langue française.", "restart": u"Le changement ne sera effectif qu’après le redémarrage du logiciel.", "error": u"Erreur : impossible de savoir quel dictionnaire est actif." }, "en": { "title": u"French spelling", "choose": u"Choose a dictionary", "select": u"Use this dictionary", "moderne": u"“Modern”", "classique": u"“Classic” (recommended)", "reforme1990": u"“Reform 1990”", "toutesvariantes": u"“All variants”", "descModern": u"This dictionary offers the French spelling as it is written nowadays most often. This is the recommended dictionary if French is not your mother tongue or if you want only one correct spelling per word.", "descClassic": u"This is the “Modern” dictionary plus classical spellings, some of them still widely used, others obsolete. This is the recommended dictionary if French is your native language.", "descReform": u"With this dictionary, only the reformed spelling is recognized. As many of reformed spellings are considered erroneous for many people, this dictionary is unadvised. Reformed spellings commonly used are already included in the “Modern” dictionary.", "descAllvar": u"This dictionary contains all spelling variants, classical and reformed, and some others even rarer. This dictionary is unadvised for those who don’t know very well the French language.", "restart": u"The modification will be effective only after restarting the software.", "error": u"Error: enable to retrieve information about the current dictionary." } } |
Added gc_lang/fr/oxt/Dictionnaires/french_flag.png version [960f4814b1].
cannot compute difference between binary files
Added gc_lang/fr/oxt/TextFormatter/TextFormatter.py version [32ab9b6099].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 | # -*- coding: utf8 -*- # Text Formatter # by Olivier R. # License: MPL 2 import unohelper import uno import sys import os import traceback import time if sys.version_info.major == 3: import imp import tf_strings import tf_options import helpers from com.sun.star.task import XJobExecutor from com.sun.star.awt import XActionListener from com.sun.star.awt.MessageBoxButtons import BUTTONS_OK # BUTTONS_OK, BUTTONS_OK_CANCEL, BUTTONS_YES_NO, BUTTONS_YES_NO_CANCEL, BUTTONS_RETRY_CANCEL, BUTTONS_ABORT_IGNORE_RETRY # DEFAULT_BUTTON_OK, DEFAULT_BUTTON_CANCEL, DEFAULT_BUTTON_RETRY, DEFAULT_BUTTON_YES, DEFAULT_BUTTON_NO, DEFAULT_BUTTON_IGNORE from com.sun.star.awt.MessageBoxType import INFOBOX # MESSAGEBOX, INFOBOX, WARNINGBOX, ERRORBOX, QUERYBOX def MessageBox (xParentWin, sMsg, sTitle, nBoxType=INFOBOX, nBoxButtons=BUTTONS_OK): ctx = uno.getComponentContext() xToolkit = ctx.ServiceManager.createInstanceWithContext("com.sun.star.awt.Toolkit", ctx) xMsgBox = xToolkit.createMessageBox(xParentWin, nBoxType, nBoxButtons, sTitle, sMsg) return xMsgBox.execute() class TextFormatter (unohelper.Base, XActionListener, XJobExecutor): def __init__ (self, ctx): self.ctx = ctx self.xSvMgr = self.ctx.ServiceManager self.xContainer = None self.xDialog = None # XJobExecutor def trigger (self, args): try: xTF = TextFormatter(self.ctx) xTF.run() except: traceback.print_exc() def _addWidget (self, name, wtype, x, y, w, h, **kwargs): xWidget = self.xDialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype) xWidget.Name = name xWidget.PositionX = x xWidget.PositionY = y xWidget.Width = w xWidget.Height = h for k, w in kwargs.items(): setattr(xWidget, k, w) self.xDialog.insertByName(name, xWidget) return xWidget def run (self, sLang): self.dUI = tf_strings.getUI(sLang) ## dialog self.xDialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx) self.xDialog.Width = 320 self.xDialog.Title = self.dUI.get('title', "#title#") xFD1 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFD1.Height = 12 xFD1.Name = "Verdana" xFD2 = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFD2.Height = 10 xFD2.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD") xFD2.Name = "Verdana" xFDsmall = uno.createUnoStruct("com.sun.star.awt.FontDescriptor") xFDsmall.Height = 6 xFDsmall.Name = "Verdana" ## widgets nGroupBoxWith = (self.xDialog.Width - 15) // 2 nWidth = nGroupBoxWith-10 nWidthHalf = (nWidth // 2) - 10 nHeight = 10 nColor = 0xAA2200 # close or apply self.bClose = False # group box // surnumerary spaces x = 10; y = 5 nPosRes = nGroupBoxWith - 22 gbm1 = self._addWidget('groupbox1', 'GroupBox', x-5, y, nGroupBoxWith, 90, Label = " " * len(self.dUI.get('ssp', "#err")), FontDescriptor = xFD1) self.ssp = self._addWidget('ssp', 'CheckBox', x, y+2, nWidth, nHeight, Label = self.dUI.get('ssp', "#err"), FontDescriptor = xFD1, \ FontRelief = 1, TextColor = nColor, State = True) self.ssp1 = self._addWidget('ssp1', 'CheckBox', x, y+15, nWidth, nHeight, Label = self.dUI.get('ssp1', "#err"), State = True) self.ssp2 = self._addWidget('ssp2', 'CheckBox', x, y+25, nWidth, nHeight, Label = self.dUI.get('ssp2', "#err"), State = True) self.ssp3 = self._addWidget('ssp3', 'CheckBox', x, y+35, nWidth, nHeight, Label = self.dUI.get('ssp3', "#err"), State = True) self.ssp4 = self._addWidget('ssp4', 'CheckBox', x, y+45, nWidth, nHeight, Label = self.dUI.get('ssp4', "#err"), State = True) self.ssp5 = self._addWidget('ssp5', 'CheckBox', x, y+55, nWidth, nHeight, Label = self.dUI.get('ssp5', "#err"), State = True) self.ssp6 = self._addWidget('ssp6', 'CheckBox', x, y+65, nWidth, nHeight, Label = self.dUI.get('ssp6', "#err"), State = True) self.ssp7 = self._addWidget('ssp7', 'CheckBox', x, y+75, nWidth, nHeight, Label = self.dUI.get('ssp7', "#err"), State = True) self.ssp1_res = self._addWidget('ssp1_res', 'FixedText', nPosRes, y+15, 20, nHeight, Label = "", Align = 2) self.ssp2_res = self._addWidget('ssp2_res', 'FixedText', nPosRes, y+25, 20, nHeight, Label = "", Align = 2) self.ssp3_res = self._addWidget('ssp3_res', 'FixedText', nPosRes, y+35, 20, nHeight, Label = "", Align = 2) self.ssp4_res = self._addWidget('ssp4_res', 'FixedText', nPosRes, y+45, 20, nHeight, Label = "", Align = 2) self.ssp5_res = self._addWidget('ssp5_res', 'FixedText', nPosRes, y+55, 20, nHeight, Label = "", Align = 2) self.ssp6_res = self._addWidget('ssp6_res', 'FixedText', nPosRes, y+65, 20, nHeight, Label = "", Align = 2) self.ssp7_res = self._addWidget('ssp7_res', 'FixedText', nPosRes, y+75, 20, nHeight, Label = "", Align = 2) # group box // missing spaces x = 10; y = 100 gbm2 = self._addWidget('groupbox2', 'GroupBox', x-5, y, nGroupBoxWith, 40, Label = " " * len(self.dUI.get('space', "#err")), FontDescriptor = xFD1) self.space = self._addWidget('space', 'CheckBox', x, y+2, nWidth, nHeight, Label = self.dUI.get('space', "#err"), FontDescriptor = xFD1, \ FontRelief = 1, TextColor = nColor, State = True) self.space1 = self._addWidget('space1', 'CheckBox', x, y+15, nWidth, nHeight, Label = self.dUI.get('space1', "#err"), State = True) self.space2 = self._addWidget('space2', 'CheckBox', x, y+25, nWidth, nHeight, Label = self.dUI.get('space2', "#err"), State = True) self.space1_res = self._addWidget('space1_res', 'FixedText', nPosRes, y+15, 20, nHeight, Label = "", Align = 2) self.space2_res = self._addWidget('space2_res', 'FixedText', nPosRes, y+25, 20, nHeight, Label = "", Align = 2) # group box // non-breaking spaces x = 10; y = 145 gbm3 = self._addWidget('groupbox3', 'GroupBox', x-5, y, nGroupBoxWith, 70, Label = " " * len(self.dUI.get('nbsp', "#err")), FontDescriptor = xFD1) self.nbsp = self._addWidget('nbsp', 'CheckBox', x, y+2, nWidth, nHeight, Label = self.dUI.get('nbsp', "#err"), FontDescriptor = xFD1, \ FontRelief = 1, TextColor = nColor, State = True) self.nbsp1 = self._addWidget('nbsp1', 'CheckBox', x, y+15, 85, nHeight, Label = self.dUI.get('nbsp1', "#err"), State = True) self.nbsp2 = self._addWidget('nbsp2', 'CheckBox', x, y+25, 85, nHeight, Label = self.dUI.get('nbsp2', "#err"), State = True) self.nbsp3 = self._addWidget('nbsp3', 'CheckBox', x, y+35, nWidth, nHeight, Label = self.dUI.get('nbsp3', "#err"), State = True) self.nbsp4 = self._addWidget('nbsp4', 'CheckBox', x, y+45, 85, nHeight, Label = self.dUI.get('nbsp4', "#err"), State = True) self.nbsp5 = self._addWidget('nbsp5', 'CheckBox', x, y+55, 85, nHeight, Label = self.dUI.get('nbsp5', "#err"), State = True) self.nnbsp1 = self._addWidget('nnbsp1', 'CheckBox', x+85, y+15, 30, nHeight, Label = self.dUI.get('nnbsp', "#err"), HelpText = self.dUI.get('nnbsp_help', "#err"), State = False) self.nnbsp2 = self._addWidget('nnbsp2', 'CheckBox', x+85, y+25, 30, nHeight, Label = self.dUI.get('nnbsp', "#err"), State = False) self.nnbsp4 = self._addWidget('nnbsp4', 'CheckBox', x+85, y+45, 30, nHeight, Label = self.dUI.get('nnbsp', "#err"), State = False) self.nbsp1_res = self._addWidget('nbsp1_res', 'FixedText', nPosRes, y+15, 20, nHeight, Label = "", Align = 2) self.nbsp2_res = self._addWidget('nbsp2_res', 'FixedText', nPosRes, y+25, 20, nHeight, Label = "", Align = 2) self.nbsp3_res = self._addWidget('nbsp3_res', 'FixedText', nPosRes, y+35, 20, nHeight, Label = "", Align = 2) self.nbsp4_res = self._addWidget('nbsp4_res', 'FixedText', nPosRes, y+45, 20, nHeight, Label = "", Align = 2) self.nbsp5_res = self._addWidget('nbsp5_res', 'FixedText', nPosRes, y+55, 20, nHeight, Label = "", Align = 2) # group box // deletion x = 10; y = 220 gbm7 = self._addWidget('groupbox7', 'GroupBox', x-5, y, nGroupBoxWith, 50, Label = " " * len(self.dUI.get('delete', "#err")), FontDescriptor = xFD1) self.delete = self._addWidget('delete', 'CheckBox', x, y+2, nWidth, nHeight, Label = self.dUI.get('delete', "#err"), FontDescriptor = xFD1, \ FontRelief = 1, TextColor = nColor, State = True) self.delete1 = self._addWidget('delete1', 'CheckBox', x, y+15, nWidth, nHeight, Label = self.dUI.get('delete1', "#err"), State = True) self.delete2 = self._addWidget('delete2', 'CheckBox', x, y+25, nWidth, nHeight, Label = self.dUI.get('delete2', "#err"), State = True) self.delete2a = self._addWidget('delete2a', 'RadioButton', x+10, y+35, 50, nHeight, Label = self.dUI.get('delete2a', "#")) self.delete2b = self._addWidget('delete2b', 'RadioButton', x+60, y+35, 60, nHeight, Label = self.dUI.get('delete2b', "#"), State = True) self.delete2c = self._addWidget('delete2c', 'RadioButton', x+120, y+35, 40, nHeight, Label = self.dUI.get('delete2c', "#"), \ HelpText = self.dUI.get('delete2c_help', "#err")) self.delete1_res = self._addWidget('delete1_res', 'FixedText', nPosRes, y+15, 20, nHeight, Label = "", Align = 2) self.delete2_res = self._addWidget('delete2_res', 'FixedText', nPosRes, y+25, 20, nHeight, Label = "", Align = 2) # group box // typographical marks x = 168; y = 5 nPosRes = x + nGroupBoxWith - 32 gbm4 = self._addWidget('groupbox4', 'GroupBox', x-5, y, nGroupBoxWith, 130, Label = " " * len(self.dUI.get('typo', "#err")), FontDescriptor = xFD1) self.typo = self._addWidget('typo', 'CheckBox', x, y+2, nWidth, nHeight, Label = self.dUI.get('typo', "#err"), FontDescriptor = xFD1, \ FontRelief = 1, TextColor = nColor, State = True) self.typo1 = self._addWidget('typo1', 'CheckBox', x, y+15, nWidth, nHeight, Label = self.dUI.get('typo1', "#err"), State = True) self.typo2 = self._addWidget('typo2', 'CheckBox', x, y+25, nWidth, nHeight, Label = self.dUI.get('typo2', "#err"), State = True) self.typo3 = self._addWidget('typo3', 'CheckBox', x, y+35, nWidth, nHeight, Label = self.dUI.get('typo3', "#err"), State = True) self.typo3a = self._addWidget('typo3a', 'RadioButton', x+10, y+45, nWidthHalf, nHeight, Label = self.dUI.get('emdash', "#err")) self.typo3b = self._addWidget('typo3b', 'RadioButton', x+70, y+45, nWidthHalf, nHeight, Label = self.dUI.get('endash', "#err"), State = True) self.typo4 = self._addWidget('typo4', 'CheckBox', x, y+55, nWidth, nHeight, Label = self.dUI.get('typo4', "#err"), State = True) self.typo4a = self._addWidget('typo4a', 'RadioButton', x+10, y+65, nWidthHalf, nHeight, Label = self.dUI.get('emdash', "#err"), State = True) self.typo4b = self._addWidget('typo4b', 'RadioButton', x+70, y+65, nWidthHalf, nHeight, Label = self.dUI.get('endash', "#err")) self.typo5 = self._addWidget('typo5', 'CheckBox', x, y+75, nWidth, nHeight, Label = self.dUI.get('typo5', "#err"), State = True) self.typo6 = self._addWidget('typo6', 'CheckBox', x, y+85, nWidth, nHeight, Label = self.dUI.get('typo6', "#err"), State = True) self.typo7 = self._addWidget('typo7', 'CheckBox', x, y+95, nWidth, nHeight, Label = self.dUI.get('typo7', "#err"), State = True) self.typo8 = self._addWidget('typo8', 'CheckBox', x, y+105, 35, nHeight, Label = self.dUI.get('typo8', "#err"), \ HelpText = self.dUI.get('typo8_help', "#err"), State = True) self.typo8a = self._addWidget('typo8a', 'RadioButton', x+45, y+105, 30, nHeight, Label = self.dUI.get('typo8a', "#err")) self.typo8b = self._addWidget('typo8b', 'RadioButton', x+75, y+105, 35, nHeight, Label = self.dUI.get('typo8b', "#err"), State = True) self.typo_ff = self._addWidget('typo_ff', 'CheckBox', x+10, y+115, 18, nHeight, Label = self.dUI.get('typo_ff', "#err"), State = True) self.typo_fi = self._addWidget('typo_fi', 'CheckBox', x+28, y+115, 18, nHeight, Label = self.dUI.get('typo_fi', "#err"), State = True) self.typo_ffi = self._addWidget('typo_ffi', 'CheckBox', x+46, y+115, 20, nHeight, Label = self.dUI.get('typo_ffi', "#err"), State = True) self.typo_fl = self._addWidget('typo_fl', 'CheckBox', x+66, y+115, 18, nHeight, Label = self.dUI.get('typo_fl', "#err"), State = True) self.typo_ffl = self._addWidget('typo_ffl', 'CheckBox', x+84, y+115, 20, nHeight, Label = self.dUI.get('typo_ffl', "#err"), State = True) self.typo_ft = self._addWidget('typo_ft', 'CheckBox', x+104, y+115, 18, nHeight, Label = self.dUI.get('typo_ft', "#err"), State = True) self.typo_st = self._addWidget('typo_st', 'CheckBox', x+122, y+115, 18, nHeight, Label = self.dUI.get('typo_st', "#err"), State = True) self.typo1_res = self._addWidget('typo1_res', 'FixedText', nPosRes, y+15, 20, nHeight, Label = "", Align = 2) self.typo2_res = self._addWidget('typo2_res', 'FixedText', nPosRes, y+25, 20, nHeight, Label = "", Align = 2) self.typo3_res = self._addWidget('typo3_res', 'FixedText', nPosRes, y+35, 20, nHeight, Label = "", Align = 2) self.typo4_res = self._addWidget('typo4_res', 'FixedText', nPosRes, y+55, 20, nHeight, Label = "", Align = 2) self.typo5_res = self._addWidget('typo5_res', 'FixedText', nPosRes, y+75, 20, nHeight, Label = "", Align = 2) self.typo6_res = self._addWidget('typo6_res', 'FixedText', nPosRes, y+85, 20, nHeight, Label = "", Align = 2) self.typo7_res = self._addWidget('typo7_res', 'FixedText', nPosRes, y+95, 20, nHeight, Label = "", Align = 2) self.typo8_res = self._addWidget('typo8_res', 'FixedText', nPosRes, y+105, 20, nHeight, Label = "", Align = 2) # group box // misc. x = 168; y = 140 gbm5 = self._addWidget('groupbox5', 'GroupBox', x-5, y, nGroupBoxWith, 70, Label = " " * len(self.dUI.get('misc', "#err")), FontDescriptor = xFD1) self.misc = self._addWidget('misc', 'CheckBox', x, y+2, nWidth, nHeight, Label = self.dUI.get('misc', "#err"), FontDescriptor = xFD1, \ FontRelief = 1, TextColor = nColor, State = True) self.misc1 = self._addWidget('misc1', 'CheckBox', x, y+15, 80, nHeight, Label = self.dUI.get('misc1', "#err"), State = True) self.misc1a = self._addWidget('misc1a', 'CheckBox', x+80, y+15, 30, nHeight, Label = self.dUI.get('misc1a', "#err"), State = True) self.misc2 = self._addWidget('misc2', 'CheckBox', x, y+25, nWidth, nHeight, Label = self.dUI.get('misc2', "#err"), State = True) self.misc3 = self._addWidget('misc3', 'CheckBox', x, y+35, nWidth, nHeight, Label = self.dUI.get('misc3', "#err"), State = True) #self.misc4 = self._addWidget('misc4', 'CheckBox', x, y+45, nWidth, nHeight, Label = self.dUI.get('misc4', "#err"), State = True) self.misc5 = self._addWidget('misc5', 'CheckBox', x, y+45, nWidth, nHeight, Label = self.dUI.get('misc5', "#err"), State = True) self.misc5b = self._addWidget('misc5b', 'CheckBox', x+10, y+55, nWidth-40, nHeight, Label = self.dUI.get('misc5b', "#err"), State = False) self.misc5c = self._addWidget('misc5c', 'CheckBox', x+nWidth-25, y+55, 30, nHeight, Label = self.dUI.get('misc5c', "#err"), State = False) self.misc1_res = self._addWidget('misc1_res', 'FixedText', nPosRes, y+15, 20, nHeight, Label = "", Align = 2) self.misc2_res = self._addWidget('misc2_res', 'FixedText', nPosRes, y+25, 20, nHeight, Label = "", Align = 2) self.misc3_res = self._addWidget('misc3_res', 'FixedText', nPosRes, y+35, 20, nHeight, Label = "", Align = 2) #self.misc4_res = self._addWidget('misc4_res', 'FixedText', nPosRes, y+45, 20, nHeight, Label = "", Align = 2) self.misc5_res = self._addWidget('misc5_res', 'FixedText', nPosRes, y+45, 20, nHeight, Label = "", Align = 2) # group box // restructuration x = 168; y = 215 gbm6 = self._addWidget('groupbox6', 'GroupBox', x-5, y, nGroupBoxWith, 50, Label = " " * len(self.dUI.get('struct', "#err")), FontDescriptor = xFD1) self.struct = self._addWidget('struct', 'CheckBox', x, y+2, nWidth, nHeight, Label = self.dUI.get('struct', "#err"), FontDescriptor = xFD1, \ FontRelief = 1, TextColor = nColor, HelpText = self.dUI.get('struct_help', "#err"), State = False) self.struct1 = self._addWidget('struct1', 'CheckBox', x, y+15, nWidth, nHeight, Label = self.dUI.get('struct1', "#err"), State = True, Enabled = False) self.struct2 = self._addWidget('struct2', 'CheckBox', x, y+25, nWidth, nHeight, Label = self.dUI.get('struct2', "#err"), State = True, Enabled = False) self.struct3 = self._addWidget('struct3', 'CheckBox', x, y+35, nWidth, nHeight, Label = self.dUI.get('struct3', "#err"), \ HelpText = self.dUI.get('struct3_help', "#err"), State = False, Enabled = False) self.struct1_res = self._addWidget('struct1_res', 'FixedText', nPosRes, y+15, 20, nHeight, Label = "", Align = 2) self.struct2_res = self._addWidget('struct2_res', 'FixedText', nPosRes, y+25, 20, nHeight, Label = "", Align = 2) self.struct3_res = self._addWidget('struct3_res', 'FixedText', nPosRes, y+35, 20, nHeight, Label = "", Align = 2) # dialog height self.xDialog.Height = 292 xWindowSize = helpers.getWindowSize() self.xDialog.PositionX = int((xWindowSize.Width / 2) - (self.xDialog.Width / 2)) self.xDialog.PositionY = int((xWindowSize.Height / 2) - (self.xDialog.Height / 2)) # lists of checkbox widgets self.dCheckboxWidgets = { "ssp": [self.ssp1, self.ssp2, self.ssp3, self.ssp4, self.ssp5, self.ssp6, self.ssp7], "space": [self.space1, self.space2], "nbsp": [self.nbsp1, self.nbsp2, self.nbsp3, self.nbsp4, self.nbsp5, self.nnbsp1, self.nnbsp2, self.nnbsp4], "delete": [self.delete1, self.delete2, self.delete2a, self.delete2b, self.delete2c], "typo": [self.typo1, self.typo2, self.typo3, self.typo3a, self.typo3b, self.typo4, self.typo4a, self.typo4b, self.typo5, self.typo6, \ self.typo7, self.typo8, self.typo8a, self.typo8b, self.typo_ff, self.typo_fi, self.typo_ffi, self.typo_fl, self.typo_ffl, \ self.typo_ft, self.typo_st], "misc": [self.misc1, self.misc2, self.misc3, self.misc5, self.misc1a, self.misc5b, self.misc5c], #self.misc4, "struct": [self.struct1, self.struct2, self.struct3] } # progress bar self.pbar = self._addWidget('pbar', 'ProgressBar', 22, self.xDialog.Height-16, 215, 10) self.pbar.ProgressValueMin = 0 self.pbar.ProgressValueMax = 31 # time counter self.time_res = self._addWidget('time_res', 'FixedText', self.xDialog.Width-80, self.xDialog.Height-15, 20, nHeight, Label = "", Align = 2) # buttons self.bdefault = self._addWidget('default', 'Button', 5, self.xDialog.Height-19, 15, 15, Label = self.dUI.get('default', "#err"), \ HelpText = self.dUI.get('default_help', "#err"), FontDescriptor = xFD2, TextColor = 0x444444) #self.bsel = self._addWidget('bsel', 'CheckBox', x, self.xDialog.Height-40, nWidth-55, nHeight, Label = self.dUI.get('bsel', "#err")) self.bapply = self._addWidget('apply', 'Button', self.xDialog.Width-55, self.xDialog.Height-19, 50, 15, Label = self.dUI.get('apply', "#err"), \ FontDescriptor = xFD2, TextColor = 0x004400) self.binfo = self._addWidget('info', 'Button', self.xDialog.Width-15, 0, 10, 9, Label = self.dUI.get('info', "#err"), \ HelpText = self.dUI.get('infotitle', "#err"), FontDescriptor = xFDsmall, TextColor = 0x444444) # load configuration self._loadConfig() ## container self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx) self.xContainer.setModel(self.xDialog) self.xContainer.setVisible(False) self.xContainer.getControl('info').addActionListener(self) self.xContainer.getControl('info').setActionCommand('Info') self.xContainer.getControl('default').addActionListener(self) self.xContainer.getControl('default').setActionCommand('Default') self.xContainer.getControl('apply').addActionListener(self) self.xContainer.getControl('apply').setActionCommand('Apply') self.xContainer.getControl('ssp').addActionListener(self) self.xContainer.getControl('ssp').setActionCommand('SwitchSsp') self.xContainer.getControl('space').addActionListener(self) self.xContainer.getControl('space').setActionCommand('SwitchSpace') self.xContainer.getControl('nbsp').addActionListener(self) self.xContainer.getControl('nbsp').setActionCommand('SwitchNbsp') self.xContainer.getControl('delete').addActionListener(self) self.xContainer.getControl('delete').setActionCommand('SwitchDelete') self.xContainer.getControl('typo').addActionListener(self) self.xContainer.getControl('typo').setActionCommand('SwitchTypo') self.xContainer.getControl('misc').addActionListener(self) self.xContainer.getControl('misc').setActionCommand('SwitchMisc') self.xContainer.getControl('struct').addActionListener(self) self.xContainer.getControl('struct').setActionCommand('SwitchStruct') xToolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx) self.xContainer.createPeer(xToolkit, None) self.xContainer.execute() # XActionListener def actionPerformed (self, xActionEvent): try: if xActionEvent.ActionCommand == 'Apply': if self.bClose: self.xContainer.endExecute() else: xDesktop = self.ctx.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", self.ctx) xElem = xDesktop.getCurrentComponent() # Writer if True: # no selection self._saveConfig() self._replaceAll(xElem) else: # modify selected text only pass #xSelecList = xDoc.getCurrentSelection() #xSel = xSelecList.getByIndex(0) # Impress # Note: impossible to format text on Impress right now as ReplaceDescriptors don’t accept regex! #xPages = xElem.getDrawPages() #for i in range(xPages.Count): # self._replaceAll(xPages.getByIndex(i)) #xPages = xElem.getMasterPages() #for i in range(xPages.Count): # self._replaceAll(xPages.getByIndex(i)) self._setApplyButtonLabel() elif xActionEvent.ActionCommand == 'SwitchSsp': self._switchCheckBox(self.ssp) self._setApplyButtonLabel() elif xActionEvent.ActionCommand == 'SwitchSpace': self._switchCheckBox(self.space) self._setApplyButtonLabel() elif xActionEvent.ActionCommand == 'SwitchNbsp': self._switchCheckBox(self.nbsp) self._setApplyButtonLabel() elif xActionEvent.ActionCommand == 'SwitchDelete': self._switchCheckBox(self.delete) self._setApplyButtonLabel() elif xActionEvent.ActionCommand == 'SwitchTypo': self._switchCheckBox(self.typo) self._setApplyButtonLabel() elif xActionEvent.ActionCommand == 'SwitchMisc': self._switchCheckBox(self.misc) self._setApplyButtonLabel() elif xActionEvent.ActionCommand == 'SwitchStruct': self._switchCheckBox(self.struct) self._setApplyButtonLabel() elif xActionEvent.ActionCommand == 'Default': self._setConfig(tf_options.dDefaultOpt) self._setApplyButtonLabel() elif xActionEvent.ActionCommand == 'Info': xDesktop = self.xSvMgr.createInstanceWithContext('com.sun.star.frame.Desktop', self.ctx) xDoc = xDesktop.getCurrentComponent() xWindow = xDoc.CurrentController.Frame.ContainerWindow MessageBox (xWindow, self.dUI.get('infomsg', "#err"), self.dUI.get('infotitle', "#err")) else: print("Wrong command: " + xActionEvent.ActionCommand) except: traceback.print_exc() def _loadConfig (self): try: if sys.version_info.major == 3: imp.reload(tf_options) else: reload(tf_options) self._setConfig(tf_options.dOpt) except: traceback.print_exc() def _setConfig (self, d): try: for key, val in d.items(): w = getattr(self, key) w.State = val if key in self.dCheckboxWidgets: self._switchCheckBox(w) except: raise def _saveConfig (self): try: # create options dictionary dOpt = {} for key, lWidget in self.dCheckboxWidgets.items(): w = getattr(self, key) dOpt[w.Name] = w.State for w in lWidget: dOpt[w.Name] = w.State # get extension path xDefaultContext = self.ctx.ServiceManager.DefaultContext xPackageInfoProvider = xDefaultContext.getValueByName("/singletons/com.sun.star.deployment.PackageInformationProvider") sExtPath = xPackageInfoProvider.getPackageLocation("French.linguistic.resources.from.Dicollecte.by.OlivierR") sExtPath = sExtPath[8:] + "/pythonpath/tf_options.py" # remove "file:///" sExtPath = os.path.abspath(sExtPath) # write file if os.path.isfile(sExtPath): hOpt = open(sExtPath, "w") hOpt.write("dDefaultOpt = " + str(tf_options.dDefaultOpt) + "\n") hOpt.write("dOpt = " + str(dOpt)) hOpt.close() except: traceback.print_exc() def _switchCheckBox (self, wGroupCheckbox): for w in self.dCheckboxWidgets.get(wGroupCheckbox.Name, []): w.Enabled = wGroupCheckbox.State def _setApplyButtonLabel (self): if self.ssp.State or self.space.State or self.nbsp.State or self.delete.State or self.typo.State or self.misc.State or self.struct.State: self.bClose = False self.bapply.Label = self.dUI.get('apply', "#err") self.bapply.TextColor = 0x004400 else: self.bClose = True self.bapply.Label = self.dUI.get('close', "#err") self.bapply.TextColor = 0x440000 self.xContainer.setVisible(True) def _replaceAll (self, xElem): try: nStartTime = time.clock() self.xContainer.setVisible(True) # change pointer xPointer = self.ctx.ServiceManager.createInstanceWithContext("com.sun.star.awt.Pointer", self.ctx) xPointer.setType(uno.getConstantByName("com.sun.star.awt.SystemPointer.WAIT")) xWindowPeer = self.xContainer.getPeer() xWindowPeer.setPointer(xPointer) for x in xWindowPeer.Windows: x.setPointer(xPointer) # NOTE: A LOT OF REGEX COULD BE MERGED IF ICU ENGINE WAS NOT SO BUGGY # "([;?!…])(?=[:alnum:])" => "$1 " doesn’t work properly # "(?<=[:alnum:])([;?!…])" => " $1 " doesn’t work properly self.pbar.ProgressValue = 0 # Restructuration if self.struct.State: if self.struct1.State: n = self._replaceText(xElem, "\\n", "\\n", True) # end of line => end of paragraph self.struct1_res.Label = str(n) self.pbar.ProgressValue += 1 if self.struct2.State: n = self._replaceText(xElem, "([:alpha:])- *\n([:alpha:])", "$1$2", True) # EOL n += self._replaceHyphenAtEndOfParagraphs(xElem) # EOP self.struct2_res.Label = str(n) self.pbar.ProgressValue += 1 if self.struct3.State: n = self._mergeContiguousParagraphs(xElem) self.struct3_res.Label = str(n) self.pbar.ProgressValue += 1 self.struct.State = False self._switchCheckBox(self.struct) self.pbar.ProgressValue = 3 # espaces surnuméraires if self.ssp.State: if self.ssp3.State: n = self._replaceText(xElem, "[ ]+$", "", True) self.ssp3_res.Label = str(n) self.pbar.ProgressValue += 1 if self.ssp2.State: n = self._replaceText(xElem, " ", " ", False) # espace + espace insécable -> espace n += self._replaceText(xElem, " ", " ", False) # espace insécable + espace -> espace n += self._replaceText(xElem, " +", " ", True) # espaces surnuméraires n += self._replaceText(xElem, " +", " ", True) # espaces insécables surnuméraires self.ssp2_res.Label = str(n) self.pbar.ProgressValue += 1 if self.ssp1.State: n = self._replaceText(xElem, "^[ ]+", "", True) self.ssp1_res.Label = str(n) self.pbar.ProgressValue += 1 if self.ssp4.State: n = self._replaceText(xElem, " +(?=[.,…])", "", True) self.ssp4_res.Label = str(n) self.pbar.ProgressValue += 1 if self.ssp5.State: n = self._replaceText(xElem, "\\([ ]+", "(", True) n += self._replaceText(xElem, "[ ]+\\)", ")", True) self.ssp5_res.Label = str(n) self.pbar.ProgressValue += 1 if self.ssp6.State: n = self._replaceText(xElem, "\\[[ ]+", "[", True) n += self._replaceText(xElem, "[ ]+\\]", "]", True) self.ssp6_res.Label = str(n) self.pbar.ProgressValue += 1 if self.ssp7.State: n = self._replaceText(xElem, "“[ ]+", "“", True) n += self._replaceText(xElem, "[ ]”", "”", True) self.ssp7_res.Label = str(n) self.pbar.ProgressValue += 1 self.ssp.State = False self._switchCheckBox(self.ssp) self.pbar.ProgressValue = 10 # espaces typographiques if self.nbsp.State: if self.nbsp1.State: if self.nnbsp1.State: # espaces insécables fines n = self._replaceText(xElem, "(?<=[:alnum:]);", " ;", True) n += self._replaceText(xElem, "(?<=[:alnum:])[?][ ]", " ? ", True) n += self._replaceText(xElem, "(?<=[:alnum:])[?]$", " ?", True) n += self._replaceText(xElem, "(?<=[:alnum:])!", " !", True) n += self._replaceText(xElem, "(?<=[]…)»}]);", " ;", True) n += self._replaceText(xElem, "(?<=[]…)»}])[?][ ]", " ? ", True) n += self._replaceText(xElem, "(?<=[]…)»}])[?]$", " ?", True) n += self._replaceText(xElem, "(?<=[]…)»}])!", " !", True) n += self._replaceText(xElem, "[ ]+([;?!])", " $1", True) n += self._replaceText(xElem, "(?<=[:alnum:]):[ ]", " : ", True) n += self._replaceText(xElem, "(?<=[:alnum:]):$", " :", True) n += self._replaceText(xElem, "(?<=[]…)»}]):", " :", True) n += self._replaceText(xElem, "[ ]+:", " :", True) else: # espaces insécables n = self._replaceText(xElem, "(?<=[:alnum:]):[ ]", " : ", True) n += self._replaceText(xElem, "(?<=[:alnum:]):$", " :", True) n += self._replaceText(xElem, "(?<=[:alnum:]);", " ;", True) n += self._replaceText(xElem, "(?<=[:alnum:])[?][ ]", " ? ", True) n += self._replaceText(xElem, "(?<=[:alnum:])[?]$", " ?", True) n += self._replaceText(xElem, "(?<=[:alnum:])!", " !", True) n += self._replaceText(xElem, "(?<=[]…)»}]):", " :", True) n += self._replaceText(xElem, "(?<=[]…)»}]);", " ;", True) n += self._replaceText(xElem, "(?<=[]…)»}])[?][ ]", " ? ", True) n += self._replaceText(xElem, "(?<=[]…)»}])[?]$", " ?", True) n += self._replaceText(xElem, "(?<=[]…)»}])!", " !", True) n += self._replaceText(xElem, "[ ]+([:;?!])", " $1", True) n -= self._replaceText(xElem, "([[(])[ ]([!?:;])", "$1$2", True) n -= self._replaceText(xElem, "(?<=http)[ ]://", "://", True) n -= self._replaceText(xElem, "(?<=https)[ ]://", "://", True) n -= self._replaceText(xElem, "(?<=ftp)[ ]://", "://", True) n -= self._replaceText(xElem, "(?<=&)amp[ ];", "amp;", True) # ICU: & is $0 in replacement field n -= self._replaceText(xElem, "(?<=&)nbsp[ ];", "nbsp;", True) # ICU: & is $0 in replacement field n -= self._replaceText(xElem, "(?<=&)lt[ ];", "lt;", True) # ICU: & is $0 in replacement field n -= self._replaceText(xElem, "(?<=&)gt[ ];", "gt;", True) # ICU: & is $0 in replacement field n -= self._replaceText(xElem, "(?<=&)apos[ ];", "apos;", True) # ICU: & is $0 in replacement field n -= self._replaceText(xElem, "(?<=&)quot[ ];", "quot;", True) # ICU: & is $0 in replacement field n -= self._replaceText(xElem, "(?<=&)thinsp[ ];", "thinsp;", True) # ICU: & is $0 in replacement field self.nbsp1_res.Label = str(n) self.pbar.ProgressValue += 1 if self.nbsp2.State: if self.nnbsp2.State: # espaces insécables fines n = self._replaceText(xElem, "«(?=[:alnum:])", "« ", True) n += self._replaceText(xElem, "«[ ]+", "« ", True) n += self._replaceText(xElem, "(?<=[:alnum:]|[.!?])»", " »", True) n += self._replaceText(xElem, "[ ]+»", " »", True) else: # espaces insécables n = self._replaceText(xElem, "«(?=[:alnum:])", "« ", True) n += self._replaceText(xElem, "«[ ]+", "« ", True) n += self._replaceText(xElem, "(?<=[:alnum:]|[.!?])»", " »", True) n += self._replaceText(xElem, "[ ]+»", " »", True) self.nbsp2_res.Label = str(n) self.pbar.ProgressValue += 1 if self.nbsp3.State: n = self._replaceText(xElem, "([:digit:])([%‰€$£¥˚℃])", "$1 $2", True) n += self._replaceText(xElem, "([:digit:]) ([%‰€$£¥˚℃])", "$1 $2", True) self.nbsp3_res.Label = str(n) self.pbar.ProgressValue += 1 if self.nbsp4.State: if self.nnbsp4.State: # espaces insécables fines n = self._replaceText(xElem, "([:digit:])[ ]([:digit:])", "$1 $2", True) else: # espaces insécables n = self._replaceText(xElem, "([:digit:])[ ]([:digit:])", "$1 $2", True) self.nbsp4_res.Label = str(n) self.pbar.ProgressValue += 1 if self.nbsp5.State: n = self._replaceText(xElem, "(?<=[0-9⁰¹²³⁴⁵⁶⁷⁸⁹]) ?([kcmµnd]?(?:[slgJKΩΩℓ]|m[²³]?|Wh?|Hz|dB)|[%‰]|°C)\\b", " $1", True, True) self.nbsp5_res.Label = str(n) self.pbar.ProgressValue += 1 if False: n = self._replaceText(xElem, "\\b(MM?\\.|Mlle|Mgr) ", "$1 ", True) self.nbsp3_res.Label = str(n) self.pbar.ProgressValue += 1 self.nbsp.State = False self._switchCheckBox(self.nbsp) self.pbar.ProgressValue = 15 # espaces manquants if self.typo.State: if self.typo6.State: n = self._replaceText(xElem, "\\bN\\.([ms])\\b", "N·$1", True, True) # N·m et N·m-1, N·s n += self._replaceText(xElem, "\\bW\\.h\\b", "W·h", True, True) n += self._replaceText(xElem, "\\bPa\\.s\\b", "Pa·s", True, True) n += self._replaceText(xElem, "\\bA\\.h\\b", "A·h", True, True) n += self._replaceText(xElem, "\\bΩ\\.m\\b", "Ω·m", True, True) n += self._replaceText(xElem, "\\bS\\.m\\b", "S·m", True, True) n += self._replaceText(xElem, "\\bg\\.s(?=-1)\\b", "g·s", True, True) n += self._replaceText(xElem, "\\bm\\.s(?=-[12])\\b", "m·s", True, True) n += self._replaceText(xElem, "\\bg\\.m(?=2|-3)\\b", "g·m", True, True) n += self._replaceText(xElem, "\\bA\\.m(?=-1)\\b", "A·m", True, True) n += self._replaceText(xElem, "\\bJ\\.K(?=-1)\\b", "J·K", True, True) n += self._replaceText(xElem, "\\bW\\.m(?=-2)\\b", "W·m", True, True) n += self._replaceText(xElem, "\\bcd\\.m(?=-2)\\b", "cd·m", True, True) n += self._replaceText(xElem, "\\bC\\.kg(?=-1)\\b", "C·kg", True, True) n += self._replaceText(xElem, "\\bH\\.m(?=-1)\\b", "H·m", True, True) n += self._replaceText(xElem, "\\bJ\\.kg(?=-1)\\b", "J·kg", True, True) n += self._replaceText(xElem, "\\bJ\\.m(?=-3)\\b", "J·m", True, True) n += self._replaceText(xElem, "\\bm[2²]\\.s\\b", "m²·s", True, True) n += self._replaceText(xElem, "\\bm[3³]\\.s(?=-1)\\b", "m³·s", True, True) #n += self._replaceText(xElem, "\\bJ.kg-1.K-1\\b", "J·kg-1·K-1", True, True) #n += self._replaceText(xElem, "\\bW.m-1.K-1\\b", "W·m-1·K-1", True, True) #n += self._replaceText(xElem, "\\bW.m-2.K-1\\b", "W·m-2·K-1", True, True) n += self._replaceText(xElem, "\\b(Y|Z|E|P|T|G|M|k|h|da|d|c|m|µ|n|p|f|a|z|y)Ω\\b", "$1Ω", True, True) self.typo6_res.Label = str(n) self.pbar.ProgressValue += 1 if self.space.State: if self.space1.State: n = self._replaceText(xElem, ";(?=[:alnum:])", "; ", True) n += self._replaceText(xElem, "\\?(?=[A-ZÉÈÊÂÀÎ])", "? ", True) n += self._replaceText(xElem, "!(?=[:alnum:])", "! ", True) n += self._replaceText(xElem, "…(?=[:alnum:])", "… ", True) n += self._replaceText(xElem, "\\.(?=[A-ZÉÈÎ][:alpha:])", ". ", True, True) n += self._replaceText(xElem, "\\.(?=À)", ". ", True, True) n += self._replaceText(xElem, ",(?=[:alpha:])", ", ", True) n += self._replaceText(xElem, "([:alpha:]),([0-9])", "$1, $2", True) n += self._replaceText(xElem, ":(?=[:alpha:])", ": ", True) # exceptions: n -= self._replaceText(xElem, "(?<=DnT), w\\b", ",w", True, True) n -= self._replaceText(xElem, "(?<=DnT), A\\b", ",A", True, True) self.space1_res.Label = str(n) self.pbar.ProgressValue += 1 if self.space2.State: n = self._replaceText(xElem, " -(?=[:alpha:]|[\"«“'‘])", " - ", True) n += self._replaceText(xElem, " –(?=[:alpha:]|[\"«“'‘])", " – ", True) # demi-cadratin n += self._replaceText(xElem, " —(?=[:alpha:]|[\"«“'‘])", " — ", True) # cadratin n += self._replaceText(xElem, "(?<=[:alpha:])– ", " – ", True) n += self._replaceText(xElem, "(?<=[:alpha:])— ", " — ", True) n += self._replaceText(xElem, "(?<=[:alpha:])- ", " - ", True) n += self._replaceText(xElem, "(?<=[\"»”'’])– ", " – ", True) n += self._replaceText(xElem, "(?<=[\"»”'’])— ", " — ", True) n += self._replaceText(xElem, "(?<=[\"»”'’])- ", " - ", True) self.space2_res.Label = str(n) self.pbar.ProgressValue += 1 self.space.State = False self._switchCheckBox(self.space) self.pbar.ProgressValue = 17 # Suppression if self.delete.State: if self.delete1.State: n = self._replaceText(xElem, "", "", False) # tiret conditionnel / soft hyphen self.delete1_res.Label = str(n) self.pbar.ProgressValue += 1 if self.delete2.State: n = self._replaceBulletsByEmDash(xElem) self.delete2_res.Label = str(n) self.pbar.ProgressValue += 1 self.delete.State = False self._switchCheckBox(self.delete) self.pbar.ProgressValue = 20 # signes typographiques if self.typo.State: if self.typo1.State: n = self._replaceText(xElem, "\\bl['´‘′`](?=[:alnum:])", "l’", True, True) n += self._replaceText(xElem, "\\bj['´‘′`](?=[:alnum:])", "j’", True, True) n += self._replaceText(xElem, "\\bm['´‘′`](?=[:alnum:])", "m’", True, True) n += self._replaceText(xElem, "\\bt['´‘′`](?=[:alnum:])", "t’", True, True) n += self._replaceText(xElem, "\\bs['´‘′`](?=[:alnum:])", "s’", True, True) n += self._replaceText(xElem, "\\bc['´‘′`](?=[:alnum:])", "c’", True, True) n += self._replaceText(xElem, "\\bd['´‘′`](?=[:alnum:])", "d’", True, True) n += self._replaceText(xElem, "\\bn['´‘′`](?=[:alnum:])", "n’", True, True) n += self._replaceText(xElem, "\\bç['´‘′`](?=[:alnum:])", "ç’", True, True) n += self._replaceText(xElem, "\\bL['´‘′`](?=[:alnum:])", "L’", True, True) n += self._replaceText(xElem, "\\bJ['´‘′`](?=[:alnum:])", "J’", True, True) n += self._replaceText(xElem, "\\bM['´‘′`](?=[:alnum:])", "M’", True, True) n += self._replaceText(xElem, "\\bT['´‘′`](?=[:alnum:])", "T’", True, True) n += self._replaceText(xElem, "\\bS['´‘′`](?=[:alnum:])", "S’", True, True) n += self._replaceText(xElem, "\\bC['´‘′`](?=[:alnum:])", "C’", True, True) n += self._replaceText(xElem, "\\bD['´‘′`](?=[:alnum:])", "D’", True, True) n += self._replaceText(xElem, "\\bN['´‘′`](?=[:alnum:])", "N’", True, True) n += self._replaceText(xElem, "\\bÇ['´‘′`](?=[:alnum:])", "Ç’", True, True) n += self._replaceText(xElem, "(qu|jusqu|lorsqu|puisqu|quoiqu|quelqu|presqu|entr|aujourd|prud)['´‘′`]", "$1’", True) self.typo1_res.Label = str(n) self.pbar.ProgressValue += 1 if self.typo2.State: n = self._replaceText(xElem, "...", "…", False) n += self._replaceText(xElem, "(?<=…)[.][.]", "…", True) n += self._replaceText(xElem, "…[.](?![.])", "…", True) self.typo2_res.Label = str(n) self.pbar.ProgressValue += 1 if self.typo3.State: if self.typo3b.State: # demi-cadratin n = self._replaceText(xElem, " - ", " – ", False) n += self._replaceText(xElem, " — ", " – ", False) n += self._replaceText(xElem, " -,", " –,", False) n += self._replaceText(xElem, " —,", " –,", False) else: # cadratin n = self._replaceText(xElem, " - ", " — ", False) n += self._replaceText(xElem, " – ", " — ", False) n += self._replaceText(xElem, " -,", " —,", False) n += self._replaceText(xElem, " –,", " —,", False) self.typo3_res.Label = str(n) self.pbar.ProgressValue += 1 if self.typo4.State: if self.typo4a.State: # cadratin n = self._replaceText(xElem, "^-[ ]", "— ", True) n += self._replaceText(xElem, "^–[ ]", "— ", True) n += self._replaceText(xElem, "^— ", "— ", True) n += self._replaceText(xElem, "^«[ ][—–-][ ]", "« — ", True) n += self._replaceText(xElem, "^[-–—](?=[:alnum:])", "— ", True) else: # demi-cadratin n = self._replaceText(xElem, "^-[ ]", "– ", True) n += self._replaceText(xElem, "^—[ ]", "– ", True) n += self._replaceText(xElem, "^– ", "– ", True) n += self._replaceText(xElem, "^[-–—](?=[:alnum:])", "– ", True) self.typo4_res.Label = str(n) self.pbar.ProgressValue += 1 if self.typo5.State: n = self._replaceText(xElem, '"([:alpha:]+)"', "“$1”", True) n += self._replaceText(xElem, "''([:alpha:]+)''", "“$1”", True) n += self._replaceText(xElem, "'([:alpha:]+)'", "“$1”", True) n += self._replaceText(xElem, '^"(?=[:alnum:])', "« ", True) n += self._replaceText(xElem, "^''(?=[:alnum:])", "« ", True) n += self._replaceText(xElem, ' "(?=[:alnum:])', " « ", True) n += self._replaceText(xElem, " ''(?=[:alnum:])", " « ", True) n += self._replaceText(xElem, '\\("(?=[:alnum:])', "(« ", True) n += self._replaceText(xElem, "\\(''(?=[:alnum:])", "(« ", True) n += self._replaceText(xElem, '(?<=[:alnum:])"$', " »", True) n += self._replaceText(xElem, "(?<=[:alnum:])''$", " »", True) n += self._replaceText(xElem, '(?<=[:alnum:])"(?=[] ,.:;?!…)])', " »", True) n += self._replaceText(xElem, "(?<=[:alnum:])''(?=[] ,.:;?!…)])", " »", True) n += self._replaceText(xElem, '(?<=[.!?…])" ', " » ", True) n += self._replaceText(xElem, '(?<=[.!?…])"$', " »", True) self.typo5_res.Label = str(n) self.pbar.ProgressValue += 1 if self.typo7.State: # ligatures: no initial cap n = self._replaceText(xElem, "coeur", "cœur", False, True) n += self._replaceText(xElem, "coel([aeio])", "cœl$1", True, True) n += self._replaceText(xElem, "choeur", "chœur", False, True) n += self._replaceText(xElem, "foet", "fœt", False, True) n += self._replaceText(xElem, "oeil", "œil", False, True) n += self._replaceText(xElem, "oeno", "œno", False, True) n += self._replaceText(xElem, "oesoph", "œsoph", False, True) n += self._replaceText(xElem, "oestro", "œstro", False, True) n += self._replaceText(xElem, "oeuf", "œuf", False, True) n += self._replaceText(xElem, "oeuvr", "œuvr", False, True) n += self._replaceText(xElem, "moeur", "mœur", False, True) n += self._replaceText(xElem, "noeu", "nœu", False, True) n += self._replaceText(xElem, "soeur", "sœur", False, True) n += self._replaceText(xElem, "voeu", "vœu", False, True) n += self._replaceText(xElem, "aequo", "æquo", False, True) # ligatures: with initial cap n += self._replaceText(xElem, "Coeur", "Cœur", False, True) n += self._replaceText(xElem, "Coel([aeio])", "Cœl$1", True, True) n += self._replaceText(xElem, "Choeur", "Chœur", False, True) n += self._replaceText(xElem, "Foet", "Fœt", False, True) n += self._replaceText(xElem, "Oeil", "Œil", False, True) n += self._replaceText(xElem, "Oeno", "Œno", False, True) n += self._replaceText(xElem, "Oesoph", "Œsoph", False, True) n += self._replaceText(xElem, "Oestro", "Œstro", False, True) n += self._replaceText(xElem, "Oeuf", "Œuf", False, True) n += self._replaceText(xElem, "Oeuvr", "Œuvr", False, True) n += self._replaceText(xElem, "Moeur", "Mœur", False, True) n += self._replaceText(xElem, "Noeu", "Nœu", False, True) n += self._replaceText(xElem, "Soeur", "Sœur", False, True) n += self._replaceText(xElem, "Voeu", "Vœu", False, True) n += self._replaceText(xElem, "Aequo", "Æquo", False, True) # common words with missing diacritics n += self._replaceText(xElem, "\\bCa\\b", "Ça", True, True) n += self._replaceText(xElem, " ca\\b", " ça", True, True) n += self._replaceText(xElem, "\\bdej[aà]\\b", "déjà", True, True) n += self._replaceText(xElem, "\\bDej[aà]\\b", "Déjà", True, True) n += self._replaceText(xElem, "\\bplutot\\b", "plutôt", True, True) n += self._replaceText(xElem, "\\bPlutot\\b", "Plutôt", True, True) n += self._replaceText(xElem, "\\b([cC]e(?:ux|lles?|lui))-la\\b", "$1-là", True, True) n += self._replaceText(xElem, "\\bmalgre\\b", "malgré", True, True) n += self._replaceText(xElem, "\\bMalgre\\b", "Malgré", True, True) n += self._replaceText(xElem, "\\betre\\b", "être", True, True) n += self._replaceText(xElem, "\\bEtre\\b", "Être", True, True) n += self._replaceText(xElem, "\\btres\\b", "très", True, True) n += self._replaceText(xElem, "\\bTres\\b", "Très", True, True) n += self._replaceText(xElem, "\\bEtai([ts]|ent)\\b", "Étai$1", True, True) n += self._replaceText(xElem, "\\bE(tat|cole|crit|poque|tude|ducation|glise|conomi(?:qu|)e|videmment|lysée|tienne|thiopie|cosse|gypt(?:e|ien)|rythrée|pinal|vreux)", "É$1", True, True) self.typo7_res.Label = str(n) self.pbar.ProgressValue += 1 if self.typo8.State: # ligatures typographiques : fi, fl, ff, ffi, ffl, ft, st n = 0 if self.typo8a.State: if self.typo_ffi.State: n += self._replaceText(xElem, "ffi", "ffi", False, True) if self.typo_ffl.State: n += self._replaceText(xElem, "ffl", "ffl", False, True) if self.typo_fi.State: n += self._replaceText(xElem, "fi", "fi", False, True) if self.typo_fl.State: n += self._replaceText(xElem, "fl", "fl", False, True) if self.typo_ff.State: n += self._replaceText(xElem, "ff", "ff", False, True) if self.typo_ft.State: n += self._replaceText(xElem, "ft", "ſt", False, True) if self.typo_st.State: n += self._replaceText(xElem, "st", "st", False, True) if self.typo8b.State: if self.typo_fi.State: n += self._replaceText(xElem, "fi", "fi", False, True) if self.typo_fl.State: n += self._replaceText(xElem, "fl", "fl", False, True) if self.typo_ff.State: n += self._replaceText(xElem, "ff", "ff", False, True) if self.typo_ffi.State: n += self._replaceText(xElem, "ffi", "ffi", False, True) if self.typo_ffl.State: n += self._replaceText(xElem, "ffl", "ffl", False, True) if self.typo_ft.State: n += self._replaceText(xElem, "ſt", "ft", False, True) if self.typo_st.State: n += self._replaceText(xElem, "st", "st", False, True) self.typo8_res.Label = str(n) self.pbar.ProgressValue += 1 self.typo.State = False self._switchCheckBox(self.typo) self.pbar.ProgressValue = 28 # divers if self.misc.State: if self.misc1.State: if self.misc1a.State: n = self._replaceText(xElem, "(?<=\\b[0-9][0-9][0-9][0-9])(i?[èe]me|è|e)\\b", "ᵉ", True) n += self._replaceText(xElem, "(?<=\\b[0-9][0-9][0-9])(i?[èe]me|è|e)\\b", "ᵉ", True) n += self._replaceText(xElem, "(?<=\\b[0-9][0-9])(i?[èe]me|è|e)\\b", "ᵉ", True) n += self._replaceText(xElem, "(?<=\\b[0-9])(i?[èe]me|è|e)\\b", "ᵉ", True) n += self._replaceText(xElem, "(?<=\\b[XVICL][XVICL][XVICL][XVICL])(i?[èe]me|è|e)\\b", "ᵉ", True, True) n += self._replaceText(xElem, "(?<=\\b[XVICL][XVICL][XVICL])(i?[èe]me|è|e)\\b", "ᵉ", True, True) n += self._replaceText(xElem, "(?<=\\b[XVICL][XVICL])(i?[èe]me|è|e)\\b", "ᵉ", True, True) n += self._replaceText(xElem, "(?<=\\b[XVICL])(i?[èe]me|è)\\b", "ᵉ", True, True) n += self._replaceText(xElem, "(?<=\\b(au|l[ea]|du) [XVICL])e\\b", "ᵉ", True, True) n += self._replaceText(xElem, "(?<=\\b[XVI])e(?= siècle)", "ᵉ", True, True) n += self._replaceText(xElem, "(?<=\\b[1I])er\\b", "ᵉʳ", True, True) n += self._replaceText(xElem, "(?<=\\b[1I])re\\b", "ʳᵉ", True, True) else: n = self._replaceText(xElem, "(?<=\\b[0-9][0-9][0-9][0-9])(i?[èe]me|è|ᵉ)\\b", "e", True) n += self._replaceText(xElem, "(?<=\\b[0-9][0-9][0-9])(i?[èe]me|è|ᵉ)\\b", "e", True) n += self._replaceText(xElem, "(?<=\\b[0-9][0-9])(i?[èe]me|è|ᵉ)\\b", "e", True) n += self._replaceText(xElem, "(?<=\\b[0-9])(i?[èe]me|è|ᵉ)\\b", "e", True) n += self._replaceText(xElem, "(?<=\\b[XVICL][XVICL][XVICL][XVICL])(i?[èe]me|è|ᵉ)\\b", "e", True, True) n += self._replaceText(xElem, "(?<=\\b[XVICL][XVICL][XVICL])(i?[èe]me|è|ᵉ)\\b", "e", True, True) n += self._replaceText(xElem, "(?<=\\b[XVICL][XVICL])(i?[èe]me|è|ᵉ)\\b", "e", True, True) n += self._replaceText(xElem, "(?<=\\b[XVICL])(i?[èe]me|è|ᵉ)\\b", "e", True, True) n += self._replaceText(xElem, "(?<=\\b[1I])ᵉʳ\\b", "er", True, True) n += self._replaceText(xElem, "(?<=\\b[1I])ʳᵉ\\b", "er", True, True) self.misc1_res.Label = str(n) self.pbar.ProgressValue += 1 if self.misc2.State: n = self._replaceText(xElem, "etc(…|[.][.][.]?)", "etc.", True, True) n += self._replaceText(xElem, "(?<!,) etc[.]", ", etc.", True, True) self.misc2_res.Label = str(n) self.pbar.ProgressValue += 1 if self.misc3.State: n = self._replaceText(xElem, "[ -]t[’'](?=il\\b|elle|on\\b)", "-t-", True) n += self._replaceText(xElem, " t-(?=il|elle|on)", "-t-", True) n += self._replaceText(xElem, "[ -]t[’'-](?=ils|elles)", "-", True) n += self._replaceText(xElem, "(?<=[td])-t-(?=il|elle|on)", "-", True) n += self._replaceText(xElem, "(celles?|celui|ceux) (ci|là)\\b", "$1-$2", True) n += self._replaceText(xElem, "\\bdix (sept|huit|neuf)", "dix-$1", True) n += self._replaceText(xElem, "quatre vingt", "quatre-vingt", False) n += self._replaceText(xElem, "(soixante|quatre-vingt) dix", "$1-dix", True) n += self._replaceText(xElem, "(vingt|trente|quarante|cinquante|soixante(?:-dix|)|quatre-vingt(?:-dix|)) (deux|trois|quatre|cinq|six|sept|huit|neuf)", "$1-$2", True) n += self._replaceText(xElem, "(?<!-)\\b(ci) (joint|desso?us|contre|devant|avant|après|incluse|g[îi]t|gisent)", "$1-$2", True) n += self._replaceText(xElem, "\\bvis à vis", "vis-à-vis", False, True) n += self._replaceText(xElem, "\\bVis à vis", "Vis-à-vis", False, True) n += self._replaceText(xElem, "week end", "week-end", False, True) n += self._replaceText(xElem, "Week end", "Week-end", False, True) n += self._replaceText(xElem, "(plus|moins) value", "$1-value", True) self.misc3_res.Label = str(n) self.pbar.ProgressValue += 1 if self.misc5.State: n = self._replaceText(xElem, "(qu|lorsqu|puisqu|quoiqu|presqu|jusqu|aujourd|entr|quelqu) ", "$1’", True, True) if self.misc5b.State: n += self._replaceText(xElem, "\\bj (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "j’", True, True) n += self._replaceText(xElem, "\\bn (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "n’", True, True) n += self._replaceText(xElem, "\\bm (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "m’", True, True) n += self._replaceText(xElem, "\\bt (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "t’", True, True) n += self._replaceText(xElem, "\\bs (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "s’", True, True) n += self._replaceText(xElem, "\\bc (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "c’", True, True) n += self._replaceText(xElem, "\\bç (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "ç’", True, True) n += self._replaceText(xElem, "\\bl (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "l’", True, True) n += self._replaceText(xElem, "\\bd (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "d’", True, True) if self.misc5c.State: n += self._replaceText(xElem, "\\bJ (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "J’", True, True) n += self._replaceText(xElem, "\\bN (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "N’", True, True) n += self._replaceText(xElem, "\\bM (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "M’", True, True) n += self._replaceText(xElem, "\\bT (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "T’", True, True) n += self._replaceText(xElem, "\\bS (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "S’", True, True) n += self._replaceText(xElem, "\\bC (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "C’", True, True) n += self._replaceText(xElem, "\\bÇ (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "Ç’", True, True) n += self._replaceText(xElem, "\\bL (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "L’", True, True) n += self._replaceText(xElem, "\\bD (?=[aàeéêiîoôuyhAÀEÉÊIÎOÔUYH])", "D’", True, True) self.misc5_res.Label = str(n) self.pbar.ProgressValue += 1 self.misc.State = False self._switchCheckBox(self.misc) self.pbar.ProgressValue = self.pbar.ProgressValueMax # end of processing xPointer.setType(uno.getConstantByName("com.sun.star.awt.SystemPointer.ARROW")) xWindowPeer.setPointer(xPointer) for x in xWindowPeer.Windows: x.setPointer(xPointer) self.xContainer.setVisible(True) # seems necessary to refresh the dialog box and text widgets (why?) nEndTime = time.clock() self.time_res.Label = getTimeRes(nEndTime-nStartTime) except: traceback.print_exc() def _replaceText (self, xElem, sPattern, sRep, bRegex, bCaseSensitive=False): try: xRD = xElem.createReplaceDescriptor() xRD.SearchString = sPattern xRD.ReplaceString = sRep xRD.SearchRegularExpression = bRegex xRD.SearchCaseSensitive = bCaseSensitive return xElem.replaceAll(xRD) except: traceback.print_exc() return 0 def _replaceHyphenAtEndOfParagraphs (self, xDoc): self._replaceText(xDoc, "-[ ]+$", "-", True) # remove spaces at end of paragraphs if - is the last character xHunspell = self.xSvMgr.createInstanceWithContext("com.sun.star.linguistic2.SpellChecker", self.ctx) xCursor = xDoc.Text.createTextCursor() xCursor.gotoStart(False) n = 0 while xCursor.gotoNextParagraph(False): xCursor.goLeft(2, True) if xCursor.String.startswith("-"): xCursor.gotoStartOfWord(False) xLocale = xCursor.CharLocale xCursor.gotoEndOfWord(True) sWord1 = xCursor.String xCursor.gotoNextParagraph(False) xCursor.gotoEndOfWord(True) sWord2 = xCursor.String if sWord1 and sWord2 and xHunspell.isValid(sWord1+sWord2, xLocale, ()): xCursor.gotoStartOfParagraph(False) xCursor.goLeft(2, True) xCursor.setString("") n += 1 else: xCursor.goRight(2, False) return n def _mergeContiguousParagraphs (self, xDoc): self._replaceText(xDoc, "^[ ]+$", "", True) # clear empty paragraphs xCursor = xDoc.Text.createTextCursor() xCursor.gotoStart(False) n = 0 try: while xCursor.gotoNextParagraph(False): xCursor.gotoEndOfParagraph(True) if xCursor.String != "": xCursor.gotoStartOfParagraph(False) xCursor.goLeft(1, True) xCursor.setString(" ") n += 1 except: traceback.print_exc() self._replaceText(xDoc, " +", " ", True) return n def _replaceBulletsByEmDash (self, xDoc): xCursor = xDoc.Text.createTextCursor() helpers.xray(xCursor) xCursor.gotoStart(False) sParaStyleName = "" if not self.delete2c.State: sParaStyleName = "Standard" if self.delete2a.State else "Text body" n = 0 try: if xCursor.NumberingStyleName != "": xCursor.NumberingStyleName = "" if sParaStyleName: xCursor.ParaStyleName = sParaStyleName xDoc.Text.insertString(xCursor, "— ", False) n += 1 while xCursor.gotoNextParagraph(False): if xCursor.NumberingStyleName != "": xCursor.NumberingStyleName = "" if sParaStyleName: xCursor.ParaStyleName = sParaStyleName xDoc.Text.insertString(xCursor, "— ", False) n += 1 except: traceback.print_exc() return n def getTimeRes (n): "returns duration in seconds as string" if n < 10: return "{:.3f} s".format(n) if n < 100: return "{:.2f} s".format(n) if n < 1000: return "{:.1f} s".format(n) return str(int(n)) + " s" #g_ImplementationHelper = unohelper.ImplementationHelper() #g_ImplementationHelper.addImplementation(TextFormatter, 'dicollecte.TextFormatter', ('com.sun.star.task.Job',)) |
Added gc_lang/fr/oxt/TextFormatter/tf_options.py version [2ffb289615].
> > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | dDefaultOpt = { 'ssp': 1, 'ssp1': 1, 'ssp2': 1, 'ssp3': 1, 'ssp4': 1, 'ssp5': 1, 'ssp6': 1, 'ssp7': 1, 'nbsp': 1, 'nbsp1': 1, 'nbsp2': 1, 'nbsp3': 1, 'nbsp4': 1, 'nbsp5': 1, 'nnbsp1': 0, 'nnbsp2': 0, 'nnbsp4': 0, 'space': 1, 'space1': 1, 'space2': 1, 'delete': 0, 'delete1': 1, 'delete2': 1, 'delete2a': 0, 'delete2b': 1, 'delete2c': 0, 'typo': 1, 'typo1': 1, 'typo2': 1, 'typo3': 1, 'typo4': 1, 'typo5': 1, 'typo6': 1, 'typo7': 1, 'typo8': 0, 'typo3a': 0, 'typo3b': 1, 'typo4a': 1, 'typo4b': 0, 'typo8a': 0, 'typo8b': 1, 'typo_ff': 1, 'typo_fi':1, 'typo_ffi':1, 'typo_fl':1, 'typo_ffl':1, 'typo_ft':1, 'typo_st': 1, 'misc': 1, 'misc1': 1, 'misc2': 1, 'misc3': 1, 'misc5': 1, 'misc1a': 0, 'misc5b': 0, 'misc5c': 0, 'struct': 0, 'struct1': 1, 'struct2': 1, 'struct3': 0, } dOpt = { 'ssp': 1, 'ssp1': 1, 'ssp2': 1, 'ssp3': 1, 'ssp4': 1, 'ssp5': 1, 'ssp6': 1, 'ssp7': 1, 'nbsp': 1, 'nbsp1': 1, 'nbsp2': 1, 'nbsp3': 1, 'nbsp4': 1, 'nbsp5': 1, 'nnbsp1': 0, 'nnbsp2': 0, 'nnbsp4': 0, 'space': 1, 'space1': 1, 'space2': 1, 'delete': 0, 'delete1': 1, 'delete2': 1, 'delete2a': 0, 'delete2b': 1, 'delete2c': 0, 'typo': 1, 'typo1': 1, 'typo2': 1, 'typo3': 1, 'typo4': 1, 'typo5': 1, 'typo6': 1, 'typo7': 1, 'typo8': 0, 'typo3a': 0, 'typo3b': 1, 'typo4a': 1, 'typo4b': 0, 'typo8a': 0, 'typo8b': 1, 'typo_ff': 1, 'typo_fi':1, 'typo_ffi':1, 'typo_fl':1, 'typo_ffl':1, 'typo_ft':1, 'typo_st': 1, 'misc': 1, 'misc1': 1, 'misc2': 1, 'misc3': 1, 'misc5': 1, 'misc1a': 0, 'misc5b': 0, 'misc5c': 0, 'struct': 0, 'struct1': 1, 'struct2': 1, 'struct3': 0, } |
Added gc_lang/fr/oxt/TextFormatter/tf_strings.py version [a143dd1d82].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | # -*- encoding: UTF-8 -*- def getUI (sLang): if sLang in dStrings: return dStrings[sLang] return dStrings["fr"] dStrings = { "fr": { "title": "Grammalecte · Formateur de texte [Français]", "ssp": "Espaces ~surnuméraires", "ssp1": "En début de paragraphe", "ssp2": "Entre les mots", "ssp3": "En fin de paragraphe", "ssp4": "Avant les points (.), les virgules (,)", "ssp5": "À l’intérieur des parenthèses", "ssp6": "À l’intérieur des crochets", "ssp7": "À l’intérieur des guillemets “ et ”", "space": "Espaces ~manquants", "space1": "Après , ; : ? ! . …", "space2": "Autour des tirets d’incise", "nbsp": "Espaces ~insécables", "nbsp1": "Avant : ; ? et !", "nbsp2": "Avec les guillemets « et »", "nbsp3": "Avant % ‰ € $ £ ¥ ˚C", "nbsp4": "À l’intérieur des nombres", "nbsp5": "Avant les unités de mesure", "nnbsp": "fins", "nnbsp_help": "sauf avec “:”", "delete": "Su~ppressions", "delete1": "Tirets conditionnels", "delete2": "Puces → tirets cadratins + style :", "delete2a": "Standard", "delete2b": "Corps de texte", "delete2c": "Ø", "delete2c_help": "Pas de changement", "typo": "Signes ~typographiques", "typo1": "Apostrophe (’)", "typo2": "Points de suspension (…)", "typo3": "Tirets d’incise :", "typo4": "Tirets en début de paragraphe :", "emdash": "cadratin (—)", "endash": "demi-cadratin (–)", "typo5": "Modifier les guillemets droits (\" et ')", "typo6": "Points médians des unités (N·m, Ω·m…)", "typo7": "Ligatures (cœur…) et diacritiques (ça, Égypte…)", "typo8": "Ligatures", "typo8_help": "Avertissement : de nombreuses polices ne contiennent pas ces caractères.", "typo8a": "Faire", "typo8b": "Défaire", "typo_ff": "ff", "typo_fi": "fi", "typo_ffi": "ffi", "typo_fl": "fl", "typo_ffl": "ffl", "typo_ft": "ft", "typo_st": "st", "misc": "~Divers", "misc1": "Ordinaux (15e, XXIe…)", "misc1a": "e → ᵉ", "misc2": "Et cætera, etc.", "misc3": "Traits d’union manquants", "misc5": "Apostrophes manquantes", "misc5b": "lettres isolées (j’ n’ m’ t’ s’ c’ d’ l’)", "misc5c": "Maj.", "struct": "~Restructuration [!]", "struct_help": "Attention : la restructuration coupe ou fusionne les paragraphes.", "struct1": "Retour à la ligne ⇒ fin de paragraphe", "struct2": "Enlever césures en fin de ligne/paragraphe", "struct3": "Fusionner les paragraphes contigus [!]", "struct3_help": "Concatène tous les paragraphes non séparés par un paragraphe vide.\nAttention : LibreOffice et OpenOffice ne peuvent accepter des paragraphes de plus de 65535 caractères, ce qui fait environ 12 pages avec une police de taille 12. Un dépassement de cette limite fera planter le logiciel. À partir de LibreOffice 4.3, cette limitation n’existe plus.", "default": "[·]", "default_help": "Options par défaut", "bsel": "Sur la sélection active", "apply": "~Appliquer", "close": "~Fermer", "info": "(i)", "infotitle": "Informations", "infomsg": "Le formateur de texte est un outil qui automatise la correction d’erreurs typographiques en employant le moteur interne “Chercher & remplacer” de Writer.\n\nUtilisez l’outil avec prudence. À cause de certaines limitations, le formateur ne peut gérer tous les cas. Vérifiez votre texte après emploi." }, "en": { "title": "Grammalecte · Text Formatter [French]", "ssp": "~Supernumerary spaces", "ssp1": "At the beginning of paragraph", "ssp2": "Between words", "ssp3": "At the end of paragraph", "ssp4": "Before dots (.), commas (,)", "ssp5": "Within parenthesis", "ssp6": "Within square brackets", "ssp7": "Within “ and ”", "space": "~Missing spaces", "space1": "After , ; : ? ! . …", "space2": "Surrounding dashes", "nbsp": "~Non-breaking spaces ", "nbsp1": "Before : ; ? and !", "nbsp2": "With quoting marks « and »", "nbsp3": "Before % ‰ € $ £ ¥ ˚C", "nbsp4": "Within numbers", "nbsp5": "Before units of measurement", "nnbsp": "narrow", "nnbsp_help": "except with “:”", "delete": "~Deletions", "delete1": "Soft hyphens", "delete2": "Bullets → em-dash + style:", "delete2a": "Standard", "delete2b": "Text Body", "delete2c": "Ø", "delete2c_help": "No change", "typo": "~Typographical signs", "typo1": "Apostrophe (’)", "typo2": "Ellipsis (…)", "typo3": "Dashes:", "typo4": "Dashes at beginning of paragraph:", "emdash": "em dash (—)", "endash": "en dash (–)", "typo5": "Change quotation marks (\" and ')", "typo6": "Interpuncts in units (N·m, Ω·m…)", "typo7": "Ligatures (cœur…) and diacritics (ça, Égypte…)", "typo8": "Ligatures", "typo8_help": "Warning: many fonts don’t contain these characters.", "typo8a": "Set", "typo8b": "Unset", "typo_ff": "ff", "typo_fi": "fi", "typo_ffi": "ffi", "typo_fl": "fl", "typo_ffl": "ffl", "typo_ft": "ft", "typo_st": "st", "misc": "M~iscellaneous", "misc1": "Ordinals (15e, XXIe…)", "misc1a": "e → ᵉ", "misc2": "Et cætera, etc.", "misc3": "Missing hyphens", "misc5": "Missing apostrophes", "misc5b": "single letters (j’ n’ m’ t’ s’ c’ d’ l’)", "misc5c": "Cap.", "struct": "~Restructuration [!]", "struct_help": "Caution: Restructuration cuts or merges paragraphs.", "struct1": "End of line ⇒ end of paragraph", "struct2": "Remove syllabification hyphens at EOL/EOP", "struct3": "Merge contiguous paragraphs [!]", "struct3_help": "Concatenate all paragraphs not separated by an empty paragraph.\nCaution: LibreOffice and OpenOffice can’t deal with paragraphs longer than 65,535 characters, which is about 12 pages with font size 12. Overstepping this limit will crash the software. For LibreOffice 4.3 and beyond, this limitation doesn’t exist any more.", "default": "[·]", "default_help": "Default options", "bsel": "On current selection", "apply": "~Apply", "close": "~Close", "info": "(i)", "infotitle": "Informations", "infomsg": "The text formatter is a tool which automates correction of typographical errors by using the internal engine “Search & replace” of Writer.\n\nUse this tool with caution. Due to several limitations, it cannot handle all cases. Check your text after use." } } |
Added gc_lang/fr/oxt/_img/LaMouette_small.png version [6778e9b924].
cannot compute difference between binary files
Added gc_lang/fr/oxt/_img/french_flag_16.bmp version [00986ef7e9].
cannot compute difference between binary files
Added gc_lang/fr/oxt/_img/grammalecte_16.bmp version [2eb0d26658].
cannot compute difference between binary files
Added gc_lang/fr/oxt/_img/logo100.png version [137b3e197f].
cannot compute difference between binary files
Added gc_lang/fr/oxt/addons.xcu version [1d834d2bae].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 | <?xml version="1.0" encoding="UTF-8"?> <oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:package="org.openoffice.Office" oor:name="Addons"> <node oor:name="AddonUI"> <!-- https://wiki.openoffice.org/wiki/Documentation/DevGuide/WritingUNO/AddOns/Images_for_Toolbars_and_Menus --> <node oor:name="Images"> <node oor:name="org.dicollecte.images.grammalecte" oor:op="replace"> <prop oor:name="URL" oor:type="xs:string"> <value>org.dicollecte.images:Grammalecte</value> </prop> <node oor:name="UserDefinedImages"> <prop oor:name="ImageSmall"> <value>424D360400000000000036000000280000001000000010000000010020000000000000000000C30E0000C30E0000000000000000000000000000000000000000000000000000000000000000000000000000BFA0746EBFA0746700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BFA07451FFD59BFEFFD59BFEBFA0746700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040352708FFD59BB7FFD59BFFFFD59BFEBFA07467000000000000000000000000000000000000000000000000000000000000000000000000BFA07468BFA074300000000040352708FFD59BB7FFD59BFFFFD59BFEBFA0746700000000000000000000000000000000000000000000000000000000BFA0746FFFD59BFEFFD59BEC806B4E260000000040352708FFD59BB7FFD59BFFFFD59BFEBFA074670000000000000000000000000000000000000000BFA0746FFFD59BFEFFD59BFFFFD59BB040352706000000000000000040352708FFD59BB7FFD59BFFFFD59BFEBFA07467000000000000000000000000BFA0746FFFD59BFEFFD59BFFFFD59BB04035270600000000BFA07435BFA074300000000040352708FFD59BB7FFD59BFFFFD59BFEBFA0746700000000BFA0746EFFD59BFEFFD59BFFFFD59BB14035270600000000BFA07434FFD59BEFFFD59BECBFA0742F0000000040352708FFD59BB7FFD59BFFFFD59BFEBFA07466BFA07455FFD59BFBFFD59BFFFFD59BC54035270E00000000BFA07424FFD59BE3FFD59BDF403527200000000040352711FFD59BCBFFD59BFFFFD59BF9BFA0744E00000000BFA07455FFD59BFBFFD59BFFFFD59BC54035270E00000000806B4E24403527200000000040352711FFD59BCBFFD59BFFFFD59BF9BFA0744E000000000000000000000000BFA07455FFD59BFBFFD59BFFFFD59BC54035270E000000000000000040352711FFD59BCBFFD59BFFFFD59BF9BFA0744E0000000000000000000000000000000000000000BFA07455FFD59BFBFFD59BFFFFD59BC54035270E00000000806B4E22FFD59BE3FFD59BF9BFA0744E00000000000000000000000000000000000000000000000000000000BFA07455FFD59BFBFFD59BFFFFD59BC54035270E00000000BFA07424BFA0744A000000000000000000000000000000000000000000000000000000000000000000000000BFA07455FFD59BFBFFD59BFFFFD59BC54035270E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BFA07455FFD59BFBFFD59BF9BFA0744100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BFA07455BFA0744E00000000000000000000000000000000000000000000000000000000</value> </prop> </node> </node> <node oor:name="org.dicollecte.images.frenchflag" oor:op="replace"> <prop oor:name="aURL" oor:type="xs:string"> <value>org.dicollecte.images:Frenchflag</value> </prop> <node oor:name="UserDefinedImages"> <prop oor:name="ImageSmall"> <value>424D360400000000000036000000280000001000000010000000010020000000000000000000C30E0000C30E00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00640B01FF750D02FF710D02FF720E03FF720800FF734C47FF747B7CFF747272FF727274FF7C7C76FF444469FF000058FF010159FF000059FF00005BFF00004CFF981203FFB51503FFAD1503FFAD1705FFAD0D00FFAE736CFFB0BABBFFB0AEADFFADADAFFFBBBBB2FF67679FFF000087FF020289FF000087FF00008BFF000073FF9C1203FFBC1704FFB51604FFB21705FFB10E00FFB3766FFFB4BFC0FFB4B2B1FFB1B1B3FFC0C0B7FF6969A3FF000089FF02028BFF00008AFF00008EFF000075FFA31403FFC51904FFC01804FFC01905FFBB0E00FFBC7C75FFBEC9CAFFBEBCBBFFBABABDFFCACAC0FF6F6FACFF000090FF020293FF000091FF000095FF00007CFFAB1504FFCE1A05FFC81905FFCA1B07FFC91000FFC7837BFFC6D2D3FFC5C2C2FFC2C2C5FFD3D3C8FF7373B3FF000098FF02029BFF000099FF00009DFF000082FFB21604FFD61B05FFD11A05FFD21C07FFD21100FFD58C84FFD4E0E2FFD0CDCDFFCBCBCDFFDCDCD1FF7A7ABBFF00009CFF0202A0FF00009EFF0000A2FF000087FFBA1704FFE01C05FFDA1B05FFDB1D07FFDA1100FFDD9289FFDFECEDFFDEDBDAFFD7D7D9FFE6E6DAFF7E7EC3FF0000A3FF0303A7FF0000A5FF0000A9FF00008CFFC11704FFE91D05FFE31C05FFE31E07FFE31200FFE6978FFFE8F5F7FFE8E5E4FFE4E4E7FFF5F5E9FF8585CCFF0000ACFF0303AFFF0000AEFF0000B2FF000093FFC91804FFF21E05FFEC1D05FFED1F08FFEC1300FFEF9E95FFF1FFFFFFF1EEEDFFEDEDF0FFFFFFF5FF8E8EDAFF0000B6FF0303B8FF0000B4FF0000B7FF000098FFCE1B07FFF82108FFF22008FFF3220BFFF31600FFF4A197FFF4FFFFFFF4F1F0FFF0F0F3FFFFFFF7FF8F8FDFFF0000BEFF0303C1FF0000C0FF0000C3FF0000A0FFD82916FFFF321BFFFE311AFFFF331CFFFF270EFFFFAEA5FFFFFFFFFFFFFCFCFFFBFBFEFFFFFFFFFF9A9AEEFF0000D3FF0C0CD5FF0909D4FF0909DAFF0808B4FFB74F44FFDD5F52FFD75D50FFD85E51FFD85749FFD8A8A2FFD8E0E1FFD8D6D6FFD6D6D8FFE2E2DAFF9B9BCFFF3C3CC1FF4646C2FF4444C1FF4545C5FF3A3AA4FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00</value> </prop> </node> </node> </node> <node oor:name="OfficeMenuBar"> <node oor:name="dicollecte.Tools" oor:op="replace"> <prop oor:name="Title" oor:type="xs:string"> <value/> <value xml:lang="fr">~Grammalecte</value> <value xml:lang="en-US">~Grammalecte</value> </prop> <prop oor:name="Target" oor:type="xs:string"> <value>_self</value> </prop> <node oor:name="Submenu"> <node oor:name="m1" oor:op="replace"> <prop oor:name="URL" oor:type="xs:string"> <value>service:net.grammalecte.AppLauncher?TF</value> </prop> <prop oor:name="Title" oor:type="xs:string"> <value/> <value xml:lang="fr">~Formateur de texte…</value> <value xml:lang="en-US">Text ~Formatter…</value> </prop> <prop oor:name="Context" oor:type="xs:string"> <value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument</value> </prop> </node> <node oor:name="m2" oor:op="replace"> <prop oor:name="URL" oor:type="xs:string"> <value>service:net.grammalecte.AppLauncher?CJ</value> </prop> <prop oor:name="Title" oor:type="xs:string"> <value/> <value xml:lang="fr">~Conjugueur…</value> <value xml:lang="en-US">~Conjugator…</value> </prop> <prop oor:name="Target" oor:type="xs:string"> <value>_self</value> </prop> <prop oor:name="Context" oor:type="xs:string"> <value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument,com.sun.star.presentation.PresentationDocument</value> </prop> </node> <node oor:name="m3" oor:op="replace"> <!--<prop oor:name="URL" oor:type="xs:string"> <value>vnd.sun.star.script:basiclib.Module1.EditAuthorField?language=Basic&location=application</value> </prop>--> <prop oor:name="URL" oor:type="xs:string"> <value>service:net.grammalecte.AppLauncher?MA</value> </prop> <prop oor:name="Title" oor:type="xs:string"> <value/> <value xml:lang="fr">~Modifier le champ “Auteur”…</value> <value xml:lang="en-US">~Modify the field “Author”…</value> </prop> <prop oor:name="Target" oor:type="xs:string"> <value>_self</value> </prop> <prop oor:name="Context" oor:type="xs:string"> <value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument</value> </prop> </node> <node oor:name="m4" oor:op="replace"> <prop oor:name="URL" oor:type="xs:string"> <value>private:separator</value> </prop> <prop oor:name="Context" oor:type="xs:string"> <value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument,com.sun.star.presentation.PresentationDocument</value> </prop> </node> <node oor:name="m5" oor:op="replace"> <prop oor:name="URL" oor:type="xs:string"> <value>service:net.grammalecte.AppLauncher?OP</value> </prop> <!--<prop oor:name="URL" oor:type="xs:string"> <value>.uno:OptionsTreeDialog?OptionsPageURL:string=%origin%/dialog/fr.xdl</value> </prop>--> <prop oor:name="Title" oor:type="xs:string"> <value/> <value xml:lang="fr">Options ~grammaticales…</value> <value xml:lang="en-US">~Grammar options…</value> </prop> <prop oor:name="Target" oor:type="xs:string"> <value>_self</value> </prop> <prop oor:name="Context" oor:type="xs:string"> <value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument</value> </prop> <prop oor:name="ImageIdentifier" oor:type="xs:string"> <value>org.dicollecte.images:Grammalecte</value> </prop> </node> <node oor:name="m6" oor:op="replace"> <prop oor:name="URL" oor:type="xs:string"> <value>service:net.grammalecte.AppLauncher?DS</value> </prop> <prop oor:name="Title" oor:type="xs:string"> <value/> <value xml:lang="fr">~Options orthographiques…</value> <value xml:lang="en-US">Spelling ~options…</value> </prop> <prop oor:name="Target" oor:type="xs:string"> <value>_self</value> </prop> <prop oor:name="Context" oor:type="xs:string"> <value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument,com.sun.star.presentation.PresentationDocument</value> </prop> <prop oor:name="ImageIdentifier" oor:type="xs:string"> <value>org.dicollecte.images:Frenchflag</value> </prop> </node> <node oor:name="m7" oor:op="replace"> <prop oor:name="URL" oor:type="xs:string"> <value>private:separator</value> </prop> <prop oor:name="Context" oor:type="xs:string"> <value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument,com.sun.star.presentation.PresentationDocument</value> </prop> </node> <node oor:name="m8" oor:op="replace"> <prop oor:name="URL" oor:type="xs:string"> <value>service:net.grammalecte.AppLauncher?About</value> </prop> <prop oor:name="Title" oor:type="xs:string"> <value/> <value xml:lang="fr">À ~propos de Grammalecte…</value> <value xml:lang="en-US">~About Grammalecte…</value> </prop> <prop oor:name="Context" oor:type="xs:string"> <value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument,com.sun.star.presentation.PresentationDocument</value> </prop> </node> </node> </node> </node> <node oor:name="OfficeMenuBarMerging"> <!--<node oor:name="TextFormatter.from.Dicollecte.by.OlivierR" oor:op="replace"> <node oor:name="S1" oor:op="replace"> <prop oor:name="MergePoint"> <value>.uno:ToolsMenu\.uno:WordCountDialog</value> </prop> <prop oor:name="MergeCommand"> <value>AddAfter</value> </prop> <prop oor:name="MergeFallback"> <value>AddPath</value> </prop> <prop oor:name="MergeContext" oor:type="xs:string"> <value>com.sun.star.text.TextDocument</value> </prop> <node oor:name="MenuItems"> <node oor:name="M1" oor:op="replace"> <prop oor:name="Title" oor:type="xs:string"> <value xml:lang="en-US">Text Formatter…</value> <value xml:lang="fr">Formateur de texte…</value> </prop> <prop oor:name="URL" oor:type="xs:string"> <value>service:dicollecte.TextFormatter</value> </prop> <prop oor:name="Target" oor:type="xs:string"> <value>_self</value> </prop> </node> </node> </node> </node>--> <node oor:name="org.openoffice.Office.addon.FrenchDictionarySwitcher" oor:op="replace"> <node oor:name="S1" oor:op="replace"> <prop oor:name="MergePoint"> <value>.uno:ToolsMenu\.uno:LanguageMenu\.uno:Hyphenate</value> </prop> <prop oor:name="MergeCommand"> <value>AddAfter</value> </prop> <prop oor:name="MergeFallback"> <value>AddPath</value> </prop> <node oor:name="MenuItems"> <node oor:name="M1" oor:op="replace"> <prop oor:name="Context" oor:type="xs:string"> <value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument,com.sun.star.presentation.PresentationDocument</value> </prop> <prop oor:name="Title" oor:type="xs:string"> <value/> <value xml:lang="en-US">French spelling dictionaries…</value> <value xml:lang="fr">Dictionnaires orthographiques français…</value> </prop> <prop oor:name="URL" oor:type="xs:string"> <value>service:net.grammalecte.AppLauncher?DS</value> </prop> <prop oor:name="Target" oor:type="xs:string"> <value>_self</value> </prop> <!--<prop oor:name="ImageIdentifier" oor:type="xs:string"> <value>%origin%/img/french_flag</value> </prop>--> </node> </node> </node> </node> </node> </node> </oor:component-data> |
Added gc_lang/fr/oxt/grammalecte.update.xml version [d312318716].
> > > > > > > > | 1 2 3 4 5 6 7 8 | <?xml version="1.0" encoding="UTF-8"?> <description xmlns="http://openoffice.org/extensions/update/2006" xmlns:xlink="http://www.w3.org/1999/xlink"> <identifier value="org.openoffice.comp.pyuno.lightproof.oxt.grammalecte"/> <version value="0.2.8" /> <update-download> <src xlink:href="http://www.dicollecte.org/grammalecte/oxt/old/Grammalecte-v0.2.8.oxt" /> </update-download> </description> |
Added gc_lang/fr/oxt/grammalecte.update03.xml version [1f181b7e63].
> > > > > > > > | 1 2 3 4 5 6 7 8 | <?xml version="1.0" encoding="UTF-8"?> <description xmlns="http://openoffice.org/extensions/update/2006" xmlns:xlink="http://www.w3.org/1999/xlink"> <identifier value="French.linguistic.resources.from.Dicollecte.by.OlivierR"/> <version value="0.3.3" /> <update-download> <src xlink:href="http://www.dicollecte.org/grammalecte/oxt/old/Grammalecte-v0.3.3.oxt" /> </update-download> </description> |
Added gc_lang/fr/oxt/helpers.py version [3ebcc78813].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | # -*- coding: utf8 -*- import uno import traceback from com.sun.star.beans import PropertyValue # XRay - API explorer from com.sun.star.uno import RuntimeException as _rtex def xray (myObject): try: sm = uno.getComponentContext().ServiceManager mspf = sm.createInstanceWithContext("com.sun.star.script.provider.MasterScriptProviderFactory", uno.getComponentContext()) scriptPro = mspf.createScriptProvider("") xScript = scriptPro.getScript("vnd.sun.star.script:XrayTool._Main.Xray?language=Basic&location=application") xScript.invoke((myObject,), (), ()) return except: raise _rtex("\nBasic library Xray is not installed", uno.getComponentContext()) # MRI - API Explorer def mri (ctx, xTarget): try: xMri = ctx.ServiceManager.createInstanceWithContext("mytools.Mri", ctx) xMri.inspect(xTarget) except: raise _rtex("\Python extension MRI is not installed", uno.getComponentContext()) def getConfigSetting (sNodeConfig, bUpdate): "get a configuration node" # example: xNode = getConfigSetting("/org.openoffice.Office.Common/Path/Current", False) xSvMgr = uno.getComponentContext().ServiceManager xConfigProvider = xSvMgr.createInstanceWithContext("com.sun.star.configuration.ConfigurationProvider", uno.getComponentContext()) xPropertyValue = uno.createUnoStruct("com.sun.star.beans.PropertyValue") xPropertyValue.Name = "nodepath" xPropertyValue.Value = sNodeConfig if bUpdate: sService = "com.sun.star.configuration.ConfigurationUpdateAccess" else: sService = "com.sun.star.configuration.ConfigurationAccess" return xConfigProvider.createInstanceWithArguments(sService, (xPropertyValue,)) # return xNode def printServices (o): for s in o.getAvailableServiceNames(): print(' > '+s) def getWindowSize (): "return main window size" xCurCtx = uno.getComponentContext() xDesktop = xCurCtx.getServiceManager().createInstanceWithContext('com.sun.star.frame.Desktop', xCurCtx) xContainerWindow = xDesktop.getCurrentComponent().CurrentController.Frame.ContainerWindow xWindowSize = xContainerWindow.convertSizeToLogic(xContainerWindow.Size, uno.getConstantByName("com.sun.star.util.MeasureUnit.POINT")) #print(xContainerWindow.Size.Width, ">", xWindowSize.Width) #print(xContainerWindow.Size.Height, ">", xWindowSize.Height) xWindowSize.Width = xWindowSize.Width * 0.666 xWindowSize.Height = xWindowSize.Height * 0.666 return xWindowSize |
Added gc_lang/fr/oxt/package-description.txt version [03d52b8e2d].
> > > > | 1 2 3 4 | Grammalecte : ${version} Dictionnaires orthographiques : ${oxt_version} Dictionnaire des synonymes : 2.3 Règles de césure : 3.0 |
Added gc_lang/fr/rules.grx version [c3cae4f545].
more than 10,000 changes
Added gc_lang/fr/tb/README.txt version [2d1b4f42d1].
> > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | = GRAMMALECTE = French grammar checker By Olivier R. (olivier /at/ grammalecte /dot/ net) Website: http://www.dicollecte.org/grammalecte License: GPL 3 -- http://www.gnu.org/copyleft/gpl.html Grammalecte for Firefox is a derivative tool born from the version for LibreOffice written in Python. Written in JavaScript ES6/ES7. |
Added gc_lang/fr/tb/chrome.manifest version [39608040f5].
> > > > > > > > > | 1 2 3 4 5 6 7 8 9 | # https://developer.mozilla.org/en-US/docs/Chrome_Registration content grammarchecker content/ content promiseworker ./worker/ resource grammalecte ./grammalecte-js/ locale grammarchecker fr locale/fr/ locale grammarchecker en locale/en/ skin grammarchecker classic/1.0 skin/ overlay chrome://messenger/content/messengercompose/messengercompose.xul chrome://grammarchecker/content/overlay.xul style chrome://global/content/customizeToolbar.xul chrome://grammarchecker/content/overlay.css |
Added gc_lang/fr/tb/content/about.css version [d621de3251].
> > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | /* CSS */ .descr { font-size: 18px; font-weight: bold; text-align: center; } .stdlabel { font-size: 16px; text-align: center; } #website { font-size: 16px; font-weight: bold; color: hsl(210, 50%, 50%); text-align: center; cursor: pointer; } #contrib { font-size: 16px; text-align: center; color: hsl(210, 50%, 50%); cursor: pointer; } |
Added gc_lang/fr/tb/content/about.js version [2bc9ad5ee7].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | // JavaScript const Cc = Components.classes; const Ci = Components.interfaces; const Cu = Components.utils; //const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {}); function echo (...args) { Services.console.logStringMessage(args.join(" -- ") + "\n"); } function openInBrowserURL (sURL) { // method found in S3.Google.Translator try { openURL(sURL); // Works in overlay.js, but not here… Seems there is no documentation available about this feature on Mozilla.org } catch (e) { Cu.reportError(e); } } function openInTabURL (sURL) { // method found in S3.Google.Translator try { let xWM = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator); let xWin = xWM.getMostRecentWindow("mail:3pane"); let xTabmail = xWin.document.getElementById('tabmail'); xWin.focus(); if (xTabmail) { xTabmail.openTab('contentTab', { contentPage: sURL }); } } catch (e) { Cu.reportError(e); } } |
Added gc_lang/fr/tb/content/about.xul version [f56729e17b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin/" type="text/css"?> <?xml-stylesheet href="chrome://grammarchecker/content/about.css" type="text/css"?> <!DOCTYPE dialog SYSTEM "chrome://grammarchecker/locale/about.dtd"> <dialog id="grammalecte-about-window" title="&windowtitle;" orient="vertical" buttons="accept" width="300" onload="document.getElementById('grammalecte-about-window').centerWindowOnScreen();" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <!-- Other elements go here --> <description style="text-align: center;"> <image src="chrome://grammarchecker/skin/logo120_text.png" /> </description> <label class="descr">&description1;</label> <label class="descr">&description2;</label> <label class="stdlabel" value="&version; ${version}" /> <label class="stdlabel" value="&license; GPL 3" /> <label id="website" value="Site web" onclick="openInTabURL('http://grammalecte.net');" /> <separator class="groove" orient="horizontal" style="margin: 10px;"/> <label class="stdlabel" value="&thanks;" /> <image src="chrome://grammarchecker/skin/LaMouette_small.png" style="cursor: pointer;" onclick="openInTabURL('http://lamouette.org/');" /> <label id="contrib" value="&contrib;" onclick="openInTabURL('http://www.dicollecte.org/grammalecte/soutiens.php');" /> <script type="application/x-javascript" src="about.js"/> </dialog> |
Added gc_lang/fr/tb/content/conjugueur.css version [0ecfe596a1].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | /* CSS */ #verb { width: 200px; } #verb_title { font-size: 24px; font-weight: bold; text-align: center; color: hsl(210, 50%, 50%); } #info { font-size: 16px; text-align: center; vertical-align: bottom; } groupbox { width: 275px; } #smallnote { font-size: 10px; width: 250px; } caption { color: hsl(0, 50%, 50%); font-size: 16px; font-weight: bold; } label.temps { color: hsl(210, 50%, 50%); font-size: 13px; font-weight: bold; } label.cj { font-size: 11px; } |
Added gc_lang/fr/tb/content/conjugueur.js version [d8559c53e4].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 | // JavaScript const Cu = Components.utils; const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {}); const conj = require("resource://grammalecte/fr/conj.js"); function echo (...args) { Services.console.logStringMessage(args.join(" -- ") + "\n"); } let oConj = { init: function () { let that = this; try { // button document.getElementById('conjugate').addEventListener("click", function (event) { that.getVerbAndConjugate(); }); // text field document.getElementById('verb').addEventListener("change", function (event) { that.getVerbAndConjugate(); }); // options document.getElementById('oneg').addEventListener("click", function (event) { that._displayResults(); }); document.getElementById('opro').addEventListener("click", function (event) { that._displayResults(); }); document.getElementById('oint').addEventListener("click", function (event) { that._displayResults(); }); document.getElementById('ofem').addEventListener("click", function (event) { that._displayResults(); }); document.getElementById('otco').addEventListener("click", function (event) { that._displayResults(); }); } catch (e) { Cu.reportError(e); } this.conjugate("être"); }, oVerb: null, getVerbAndConjugate: function () { this.conjugate(document.getElementById('verb').value); }, conjugate: function (sVerb) { try { document.getElementById('oneg').checked = false; document.getElementById('opro').checked = false; document.getElementById('oint').checked = false; document.getElementById('otco').checked = false; document.getElementById('ofem').checked = false; document.getElementById('smallnote').hidden = true; // request analyzing sVerb = sVerb.trim().toLowerCase().replace(/’/g, "'").replace(/ +/g, " "); if (sVerb) { if (sVerb.startsWith("ne pas ")) { document.getElementById('oneg').checked = true; sVerb = sVerb.slice(7); } if (sVerb.startsWith("se ")) { document.getElementById('opro').checked = true; sVerb = sVerb.slice(3); } else if (sVerb.startsWith("s'")) { document.getElementById('opro').checked = true; sVerb = sVerb.slice(2); } if (sVerb.endsWith("?")) { document.getElementById('oint').checked = true; sVerb = sVerb.slice(0,-1).trim(); } if (!conj.isVerb(sVerb)) { document.getElementById('verb').style = "color: #BB4411;"; } else { document.getElementById('verb_title').textContent = sVerb; document.getElementById('verb').style = "color: #999999;"; document.getElementById('verb').value = ""; this.oVerb = new conj.Verb(sVerb); let sRawInfo = this.oVerb._sRawInfo; document.getElementById('info').textContent = this.oVerb.sInfo; document.getElementById('opro').textContent = "pronominal"; if (sRawInfo.endsWith("zz")) { document.getElementById('opro').checked = false; document.getElementById('opro').disabled = true; document.getElementById('opro').style = "color: #CCC;"; document.getElementById('otco').checked = false; document.getElementById('otco').disabled = true; document.getElementById('otco').style = "color: #CCC;"; document.getElementById('smallnote').hidden = false; } else { if (sRawInfo[5] == "_") { document.getElementById('opro').checked = false; document.getElementById('opro').disabled = true; document.getElementById('opro').style = "color: #CCC;"; } else if (sRawInfo[5] == "q" || sRawInfo[5] == "e") { document.getElementById('opro').checked = false; document.getElementById('opro').disabled = false; document.getElementById('opro').style = "color: #000;"; } else if (sRawInfo[5] == "p" || sRawInfo[5] == "r") { document.getElementById('opro').checked = true; document.getElementById('opro').disabled = true; document.getElementById('opro').style = "color: #CCC;"; } else if (sRawInfo[5] == "!") { document.getElementById('opro').textContent = "cas particuliers"; document.getElementById('opro').checked = false; document.getElementById('opro').disabled = true; document.getElementById('opro').style = "color: #CCC;"; } else { document.getElementById('opro').textContent = "# erreur #"; document.getElementById('opro').checked = false; document.getElementById('opro').disabled = true; document.getElementById('opro').style = "color: #CCC;"; } document.getElementById('otco').disabled = false; document.getElementById('otco').style = "color: #000;"; } this._displayResults(); } } } catch (e) { Cu.reportError(e); } }, _displayResults: function () { if (this.oVerb === null) { return; } try { let opro = document.getElementById('opro').checked; let oneg = document.getElementById('oneg').checked; let otco = document.getElementById('otco').checked; let oint = document.getElementById('oint').checked; let ofem = document.getElementById('ofem').checked; // titles this._setTitles(); // participes passés document.getElementById('ppas1').textContent = this.oVerb.participePasse(":Q1") || " "; // something or nbsp document.getElementById('ppas2').textContent = this.oVerb.participePasse(":Q2") || " "; document.getElementById('ppas3').textContent = this.oVerb.participePasse(":Q3") || " "; document.getElementById('ppas4').textContent = this.oVerb.participePasse(":Q4") || " "; // infinitif document.getElementById('infi').textContent = this.oVerb.infinitif(opro, oneg, otco, oint, ofem); // participe présent document.getElementById('ppre').textContent = this.oVerb.participePresent(opro, oneg, otco, oint, ofem) || " "; // conjugaisons document.getElementById('ipre1').textContent = this.oVerb.conjugue(":Ip", ":1s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipre2').textContent = this.oVerb.conjugue(":Ip", ":2s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipre3').textContent = this.oVerb.conjugue(":Ip", ":3s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipre4').textContent = this.oVerb.conjugue(":Ip", ":1p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipre5').textContent = this.oVerb.conjugue(":Ip", ":2p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipre6').textContent = this.oVerb.conjugue(":Ip", ":3p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('iimp1').textContent = this.oVerb.conjugue(":Iq", ":1s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('iimp2').textContent = this.oVerb.conjugue(":Iq", ":2s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('iimp3').textContent = this.oVerb.conjugue(":Iq", ":3s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('iimp4').textContent = this.oVerb.conjugue(":Iq", ":1p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('iimp5').textContent = this.oVerb.conjugue(":Iq", ":2p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('iimp6').textContent = this.oVerb.conjugue(":Iq", ":3p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipsi1').textContent = this.oVerb.conjugue(":Is", ":1s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipsi2').textContent = this.oVerb.conjugue(":Is", ":2s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipsi3').textContent = this.oVerb.conjugue(":Is", ":3s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipsi4').textContent = this.oVerb.conjugue(":Is", ":1p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipsi5').textContent = this.oVerb.conjugue(":Is", ":2p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipsi6').textContent = this.oVerb.conjugue(":Is", ":3p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ifut1').textContent = this.oVerb.conjugue(":If", ":1s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ifut2').textContent = this.oVerb.conjugue(":If", ":2s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ifut3').textContent = this.oVerb.conjugue(":If", ":3s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ifut4').textContent = this.oVerb.conjugue(":If", ":1p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ifut5').textContent = this.oVerb.conjugue(":If", ":2p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ifut6').textContent = this.oVerb.conjugue(":If", ":3p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('conda1').textContent = this.oVerb.conjugue(":K", ":1s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('conda2').textContent = this.oVerb.conjugue(":K", ":2s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('conda3').textContent = this.oVerb.conjugue(":K", ":3s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('conda4').textContent = this.oVerb.conjugue(":K", ":1p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('conda5').textContent = this.oVerb.conjugue(":K", ":2p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('conda6').textContent = this.oVerb.conjugue(":K", ":3p", opro, oneg, otco, oint, ofem) || " "; if (!oint) { document.getElementById('spre1').textContent = this.oVerb.conjugue(":Sp", ":1s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('spre2').textContent = this.oVerb.conjugue(":Sp", ":2s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('spre3').textContent = this.oVerb.conjugue(":Sp", ":3s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('spre4').textContent = this.oVerb.conjugue(":Sp", ":1p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('spre5').textContent = this.oVerb.conjugue(":Sp", ":2p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('spre6').textContent = this.oVerb.conjugue(":Sp", ":3p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('simp1').textContent = this.oVerb.conjugue(":Sq", ":1s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('simp2').textContent = this.oVerb.conjugue(":Sq", ":2s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('simp3').textContent = this.oVerb.conjugue(":Sq", ":3s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('simp4').textContent = this.oVerb.conjugue(":Sq", ":1p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('simp5').textContent = this.oVerb.conjugue(":Sq", ":2p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('simp6').textContent = this.oVerb.conjugue(":Sq", ":3p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('impe1').textContent = this.oVerb.imperatif(":2s", opro, oneg, otco, ofem) || " "; document.getElementById('impe2').textContent = this.oVerb.imperatif(":1p", opro, oneg, otco, ofem) || " "; document.getElementById('impe3').textContent = this.oVerb.imperatif(":2p", opro, oneg, otco, ofem) || " "; } else { document.getElementById('spre_temps').textContent = " "; document.getElementById('spre1').textContent = " "; document.getElementById('spre2').textContent = " "; document.getElementById('spre3').textContent = " "; document.getElementById('spre4').textContent = " "; document.getElementById('spre5').textContent = " "; document.getElementById('spre6').textContent = " "; document.getElementById('simp_temps').textContent = " "; document.getElementById('simp1').textContent = " "; document.getElementById('simp2').textContent = " "; document.getElementById('simp3').textContent = " "; document.getElementById('simp4').textContent = " "; document.getElementById('simp5').textContent = " "; document.getElementById('simp6').textContent = " "; document.getElementById('impe_temps').textContent = " "; document.getElementById('impe1').textContent = " "; document.getElementById('impe2').textContent = " "; document.getElementById('impe3').textContent = " "; } if (otco) { document.getElementById('condb1').textContent = this.oVerb.conjugue(":Sq", ":1s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('condb2').textContent = this.oVerb.conjugue(":Sq", ":2s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('condb3').textContent = this.oVerb.conjugue(":Sq", ":3s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('condb4').textContent = this.oVerb.conjugue(":Sq", ":1p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('condb5').textContent = this.oVerb.conjugue(":Sq", ":2p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('condb6').textContent = this.oVerb.conjugue(":Sq", ":3p", opro, oneg, otco, oint, ofem) || " "; } else { document.getElementById('condb1').textContent = " "; document.getElementById('condb2').textContent = " "; document.getElementById('condb3').textContent = " "; document.getElementById('condb4').textContent = " "; document.getElementById('condb5').textContent = " "; document.getElementById('condb6').textContent = " "; } document.getElementById('verb').Text = ""; } catch (e) { Cu.reportError(e); } }, _setTitles: function () { try { if (!document.getElementById('otco').checked) { document.getElementById('ipre_temps').textContent = "Présent"; document.getElementById('ifut_temps').textContent = "Futur"; document.getElementById('iimp_temps').textContent = "Imparfait"; document.getElementById('ipsi_temps').textContent = "Passé simple"; document.getElementById('spre_temps').textContent = "Présent"; document.getElementById('simp_temps').textContent = "Imparfait"; document.getElementById('conda_temps').textContent = "Présent"; document.getElementById('condb_temps').textContent = " "; document.getElementById('impe_temps').textContent = "Présent"; } else { document.getElementById('ipre_temps').textContent = "Passé composé"; document.getElementById('ifut_temps').textContent = "Futur antérieur"; document.getElementById('iimp_temps').textContent = "Plus-que-parfait"; document.getElementById('ipsi_temps').textContent = "Passé antérieur"; document.getElementById('spre_temps').textContent = "Passé"; document.getElementById('simp_temps').textContent = "Plus-que-parfait"; document.getElementById('conda_temps').textContent = "Passé (1ʳᵉ forme)"; document.getElementById('condb_temps').textContent = "Passé (2ᵉ forme)"; document.getElementById('impe_temps').textContent = "Passé"; } } catch (e) { Cu.reportError(e); } } }; oConj.init(); |
Added gc_lang/fr/tb/content/conjugueur.xul version [ee8b63b554].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | <?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin/" type="text/css"?> <?xml-stylesheet href="chrome://grammarchecker/content/conjugueur.css" type="text/css"?> <dialog id="grammalecte-conjugueur-window" title="Grammalecte · Conjugueur…" orient="vertical" width="550" buttons="extra1" buttonlabelextra1="Conjuguer" ondialogextra1="oConj.getVerbAndConjugate();" defaultButton="extra1" onload="" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <!-- Other elements go here --> <box> <spacer flex="1"/> <image src="chrome://grammarchecker/skin/grammarcheck.png" /> <textbox id="verb" value="" /> <button id="conjugate" label="Conjuguer" /> <spacer flex="1"/> </box> <box> <spacer flex="1"/> <checkbox id="oneg" label="Négation" /> <checkbox id="opro" label="Pronominal" /> <checkbox id="ofem" label="Féminin" /> <checkbox id="oint" label="Interrogatif" /> <checkbox id="otco" label="Temps composés" /> <spacer flex="1"/> </box> <box> <spacer flex="1"/> <box orient="vertical"> <label id="verb_title">.</label> <label id="info">.</label> </box> <spacer flex="1"/> </box> <columns> <column> <groupbox id="infinitif"> <caption label="Infinitif" /> <label id="infi" class="cj">.</label> </groupbox> <groupbox id="imperatif"> <caption label="Impératif" /> <label id="impe_temps" class="temps">Présent</label> <label id="impe1" class="cj">.</label> <label id="impe2" class="cj">.</label> <label id="impe3" class="cj">.</label> </groupbox> </column> <column> <groupbox id="partpre"> <caption label="Participe présent" /> <label id="ppre" class="cj">.</label> </groupbox> <groupbox id="partpas"> <caption label="Participes passés" /> <label id="ppas1" class="cj">.</label> <label id="ppas2" class="cj">.</label> <label id="ppas3" class="cj">.</label> <label id="ppas4" class="cj">.</label> </groupbox> </column> </columns> <columns> <column> <groupbox id="indicatif"> <caption label="Indicatif" /> <label id="ipre_temps" class="temps">Présent</label> <label id="ipre1" class="cj">.</label> <label id="ipre2" class="cj">.</label> <label id="ipre3" class="cj">.</label> <label id="ipre4" class="cj">.</label> <label id="ipre5" class="cj">.</label> <label id="ipre6" class="cj">.</label> <label id="iimp_temps" class="temps">Imparfait</label> <label id="iimp1" class="cj">.</label> <label id="iimp2" class="cj">.</label> <label id="iimp3" class="cj">.</label> <label id="iimp4" class="cj">.</label> <label id="iimp5" class="cj">.</label> <label id="iimp6" class="cj">.</label> <label id="ipsi_temps" class="temps">Passé simple</label> <label id="ipsi1" class="cj">.</label> <label id="ipsi2" class="cj">.</label> <label id="ipsi3" class="cj">.</label> <label id="ipsi4" class="cj">.</label> <label id="ipsi5" class="cj">.</label> <label id="ipsi6" class="cj">.</label> <label id="ifut_temps" class="temps">Futur</label> <label id="ifut1" class="cj">.</label> <label id="ifut2" class="cj">.</label> <label id="ifut3" class="cj">.</label> <label id="ifut4" class="cj">.</label> <label id="ifut5" class="cj">.</label> <label id="ifut6" class="cj">.</label> </groupbox> <description id="smallnote">Ce verbe n’a pas encore été vérifié. C’est pourquoi les options “pronominal” et “temps composés” sont désactivées.</description> </column> <column> <groupbox id="subjonctif"> <caption label="Subjonctif" /> <label id="spre_temps" class="temps">Présent</label> <label id="spre1" class="cj">.</label> <label id="spre2" class="cj">.</label> <label id="spre3" class="cj">.</label> <label id="spre4" class="cj">.</label> <label id="spre5" class="cj">.</label> <label id="spre6" class="cj">.</label> <label id="simp_temps" class="temps">Imparfait</label> <label id="simp1" class="cj">.</label> <label id="simp2" class="cj">.</label> <label id="simp3" class="cj">.</label> <label id="simp4" class="cj">.</label> <label id="simp5" class="cj">.</label> <label id="simp6" class="cj">.</label> </groupbox> <groupbox id="conditionnel"> <caption label="Conditionnel" /> <label id="conda_temps" class="temps">Présent</label> <label id="conda1" class="cj">.</label> <label id="conda2" class="cj">.</label> <label id="conda3" class="cj">.</label> <label id="conda4" class="cj">.</label> <label id="conda5" class="cj">.</label> <label id="conda6" class="cj">.</label> <label id="condb_temps" class="temps">.</label> <label id="condb1" class="cj">.</label> <label id="condb2" class="cj">.</label> <label id="condb3" class="cj">.</label> <label id="condb4" class="cj">.</label> <label id="condb5" class="cj">.</label> <label id="condb6" class="cj">.</label> </groupbox> </column> </columns> <script type="application/x-javascript" src="conjugueur.js"/> </dialog> |
Added gc_lang/fr/tb/content/editor.js version [25c8a38b27].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | // JavaScript class Editor { constructor (sLang) { this.xEditor = GetCurrentEditor(); this.lNode = []; this.lParsableNodes = ["P", "LI"]; this.lRootNodes = ["DIV", "UL", "OL"]; }; * _getParsableNodes (xRootNode=this.xEditor.rootElement) { // recursive function try { for (let xNode of xRootNode.childNodes) { //echo("tag: " + xNode.tagName); if (xNode.className !== "moz-cite-prefix" && xNode.tagName !== "BLOCKQUOTE" && (xNode.nodeType == Node.TEXT_NODE || (xNode.nodeType == Node.ELEMENT_NODE && !xNode.textContent.startsWith(">"))) && xNode.textContent !== "") { if (xNode.tagName === undefined || this.lParsableNodes.includes(xNode.tagName)) { yield xNode; } else if (this.lRootNodes.includes(xNode.tagName)) { yield* this._getParsableNodes(xNode); } } } } catch (e) { Cu.reportError(e); } }; * getParagraphs () { try { let i = 0; for (let xNode of this._getParsableNodes()) { this.lNode.push(xNode); yield [i, xNode.innerHTML]; i += 1; } } catch (e) { Cu.reportError(e); } }; getContent () { try { let sContent = ""; for (let [i, sHTML] of this.getParagraphs()) { if (sContent.length > 0) { sContent += "\n"; } sContent += sHTML; } return sContent; } catch (e) { Cu.reportError(e); } }; getParagraph (iPara) { try { return this.lNode[iPara].innerHTML; } catch (e) { Cu.reportError(e); } }; writeParagraph (iPara, sText) { try { this.lNode[iPara].innerHTML = sText; } catch (e) { Cu.reportError(e); } }; changeParagraph (iPara, sModif, iStart, iEnd) { let sText = this.getParagraph(iPara); this.writeParagraph(iPara, sText.slice(0, iStart) + sModif + sText.slice(iEnd)); }; getLangFromSpellChecker () { try { let gSpellChecker = this.xEditor.getInlineSpellChecker(true); let sLang = gSpellChecker.spellChecker.GetCurrentDictionary(); return sLang.slice(0, 2); } catch (e) { Cu.reportError(e); } }; } |
Added gc_lang/fr/tb/content/gc_options.css version [6199209734].
> > > > > > > | 1 2 3 4 5 6 7 | /* CSS */ .section { font-size: 16px; font-weight: bold; color: hsl(210, 50%, 50%); } |
Added gc_lang/fr/tb/content/gc_options.js version [f85fde1089].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | // JavaScript const Cc = Components.classes; const Ci = Components.interfaces; const Cu = Components.utils; const prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.grammarchecker."); //const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {}); function echo (...args) { Services.console.logStringMessage(args.join(" -- ") + "\n"); } var oOptControl = { oOptions: null, load: function () { this._setDialogOptions(false); }, _setDialogOptions: function (bDefaultOptions=false) { try { sOptions = bDefaultOptions ? prefs.getCharPref("sGCDefaultOptions") : prefs.getCharPref("sGCOptions"); //echo(">> " + sOptions); this.oOptions = JSON.parse(sOptions); for (let sParam in this.oOptions) { //echo(sParam + ":" + oOptions[sParam]); if (document.getElementById("option_"+sParam) !== null) { document.getElementById("option_"+sParam).checked = this.oOptions[sParam]; } } } catch (e) { Cu.reportError(e); } }, save: function () { try { for (let xNode of document.getElementsByClassName("option")) { this.oOptions[xNode.id.slice(7)] = xNode.checked; } prefs.setCharPref("sGCOptions", JSON.stringify(this.oOptions)); //echo("<< " + JSON.stringify(this.oOptions)); } catch (e) { Cu.reportError(e); } }, reset: function () { this._setDialogOptions(true); } } oOptControl.load(); |
Added gc_lang/fr/tb/content/gc_options.xul version [8e6b4a963d].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin/" type="text/css"?> <?xml-stylesheet href="chrome://grammarchecker/content/gc_options.css" type="text/css"?> <!DOCTYPE dialog SYSTEM "chrome://grammarchecker/locale/gc_options.dtd"> <dialog id="grammalecte-gcoptions-window" title="&window.title;" orient="vertical" buttons="accept, cancel, extra1" ondialogaccept="oOptControl.save();" ondialogcancel="return;" buttonlabelextra1="&defaultbutton.label;" ondialogextra1="oOptControl.reset();" defaultButton="accept" width="400" onload="document.getElementById('grammalecte-gcoptions-window').centerWindowOnScreen();" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <!-- Other elements go here --> <dialogheader id="grammalecte-title" title="&dialogheader.label;" description="" /> <tabbox id="tabs_options" selectedIndex="0"> <tabs> ${sXULTabs} </tabs> <tabpanels> ${sXULTabPanels} </tabpanels> </tabbox> <script type="application/x-javascript" src="gc_options.js" /> </dialog> |
Added gc_lang/fr/tb/content/options.xul version [4daa0434f3].
> > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="chrome://global/skin/" type="text/css"?> <!DOCTYPE prefwindow SYSTEM "chrome://grammarchecker/locale/options.dtd"> <prefwindow id="grammarcheckerPreferences" title="&prefwindow.title;" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <prefpane id="pane1" label="&panel.title;"> <preferences> <preference id="gc_options" name="extensions.grammarchecker.sGCOptions" type="string" /> <preference id="tf_options" name="extensions.grammarchecker.sTFOptions" type="string" /> <!--<preference id="urlpref1" name="extensions.grammarchecker.urlpref1" type="string"/> <preference id="urlpref2" name="extensions.grammarchecker.urlpref2" type="string"/> <preference id="langpref" name="extensions.grammarchecker.langpref" type="string"/> <preference id="mothertongue" name="extensions.grammarchecker.mothertongue" type="string"/>--> </preferences> <label accesskey="&gc_options.accesskey;" control="texturlpref1">&gc_options.label;</label><textbox id="texturlpref1" preference="gc_options"/> <label accesskey="&tf_options.accesskey;" control="texturlpref2">&tf_options.label;</label><textbox id="texturlpref2" preference="tf_options"/> <!--<label accesskey="&urlpref1.accesskey;" control="texturlpref1">&urlpref1.label;</label><textbox id="texturlpref1" preference="urlpref1"/> <label accesskey="&urlpref2.accesskey;" control="texturlpref2">&urlpref2.label;</label><textbox id="texturlpref2" preference="urlpref2"/> <label accesskey="&langpref.accesskey;" control="textlangpref">&langpref.label;</label><textbox id="textlangpref" preference="langpref"/> <label accesskey="&mothertongue.accesskey;" control="textmothertongue">&mothertongue.label;</label><textbox id="textmothertongue" preference="mothertongue"/>--> <description>&panel.description;</description> </prefpane> </prefwindow> |
Added gc_lang/fr/tb/content/overlay.css version [778a1d344a].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 | #grammarchecker-toolbar-button { list-style-image: url("chrome://grammarchecker/skin/grammarcheck.png"); } [iconsize="small"] #grammarchecker-toolbar-button { list-style-image: url("chrome://grammarchecker/skin/grammarcheck_small.png"); } #grammarchecker-toolbar-button[disabled="true"] { list-style-image: url("chrome://grammarchecker/skin/grammarcheck_disabled.png"); } [iconsize="small"] #grammarchecker-toolbar-button[disabled="true"] { list-style-image: url("chrome://grammarchecker/skin/grammarcheck_small_disabled.png"); } #grammalecte-menu { list-style-image: url("chrome://grammarchecker/skin/grammarcheck.png"); } menuitem#gl-item-analyze { list-style-image: url('chrome://grammarchecker/skin/grammarcheck.png'); } #textformatter-panel { overflow: auto; height: 500px; max-height: 650px; } #textformatter-title { margin-top: 10px; } #textformatter-commands { margin: 10px 0; } #textformatter-infomsg { padding: 5px; font-size: 10px; } .optiongroup { color: hsl(210, 50%, 40%); font-size: 14px; font-weight: bold; } #grammarchecker-panel { overflow: auto; margin-left: 0.5em; height: 400px; max-height: 600px; } #grammalecte-title { margin-top: 10px; } #grammalecte-infobox { display: block; margin: 20px 10px 5px 10px; padding: 10px; background-color: hsl(210, 20%, 40%); border-radius: 3px; color: hsl(210, 50%, 96%); font-weight: bold; } #grammalecte-info { padding: 1px 5px; } #closebutton { padding: 1px 5px; background-color: hsl(0, 50%, 50%); color: hsl(0, 10%, 96%); border-radius: 2px; cursor: pointer; } #grammalecte-errors div { display: block; /*display: list-item; list-style-position: inside;*/ margin-top: 10px; } #grammalecte-errors p { display: block; margin-left: 10px; } #grammalecte-errors p.paragraph { margin-top: 20px; font-size: 16px; font-family: "Courier New", Courier, "Lucida Sans Typewriter", "Lucida Typewriter", monospace; } #grammalecte-errors p.message { margin-left: 20px; } #grammalecte-errors p.moreinfo { margin-left: 40px; } #grammalecte-errors p.suggestions { margin-left: 40px; color: hsl(120, 5%, 33%); } #grammalecte-errors span.suggestions_button { padding: 1px 6px; background-color: hsl(120, 40%, 60%); color: hsl(120, 10%, 96%); border-radius: 2px; cursor: pointer; } #grammalecte-errors { display: block; } a { font-weight: bold; color: hsl(30, 50%, 50%); text-decoration: underline; cursor: pointer; } .error { /* default color */ background-color: hsl(210, 50%, 50%); color: hsl(210, 10%, 96%); font-weight: bold; border-radius: 3px; /*border-bottom: 2px solid hsl(210, 50%, 50%);*/ } .errornum { color: hsl(210, 10%, 30%); font-weight: bold; } .sugg { padding: 1px 6px; background-color: hsl(120, 50%, 30%); color: hsl(210, 10%, 90%); border-radius: 2px; font-weight: bold; cursor: pointer; } .debug_info { color: hsl(0, 50%, 50%); font-style: italic; } /* elems */ .spell { background-color: hsl(0, 50%, 50%); color: hsl(0, 0%, 96%); border-radius: 3px; } /* elems */ .typo, .esp, .nbsp, .eif, .maj, .virg, .tu, .num, .unit, .nf, .liga, .mapos, .chim { background-color: hsl(30, 70%, 50%); color: hsl(30, 10%, 96%); border-radius: 3px; } /* elems */ .apos { background-color: hsl(40, 90%, 50%); color: hsl(40, 10%, 96%); border-radius: 3px; } /* elems */ .gn, .sgpl { background-color: hsl(210, 50%, 50%); color: hsl(210, 10%, 96%); border-radius: 3px; } /* elems */ .conj, .infi, .imp, .inte, .ppas, .vmode { background-color: hsl(300, 30%, 40%); color: hsl(300, 10%, 96%); border-radius: 3px; } /* elems */ .conf, .ocr { background-color: hsl(270, 40%, 30%); color: hsl(270, 10%, 96%); border-radius: 3px; } /* elems */ .bs, .pleo, .neg, .redon1, .redon2, .mc, .date, .notype { background-color: hsl(180, 50%, 40%); color: hsl(180, 10%, 96%); border-radius: 3px; } |
Added gc_lang/fr/tb/content/overlay.js version [e9c7e6f275].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 | // JavaScript "use strict"; const Cc = Components.classes; const Ci = Components.interfaces; const Cu = Components.utils; const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {}); const { BasePromiseWorker } = Cu.import('resource://gre/modules/PromiseWorker.jsm', {}); const Task = Cu.import("resource://gre/modules/Task.jsm").Task; const prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.grammarchecker."); //Cu.import("resource://gre/modules/Console.jsm"); // doesn’t work //const xConsole = Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService); //xConsole.logStringMessage("Grammalecte: " + args.join(" · ")); // useless now. Use: Services.console.logStringMessage("***"); const text = require("resource://grammalecte/text.js"); const tf = require("resource://grammalecte/fr/textformatter.js"); function echo (...args) { dump(args.join(" -- ") + "\n"); // obsolete since TB 52? Services.console.logStringMessage("Grammalecte: " + args.join(" · ")); } const oConverterToExponent = { dNumbers: new Map ([ ["1", "¹"], ["2", "²"], ["3", "³"], ["4", "⁴"], ["5", "⁵"], ["6", "⁶"], ["7", "⁷"], ["8", "⁸"], ["9", "⁹"], ["0", "⁰"] ]), convert: function (sText) { let sRes = ""; for (let c of sText) { sRes += (this.dNumbers.has(c)) ? this.dNumbers.get(c) : "⁻"; } return sRes; } }; var oGrammarChecker = { // you must use var to be able to call this object from elsewhere xGCEWorker: null, bDictActive: null, loadGC: function () { if (this.xGCEWorker === null) { // Grammar checker echo('Loading Grammalecte'); this.xGCEWorker = new BasePromiseWorker('chrome://promiseworker/content/gce_worker.js'); let xPromise = this.xGCEWorker.post('loadGrammarChecker', [prefs.getCharPref("sGCOptions")]); xPromise.then( function (aVal) { echo(aVal); prefs.setCharPref("sGCOptions", aVal); }, function (aReason) { echo('Promise rejected - ', aReason); } ).catch( function (aCaught) { echo('Promise Error - ', aCaught); } ); } }, fullTests: function () { echo('Performing tests... Wait...'); let xPromise = this.xGCEWorker.post('fullTests', ['{"nbsp":true, "esp":true, "unit":true, "num":true}']); xPromise.then( function (aVal) { echo('Done.'); echo(aVal); }, function (aReason) { echo('Promise rejected', aReason); } ).catch( function (aCaught) { echo('Promise Error', aCaught); } ); }, test: function (sText) { echo("Test..."); let xPromise = this.xGCEWorker.post('parse', [sText, "FR", true]); xPromise.then( function (aVal) { let lErr = JSON.parse(aVal); if (lErr.length > 0) { for (let dErr of lErr) { echo(text.getReadableError(dErr)); } } else { echo("no error found"); } }, function (aReason) { echo('Promise rejected', aReason); } ).catch( function (aCaught) { echo('Promise Error', aCaught); } ); }, setOptions: function () { echo('Set options'); let xPromise = this.xGCEWorker.post('setOptions', [prefs.getCharPref("sGCOptions")]); xPromise.then( function (aVal) { echo(aVal); prefs.setCharPref("sGCOptions", aVal); }, function (aReason) { echo('Promise rejected', aReason); } ).catch( function (aCaught) { echo('Promise Error', aCaught); } ); }, resetOptions: function () { let xPromise = this.xGCEWorker.post('resetOptions'); xPromise.then( function (aVal) { echo(aVal); prefs.setCharPref("sGCOptions", aVal); }, function (aReason) { echo('Promise rejected', aReason); } ).catch( function (aCaught) { echo('Promise Error', aCaught); } ); }, _getGCResultPromise: function (sParagraph, sLang, bDebug, bContext) { // For some reason, you can’t use result of PromiseWorker within a Task, // you have to wrap it in a common Promise. Task and yield can be replaced with async / await when it is available. let that = this; return new Promise(function (resolve, reject) { let xPromise = that.xGCEWorker.post('parseAndSpellcheck', [sParagraph, sLang, bDebug, bContext]); xPromise.then( function (aVal) { resolve(aVal); }, function (aReason) { // rejected resolve(aReason); } ).catch( function (aCaught) { // error reject(aCaught); } ); }); }, parse: function () { this.clearPreview(); this.openPanel(); this.setInfo("Analyse en cours…"); let that = this; Task.spawn(function* () { let xEditor = new Editor(); let nParagraph = 0; let bIsError = false; for (let [iParagraph, sParagraph] of xEditor.getParagraphs()) { if (sParagraph.trim() !== "") { let sRes = yield that._getGCResultPromise(sParagraph, "FR", false, false); let oRes = JSON.parse(sRes); if (oRes.aGrammErr.length > 0 || oRes.aSpellErr.length > 0) { document.getElementById("grammalecte-errors").appendChild(that.createResultNode(xEditor, sParagraph, iParagraph, oRes.aGrammErr, oRes.aSpellErr)); bIsError = true; } nParagraph += 1; } } if (bIsError === false) { let xNodeP = document.createElement("p"); xNodeP.setAttribute("class", "message"); xNodeP.textContent = "Aucune erreur détectée…"; document.getElementById("grammalecte-errors").appendChild(xNodeP); } return nParagraph; }).then(function (res) { that.setInfo("Nombre de paragraphes analysés : " + res); }, function (e) { that.setInfo("Erreur : " + e.message); Cu.reportError(e); }); }, createResultNode: function (xEditor, sParagraph, iParagraph, aGrammErr, aSpellErr) { let xResultNode = document.createElement("div"); xResultNode.setAttribute("id", "resnode" + iParagraph); this.fillResultNode(xResultNode, xEditor, sParagraph, iParagraph, aGrammErr, aSpellErr); return xResultNode; }, reparseParagraph: function (xEditor, iParagraph) { try { let that = this; let xResultNode = document.getElementById("resnode"+iParagraph); xResultNode.textContent = "…………… réanalyse en cours ……………"; let sParagraph = xEditor.getParagraph(iParagraph); let xPromise = this._getGCResultPromise(sParagraph, "FR", false, false); xPromise.then(function (res) { //echo("res: " + res); xResultNode.textContent = ""; let oRes = JSON.parse(res); if (oRes.aGrammErr.length > 0 || oRes.aSpellErr.length > 0) { that.fillResultNode(xResultNode, xEditor, sParagraph, iParagraph, oRes.aGrammErr, oRes.aSpellErr); } }, function (res) { xResultNode.textContent = "Erreur: " + res; }); } catch (e) { Cu.reportError(e); } }, fillResultNode: function (xResultNode, xEditor, sParagraph, iParagraph, aGrammErr, aSpellErr) { try { if (aGrammErr.length === 0 && aSpellErr.length === 0) { return null; } aGrammErr.push(...aSpellErr); aGrammErr.sort(function (a, b) { if (a["nStart"] < b["nStart"]) return -1; if (a["nStart"] > b["nStart"]) return 1; return 0; }); let xParagraphNode = document.createElement("p"); let lNodeError = []; let nEndLastErr = 0; let nError = 1; xParagraphNode.setAttribute("class", "paragraph"); for (let dErr of aGrammErr) { let nStart = dErr["nStart"]; let nEnd = dErr["nEnd"]; if (nStart >= nEndLastErr) { xParagraphNode.appendChild(document.createTextNode(this._purgeTags(sParagraph.slice(nEndLastErr, nStart)))); let xNodeError = document.createElement("b"); if (dErr['sType'] !== 'WORD') { xNodeError.setAttribute("class", "error " + dErr["sType"]); xNodeError.textContent = oConverterToExponent.convert(nError.toString()) + sParagraph.slice(nStart, nEnd); xParagraphNode.appendChild(xNodeError); lNodeError.push(this._createNodeGCErrorDescription(xEditor, nError, dErr, iParagraph)); } else { xNodeError.setAttribute("class", "error spell"); xNodeError.textContent = oConverterToExponent.convert(nError.toString()) + sParagraph.slice(nStart, nEnd); xParagraphNode.appendChild(xNodeError); lNodeError.push(this._createNodeSpellErrorDescription(xEditor, nError, dErr, iParagraph)); } nEndLastErr = nEnd; nError += 1; } } xParagraphNode.appendChild(document.createTextNode(this._purgeTags(sParagraph.slice(nEndLastErr)))); xResultNode.appendChild(xParagraphNode); for (let xNode of lNodeError) { xResultNode.appendChild(xNode); } } catch (e) { Cu.reportError(e); xResultNode.textContent = "# Error: " + e.message; } }, _createNodeGCErrorDescription: function (xEditor, nError, dErr, iParagraph) { let xNodeDiv = document.createElement("div"); let that = this; // message let xNodeMessage = document.createElement("p"); xNodeMessage.setAttribute("class", "message"); let xNodeErrorNumber = document.createElement("b"); xNodeErrorNumber.setAttribute("class", "errornum"); xNodeErrorNumber.textContent = "[" + nError + "] "; xNodeMessage.appendChild(xNodeErrorNumber); xNodeMessage.appendChild(document.createTextNode(" " + dErr["sMessage"].replace(/ /g, " ") + " ")); if (false) { // debug info let xNodeDebug = document.createElement("span"); xNodeDebug.setAttribute("class", "debug_info"); xNodeDebug.textContent = " #" + dErr["sRuleId"] + " #" + dErr["sLineId"]; xNodeMessage.appendChild(xNodeDebug); } xNodeDiv.appendChild(xNodeMessage); // URL if (dErr["URL"]) { let xNodeP = document.createElement("p"); xNodeP.setAttribute("class", "moreinfo"); xNodeP.appendChild(document.createTextNode("→ ")); let xNodeURL = document.createElement("a"); xNodeURL.setAttribute("href", dErr["URL"]); xNodeURL.textContent = "Plus d’informations…"; xNodeURL.addEventListener("click", function (e) { that.openInTabURL(dErr["URL"]); }); xNodeP.appendChild(xNodeURL); xNodeDiv.appendChild(xNodeP); } // suggestions if (dErr["aSuggestions"].length > 0) { let xNodeSuggLine = document.createElement("p"); xNodeSuggLine.setAttribute("class", "suggestions"); xNodeSuggLine.textContent = "Suggestions : "; let n = 0; for (let sSugg of dErr["aSuggestions"]) { if (n > 0) { xNodeSuggLine.appendChild(document.createTextNode(" ")); } let xNodeSugg = document.createElement("span"); xNodeSugg.setAttribute("class", "sugg"); xNodeSugg.textContent = sSugg; xNodeSugg.addEventListener("click", function (e) { xEditor.changeParagraph(iParagraph, xNodeSugg.textContent, dErr["nStart"], dErr["nEnd"]); xNodeDiv.textContent = ""; that.reparseParagraph(xEditor, iParagraph); }); xNodeSuggLine.appendChild(xNodeSugg); n += 1; } xNodeDiv.appendChild(xNodeSuggLine); } return xNodeDiv; }, _purgeTags: function (sText) { sText = sText.replace(/<br ?\/?>/ig, " "); return sText.replace(/<\/? ?[a-zA-Z]+ ?>/g, ""); }, _createNodeSpellErrorDescription: function (xEditor, nError, dErr, iParagraph) { let xNodeDiv = document.createElement("div"); let that = this; // message let xNodeMessage = document.createElement("p"); xNodeMessage.setAttribute("class", "message"); let xNodeErrorNumber = document.createElement("b"); xNodeErrorNumber.setAttribute("class", "errornum"); xNodeErrorNumber.textContent = "[" + nError + "] "; xNodeMessage.appendChild(xNodeErrorNumber); xNodeMessage.appendChild(document.createTextNode(" Mot inconnu du dictionnaire. ")); xNodeDiv.appendChild(xNodeMessage); // suggestions let xNodeSuggLine = document.createElement("p"); xNodeSuggLine.setAttribute("class", "suggestions"); let xNodeSuggButton = document.createElement("span"); xNodeSuggButton.setAttribute("class", "suggestions_button"); xNodeSuggButton.textContent = "Suggestions : "; xNodeSuggButton.addEventListener("click", function (e) { if (this.bDictActive === null) { this.bDictActive = oSpellControl.setDictionary("fr"); } try { let aSugg = oSpellControl.suggest(dErr['sValue']); if (aSugg) { let n = 0; for (let sSugg of aSugg) { if (true || n > 0) { xNodeSuggLine.appendChild(document.createTextNode(" ")); } let xNodeSugg = document.createElement("span"); xNodeSugg.setAttribute("class", "sugg"); xNodeSugg.textContent = sSugg; xNodeSugg.addEventListener("click", function (e) { xEditor.changeParagraph(iParagraph, xNodeSugg.textContent, dErr["nStart"], dErr["nEnd"]); xNodeDiv.textContent = ""; that.reparseParagraph(xEditor, iParagraph); }); xNodeSuggLine.appendChild(xNodeSugg); n += 1; } } else { xNodeSuggLine.appendChild(document.createTextNode("Aucune suggestion.")); } } catch (e) { xNodeSuggLine.appendChild(document.createTextNode("# Erreur : dictionnaire orthographique introuvable.")); Cu.reportError(e); } }); xNodeSuggLine.appendChild(xNodeSuggButton); xNodeDiv.appendChild(xNodeSuggLine); return xNodeDiv; }, loadUI: function() { echo("loadUI"); this._strings = document.getElementById("grammarchecker-strings"); let that = this; let nsGrammarCommand = { isCommandEnabled: function (aCommand, dummy) { return (IsDocumentEditable() && !IsInHTMLSourceMode()); }, getCommandStateParams: function (aCommand, aParams, aRefCon) {}, doCommandParams: function (aCommand, aParams, aRefCon) {}, doCommand: function (aCommand) { that.onParseText(aCommand); } }; let xCommandTable = GetComposerCommandTable(); xCommandTable.registerCommand("cmd_grammar", nsGrammarCommand); let sButtonId = "grammarchecker-toolbar-button"; let sButtonId2 = "grammalecte-menu"; let xNavBar = document.getElementById("composeToolbar2"); let lCurSet = xNavBar.currentSet.split(","); if (lCurSet.indexOf(sButtonId) == -1) { let iPos = lCurSet.indexOf("spellingButton") + 1 || lCurSet.length; let aSet = lCurSet.slice(0, iPos).concat(sButtonId).concat(sButtonId2).concat(lCurSet.slice(iPos)); xNavBar.setAttribute("currentset", aSet.join(",")); xNavBar.currentSet = aSet.join(","); document.persist(xNavBar.id, "currentset"); try { BrowserToolboxCustomizeDone(true); } catch (e) { Cu.reportError(e); } } }, clearPreview: function() { let xPreview = document.getElementById("grammalecte-errors"); while (xPreview.firstChild) { xPreview.removeChild(xPreview.firstChild); }; let xEditor = GetCurrentEditor(); if (xEditor != null) { try { xEditor.QueryInterface(Ci.nsIEditorStyleSheets); xEditor.addOverrideStyleSheet("chrome://grammarchecker/content/overlay.css"); } catch (e) { Cu.reportError(e); } } this.setInfo("[vide]"); }, setInfo: function (sText) { document.getElementById("grammalecte-info").textContent = sText; }, openPanel: function () { document.getElementById("textformatter-splitter").setAttribute("state", "collapsed"); document.getElementById("grammarchecker-splitter").setAttribute("state", "open"); }, closePanel: function () { document.getElementById("grammarchecker-splitter").setAttribute("state", "collapsed"); }, openDialog: function (sWhat, sName="", sOptions="") { try { window.openDialog(sWhat, sName, sOptions); } catch (e) { Cu.reportError(e); } }, openInTabURL: function (sURL) { // method found in S3.Google.Translator try { let xWM = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator); let xWin = xWM.getMostRecentWindow("mail:3pane"); let xTabmail = xWin.document.getElementById('tabmail'); xWin.focus(); if (xTabmail) { xTabmail.openTab('contentTab', { contentPage: sURL }); } } catch (e) { Cu.reportError(e); } }, openInBrowserURL: function (sURL) { // method found in S3.Google.Translator try { openURL(sURL); } catch (e) { Cu.reportError(e); } }, onParseText: function (e) { this.parse(); }, onClosePanel: function (e) { this.closePanel(); }, onOpenGCOptions: function (e) { let that = this; let xPromise = this.xGCEWorker.post('getDefaultOptions'); xPromise.then( function (aVal) { echo(aVal); prefs.setCharPref("sGCDefaultOptions", aVal); }, function (aReason) { echo('Promise rejected', aReason); } ).catch( function (aCaught) { echo('Promise Error', aCaught); } ).then( function () { that.openDialog("chrome://grammarchecker/content/gc_options.xul", "", "chrome, dialog, modal, resizable=no"); that.setOptions(); }, function (aReason) { echo('Error options dialog', aReason); } ).catch( function (aCaught) { echo('Error', aCaught); } ); }, onOpenSpellOptions: function (e) { this.openDialog("chrome://grammarchecker/content/spell_options.xul", "", "chrome, dialog, modal, resizable=no"); }, onOpenTextFormatter: function (e) { oTextFormatter.openPanel(); }, onOpenConjugueur: function (e) { this.openDialog("chrome://grammarchecker/content/conjugueur.xul", "", "chrome, resizable=no"); }, onAbout: function (e) { this.openDialog("chrome://grammarchecker/content/about.xul", "", "chrome, dialog, modal, resizable=no"); } }; var oDictIgniter = { bDone: false, init: function () { if (!this.bDone) { oSpellControl.init(); this._setDictionary('fr-FR-modern', 'bDictModern'); this._setDictionary('fr-FR-classic', 'bDictClassic'); this._setDictionary('fr-FR-reform', 'bDictReform'); this._setDictionary('fr-FR-classic-reform', 'bDictClassicReform'); } }, _setDictionary: function (sDicName, sOptName) { try { oSpellControl.setExtensionDictFolder(sDicName, prefs.getBoolPref(sOptName)); } catch (e) { Cu.reportError(e); } } } var oTextFormatter = { init: function () { try { this.closePanel(); let sTFOptions = prefs.getCharPref("sTFOptions"); if (sTFOptions !== "") { this.setOptionsInPanel(JSON.parse(sTFOptions)); this.resetProgressBar(); } else { this.reset(); } } catch (e) { Cu.reportError(e); } }, apply: function () { try { this.saveOptions(); this.resetProgressBar(); let xEditor = new Editor(); let sText = xEditor.getContent(); let iParagraph = 0; sText = this.applyOptions(sText); for (let sParagraph of text.getParagraph(sText)) { xEditor.writeParagraph(iParagraph, sParagraph); iParagraph += 1; } } catch (e) { Cu.reportError(e); } }, saveOptions: function () { let oOptions = {}; for (let xNode of document.getElementsByClassName("option")) { oOptions[xNode.id] = xNode.checked; } //echo("save options: " + JSON.stringify(oOptions)); prefs.setCharPref("sTFOptions", JSON.stringify(oOptions)); }, setOptionsInPanel: function (oOptions) { for (let sOptName in oOptions) { //console.log(sOptName + ":" + oOptions[sOptName]); if (document.getElementById(sOptName) !== null) { document.getElementById(sOptName).checked = oOptions[sOptName]; if (sOptName.startsWith("o_group_")) { this.switchGroup(sOptName); } if (document.getElementById("res_"+sOptName) !== null) { document.getElementById("res_"+sOptName).textContent = ""; } } } }, switchGroup: function (sOptName) { if (document.getElementById(sOptName).checked) { document.getElementById(sOptName.slice(2)).style.opacity = 1; } else { document.getElementById(sOptName.slice(2)).style.opacity = 0.3; } }, reset: function () { try { this.resetProgressBar(); for (let xNode of document.getElementsByClassName('option')) { xNode.checked = (xNode.getAttribute('data-default') === "true"); if (xNode.id.startsWith("o_group_")) { this.switchGroup(xNode.id); } } } catch (e) { Cu.reportError(e); } }, resetProgressBar: function () { document.getElementById('progressbar').value = 0; document.getElementById('time_res').textContent = ""; }, getTimeRes: function (n) { // returns duration in seconds as string if (n < 10) { return n.toFixed(3).toString() + " s"; } if (n < 100) { return n.toFixed(2).toString() + " s"; } if (n < 1000) { return n.toFixed(1).toString() + " s"; } return n.toFixed().toString() + " s"; }, openPanel: function () { document.getElementById("grammarchecker-splitter").setAttribute("state", "collapsed"); document.getElementById("textformatter-splitter").setAttribute("state", "open"); }, closePanel: function () { document.getElementById("textformatter-splitter").setAttribute("state", "collapsed"); }, onOpenPanel: function (e) { this.openPanel(); }, onClosePanel: function (e) { this.closePanel(); }, onApply: function (e) { this.apply(); }, onReset: function (e) { this.reset(); }, // applyOptions: function (sText) { try { const t0 = Date.now(); //window.setCursor("wait"); // change pointer document.getElementById('progressbar').value = 0; document.getElementById('progressbar').max = 6; let n1 = 0, n2 = 0, n3 = 0, n4 = 0, n5 = 0, n6 = 0, n7 = 0; // espaces surnuméraires if (document.getElementById("o_group_ssp").checked) { if (document.getElementById("o_end_of_paragraph").checked) { [sText, n1] = this.formatText(sText, "end_of_paragraph"); document.getElementById('res_o_end_of_paragraph').textContent = n1; } if (document.getElementById("o_between_words").checked) { [sText, n1] = this.formatText(sText, "between_words"); document.getElementById('res_o_between_words').textContent = n1; } if (document.getElementById("o_start_of_paragraph").checked) { [sText, n1] = this.formatText(sText, "start_of_paragraph"); document.getElementById('res_o_start_of_paragraph').textContent = n1; } if (document.getElementById("o_before_punctuation").checked) { [sText, n1] = this.formatText(sText, "before_punctuation"); document.getElementById('res_o_before_punctuation').textContent = n1; } if (document.getElementById("o_within_parenthesis").checked) { [sText, n1] = this.formatText(sText, "within_parenthesis"); document.getElementById('res_o_within_parenthesis').textContent = n1; } if (document.getElementById("o_within_square_brackets").checked) { [sText, n1] = this.formatText(sText, "within_square_brackets"); document.getElementById('res_o_within_square_brackets').textContent = n1; } if (document.getElementById("o_within_quotation_marks").checked) { [sText, n1] = this.formatText(sText, "within_quotation_marks"); document.getElementById('res_o_within_quotation_marks').textContent = n1; } document.getElementById("o_group_ssp").checked = false; this.switchGroup("o_group_ssp"); } document.getElementById('progressbar').value = 1; // espaces typographiques if (document.getElementById("o_group_nbsp").checked) { if (document.getElementById("o_nbsp_before_punctuation").checked) { [sText, n1] = this.formatText(sText, "nbsp_before_punctuation"); [sText, n2] = this.formatText(sText, "nbsp_repair"); document.getElementById('res_o_nbsp_before_punctuation').textContent = n1 - n2; } if (document.getElementById("o_nbsp_within_quotation_marks").checked) { [sText, n1] = this.formatText(sText, "nbsp_within_quotation_marks"); document.getElementById('res_o_nbsp_within_quotation_marks').textContent = n1; } if (document.getElementById("o_nbsp_before_symbol").checked) { [sText, n1] = this.formatText(sText, "nbsp_before_symbol"); document.getElementById('res_o_nbsp_before_symbol').textContent = n1; } if (document.getElementById("o_nbsp_within_numbers").checked) { [sText, n1] = this.formatText(sText, "nbsp_within_numbers"); document.getElementById('res_o_nbsp_within_numbers').textContent = n1; } if (document.getElementById("o_nbsp_before_units").checked) { [sText, n1] = this.formatText(sText, "nbsp_before_units"); document.getElementById('res_o_nbsp_before_units').textContent = n1; } document.getElementById("o_group_nbsp").checked = false; this.switchGroup("o_group_nbsp"); } document.getElementById('progressbar').value = 2; // espaces manquants if (document.getElementById("o_group_typo").checked) { if (document.getElementById("o_ts_units").checked) { [sText, n1] = this.formatText(sText, "ts_units"); document.getElementById('res_o_ts_units').textContent = n1; } } if (document.getElementById("o_group_space").checked) { if (document.getElementById("o_add_space_after_punctuation").checked) { [sText, n1] = this.formatText(sText, "add_space_after_punctuation"); [sText, n2] = this.formatText(sText, "add_space_repair"); document.getElementById('res_o_add_space_after_punctuation').textContent = n1 - n2; } if (document.getElementById("o_add_space_around_hyphens").checked) { [sText, n1] = this.formatText(sText, "add_space_around_hyphens"); document.getElementById('res_o_add_space_around_hyphens').textContent = n1; } document.getElementById("o_group_space").checked = false; this.switchGroup("o_group_space"); } document.getElementById('progressbar').value = 3; // suppression if (document.getElementById("o_group_delete").checked) { if (document.getElementById("o_erase_non_breaking_hyphens").checked) { [sText, n1] = this.formatText(sText, "erase_non_breaking_hyphens"); document.getElementById('res_o_erase_non_breaking_hyphens').textContent = n1; } document.getElementById("o_group_delete").checked = false; this.switchGroup("o_group_delete"); } document.getElementById('progressbar').value = 4; // signes typographiques if (document.getElementById("o_group_typo").checked) { if (document.getElementById("o_ts_apostrophe").checked) { [sText, n1] = this.formatText(sText, "ts_apostrophe"); document.getElementById('res_o_ts_apostrophe').textContent = n1; } if (document.getElementById("o_ts_ellipsis").checked) { [sText, n1] = this.formatText(sText, "ts_ellipsis"); document.getElementById('res_o_ts_ellipsis').textContent = n1; } if (document.getElementById("o_ts_dash_start").checked) { if (document.getElementById("o_ts_m_dash_start").checked) { [sText, n1] = this.formatText(sText, "ts_m_dash_start"); } else { [sText, n1] = this.formatText(sText, "ts_n_dash_start"); } document.getElementById('res_o_ts_dash_start').textContent = n1; } if (document.getElementById("o_ts_dash_middle").checked) { if (document.getElementById("o_ts_m_dash_middle").checked) { [sText, n1] = this.formatText(sText, "ts_m_dash_middle"); } else { [sText, n1] = this.formatText(sText, "ts_n_dash_middle"); } document.getElementById('res_o_ts_dash_middle').textContent = n1; } if (document.getElementById("o_ts_quotation_marks").checked) { [sText, n1] = this.formatText(sText, "ts_quotation_marks"); document.getElementById('res_o_ts_quotation_marks').textContent = n1; } if (document.getElementById("o_ts_spell").checked) { [sText, n1] = this.formatText(sText, "ts_spell"); document.getElementById('res_o_ts_spell').textContent = n1; } if (document.getElementById("o_ts_ligature").checked) { // ligatures typographiques : fi, fl, ff, ffi, ffl, ft, st if (document.getElementById("o_ts_ligature_do").checked) { if (document.getElementById("o_ts_ligature_ffi").checked) { [sText, n1] = this.formatText(sText, "ts_ligature_ffi_do"); } if (document.getElementById("o_ts_ligature_ffl").checked) { [sText, n2] = this.formatText(sText, "ts_ligature_ffl_do"); } if (document.getElementById("o_ts_ligature_fi").checked) { [sText, n3] = this.formatText(sText, "ts_ligature_fi_do"); } if (document.getElementById("o_ts_ligature_fl").checked) { [sText, n4] = this.formatText(sText, "ts_ligature_fl_do"); } if (document.getElementById("o_ts_ligature_ff").checked) { [sText, n5] = this.formatText(sText, "ts_ligature_ff_do"); } if (document.getElementById("o_ts_ligature_ft").checked) { [sText, n6] = this.formatText(sText, "ts_ligature_ft_do"); } if (document.getElementById("o_ts_ligature_st").checked) { [sText, n7] = this.formatText(sText, "ts_ligature_st_do"); } } if (document.getElementById("o_ts_ligature_undo").checked) { if (document.getElementById("o_ts_ligature_ffi").checked) { [sText, n1] = this.formatText(sText, "ts_ligature_ffi_undo"); } if (document.getElementById("o_ts_ligature_ffl").checked) { [sText, n2] = this.formatText(sText, "ts_ligature_ffl_undo"); } if (document.getElementById("o_ts_ligature_fi").checked) { [sText, n3] = this.formatText(sText, "ts_ligature_fi_undo"); } if (document.getElementById("o_ts_ligature_fl").checked) { [sText, n4] = this.formatText(sText, "ts_ligature_fl_undo"); } if (document.getElementById("o_ts_ligature_ff").checked) { [sText, n5] = this.formatText(sText, "ts_ligature_ff_undo"); } if (document.getElementById("o_ts_ligature_ft").checked) { [sText, n6] = this.formatText(sText, "ts_ligature_ft_undo"); } if (document.getElementById("o_ts_ligature_st").checked) { [sText, n7] = this.formatText(sText, "ts_ligature_st_undo"); } } document.getElementById('res_o_ts_ligature').textContent = n1 + n2 + n3 + n4 + n5 + n6 + n7; } document.getElementById("o_group_typo").checked = false; this.switchGroup("o_group_typo"); } document.getElementById('progressbar').value = 5; // divers if (document.getElementById("o_group_misc").checked) { if (document.getElementById("o_ordinals_no_exponant").checked) { if (document.getElementById("o_ordinals_exponant").checked) { [sText, n1] = this.formatText(sText, "ordinals_exponant"); } else { [sText, n1] = this.formatText(sText, "ordinals_no_exponant"); } document.getElementById('res_o_ordinals_no_exponant').textContent = n1; } if (document.getElementById("o_etc").checked) { [sText, n1] = this.formatText(sText, "etc"); document.getElementById('res_o_etc').textContent = n1; } if (document.getElementById("o_missing_hyphens").checked) { [sText, n1] = this.formatText(sText, "missing_hyphens"); document.getElementById('res_o_missing_hyphens').textContent = n1; } if (document.getElementById("o_ma_word").checked) { [sText, n1] = this.formatText(sText, "ma_word"); if (document.getElementById("o_ma_1letter_lowercase").checked) { [sText, n1] = this.formatText(sText, "ma_1letter_lowercase"); if (document.getElementById("o_ma_1letter_uppercase").checked) { [sText, n1] = this.formatText(sText, "ma_1letter_uppercase"); } } document.getElementById('res_o_ma_word').textContent = n1; } document.getElementById("o_group_misc").checked = false; this.switchGroup("o_group_misc"); } document.getElementById('progressbar').value = document.getElementById('progressbar').max; // end of processing //window.setCursor("auto"); // restore pointer const t1 = Date.now(); document.getElementById('time_res').textContent = this.getTimeRes((t1-t0)/1000); } catch (e) { Cu.reportError(e); } return sText; }, formatText: function (sText, sOptName) { let nCount = 0; try { if (!tf.oReplTable.hasOwnProperty(sOptName)) { echo("# Error. TF: there is no option “" + sOptName+ "”."); return [sText, nCount]; } for (let [zRgx, sRep] of tf.oReplTable[sOptName]) { nCount += (sText.match(zRgx) || []).length; sText = sText.replace(zRgx, sRep); } } catch (e) { Cu.reportError(e); } return [sText, nCount]; } } /* EVENTS */ window.addEventListener("click", function (xEvent) { let xElem = xEvent.target; if (xElem.id && xElem.id.startsWith("o_group_")) { oTextFormatter.switchGroup(xElem.id); oTextFormatter.resetProgressBar(); } }, false); window.addEventListener("load", function (xEvent) { oDictIgniter.init(); oGrammarChecker.loadGC(); }, false); window.addEventListener("compose-window-init", function (xEvent) { oGrammarChecker.loadUI(); oGrammarChecker.closePanel(); oGrammarChecker.clearPreview(); oTextFormatter.init(); }, true); |
Added gc_lang/fr/tb/content/overlay.xul version [839d7e1171].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 | <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="chrome://grammarchecker/content/overlay.css" type="text/css"?> <!DOCTYPE overlay SYSTEM "chrome://grammarchecker/locale/overlay.dtd"> <overlay id="grammarchecker-overlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <script type="application/x-javascript" src="chrome://global/content/globalOverlay.js"/> <script type="application/x-javascript" src="overlay.js"/> <script type="application/x-javascript" src="spellchecker.js"/> <script type="application/x-javascript" src="editor.js"/> <stringbundleset id="stringbundleset"> <stringbundle id="grammarchecker-strings" src="chrome://grammarchecker/locale/grammarchecker.properties"/> </stringbundleset> <commandset id="composerEditMenuItems" commandupdater="true" events="focus" oncommandupdate="goUpdateCommand('cmd_grammar')"> <command id="cmd_grammar" label="&grammarchecker.button.label;" oncommand="goDoCommand('cmd_grammar')"/> </commandset> <menupopup id="taskPopup"> <!-- menu tools --> <menuitem id="grammarchecker-hello" command="cmd_grammar"/> </menupopup> <popup id="msgComposeContext"> <!-- contextual menu --> <menuitem id="context-grammarchecker" command="cmd_grammar" accesskey="&grammarchecker.accesskey;"/> </popup> <toolbarpalette id="MsgComposeToolbarPalette"> <!-- toolbar palette --> <toolbarbutton id="grammarchecker-toolbar-button" command="cmd_grammar" tooltiptext="&grammarchecker.tooltip;" class="toolbarbutton-1 chromeclass-toolbar-additional" /> <toolbarbutton id="grammalecte-menu" type="menu-button" label="Grammalecte" class="toolbarbutton-1" tooltip="&grammarchecker.tooltip;" oncommand=""> <menupopup id="gl-toolbar-popup"> <menuitem id="gl-item-conj" class="menuitem-iconic" label="&grammalectemenu.textformatter;" oncommand="oTextFormatter.onOpenPanel(event);"/> <menuitem id="gl-item-conj" class="menuitem-iconic" label="&grammalectemenu.conjugueur;" oncommand="oGrammarChecker.onOpenConjugueur(event);"/> <menuseparator/> <menuitem id="gl-item-analyze" class="menuitem-iconic" label="&grammalectemenu.start;" oncommand="oGrammarChecker.onParseText(event);"/> <menuitem id="gl-item-options" class="menuitem-iconic" label="&grammalectemenu.gc_options;" onclick="oGrammarChecker.onOpenGCOptions(event);"/> <menuitem id="gl-item-options" class="menuitem-iconic" label="&grammalectemenu.spell_options;" onclick="oGrammarChecker.onOpenSpellOptions(event);"/> <menuseparator/> <menuitem id="gl-item-about" class="menuitem-iconic" label="&grammalectemenu.about;" oncommand="oGrammarChecker.onAbout(event);"/> </menupopup> </toolbarbutton> </toolbarpalette> <vbox id="appcontent"> <!-- TEXT FORMATTER PANEL --> <splitter id="textformatter-splitter" state="collapsed" collapse="after"><grippy /></splitter> <vbox id="textformatter-panel"> <dialogheader id="textformatter-title" title="&textformatter;" description="&automated_replacements;" width="800"/> <hbox id="tf-columns"> <vbox class="column" width="400"> <!-- Supernumerary spaces --> <groupbox> <caption><checkbox id="o_group_ssp" class="option optiongroup" data-default="true" label="&tf_ssp;" /></caption> <vbox id="group_ssp" class="groupblock"> <hbox class="blockopt underline"> <checkbox id="o_start_of_paragraph" class="option" data-default="true" label="&tf_start_of_paragraph;" /> <spacer flex="1" /> <label id="res_o_start_of_paragraph" class="result" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_end_of_paragraph" class="option" data-default="true" label="&tf_end_of_paragraph;" /> <spacer flex="1" /> <label id="res_o_end_of_paragraph" class="result" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_between_words" class="option" data-default="true" label="&tf_between_words;" /> <spacer flex="1" /> <label id="res_o_between_words" class="result" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_before_punctuation" class="option" data-default="true" label="&tf_before_punctuation;" /> <spacer flex="1" /> <label id="res_o_before_punctuation" class="result" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_within_parenthesis" class="option" data-default="true" label="&tf_within_parenthesis;" /> <spacer flex="1" /> <label id="res_o_within_parenthesis" class="result" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_within_square_brackets" class="option" data-default="true" label="&tf_within_square_brackets;" /> <spacer flex="1" /> <label id="res_o_within_square_brackets" class="result" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_within_quotation_marks" class="option" data-default="true" label="&tf_within_quotation_marks;" /> <spacer flex="1" /> <label id="res_o_within_quotation_marks" class="result" /> </hbox> </vbox> </groupbox> <!-- Missing spaces --> <groupbox> <caption><checkbox id="o_group_space" class="option optiongroup" data-default="true" label="&tf_space;" /></caption> <vbox id="group_space" class="groupblock"> <hbox class="blockopt underline"> <checkbox id="o_add_space_after_punctuation" class="option" data-default="true" label="&tf_add_space_after_punctuation;" /> <spacer flex="1" /> <label id="res_o_add_space_after_punctuation" class="result" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_add_space_around_hyphens" class="option" data-default="true" label="&tf_add_space_around_hyphens;" /> <spacer flex="1" /> <label id="res_o_add_space_around_hyphens" class="result" /> </hbox> </vbox> </groupbox> <!-- Non breaking spaces --> <groupbox> <caption><checkbox id="o_group_nbsp" class="option optiongroup" data-default="true" label="&tf_nbsp;" /></caption> <vbox id="group_nbsp" class="groupblock"> <hbox class="blockopt underline"> <checkbox id="o_nbsp_before_punctuation" class="option" data-default="true" label="&tf_nbsp_before_punctuation;" /> <!--<div class="secondoption"> <checkbox id="o_nnbsp_before_punctuation" class="option" /> <label="o_nnbsp_before_punctuation" class="opt_lbl smallw">fines<span>sauf avec “:”</span></label> </div>--> <spacer flex="1" /> <label id="res_o_nbsp_before_punctuation" class="result" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_nbsp_within_quotation_marks" class="option" data-default="true" label="&tf_nbsp_within_quotation_marks;" /> <!--<div class="secondoption"> <checkbox id="o_nnbsp_within_quotation_marks" class="option" /> <label="o_nnbsp_within_quotation_marks" class="opt_lbl smallw">fines</label> </div>--> <spacer flex="1" /> <label id="res_o_nbsp_within_quotation_marks" class="result" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_nbsp_before_symbol" class="option" data-default="true" label="&tf_nbsp_before_symbol;" /> <spacer flex="1" /> <label id="res_o_nbsp_before_symbol" class="result" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_nbsp_within_numbers" class="option" data-default="true" label="&tf_nbsp_within_numbers;" /> <!--<div class="secondoption"> <checkbox id="o_nnbsp_within_numbers" class="option" /> <label="o_nnbsp_within_numbers" class="opt_lbl smallw">fines</label> </div>--> <spacer flex="1" /> <label id="res_o_nbsp_within_numbers" class="result" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_nbsp_before_units" class="option" data-default="true" label="&tf_nbsp_before_units;" /> <spacer flex="1" /> <label id="res_o_nbsp_before_units" class="result" /> </hbox> </vbox> </groupbox> <!-- Deletions --> <groupbox> <caption><checkbox id="o_group_delete" class="option optiongroup" data-default="true" label="&tf_delete;" /></caption> <vbox id="group_delete" class="groupblock"> <hbox class="blockopt underline"> <checkbox id="o_erase_non_breaking_hyphens" class="option" data-default="true" label="&tf_erase_non_breaking_hyphens;" /> <spacer flex="1" /> <label id="res_o_erase_non_breaking_hyphens" class="result" /> </hbox> </vbox> </groupbox> </vbox> <vbox class="column" width="400"> <!-- Typographical signs --> <groupbox> <caption><checkbox id="o_group_typo" class="option optiongroup" data-default="true" label="&tf_typo;" /></caption> <vbox id="group_typo" class="groupblock"> <hbox class="blockopt underline"> <checkbox id="o_ts_apostrophe" class="option" data-default="true" label="&tf_ts_apostrophe;" /> <spacer flex="1" /> <label id="res_o_ts_apostrophe" class="result" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_ts_ellipsis" class="option" data-default="true" label="&tf_ts_ellipsis;" /> <spacer flex="1" /> <label id="res_o_ts_ellipsis" class="result" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_ts_dash_middle" class="option" data-default="true" label="&tf_ts_dash_middle;" /> <spacer flex="1" /> <label id="res_o_ts_dash_middle" class="result" /> </hbox> <hbox class="blockopt"> <spacer flex="1" /> <radiogroup orient="horizontal"> <radio id="o_ts_m_dash_middle" class="option" data-default="false" label="&tf_emdash;" /> <radio id="o_ts_n_dash_middle" class="option" data-default="true" label="&tf_endash;" selected="true" /> </radiogroup> <spacer flex="3" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_ts_dash_start" class="option" data-default="true" label="&tf_ts_dash_start;" /> <spacer flex="1" /> <label id="res_o_ts_dash_start" class="result" /> </hbox> <hbox class="blockopt"> <spacer flex="1" /> <radiogroup orient="horizontal"> <radio id="o_ts_m_dash_start" class="option" data-default="true" label="&tf_emdash;" selected="true" /> <radio id="o_ts_n_dash_start" class="option" data-default="false" label="&tf_endash;" /> </radiogroup> <spacer flex="3" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_ts_quotation_marks" class="option" data-default="true" label="&tf_ts_quotation_marks;" /> <spacer flex="1" /> <label id="res_o_ts_quotation_marks" class="result" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_ts_units" class="option" data-default="true" label="&tf_ts_units;" /> <spacer flex="1" /> <label id="res_o_ts_units" class="result" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_ts_spell" class="option" data-default="true" label="&tf_ts_spell;" /> <spacer flex="1" /> <label id="res_o_ts_spell" class="result" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_ts_ligature" class="option" data-default="false" label="&tf_ts_ligature;" /> <input type="radio" id="o_ts_ligature_do" name="liga" class="option" data-default="false" label="&tf_ts_ligature_do;" /> <input type="radio" id="o_ts_ligature_undo" name="liga" class="option" data-default="true" label="&tf_ts_ligature_undo;" /> <spacer flex="1" /> <label id="res_o_ts_ligature" class="result" /> </hbox> <hbox class="blockopt"> <spacer flex="1" /> <checkbox id="o_ts_ligature_ff" class="option" data-default="true" label="ff" /> <checkbox id="o_ts_ligature_fi" class="option" data-default="true" label="fi" /> <checkbox id="o_ts_ligature_ffi" class="option" data-default="true" label="ffi" /> <checkbox id="o_ts_ligature_fl" class="option" data-default="true" label="fl" /> <checkbox id="o_ts_ligature_ffl" class="option" data-default="true" label="ffl" /> <checkbox id="o_ts_ligature_ft" class="option" data-default="true" label="ft" /> <checkbox id="o_ts_ligature_st" class="option" data-default="false" label="st" /> <spacer flex="2" /> </hbox> </vbox> </groupbox> <!-- Misc --> <groupbox> <caption><checkbox id="o_group_misc" class="option optiongroup" data-default="true" label="&tf_misc;" /></caption> <vbox id="group_misc" class="groupblock"> <hbox class="blockopt underline"> <checkbox id="o_ordinals_no_exponant" class="option" data-default="true" label="&tf_ordinals_no_exponant;" /> <checkbox id="o_ordinals_exponant" class="option" data-default="true" label="&tf_ordinals_exponant;" /> <spacer flex="1" /> <label id="res_o_ordinals_no_exponant" class="result" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_etc" class="option" data-default="true" label="&tf_etc;" /> <spacer flex="1" /> <label id="res_o_etc" class="result" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_missing_hyphens" class="option" data-default="true" label="&tf_missing_hyphens;" /> <spacer flex="1" /> <label id="res_o_missing_hyphens" class="result" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_ma_word" class="option" data-default="true" label="&tf_ma_word;" /> <spacer flex="1" /> <label id="res_o_ma_word" class="result" /> </hbox> <hbox class="blockopt"> <spacer flex="1" /> <checkbox id="o_ma_1letter_lowercase" class="option" label="&tf_ma_1letter_lowercase;" /> <checkbox id="o_ma_1letter_uppercase" class="option" label="&tf_ma_1letter_uppercase;" /> <spacer flex="3" /> </hbox> </vbox> </groupbox> <!-- Restructuration --> <!--<groupbox> <caption><checkbox id="o_group_struct" class="option optiongroup" data-default="false" label="&tf_struct;" /></caption> <vbox id="group_struct" class="groupblock"> <hbox class="blockopt underline"> <checkbox id="o_remove_hyphens_at_end_of_paragraphs" class="option" data-default="false" label="&tf_remove_hyphens_at_end_of_paragraphs;" /> <spacer flex="1" /> <label id="res_o_remove_hyphens_at_end_of_paragraphs" class="result" /> </hbox> <hbox class="blockopt underline"> <checkbox id="o_merge_contiguous_paragraphs" class="option" data-default="false" label="&tf_merge_contiguous_paragraphs;" /> <spacer flex="1" /> <label id="res_o_merge_contiguous_paragraphs" class="result" /> </hbox> </vbox> </groupbox>--> <description id="textformatter-infomsg">&tf_infomsg;</description> </vbox> </hbox> <hbox id="textformatter-commands"> <button id="reset" label="&tf.button.default;" oncommand="oTextFormatter.onReset(event);" /> <progressmeter id="progressbar" mode="determined" width="470" /> <label id="time_res" width="50"></label> <button id="apply" label="&tf.button.apply;" oncommand="oTextFormatter.onApply(event);" /> <button id="close" label="&tf.button.close;" oncommand="oTextFormatter.onClosePanel(event);" /> </hbox> </vbox> <!-- GRAMMAR CHECKING PANEL --> <splitter id="grammarchecker-splitter" state="collapsed" collapse="after"><grippy /></splitter> <vbox id="grammarchecker-panel"> <dialogheader id="grammalecte-title" title="Grammalecte" description="&detected_mistakes;"/> <div id="grammalecte-errors"/> <hbox id="grammalecte-infobox"> <label id="grammalecte-info" /> <spacer flex="1" /> <label id="closebutton" value="Fermer" onclick="oGrammarChecker.onClosePanel(event);" /> </hbox> </vbox> </vbox> </overlay> |
Added gc_lang/fr/tb/content/spell_options.css version [2179034562].
> > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /* CSS */ #grouptitle { font-size: 16px; font-weight: bold; color: hsl(0, 50%, 50%); } .option { font-size: 16px; font-weight: bold; color: hsl(210, 50%, 50%); } .dicdescr { margin-left: 27px; } |
Added gc_lang/fr/tb/content/spell_options.js version [9ebffece09].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | // JavaScript "use strict"; const Cc = Components.classes; const Ci = Components.interfaces; const Cu = Components.utils; const prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.grammarchecker."); const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {}); function echo (...args) { Services.console.logStringMessage(args.join(" -- ") + "\n"); } var oDialogControl = { load: function () { try { document.getElementById('fr-FR-modern').checked = prefs.getBoolPref('bDictModern'); document.getElementById('fr-FR-classic').checked = prefs.getBoolPref('bDictClassic'); document.getElementById('fr-FR-reform').checked = prefs.getBoolPref('bDictReform'); document.getElementById('fr-FR-classic-reform').checked = prefs.getBoolPref('bDictClassicReform'); document.getElementById('grammalecte-spelloptions-window').centerWindowOnScreen(); } catch (e) { Cu.reportError(e); } }, setDictionaries: function () { oSpellControl.init(); this._setDictionary('fr-FR-modern', 'bDictModern'); this._setDictionary('fr-FR-classic', 'bDictClassic'); this._setDictionary('fr-FR-reform', 'bDictReform'); this._setDictionary('fr-FR-classic-reform', 'bDictClassicReform'); }, _setDictionary: function (sDicName, sOptName) { try { let bActivate = document.getElementById(sDicName).checked; oSpellControl.setExtensionDictFolder(sDicName, bActivate); prefs.setBoolPref(sOptName, bActivate); } catch (e) { Cu.reportError(e); } } }; |
Added gc_lang/fr/tb/content/spell_options.xul version [5453a7e2cc].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | <?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin/" type="text/css"?> <?xml-stylesheet href="chrome://grammarchecker/content/spell_options.css" type="text/css"?> <!DOCTYPE dialog SYSTEM "chrome://grammarchecker/locale/spell_options.dtd"> <dialog id="grammalecte-spelloptions-window" title="&window.title;" orient="vertical" buttons="accept,cancel" ondialogaccept="oDialogControl.setDictionaries();" ondialogcancel="return;" width="400" height="660" onload="oDialogControl.load();" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <!-- Other elements go here --> <dialogheader id="grammalecte-title" title="&dialogheader.label;" description=""/> <groupbox id="dictchoice"> <caption id="grouptitle" label="&grouptitle;" /> <description id="warning">&warning;</description> <checkbox id="fr-FR-modern" class="option" label="&option.modern.label;" /> <description class="dicdescr">&option.modern.descr;</description> <checkbox id="fr-FR-classic" class="option" label="&option.classic.label;" /> <description class="dicdescr">&option.classic.descr;</description> <checkbox id="fr-FR-reform" class="option" label="&option.reform.label;" /> <description class="dicdescr">&option.reform.descr;</description> <checkbox id="fr-FR-classic-reform" class="option" label="&option.allvar.label;" /> <description class="dicdescr">&option.allvar.descr;</description> </groupbox> <script type="application/x-javascript" src="spell_options.js"/> <script type="application/x-javascript" src="spellchecker.js"/> </dialog> |
Added gc_lang/fr/tb/content/spellchecker.js version [3be1484aff].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | // JavaScript /* Hunspell wrapper XPCOM obsolete (?), but there is nothing else... Overly complicated and weird. To throw away ASAP if possible. And you can’t access to this from a PromiseWorker (it sucks). https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/mozISpellCheckingEngine https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL/Using_spell_checking_in_XUL https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIFile https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/FileUtils.jsm */ "use strict"; /* const Cc = Components.classes; const Ci = Components.interfaces; const Cu = Components.utils; const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {}); */ const FileUtils = Cu.import("resource://gre/modules/FileUtils.jsm").FileUtils; const AddonManager = Cu.import("resource://gre/modules/AddonManager.jsm").AddonManager; /* const parser = Cc["@mozilla.org/parserutils;1"].getService(Ci.nsIParserUtils); const persodict = Cc["@mozilla.org/spellchecker/personaldictionary;1"].getService(Ci.mozIPersonalDictionary); */ const system = require("sdk/system"); var oSpellControl = { xSCEngine: null, init: function () { if (this.xSCEngine === null) { try { let sSpellchecker = "@mozilla.org/spellchecker/myspell;1"; if ("@mozilla.org/spellchecker/hunspell;1" in Cc) { sSpellchecker = "@mozilla.org/spellchecker/hunspell;1"; } if ("@mozilla.org/spellchecker/engine;1" in Cc) { sSpellchecker = "@mozilla.org/spellchecker/engine;1"; } this.xSCEngine = Cc[sSpellchecker].getService(Ci.mozISpellCheckingEngine); } catch (e) { echo("Can’t initiate the spellchecker."); Cu.reportError(e); } } }, getDictionariesList: function () { this.init(); try { let l = {}; let c = {}; this.xSCEngine.getDictionaryList(l, c); return l.value; } catch (e) { Cu.reportError(e); return []; } }, setDictionary: function (sLocale) { if (this.getDictionariesList().includes(sLocale)) { try { this.xSCEngine.dictionary = sLocale; // en-US, fr, etc. return true; } catch (e) { Cu.reportError(e); return false; } } else { echo("Warning. No dictionary for locale: " + sLocale); echo("Existing dictionaries: " + this.getDictionariesList().join(" | ")); } return false; }, check: function (sWord) { // todo: check in personal dict? try { return this.xSCEngine.check(sWord); } catch (e) { Cu.reportError(e); return false; } }, suggest: function (sWord) { try { let lSugg = {}; this.xSCEngine.suggest(sWord, lSugg, {}); return lSugg.value; // lSugg.value is a JavaScript Array of strings } catch (e) { Cu.reportError(e); return ['#Erreur.']; } }, addDirectory: function (sFolder) { try { let xNsiFolder = new FileUtils.File(sFolder); this.xSCEngine.addDirectory(xNsiFolder); } catch (e) { echo("Unable to add directory: " + sFolder); Cu.reportError(e); } }, removeDirectory: function (sFolder) { // does not work but no exception raised (bug?) try { let xNsiFolder = new FileUtils.File(sFolder); this.xSCEngine.removeDirectory(xNsiFolder); } catch (e) { echo("Unable to remove directory: " + sFolder); Cu.reportError(e); } }, setExtensionDictFolder: function (sDictName, bActivate) { try { let that = this; let sPath = "/content/dictionaries/" + sDictName; AddonManager.getAddonByID("French-GC-TB@grammalecte.net", function (addon) { let xURI = addon.getResourceURI(sPath); //console.log("> " + xURI.path); let sFolder = xURI.path; if (system.platform === "winnt") { sFolder = sFolder.slice(1).replace(/\//g, "\\\\"); } //console.log("> " + sFolder); if (bActivate) { that.addDirectory(sFolder); } else { that.removeDirectory(sFolder); } }); } catch (e) { echo("Unable to add extension folder"); Cu.reportError(e); } } }; |
Added gc_lang/fr/tb/defaults/preferences/grammarchecker.js version [cf9e139e0c].
> > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 | pref("extensions.grammarchecker.urlpref1", "http://localhost:8081"); pref("extensions.grammarchecker.urlpref2", "https://languagetool.org:8081/"); pref("extensions.grammarchecker.langpref", "en"); pref("extensions.grammarchecker.mothertongue", ""); pref("extensions.grammarchecker.sGCOptions", ""); pref("extensions.grammarchecker.sTFOptions", ""); pref("extensions.grammarchecker.bDictModern", false); pref("extensions.grammarchecker.bDictClassic", true); pref("extensions.grammarchecker.bDictReform", false); pref("extensions.grammarchecker.bDictClassicReform", false); |
Added gc_lang/fr/tb/icon.png version [9598be5e3c].
cannot compute difference between binary files
Added gc_lang/fr/tb/install.rdf version [5bcaa105f6].
> > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?xml version="1.0" encoding="UTF-8"?> <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#"> <Description about="urn:mozilla:install-manifest"> <em:id>${tb_identifier}</em:id> <em:name>${tb_name}</em:name> <em:type>2</em:type> <em:version>${version}</em:version> <em:creator>${author}</em:creator> <em:description>${description}</em:description> <em:homepageURL>${link}</em:homepageURL> <!--<em:optionsURL>chrome://grammarchecker/content/options.xul</em:optionsURL>--> <em:unpack>true</em:unpack> <em:targetApplication> <Description> <em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id> <!-- thunderbird --> <em:minVersion>45.8</em:minVersion> <em:maxVersion>49.0</em:maxVersion> </Description> </em:targetApplication> </Description> </RDF> |
Added gc_lang/fr/tb/locale/en/about.dtd version [586b114cab].
> > > > > > > | 1 2 3 4 5 6 7 | <!ENTITY windowtitle "About Grammalecte"> <!ENTITY description1 "French"> <!ENTITY description2 "Grammar Checker"> <!ENTITY version "Version:"> <!ENTITY license "License:"> <!ENTITY thanks "Thanks to"> <!ENTITY contrib "and those who supported us…"> |
Added gc_lang/fr/tb/locale/en/gc_options.dtd version [6feaf76b9e].
> > > > | 1 2 3 4 | <!ENTITY window.title "Grammalecte · Grammar options"> <!ENTITY defaultbutton.label "Default"> <!ENTITY dialogheader.label "Grammar options"> ${gc_options_labels_en} |
Added gc_lang/fr/tb/locale/en/grammarchecker.properties version [ef0da976ea].
> > > | 1 2 3 | processingMessage=Parsing in progress… errorMessage=Error… noErrorMessage=No error detected. |
Added gc_lang/fr/tb/locale/en/options.dtd version [b6958607cd].
> > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | <!ENTITY prefwindow.title "Grammalecte · Options"> <!ENTITY panel.title "Grammar Checker preferences"> <!ENTITY panel.description "Options are available in the menu Grammalecte in composing windows."> <!ENTITY urlpref1.label "Primary LanguageTool server:"> <!ENTITY urlpref1.accesskey "P"> <!ENTITY urlpref2.label "Secondary LanguageTool server:"> <!ENTITY urlpref2.accesskey "S"> <!ENTITY langpref.label "Default language:"> <!ENTITY langpref.accesskey "L"> <!ENTITY mothertongue.label "Mother tongue:"> <!ENTITY mothertongue.accesskey "M"> <!ENTITY gc_options.label "Grammar options"> <!ENTITY gc_options.accesskey "G"> |
Added gc_lang/fr/tb/locale/en/overlay.dtd version [eb2ccc3642].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | <!ENTITY grammarchecker.button.label "Grammar"> <!ENTITY grammarchecker.accesskey "G"> <!ENTITY grammarchecker.tooltip "Grammar checking"> <!ENTITY grammalectemenu.textformatter "Text formatter…"> <!ENTITY grammalectemenu.conjugueur "Conjugation tool…"> <!ENTITY grammalectemenu.start "Proofread the text…"> <!ENTITY grammalectemenu.spell_options "Spelling options…"> <!ENTITY grammalectemenu.gc_options "Grammar options…"> <!ENTITY grammalectemenu.about "About Grammalecte…"> <!ENTITY detected_mistakes "Detected mistakes"> <!ENTITY textformatter "Text Formatter"> <!ENTITY automated_replacements "Automated replacements"> <!ENTITY tf.button.default "Default"> <!ENTITY tf.button.apply "Apply"> <!ENTITY tf.button.close "Close"> <!ENTITY tf_title "Text Formatter"> <!ENTITY tf_ssp "Supernumerary spaces"> <!ENTITY tf_start_of_paragraph "At the beginning of paragraph"> <!ENTITY tf_between_words "Between words"> <!ENTITY tf_end_of_paragraph "At the end of paragraph"> <!ENTITY tf_before_punctuation "Before dots (.), commas (,)"> <!ENTITY tf_within_parenthesis "Within parenthesis"> <!ENTITY tf_within_square_brackets "Within square brackets"> <!ENTITY tf_within_quotation_marks "Within “ and ”"> <!ENTITY tf_space "Missing spaces"> <!ENTITY tf_add_space_after_punctuation "After , ; : ? ! . …"> <!ENTITY tf_add_space_around_hyphens "Surrounding dashes"> <!ENTITY tf_nbsp "Non breaking spaces"> <!ENTITY tf_nbsp_before_punctuation "Before : ; ? and !"> <!ENTITY tf_nbsp_within_quotation_marks "With quoting marks « and »"> <!ENTITY tf_nbsp_before_symbol "Before % ‰ € $ £ ¥ ˚C"> <!ENTITY tf_nbsp_within_numbers "Within numbers"> <!ENTITY tf_nbsp_before_units "Before units of measurement"> <!ENTITY tf_delete "Deletions"> <!ENTITY tf_erase_non_breaking_hyphens "Soft hyphens"> <!ENTITY tf_typo "Typographical signs"> <!ENTITY tf_ts_apostrophe "Apostrophe (’)"> <!ENTITY tf_ts_ellipsis "Ellipsis (…)"> <!ENTITY tf_ts_dash_middle "Dashes:"> <!ENTITY tf_ts_dash_start "Dashes at beginning of paragraph:"> <!ENTITY tf_emdash "em dash (—)"> <!ENTITY tf_endash "en dash (–)"> <!ENTITY tf_ts_quotation_marks "Change quotation marks (" and ')"> <!ENTITY tf_ts_units "Interpuncts in units (N·m, Ω·m…)"> <!ENTITY tf_ts_spell "Ligatures (cœur…) and diacritics (ça, État…)"> <!ENTITY tf_ts_ligature "Ligatures"> <!ENTITY tf_ts_ligature_do "Set"> <!ENTITY tf_ts_ligature_undo "Unset"> <!ENTITY tf_misc "Miscellaneous"> <!ENTITY tf_ordinals_no_exponant "Ordinals (15e, XXIe…)"> <!ENTITY tf_ordinals_exponant "e → ᵉ"> <!ENTITY tf_etc "Et cætera, etc."> <!ENTITY tf_missing_hyphens "Missing hyphens"> <!ENTITY tf_ma_word "Missing apostrophes"> <!ENTITY tf_ma_1letter_lowercase "single letters (j’ n’ m’ t’ s’ c’ d’ l’)"> <!ENTITY tf_ma_1letter_uppercase "Cap."> <!ENTITY tf_struct "Restructuration [!]"> <!ENTITY tf_remove_hyphens_at_end_of_paragraphs "Remove syllabification hyphens at EOL/EOP"> <!ENTITY tf_merge_contiguous_paragraphs "Merge contiguous paragraphs [!]"> <!ENTITY tf_apply "Apply"> <!ENTITY tf_default "Default"> <!ENTITY tf_close "Close"> <!ENTITY tf_infomsg "The text formatter is a tool which automates correction of typographical errors. Use this tool with caution. Check your text after use. If you write in HTML mode, the use of this module is at your own risk."> |
Added gc_lang/fr/tb/locale/en/spell_options.dtd version [fc660cb649].
> > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | <!ENTITY window.title "Grammalecte · Spelling options"> <!ENTITY dialogheader.label "Spelling options"> <!ENTITY grouptitle "Select one or several dictionaries"> <!ENTITY warning "Select dictionaries you want to see in textareas list. Selected dictionaries are added instantly. Whereas unselected dictionnaries will be removed only at Thunderbird’s restart."> <!ENTITY option.modern.label "“Modern”"> <!ENTITY option.modern.descr "This dictionary offers the French spelling as it is written nowadays most often. This is the recommended dictionary if French is not your mother tongue or if you want only one correct spelling per word."> <!ENTITY option.classic.label "“Classic” (recommanded)"> <!ENTITY option.classic.descr "This is the “Modern” dictionary plus classical spellings, some of them still widely used, others obsolete. This is the recommended dictionary if French is your native language."> <!ENTITY option.reform.label "“Reform 1990”"> <!ENTITY option.reform.descr "With this dictionary, only the reformed spelling is recognized. As many of reformed spellings are considered erroneous for many people, this dictionary is unadvised. Reformed spellings commonly used are already included in the “Modern” dictionary."> <!ENTITY option.allvar.label "“All variants”"> <!ENTITY option.allvar.descr "This dictionary contains all spelling variants, classical and reformed, and some others even rarer. This dictionary is unadvised for those who don’t know very well the French language."> |
Added gc_lang/fr/tb/locale/fr/about.dtd version [4705e2f2e0].
> > > > > > > | 1 2 3 4 5 6 7 | <!ENTITY windowtitle "À propos de Grammalecte"> <!ENTITY description1 "Correcteur grammatical"> <!ENTITY description2 "pour le français"> <!ENTITY version "Version :"> <!ENTITY license "Licence :"> <!ENTITY thanks "Avec le soutien de"> <!ENTITY contrib "et de nombreux contributeurs…"> |
Added gc_lang/fr/tb/locale/fr/gc_options.dtd version [aa14ca951b].
> > > > | 1 2 3 4 | <!ENTITY window.title "Grammalecte · Options grammaticales"> <!ENTITY defaultbutton.label "Par défaut"> <!ENTITY dialogheader.label "Options grammaticales"> ${gc_options_labels_fr} |
Added gc_lang/fr/tb/locale/fr/grammarchecker.properties version [e42689d6bb].
> > > | 1 2 3 | processingMessage=Analyse en cours errorMessage=Erreur… noErrorMessage=Aucune erreur détectée. |
Added gc_lang/fr/tb/locale/fr/options.dtd version [e61e5be36a].
> > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | <!ENTITY prefwindow.title "Grammalecte · Options"> <!ENTITY panel.title "Préférences de la correction grammaticale"> <!ENTITY panel.description "Les options sont disponibles dans le menu Grammalecte des fenêtres de rédaction."> <!ENTITY urlpref1.label "Serveur primaire:"> <!ENTITY urlpref1.accesskey "P"> <!ENTITY urlpref2.label "Serveur secondaire:"> <!ENTITY urlpref2.accesskey "S"> <!ENTITY langpref.label "Langue par défaut:"> <!ENTITY langpref.accesskey "L"> <!ENTITY mothertongue.label "Langue maternelle:"> <!ENTITY mothertongue.accesskey "M"> <!ENTITY gc_options.label "Options grammaticales"> <!ENTITY gc_options.accesskey "G"> |
Added gc_lang/fr/tb/locale/fr/overlay.dtd version [803c279517].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | <!ENTITY grammarchecker.button.label "Grammaire"> <!ENTITY grammarchecker.accesskey "G"> <!ENTITY grammarchecker.tooltip "Correction grammaticale"> <!ENTITY grammalectemenu.textformatter "Formateur de texte…"> <!ENTITY grammalectemenu.conjugueur "Conjugueur…"> <!ENTITY grammalectemenu.start "Analyser le texte…"> <!ENTITY grammalectemenu.spell_options "Options orthographiques…"> <!ENTITY grammalectemenu.gc_options "Options grammaticales…"> <!ENTITY grammalectemenu.about "À propos de Grammalecte…"> <!ENTITY detected_mistakes "Erreurs détectées"> <!ENTITY textformatter "Formateur de texte"> <!ENTITY automated_replacements "Remplacements automatisés"> <!ENTITY tf.button.default "Par défaut"> <!ENTITY tf.button.apply "Appliquer"> <!ENTITY tf.button.close "Fermer"> <!ENTITY tf_title "Formateur de texte"> <!ENTITY tf_ssp "Espaces surnuméraires"> <!ENTITY tf_start_of_paragraph "En début de paragraphe"> <!ENTITY tf_between_words "Entre les mots"> <!ENTITY tf_end_of_paragraph "En fin de paragraphe"> <!ENTITY tf_before_punctuation "Avant les points (.), les virgules (,)"> <!ENTITY tf_within_parenthesis "À l’intérieur des parenthèses"> <!ENTITY tf_within_square_brackets "À l’intérieur des crochets"> <!ENTITY tf_within_quotation_marks "À l’intérieur des guillemets “ et ”"> <!ENTITY tf_space "Espaces manquants"> <!ENTITY tf_add_space_after_punctuation "Après , ; : ? ! . …"> <!ENTITY tf_add_space_around_hyphens "Autour des tirets d’incise"> <!ENTITY tf_nbsp "Espaces insécables"> <!ENTITY tf_nbsp_before_punctuation "Avant : ; ? et !"> <!ENTITY tf_nbsp_within_quotation_marks "Avec les guillemets « et »"> <!ENTITY tf_nbsp_before_symbol "Avant % ‰ € $ £ ¥ ˚C"> <!ENTITY tf_nbsp_within_numbers "À l’intérieur des nombres"> <!ENTITY tf_nbsp_before_units "Avant les unités de mesure"> <!ENTITY tf_delete "Suppressions"> <!ENTITY tf_erase_non_breaking_hyphens "Tirets conditionnels"> <!ENTITY tf_typo "Signes typographiques"> <!ENTITY tf_ts_apostrophe "Apostrophe (’)"> <!ENTITY tf_ts_ellipsis "Points de suspension (…)"> <!ENTITY tf_ts_dash_middle "Tirets d’incise :"> <!ENTITY tf_ts_dash_start "Tirets en début de paragraphe :"> <!ENTITY tf_emdash "cadratin (—)"> <!ENTITY tf_endash "demi-cadratin (–)"> <!ENTITY tf_ts_quotation_marks "Modifier les guillemets droits (" et ')"> <!ENTITY tf_ts_units "Points médians des unités (N·m, Ω·m…)"> <!ENTITY tf_ts_spell "Ligatures (cœur…) et diacritiques (ça, État…)"> <!ENTITY tf_ts_ligature "Ligatures"> <!ENTITY tf_ts_ligature_do "Faire"> <!ENTITY tf_ts_ligature_undo "Défaire"> <!ENTITY tf_misc "Divers"> <!ENTITY tf_ordinals_no_exponant "Ordinaux (15e, XXIe…)"> <!ENTITY tf_ordinals_exponant "e → ᵉ"> <!ENTITY tf_etc "Et cætera, etc."> <!ENTITY tf_missing_hyphens "Traits d’union manquants"> <!ENTITY tf_ma_word "Apostrophes manquantes"> <!ENTITY tf_ma_1letter_lowercase "lettres isolées (j’ n’ m’ t’ s’ c’ d’ l’)"> <!ENTITY tf_ma_1letter_uppercase "Maj."> <!ENTITY tf_struct "Restructuration [!]"> <!ENTITY tf_remove_hyphens_at_end_of_paragraphs "Enlever césures en fin de ligne/paragraphe [!]"> <!ENTITY tf_merge_contiguous_paragraphs "Fusionner les paragraphes contigus [!]"> <!ENTITY tf_apply "Appliquer"> <!ENTITY tf_default "Par défaut"> <!ENTITY tf_close "Fermer"> <!ENTITY tf_infomsg "Le formateur de texte est un outil qui automatise la correction d’erreurs typographiques. Utilisez l’outil avec prudence. Vérifiez votre texte après emploi. Si vous écrivez en mode HTML, l’emploi de ce module est à vos risques et périls."> |
Added gc_lang/fr/tb/locale/fr/spell_options.dtd version [43af7ee338].
> > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | <!ENTITY window.title "Grammalecte · Options orthographiques"> <!ENTITY dialogheader.label "Options orthographiques"> <!ENTITY grouptitle "Choisissez un ou plusieurs dictionnaires"> <!ENTITY warning "Cochez les dictionnaires que vous voulez voir apparaître dans la liste des dictionnaires utilisables. L’ajout des dictionnaires se fait instantanément. En revanche, les dictionnaires ôtés ne disparaîtront qu’au redémarrage de Thunderbird."> <!ENTITY option.modern.label "“Moderne”"> <!ENTITY option.modern.descr "Ce dictionnaire propose l’orthographe telle qu’elle est écrite aujourd’hui le plus couramment. C’est le dictionnaire recommandé si le français n’est pas votre langue maternelle ou si vous ne désirez qu’une seule graphie correcte par mot."> <!ENTITY option.classic.label "“Classique” (recommandé)"> <!ENTITY option.classic.descr "Il s’agit du dictionnaire “Moderne”, avec des graphies classiques en sus, certaines encore communément utilisées, d’autres désuètes. C’est le dictionnaire recommandé si le français est votre langue maternelle."> <!ENTITY option.reform.label "“Réforme 1990”"> <!ENTITY option.reform.descr "Avec ce dictionnaire, seule l’orthographe réformée est reconnue. Attendu que bon nombre de graphies réformées sont considérées comme erronées par beaucoup, ce dictionnaire est déconseillé. Les graphies passées dans l’usage sont déjà incluses dans le dictionnaire “Moderne”."> <!ENTITY option.allvar.label "“Toutes variantes”"> <!ENTITY option.allvar.descr "Ce dictionnaire contient les variantes graphiques, classiques, réformées, ainsi que d’autres plus rares encore. Ce dictionnaire est déconseillé à ceux qui ne connaissent pas très bien la langue française."> |
Added gc_lang/fr/tb/skin/LaMouette_small.png version [6778e9b924].
cannot compute difference between binary files
Added gc_lang/fr/tb/skin/grammarcheck.png version [9598be5e3c].
cannot compute difference between binary files
Added gc_lang/fr/tb/skin/grammarcheck_disabled.png version [f900d73926].
cannot compute difference between binary files
Added gc_lang/fr/tb/skin/grammarcheck_small.png version [dcb1bf8ae0].
cannot compute difference between binary files
Added gc_lang/fr/tb/skin/grammarcheck_small_disabled.png version [502cc08b3e].
cannot compute difference between binary files
Added gc_lang/fr/tb/skin/logo100.png version [137b3e197f].
cannot compute difference between binary files
Added gc_lang/fr/tb/skin/logo120_text.png version [c438dd0680].
cannot compute difference between binary files
Added gc_lang/fr/xpi/README.txt version [2d1b4f42d1].
> > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | = GRAMMALECTE = French grammar checker By Olivier R. (olivier /at/ grammalecte /dot/ net) Website: http://www.dicollecte.org/grammalecte License: GPL 3 -- http://www.gnu.org/copyleft/gpl.html Grammalecte for Firefox is a derivative tool born from the version for LibreOffice written in Python. Written in JavaScript ES6/ES7. |
Added gc_lang/fr/xpi/chrome.manifest version [84f3dd0c20].
> > > | 1 2 3 | # https://developer.mozilla.org/en-US/docs/Chrome_Registration content promiseworker ./ resource grammalecte ./grammalecte/ |
Added gc_lang/fr/xpi/data/about_panel.css version [0df7e9268c].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 | /* panel.css */ @import url("common.css"); header { background-color: hsl(0, 0%, 96%); border-bottom: 1px solid hsl(0, 0%, 90%); padding: 10px 0; font-family: "Verdana", sans-serif; color: hsl(0, 0%, 0%); } body { background-color: hsl(0, 0%, 86%); font-family: "Trebuchet MS", sans-serif; overflow-x: hidden; color: hsl(0, 0%, 0%); } h1 { font-size: 20px; color: hsl(210, 30%, 40%); font-family: "Trebuchet MS", sans-serif; } p.underline { padding: 5px 0; background-color: hsl(210, 5%, 92%); margin-bottom: 10px; color: hsl(0, 0%, 0%); } .key { width: 150px; letter-spacing: -0.3em; } #links { margin: 20px 0 10px 0; } a.link { color: hsl(210, 30%, 40%); text-decoration: none; } a.link:hover { color: hsl(210, 30%, 30%); text-shadow: 0 0 3px hsl(210, 30%, 40%); } #dictionaries_info { margin: 10px 0; padding: 10px; border-radius: 3px; background-color: hsl(0, 50%, 40%); color: hsl(0, 10%, 96%); } .dict_section { padding: 10px; margin-bottom: 10px; border-radius: 5px; } .dict_section label { font-size: 16px; line-height: 20px; color: hsl(210, 20%, 50%); font-weight: bold; } .dict_description { padding: 5px 0 0 20px; color: hsl(0, 0%, 0%); } #help_section { background-color: hsl(0, 0%, 98%); padding: 10px; } #spelling_section { display: none; background-color: hsl(0, 0%, 98%); padding: 10px; } #grammar_section { display: none; background-color: hsl(0, 0%, 98%); padding: 10px; } .opt_subsection { margin: 5px 0; padding: 10px; background-color: hsl(0, 0%, 92%); border-radius: 3px; } .opt_subsection h2 { color: hsl(210, 30%, 50%); margin-bottom: 3px; font-size: 16px; font-family: "Trebuchet MS", sans-serif; } .opt_subsection p { padding: 2px 3px; display:flex; align-items:center; } .opt_subsection p:hover { background-color: hsl(210, 10%, 86%); border-radius: 2px; } .opt_subsection label { flex: 1; } .opt_subsection input { order: 1 } #grammar_section a { padding: 5px 10px; background-color: hsl(210, 40%, 50%); color: hsl(0, 0%, 96%); text-decoration: none; border-radius: 3px; font-size: 16px; } #grammar_section a:hover { background-color: hsl(210, 50%, 40%); color: color: hsl(0, 10%, 98%); } a.bluebutton { padding: 2px 5px; background-color: hsl(210, 40%, 50%); color: hsl(210, 0%, 96%); text-decoration: none; border-radius: 3px; } a.bluebutton:hover { background-color: hsl(210, 50%, 55%); color: hsl(210, 0%, 100%); } a.redbutton { padding: 2px 5px; background-color: hsl(0, 40%, 50%); color: hsl(0, 0%, 96%); text-decoration: none; border-radius: 3px; } a.redbutton:hover { background-color: hsl(0, 50%, 55%); color: hsl(0, 0%, 100%); } a.greenbutton { padding: 2px 5px; background-color: hsl(150, 40%, 40%); color: hsl(150, 0%, 96%); text-decoration: none; border-radius: 3px; } a.greenbutton:hover { background-color: hsl(150, 50%, 45%); color: hsl(0, 0%, 100%); } a.simplelink { color: hsl(180, 50%, 20%); text-decoration: none; text-shadow: 0 0 1px hsl(180, 20%, 50%); } a.simplelink:hover { color: hsl(180, 80%, 20%); text-shadow: 0 0 1px hsl(180, 50%, 10%); } footer#promo { background-color: hsl(0, 0%, 92%); border-top: 1px solid hsl(0, 0%, 86%); padding: 20px; } footer#thanks { background-color: hsl(0, 0%, 86%); border-top: 1px solid hsl(0, 0%, 80%); padding: 15px 15px; } footer#thanks p { margin: 3px 0; font-size: 14px; } |
Added gc_lang/fr/xpi/data/about_panel.html version [c66bde17c1].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | <!DOCTYPE HTML> <html> <head> <link rel="stylesheet" type="text/css" href="about_panel.css" /> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> </head> <body class="panel"> <header> <p class="center"><img src="img/logo120_text.png" alt="Grammalecte"></p> <p class="underline center"> <b>Version ${version}</b> </p> <p id="links" class="center"> <a id="spelling" class="bluebutton" href="#" onclick="return false;" data-l10n-id="spelling"></a> · <a id="grammar" class="bluebutton" href="#" onclick="return false;" data-l10n-id="grammar"></a> · <a id="conjugueur" class="redbutton" href="#" onclick="return false;" data-l10n-id="conjugueur"></a> </p> </header> <div id="help_section"> <p data-l10n-id="useContextMenu"></p> <p class="right"><img src="img/contextmenu.png" title="menu contextuel sur zone de texte" /></p> <p><b data-l10n-id="shortcuts"></b></p> <p><span class="key" data-l10n-id="keyTF"></span> ❱ <span data-l10n-id="keyLabelTF"></span></p> <p><span class="key" data-l10n-id="keyGC"></span> ❱ <span data-l10n-id="keyLabelGC"></span></p> <p><span class="key" data-l10n-id="keyCJ"></span> ❱ <span data-l10n-id="keyLabelCJ"></span></p> </div> <div id="grammar_section"> <h1 class="center" data-l10n-id="grammar_options"></h1> ${optionsHTML} <p class="center" style="margin: 10px 0;"><a id="default_options" href="#" onclick="return false;" data-l10n-id="default_options"></a></p> </div> <div id="spelling_section"> <h1 class="center" data-l10n-id="spelling_options"></h1> <p id="dictionaries_info" data-l10n-id="dictionaries_info"></p> <div class="dict_section" id="fr-FR-modern_box"> <p><input type="checkbox" id="fr-FR-modern" /> <label for="fr-FR-modern" data-l10n-id="dict_modern"></label></p> <p class="dict_description" data-l10n-id="dict_modern_descr"></p> </div> <div class="dict_section" id="fr-FR-classic_box"> <p><input type="checkbox" id="fr-FR-classic" /> <label for="fr-FR-classic" data-l10n-id="dict_classic"></label></p> <p class="dict_description" data-l10n-id="dict_classic_descr"></p> </div> <div class="dict_section" id="fr-FR-reform_box"> <p><input type="checkbox" id="fr-FR-reform" /> <label for="fr-FR-reform" data-l10n-id="dict_reform"></label></p> <p class="dict_description" data-l10n-id="dict_reform_descr"></p> </div> <div class="dict_section" id="fr-FR-classic-reform_box"> <p><input type="checkbox" id="fr-FR-classic-reform" /> <label for="fr-FR-classic-reform" data-l10n-id="dict_classic_reform"></label></p> <p class="dict_description" data-l10n-id="dict_classic_reform_descr"></p> </div> </div> <footer id="promo"> <p class="center"> <span data-l10n-id="general_info"></span> · <a id="website" class="simplelink" href="http://www.dicollecte.org/grammalecte/" onclick="return false;" data-l10n-id="website"></a> </p> </footer> <footer id="thanks"> <p class="center" data-l10n-id="thanks1"></p> <p class="center"> <a id="mainsponsor" href="http://www.lamouette.org/" onclick="return false;"> <img src="img/LaMouette.png" style="border: 1px solid #C0C0C0" /> </a> </p> <p class="center"> <a id="othersponsors" class="link" href="http://www.dicollecte.org/grammalecte/soutiens.php" onclick="return false;"> <b data-l10n-id="thanks2"></b> </a> </p> </footer> </body> </html> |
Added gc_lang/fr/xpi/data/about_panel.js version [f7f7c93567].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | // JavaScript let nDefaultPanelHeight = 0; /* Events */ self.port.on("sendGrammarOptionsToPanel", function (sGCOptions) { setGrammarOptionsOnPanel(JSON.parse(sGCOptions)); }); self.port.on("sendSpellingOptionsToPanel", function (bDicMod, bDicClas, bDicRef, bDicAll) { setPanelDictOption("fr-FR-modern", bDicMod); setPanelDictOption("fr-FR-classic", bDicClas); setPanelDictOption("fr-FR-reform", bDicRef); setPanelDictOption("fr-FR-classic-reform", bDicAll); }); self.port.on("showHelp", function () { showHelp(); }); self.port.on("calcDefaultPanelHeight", function () { nDefaultPanelHeight = calcPanelHeight(); }); document.getElementById('grammar').addEventListener("click", function(event) { if (document.getElementById('grammar_section').style.display === "none" || document.getElementById('grammar_section').style.display === "") { self.port.emit("loadGrammarOptions"); showGrammarOptions(); } else { showHelp(); } }); document.getElementById('spelling').addEventListener("click", function(event) { if (document.getElementById('spelling_section').style.display === "none" || document.getElementById('spelling_section').style.display === "") { self.port.emit("loadSpellingOptions"); showSpellingOptions(); } else { showHelp(); } }); document.getElementById('default_options').addEventListener("click", function (event) { self.port.emit('resetOptions'); }); document.getElementById('conjugueur').addEventListener("click", function (event) { self.port.emit('openConjugueur'); }); document.getElementById('website').addEventListener("click", function (event) { self.port.emit('openURL', "http://www.dicollecte.org/grammalecte/"); }); document.getElementById('mainsponsor').addEventListener("click", function (event) { self.port.emit('openURL', "http://www.lamouette.org/"); }); document.getElementById('othersponsors').addEventListener("click", function (event) { self.port.emit('openURL', "http://www.dicollecte.org/grammalecte/soutiens.php"); }); window.addEventListener( "click", function (xEvent) { let xElem = xEvent.target; if (xElem.id) { if (xElem.id.startsWith("option_") && xElem.tagName === "INPUT") { self.port.emit("setOption", xElem.id.slice(7), xElem.checked); } if (xElem.id.startsWith("fr-FR-") && xElem.tagName === "INPUT") { setPanelDictOption(xElem.id, xElem.checked); self.port.emit("changeDictSetting", xElem.id, xElem.checked); } } }, false ); /* Actions */ function calcPanelHeight () { return document.getElementById("thanks").offsetTop + document.getElementById("thanks").offsetHeight; } function setHeight (n) { self.port.emit("setHeight", n); } function showHelp () { document.getElementById('spelling_section').style.display = "none"; document.getElementById('grammar_section').style.display = "none"; document.getElementById('help_section').style.display = "block"; setHeight(nDefaultPanelHeight); } function showGrammarOptions () { document.getElementById('grammar_section').style.display = "block"; document.getElementById('spelling_section').style.display = "none"; document.getElementById('help_section').style.display = "none"; setHeight(1000); } function showSpellingOptions () { document.getElementById('spelling_section').style.display = "block"; document.getElementById('grammar_section').style.display = "none"; document.getElementById('help_section').style.display = "none"; setHeight(1000); } function setGrammarOptionsOnPanel (oOptions) { for (let sParam in oOptions) { //console.log(sParam + ":" + oOptions[sParam]); if (document.getElementById("option_"+sParam) !== null) { document.getElementById("option_"+sParam).checked = oOptions[sParam]; } } } function setPanelDictOption (sNode, bValue) { document.getElementById(sNode).checked = bValue; document.getElementById(sNode+"_box").style = bValue ? "background-color: hsl(210, 30%, 90%)" : "background-color: hsl(210, 15%, 96%)"; } |
Added gc_lang/fr/xpi/data/common.css version [51e0dbac23].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | /* common.css */ /* reset */ * { margin: 0; padding: 0; } img { border: none; } /* Generic classes */ .fleft { float: left; } .fright { float: right; } .center { text-align: center; } .right { text-align: right; } .left { text-align: left; } .justify { text-align: justify; } .hidden { display: none; } .clearer { clear: both; font-size: 0; height: 0; } /* Common */ #movewindow { position: fixed; right: 0; top: 50; width: 16px; margin-top: 60px; z-index: 100; } #movewindow .arrow { background-color: hsl(180, 60%, 50%); cursor: pointer; padding: 1px 3px; font-size: 10px; font-weight: bold; text-align: center; color: hsl(180, 50%, 90%); } #movewindow .arrow:hover { background-color: hsl(180, 70%, 40%); cursor: hsl(180, 50%, 96%); } #rightcorner { position: absolute; top: 0; right: 0; } a.rightcornerbutton1 { float: right; padding: 2px 10px 5px 10px; border-radius: 0 0 0 3px; font-size: 18px; text-decoration: none; } a.rightcornerbutton { float: right; padding: 2px 10px 5px 10px; font-size: 18px; text-decoration: none; } .red { background-color: hsl(0, 50%, 50%); color: hsl(0, 0%, 96%); } .red:hover { background-color: hsl(0, 60%, 40%); color: hsl(0, 0%, 100%); } .cyan { background-color: hsl(180, 50%, 50%); color: hsl(0, 0%, 96%); } .cyan:hover { background-color: hsl(180, 60%, 40%); color: hsl(0, 0%, 100%); } .green { background-color: hsl(120, 50%, 40%); color: hsl(120, 10%, 96%); } .green:hover { background-color: hsl(120, 60%, 30%); color: hsl(120, 10%, 96%); } .blue { background-color: hsl(210, 50%, 50%); color: hsl(210, 10%, 96%); } .blue:hover { background-color: hsl(210, 60%, 40%); color: hsl(210, 10%, 96%); } /* CSS Spinner Double bounce http://tobiasahlin.com/spinkit/ */ .spinner { width: 40px; height: 40px; position: absolute; top: 2px; right: 120px; } .double-bounce1, .double-bounce2 { width: 100%; height: 100%; border-radius: 50%; background-color: hsl(180, 50%, 75%); opacity: 0.6; position: absolute; top: 0; left: 0; animation: sk-bounce 2.0s infinite ease-in-out; } .double-bounce2 { animation-delay: -1.0s; } @keyframes sk-bounce { 0%, 100% { transform: scale(0.0); } 50% { transform: scale(1.0); } } |
Added gc_lang/fr/xpi/data/conj_panel.css version [35f12336a2].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | /* CSS Document White Design par Olivier R. */ @import url("common.css"); body { background: #FFFFFF url(img/lines.png); font: normal 16px Tahoma, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", sans-serif; color: #505050; /*text-rendering: optimizeLegibility;*/ } .mainflow { width: 500px; margin: 0 auto 0 auto; } .logo { position: absolute; background-color: #FFFFFF; border: 3px solid #F0F0F0; border-radius: 50px; padding: 4px 4px 0 4px; } /* MAIN ====================================================================== */ #main .inbox { width: 500px; margin: 10px auto 10px auto; padding: 0 10px 10px 10px; background: #FFFFFF; border: 2px solid #F0F0F0; border-radius: 20px; } #main h1 { margin: 5px 0 2px 0; color: hsl(210, 50%, 50%); font: bold 30px Tahoma, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", sans-serif; } #main h2 { margin: 5px 0 2px 0; color: hsl(0, 50%, 50%); font: bold 16px Tahoma, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", sans-serif; } #main h3 { margin: 5px 0 2px 0; color: hsl(210, 50%, 50%); font: bold 14px Tahoma, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", sans-serif; } #main .colonne { float: left; width: 240px; } #main .colsep { float: left; width: 20px; } .colonne p { font-size: 12px; } /*.box { border-left: 2px solid #8BC5EF; border-bottom: 2px solid #8BC5EF; border-radius: 5px; padding: 0 0 2px 10px; }*/ input#verb { display: inline-block; width: 230px; margin-left: 5px; padding: 5px 10px; border: 2px solid hsl(0, 0%, 80%); border-radius: 3px; height: 24px; background: transparent; font: normal 20px Tahoma, "Ubuntu Condensed"; color: hsl(0, 0%, 30%); } input[placeholder]#verb { color: hsl(0, 0%, 70%); } a#conjugate { display: inline-block; padding: 7px 10px; font-size: 20px; background-color: hsl(0, 30%, 30%); color: hsl(0, 30%, 60%); border-radius: 3px; text-transform: uppercase; text-align: center; text-decoration: none; } a#conjugate:hover { background-color: hsl(0, 60%, 40%); color: hsl(0, 60%, 70%); box-shadow: 0 0 2px hsl(0, 60%, 50%); } #options { margin: 10px 5px 0 5px; font-size: 16px; text-align: center; } #smallnote { float: right; width: 190px; margin: 15px 0 0 0; padding: 0 5px; font-size: 8.5px; color: hsl(0, 0%, 60%); text-align: center; } |
Added gc_lang/fr/xpi/data/conj_panel.html version [d63ac8e3c4].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 | <!DOCTYPE HTML> <html> <head> <link rel="stylesheet" type="text/css" href="conj_panel.css" /> <title>Grammalecte · Conjugueur</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> </head> <div id="rightcorner"> <a class="rightcornerbutton1 red" id="close" href="#"><b>×</b></a> </div> <body> <header> <div class="mainflow"> <div class="logo" style="margin: -5px 0 0 0px;"> <img src="img/logo2.png" alt="" /> </div> </div> </header> <div id="main"> <div class="inbox"> <p class="right" style="margin: 10px 30px 0 0"> <input type="text" id="verb" name="verb" maxlength="40" value="" placeholder="entrez un verbe" autofocus /> <a id="conjugate" href="#" onclick="return false;">Conjuguer</a> <p> <div class="clearer"></div> <p id="smallnote" hidden>Ce verbe n’a pas encore été vérifié. C’est pourquoi les options “pronominal” et “temps composés” sont désactivées.</p> <p id="options"> <label for="oneg">Négation</label> <input type="checkbox" id="oneg" name="oneg" value="ON" /> · <label id="opro_lbl" for="opro">Pronominal</label> <input type="checkbox" id="opro" name="opro" value="ON" /> · <label for="ofem">Féminin</label> <input type="checkbox" id="ofem" name="ofem" value="ON" /> <br/> <label for="oint">Interrogatif</label> <input type="checkbox" id="oint" name="oint" value="ON" /> · <label id="otco_lbl" for="otco">Temps composés</label> <input type="checkbox" id="otco" name="otco" value="ON" /> </p> <h1 id="verb_title" class="center"> </h1> <p id="info" class="center"> </p> <!-- section 1 --> <div class="colonne"> <div id="infinitif" class="box"> <h2 id="infinitif_title">Infinitif</h2> <p id="infi"> </p> </div> <div id="imperatif" class="box"> <h2 id="imperatif_title">Impératif</h2> <h3 id="impe_temps">Présent</h3> <p id="impe1"> </p> <p id="impe2"> </p> <p id="impe3"> </p> </div> </div> <div class="colsep"> </div> <div class="colonne"> <div id="partpre" class="box"> <h2 id="partpre_title">Participe présent</h2> <p id="ppre"> </p> </div> <div id="partpas" class="box"> <h2 id="partpas_title">Participes passés</h2> <p id="ppas1"> </p> <p id="ppas2"> </p> <p id="ppas3"> </p> <p id="ppas4"> </p> </div> </div> <div class="clearer"></div> <!-- section 2 --> <div class="colonne"> <div id="indicatif" class="box"> <h2 id="indicatif_title">Indicatif</h2> <div id="ipre"> <h3 id="ipre_temps">Présent</h3> <p id="ipre1"> </p> <p id="ipre2"> </p> <p id="ipre3"> </p> <p id="ipre4"> </p> <p id="ipre5"> </p> <p id="ipre6"> </p> </div> <div id="iimp"> <h3 id="iimp_temps">Imparfait</h3> <p id="iimp1"> </p> <p id="iimp2"> </p> <p id="iimp3"> </p> <p id="iimp4"> </p> <p id="iimp5"> </p> <p id="iimp6"> </p> </div> <div id="ipsi"> <h3 id="ipsi_temps">Passé simple</h3> <p id="ipsi1"> </p> <p id="ipsi2"> </p> <p id="ipsi3"> </p> <p id="ipsi4"> </p> <p id="ipsi5"> </p> <p id="ipsi6"> </p> </div> <div id="ifut"> <h3 id="ifut_temps">Futur</h3> <p id="ifut1"> </p> <p id="ifut2"> </p> <p id="ifut3"> </p> <p id="ifut4"> </p> <p id="ifut5"> </p> <p id="ifut6"> </p> </div> </div> </div> <div class="colsep"> </div> <div class="colonne"> <div id="subjonctif" class="box"> <h2 id="subjontif_title">Subjonctif</h2> <div id="spre"> <h3 id="spre_temps">Présent</h3> <p id="spre1"> </p> <p id="spre2"> </p> <p id="spre3"> </p> <p id="spre4"> </p> <p id="spre5"> </p> <p id="spre6"> </p> </div> <div id="simp"> <h3 id="simp_temps">Imparfait</h3> <p id="simp1"> </p> <p id="simp2"> </p> <p id="simp3"> </p> <p id="simp4"> </p> <p id="simp5"> </p> <p id="simp6"> </p> </div> </div> <div id="conditionnel" class="box"> <h2 id="conditionnel_title">Conditionnel</h2> <div id="conda"> <h3 id="conda_temps">Présent</h3> <p id="conda1"> </p> <p id="conda2"> </p> <p id="conda3"> </p> <p id="conda4"> </p> <p id="conda5"> </p> <p id="conda6"> </p> </div> <div id="condb"> <h3 id="condb_temps"> </h3> <p id="condb1"> </p> <p id="condb2"> </p> <p id="condb3"> </p> <p id="condb4"> </p> <p id="condb5"> </p> <p id="condb6"> </p> </div> </div> </div> <div class="clearer"></div> </div> </div> </body> </html> |
Added gc_lang/fr/xpi/data/conj_panel.js version [d0838c414c].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 | // JavaScript let oVerb = null; self.port.on("conjugate", function (sVerb) { createVerbAndConjugate(sVerb); }); self.port.on("start", function () { self.port.emit("setHeight", document.getElementById("main").offsetTop + document.getElementById("main").offsetHeight + 20); document.getElementById("verb").focus(); }); // close document.getElementById('close').addEventListener("click", function (event) { self.port.emit('closePanel'); }); // button document.getElementById('conjugate').addEventListener("click", function (event) { createVerbAndConjugate(document.getElementById('verb').value); }); // text field document.getElementById('verb').addEventListener("change", function (event) { createVerbAndConjugate(document.getElementById('verb').value); }); // options document.getElementById('oneg').addEventListener("click", function (event) { _displayResults(); }); document.getElementById('opro').addEventListener("click", function (event) { _displayResults(); }); document.getElementById('oint').addEventListener("click", function (event) { _displayResults(); }); document.getElementById('ofem').addEventListener("click", function (event) { _displayResults(); }); document.getElementById('otco').addEventListener("click", function (event) { _displayResults(); }); function createVerbAndConjugate (sVerb) { try { document.getElementById('oneg').checked = false; document.getElementById('opro').checked = false; document.getElementById('oint').checked = false; document.getElementById('otco').checked = false; document.getElementById('ofem').checked = false; document.getElementById('smallnote').hidden = true; // request analyzing sVerb = sVerb.trim().toLowerCase().replace(/’/g, "'").replace(/ +/g, " "); if (sVerb) { if (sVerb.startsWith("ne pas ")) { document.getElementById('oneg').checked = true; sVerb = sVerb.slice(7); } if (sVerb.startsWith("se ")) { document.getElementById('opro').checked = true; sVerb = sVerb.slice(3); } else if (sVerb.startsWith("s'")) { document.getElementById('opro').checked = true; sVerb = sVerb.slice(2); } if (sVerb.endsWith("?")) { document.getElementById('oint').checked = true; sVerb = sVerb.slice(0,-1).trim(); } if (!isVerb(sVerb)) { document.getElementById('verb').style = "color: #BB4411;"; } else { self.port.emit("show"); document.getElementById('verb_title').textContent = sVerb; document.getElementById('verb').style = "color: #999999;"; document.getElementById('verb').value = ""; oVerb = new Verb(sVerb); let sRawInfo = oVerb._sRawInfo; document.getElementById('info').textContent = oVerb.sInfo; document.getElementById('opro').textContent = "pronominal"; if (sRawInfo.endsWith("zz")) { document.getElementById('opro').checked = false; document.getElementById('opro').disabled = true; document.getElementById('opro_lbl').style = "color: #CCC;"; document.getElementById('otco').checked = false; document.getElementById('otco').disabled = true; document.getElementById('otco_lbl').style = "color: #CCC;"; document.getElementById('smallnote').hidden = false; } else { if (sRawInfo[5] == "_") { document.getElementById('opro').checked = false; document.getElementById('opro').disabled = true; document.getElementById('opro_lbl').style = "color: #CCC;"; } else if (sRawInfo[5] == "q" || sRawInfo[5] == "e") { document.getElementById('opro').checked = false; document.getElementById('opro').disabled = false; document.getElementById('opro_lbl').style = "color: #000;"; } else if (sRawInfo[5] == "p" || sRawInfo[5] == "r") { document.getElementById('opro').checked = true; document.getElementById('opro').disabled = true; document.getElementById('opro_lbl').style = "color: #CCC;"; } else if (sRawInfo[5] == "!") { document.getElementById('opro').textContent = "cas particuliers"; document.getElementById('opro').checked = false; document.getElementById('opro').disabled = true; document.getElementById('opro_lbl').style = "color: #CCC;"; } else { document.getElementById('opro').textContent = "# erreur #"; document.getElementById('opro').checked = false; document.getElementById('opro').disabled = true; document.getElementById('opro_lbl').style = "color: #CCC;"; } document.getElementById('otco').disabled = false; document.getElementById('otco_lbl').style = "color: #000;"; } _displayResults(); } } } catch (e) { console.error("\n" + e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message); } } function _displayResults () { if (oVerb === null) { return; } try { let opro = document.getElementById('opro').checked; let oneg = document.getElementById('oneg').checked; let otco = document.getElementById('otco').checked; let oint = document.getElementById('oint').checked; let ofem = document.getElementById('ofem').checked; // titles _setTitles() // participes passés document.getElementById('ppas1').textContent = oVerb.participePasse(":Q1") || " "; // something or nbsp document.getElementById('ppas2').textContent = oVerb.participePasse(":Q2") || " "; document.getElementById('ppas3').textContent = oVerb.participePasse(":Q3") || " "; document.getElementById('ppas4').textContent = oVerb.participePasse(":Q4") || " "; // infinitif document.getElementById('infi').textContent = oVerb.infinitif(opro, oneg, otco, oint, ofem); // participe présent document.getElementById('ppre').textContent = oVerb.participePresent(opro, oneg, otco, oint, ofem) || " "; // conjugaisons document.getElementById('ipre1').textContent = oVerb.conjugue(":Ip", ":1s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipre2').textContent = oVerb.conjugue(":Ip", ":2s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipre3').textContent = oVerb.conjugue(":Ip", ":3s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipre4').textContent = oVerb.conjugue(":Ip", ":1p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipre5').textContent = oVerb.conjugue(":Ip", ":2p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipre6').textContent = oVerb.conjugue(":Ip", ":3p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('iimp1').textContent = oVerb.conjugue(":Iq", ":1s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('iimp2').textContent = oVerb.conjugue(":Iq", ":2s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('iimp3').textContent = oVerb.conjugue(":Iq", ":3s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('iimp4').textContent = oVerb.conjugue(":Iq", ":1p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('iimp5').textContent = oVerb.conjugue(":Iq", ":2p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('iimp6').textContent = oVerb.conjugue(":Iq", ":3p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipsi1').textContent = oVerb.conjugue(":Is", ":1s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipsi2').textContent = oVerb.conjugue(":Is", ":2s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipsi3').textContent = oVerb.conjugue(":Is", ":3s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipsi4').textContent = oVerb.conjugue(":Is", ":1p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipsi5').textContent = oVerb.conjugue(":Is", ":2p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ipsi6').textContent = oVerb.conjugue(":Is", ":3p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ifut1').textContent = oVerb.conjugue(":If", ":1s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ifut2').textContent = oVerb.conjugue(":If", ":2s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ifut3').textContent = oVerb.conjugue(":If", ":3s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ifut4').textContent = oVerb.conjugue(":If", ":1p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ifut5').textContent = oVerb.conjugue(":If", ":2p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('ifut6').textContent = oVerb.conjugue(":If", ":3p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('conda1').textContent = oVerb.conjugue(":K", ":1s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('conda2').textContent = oVerb.conjugue(":K", ":2s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('conda3').textContent = oVerb.conjugue(":K", ":3s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('conda4').textContent = oVerb.conjugue(":K", ":1p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('conda5').textContent = oVerb.conjugue(":K", ":2p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('conda6').textContent = oVerb.conjugue(":K", ":3p", opro, oneg, otco, oint, ofem) || " "; if (!oint) { document.getElementById('spre1').textContent = oVerb.conjugue(":Sp", ":1s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('spre2').textContent = oVerb.conjugue(":Sp", ":2s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('spre3').textContent = oVerb.conjugue(":Sp", ":3s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('spre4').textContent = oVerb.conjugue(":Sp", ":1p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('spre5').textContent = oVerb.conjugue(":Sp", ":2p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('spre6').textContent = oVerb.conjugue(":Sp", ":3p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('simp1').textContent = oVerb.conjugue(":Sq", ":1s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('simp2').textContent = oVerb.conjugue(":Sq", ":2s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('simp3').textContent = oVerb.conjugue(":Sq", ":3s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('simp4').textContent = oVerb.conjugue(":Sq", ":1p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('simp5').textContent = oVerb.conjugue(":Sq", ":2p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('simp6').textContent = oVerb.conjugue(":Sq", ":3p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('impe1').textContent = oVerb.imperatif(":2s", opro, oneg, otco, ofem) || " "; document.getElementById('impe2').textContent = oVerb.imperatif(":1p", opro, oneg, otco, ofem) || " "; document.getElementById('impe3').textContent = oVerb.imperatif(":2p", opro, oneg, otco, ofem) || " "; } else { document.getElementById('spre_temps').textContent = " "; document.getElementById('spre1').textContent = " "; document.getElementById('spre2').textContent = " "; document.getElementById('spre3').textContent = " "; document.getElementById('spre4').textContent = " "; document.getElementById('spre5').textContent = " "; document.getElementById('spre6').textContent = " "; document.getElementById('simp_temps').textContent = " "; document.getElementById('simp1').textContent = " "; document.getElementById('simp2').textContent = " "; document.getElementById('simp3').textContent = " "; document.getElementById('simp4').textContent = " "; document.getElementById('simp5').textContent = " "; document.getElementById('simp6').textContent = " "; document.getElementById('impe_temps').textContent = " "; document.getElementById('impe1').textContent = " "; document.getElementById('impe2').textContent = " "; document.getElementById('impe3').textContent = " "; } if (otco) { document.getElementById('condb1').textContent = oVerb.conjugue(":Sq", ":1s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('condb2').textContent = oVerb.conjugue(":Sq", ":2s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('condb3').textContent = oVerb.conjugue(":Sq", ":3s", opro, oneg, otco, oint, ofem) || " "; document.getElementById('condb4').textContent = oVerb.conjugue(":Sq", ":1p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('condb5').textContent = oVerb.conjugue(":Sq", ":2p", opro, oneg, otco, oint, ofem) || " "; document.getElementById('condb6').textContent = oVerb.conjugue(":Sq", ":3p", opro, oneg, otco, oint, ofem) || " "; } else { document.getElementById('condb1').textContent = " "; document.getElementById('condb2').textContent = " "; document.getElementById('condb3').textContent = " "; document.getElementById('condb4').textContent = " "; document.getElementById('condb5').textContent = " "; document.getElementById('condb6').textContent = " "; } document.getElementById('verb').Text = ""; } catch (e) { console.error("\n" + e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message); } } function _setTitles () { try { if (!document.getElementById('otco').checked) { document.getElementById('ipre_temps').textContent = "Présent"; document.getElementById('ifut_temps').textContent = "Futur"; document.getElementById('iimp_temps').textContent = "Imparfait"; document.getElementById('ipsi_temps').textContent = "Passé simple"; document.getElementById('spre_temps').textContent = "Présent"; document.getElementById('simp_temps').textContent = "Imparfait"; document.getElementById('conda_temps').textContent = "Présent"; document.getElementById('condb_temps').textContent = " "; document.getElementById('impe_temps').textContent = "Présent"; } else { document.getElementById('ipre_temps').textContent = "Passé composé"; document.getElementById('ifut_temps').textContent = "Futur antérieur"; document.getElementById('iimp_temps').textContent = "Plus-que-parfait"; document.getElementById('ipsi_temps').textContent = "Passé antérieur"; document.getElementById('spre_temps').textContent = "Passé"; document.getElementById('simp_temps').textContent = "Plus-que-parfait"; document.getElementById('conda_temps').textContent = "Passé (1ʳᵉ forme)"; document.getElementById('condb_temps').textContent = "Passé (2ᵉ forme)"; document.getElementById('impe_temps').textContent = "Passé"; } } catch (e) { console.error("\n" + e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message); } } |
Added gc_lang/fr/xpi/data/dictionaries/fr-FR-classic-reform/fr-FR-classic-reform.aff version [2af86dc167].
more than 10,000 changes
Added gc_lang/fr/xpi/data/dictionaries/fr-FR-classic-reform/fr-FR-classic-reform.dic version [1f00669699].
more than 10,000 changes
Added gc_lang/fr/xpi/data/dictionaries/fr-FR-classic/fr-FR-classic.aff version [4d3dfc11d3].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 8383 8384 8385 8386 8387 8388 8389 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 8420 8421 8422 8423 8424 8425 8426 8427 8428 8429 8430 8431 8432 8433 8434 8435 8436 8437 8438 8439 8440 8441 8442 8443 8444 8445 8446 8447 8448 8449 8450 8451 8452 8453 8454 8455 8456 8457 8458 8459 8460 8461 8462 8463 8464 8465 8466 8467 8468 8469 8470 8471 8472 8473 8474 8475 8476 8477 8478 8479 8480 8481 8482 8483 8484 8485 8486 8487 8488 8489 8490 8491 8492 8493 8494 8495 8496 8497 8498 8499 8500 8501 8502 8503 8504 8505 8506 8507 8508 8509 8510 8511 8512 8513 8514 8515 8516 8517 8518 8519 8520 8521 8522 8523 8524 8525 8526 8527 8528 8529 8530 8531 8532 8533 8534 8535 8536 8537 8538 8539 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 8550 8551 8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 8566 8567 8568 8569 8570 8571 8572 8573 8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 8588 8589 8590 8591 8592 8593 8594 8595 8596 8597 8598 8599 8600 8601 8602 8603 8604 8605 8606 8607 8608 8609 8610 8611 8612 8613 8614 8615 8616 8617 8618 8619 8620 8621 8622 8623 8624 8625 8626 8627 8628 8629 8630 8631 8632 8633 8634 8635 8636 8637 8638 8639 8640 8641 8642 8643 8644 8645 8646 8647 8648 8649 8650 8651 8652 8653 8654 8655 8656 8657 8658 8659 8660 8661 8662 8663 8664 8665 8666 8667 8668 8669 8670 8671 8672 8673 8674 8675 8676 8677 8678 8679 8680 8681 8682 8683 8684 8685 8686 8687 8688 8689 8690 8691 8692 8693 8694 8695 8696 8697 8698 8699 8700 8701 8702 8703 8704 8705 8706 8707 8708 8709 8710 8711 8712 8713 8714 8715 8716 8717 8718 8719 8720 8721 8722 8723 8724 8725 8726 8727 8728 8729 8730 8731 8732 8733 8734 8735 8736 8737 8738 8739 8740 8741 8742 8743 8744 8745 8746 8747 8748 8749 8750 8751 8752 8753 8754 8755 8756 8757 8758 8759 8760 8761 8762 8763 8764 8765 8766 8767 8768 8769 8770 8771 8772 8773 8774 8775 8776 8777 8778 8779 8780 8781 8782 8783 8784 8785 8786 8787 8788 8789 8790 8791 8792 8793 8794 8795 8796 8797 8798 8799 8800 8801 8802 8803 8804 8805 8806 8807 8808 8809 8810 8811 8812 8813 8814 8815 8816 8817 8818 8819 8820 8821 8822 8823 8824 8825 8826 8827 8828 8829 8830 8831 8832 8833 8834 8835 8836 8837 8838 8839 8840 8841 8842 8843 8844 8845 8846 8847 8848 8849 8850 8851 8852 8853 8854 8855 8856 8857 8858 8859 8860 8861 8862 8863 8864 8865 8866 8867 8868 8869 8870 8871 8872 8873 8874 8875 8876 8877 8878 8879 8880 8881 8882 8883 8884 8885 8886 8887 8888 8889 8890 8891 8892 8893 8894 8895 8896 8897 8898 8899 8900 8901 8902 8903 8904 8905 8906 8907 8908 8909 8910 8911 8912 8913 8914 8915 8916 8917 8918 8919 8920 8921 8922 8923 8924 8925 8926 8927 8928 8929 8930 8931 8932 8933 8934 8935 8936 8937 8938 8939 8940 8941 8942 8943 8944 8945 8946 8947 8948 8949 8950 8951 8952 8953 8954 8955 8956 8957 8958 8959 8960 8961 8962 8963 8964 8965 8966 8967 8968 8969 8970 8971 8972 8973 8974 | # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. # AFFIXES DU DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “CLASSIQUE” v6.0.3 # par Olivier R. -- licence MPL 2.0 # Généré le 25-04-2017 à 13:20 # Pour améliorer le dictionnaire, allez sur http://www.dicollecte.org/ SET UTF-8 WORDCHARS -’'1234567890. TRY esntiarulodcpmévqfgbhàxèjyêMILzACçôîPâùJFSûBVœRDGNETHXkïOwKWYUëQÉZŒüãÎáöóÈíæÅñäśńÿ MAP 25 MAP aàâäAÀÂÄ MAP eéèêëEÉÈÊË MAP iîïyIÎÏY MAP oôöOÔÖ MAP uùûüUÙÛÜ MAP cçCÇ MAP bB MAP dD MAP fF MAP gG MAP hH MAP jJ MAP kK MAP lL MAP mM MAP nN MAP pP MAP qQ MAP rR MAP sS MAP tT MAP vV MAP wW MAP xX MAP zZ REP 82 REP ^Ca$ Ça REP ^l l' REP ^d d' REP ^n n' REP ^s s' REP ^j j' REP ^m m' REP ^t t' REP ^c c' REP f ph REP ph f REP c qu REP qu c REP k qu REP qu k REP x ct REP ct x REP bb b REP b bb REP cc c REP c cc REP ff f REP f ff REP ll l REP l ll REP mm m REP m mm REP nn n REP n nn REP pp p REP p pp REP rr r REP r rr REP ss s REP s ss REP ss c REP c ss REP ss ç REP ç ss REP tt t REP t tt REP œ oe REP oe œ REP æ ae REP ae æ REP ai é REP é ai REP ai è REP è ai REP ai ê REP ê ai REP ei é REP é ei REP ei è REP è ei REP ei ê REP ê ei REP o au REP au o REP o eau REP eau o REP ett èt REP èt ett REP ell èl REP èl ell REP t th REP th t REP ième$ e REP ème$ e REP è$ e REP mn$ min REP ogue$ ogiste REP ogiste$ ogue REP disez$ dites REP fesez$ faites REP faisez$ faites REP puit puits REP sanctionnable punissable REP questionnable discutable REP antitartre détartrant REP email courriel REP construirent construisirent KEY azertyuiop|qsdfghjklmù|wxcvbn|aéz|yèu|iço|oàp|aqz|zse|edr|rft|tgy|yhu|uji|iko|olpm|qws|sxd|dcf|fvg|gbh|hnj ICONV 41 ICONV ’ ' ICONV ʼ ' ICONV ffi ffi ICONV ffl ffl ICONV ff ff ICONV ſt ft ICONV fi fi ICONV fl fl ICONV st st ICONV à à ICONV â â ICONV ä ä ICONV é é ICONV è è ICONV ê ê ICONV ë ë ICONV î î ICONV ï ï ICONV ô ô ICONV ö ö ICONV ù ù ICONV û û ICONV ü ü ICONV ÿ ÿ ICONV ç ç ICONV À À ICONV   ICONV Ä Ä ICONV É É ICONV È È ICONV Ê Ê ICONV Ë Ë ICONV Î Î ICONV Ï Ï ICONV Ô Ô ICONV Ö Ö ICONV Ù Ù ICONV Û Û ICONV Ü Ü ICONV Ÿ Ÿ ICONV Ç Ç OCONV 1 OCONV ' ’ FLAG long FULLSTRIP NEEDAFFIX () FORBIDDENWORD {} CIRCUMFIX ** KEEPCASE || NOSUGGEST -- BREAK 7 BREAK - BREAK . BREAK · BREAK ^' BREAK ^‘ BREAK '$ BREAK ’$ PFX L' Y 34 PFX L' 0 l' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX L' a l'A a PFX L' à l'À à PFX L' â l' â PFX L' e l'E e PFX L' é l'É é PFX L' è l'È è PFX L' ê l'Ê ê PFX L' i l'I i PFX L' î l'Î î PFX L' o l'O o PFX L' ô l'Ô ô PFX L' u l'U u PFX L' y l'Y y PFX L' h l'H h PFX L' œ l'Œ œ PFX L' æ l'Æ æ PFX L' 0 L' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX L' a L'A a PFX L' à L'À à PFX L' â L' â PFX L' e L'E e PFX L' é L'É é PFX L' è L'È è PFX L' ê L'Ê ê PFX L' i L'I i PFX L' î L'Î î PFX L' o L'O o PFX L' ô L'Ô ô PFX L' u L'U u PFX L' y L'Y y PFX L' h L'H h PFX L' œ L'Œ œ PFX L' æ L'Æ æ PFX D' Y 34 PFX D' 0 d' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX D' a d'A a PFX D' à d'À à PFX D' â d' â PFX D' e d'E e PFX D' é d'É é PFX D' è d'È è PFX D' ê d'Ê ê PFX D' i d'I i PFX D' î d'Î î PFX D' o d'O o PFX D' ô d'Ô ô PFX D' u d'U u PFX D' y d'Y y PFX D' h d'H h PFX D' œ d'Œ œ PFX D' æ d'Æ æ PFX D' 0 D' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX D' a D'A a PFX D' à D'À à PFX D' â D' â PFX D' e D'E e PFX D' é D'É é PFX D' è D'È è PFX D' ê D'Ê ê PFX D' i D'I i PFX D' î D'Î î PFX D' o D'O o PFX D' ô D'Ô ô PFX D' u D'U u PFX D' y D'Y y PFX D' h D'H h PFX D' œ D'Œ œ PFX D' æ D'Æ æ PFX Q' Y 34 PFX Q' 0 qu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q' a qu'A a PFX Q' à qu'À à PFX Q' â qu' â PFX Q' e qu'E e PFX Q' é qu'É é PFX Q' è qu'È è PFX Q' ê qu'Ê ê PFX Q' i qu'I i PFX Q' î qu'Î î PFX Q' o qu'O o PFX Q' ô qu'Ô ô PFX Q' u qu'U u PFX Q' y qu'Y y PFX Q' h qu'H h PFX Q' œ qu'Œ œ PFX Q' æ qu'Æ æ PFX Q' 0 Qu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q' a Qu'A a PFX Q' à Qu'À à PFX Q' â Qu' â PFX Q' e Qu'E e PFX Q' é Qu'É é PFX Q' è Qu'È è PFX Q' ê Qu'Ê ê PFX Q' i Qu'I i PFX Q' î Qu'Î î PFX Q' o Qu'O o PFX Q' ô Qu'Ô ô PFX Q' u Qu'U u PFX Q' y Qu'Y y PFX Q' h Qu'H h PFX Q' œ Qu'Œ œ PFX Q' æ Qu'Æ æ PFX Q* Y 6 PFX Q* 0 quoiqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q* 0 puisqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q* 0 lorsqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q* 0 Quoiqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q* 0 Puisqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q* 0 Lorsqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Qj Y 1 PFX Qj 0 jusqu' [aàâeèéêiîoôuyhœæ] PFX Si Y 1 PFX Si 0 s' . SFX S. Y 1 SFX S. 0 s [^sxz] SFX S= Y 1 SFX S= 0 s [^sxz] SFX X. Y 3 SFX X. 0 x [aeoœ]u SFX X. l ux al SFX X. il ux ail SFX A. Y 9 SFX A. 0 s [^sxz] SFX A. an en an SFX A. f ves f SFX A. h hes h SFX A. s ses s SFX A. x xes x SFX A. y ies y SFX A. zz zzes zz SFX A. z zzes [^z]z SFX I. Y 7 SFX I. 0 s [^sxz] SFX I. a e a SFX I. e i e SFX I. en ina en SFX I. o i o SFX I. um a um SFX I. us i us SFX F. Y 78 SFX F. 0 s [eë] SFX F. e 0 [éiï]e SFX F. e s [éiï]e SFX F. rice eur [dt]rice SFX F. rice eurs [dt]rice SFX F. de d de SFX F. de ds de SFX F. fe f fe SFX F. fe fs fe SFX F. anche anc anche SFX F. anche ancs anche SFX F. èche ec èche SFX F. èche ecs èche SFX F. aiche ais aiche SFX F. aîche ais aîche SFX F. khe kh khe SFX F. khe khs khe SFX F. he h [ut]he SFX F. he hs [ut]he SFX F. ke k [^è]ke SFX F. ke ks [^è]ke SFX F. èke ek èke SFX F. èke eks èke SFX F. le l [aiouûh]le SFX F. le ls [aiouûh]le SFX F. lle l [eiu]lle SFX F. lle ls [eiu]lle SFX F. olle ou olle SFX F. olle ous olle SFX F. olle ol olle SFX F. olle ols olle SFX F. ne n [aiouï]ne SFX F. ne ns [aiouï]ne SFX F. nne n [aeo]nne SFX F. nne ns [aeo]nne SFX F. ène en ène SFX F. ène ens ène SFX F. igne in igne SFX F. igne ins igne SFX F. re r [aiouûy]re SFX F. re rs [aiouûy]re SFX F. ère er ère SFX F. ère ers ère SFX F. se s [^us]se SFX F. esse e [^eo].esse SFX F. esse es [^eo].esse SFX F. rofesse rofès rofesse SFX F. eresse eur eresse SFX F. eresse eurs eresse SFX F. oresse eur oresse SFX F. oresse eurs oresse SFX F. sse s [^e]sse SFX F. use us [^eo]use SFX F. euse eur euse SFX F. euse eurs euse SFX F. te t [^èt]te SFX F. te ts [^èt]te SFX F. tte t tte SFX F. tte ts tte SFX F. ète et ète SFX F. ète ets ète SFX F. ue u [^gq]ue SFX F. ue us [^gq]ue SFX F. gue g gue SFX F. gue gs gue SFX F. cque c cque SFX F. cque cs cque SFX F. que c [^c]que SFX F. que cs [^c]que SFX F. ève ef ève SFX F. ève efs ève SFX F. ve f [iïu]ve SFX F. ve fs [iïu]ve SFX F. uë u uë SFX F. uë us uë SFX F. üe u üe SFX F. üe us üe SFX F. ze z ze SFX W. N 15 SFX W. e es e SFX W. ce x ce SFX W. use ux [eo]use SFX W. ausse aux ausse SFX W. ousse oux ousse SFX W. ale al ale SFX W. ale aux ale SFX W. elle eau elle SFX W. elle eaux elle SFX W. elle el [bv]elle SFX W. elle els [bv]elle SFX W. ieille ieux ieille SFX W. ieille ieil ieille SFX W. ofolle oufou ofolle SFX W. ofolle oufous ofolle SFX S* Y 2 SFX S* 0 0/D'L'Q' [^sxz] SFX S* 0 s/D'Q' [^sxz] SFX X* Y 4 SFX X* 0 0/D'L'Q' [ul] SFX X* 0 x/D'Q' [aeoœ]u SFX X* l ux/D'Q' al SFX X* il ux/D'Q' ail SFX A* Y 20 SFX A* an an/D'L'Q' an SFX A* an ans/D'Q' an SFX A* an en/D'Q' an SFX A* f f/D'L'Q' f SFX A* f fs/D'Q' f SFX A* f ves/D'Q' f SFX A* h h/D'L'Q' h SFX A* h hs/D'Q' h SFX A* h hes/D'Q' h SFX A* s s/D'L'Q' s SFX A* s ses/D'Q' s SFX A* x x/D'L'Q' x SFX A* x xes/D'Q' x SFX A* y y/D'L'Q' y SFX A* y ys/D'Q' y SFX A* y ies/D'Q' y SFX A* zz zz/D'L'Q' zz SFX A* zz zzes/D'Q' zz SFX A* z z/D'L'Q' [^z]z SFX A* z zzes/D'Q' [^z]z SFX I* Y 17 SFX I* a a/D'L'Q' a SFX I* a as/D'Q' a SFX I* a e/D'Q' a SFX I* e e/D'L'Q' e SFX I* e es/D'Q' e SFX I* e i/D'Q' e SFX I* en en/D'L'Q' en SFX I* en ens/D'Q' en SFX I* en ina/D'Q' en SFX I* o o/D'L'Q' o SFX I* o os/D'Q' o SFX I* o i/D'Q' o SFX I* um um/D'L'Q' um SFX I* um ums/D'Q' um SFX I* um a/D'Q' um SFX I* us us/D'L'Q' us SFX I* us i/D'Q' us SFX F* Y 59 SFX F* 0 0/D'L'Q' [eë] SFX F* 0 s/D'Q' [eë] SFX F* e 0/D'L'Q' [éiï]e SFX F* e s/D'Q' [éiï]e SFX F* rice eur/D'L'Q' [dt]rice SFX F* rice eurs/D'Q' [dt]rice SFX F* de d/D'L'Q' de SFX F* de ds/D'Q' de SFX F* he h/D'L'Q' [ut]he SFX F* he hs/D'Q' [ut]he SFX F* èke ek/D'L'Q' èke SFX F* èke eks/D'Q' èke SFX F* le l/D'L'Q' [aiouû]le SFX F* le ls/D'Q' [aiouû]le SFX F* lle l/D'L'Q' [eiu]lle SFX F* lle ls/D'Q' [eiu]lle SFX F* ne n/D'L'Q' [aiouï]ne SFX F* ne ns/D'Q' [aiouï]ne SFX F* nne n/D'L'Q' [aeo]nne SFX F* nne ns/D'Q' [aeo]nne SFX F* gne n/D'L'Q' igne SFX F* gne ns/D'Q' igne SFX F* re r/D'L'Q' [aiouûy]re SFX F* re rs/D'Q' [aiouûy]re SFX F* ère er/D'L'Q' ère SFX F* ère ers/D'Q' ère SFX F* se s/D'L'Q' [^us]se SFX F* esse e/D'L'Q' [^eo].esse SFX F* esse es/D'Q' [^eo].esse SFX F* eresse eur/D'L'Q' eresse SFX F* eresse eurs/D'Q' eresse SFX F* oresse eur/D'L'Q' oresse SFX F* oresse eurs/D'Q' oresse SFX F* sse s/D'L'Q' [^e]sse SFX F* use us/D'L'Q' [^eo]use SFX F* euse eur/D'L'Q' euse SFX F* euse eurs/D'Q' euse SFX F* te t/D'L'Q' [^èt]te SFX F* te ts/D'Q' [^èt]te SFX F* tte t/D'L'Q' tte SFX F* tte ts/D'Q' tte SFX F* ète et/D'L'Q' ète SFX F* ète ets/D'Q' ète SFX F* ue u/D'L'Q' [^gq]ue SFX F* ue us/D'Q' [^gq]ue SFX F* gue g/D'L'Q' gue SFX F* gue gs/D'Q' gue SFX F* cque c/D'L'Q' cque SFX F* cque cs/D'Q' cque SFX F* que c/D'L'Q' [^c]que SFX F* que cs/D'Q' [^c]que SFX F* ève ef/D'L'Q' ève SFX F* ève efs/D'Q' ève SFX F* ve f/D'L'Q' [iïu]ve SFX F* ve fs/D'Q' [iïu]ve SFX F* uë u/D'L'Q' uë SFX F* uë us/D'Q' uë SFX F* üe u/D'L'Q' üe SFX F* üe us/D'Q' üe SFX W* Y 10 SFX W* 0 0/D'L'Q' e SFX W* e es/D'Q' e SFX W* ce x/D'L'Q' ce SFX W* use ux/D'L'Q' [eo]use SFX W* ousse oux/D'L'Q' ousse SFX W* ausse aux/D'L'Q' ausse SFX W* ale al/D'L'Q' ale SFX W* ale aux/D'Q' ale SFX W* elle eau/D'L'Q' elle SFX W* elle eaux/D'Q' elle PFX Um Y 29 PFX Um 0 0/S. . PFX Um 0 l' [aàâeèéêiîoôuyœæ] PFX Um 0 d'/S. [aàâeèéêiîoôuyœæ] PFX Um 0 yotta/S. . PFX Um 0 zetta/S. . PFX Um 0 exa/S. . PFX Um 0 l'exa . PFX Um 0 d'exa/S. . PFX Um 0 peta/S. . PFX Um 0 téra/S. . PFX Um 0 giga/S. . PFX Um 0 méga/S. . PFX Um 0 kilo/S. . PFX Um 0 hecto/S. . PFX Um 0 l'hecto . PFX Um 0 d'hecto/S. . PFX Um 0 déca/S. . PFX Um 0 déci/S. . PFX Um 0 centi/S. . PFX Um 0 milli/S. . PFX Um 0 micro/S. . PFX Um 0 nano/S. . PFX Um 0 pico/S. . PFX Um 0 femto/S. . PFX Um 0 atto/S. . PFX Um 0 l'atto . PFX Um 0 d'atto/S. . PFX Um 0 zepto/S. . PFX Um 0 yocto/S. . PFX Ui Y 28 PFX Ui 0 l' [aàâeèéêiîoôuyœæ] PFX Ui 0 d' [aàâeèéêiîoôuyœæ] PFX Ui 0 yotta . PFX Ui 0 zetta . PFX Ui 0 exa . PFX Ui 0 l'exa . PFX Ui 0 d'exa . PFX Ui 0 peta . PFX Ui 0 téra . PFX Ui 0 giga . PFX Ui 0 méga . PFX Ui 0 kilo . PFX Ui 0 hecto . PFX Ui 0 l'hecto . PFX Ui 0 d'hecto . PFX Ui 0 déca . PFX Ui 0 déci . PFX Ui 0 centi . PFX Ui 0 milli . PFX Ui 0 micro . PFX Ui 0 nano . PFX Ui 0 pico . PFX Ui 0 femto . PFX Ui 0 atto . PFX Ui 0 l'atto . PFX Ui 0 d'atto . PFX Ui 0 zepto . PFX Ui 0 yocto . PFX U. Y 20 PFX U. 0 Y . PFX U. 0 Z . PFX U. 0 E . PFX U. 0 P . PFX U. 0 T . PFX U. 0 G . PFX U. 0 M . PFX U. 0 k . PFX U. 0 h . PFX U. 0 da . PFX U. 0 d . PFX U. 0 c . PFX U. 0 m . PFX U. 0 µ . PFX U. 0 n . PFX U. 0 p . PFX U. 0 f . PFX U. 0 a . PFX U. 0 z . PFX U. 0 y . PFX n' Y 1 PFX n' 0 n' [aàâeèéêiîoôuyhœæ] PFX q' Y 1 PFX q' 0 qu' [aàâeèéêiîoôuyhœæ] PFX d' Y 1 PFX d' 0 d' [aàâeèéêiîoôuyhœæ] PFX j' Y 1 PFX j' 0 j' [aàâeèéêiîoôuyhœæ] PFX c' Y 2 PFX c' 0 c' [eé] PFX c' 0 ç' a PFX l' Y 1 PFX l' 0 l' [aàâeèéêiîoôuyhœæ] PFX m' Y 1 PFX m' 0 m' [aàâeèéêiîoôuyhœæ] PFX t' Y 1 PFX t' 0 t' [aàâeèéêiîoôuyhœæ] PFX s' Y 1 PFX s' 0 s' [aàâeèéêiîoôuyhœæ] SFX zA Y 49 SFX zA voir voir/n'q'd'l'm't' avoir SFX zA voir yant/n'q'l'm't' avoir SFX zA avoir eu avoir SFX zA avoir eus avoir SFX zA avoir eue avoir SFX zA avoir eues avoir SFX zA voir i/n'q'j'l't' avoir SFX zA voir s/n'q'l'm't' avoir SFX zA voir 0/n'q'c'l'm't' avoir SFX zA voir vons/n'q'l't' avoir SFX zA voir vez/n'q'l'm' avoir SFX zA avoir ont/n'q'l'm't' avoir SFX zA voir vais/n'q'j'l'm't' avoir SFX zA voir vait/n'q'c'l'm't' avoir SFX zA voir vions/n'q'l't' avoir SFX zA voir viez/n'q'l'm' avoir SFX zA voir vaient/n'q'l'm't' avoir SFX zA avoir eus/n'q'j'l'm't' avoir SFX zA avoir eut/n'q'c'l'm't' avoir SFX zA avoir eûmes/n'q'l't' avoir SFX zA avoir eûtes/n'q'l'm' avoir SFX zA avoir eurent/n'q'l'm't' avoir SFX zA voir urai/n'q'j'l'm't' avoir SFX zA voir uras/n'q'l'm't' avoir SFX zA voir ura/n'q'c'l'm't' avoir SFX zA voir urons/n'q'l't' avoir SFX zA voir urez/n'q'l'm' avoir SFX zA voir uront/n'q'l'm't' avoir SFX zA voir urais/n'q'j'l'm't' avoir SFX zA voir urait/n'q'c'l'm't' avoir SFX zA voir urions/n'q'l't' avoir SFX zA voir uriez/n'q'l'm' avoir SFX zA voir uraient/n'q'l'm't' avoir SFX zA voir ie/n'j'l'm't' avoir SFX zA voir ies/n'l'm't' avoir SFX zA voir it/n'q'c'l'm't' avoir SFX zA voir yons/n'l't' avoir SFX zA voir yez/n'l'm' avoir SFX zA voir ient/n'q'l'm't' avoir SFX zA avoir eusse/n'q'j'l'm't' avoir SFX zA avoir eussé/n'q'l'm't' avoir SFX zA avoir eusses/n'q'l'm't' avoir SFX zA avoir eût/n'q'c'l'm't' avoir SFX zA avoir eussions/n'q'l't' avoir SFX zA avoir eussiez/n'q'l'm' avoir SFX zA avoir eussent/n'q'l'm't' avoir SFX zA voir ie/n' avoir SFX zA voir yons/n' avoir SFX zA voir yez/n' avoir SFX zE Y 45 SFX zE tre tre/n'q'd'l'm't's' être SFX zE être étant/n'q'l'm't's' être SFX zE être été être SFX zE être suis être SFX zE être es/n'q'l'm't' être SFX zE être est/n'q'c'l'm't's' être SFX zE être sommes être SFX zE tre tes/n'q'l'm' être SFX zE être sont être SFX zE être étais/n'q'j'l'm't' être SFX zE être était/n'q'c'l'm't's' être SFX zE être étions/n'q'l't' être SFX zE être étiez/n'q'l'm' être SFX zE être étaient/n'q'c'l'm't's' être SFX zE être fus être SFX zE être fut être SFX zE être fûmes être SFX zE être fûtes être SFX zE être furent être SFX zE être serai être SFX zE être seras être SFX zE être sera être SFX zE être serons être SFX zE être serez être SFX zE être seront être SFX zE être serais être SFX zE être serait être SFX zE être serions être SFX zE être seriez être SFX zE être seraient être SFX zE être sois être SFX zE être soit être SFX zE être soyons être SFX zE être soyez être SFX zE être soient être SFX zE être fusse être SFX zE être fussé être SFX zE être fusses être SFX zE être fût être SFX zE être fussions être SFX zE être fussiez être SFX zE être fussent être SFX zE être sois être SFX zE être soyons être SFX zE être soyez être SFX a0 N 101 SFX a0 er ant [^cg]er SFX a0 cer çant cer SFX a0 ger geant ger SFX a0 er e [^y]er SFX a0 yer ye [^ou]yer SFX a0 yer ie [aou]yer SFX a0 er es [^y]er SFX a0 yer yes [^ou]yer SFX a0 yer ies [aou]yer SFX a0 er ons [^cg]er SFX a0 cer çons cer SFX a0 ger geons ger SFX a0 er ez er SFX a0 er ent [^y]er SFX a0 yer yent [^ou]yer SFX a0 yer ient [aou]yer SFX a0 er ais [^cg]er SFX a0 cer çais cer SFX a0 ger geais ger SFX a0 er ait [^cg]er SFX a0 cer çait cer SFX a0 ger geait ger SFX a0 er ions er SFX a0 er iez er SFX a0 er aient [^cg]er SFX a0 cer çaient cer SFX a0 ger geaient ger SFX a0 er ai [^cg]er SFX a0 cer çai cer SFX a0 ger geai ger SFX a0 er as [^cg]er SFX a0 cer ças cer SFX a0 ger geas ger SFX a0 er a [^cg]er SFX a0 cer ça cer SFX a0 ger gea ger SFX a0 er âmes [^cg]er SFX a0 cer çâmes cer SFX a0 ger geâmes ger SFX a0 er âtes [^cg]er SFX a0 cer çâtes cer SFX a0 ger geâtes ger SFX a0 er èrent er SFX a0 er erai [^y]er SFX a0 yer yerai [^ou]yer SFX a0 yer ierai [aou]yer SFX a0 er eras [^y]er SFX a0 yer yeras [^ou]yer SFX a0 yer ieras [aou]yer SFX a0 er era [^y]er SFX a0 yer yera [^ou]yer SFX a0 yer iera [aou]yer SFX a0 er erons [^y]er SFX a0 yer yerons [^ou]yer SFX a0 yer ierons [aou]yer SFX a0 er erez [^y]er SFX a0 yer yerez [^ou]yer SFX a0 yer ierez [aou]yer SFX a0 er eront [^y]er SFX a0 yer yeront [^ou]yer SFX a0 yer ieront [aou]yer SFX a0 er erais [^y]er SFX a0 yer yerais [^ou]yer SFX a0 yer ierais [aou]yer SFX a0 er erait [^y]er SFX a0 yer yerait [^ou]yer SFX a0 yer ierait [aou]yer SFX a0 er erions [^y]er SFX a0 yer yerions [^ou]yer SFX a0 yer ierions [aou]yer SFX a0 er eriez [^y]er SFX a0 yer yeriez [^ou]yer SFX a0 yer ieriez [aou]yer SFX a0 er eraient [^y]er SFX a0 yer yeraient [^ou]yer SFX a0 yer ieraient [aou]yer SFX a0 er asse [^cg]er SFX a0 cer çasse cer SFX a0 ger geasse ger SFX a0 er asses [^cg]er SFX a0 cer çasses cer SFX a0 ger geasses ger SFX a0 er ât [^cg]er SFX a0 cer çât cer SFX a0 ger geât ger SFX a0 er assions [^cg]er SFX a0 cer çassions cer SFX a0 ger geassions ger SFX a0 er assiez [^cg]er SFX a0 cer çassiez cer SFX a0 ger geassiez ger SFX a0 er assent [^cg]er SFX a0 cer çassent cer SFX a0 ger geassent ger SFX a0 er e [^y]er SFX a0 yer ye [^ou]yer SFX a0 yer ie [aou]yer SFX a0 er ons [^cg]er SFX a0 cer çons cer SFX a0 ger geons ger SFX a0 er ez er SFX a1 Y 102 SFX a1 er er/n'q'd' er SFX a1 er ant/n'q' [^cg]er SFX a1 cer çant/n'q' cer SFX a1 ger geant/n'q' ger SFX a1 er e/n'q'j' [^y]er SFX a1 yer ye/n'q'j' [^ou]yer SFX a1 yer ie/n'q'j' [aou]yer SFX a1 er es/n' [^y]er SFX a1 yer yes/n' [^ou]yer SFX a1 yer ies/n' [aou]yer SFX a1 er ons/n' [^cg]er SFX a1 cer çons/n' cer SFX a1 ger geons/n' ger SFX a1 er ez/n' er SFX a1 er ent/n'q' [^y]er SFX a1 yer yent/n'q' [^ou]yer SFX a1 yer ient/n'q' [aou]yer SFX a1 er ais/n'j' [^cg]er SFX a1 cer çais/n'j' cer SFX a1 ger geais/n'j' ger SFX a1 er ait/n'q' [^cg]er SFX a1 cer çait/n'q' cer SFX a1 ger geait/n'q' ger SFX a1 er ions/n' er SFX a1 er iez/n' er SFX a1 er aient/n'q' [^cg]er SFX a1 cer çaient/n'q' cer SFX a1 ger geaient/n'q' ger SFX a1 er ai/n'j' [^cg]er SFX a1 cer çai/n'j' cer SFX a1 ger geai/n'j' ger SFX a1 er as/n' [^cg]er SFX a1 cer ças/n' cer SFX a1 ger geas/n' ger SFX a1 er a/n'q' [^cg]er SFX a1 cer ça/n'q' cer SFX a1 ger gea/n'q' ger SFX a1 er âmes/n' [^cg]er SFX a1 cer çâmes/n' cer SFX a1 ger geâmes/n' ger SFX a1 er âtes/n' [^cg]er SFX a1 cer çâtes/n' cer SFX a1 ger geâtes/n' ger SFX a1 er èrent/n'q' er SFX a1 er erai/n'j' [^y]er SFX a1 yer yerai/n'j' [^ou]yer SFX a1 yer ierai/n'j' [aou]yer SFX a1 er eras/n' [^y]er SFX a1 yer yeras/n' [^ou]yer SFX a1 yer ieras/n' [aou]yer SFX a1 er era/n'q' [^y]er SFX a1 yer yera/n'q' [^ou]yer SFX a1 yer iera/n'q' [aou]yer SFX a1 er erons/n' [^y]er SFX a1 yer yerons/n' [^ou]yer SFX a1 yer ierons/n' [aou]yer SFX a1 er erez/n' [^y]er SFX a1 yer yerez/n' [^ou]yer SFX a1 yer ierez/n' [aou]yer SFX a1 er eront/n'q' [^y]er SFX a1 yer yeront/n'q' [^ou]yer SFX a1 yer ieront/n'q' [aou]yer SFX a1 er erais/n'j' [^y]er SFX a1 yer yerais/n'j' [^ou]yer SFX a1 yer ierais/n'j' [aou]yer SFX a1 er erait/n'q' [^y]er SFX a1 yer yerait/n'q' [^ou]yer SFX a1 yer ierait/n'q' [aou]yer SFX a1 er erions/n' [^y]er SFX a1 yer yerions/n' [^ou]yer SFX a1 yer ierions/n' [aou]yer SFX a1 er eriez/n' [^y]er SFX a1 yer yeriez/n' [^ou]yer SFX a1 yer ieriez/n' [aou]yer SFX a1 er eraient/n'q' [^y]er SFX a1 yer yeraient/n'q' [^ou]yer SFX a1 yer ieraient/n'q' [aou]yer SFX a1 er asse/n'j' [^cg]er SFX a1 cer çasse/n'j' cer SFX a1 ger geasse/n'j' ger SFX a1 er asses/n' [^cg]er SFX a1 cer çasses/n' cer SFX a1 ger geasses/n' ger SFX a1 er ât/n'q' [^cg]er SFX a1 cer çât/n'q' cer SFX a1 ger geât/n'q' ger SFX a1 er assions/n' [^cg]er SFX a1 cer çassions/n' cer SFX a1 ger geassions/n' ger SFX a1 er assiez/n' [^cg]er SFX a1 cer çassiez/n' cer SFX a1 ger geassiez/n' ger SFX a1 er assent/n'q' [^cg]er SFX a1 cer çassent/n'q' cer SFX a1 ger geassent/n'q' ger SFX a1 er e/n' [^y]er SFX a1 yer ye/n' [^ou]yer SFX a1 yer ie/n' [aou]yer SFX a1 er ons/n' [^cg]er SFX a1 cer çons/n' cer SFX a1 ger geons/n' ger SFX a1 er ez/n' er SFX a2 Y 102 SFX a2 er er/n'q'd'l'm't's' er SFX a2 er ant/n'q'l'm't's' [^cg]er SFX a2 cer çant/n'q'l'm't's' cer SFX a2 ger geant/n'q'l'm't's' ger SFX a2 er e/n'q'j'l'm't's' [^y]er SFX a2 yer ye/n'q'j'l'm't's' [^ou]yer SFX a2 yer ie/n'q'j'l'm't's' [aou]yer SFX a2 er es/n'q'l'm' [^y]er SFX a2 yer yes/n'q'l'm' [^ou]yer SFX a2 yer ies/n'q'l'm' [aou]yer SFX a2 er ons/n'q'l't' [^cg]er SFX a2 cer çons/n'q'l't' cer SFX a2 ger geons/n'q'l't' ger SFX a2 er ez/n'q'l'm' er SFX a2 er ent/n'q'l'm't's' [^y]er SFX a2 yer yent/n'q'l'm't's' [^ou]yer SFX a2 yer ient/n'q'l'm't's' [aou]yer SFX a2 er ais/n'q'j'l'm't' [^cg]er SFX a2 cer çais/n'q'j'l'm't' cer SFX a2 ger geais/n'q'j'l'm't' ger SFX a2 er ait/n'q'l'm't's' [^cg]er SFX a2 cer çait/n'q'l'm't's' cer SFX a2 ger geait/n'q'l'm't's' ger SFX a2 er ions/n'q'l't' er SFX a2 er iez/n'q'l'm' er SFX a2 er aient/n'q'l'm't's' [^cg]er SFX a2 cer çaient/n'q'l'm't's' cer SFX a2 ger geaient/n'q'l'm't's' ger SFX a2 er ai/n'q'j'l't' [^cg]er SFX a2 cer çai/n'q'j'l't' cer SFX a2 ger geai/n'q'j'l't' ger SFX a2 er as/n'q'l'm' [^cg]er SFX a2 cer ças/n'q'l'm' cer SFX a2 ger geas/n'q'l'm' ger SFX a2 er a/n'q'l'm't's' [^cg]er SFX a2 cer ça/n'q'l'm't's' cer SFX a2 ger gea/n'q'l'm't's' ger SFX a2 er âmes/n'q'l't' [^cg]er SFX a2 cer çâmes/n'q'l't' cer SFX a2 ger geâmes/n'q'l't' ger SFX a2 er âtes/n'q'l'm' [^cg]er SFX a2 cer çâtes/n'q'l'm' cer SFX a2 ger geâtes/n'q'l'm' ger SFX a2 er èrent/n'q'l'm't's' er SFX a2 er erai/n'q'j'l't' [^y]er SFX a2 yer yerai/n'q'j'l't' [^ou]yer SFX a2 yer ierai/n'q'j'l't' [aou]yer SFX a2 er eras/n'q'l'm' [^y]er SFX a2 yer yeras/n'q'l'm' [^ou]yer SFX a2 yer ieras/n'q'l'm' [aou]yer SFX a2 er era/n'q'l'm't's' [^y]er SFX a2 yer yera/n'q'l'm't's' [^ou]yer SFX a2 yer iera/n'q'l'm't's' [aou]yer SFX a2 er erons/n'q'l't' [^y]er SFX a2 yer yerons/n'q'l't' [^ou]yer SFX a2 yer ierons/n'q'l't' [aou]yer SFX a2 er erez/n'q'l'm' [^y]er SFX a2 yer yerez/n'q'l'm' [^ou]yer SFX a2 yer ierez/n'q'l'm' [aou]yer SFX a2 er eront/n'q'l'm't's' [^y]er SFX a2 yer yeront/n'q'l'm't's' [^ou]yer SFX a2 yer ieront/n'q'l'm't's' [aou]yer SFX a2 er erais/n'q'j'l'm't' [^y]er SFX a2 yer yerais/n'q'j'l'm't' [^ou]yer SFX a2 yer ierais/n'q'j'l'm't' [aou]yer SFX a2 er erait/n'q'l'm't's' [^y]er SFX a2 yer yerait/n'q'l'm't's' [^ou]yer SFX a2 yer ierait/n'q'l'm't's' [aou]yer SFX a2 er erions/n'q'l't' [^y]er SFX a2 yer yerions/n'q'l't' [^ou]yer SFX a2 yer ierions/n'q'l't' [aou]yer SFX a2 er eriez/n'q'l'm' [^y]er SFX a2 yer yeriez/n'q'l'm' [^ou]yer SFX a2 yer ieriez/n'q'l'm' [aou]yer SFX a2 er eraient/n'q'l'm't's' [^y]er SFX a2 yer yeraient/n'q'l'm't's' [^ou]yer SFX a2 yer ieraient/n'q'l'm't's' [aou]yer SFX a2 er asse/n'q'j'l't' [^cg]er SFX a2 cer çasse/n'q'j'l't' cer SFX a2 ger geasse/n'q'j'l't' ger SFX a2 er asses/n'q'l'm' [^cg]er SFX a2 cer çasses/n'q'l'm' cer SFX a2 ger geasses/n'q'l'm' ger SFX a2 er ât/n'q'l'm't's' [^cg]er SFX a2 cer çât/n'q'l'm't's' cer SFX a2 ger geât/n'q'l'm't's' ger SFX a2 er assions/n'q'l't' [^cg]er SFX a2 cer çassions/n'q'l't' cer SFX a2 ger geassions/n'q'l't' ger SFX a2 er assiez/n'q'l'm' [^cg]er SFX a2 cer çassiez/n'q'l'm' cer SFX a2 ger geassiez/n'q'l'm' ger SFX a2 er assent/n'q'l'm't's' [^cg]er SFX a2 cer çassent/n'q'l'm't's' cer SFX a2 ger geassent/n'q'l'm't's' ger SFX a2 er e/n'l'm' [^y]er SFX a2 yer ye/n'l'm' [^ou]yer SFX a2 yer ie/n'l'm' [aou]yer SFX a2 er ons/n'l' [^cg]er SFX a2 cer çons/n'l' cer SFX a2 ger geons/n'l' ger SFX a2 er ez/n'l'm' er SFX a3 Y 102 SFX a3 er er/m't's' er SFX a3 er ant/m't's' [^cg]er SFX a3 cer çant/m't's' cer SFX a3 ger geant/m't's' ger SFX a3 er e/m's' [^y]er SFX a3 yer ye/m's' [^ou]yer SFX a3 yer ie/m's' [aou]yer SFX a3 er es/t' [^y]er SFX a3 yer yes/t' [^ou]yer SFX a3 yer ies/t' [aou]yer SFX a3 er ons [^cg]er SFX a3 cer çons cer SFX a3 ger geons ger SFX a3 r z er SFX a3 er ent/s' [^y]er SFX a3 yer yent/s' [^ou]yer SFX a3 yer ient/s' [aou]yer SFX a3 er ais/m' [^cg]er SFX a3 cer çais/m' cer SFX a3 ger geais/m' ger SFX a3 er ait/s' [^cg]er SFX a3 cer çait/s' cer SFX a3 ger geait/s' ger SFX a3 er ions er SFX a3 er iez er SFX a3 er aient/s' [^cg]er SFX a3 cer çaient/s' cer SFX a3 ger geaient/s' ger SFX a3 er ai/m' [^cg]er SFX a3 cer çai/m' cer SFX a3 ger geai/m' ger SFX a3 er as/t' [^cg]er SFX a3 cer ças/t' cer SFX a3 ger geas/t' ger SFX a3 er a/s' [^cg]er SFX a3 cer ça/s' cer SFX a3 ger gea/s' ger SFX a3 er âmes [^cg]er SFX a3 cer çâmes cer SFX a3 ger geâmes ger SFX a3 er âtes [^cg]er SFX a3 cer çâtes/s' cer SFX a3 ger geâtes/s' ger SFX a3 er èrent/s' er SFX a3 er erai/m' [^y]er SFX a3 yer yerai/m' [^ou]yer SFX a3 yer ierai/m' [aou]yer SFX a3 er eras/t' [^y]er SFX a3 yer yeras/t' [^ou]yer SFX a3 yer ieras/t' [aou]yer SFX a3 er era/s' [^y]er SFX a3 yer yera/s' [^ou]yer SFX a3 yer iera/s' [aou]yer SFX a3 er erons [^y]er SFX a3 yer yerons [^ou]yer SFX a3 yer ierons [aou]yer SFX a3 er erez [^y]er SFX a3 yer yerez [^ou]yer SFX a3 yer ierez [aou]yer SFX a3 er eront/s' [^y]er SFX a3 yer yeront/s' [^ou]yer SFX a3 yer ieront/s' [aou]yer SFX a3 er erais/m't' [^y]er SFX a3 yer yerais/m't' [^ou]yer SFX a3 yer ierais/m't' [aou]yer SFX a3 er erait/s' [^y]er SFX a3 yer yerait/s' [^ou]yer SFX a3 yer ierait/s' [aou]yer SFX a3 er erions [^y]er SFX a3 yer yerions [^ou]yer SFX a3 yer ierions [aou]yer SFX a3 er eriez [^y]er SFX a3 yer yeriez [^ou]yer SFX a3 yer ieriez [aou]yer SFX a3 er eraient/s' [^y]er SFX a3 yer yeraient/s' [^ou]yer SFX a3 yer ieraient/s' [aou]yer SFX a3 er asse/m' [^cg]er SFX a3 cer çasse/m' cer SFX a3 ger geasse/m' ger SFX a3 er asses/t' [^cg]er SFX a3 cer çasses/t' cer SFX a3 ger geasses/t' ger SFX a3 er ât/s' [^cg]er SFX a3 cer çât/s' cer SFX a3 ger geât/s' ger SFX a3 er assions [^cg]er SFX a3 cer çassions cer SFX a3 ger geassions ger SFX a3 er assiez [^cg]er SFX a3 cer çassiez cer SFX a3 ger geassiez ger SFX a3 er assent/s' [^cg]er SFX a3 cer çassent/s' cer SFX a3 ger geassent/s' ger SFX a3 er e/t' [^y]er SFX a3 yer ye/t' [^ou]yer SFX a3 yer ie/t' [aou]yer SFX a3 er ons [^cg]er SFX a3 cer çons cer SFX a3 ger geons ger SFX a3 er ez er SFX a4 Y 102 SFX a4 er er/n'q'd'l'm't's' er SFX a4 er ant/n'q'l'm't's' [^cg]er SFX a4 cer çant/n'q'l'm't's' cer SFX a4 ger geant/n'q'l'm't's' ger SFX a4 er e/n'q'j'l'm't's' [^y]er SFX a4 yer ye/n'q'j'l'm't's' [^ou]yer SFX a4 yer ie/n'q'j'l'm't's' [aou]yer SFX a4 er es/n'q'l'm't' [^y]er SFX a4 yer yes/n'q'l'm't' [^ou]yer SFX a4 yer ies/n'q'l'm't' [aou]yer SFX a4 er ons/n'q'l't' [^cg]er SFX a4 cer çons/n'q'l't' cer SFX a4 ger geons/n'q'l't' ger SFX a4 er ez/n'q'l'm' er SFX a4 er ent/n'q'l'm't's' [^y]er SFX a4 yer yent/n'q'l'm't's' [^ou]yer SFX a4 yer ient/n'q'l'm't's' [aou]yer SFX a4 er ais/n'q'j'l'm't' [^cg]er SFX a4 cer çais/n'q'j'l'm't' cer SFX a4 ger geais/n'q'j'l'm't' ger SFX a4 er ait/n'q'l'm't's' [^cg]er SFX a4 cer çait/n'q'l'm't's' cer SFX a4 ger geait/n'q'l'm't's' ger SFX a4 er ions/n'q'l't' er SFX a4 er iez/n'q'l'm' er SFX a4 er aient/n'q'l'm't's' [^cg]er SFX a4 cer çaient/n'q'l'm't's' cer SFX a4 ger geaient/n'q'l'm't's' ger SFX a4 er ai/n'q'j'l'm't' [^cg]er SFX a4 cer çai/n'q'j'l'm't' cer SFX a4 ger geai/n'q'j'l'm't' ger SFX a4 er as/n'q'l'm't' [^cg]er SFX a4 cer ças/n'q'l'm't' cer SFX a4 ger geas/n'q'l'm't' ger SFX a4 er a/n'q'l'm't's' [^cg]er SFX a4 cer ça/n'q'l'm't's' cer SFX a4 ger gea/n'q'l'm't's' ger SFX a4 er âmes/n'q'l't' [^cg]er SFX a4 cer çâmes/n'q'l't' cer SFX a4 ger geâmes/n'q'l't' ger SFX a4 er âtes/n'q'l'm' [^cg]er SFX a4 cer çâtes/n'q'l'm' cer SFX a4 ger geâtes/n'q'l'm' ger SFX a4 er èrent/n'q'l'm't's' er SFX a4 er erai/n'q'j'l'm't' [^y]er SFX a4 yer yerai/n'q'j'l'm't' [^ou]yer SFX a4 yer ierai/n'q'j'l'm't' [aou]yer SFX a4 er eras/n'q'l'm't' [^y]er SFX a4 yer yeras/n'q'l'm't' [^ou]yer SFX a4 yer ieras/n'q'l'm't' [aou]yer SFX a4 er era/n'q'l'm't's' [^y]er SFX a4 yer yera/n'q'l'm't's' [^ou]yer SFX a4 yer iera/n'q'l'm't's' [aou]yer SFX a4 er erons/n'q'l't' [^y]er SFX a4 yer yerons/n'q'l't' [^ou]yer SFX a4 yer ierons/n'q'l't' [aou]yer SFX a4 er erez/n'q'l'm' [^y]er SFX a4 yer yerez/n'q'l'm' [^ou]yer SFX a4 yer ierez/n'q'l'm' [aou]yer SFX a4 er eront/n'q'l'm't's' [^y]er SFX a4 yer yeront/n'q'l'm't's' [^ou]yer SFX a4 yer ieront/n'q'l'm't's' [aou]yer SFX a4 er erais/n'q'j'l'm't' [^y]er SFX a4 yer yerais/n'q'j'l'm't' [^ou]yer SFX a4 yer ierais/n'q'j'l'm't' [aou]yer SFX a4 er erait/n'q'l'm't's' [^y]er SFX a4 yer yerait/n'q'l'm't's' [^ou]yer SFX a4 yer ierait/n'q'l'm't's' [aou]yer SFX a4 er erions/n'q'l't' [^y]er SFX a4 yer yerions/n'q'l't' [^ou]yer SFX a4 yer ierions/n'q'l't' [aou]yer SFX a4 er eriez/n'q'l'm' [^y]er SFX a4 yer yeriez/n'q'l'm' [^ou]yer SFX a4 yer ieriez/n'q'l'm' [aou]yer SFX a4 er eraient/n'q'l'm't's' [^y]er SFX a4 yer yeraient/n'q'l'm't's' [^ou]yer SFX a4 yer ieraient/n'q'l'm't's' [aou]yer SFX a4 er asse/n'q'j'l'm't' [^cg]er SFX a4 cer çasse/n'q'j'l'm't' cer SFX a4 ger geasse/n'q'j'l'm't' ger SFX a4 er asses/n'q'l'm't' [^cg]er SFX a4 cer çasses/n'q'l'm't' cer SFX a4 ger geasses/n'q'l'm't' ger SFX a4 er ât/n'q'l'm't's' [^cg]er SFX a4 cer çât/n'q'l'm't's' cer SFX a4 ger geât/n'q'l'm't's' ger SFX a4 er assions/n'q'l't' [^cg]er SFX a4 cer çassions/n'q'l't' cer SFX a4 ger geassions/n'q'l't' ger SFX a4 er assiez/n'q'l'm' [^cg]er SFX a4 cer çassiez/n'q'l'm' cer SFX a4 ger geassiez/n'q'l'm' ger SFX a4 er assent/n'q'l'm't's' [^cg]er SFX a4 cer çassent/n'q'l'm't's' cer SFX a4 ger geassent/n'q'l'm't's' ger SFX a4 er e/n'l'm't' [^y]er SFX a4 yer ye/n'l'm't' [^ou]yer SFX a4 yer ie/n'l'm't' [aou]yer SFX a4 er ons/n'l' [^cg]er SFX a4 cer çons/n'l' cer SFX a4 ger geons/n'l' ger SFX a4 er ez/n'l'm' er SFX a5 Y 102 SFX a5 er er/n'q'd'm't's' er SFX a5 er ant/n'q'm't's' [^cg]er SFX a5 cer çant/n'q'm't's' cer SFX a5 ger geant/n'q'm't's' ger SFX a5 er e/n'q'j'm't's' [^y]er SFX a5 yer ye/n'q'j'm't's' [^ou]yer SFX a5 yer ie/n'q'j'm't's' [aou]yer SFX a5 er es/n'm't' [^y]er SFX a5 yer yes/n'm't' [^ou]yer SFX a5 yer ies/n'm't' [aou]yer SFX a5 er ons/n't' [^cg]er SFX a5 cer çons/n't' cer SFX a5 ger geons/n't' ger SFX a5 r z/n'm' er SFX a5 er ent/n'q'm't's' [^y]er SFX a5 yer yent/n'q'm't's' [^ou]yer SFX a5 yer ient/n'q'm't's' [aou]yer SFX a5 er ais/n'j'm't' [^cg]er SFX a5 cer çais/n'j'm't' cer SFX a5 ger geais/n'j'm't' ger SFX a5 er ait/n'q'm't's' [^cg]er SFX a5 cer çait/n'q'm't's' cer SFX a5 ger geait/n'q'm't's' ger SFX a5 er ions/n't' er SFX a5 er iez/n'm' er SFX a5 er aient/n'q'm't's' [^cg]er SFX a5 cer çaient/n'q'm't's' cer SFX a5 ger geaient/n'q'm't's' ger SFX a5 er ai/n'j'm't' [^cg]er SFX a5 cer çai/n'j'm't' cer SFX a5 ger geai/n'j'm't' ger SFX a5 er as/n'm't' [^cg]er SFX a5 cer ças/n'm't' cer SFX a5 ger geas/n'm't' ger SFX a5 er a/n'q'm't's' [^cg]er SFX a5 cer ça/n'q'm't's' cer SFX a5 ger gea/n'q'm't's' ger SFX a5 er âmes/n't' [^cg]er SFX a5 cer çâmes/n't' cer SFX a5 ger geâmes/n't' ger SFX a5 er âtes/n'm' [^cg]er SFX a5 cer çâtes/n'm' cer SFX a5 ger geâtes/n'm' ger SFX a5 er èrent/n'q'm't's' er SFX a5 er erai/n'j'm't' [^y]er SFX a5 yer yerai/n'j'm't' [^ou]yer SFX a5 yer ierai/n'j'm't' [aou]yer SFX a5 er eras/n'm't' [^y]er SFX a5 yer yeras/n'm't' [^ou]yer SFX a5 yer ieras/n'm't' [aou]yer SFX a5 er era/n'q'm't's' [^y]er SFX a5 yer yera/n'q'm't's' [^ou]yer SFX a5 yer iera/n'q'm't's' [aou]yer SFX a5 er erons/n't' [^y]er SFX a5 yer yerons/n't' [^ou]yer SFX a5 yer ierons/n't' [aou]yer SFX a5 er erez/n'm' [^y]er SFX a5 yer yerez/n'm' [^ou]yer SFX a5 yer ierez/n'm' [aou]yer SFX a5 er eront/n'q'm't's' [^y]er SFX a5 yer yeront/n'q'm't's' [^ou]yer SFX a5 yer ieront/n'q'm't's' [aou]yer SFX a5 er erais/n'j'm't' [^y]er SFX a5 yer yerais/n'j'm't' [^ou]yer SFX a5 yer ierais/n'j'm't' [aou]yer SFX a5 er erait/n'q'm't's' [^y]er SFX a5 yer yerait/n'q'm't's' [^ou]yer SFX a5 yer ierait/n'q'm't's' [aou]yer SFX a5 er erions/n't' [^y]er SFX a5 yer yerions/n't' [^ou]yer SFX a5 yer ierions/n't' [aou]yer SFX a5 er eriez/n'm' [^y]er SFX a5 yer yeriez/n'm' [^ou]yer SFX a5 yer ieriez/n'm' [aou]yer SFX a5 er eraient/n'q'm't's' [^y]er SFX a5 yer yeraient/n'q'm't's' [^ou]yer SFX a5 yer ieraient/n'q'm't's' [aou]yer SFX a5 er asse/n'j'm't' [^cg]er SFX a5 cer çasse/n'j'm't' cer SFX a5 ger geasse/n'j'm't' ger SFX a5 er asses/n'm't' [^cg]er SFX a5 cer çasses/n'm't' cer SFX a5 ger geasses/n'm't' ger SFX a5 er ât/n'q'm't's' [^cg]er SFX a5 cer çât/n'q'm't's' cer SFX a5 ger geât/n'q'm't's' ger SFX a5 er assions/n't' [^cg]er SFX a5 cer çassions/n't' cer SFX a5 ger geassions/n't' ger SFX a5 er assiez/n'm' [^cg]er SFX a5 cer çassiez/n'm' cer SFX a5 ger geassiez/n'm' ger SFX a5 er assent/n'q'm't's' [^cg]er SFX a5 cer çassent/n'q'm't's' cer SFX a5 ger geassent/n'q'm't's' ger SFX a5 er e/n'm' [^y]er SFX a5 yer e/n'm' [^ou]yer SFX a5 yer ie/n'm' [aou]yer SFX a5 er ons/n' [^cg]er SFX a5 cer çons/n' cer SFX a5 ger geons/n' ger SFX a5 er ez/n'm' er SFX a6 Y 72 SFX a6 er er/s' er SFX a6 er ant/s' [^cg]er SFX a6 cer çant/s' cer SFX a6 ger geant/s' ger SFX a6 er e/s' [^y]er SFX a6 yer ye/s' [^ou]yer SFX a6 yer ie/s' [aou]yer SFX a6 er ons [^cg]er SFX a6 cer çons cer SFX a6 ger geons ger SFX a6 er ez er SFX a6 er ent/s' [^y]er SFX a6 yer yent/s' [^ou]yer SFX a6 yer ient/s' [aou]yer SFX a6 er ait/s' [^cg]er SFX a6 cer çait/s' cer SFX a6 ger geait/s' ger SFX a6 er ions er SFX a6 er iez er SFX a6 er aient/s' [^cg]er SFX a6 cer çaient/s' cer SFX a6 ger geaient/s' ger SFX a6 er a/s' [^cg]er SFX a6 cer ça/s' cer SFX a6 ger gea/s' ger SFX a6 er âmes [^cg]er SFX a6 cer çâmes cer SFX a6 ger geâmes ger SFX a6 er âtes [^cg]er SFX a6 cer çâtes/s' cer SFX a6 ger geâtes/s' ger SFX a6 er èrent/s' er SFX a6 er era/s' [^y]er SFX a6 yer yera/s' [^ou]yer SFX a6 yer iera/s' [aou]yer SFX a6 er erons [^y]er SFX a6 yer yerons [^ou]yer SFX a6 yer ierons [aou]yer SFX a6 er erez [^y]er SFX a6 yer yerez [^ou]yer SFX a6 yer ierez [aou]yer SFX a6 er eront/s' [^y]er SFX a6 yer yeront/s' [^ou]yer SFX a6 yer ieront/s' [aou]yer SFX a6 er erait/s' [^y]er SFX a6 yer yerait/s' [^ou]yer SFX a6 yer ierait/s' [aou]yer SFX a6 er erions [^y]er SFX a6 yer yerions [^ou]yer SFX a6 yer ierions [aou]yer SFX a6 er eriez [^y]er SFX a6 yer yeriez [^ou]yer SFX a6 yer ieriez [aou]yer SFX a6 er eraient/s' [^y]er SFX a6 yer yeraient/s' [^ou]yer SFX a6 yer ieraient/s' [aou]yer SFX a6 er ât/s' [^cg]er SFX a6 cer çât/s' cer SFX a6 ger geât/s' ger SFX a6 er assions [^cg]er SFX a6 cer çassions cer SFX a6 ger geassions ger SFX a6 er assiez [^cg]er SFX a6 cer çassiez cer SFX a6 ger geassiez ger SFX a6 er assent/s' [^cg]er SFX a6 cer çassent/s' cer SFX a6 ger geassent/s' ger SFX a6 er ons [^cg]er SFX a6 cer çons cer SFX a6 ger geons ger SFX a6 er ez er SFX a8 N 16 SFX a8 er er/n'd' er SFX a8 er ant [^cg]er SFX a8 cer çant cer SFX a8 ger geant ger SFX a8 er e/n' er SFX a8 er ait/n' [^cg]er SFX a8 cer çait/n' cer SFX a8 ger geait/n' ger SFX a8 er a/n' [^cg]er SFX a8 cer ça/n' cer SFX a8 ger gea/n' ger SFX a8 er era/n' er SFX a8 er erait/n' er SFX a8 er ât/n' [^cg]er SFX a8 cer çât/n' cer SFX a8 ger geât/n' ger SFX a9 N 10 SFX a9 er ent/n' er SFX a9 er aient/n' [^cg]er SFX a9 cer çaient/n' cer SFX a9 ger geaient/n' ger SFX a9 er èrent/n' er SFX a9 er eront/n' er SFX a9 er eraient/n' er SFX a9 er assent/n' [^cg]er SFX a9 cer çassent/n' cer SFX a9 ger geassent/n' ger SFX b0 N 189 SFX b0 er ant [^c]er SFX b0 cer çant cer SFX b0 ecer èce ecer SFX b0 emer ème emer SFX b0 ener ène ener SFX b0 eper èpe eper SFX b0 erer ère erer SFX b0 eser èse eser SFX b0 ever ève ever SFX b0 evrer èvre evrer SFX b0 eter ète eter SFX b0 eler èle eler SFX b0 ecer èces ecer SFX b0 emer èmes emer SFX b0 ener ènes ener SFX b0 eper èpes eper SFX b0 erer ères erer SFX b0 eser èses eser SFX b0 ever èves ever SFX b0 evrer èvres evrer SFX b0 eter ètes eter SFX b0 eler èles eler SFX b0 er ons [^c]er SFX b0 cer çons cer SFX b0 er ez er SFX b0 ecer ècent ecer SFX b0 emer èment emer SFX b0 ener ènent ener SFX b0 eper èpent eper SFX b0 erer èrent erer SFX b0 eser èsent eser SFX b0 ever èvent ever SFX b0 evrer èvrent evrer SFX b0 eter ètent eter SFX b0 eler èlent eler SFX b0 er ais [^c]er SFX b0 cer çais cer SFX b0 er ait [^c]er SFX b0 cer çait cer SFX b0 er ions er SFX b0 er iez er SFX b0 er aient [^c]er SFX b0 cer çaient cer SFX b0 er ai [^c]er SFX b0 cer çai cer SFX b0 er as [^c]er SFX b0 cer ças cer SFX b0 er a [^c]er SFX b0 cer ça cer SFX b0 er âmes [^c]er SFX b0 cer çâmes cer SFX b0 er âtes [^c]er SFX b0 cer çâtes cer SFX b0 er èrent er SFX b0 ecer ècerai ecer SFX b0 emer èmerai emer SFX b0 ener ènerai ener SFX b0 eper èperai eper SFX b0 erer èrerai erer SFX b0 eser èserai eser SFX b0 ever èverai ever SFX b0 evrer èvrerai evrer SFX b0 eter èterai eter SFX b0 eler èlerai eler SFX b0 ecer èceras ecer SFX b0 emer èmeras emer SFX b0 ener èneras ener SFX b0 eper èperas eper SFX b0 erer èreras erer SFX b0 eser èseras eser SFX b0 ever èveras ever SFX b0 evrer èvreras evrer SFX b0 eter èteras eter SFX b0 eler èleras eler SFX b0 ecer ècera ecer SFX b0 emer èmera emer SFX b0 ener ènera ener SFX b0 eper èpera eper SFX b0 erer èrera erer SFX b0 eser èsera eser SFX b0 ever èvera ever SFX b0 evrer èvrera evrer SFX b0 eter ètera eter SFX b0 eler èlera eler SFX b0 ecer ècerons ecer SFX b0 emer èmerons emer SFX b0 ener ènerons ener SFX b0 eper èperons eper SFX b0 erer èrerons erer SFX b0 eser èserons eser SFX b0 ever èverons ever SFX b0 evrer èvrerons evrer SFX b0 eter èterons eter SFX b0 eler èlerons eler SFX b0 ecer ècerez ecer SFX b0 emer èmerez emer SFX b0 ener ènerez ener SFX b0 eper èperez eper SFX b0 erer èrerez erer SFX b0 eser èserez eser SFX b0 ever èverez ever SFX b0 evrer èvrerez evrer SFX b0 eter èterez eter SFX b0 eler èlerez eler SFX b0 ecer èceront ecer SFX b0 emer èmeront emer SFX b0 ener èneront ener SFX b0 eper èperont eper SFX b0 erer èreront erer SFX b0 eser èseront eser SFX b0 ever èveront ever SFX b0 evrer èvreront evrer SFX b0 eter èteront eter SFX b0 eler èleront eler SFX b0 ecer ècerais ecer SFX b0 emer èmerais emer SFX b0 ener ènerais ener SFX b0 eper èperais eper SFX b0 erer èrerais erer SFX b0 eser èserais eser SFX b0 ever èverais ever SFX b0 evrer èvrerais evrer SFX b0 eter èterais eter SFX b0 eler èlerais eler SFX b0 ecer ècerait ecer SFX b0 emer èmerait emer SFX b0 ener ènerait ener SFX b0 eper èperait eper SFX b0 erer èrerait erer SFX b0 eser èserait eser SFX b0 ever èverait ever SFX b0 evrer èvrerait evrer SFX b0 eter èterait eter SFX b0 eler èlerait eler SFX b0 ecer ècerions ecer SFX b0 emer èmerions emer SFX b0 ener ènerions ener SFX b0 eper èperions eper SFX b0 erer èrerions erer SFX b0 eser èserions eser SFX b0 ever èverions ever SFX b0 evrer èvrerions evrer SFX b0 eter èterions eter SFX b0 eler èlerions eler SFX b0 ecer èceriez ecer SFX b0 emer èmeriez emer SFX b0 ener èneriez ener SFX b0 eper èperiez eper SFX b0 erer èreriez erer SFX b0 eser èseriez eser SFX b0 ever èveriez ever SFX b0 evrer èvreriez evrer SFX b0 eter èteriez eter SFX b0 eler èleriez eler SFX b0 ecer èceraient ecer SFX b0 emer èmeraient emer SFX b0 ener èneraient ener SFX b0 eper èperaient eper SFX b0 erer èreraient erer SFX b0 eser èseraient eser SFX b0 ever èveraient ever SFX b0 evrer èvreraient evrer SFX b0 eter èteraient eter SFX b0 eler èleraient eler SFX b0 er asse [^c]er SFX b0 cer çasse cer SFX b0 er asses [^c]er SFX b0 cer çasses cer SFX b0 er ât [^c]er SFX b0 cer çât cer SFX b0 er assions [^c]er SFX b0 cer çassions cer SFX b0 er assiez [^c]er SFX b0 cer çassiez cer SFX b0 er assent [^c]er SFX b0 cer çassent cer SFX b0 ecer èce ecer SFX b0 emer ème emer SFX b0 ener ène ener SFX b0 eper èpe eper SFX b0 erer ère erer SFX b0 eser èse eser SFX b0 ever ève ever SFX b0 evrer èvre evrer SFX b0 eter ète eter SFX b0 eler èle eler SFX b0 er ons [^c]er SFX b0 cer çons cer SFX b0 er ez er SFX b1 Y 190 SFX b1 er er/n'q'd' er SFX b1 er ant/n'q' [^c]er SFX b1 cer çant/n'q' cer SFX b1 ecer èce/n'j'q' ecer SFX b1 emer ème/n'j'q' emer SFX b1 ener ène/n'j'q' ener SFX b1 eper èpe/n'j'q' eper SFX b1 erer ère/n'j'q' erer SFX b1 eser èse/n'j'q' eser SFX b1 ever ève/n'j'q' ever SFX b1 evrer èvre/n'j'q' evrer SFX b1 eter ète/n'j'q' eter SFX b1 eler èle/n'j'q' eler SFX b1 ecer èces/n' ecer SFX b1 emer èmes/n' emer SFX b1 ener ènes/n' ener SFX b1 eper èpes/n' eper SFX b1 erer ères/n' erer SFX b1 eser èses/n' eser SFX b1 ever èves/n' ever SFX b1 evrer èvres/n' evrer SFX b1 eter ètes/n' eter SFX b1 eler èles/n' eler SFX b1 er ons/n' [^c]er SFX b1 cer çons/n' cer SFX b1 er ez/n' er SFX b1 ecer ècent/n'q' ecer SFX b1 emer èment/n'q' emer SFX b1 ener ènent/n'q' ener SFX b1 eper èpent/n'q' eper SFX b1 erer èrent/n'q' erer SFX b1 eser èsent/n'q' eser SFX b1 ever èvent/n'q' ever SFX b1 evrer èvrent/n'q' evrer SFX b1 eter ètent/n'q' eter SFX b1 eler èlent/n'q' eler SFX b1 er ais/n'j' [^c]er SFX b1 cer çais/n'j' cer SFX b1 er ait/n'q' [^c]er SFX b1 cer çait/n'q' cer SFX b1 er ions/n' er SFX b1 er iez/n' er SFX b1 er aient/n'q' [^c]er SFX b1 cer çaient/n'q' cer SFX b1 er ai/n'j' [^c]er SFX b1 cer çai/n'j' cer SFX b1 er as/n' [^c]er SFX b1 cer ças/n' cer SFX b1 er a/n'q' [^c]er SFX b1 cer ça/n'q' cer SFX b1 er âmes/n' [^c]er SFX b1 cer çâmes/n' cer SFX b1 er âtes/n' [^c]er SFX b1 cer çâtes/n' cer SFX b1 er èrent/n'q' er SFX b1 ecer ècerai/n'j' ecer SFX b1 emer èmerai/n'j' emer SFX b1 ener ènerai/n'j' ener SFX b1 eper èperai/n'j' eper SFX b1 erer èrerai/n'j' erer SFX b1 eser èserai/n'j' eser SFX b1 ever èverai/n'j' ever SFX b1 evrer èvrerai/n'j' evrer SFX b1 eter èterai/n'j' eter SFX b1 eler èlerai/n'j' eler SFX b1 ecer èceras/n' ecer SFX b1 emer èmeras/n' emer SFX b1 ener èneras/n' ener SFX b1 eper èperas/n' eper SFX b1 erer èreras/n' erer SFX b1 eser èseras/n' eser SFX b1 ever èveras/n' ever SFX b1 evrer èvreras/n' evrer SFX b1 eter èteras/n' eter SFX b1 eler èleras/n' eler SFX b1 ecer ècera/n'q' ecer SFX b1 emer èmera/n'q' emer SFX b1 ener ènera/n'q' ener SFX b1 eper èpera/n'q' eper SFX b1 erer èrera/n'q' erer SFX b1 eser èsera/n'q' eser SFX b1 ever èvera/n'q' ever SFX b1 evrer èvrera/n'q' evrer SFX b1 eter ètera/n'q' eter SFX b1 eler èlera/n'q' eler SFX b1 ecer ècerons/n' ecer SFX b1 emer èmerons/n' emer SFX b1 ener ènerons/n' ener SFX b1 eper èperons/n' eper SFX b1 erer èrerons/n' erer SFX b1 eser èserons/n' eser SFX b1 ever èverons/n' ever SFX b1 evrer èvrerons/n' evrer SFX b1 eter èterons/n' eter SFX b1 eler èlerons/n' eler SFX b1 ecer ècerez/n' ecer SFX b1 emer èmerez/n' emer SFX b1 ener ènerez/n' ener SFX b1 eper èperez/n' eper SFX b1 erer èrerez/n' erer SFX b1 eser èserez/n' eser SFX b1 ever èverez/n' ever SFX b1 evrer èvrerez/n' evrer SFX b1 eter èterez/n' eter SFX b1 eler èlerez/n' eler SFX b1 ecer èceront/n'q' ecer SFX b1 emer èmeront/n'q' emer SFX b1 ener èneront/n'q' ener SFX b1 eper èperont/n'q' eper SFX b1 erer èreront/n'q' erer SFX b1 eser èseront/n'q' eser SFX b1 ever èveront/n'q' ever SFX b1 evrer èvreront/n'q' evrer SFX b1 eter èteront/n'q' eter SFX b1 eler èleront/n'q' eler SFX b1 ecer ècerais/n'j' ecer SFX b1 emer èmerais/n'j' emer SFX b1 ener ènerais/n'j' ener SFX b1 eper èperais/n'j' eper SFX b1 erer èrerais/n'j' erer SFX b1 eser èserais/n'j' eser SFX b1 ever èverais/n'j' ever SFX b1 evrer èvrerais/n'j' evrer SFX b1 eter èterais/n'j' eter SFX b1 eler èlerais/n' eler SFX b1 ecer ècerait/n'q' ecer SFX b1 emer èmerait/n'q' emer SFX b1 ener ènerait/n'q' ener SFX b1 eper èperait/n'q' eper SFX b1 erer èrerait/n'q' erer SFX b1 eser èserait/n'q' eser SFX b1 ever èverait/n'q' ever SFX b1 evrer èvrerait/n'q' evrer SFX b1 eter èterait/n'q' eter SFX b1 eler èlerait/n'q' eler SFX b1 ecer ècerions/n' ecer SFX b1 emer èmerions/n' emer SFX b1 ener ènerions/n' ener SFX b1 eper èperions/n' eper SFX b1 erer èrerions/n' erer SFX b1 eser èserions/n' eser SFX b1 ever èverions/n' ever SFX b1 evrer èvrerions/n' evrer SFX b1 eter èterions/n' eter SFX b1 eler èlerions/n' eler SFX b1 ecer èceriez/n' ecer SFX b1 emer èmeriez/n' emer SFX b1 ener èneriez/n' ener SFX b1 eper èperiez/n' eper SFX b1 erer èreriez/n' erer SFX b1 eser èseriez/n' eser SFX b1 ever èveriez/n' ever SFX b1 evrer èvreriez/n' evrer SFX b1 eter èteriez/n' eter SFX b1 eler èleriez/n' eler SFX b1 ecer èceraient/n'q' ecer SFX b1 emer èmeraient/n'q' emer SFX b1 ener èneraient/n'q' ener SFX b1 eper èperaient/n'q' eper SFX b1 erer èreraient/n'q' erer SFX b1 eser èseraient/n'q' eser SFX b1 ever èveraient/n'q' ever SFX b1 evrer èvreraient/n'q' evrer SFX b1 eter èteraient/n'q' eter SFX b1 eler èleraient/n'q' eler SFX b1 er asse/n'j' [^c]er SFX b1 cer çasse/n'j' cer SFX b1 er asses/n' [^c]er SFX b1 cer çasses/n' cer SFX b1 er ât/n'q' [^c]er SFX b1 cer çât/n'q' cer SFX b1 er assions/n' [^c]er SFX b1 cer çassions/n' cer SFX b1 er assiez/n' [^c]er SFX b1 cer çassiez/n' cer SFX b1 er assent/n'q' [^c]er SFX b1 cer çassent/n'q' cer SFX b1 ecer èce/n' ecer SFX b1 emer ème/n' emer SFX b1 ener ène/n' ener SFX b1 eper èpe/n' eper SFX b1 erer ère/n' erer SFX b1 eser èse/n' eser SFX b1 ever ève/n' ever SFX b1 evrer èvre/n' evrer SFX b1 eter ète/n' eter SFX b1 eler èle/n' eler SFX b1 er ons/n' [^c]er SFX b1 cer çons/n' cer SFX b1 er ez/n' er SFX b2 Y 190 SFX b2 er er/n'q'd'l'm't's' er SFX b2 er ant/n'q'l'm't's' [^c]er SFX b2 cer çant/n'q'l'm't's' cer SFX b2 ecer èce/n'q'j'l'm't's' ecer SFX b2 emer ème/n'q'j'l'm't's' emer SFX b2 ener ène/n'q'j'l'm't's' ener SFX b2 eper èpe/n'q'j'l'm't's' eper SFX b2 erer ère/n'q'j'l'm't's' erer SFX b2 eser èse/n'q'j'l'm't's' eser SFX b2 ever ève/n'q'j'l'm't's' ever SFX b2 evrer èvre/n'q'j'l'm't's' evrer SFX b2 eter ète/n'q'j'l'm't's' eter SFX b2 eler èle/n'q'j'l'm't's' eler SFX b2 ecer èces/n'q'l'm' ecer SFX b2 emer èmes/n'q'l'm' emer SFX b2 ener ènes/n'q'l'm' ener SFX b2 eper èpes/n'q'l'm' eper SFX b2 erer ères/n'q'l'm' erer SFX b2 eser èses/n'q'l'm' eser SFX b2 ever èves/n'q'l'm' ever SFX b2 evrer èvres/n'q'l'm' evrer SFX b2 eter ètes/n'q'l'm' eter SFX b2 eler èles/n'q'l'm' eler SFX b2 er ons/n'q'l't' [^c]er SFX b2 cer çons/n'q'l't' cer SFX b2 er ez/n'q'l'm' er SFX b2 ecer ècent/n'q'l'm't's' ecer SFX b2 emer èment/n'q'l'm't's' emer SFX b2 ener ènent/n'q'l'm't's' ener SFX b2 eper èpent/n'q'l'm't's' eper SFX b2 erer èrent/n'q'l'm't's' erer SFX b2 eser èsent/n'q'l'm't's' eser SFX b2 ever èvent/n'q'l'm't's' ever SFX b2 evrer èvrent/n'q'l'm't's' evrer SFX b2 eter ètent/n'q'l'm't's' eter SFX b2 eler èlent/n'q'l'm't's' eler SFX b2 er ais/n'q'j'l'm't' [^c]er SFX b2 cer çais/n'q'j'l'm't' cer SFX b2 er ait/n'q'l'm't's' [^c]er SFX b2 cer çait/n'q'l'm't's' cer SFX b2 er ions/n'q'l't' er SFX b2 er iez/n'q'l'm' er SFX b2 er aient/n'q'l'm't's' [^c]er SFX b2 cer çaient/n'q'l'm't's' cer SFX b2 er ai/n'q'j'l't' [^c]er SFX b2 cer çai/n'q'j'l't' cer SFX b2 er as/n'q'l'm' [^c]er SFX b2 cer ças/n'q'l'm' cer SFX b2 er a/n'q'l'm't's' [^c]er SFX b2 cer ça/n'q'l'm't's' cer SFX b2 er âmes/n'q'l't' [^c]er SFX b2 cer çâmes/n'q'l't' cer SFX b2 er âtes/n'q'l'm' [^c]er SFX b2 cer çâtes/n'q'l'm' cer SFX b2 er èrent/n'q'l'm't's' er SFX b2 ecer ècerai/n'q'j'l't' ecer SFX b2 emer èmerai/n'q'j'l't' emer SFX b2 ener ènerai/n'q'j'l't' ener SFX b2 eper èperai/n'q'j'l't' eper SFX b2 erer èrerai/n'q'j'l't' erer SFX b2 eser èserai/n'q'j'l't' eser SFX b2 ever èverai/n'q'j'l't' ever SFX b2 evrer èvrerai/n'q'j'l't' evrer SFX b2 eter èterai/n'q'j'l't' eter SFX b2 eler èlerai/n'q'j'l't' eler SFX b2 ecer èceras/n'q'l'm' ecer SFX b2 emer èmeras/n'q'l'm' emer SFX b2 ener èneras/n'q'l'm' ener SFX b2 eper èperas/n'q'l'm' eper SFX b2 erer èreras/n'q'l'm' erer SFX b2 eser èseras/n'q'l'm' eser SFX b2 ever èveras/n'q'l'm' ever SFX b2 evrer èvreras/n'q'l'm' evrer SFX b2 eter èteras/n'q'l'm' eter SFX b2 eler èleras/n'q'l'm' eler SFX b2 ecer ècera/n'q'l'm't's' ecer SFX b2 emer èmera/n'q'l'm't's' emer SFX b2 ener ènera/n'q'l'm't's' ener SFX b2 eper èpera/n'q'l'm't's' eper SFX b2 erer èrera/n'q'l'm't's' erer SFX b2 eser èsera/n'q'l'm't's' eser SFX b2 ever èvera/n'q'l'm't's' ever SFX b2 evrer èvrera/n'q'l'm't's' evrer SFX b2 eter ètera/n'q'l'm't's' eter SFX b2 eler èlera/n'q'l'm't's' eler SFX b2 ecer ècerons/n'q'l't' ecer SFX b2 emer èmerons/n'q'l't' emer SFX b2 ener ènerons/n'q'l't' ener SFX b2 eper èperons/n'q'l't' eper SFX b2 erer èrerons/n'q'l't' erer SFX b2 eser èserons/n'q'l't' eser SFX b2 ever èverons/n'q'l't' ever SFX b2 evrer èvrerons/n'q'l't' evrer SFX b2 eter èterons/n'q'l't' eter SFX b2 eler èlerons/n'q'l't' eler SFX b2 ecer ècerez/n'q'l'm' ecer SFX b2 emer èmerez/n'q'l'm' emer SFX b2 ener ènerez/n'q'l'm' ener SFX b2 eper èperez/n'q'l'm' eper SFX b2 erer èrerez/n'q'l'm' erer SFX b2 eser èserez/n'q'l'm' eser SFX b2 ever èverez/n'q'l'm' ever SFX b2 evrer èvrerez/n'q'l'm' evrer SFX b2 eter èterez/n'q'l'm' eter SFX b2 eler èlerez/n'q'l'm' eler SFX b2 ecer èceront/n'q'l'm't's' ecer SFX b2 emer èmeront/n'q'l'm't's' emer SFX b2 ener èneront/n'q'l'm't's' ener SFX b2 eper èperont/n'q'l'm't's' eper SFX b2 erer èreront/n'q'l'm't's' erer SFX b2 eser èseront/n'q'l'm't's' eser SFX b2 ever èveront/n'q'l'm't's' ever SFX b2 evrer èvreront/n'q'l'm't's' evrer SFX b2 eter èteront/n'q'l'm't's' eter SFX b2 eler èleront/n'q'l'm't's' eler SFX b2 ecer ècerais/n'q'j'l'm't' ecer SFX b2 emer èmerais/n'q'j'l'm't' emer SFX b2 ener ènerais/n'q'j'l'm't' ener SFX b2 eper èperais/n'q'j'l'm't' eper SFX b2 erer èrerais/n'q'j'l'm't' erer SFX b2 eser èserais/n'q'j'l'm't' eser SFX b2 ever èverais/n'q'j'l'm't' ever SFX b2 evrer èvrerais/n'q'j'l'm't' evrer SFX b2 eter èterais/n'q'j'l'm't' eter SFX b2 eler èlerais/n'q'j'l'm't' eler SFX b2 ecer ècerait/n'q'l'm't's' ecer SFX b2 emer èmerait/n'q'l'm't's' emer SFX b2 ener ènerait/n'q'l'm't's' ener SFX b2 eper èperait/n'q'l'm't's' eper SFX b2 erer èrerait/n'q'l'm't's' erer SFX b2 eser èserait/n'q'l'm't's' eser SFX b2 ever èverait/n'q'l'm't's' ever SFX b2 evrer èvrerait/n'q'l'm't's' evrer SFX b2 eter èterait/n'q'l'm't's' eter SFX b2 eler èlerait/n'q'l'm't's' eler SFX b2 ecer ècerions/n'q'l't' ecer SFX b2 emer èmerions/n'q'l't' emer SFX b2 ener ènerions/n'q'l't' ener SFX b2 eper èperions/n'q'l't' eper SFX b2 erer èrerions/n'q'l't' erer SFX b2 eser èserions/n'q'l't' eser SFX b2 ever èverions/n'q'l't' ever SFX b2 evrer èvrerions/n'q'l't' evrer SFX b2 eter èterions/n'q'l't' eter SFX b2 eler èlerions/n'q'l't' eler SFX b2 ecer èceriez/n'q'l'm' ecer SFX b2 emer èmeriez/n'q'l'm' emer SFX b2 ener èneriez/n'q'l'm' ener SFX b2 eper èperiez/n'q'l'm' eper SFX b2 erer èreriez/n'q'l'm' erer SFX b2 eser èseriez/n'q'l'm' eser SFX b2 ever èveriez/n'q'l'm' ever SFX b2 evrer èvreriez/n'q'l'm' evrer SFX b2 eter èteriez/n'q'l'm' eter SFX b2 eler èleriez/n'q'l'm' eler SFX b2 ecer èceraient/n'q'l'm't's' ecer SFX b2 emer èmeraient/n'q'l'm't's' emer SFX b2 ener èneraient/n'q'l'm't's' ener SFX b2 eper èperaient/n'q'l'm't's' eper SFX b2 erer èreraient/n'q'l'm't's' erer SFX b2 eser èseraient/n'q'l'm't's' eser SFX b2 ever èveraient/n'q'l'm't's' ever SFX b2 evrer èvreraient/n'q'l'm't's' evrer SFX b2 eter èteraient/n'q'l'm't's' eter SFX b2 eler èleraient/n'q'l'm't's' eler SFX b2 er asse/n'q'j'l't' [^c]er SFX b2 cer çasse/n'q'j'l't' cer SFX b2 er asses/n'q'l'm' [^c]er SFX b2 cer çasses/n'q'l'm' cer SFX b2 er ât/n'q'l'm't's' [^c]er SFX b2 cer çât/n'q'l'm't's' cer SFX b2 er assions/n'q'l't' [^c]er SFX b2 cer çassions/n'q'l't' cer SFX b2 er assiez/n'q'l'm' [^c]er SFX b2 cer çassiez/n'q'l'm' cer SFX b2 er assent/n'q'l'm't's' [^c]er SFX b2 cer çassent/n'q'l'm't's' cer SFX b2 ecer èce/n'l'm' ecer SFX b2 emer ème/n'l'm' emer SFX b2 ener ène/n'l'm' ener SFX b2 eper èpe/n'l'm' eper SFX b2 erer ère/n'l'm' erer SFX b2 eser èse/n'l'm' eser SFX b2 ever ève/n'l'm' ever SFX b2 evrer èvre/n'l'm' evrer SFX b2 eter ète/n'l'm' eter SFX b2 eler èle/n'l'm' eler SFX b2 er ons/n'l' [^c]er SFX b2 cer çons/n'l' cer SFX b2 er ez/n'l'm' er SFX b3 Y 190 SFX b3 er er/m't's' er SFX b3 er ant/m't's' [^c]er SFX b3 cer çant/m't's' cer SFX b3 ecer èce/m's' ecer SFX b3 emer ème/m's' emer SFX b3 ener ène/m's' ener SFX b3 eper èpe/m's' eper SFX b3 erer ère/m's' erer SFX b3 eser èse/m's' eser SFX b3 ever ève/m's' ever SFX b3 evrer èvre/m's' evrer SFX b3 eter ète/m's' eter SFX b3 eler èle/m's' eler SFX b3 ecer èces/t' ecer SFX b3 emer èmes/t' emer SFX b3 ener ènes/t' ener SFX b3 eper èpes/t' eper SFX b3 erer ères/t' erer SFX b3 eser èses/t' eser SFX b3 ever èves/t' ever SFX b3 evrer èvres/t' evrer SFX b3 eter ètes/t' eter SFX b3 eler èles/t' eler SFX b3 er ons [^c]er SFX b3 cer çons cer SFX b3 er ez er SFX b3 ecer ècent/s' ecer SFX b3 emer èment/s' emer SFX b3 ener ènent/s' ener SFX b3 eper èpent/s' eper SFX b3 erer èrent/s' erer SFX b3 eser èsent/s' eser SFX b3 ever èvent/s' ever SFX b3 evrer èvrent/s' evrer SFX b3 eter ètent/s' eter SFX b3 eler èlent/s' eler SFX b3 er ais/m't' [^c]er SFX b3 cer çais/m't' cer SFX b3 er ait/s' [^c]er SFX b3 cer çait/s' cer SFX b3 er ions er SFX b3 er iez er SFX b3 er aient/s' [^c]er SFX b3 cer çaient/s' cer SFX b3 er ai/m' [^c]er SFX b3 cer çai/m' cer SFX b3 er as/t' [^c]er SFX b3 cer ças/t' cer SFX b3 er a/s' [^c]er SFX b3 cer ça/s' cer SFX b3 er âmes [^c]er SFX b3 cer çâmes cer SFX b3 er âtes [^c]er SFX b3 cer çâtes cer SFX b3 er èrent/s' er SFX b3 ecer ècerai/m' ecer SFX b3 emer èmerai/m' emer SFX b3 ener ènerai/m' ener SFX b3 eper èperai/m' eper SFX b3 erer èrerai/m' erer SFX b3 eser èserai/m' eser SFX b3 ever èverai/m' ever SFX b3 evrer èvrerai/m' evrer SFX b3 eter èterai/m' eter SFX b3 eler èlerai/m' eler SFX b3 ecer èceras/t' ecer SFX b3 emer èmeras/t' emer SFX b3 ener èneras/t' ener SFX b3 eper èperas/t' eper SFX b3 erer èreras/t' erer SFX b3 eser èseras/t' eser SFX b3 ever èveras/t' ever SFX b3 evrer èvreras/t' evrer SFX b3 eter èteras/t' eter SFX b3 eler èleras/t' eler SFX b3 ecer ècera/s' ecer SFX b3 emer èmera/s' emer SFX b3 ener ènera/s' ener SFX b3 eper èpera/s' eper SFX b3 erer èrera/s' erer SFX b3 eser èsera/s' eser SFX b3 ever èvera/s' ever SFX b3 evrer èvrera/s' evrer SFX b3 eter ètera/s' eter SFX b3 eler èlera/s' eler SFX b3 ecer ècerons ecer SFX b3 emer èmerons emer SFX b3 ener ènerons ener SFX b3 eper èperons eper SFX b3 erer èrerons erer SFX b3 eser èserons eser SFX b3 ever èverons ever SFX b3 evrer èvrerons evrer SFX b3 eter èterons eter SFX b3 eler èlerons eler SFX b3 ecer ècerez ecer SFX b3 emer èmerez emer SFX b3 ener ènerez ener SFX b3 eper èperez eper SFX b3 erer èrerez erer SFX b3 eser èserez eser SFX b3 ever èverez ever SFX b3 evrer èvrerez evrer SFX b3 eter èterez eter SFX b3 eler èlerez eler SFX b3 ecer èceront/s' ecer SFX b3 emer èmeront/s' emer SFX b3 ener èneront/s' ener SFX b3 eper èperont/s' eper SFX b3 erer èreront/s' erer SFX b3 eser èseront/s' eser SFX b3 ever èveront/s' ever SFX b3 evrer èvreront/s' evrer SFX b3 eter èteront/s' eter SFX b3 eler èleront/s' eler SFX b3 ecer ècerais/m't' ecer SFX b3 emer èmerais/m't' emer SFX b3 ener ènerais/m't' ener SFX b3 eper èperais/m't' eper SFX b3 erer èrerais/m't' erer SFX b3 eser èserais/m't' eser SFX b3 ever èverais/m't' ever SFX b3 evrer èvrerais/m't' evrer SFX b3 eter èterais/m't' eter SFX b3 eler èlerais/m't' eler SFX b3 ecer ècerait/s' ecer SFX b3 emer èmerait/s' emer SFX b3 ener ènerait/s' ener SFX b3 eper èperait/s' eper SFX b3 erer èrerait/s' erer SFX b3 eser èserait/s' eser SFX b3 ever èverait/s' ever SFX b3 evrer èvrerait/s' evrer SFX b3 eter èterait/s' eter SFX b3 eler èlerait/s' eler SFX b3 ecer ècerions ecer SFX b3 emer èmerions emer SFX b3 ener ènerions ener SFX b3 eper èperions eper SFX b3 erer èrerions erer SFX b3 eser èserions eser SFX b3 ever èverions ever SFX b3 evrer èvrerions evrer SFX b3 eter èterions eter SFX b3 eler èlerions eler SFX b3 ecer èceriez ecer SFX b3 emer èmeriez emer SFX b3 ener èneriez ener SFX b3 eper èperiez eper SFX b3 erer èreriez erer SFX b3 eser èseriez eser SFX b3 ever èveriez ever SFX b3 evrer èvreriez evrer SFX b3 eter èteriez eter SFX b3 eler èleriez eler SFX b3 ecer èceraient/s' ecer SFX b3 emer èmeraient/s' emer SFX b3 ener èneraient/s' ener SFX b3 eper èperaient/s' eper SFX b3 erer èreraient/s' erer SFX b3 eser èseraient/s' eser SFX b3 ever èveraient/s' ever SFX b3 evrer èvreraient/s' evrer SFX b3 eter èteraient/s' eter SFX b3 eler èleraient/s' eler SFX b3 er asse/m' [^c]er SFX b3 cer çasse/m' cer SFX b3 er asses/t' [^c]er SFX b3 cer çasses/t' cer SFX b3 er ât/s' [^c]er SFX b3 cer çât/s' cer SFX b3 er assions [^c]er SFX b3 cer çassions cer SFX b3 er assiez [^c]er SFX b3 cer çassiez cer SFX b3 er assent/s' [^c]er SFX b3 cer çassent/s' cer SFX b3 ecer èce/t' ecer SFX b3 emer ème/t' emer SFX b3 ener ène/t' ener SFX b3 eper èpe/t' eper SFX b3 erer ère/t' erer SFX b3 eser èse/t' eser SFX b3 ever ève/t' ever SFX b3 evrer èvre/t' evrer SFX b3 eter ète/t' eter SFX b3 eler èle/t' eler SFX b3 er ons [^c]er SFX b3 cer çons cer SFX b3 er ez er SFX b4 Y 190 SFX b4 er er/n'q'd'l'm't's' er SFX b4 er ant/n'q'l'm't's' [^c]er SFX b4 cer çant/n'q'l'm't's' cer SFX b4 ecer èce/n'q'j'l'm't's' ecer SFX b4 emer ème/n'q'j'l'm't's' emer SFX b4 ener ène/n'q'j'l'm't's' ener SFX b4 eper èpe/n'q'j'l'm't's' eper SFX b4 erer ère/n'q'j'l'm't's' erer SFX b4 eser èse/n'q'j'l'm't's' eser SFX b4 ever ève/n'q'j'l'm't's' ever SFX b4 evrer èvre/n'q'j'l'm't's' evrer SFX b4 eter ète/n'q'j'l'm't's' eter SFX b4 eler èle/n'q'j'l'm't's' eler SFX b4 ecer èces/n'q'l'm't' ecer SFX b4 emer èmes/n'q'l'm't' emer SFX b4 ener ènes/n'q'l'm't' ener SFX b4 eper èpes/n'q'l'm't' eper SFX b4 erer ères/n'q'l'm't' erer SFX b4 eser èses/n'q'l'm't' eser SFX b4 ever èves/n'q'l'm't' ever SFX b4 evrer èvres/n'q'l'm't' evrer SFX b4 eter ètes/n'q'l'm't' eter SFX b4 eler èles/n'q'l'm't' eler SFX b4 er ons/n'q'l't' [^c]er SFX b4 cer çons/n'q'l't' cer SFX b4 er ez/n'q'l'm' er SFX b4 ecer ècent/n'q'l'm't's' ecer SFX b4 emer èment/n'q'l'm't's' emer SFX b4 ener ènent/n'q'l'm't's' ener SFX b4 eper èpent/n'q'l'm't's' eper SFX b4 erer èrent/n'q'l'm't's' erer SFX b4 eser èsent/n'q'l'm't's' eser SFX b4 ever èvent/n'q'l'm't's' ever SFX b4 evrer èvrent/n'q'l'm't's' evrer SFX b4 eter ètent/n'q'l'm't's' eter SFX b4 eler èlent/n'q'l'm't's' eler SFX b4 er ais/n'q'j'l'm't' [^c]er SFX b4 cer çais/n'q'j'l'm't' cer SFX b4 er ait/n'q'l'm't's' [^c]er SFX b4 cer çait/n'q'l'm't's' cer SFX b4 er ions/n'q'l't' er SFX b4 er iez/n'q'l'm' er SFX b4 er aient/n'q'l'm't's' [^c]er SFX b4 cer çaient/n'q'l'm't's' cer SFX b4 er ai/n'q'j'l'm't' [^c]er SFX b4 cer çai/n'q'j'l'm't' cer SFX b4 er as/n'q'l'm't' [^c]er SFX b4 cer ças/n'q'l'm't' cer SFX b4 er a/n'q'l'm't's' [^c]er SFX b4 cer ça/n'q'l'm't's' cer SFX b4 er âmes/n'q'l't' [^c]er SFX b4 cer çâmes/n'q'l't' cer SFX b4 er âtes/n'q'l'm' [^c]er SFX b4 cer çâtes/n'q'l'm' cer SFX b4 er èrent/n'q'l'm't's' er SFX b4 ecer ècerai/n'q'j'l'm't' ecer SFX b4 emer èmerai/n'q'j'l'm't' emer SFX b4 ener ènerai/n'q'j'l'm't' ener SFX b4 eper èperai/n'q'j'l'm't' eper SFX b4 erer èrerai/n'q'j'l'm't' erer SFX b4 eser èserai/n'q'j'l'm't' eser SFX b4 ever èverai/n'q'j'l'm't' ever SFX b4 evrer èvrerai/n'q'j'l'm't' evrer SFX b4 eter èterai/n'q'j'l'm't' eter SFX b4 eler èlerai/n'q'j'l'm't' eler SFX b4 ecer èceras/n'q'l'm't' ecer SFX b4 emer èmeras/n'q'l'm't' emer SFX b4 ener èneras/n'q'l'm't' ener SFX b4 eper èperas/n'q'l'm't' eper SFX b4 erer èreras/n'q'l'm't' erer SFX b4 eser èseras/n'q'l'm't' eser SFX b4 ever èveras/n'q'l'm't' ever SFX b4 evrer èvreras/n'q'l'm't' evrer SFX b4 eter èteras/n'q'l'm't' eter SFX b4 eler èleras/n'q'l'm't' eler SFX b4 ecer ècera/n'q'l'm't's' ecer SFX b4 emer èmera/n'q'l'm't's' emer SFX b4 ener ènera/n'q'l'm't's' ener SFX b4 eper èpera/n'q'l'm't's' eper SFX b4 erer èrera/n'q'l'm't's' erer SFX b4 eser èsera/n'q'l'm't's' eser SFX b4 ever èvera/n'q'l'm't's' ever SFX b4 evrer èvrera/n'q'l'm't's' evrer SFX b4 eter ètera/n'q'l'm't's' eter SFX b4 eler èlera/n'q'l'm't's' eler SFX b4 ecer ècerons/n'q'l't' ecer SFX b4 emer èmerons/n'q'l't' emer SFX b4 ener ènerons/n'q'l't' ener SFX b4 eper èperons/n'q'l't' eper SFX b4 erer èrerons/n'q'l't' erer SFX b4 eser èserons/n'q'l't' eser SFX b4 ever èverons/n'q'l't' ever SFX b4 evrer èvrerons/n'q'l't' evrer SFX b4 eter èterons/n'q'l't' eter SFX b4 eler èlerons/n'q'l't' eler SFX b4 ecer ècerez/n'q'l'm' ecer SFX b4 emer èmerez/n'q'l'm' emer SFX b4 ener ènerez/n'q'l'm' ener SFX b4 eper èperez/n'q'l'm' eper SFX b4 erer èrerez/n'q'l'm' erer SFX b4 eser èserez/n'q'l'm' eser SFX b4 ever èverez/n'q'l'm' ever SFX b4 evrer èvrerez/n'q'l'm' evrer SFX b4 eter èterez/n'q'l'm' eter SFX b4 eler èlerez/n'q'l'm' eler SFX b4 ecer èceront/n'q'l'm't's' ecer SFX b4 emer èmeront/n'q'l'm't's' emer SFX b4 ener èneront/n'q'l'm't's' ener SFX b4 eper èperont/n'q'l'm't's' eper SFX b4 erer èreront/n'q'l'm't's' erer SFX b4 eser èseront/n'q'l'm't's' eser SFX b4 ever èveront/n'q'l'm't's' ever SFX b4 evrer èvreront/n'q'l'm't's' evrer SFX b4 eter èteront/n'q'l'm't's' eter SFX b4 eler èleront/n'q'l'm't's' eler SFX b4 ecer ècerais/n'q'j'l'm't' ecer SFX b4 emer èmerais/n'q'j'l'm't' emer SFX b4 ener ènerais/n'q'j'l'm't' ener SFX b4 eper èperais/n'q'j'l'm't' eper SFX b4 erer èrerais/n'q'j'l'm't' erer SFX b4 eser èserais/n'q'j'l'm't' eser SFX b4 ever èverais/n'q'j'l'm't' ever SFX b4 evrer èvrerais/n'q'j'l'm't' evrer SFX b4 eter èterais/n'q'j'l'm't' eter SFX b4 eler èlerais/n'q'j'l'm't' eler SFX b4 ecer ècerait/n'q'l'm't's' ecer SFX b4 emer èmerait/n'q'l'm't's' emer SFX b4 ener ènerait/n'q'l'm't's' ener SFX b4 eper èperait/n'q'l'm't's' eper SFX b4 erer èrerait/n'q'l'm't's' erer SFX b4 eser èserait/n'q'l'm't's' eser SFX b4 ever èverait/n'q'l'm't's' ever SFX b4 evrer èvrerait/n'q'l'm't's' evrer SFX b4 eter èterait/n'q'l'm't's' eter SFX b4 eler èlerait/n'q'l'm't's' eler SFX b4 ecer ècerions/n'q'l't' ecer SFX b4 emer èmerions/n'q'l't' emer SFX b4 ener ènerions/n'q'l't' ener SFX b4 eper èperions/n'q'l't' eper SFX b4 erer èrerions/n'q'l't' erer SFX b4 eser èserions/n'q'l't' eser SFX b4 ever èverions/n'q'l't' ever SFX b4 evrer èvrerions/n'q'l't' evrer SFX b4 eter èterions/n'q'l't' eter SFX b4 eler èlerions/n'q'l't' eler SFX b4 ecer èceriez/n'q'l'm' ecer SFX b4 emer èmeriez/n'q'l'm' emer SFX b4 ener èneriez/n'q'l'm' ener SFX b4 eper èperiez/n'q'l'm' eper SFX b4 erer èreriez/n'q'l'm' erer SFX b4 eser èseriez/n'q'l'm' eser SFX b4 ever èveriez/n'q'l'm' ever SFX b4 evrer èvreriez/n'q'l'm' evrer SFX b4 eter èteriez/n'q'l'm' eter SFX b4 eler èleriez/n'q'l'm' eler SFX b4 ecer èceraient/n'q'l'm't's' ecer SFX b4 emer èmeraient/n'q'l'm't's' emer SFX b4 ener èneraient/n'q'l'm't's' ener SFX b4 eper èperaient/n'q'l'm't's' eper SFX b4 erer èreraient/n'q'l'm't's' erer SFX b4 eser èseraient/n'q'l'm't's' eser SFX b4 ever èveraient/n'q'l'm't's' ever SFX b4 evrer èvreraient/n'q'l'm't's' evrer SFX b4 eter èteraient/n'q'l'm't's' eter SFX b4 eler èleraient/n'q'l'm't's' eler SFX b4 er asse/n'q'j'l'm't' [^c]er SFX b4 cer çasse/n'q'j'l'm't' cer SFX b4 er asses/n'q'l'm't' [^c]er SFX b4 cer çasses/n'q'l'm't' cer SFX b4 er ât/n'q'l'm't's' [^c]er SFX b4 cer çât/n'q'l'm't's' cer SFX b4 er assions/n'q'l't' [^c]er SFX b4 cer çassions/n'q'l't' cer SFX b4 er assiez/n'q'l'm' [^c]er SFX b4 cer çassiez/n'q'l'm' cer SFX b4 er assent/n'q'l'm't's' [^c]er SFX b4 cer çassent/n'q'l'm't's' cer SFX b4 ecer èce/n'l'm't' ecer SFX b4 emer ème/n'l'm't' emer SFX b4 ener ène/n'l'm't' ener SFX b4 eper èpe/n'l'm't' eper SFX b4 erer ère/n'l'm't' erer SFX b4 eser èse/n'l'm't' eser SFX b4 ever ève/n'l'm't' ever SFX b4 evrer èvre/n'l'm't' evrer SFX b4 eter ète/n'l'm't' eter SFX b4 eler èle/n'l'm't' eler SFX b4 er ons/n'l' [^c]er SFX b4 cer çons/n'l' cer SFX b4 er ez/n'l'm' er SFX b5 Y 190 SFX b5 er er/n'q'd'm't's' er SFX b5 er ant/n'q'm't's' [^c]er SFX b5 cer çant/n'q'm't's' cer SFX b5 ecer èce/n'q'j'm't's' ecer SFX b5 emer ème/n'q'j'm't's' emer SFX b5 ener ène/n'q'j'm't's' ener SFX b5 eper èpe/n'q'j'm't's' eper SFX b5 erer ère/n'q'j'm't's' erer SFX b5 eser èse/n'q'j'm't's' eser SFX b5 ever ève/n'q'j'm't's' ever SFX b5 evrer èvre/n'q'j'm't's' evrer SFX b5 eter ète/n'q'j'm't's' eter SFX b5 eler èle/n'q'j'm't's' eler SFX b5 ecer èces/n'm't' ecer SFX b5 emer èmes/n'm't' emer SFX b5 ener ènes/n'm't' ener SFX b5 eper èpes/n'm't' eper SFX b5 erer ères/n'm't' erer SFX b5 eser èses/n'm't' eser SFX b5 ever èves/n'm't' ever SFX b5 evrer èvres/n'm't' evrer SFX b5 eter ètes/n'm't' eter SFX b5 eler èles/n'm't' eler SFX b5 er ons/n't' [^c]er SFX b5 cer çons/n't' cer SFX b5 er ez/n'm' er SFX b5 ecer ècent/n'q'm't's' ecer SFX b5 emer èment/n'q'm't's' emer SFX b5 ener ènent/n'q'm't's' ener SFX b5 eper èpent/n'q'm't's' eper SFX b5 erer èrent/n'q'm't's' erer SFX b5 eser èsent/n'q'm't's' eser SFX b5 ever èvent/n'q'm't's' ever SFX b5 evrer èvrent/n'q'm't's' evrer SFX b5 eter ètent/n'q'm't's' eter SFX b5 eler èlent/n'q'm't's' eler SFX b5 er ais/n'j'm't' [^c]er SFX b5 cer çais/n'j'm't' cer SFX b5 er ait/n'q'm't's' [^c]er SFX b5 cer çait/n'q'm't's' cer SFX b5 er ions/n't' er SFX b5 er iez/n'm' er SFX b5 er aient/n'q'm't's' [^c]er SFX b5 cer çaient/n'q'm't's' cer SFX b5 er ai/n'j'm't' [^c]er SFX b5 cer çai/n'j'm't' cer SFX b5 er as/n'm't' [^c]er SFX b5 cer ças/n'm't' cer SFX b5 er a/n'q'm't's' [^c]er SFX b5 cer ça/n'q'm't's' cer SFX b5 er âmes/n't' [^c]er SFX b5 cer çâmes/n't' cer SFX b5 er âtes/n'm' [^c]er SFX b5 cer çâtes/n'm' cer SFX b5 er èrent/n'q'm't's' er SFX b5 ecer ècerai/n'j'm't' ecer SFX b5 emer èmerai/n'j'm't' emer SFX b5 ener ènerai/n'j'm't' ener SFX b5 eper èperai/n'j'm't' eper SFX b5 erer èrerai/n'j'm't' erer SFX b5 eser èserai/n'j'm't' eser SFX b5 ever èverai/n'j'm't' ever SFX b5 evrer èvrerai/n'j'm't' evrer SFX b5 eter èterai/n'j'm't' eter SFX b5 eler èlerai/n'j'm't' eler SFX b5 ecer èceras/n'm't' ecer SFX b5 emer èmeras/n'm't' emer SFX b5 ener èneras/n'm't' ener SFX b5 eper èperas/n'm't' eper SFX b5 erer èreras/n'm't' erer SFX b5 eser èseras/n'm't' eser SFX b5 ever èveras/n'm't' ever SFX b5 evrer èvreras/n'm't' evrer SFX b5 eter èteras/n'm't' eter SFX b5 eler èleras/n'm't' eler SFX b5 ecer ècera/n'q'm't's' ecer SFX b5 emer èmera/n'q'm't's' emer SFX b5 ener ènera/n'q'm't's' ener SFX b5 eper èpera/n'q'm't's' eper SFX b5 erer èrera/n'q'm't's' erer SFX b5 eser èsera/n'q'm't's' eser SFX b5 ever èvera/n'q'm't's' ever SFX b5 evrer èvrera/n'q'm't's' evrer SFX b5 eter ètera/n'q'm't's' eter SFX b5 eler èlera/n'q'm't's' eler SFX b5 ecer ècerons/n't' ecer SFX b5 emer èmerons/n't' emer SFX b5 ener ènerons/n't' ener SFX b5 eper èperons/n't' eper SFX b5 erer èrerons/n't' erer SFX b5 eser èserons/n't' eser SFX b5 ever èverons/n't' ever SFX b5 evrer èvrerons/n't' evrer SFX b5 eter èterons/n't' eter SFX b5 eler èlerons/n't' eler SFX b5 ecer ècerez/n'm' ecer SFX b5 emer èmerez/n'm' emer SFX b5 ener ènerez/n'm' ener SFX b5 eper èperez/n'm' eper SFX b5 erer èrerez/n'm' erer SFX b5 eser èserez/n'm' eser SFX b5 ever èverez/n'm' ever SFX b5 evrer èvrerez/n'm' evrer SFX b5 eter èterez/n'm' eter SFX b5 eler èlerez/n'm' eler SFX b5 ecer èceront/n'q'm't's' ecer SFX b5 emer èmeront/n'q'm't's' emer SFX b5 ener èneront/n'q'm't's' ener SFX b5 eper èperont/n'q'm't's' eper SFX b5 erer èreront/n'q'm't's' erer SFX b5 eser èseront/n'q'm't's' eser SFX b5 ever èveront/n'q'm't's' ever SFX b5 evrer èvreront/n'q'm't's' evrer SFX b5 eter èteront/n'q'm't's' eter SFX b5 eler èleront/n'q'm't's' eler SFX b5 ecer ècerais/n'j'm't' ecer SFX b5 emer èmerais/n'j'm't' emer SFX b5 ener ènerais/n'j'm't' ener SFX b5 eper èperais/n'j'm't' eper SFX b5 erer èrerais/n'j'm't' erer SFX b5 eser èserais/n'j'm't' eser SFX b5 ever èverais/n'j'm't' ever SFX b5 evrer èvrerais/n'j'm't' evrer SFX b5 eter èterais/n'j'm't' eter SFX b5 eler èlerais/n'j'm't' eler SFX b5 ecer ècerait/n'q'm't's' ecer SFX b5 emer èmerait/n'q'm't's' emer SFX b5 ener ènerait/n'q'm't's' ener SFX b5 eper èperait/n'q'm't's' eper SFX b5 erer èrerait/n'q'm't's' erer SFX b5 eser èserait/n'q'm't's' eser SFX b5 ever èverait/n'q'm't's' ever SFX b5 evrer èvrerait/n'q'm't's' evrer SFX b5 eter èterait/n'q'm't's' eter SFX b5 eler èlerait/n'q'm't's' eler SFX b5 ecer ècerions/n't' ecer SFX b5 emer èmerions/n't' emer SFX b5 ener ènerions/n't' ener SFX b5 eper èperions/n't' eper SFX b5 erer èrerions/n't' erer SFX b5 eser èserions/n't' eser SFX b5 ever èverions/n't' ever SFX b5 evrer èvrerions/n't' evrer SFX b5 eter èterions/n't' eter SFX b5 eler èlerions/n't' eler SFX b5 ecer èceriez/n'm' ecer SFX b5 emer èmeriez/n'm' emer SFX b5 ener èneriez/n'm' ener SFX b5 eper èperiez/n'm' eper SFX b5 erer èreriez/n'm' erer SFX b5 eser èseriez/n'm' eser SFX b5 ever èveriez/n'm' ever SFX b5 evrer èvreriez/n'm' evrer SFX b5 eter èteriez/n'm' eter SFX b5 eler èleriez/n'm' eler SFX b5 ecer èceraient/n'q'm't's' ecer SFX b5 emer èmeraient/n'q'm't's' emer SFX b5 ener èneraient/n'q'm't's' ener SFX b5 eper èperaient/n'q'm't's' eper SFX b5 erer èreraient/n'q'm't's' erer SFX b5 eser èseraient/n'q'm't's' eser SFX b5 ever èveraient/n'q'm't's' ever SFX b5 evrer èvreraient/n'q'm't's' evrer SFX b5 eter èteraient/n'q'm't's' eter SFX b5 eler èleraient/n'q'm't's' eler SFX b5 er asse/n'j'm't' [^c]er SFX b5 cer çasse/n'j'm't' cer SFX b5 er asses/n'm't' [^c]er SFX b5 cer çasses/n'm't' cer SFX b5 er ât/n'q'm't's' [^c]er SFX b5 cer çât/n'q'm't's' cer SFX b5 er assions/n't' [^c]er SFX b5 cer çassions/n't' cer SFX b5 er assiez/n'm' [^c]er SFX b5 cer çassiez/n'm' cer SFX b5 er assent/n'q'm't's' [^c]er SFX b5 cer çassent/n'q'm't's' cer SFX b5 ecer èce/n'm' ecer SFX b5 emer ème/n'm' emer SFX b5 ener ène/n'm' ener SFX b5 eper èpe/n'm' eper SFX b5 erer ère/n'm' erer SFX b5 eser èse/n'm' eser SFX b5 ever ève/n'm' ever SFX b5 evrer èvre/n'm' evrer SFX b5 eter ète/n'm' eter SFX b5 eler èle/n'm' eler SFX b5 er ons/n' [^c]er SFX b5 cer çons/n' cer SFX b5 er ez/n' er SFX c0 N 151 SFX c0 er ant [^cg]er SFX c0 écer éçant écer SFX c0 éger égeant éger SFX c0 ébrer èbre ébrer SFX c0 écer èce écer SFX c0 écher èche écher SFX c0 écrer ècre écrer SFX c0 éder ède éder SFX c0 éger ège éger SFX c0 égler ègle égler SFX c0 égner ègne égner SFX c0 égrer ègre égrer SFX c0 éguer ègue éguer SFX c0 éler èle éler SFX c0 émer ème émer SFX c0 éner ène éner SFX c0 éper èpe éper SFX c0 équer èque équer SFX c0 érer ère érer SFX c0 éser èse éser SFX c0 éter ète éter SFX c0 étrer ètre étrer SFX c0 évrer èvre évrer SFX c0 éyer èye éyer SFX c0 ébrer èbres ébrer SFX c0 écer èces écer SFX c0 écher èches écher SFX c0 écrer ècres écrer SFX c0 éder èdes éder SFX c0 éger èges éger SFX c0 égler ègles égler SFX c0 égner ègnes égner SFX c0 égrer ègres égrer SFX c0 éguer ègues éguer SFX c0 éler èles éler SFX c0 émer èmes émer SFX c0 éner ènes éner SFX c0 éper èpes éper SFX c0 équer èques équer SFX c0 érer ères érer SFX c0 éser èses éser SFX c0 éter ètes éter SFX c0 étrer ètres étrer SFX c0 évrer èvres évrer SFX c0 éyer èyes éyer SFX c0 er ons [^cg]er SFX c0 écer éçons écer SFX c0 éger égeons éger SFX c0 er ez er SFX c0 ébrer èbrent ébrer SFX c0 écer ècent écer SFX c0 écher èchent écher SFX c0 écrer ècrent écrer SFX c0 éder èdent éder SFX c0 éger ègent éger SFX c0 égler èglent égler SFX c0 égner ègnent égner SFX c0 égrer ègrent égrer SFX c0 éguer èguent éguer SFX c0 éler èlent éler SFX c0 émer èment émer SFX c0 éner ènent éner SFX c0 éper èpent éper SFX c0 équer èquent équer SFX c0 érer èrent érer SFX c0 éser èsent éser SFX c0 éter ètent éter SFX c0 étrer ètrent étrer SFX c0 évrer èvrent évrer SFX c0 éyer èyent éyer SFX c0 er ais [^cg]er SFX c0 écer éçais écer SFX c0 éger égeais éger SFX c0 er ait [^cg]er SFX c0 écer éçait écer SFX c0 éger égeait éger SFX c0 er ions er SFX c0 er iez er SFX c0 er aient [^cg]er SFX c0 écer éçaient écer SFX c0 éger égeaient éger SFX c0 er ai [^cg]er SFX c0 écer éçai écer SFX c0 éger égeai éger SFX c0 er as [^cg]er SFX c0 écer éças écer SFX c0 éger égeas éger SFX c0 er a [^cg]er SFX c0 écer éça écer SFX c0 éger égea éger SFX c0 er âmes [^cg]er SFX c0 écer éçâmes écer SFX c0 éger égeâmes éger SFX c0 er âtes [^cg]er SFX c0 écer éçâtes écer SFX c0 éger égeâtes éger SFX c0 er èrent er SFX c0 er erai er SFX c0 er eras er SFX c0 er era er SFX c0 er erons er SFX c0 er erez er SFX c0 er eront er SFX c0 er erais er SFX c0 er erait er SFX c0 er erions er SFX c0 er eriez er SFX c0 er eraient er SFX c0 er asse [^cg]er SFX c0 écer éçasse écer SFX c0 éger égeasse éger SFX c0 er asses [^cg]er SFX c0 écer éçasses écer SFX c0 éger égeasses éger SFX c0 er ât [^cg]er SFX c0 écer éçât écer SFX c0 éger égeât éger SFX c0 er assions [^cg]er SFX c0 écer éçassions écer SFX c0 éger égeassions éger SFX c0 er assiez [^cg]er SFX c0 écer éçassiez écer SFX c0 éger égeassiez éger SFX c0 er assent [^cg]er SFX c0 écer éçassent écer SFX c0 éger égeassent éger SFX c0 ébrer èbre ébrer SFX c0 écer èce écer SFX c0 écher èche écher SFX c0 écrer ècre écrer SFX c0 éder ède éder SFX c0 éger ège éger SFX c0 égler ègle égler SFX c0 égner ègne égner SFX c0 égrer ègre égrer SFX c0 éguer ègue éguer SFX c0 éler èle éler SFX c0 émer ème émer SFX c0 éner ène éner SFX c0 éper èpe éper SFX c0 équer èque équer SFX c0 érer ère érer SFX c0 éser èse éser SFX c0 éter ète éter SFX c0 étrer ètre étrer SFX c0 évrer èvre évrer SFX c0 éyer èye éyer SFX c0 er ons [^cg]er SFX c0 écer éçons écer SFX c0 éger égeons éger SFX c0 er ez er SFX c1 Y 152 SFX c1 r r/n'q'd' er SFX c1 er ant/n'q' [^cg]er SFX c1 écer éçant/n'q' écer SFX c1 éger égeant/n'q' éger SFX c1 ébrer èbre/n'q'j' ébrer SFX c1 écer èce/n'q'j' écer SFX c1 écher èche/n'q'j' écher SFX c1 écrer ècre/n'q'j' écrer SFX c1 éder ède/n'q'j' éder SFX c1 éger ège/n'q'j' éger SFX c1 égler ègle/n'q'j' égler SFX c1 égner ègne/n'q'j' égner SFX c1 égrer ègre/n'q'j' égrer SFX c1 éguer ègue/n'q'j' éguer SFX c1 éler èle/n'q'j' éler SFX c1 émer ème/n'q'j' émer SFX c1 éner ène/n'q'j' éner SFX c1 éper èpe/n'q'j' éper SFX c1 équer èque/n'q'j' équer SFX c1 érer ère/n'q'j' érer SFX c1 éser èse/n'q'j' éser SFX c1 éter ète/n'q'j' éter SFX c1 étrer ètre/n'q'j' étrer SFX c1 évrer èvre/n'q'j' évrer SFX c1 éyer èye/n'q'j' éyer SFX c1 ébrer èbres/n' ébrer SFX c1 écer èces/n' écer SFX c1 écher èches/n' écher SFX c1 écrer ècres/n' écrer SFX c1 éder èdes/n' éder SFX c1 éger èges/n' éger SFX c1 égler ègles/n' égler SFX c1 égner ègnes/n' égner SFX c1 égrer ègres/n' égrer SFX c1 éguer ègues/n' éguer SFX c1 éler èles/n' éler SFX c1 émer èmes/n' émer SFX c1 éner ènes/n' éner SFX c1 éper èpes/n' éper SFX c1 équer èques/n' équer SFX c1 érer ères/n' érer SFX c1 éser èses/n' éser SFX c1 éter ètes/n' éter SFX c1 étrer ètres/n' étrer SFX c1 évrer èvres/n' évrer SFX c1 éyer èyes/n' éyer SFX c1 er ons/n' [^cg]er SFX c1 écer éçons/n' écer SFX c1 éger égeons/n' éger SFX c1 er ez/n' er SFX c1 ébrer èbrent/n'q' ébrer SFX c1 écer ècent/n'q' écer SFX c1 écher èchent/n'q' écher SFX c1 écrer ècrent/n'q' écrer SFX c1 éder èdent/n'q' éder SFX c1 éger ègent/n'q' éger SFX c1 égler èglent/n'q' égler SFX c1 égner ègnent/n'q' égner SFX c1 égrer ègrent/n'q' égrer SFX c1 éguer èguent/n'q' éguer SFX c1 éler èlent/n'q' éler SFX c1 émer èment/n'q' émer SFX c1 éner ènent/n'q' éner SFX c1 éper èpent/n'q' éper SFX c1 équer èquent/n'q' équer SFX c1 érer èrent/n'q' érer SFX c1 éser èsent/n'q' éser SFX c1 éter ètent/n'q' éter SFX c1 étrer ètrent/n'q' étrer SFX c1 évrer èvrent/n'q' évrer SFX c1 éyer èyent/n'q' éyer SFX c1 er ais/n'j' [^cg]er SFX c1 écer éçais/n'j' écer SFX c1 éger égeais/n'j' éger SFX c1 er ait/n'q' [^cg]er SFX c1 écer éçait/n'q' écer SFX c1 éger égeait/n'q' éger SFX c1 er ions/n' er SFX c1 er iez/n' er SFX c1 er aient/n'q' [^cg]er SFX c1 écer éçaient/n'q' écer SFX c1 éger égeaient/n'q' éger SFX c1 er ai/n'j' [^cg]er SFX c1 écer éçai/n'j' écer SFX c1 éger égeai/n'j' éger SFX c1 er as/n' [^cg]er SFX c1 écer éças/n' écer SFX c1 éger égeas/n' éger SFX c1 er a/n'q' [^cg]er SFX c1 écer éça/n'q' écer SFX c1 éger égea/n'q' éger SFX c1 er âmes/n' [^cg]er SFX c1 écer éçâmes/n' écer SFX c1 éger égeâmes/n' éger SFX c1 er âtes/n' [^cg]er SFX c1 écer éçâtes/n' écer SFX c1 éger égeâtes/n' éger SFX c1 er èrent/n'q' er SFX c1 er erai/n'j' er SFX c1 er eras/n' er SFX c1 er era/n'q' er SFX c1 er erons/n' er SFX c1 er erez/n' er SFX c1 er eront/n'q' er SFX c1 er erais/n'j' er SFX c1 er erait/n'q' er SFX c1 er erions/n' er SFX c1 er eriez/n' er SFX c1 er eraient/n'q' er SFX c1 er asse/n'j' [^cg]er SFX c1 écer éçasse/n'j' écer SFX c1 éger égeasse/n'j' éger SFX c1 er asses/n' [^cg]er SFX c1 écer éçasses/n' écer SFX c1 éger égeasses/n' éger SFX c1 er ât/n'q' [^cg]er SFX c1 écer éçât/n'q' écer SFX c1 éger égeât/n'q' éger SFX c1 er assions/n' [^cg]er SFX c1 écer éçassions/n' écer SFX c1 éger égeassions/n' éger SFX c1 er assiez/n' [^cg]er SFX c1 écer éçassiez/n' écer SFX c1 éger égeassiez/n' éger SFX c1 er assent/n'q' [^cg]er SFX c1 écer éçassent/n'q' écer SFX c1 éger égeassent/n'q' éger SFX c1 ébrer èbre/n' ébrer SFX c1 écer èce/n' écer SFX c1 écher èche/n' écher SFX c1 écrer ècre/n' écrer SFX c1 éder ède/n' éder SFX c1 éger ège/n' éger SFX c1 égler ègle/n' égler SFX c1 égner ègne/n' égner SFX c1 égrer ègre/n' égrer SFX c1 éguer ègue/n' éguer SFX c1 éler èle/n' éler SFX c1 émer ème/n' émer SFX c1 éner ène/n' éner SFX c1 éper èpe/n' éper SFX c1 équer èque/n' équer SFX c1 érer ère/n' érer SFX c1 éser èse/n' éser SFX c1 éter ète/n' éter SFX c1 étrer ètre/n' étrer SFX c1 évrer èvre/n' évrer SFX c1 éyer èye/n' éyer SFX c1 er ons/n' [^cg]er SFX c1 écer éçons/n' écer SFX c1 éger égeons/n' éger SFX c1 er ez/n' er SFX c2 Y 152 SFX c2 er er/n'q'd'l'm't's' er SFX c2 er ant/n'q'l'm't's' [^cg]er SFX c2 écer éçant/n'q'l'm't's' écer SFX c2 éger égeant/n'q'l'm't's' éger SFX c2 ébrer èbre/n'q'j'l'm't's' ébrer SFX c2 écer èce/n'q'j'l'm't's' écer SFX c2 écher èche/n'q'j'l'm't's' écher SFX c2 écrer ècre/n'q'j'l'm't's' écrer SFX c2 éder ède/n'q'j'l'm't's' éder SFX c2 éger ège/n'q'j'l'm't's' éger SFX c2 égler ègle/n'q'j'l'm't's' égler SFX c2 égner ègne/n'q'j'l'm't's' égner SFX c2 égrer ègre/n'q'j'l'm't's' égrer SFX c2 éguer ègue/n'q'j'l'm't's' éguer SFX c2 éler èle/n'q'j'l'm't's' éler SFX c2 émer ème/n'q'j'l'm't's' émer SFX c2 éner ène/n'q'j'l'm't's' éner SFX c2 éper èpe/n'q'j'l'm't's' éper SFX c2 équer èque/n'q'j'l'm't's' équer SFX c2 érer ère/n'q'j'l'm't's' érer SFX c2 éser èse/n'q'j'l'm't's' éser SFX c2 éter ète/n'q'j'l'm't's' éter SFX c2 étrer ètre/n'q'j'l'm't's' étrer SFX c2 évrer èvre/n'q'j'l'm't's' évrer SFX c2 éyer èye/n'q'j'l'm't's' éyer SFX c2 ébrer èbres/n'q'l'm' ébrer SFX c2 écer èces/n'q'l'm' écer SFX c2 écher èches/n'q'l'm' écher SFX c2 écrer ècres/n'q'l'm' écrer SFX c2 éder èdes/n'q'l'm' éder SFX c2 éger èges/n'q'l'm' éger SFX c2 égler ègles/n'q'l'm' égler SFX c2 égner ègnes/n'q'l'm' égner SFX c2 égrer ègres/n'q'l'm' égrer SFX c2 éguer ègues/n'q'l'm' éguer SFX c2 éler èles/n'q'l'm' éler SFX c2 émer èmes/n'q'l'm' émer SFX c2 éner ènes/n'q'l'm' éner SFX c2 éper èpes/n'q'l'm' éper SFX c2 équer èques/n'q'l'm' équer SFX c2 érer ères/n'q'l'm' érer SFX c2 éser èses/n'q'l'm' éser SFX c2 éter ètes/n'q'l'm' éter SFX c2 étrer ètres/n'q'l'm' étrer SFX c2 évrer èvres/n'q'l'm' évrer SFX c2 éyer èyes/n'q'l'm' éyer SFX c2 er ons/n'q'l't' [^cg]er SFX c2 écer éçons/n'q'l't' écer SFX c2 éger égeons/n'q'l't' éger SFX c2 er ez/n'q'l'm' er SFX c2 ébrer èbrent/n'q'l'm't's' ébrer SFX c2 écer ècent/n'q'l'm't's' écer SFX c2 écher èchent/n'q'l'm't's' écher SFX c2 écrer ècrent/n'q'l'm't's' écrer SFX c2 éder èdent/n'q'l'm't's' éder SFX c2 éger ègent/n'q'l'm't's' éger SFX c2 égler èglent/n'q'l'm't's' égler SFX c2 égner ègnent/n'q'l'm't's' égner SFX c2 égrer ègrent/n'q'l'm't's' égrer SFX c2 éguer èguent/n'q'l'm't's' éguer SFX c2 éler èlent/n'q'l'm't's' éler SFX c2 émer èment/n'q'l'm't's' émer SFX c2 éner ènent/n'q'l'm't's' éner SFX c2 éper èpent/n'q'l'm't's' éper SFX c2 équer èquent/n'q'l'm't's' équer SFX c2 érer èrent/n'q'l'm't's' érer SFX c2 éser èsent/n'q'l'm't's' éser SFX c2 éter ètent/n'q'l'm't's' éter SFX c2 étrer ètrent/n'q'l'm't's' étrer SFX c2 évrer èvrent/n'q'l'm't's' évrer SFX c2 éyer èyent/n'q'l'm't's' éyer SFX c2 er ais/n'q'j'l'm't' [^cg]er SFX c2 écer éçais/n'q'j'l'm't' écer SFX c2 éger égeais/n'q'j'l'm't' éger SFX c2 er ait/n'q'l'm't's' [^cg]er SFX c2 écer éçait/n'q'l'm't's' écer SFX c2 éger égeait/n'q'l'm't's' éger SFX c2 er ions/n'q'l't' er SFX c2 er iez/n'q'l'm' er SFX c2 er aient/n'q'l'm't's' [^cg]er SFX c2 écer éçaient/n'q'l'm't's' écer SFX c2 éger égeaient/n'q'l'm't's' éger SFX c2 er ai/n'q'j'l't' [^cg]er SFX c2 écer éçai/n'q'j'l't' écer SFX c2 éger égeai/n'q'j'l't' éger SFX c2 er as/n'q'l'm' [^cg]er SFX c2 écer éças/n'q'l'm' écer SFX c2 éger égeas/n'q'l'm' éger SFX c2 er a/n'q'l'm't's' [^cg]er SFX c2 écer éça/n'q'l'm't's' écer SFX c2 éger égea/n'q'l'm't's' éger SFX c2 er âmes/n'q'l't' [^cg]er SFX c2 écer éçâmes/n'q'l't' écer SFX c2 éger égeâmes/n'q'l't' éger SFX c2 er âtes/n'q'l'm' [^cg]er SFX c2 écer éçâtes/n'q'l'm' écer SFX c2 éger égeâtes/n'q'l'm' éger SFX c2 er èrent/n'q'l'm't's' er SFX c2 er erai/n'q'j'l't' er SFX c2 er eras/n'q'l'm' er SFX c2 er era/n'q'l'm't's' er SFX c2 er erons/n'q'l't' er SFX c2 er erez/n'q'l'm' er SFX c2 er eront/n'q'l'm't's' er SFX c2 er erais/n'q'j'l'm't' er SFX c2 er erait/n'q'l'm't's' er SFX c2 er erions/n'q'l't' er SFX c2 er eriez/n'q'l'm' er SFX c2 er eraient/n'q'l'm't's' er SFX c2 er asse/n'q'j'l't' [^cg]er SFX c2 écer éçasse/n'q'j'l't' écer SFX c2 éger égeasse/n'q'j'l't' éger SFX c2 er asses/n'q'l'm' [^cg]er SFX c2 écer éçasses/n'q'l'm' écer SFX c2 éger égeasses/n'q'l'm' éger SFX c2 er ât/n'q'l'm't's' [^cg]er SFX c2 écer éçât/n'q'l'm't's' écer SFX c2 éger égeât/n'q'l'm't's' éger SFX c2 er assions/n'q'l't' [^cg]er SFX c2 écer éçassions/n'q'l't' écer SFX c2 éger égeassions/n'q'l't' éger SFX c2 er assiez/n'q'l'm' [^cg]er SFX c2 écer éçassiez/n'q'l'm' écer SFX c2 éger égeassiez/n'q'l'm' éger SFX c2 er assent/n'q'l'm't's' [^cg]er SFX c2 écer éçassent/n'q'l'm't's' écer SFX c2 éger égeassent/n'q'l'm't's' éger SFX c2 ébrer èbre/n'l'm' ébrer SFX c2 écer èce/n'l'm' écer SFX c2 écher èche/n'l'm' écher SFX c2 écrer ècre/n'l'm' écrer SFX c2 éder ède/n'l'm' éder SFX c2 éger ège/n'l'm' éger SFX c2 égler ègle/n'l'm' égler SFX c2 égner ègne/n'l'm' égner SFX c2 égrer ègre/n'l'm' égrer SFX c2 éguer ègue/n'l'm' éguer SFX c2 éler èle/n'l'm' éler SFX c2 émer ème/n'l'm' émer SFX c2 éner ène/n'l'm' éner SFX c2 éper èpe/n'l'm' éper SFX c2 équer èque/n'l'm' équer SFX c2 érer ère/n'l'm' érer SFX c2 éser èse/n'l'm' éser SFX c2 éter ète/n'l'm' éter SFX c2 étrer ètre/n'l'm' étrer SFX c2 évrer èvre/n'l'm' évrer SFX c2 éyer èye/n'l'm' éyer SFX c2 er ons/n'l' [^cg]er SFX c2 écer éçons/n'l' écer SFX c2 éger égeons/n'l' éger SFX c2 er ez/n'l'm' er SFX c3 Y 152 SFX c3 er er/m't's' er SFX c3 er ant/m't's' [^cg]er SFX c3 écer éçant/m't's' écer SFX c3 éger égeant/m't's' éger SFX c3 ébrer èbre/m's' ébrer SFX c3 écer èce/m's' écer SFX c3 écher èche/m's' écher SFX c3 écrer ècre/m's' écrer SFX c3 éder ède/m's' éder SFX c3 éger ège/m's' éger SFX c3 égler ègle/m's' égler SFX c3 égner ègne/m's' égner SFX c3 égrer ègre/m's' égrer SFX c3 éguer ègue/m's' éguer SFX c3 éler èle/m's' éler SFX c3 émer ème/m's' émer SFX c3 éner ène/m's' éner SFX c3 éper èpe/m's' éper SFX c3 équer èque/m's' équer SFX c3 érer ère/m's' érer SFX c3 éser èse/m's' éser SFX c3 éter ète/m's' éter SFX c3 étrer ètre/m's' étrer SFX c3 évrer èvre/m's' évrer SFX c3 éyer èye/m's' éyer SFX c3 ébrer èbres/t' ébrer SFX c3 écer èces/t' écer SFX c3 écher èches/t' écher SFX c3 écrer ècres/t' écrer SFX c3 éder èdes/t' éder SFX c3 éger èges/t' éger SFX c3 égler ègles/t' égler SFX c3 égner ègnes/t' égner SFX c3 égrer ègres/t' égrer SFX c3 éguer ègues/t' éguer SFX c3 éler èles/t' éler SFX c3 émer èmes/t' émer SFX c3 éner ènes/t' éner SFX c3 éper èpes/t' éper SFX c3 équer èques/t' équer SFX c3 érer ères/t' érer SFX c3 éser èses/t' éser SFX c3 éter ètes/t' éter SFX c3 étrer ètres/t' étrer SFX c3 évrer èvres/t' évrer SFX c3 éyer èyes/t' éyer SFX c3 er ons [^cg]er SFX c3 écer éçons écer SFX c3 éger égeons éger SFX c3 er ez er SFX c3 ébrer èbrent/s' ébrer SFX c3 écer ècent/s' écer SFX c3 écher èchent/s' écher SFX c3 écrer ècrent/s' écrer SFX c3 éder èdent/s' éder SFX c3 éger ègent/s' éger SFX c3 égler èglent/s' égler SFX c3 égner ègnent/s' égner SFX c3 égrer ègrent/s' égrer SFX c3 éguer èguent/s' éguer SFX c3 éler èlent/s' éler SFX c3 émer èment/s' émer SFX c3 éner ènent/s' éner SFX c3 éper èpent/s' éper SFX c3 équer èquent/s' équer SFX c3 érer èrent/s' érer SFX c3 éser èsent/s' éser SFX c3 éter ètent/s' éter SFX c3 étrer ètrent/s' étrer SFX c3 évrer èvrent/s' évrer SFX c3 éyer èyent/s' éyer SFX c3 er ais/m't' [^cg]er SFX c3 écer éçais/m't' écer SFX c3 éger égeais/m't' éger SFX c3 er ait/s' [^cg]er SFX c3 écer éçait/s' écer SFX c3 éger égeait/s' éger SFX c3 er ions er SFX c3 er iez er SFX c3 er aient/s' [^cg]er SFX c3 écer éçaient/s' écer SFX c3 éger égeaient/s' éger SFX c3 er ai/m' [^cg]er SFX c3 écer éçai/m' écer SFX c3 éger égeai/m' éger SFX c3 er as/t' [^cg]er SFX c3 écer éças/t' écer SFX c3 éger égeas/t' éger SFX c3 er a/s' [^cg]er SFX c3 écer éça/s' écer SFX c3 éger égea/s' éger SFX c3 er âmes [^cg]er SFX c3 écer éçâmes écer SFX c3 éger égeâmes éger SFX c3 er âtes [^cg]er SFX c3 écer éçâtes écer SFX c3 éger égeâtes éger SFX c3 er èrent/s' er SFX c3 er erai/m' er SFX c3 er eras/t' er SFX c3 er era/s' er SFX c3 er erons er SFX c3 er erez er SFX c3 er eront/s' er SFX c3 er erais/m't' er SFX c3 er erait/s' er SFX c3 er erions er SFX c3 er eriez er SFX c3 er eraient/s' er SFX c3 er asse/m' [^cg]er SFX c3 écer éçasse/m' écer SFX c3 éger égeasse/m' éger SFX c3 er asses/t' [^cg]er SFX c3 écer éçasses/t' écer SFX c3 éger égeasses/t' éger SFX c3 er ât/s' [^cg]er SFX c3 écer éçât/s' écer SFX c3 éger égeât/s' éger SFX c3 er assions [^cg]er SFX c3 écer éçassions écer SFX c3 éger égeassions éger SFX c3 er assiez [^cg]er SFX c3 écer éçassiez écer SFX c3 éger égeassiez éger SFX c3 er assent/s' [^cg]er SFX c3 écer éçassent/s' écer SFX c3 éger égeassent/s' éger SFX c3 ébrer èbre/t' ébrer SFX c3 écer èce/t' écer SFX c3 écher èche/t' écher SFX c3 écrer ècre/t' écrer SFX c3 éder ède/t' éder SFX c3 éger ège/t' éger SFX c3 égler ègle/t' égler SFX c3 égner ègne/t' égner SFX c3 égrer ègre/t' égrer SFX c3 éguer ègue/t' éguer SFX c3 éler èle/t' éler SFX c3 émer ème/t' émer SFX c3 éner ène/t' éner SFX c3 éper èpe/t' éper SFX c3 équer èque/t' équer SFX c3 érer ère/t' érer SFX c3 éser èse/t' éser SFX c3 éter ète/t' éter SFX c3 étrer ètre/t' étrer SFX c3 évrer èvre/t' évrer SFX c3 éyer èye/t' éyer SFX c3 er ons [^cg]er SFX c3 écer éçons écer SFX c3 éger égeons éger SFX c3 er ez er SFX c4 Y 152 SFX c4 er er/n'q'd'l'm't's' er SFX c4 er ant/n'q'l'm't's' [^cg]er SFX c4 écer éçant/n'q'l'm't's' écer SFX c4 éger égeant/n'q'l'm't's' éger SFX c4 ébrer èbre/n'q'j'l'm't's' ébrer SFX c4 écer èce/n'q'j'l'm't's' écer SFX c4 écher èche/n'q'j'l'm't's' écher SFX c4 écrer ècre/n'q'j'l'm't's' écrer SFX c4 éder ède/n'q'j'l'm't's' éder SFX c4 éger ège/n'q'j'l'm't's' éger SFX c4 égler ègle/n'q'j'l'm't's' égler SFX c4 égner ègne/n'q'j'l'm't's' égner SFX c4 égrer ègre/n'q'j'l'm't's' égrer SFX c4 éguer ègue/n'q'j'l'm't's' éguer SFX c4 éler èle/n'q'j'l'm't's' éler SFX c4 émer ème/n'q'j'l'm't's' émer SFX c4 éner ène/n'q'j'l'm't's' éner SFX c4 éper èpe/n'q'j'l'm't's' éper SFX c4 équer èque/n'q'j'l'm't's' équer SFX c4 érer ère/n'q'j'l'm't's' érer SFX c4 éser èse/n'q'j'l'm't's' éser SFX c4 éter ète/n'q'j'l'm't's' éter SFX c4 étrer ètre/n'q'j'l'm't's' étrer SFX c4 évrer èvre/n'q'j'l'm't's' évrer SFX c4 éyer èye/n'q'j'l'm't's' éyer SFX c4 ébrer èbres/n'q'l'm't' ébrer SFX c4 écer èces/n'q'l'm't' écer SFX c4 écher èches/n'q'l'm't' écher SFX c4 écrer ècres/n'q'l'm't' écrer SFX c4 éder èdes/n'q'l'm't' éder SFX c4 éger èges/n'q'l'm't' éger SFX c4 égler ègles/n'q'l'm't' égler SFX c4 égner ègnes/n'q'l'm't' égner SFX c4 égrer ègres/n'q'l'm't' égrer SFX c4 éguer ègues/n'q'l'm't' éguer SFX c4 éler èles/n'q'l'm't' éler SFX c4 émer èmes/n'q'l'm't' émer SFX c4 éner ènes/n'q'l'm't' éner SFX c4 éper èpes/n'q'l'm't' éper SFX c4 équer èques/n'q'l'm't' équer SFX c4 érer ères/n'q'l'm't' érer SFX c4 éser èses/n'q'l'm't' éser SFX c4 éter ètes/n'q'l'm't' éter SFX c4 étrer ètres/n'q'l'm't' étrer SFX c4 évrer èvres/n'q'l'm't' évrer SFX c4 éyer èyes/n'q'l'm't' éyer SFX c4 er ons/n'q'l't' [^cg]er SFX c4 écer éçons/n'q'l't' écer SFX c4 éger égeons/n'q'l't' éger SFX c4 er ez/n'q'l'm' er SFX c4 ébrer èbrent/n'q'l'm't's' ébrer SFX c4 écer ècent/n'q'l'm't's' écer SFX c4 écher èchent/n'q'l'm't's' écher SFX c4 écrer ècrent/n'q'l'm't's' écrer SFX c4 éder èdent/n'q'l'm't's' éder SFX c4 éger ègent/n'q'l'm't's' éger SFX c4 égler èglent/n'q'l'm't's' égler SFX c4 égner ègnent/n'q'l'm't's' égner SFX c4 égrer ègrent/n'q'l'm't's' égrer SFX c4 éguer èguent/n'q'l'm't's' éguer SFX c4 éler èlent/n'q'l'm't's' éler SFX c4 émer èment/n'q'l'm't's' émer SFX c4 éner ènent/n'q'l'm't's' éner SFX c4 éper èpent/n'q'l'm't's' éper SFX c4 équer èquent/n'q'l'm't's' équer SFX c4 érer èrent/n'q'l'm't's' érer SFX c4 éser èsent/n'q'l'm't's' éser SFX c4 éter ètent/n'q'l'm't's' éter SFX c4 étrer ètrent/n'q'l'm't's' étrer SFX c4 évrer èvrent/n'q'l'm't's' évrer SFX c4 éyer èyent/n'q'l'm't's' éyer SFX c4 er ais/n'q'j'l'm't' [^cg]er SFX c4 écer éçais/n'q'j'l'm't' écer SFX c4 éger égeais/n'q'j'l'm't' éger SFX c4 er ait/n'q'l'm't's' [^cg]er SFX c4 écer éçait/n'q'l'm't's' écer SFX c4 éger égeait/n'q'l'm't's' éger SFX c4 er ions/n'q'l't' er SFX c4 er iez/n'q'l'm' er SFX c4 er aient/n'q'l'm't's' [^cg]er SFX c4 écer éçaient/n'q'l'm't's' écer SFX c4 éger égeaient/n'q'l'm't's' éger SFX c4 er ai/n'q'j'l'm't' [^cg]er SFX c4 écer éçai/n'q'j'l'm't' écer SFX c4 éger égeai/n'q'j'l'm't' éger SFX c4 er as/n'q'l'm't' [^cg]er SFX c4 écer éças/n'q'l'm't' écer SFX c4 éger égeas/n'q'l'm't' éger SFX c4 er a/n'q'l'm't's' [^cg]er SFX c4 écer éça/n'q'l'm't's' écer SFX c4 éger égea/n'q'l'm't's' éger SFX c4 er âmes/n'q'l't' [^cg]er SFX c4 écer éçâmes/n'q'l't' écer SFX c4 éger égeâmes/n'q'l't' éger SFX c4 er âtes/n'q'l'm' [^cg]er SFX c4 écer éçâtes/n'q'l'm' écer SFX c4 éger égeâtes/n'q'l'm' éger SFX c4 er èrent/n'q'l'm't's' er SFX c4 er erai/n'q'j'l'm't' er SFX c4 er eras/n'q'l'm't' er SFX c4 er era/n'q'l'm't's' er SFX c4 er erons/n'q'l't' er SFX c4 er erez/n'q'l'm' er SFX c4 er eront/n'q'l'm't's' er SFX c4 er erais/n'q'j'l'm't' er SFX c4 er erait/n'q'l'm't's' er SFX c4 er erions/n'q'l't' er SFX c4 er eriez/n'q'l'm' er SFX c4 er eraient/n'q'l'm't's' er SFX c4 er asse/n'q'j'l'm't' [^cg]er SFX c4 écer éçasse/n'q'j'l'm't' écer SFX c4 éger égeasse/n'q'j'l'm't' éger SFX c4 er asses/n'q'l'm't' [^cg]er SFX c4 écer éçasses/n'q'l'm't' écer SFX c4 éger égeasses/n'q'l'm't' éger SFX c4 er ât/n'q'l'm't's' [^cg]er SFX c4 écer éçât/n'q'l'm't's' écer SFX c4 éger égeât/n'q'l'm't's' éger SFX c4 er assions/n'q'l't' [^cg]er SFX c4 écer éçassions/n'q'l't' écer SFX c4 éger égeassions/n'q'l't' éger SFX c4 er assiez/n'q'l'm' [^cg]er SFX c4 écer éçassiez/n'q'l'm' écer SFX c4 éger égeassiez/n'q'l'm' éger SFX c4 er assent/n'q'l'm't's' [^cg]er SFX c4 écer éçassent/n'q'l'm't's' écer SFX c4 éger égeassent/n'q'l'm't's' éger SFX c4 ébrer èbre/n'l'm't' ébrer SFX c4 écer èce/n'l'm't' écer SFX c4 écher èche/n'l'm't' écher SFX c4 écrer ècre/n'l'm't' écrer SFX c4 éder ède/n'l'm't' éder SFX c4 éger ège/n'l'm't' éger SFX c4 égler ègle/n'l'm't' égler SFX c4 égner ègne/n'l'm't' égner SFX c4 égrer ègre/n'l'm't' égrer SFX c4 éguer ègue/n'l'm't' éguer SFX c4 éler èle/n'l'm't' éler SFX c4 émer ème/n'l'm't' émer SFX c4 éner ène/n'l'm't' éner SFX c4 éper èpe/n'l'm't' éper SFX c4 équer èque/n'l'm't' équer SFX c4 érer ère/n'l'm't' érer SFX c4 éser èse/n'l'm't' éser SFX c4 éter ète/n'l'm't' éter SFX c4 étrer ètre/n'l'm't' étrer SFX c4 évrer èvre/n'l'm't' évrer SFX c4 éyer èye/n'l'm't' éyer SFX c4 er ons/n'l' [^cg]er SFX c4 écer éçons/n'l' écer SFX c4 éger égeons/n'l' éger SFX c4 er ez/n'l'm' er SFX c5 Y 152 SFX c5 er er/n'q'd'm't's' er SFX c5 er ant/n'q'm't's' [^cg]er SFX c5 écer éçant/m'q'm't's' écer SFX c5 éger égeant/m'q'l't's' éger SFX c5 ébrer èbre/n'q'j'm't's' ébrer SFX c5 écer èce/n'q'j'm't's' écer SFX c5 écher èche/n'q'j'm't's' écher SFX c5 écrer ècre/n'q'j'm't's' écrer SFX c5 éder ède/n'q'j'm't's' éder SFX c5 éger ège/n'q'j'm't's' éger SFX c5 égler ègle/n'q'j'm't's' égler SFX c5 égner ègne/n'q'j'm't's' égner SFX c5 égrer ègre/n'q'j'm't's' égrer SFX c5 éguer ègue/n'q'j'm't's' éguer SFX c5 éler èle/n'q'j'm't's' éler SFX c5 émer ème/n'q'j'm't's' émer SFX c5 éner ène/n'q'j'm't's' éner SFX c5 éper èpe/n'q'j'm't's' éper SFX c5 équer èque/n'q'j'm't's' équer SFX c5 érer ère/n'q'j'm't's' érer SFX c5 éser èse/n'q'j'm't's' éser SFX c5 éter ète/n'q'j'm't's' éter SFX c5 étrer ètre/n'q'j'm't's' étrer SFX c5 évrer èvre/n'q'j'm't's' évrer SFX c5 éyer èye/n'q'j'm't's' éyer SFX c5 ébrer èbres/n'm't' ébrer SFX c5 écer èces/n'm't' écer SFX c5 écher èches/n'm't' écher SFX c5 écrer ècres/n'm't' écrer SFX c5 éder èdes/n'm't' éder SFX c5 éger èges/n'm't' éger SFX c5 égler ègles/n'm't' égler SFX c5 égner ègnes/n'm't' égner SFX c5 égrer ègres/n'm't' égrer SFX c5 éguer ègues/n'm't' éguer SFX c5 éler èles/n'm't' éler SFX c5 émer èmes/n'm't' émer SFX c5 éner ènes/n'm't' éner SFX c5 éper èpes/n'm't' éper SFX c5 équer èques/n'm't' équer SFX c5 érer ères/n'm't' érer SFX c5 éser èses/n'm't' éser SFX c5 éter ètes/n'm't' éter SFX c5 étrer ètres/n'm't' étrer SFX c5 évrer èvres/n'm't' évrer SFX c5 éyer èyes/n'm't' éyer SFX c5 er ons/n't' [^cg]er SFX c5 écer éçons/n't' écer SFX c5 éger égeons/n't' éger SFX c5 er ez/n'm' er SFX c5 ébrer èbrent/n'q'm't's' ébrer SFX c5 écer ècent/n'q'm't's' écer SFX c5 écher èchent/n'q'm't's' écher SFX c5 écrer ècrent/n'q'm't's' écrer SFX c5 éder èdent/n'q'm't's' éder SFX c5 éger ègent/n'q'm't's' éger SFX c5 égler èglent/n'q'm't's' égler SFX c5 égner ègnent/n'q'm't's' égner SFX c5 égrer ègrent/n'q'm't's' égrer SFX c5 éguer èguent/n'q'm't's' éguer SFX c5 éler èlent/n'q'm't's' éler SFX c5 émer èment/n'q'm't's' émer SFX c5 éner ènent/n'q'm't's' éner SFX c5 éper èpent/n'q'm't's' éper SFX c5 équer èquent/n'q'm't's' équer SFX c5 érer èrent/n'q'm't's' érer SFX c5 éser èsent/n'q'm't's' éser SFX c5 éter ètent/n'q'm't's' éter SFX c5 étrer ètrent/n'q'm't's' étrer SFX c5 évrer èvrent/n'q'm't's' évrer SFX c5 éyer èyent/n'q'm't's' éyer SFX c5 er ais/n'j'm't' [^cg]er SFX c5 écer éçais/n'j'm't' écer SFX c5 éger égeais/n'j'm't' éger SFX c5 er ait/n'q'm't's' [^cg]er SFX c5 écer éçait/n'q'm't's' écer SFX c5 éger égeait/n'q'm't's' éger SFX c5 er ions/n't' er SFX c5 er iez/n'm' er SFX c5 er aient/n'q'm't's' [^cg]er SFX c5 écer éçaient/n'q'm't's' écer SFX c5 éger égeaient/n'q'm't's' éger SFX c5 er ai/n'j'm't' [^cg]er SFX c5 écer éçai/n'j'm't' écer SFX c5 éger égeai/n'j'm't' éger SFX c5 er as/n'm't' [^cg]er SFX c5 écer éças/n'm't' écer SFX c5 éger égeas/n'm't' éger SFX c5 er a/n'q'm't's' [^cg]er SFX c5 écer éça/n'q'm't's' écer SFX c5 éger égea/n'q'm't's' éger SFX c5 er âmes/n't' [^cg]er SFX c5 écer éçâmes/n't' écer SFX c5 éger égeâmes/n't' éger SFX c5 er âtes/n'm' [^cg]er SFX c5 écer éçâtes/n'm' écer SFX c5 éger égeâtes/n'm' éger SFX c5 er èrent/n'q'm't's' er SFX c5 er erai/n'j'm't' er SFX c5 er eras/n'm't' er SFX c5 er era/n'q'm't's' er SFX c5 er erons/n't' er SFX c5 er erez/n'm' er SFX c5 er eront/n'q'm't's' er SFX c5 er erais/n'j'm't' er SFX c5 er erait/n'q'm't's' er SFX c5 er erions/n't' er SFX c5 er eriez/n'm' er SFX c5 er eraient/n'q'm't's' er SFX c5 er asse/n'j'm't' [^cg]er SFX c5 écer éçasse/n'j'm't' écer SFX c5 éger égeasse/n'j'm't' éger SFX c5 er asses/n'm't' [^cg]er SFX c5 écer éçasses/n'm't' écer SFX c5 éger égeasses/n'm't' éger SFX c5 er ât/n'q'm't's' [^cg]er SFX c5 écer éçât/n'q'm't's' écer SFX c5 éger égeât/n'q'm't's' éger SFX c5 er assions/n't' [^cg]er SFX c5 écer éçassions/n't' écer SFX c5 éger égeassions/n't' éger SFX c5 er assiez/n'm' [^cg]er SFX c5 écer éçassiez/n'm' écer SFX c5 éger égeassiez/n'm' éger SFX c5 er assent/n'q'm't's' [^cg]er SFX c5 écer éçassent/n'q'm't's' écer SFX c5 éger égeassent/n'q'm't's' éger SFX c5 ébrer èbre/n'm' ébrer SFX c5 écer èce/n'm' écer SFX c5 écher èche/n'm' écher SFX c5 écrer ècre/n'm' écrer SFX c5 éder ède/n'm' éder SFX c5 éger ège/n'm' éger SFX c5 égler ègle/n'm' égler SFX c5 égner ègne/n'm' égner SFX c5 égrer ègre/n'm' égrer SFX c5 éguer ègue/n'm' éguer SFX c5 éler èle/n'm' éler SFX c5 émer ème/n'm' émer SFX c5 éner ène/n'm' éner SFX c5 éper èpe/n'm' éper SFX c5 équer èque/n'm' équer SFX c5 érer ère/n'm' érer SFX c5 éser èse/n'm' éser SFX c5 éter ète/n'm' éter SFX c5 étrer ètre/n'm' étrer SFX c5 évrer èvre/n'm' évrer SFX c5 éyer èye/n'm' éyer SFX c5 er ons/n' [^cg]er SFX c5 écer éçons/n' écer SFX c5 éger égeons/n' éger SFX c5 er ez/n' er SFX d0 N 82 SFX d0 er ant er SFX d0 eter ette jeter SFX d0 eter ette [^j]eter SFX d0 eler elle ppeler SFX d0 eler elle [^p].eler SFX d0 eter ettes jeter SFX d0 eter ettes [^j]eter SFX d0 eler elles ppeler SFX d0 eler elles [^p].eler SFX d0 er ons er SFX d0 er ez er SFX d0 eter ettent jeter SFX d0 eter ettent [^j]eter SFX d0 eler ellent ppeler SFX d0 eler ellent [^p].eler SFX d0 er ais er SFX d0 er ait er SFX d0 er ions er SFX d0 er iez er SFX d0 er aient er SFX d0 er ai er SFX d0 er as er SFX d0 er a er SFX d0 er âmes er SFX d0 er âtes er SFX d0 er èrent er SFX d0 eter etterai jeter SFX d0 eter etterai [^j]eter SFX d0 eler ellerai ppeler SFX d0 eler ellerai [^p].eler SFX d0 eter etteras jeter SFX d0 eter etteras [^j]eter SFX d0 eler elleras ppeler SFX d0 eler elleras [^p].eler SFX d0 eter ettera jeter SFX d0 eter ettera [^j]eter SFX d0 eler ellera ppeler SFX d0 eler ellera [^p].eler SFX d0 eter etterons jeter SFX d0 eter etterons [^j]eter SFX d0 eler ellerons ppeler SFX d0 eler ellerons [^p].eler SFX d0 eter etterez jeter SFX d0 eter etterez [^j]eter SFX d0 eler ellerez ppeler SFX d0 eler ellerez [^p].eler SFX d0 eter etteront jeter SFX d0 eter etteront [^j]eter SFX d0 eler elleront ppeler SFX d0 eler elleront [^p].eler SFX d0 eter etterais jeter SFX d0 eter etterais [^j]eter SFX d0 eler ellerais ppeler SFX d0 eler ellerais [^p].eler SFX d0 eter etterait jeter SFX d0 eter etterait [^j]eter SFX d0 eler ellerait ppeler SFX d0 eler ellerait [^p].eler SFX d0 eter etterions jeter SFX d0 eter etterions [^j]eter SFX d0 eler ellerions ppeler SFX d0 eler ellerions [^p].eler SFX d0 eter etteriez jeter SFX d0 eter etteriez [^j]eter SFX d0 eler elleriez ppeler SFX d0 eler elleriez [^p].eler SFX d0 eter etteraient jeter SFX d0 eter etteraient [^j]eter SFX d0 eler elleraient ppeler SFX d0 eler elleraient [^p].eler SFX d0 er asse er SFX d0 er asses er SFX d0 er ât er SFX d0 er assions er SFX d0 er assiez er SFX d0 er assent er SFX d0 eter ette jeter SFX d0 eter ette [^j]eter SFX d0 eler elle ppeler SFX d0 eler elle [^p].eler SFX d0 er ons er SFX d0 er ez er SFX d1 Y 83 SFX d1 er er/n'q'd' er SFX d1 er ant/n'q' er SFX d1 eter ette/n'q'j' jeter SFX d1 eter ette/n'q'j' [^j]eter SFX d1 eler elle/n'q'j' ppeler SFX d1 eler elle/n'q'j' [^p].eler SFX d1 eter ettes/n' jeter SFX d1 eter ettes/n' [^j]eter SFX d1 eler elles/n' ppeler SFX d1 eler elles/n' [^p].eler SFX d1 er ons/n' er SFX d1 er ez/n' er SFX d1 eter ettent/n'q' jeter SFX d1 eter ettent/n'q' [^j]eter SFX d1 eler ellent/n'q' ppeler SFX d1 eler ellent/n'q' [^p].eler SFX d1 er ais/n'j' er SFX d1 er ait/n'q' er SFX d1 er ions/n' er SFX d1 er iez/n' er SFX d1 er aient/n'q' er SFX d1 er ai/n'j' er SFX d1 er as/n' er SFX d1 er a/n'q' er SFX d1 er âmes/n' er SFX d1 er âtes/n' er SFX d1 er èrent/n'q' er SFX d1 eter etterai/n'j' jeter SFX d1 eter etterai/n'j' [^j]eter SFX d1 eler ellerai/n'j' ppeler SFX d1 eler ellerai/n'j' [^p].eler SFX d1 eter etteras/n' jeter SFX d1 eter etteras/n' [^j]eter SFX d1 eler elleras/n' ppeler SFX d1 eler elleras/n' [^p].eler SFX d1 eter ettera/n'q' jeter SFX d1 eter ettera/n'q' [^j]eter SFX d1 eler ellera/n'q' ppeler SFX d1 eler ellera/n'q' [^p].eler SFX d1 eter etterons/n' jeter SFX d1 eter etterons/n' [^j]eter SFX d1 eler ellerons/n' ppeler SFX d1 eler ellerons/n' [^p].eler SFX d1 eter etterez/n' jeter SFX d1 eter etterez/n' [^j]eter SFX d1 eler ellerez/n' ppeler SFX d1 eler ellerez/n' [^p].eler SFX d1 eter etteront/n'q' jeter SFX d1 eter etteront/n'q' [^j]eter SFX d1 eler elleront/n'q' ppeler SFX d1 eler elleront/n'q' [^p].eler SFX d1 eter etterais/n'j' jeter SFX d1 eter etterais/n'j' [^j]eter SFX d1 eler ellerais/n'j' ppeler SFX d1 eler ellerais/n'j' [^p].eler SFX d1 eter etterait/n'q' jeter SFX d1 eter etterait/n'q' [^j]eter SFX d1 eler ellerait/n'q' ppeler SFX d1 eler ellerait/n'q' [^p].eler SFX d1 eter etterions/n' jeter SFX d1 eter etterions/n' [^j]eter SFX d1 eler ellerions/n' ppeler SFX d1 eler ellerions/n' [^p].eler SFX d1 eter etteriez/n' jeter SFX d1 eter etteriez/n' [^j]eter SFX d1 eler elleriez/n' ppeler SFX d1 eler elleriez/n' [^p].eler SFX d1 eter etteraient/n'q' jeter SFX d1 eter etteraient/n'q' [^j]eter SFX d1 eler elleraient/n'q' ppeler SFX d1 eler elleraient/n'q' [^p].eler SFX d1 er asse/n'j' er SFX d1 er asses/n' er SFX d1 er ât/n'q' er SFX d1 er assions/n' er SFX d1 er assiez/n' er SFX d1 er assent/n'q' er SFX d1 eter ette/n' jeter SFX d1 eter ette/n' [^j]eter SFX d1 eler elle/n' ppeler SFX d1 eler elle/n' [^p].eler SFX d1 er ons/n' er SFX d1 er ez/n' er SFX d2 Y 83 SFX d2 er er/n'q'd'l'm't's' er SFX d2 er ant/n'q'l'm't's' er SFX d2 eter ette/n'q'j'l'm't's' jeter SFX d2 eter ette/n'q'j'l'm't's' [^j]eter SFX d2 eler elle/n'q'j'l'm't's' ppeler SFX d2 eler elle/n'q'j'l'm't's' [^p].eler SFX d2 eter ettes/n'q'l'm' jeter SFX d2 eter ettes/n'q'l'm' [^j]eter SFX d2 eler elles/n'q'l'm' ppeler SFX d2 eler elles/n'q'l'm' [^p].eler SFX d2 er ons/n'q'l't' er SFX d2 er ez/n'q'l'm' er SFX d2 eter ettent/n'q'l'm't's' jeter SFX d2 eter ettent/n'q'l'm't's' [^j]eter SFX d2 eler ellent/n'q'l'm't's' ppeler SFX d2 eler ellent/n'q'l'm't's' [^p].eler SFX d2 er ais/n'q'j'l'm't' er SFX d2 er ait/n'q'l'm't's' er SFX d2 er ions/n'q'l't' er SFX d2 er iez/n'q'l'm' er SFX d2 er aient/n'q'l'm't's' er SFX d2 er ai/n'q'j'l't' er SFX d2 er as/n'q'l'm' er SFX d2 er a/n'q'l'm't's' er SFX d2 er âmes/n'q'l't' er SFX d2 er âtes/n'q'l'm' er SFX d2 er èrent/n'q'l'm't's' er SFX d2 eter etterai/n'q'j'l't' jeter SFX d2 eter etterai/n'q'j'l't' [^j]eter SFX d2 eler ellerai/n'q'j'l't' ppeler SFX d2 eler ellerai/n'q'j'l't' [^p].eler SFX d2 eter etteras/n'q'l'm' jeter SFX d2 eter etteras/n'q'l'm' [^j]eter SFX d2 eler elleras/n'q'l'm' ppeler SFX d2 eler elleras/n'q'l'm' [^p].eler SFX d2 eter ettera/n'q'l'm't's' jeter SFX d2 eter ettera/n'q'l'm't's' [^j]eter SFX d2 eler ellera/n'q'l'm't's' ppeler SFX d2 eler ellera/n'q'l'm't's' [^p].eler SFX d2 eter etterons/n'q'l't' jeter SFX d2 eter etterons/n'q'l't' [^j]eter SFX d2 eler ellerons/n'q'l't' ppeler SFX d2 eler ellerons/n'q'l't' [^p].eler SFX d2 eter etterez/n'q'l'm' jeter SFX d2 eter etterez/n'q'l'm' [^j]eter SFX d2 eler ellerez/n'q'l'm' ppeler SFX d2 eler ellerez/n'q'l'm' [^p].eler SFX d2 eter etteront/n'q'l'm't's' jeter SFX d2 eter etteront/n'q'l'm't's' [^j]eter SFX d2 eler elleront/n'q'l'm't's' ppeler SFX d2 eler elleront/n'q'l'm't's' [^p].eler SFX d2 eter etterais/n'q'j'l'm't' jeter SFX d2 eter etterais/n'q'j'l'm't' [^j]eter SFX d2 eler ellerais/n'q'j'l'm't' ppeler SFX d2 eler ellerais/n'q'j'l'm't' [^p].eler SFX d2 eter etterait/n'q'l'm't's' jeter SFX d2 eter etterait/n'q'l'm't's' [^j]eter SFX d2 eler ellerait/n'q'l'm't's' ppeler SFX d2 eler ellerait/n'q'l'm't's' [^p].eler SFX d2 eter etterions/n'q'l't' jeter SFX d2 eter etterions/n'q'l't' [^j]eter SFX d2 eler ellerions/n'q'l't' ppeler SFX d2 eler ellerions/n'q'l't' [^p].eler SFX d2 eter etteriez/n'q'l'm' jeter SFX d2 eter etteriez/n'q'l'm' [^j]eter SFX d2 eler elleriez/n'q'l'm' ppeler SFX d2 eler elleriez/n'q'l'm' [^p].eler SFX d2 eter etteraient/n'q'l'm't's' jeter SFX d2 eter etteraient/n'q'l'm't's' [^j]eter SFX d2 eler elleraient/n'q'l'm't's' ppeler SFX d2 eler elleraient/n'q'l'm't's' [^p].eler SFX d2 er asse/n'q'j'l't' er SFX d2 er asses/n'q'l'm' er SFX d2 er ât/n'q'l'm't's' er SFX d2 er assions/n'q'l't' er SFX d2 er assiez/n'q'l'm' er SFX d2 er assent/n'q'l'm't's' er SFX d2 eter ette/n'l'm' jeter SFX d2 eter ette/n'l'm' [^j]eter SFX d2 eler elle/n'l'm' ppeler SFX d2 eler elle/n'l'm' [^p].eler SFX d2 er ons/n'l' er SFX d2 er ez/n'l'm' er SFX d3 Y 83 SFX d3 er er/m't's' er SFX d3 er ant/m't's' er SFX d3 eter ette/m's' jeter SFX d3 eter ette/m's' [^j]eter SFX d3 eler elle/m's' ppeler SFX d3 eler elle/m's' [^p].eler SFX d3 eter ettes/t' jeter SFX d3 eter ettes/t' [^j]eter SFX d3 eler elles/t' ppeler SFX d3 eler elles/t' [^p].eler SFX d3 er ons er SFX d3 er ez er SFX d3 eter ettent/s' jeter SFX d3 eter ettent/s' [^j]eter SFX d3 eler ellent/s' ppeler SFX d3 eler ellent/s' [^p].eler SFX d3 er ais/m't' er SFX d3 er ait/s' er SFX d3 er ions er SFX d3 er iez er SFX d3 er aient/s' er SFX d3 er ai/m' er SFX d3 er as/t' er SFX d3 er a/s' er SFX d3 er âmes er SFX d3 er âtes er SFX d3 er èrent/s' er SFX d3 eter etterai/m' jeter SFX d3 eter etterai/m' [^j]eter SFX d3 eler ellerai/m' ppeler SFX d3 eler ellerai/m' [^p].eler SFX d3 eter etteras/t' jeter SFX d3 eter etteras/t' [^j]eter SFX d3 eler elleras/t' ppeler SFX d3 eler elleras/t' [^p].eler SFX d3 eter ettera/s' jeter SFX d3 eter ettera/s' [^j]eter SFX d3 eler ellera/s' ppeler SFX d3 eler ellera/s' [^p].eler SFX d3 eter etterons jeter SFX d3 eter etterons [^j]eter SFX d3 eler ellerons ppeler SFX d3 eler ellerons [^p].eler SFX d3 eter etterez jeter SFX d3 eter etterez [^j]eter SFX d3 eler ellerez ppeler SFX d3 eler ellerez [^p].eler SFX d3 eter etteront/s' jeter SFX d3 eter etteront/s' [^j]eter SFX d3 eler elleront/s' ppeler SFX d3 eler elleront/s' [^p].eler SFX d3 eter etterais/m't' jeter SFX d3 eter etterais/m't' [^j]eter SFX d3 eler ellerais/m't' ppeler SFX d3 eler ellerais/m't' [^p].eler SFX d3 eter etterait/s' jeter SFX d3 eter etterait/s' [^j]eter SFX d3 eler ellerait/s' ppeler SFX d3 eler ellerait/s' [^p].eler SFX d3 eter etterions jeter SFX d3 eter etterions [^j]eter SFX d3 eler ellerions ppeler SFX d3 eler ellerions [^p].eler SFX d3 eter etteriez jeter SFX d3 eter etteriez [^j]eter SFX d3 eler elleriez ppeler SFX d3 eler elleriez [^p].eler SFX d3 eter etteraient/s' jeter SFX d3 eter etteraient/s' [^j]eter SFX d3 eler elleraient/s' ppeler SFX d3 eler elleraient/s' [^p].eler SFX d3 er asse/m' er SFX d3 er asses/t' er SFX d3 er ât/s' er SFX d3 er assions er SFX d3 er assiez er SFX d3 er assent/s' er SFX d3 eter ette/t' jeter SFX d3 eter ette/t' [^j]eter SFX d3 eler elle/t' ppeler SFX d3 eler elle/t' [^p].eler SFX d3 er ons er SFX d3 er ez er SFX d4 Y 98 SFX d4 er er/n'q'd'l'm't's' er SFX d4 er ant/n'q'l'm't's' er SFX d4 eter ette/n'q'j'l'm't's' jeter SFX d4 eter ette/n'q'j'l'm't's' [^j]eter SFX d4 eler elle/n'q'j'l'm't's' ppeler SFX d4 eler elle/n'q'j'l'm't's' [^p].eler SFX d4 eler elle/n'q'j'l'm't's' épeler SFX d4 eter ettes/n'q'l'm't' jeter SFX d4 eter ettes/n'q'l'm't' [^j]eter SFX d4 eler elles/n'q'l'm't' ppeler SFX d4 eler elles/n'q'l'm't' [^p].eler SFX d4 eler elles/n'q'l'm't' épeler SFX d4 er ons/n'q'l't' er SFX d4 er ez/n'q'l'm' er SFX d4 eter ettent/n'q'l'm't's' jeter SFX d4 eter ettent/n'q'l'm't's' [^j]eter SFX d4 eler ellent/n'q'l'm't's' ppeler SFX d4 eler ellent/n'q'l'm't's' [^p].eler SFX d4 eler ellent/n'q'l'm't's' épeler SFX d4 er ais/n'q'j'l'm't' er SFX d4 er ait/n'q'l'm't's' er SFX d4 er ions/n'q'l't' er SFX d4 er iez/n'q'l'm' er SFX d4 er aient/n'q'l'm't's' er SFX d4 er ai/n'q'j'l'm't' er SFX d4 er as/n'q'l'm't' er SFX d4 er a/n'q'l'm't's' er SFX d4 er âmes/n'q'l't' er SFX d4 er âtes/n'q'l'm' er SFX d4 er èrent/n'q'l'm't's' er SFX d4 eter etterai/n'q'j'l'm't' jeter SFX d4 eter etterai/n'q'j'l'm't' [^j]eter SFX d4 eler ellerai/n'q'j'l'm't' ppeler SFX d4 eler ellerai/n'q'j'l'm't' [^p].eler SFX d4 eler ellerai/n'q'j'l'm't' épeler SFX d4 eter etteras/n'q'l'm't' jeter SFX d4 eter etteras/n'q'l'm't' [^j]eter SFX d4 eler elleras/n'q'l'm't' ppeler SFX d4 eler elleras/n'q'l'm't' [^p].eler SFX d4 eler elleras/n'q'l'm't' épeler SFX d4 eter ettera/n'q'l'm't's' jeter SFX d4 eter ettera/n'q'l'm't's' [^j]eter SFX d4 eler ellera/n'q'l'm't's' ppeler SFX d4 eler ellera/n'q'l'm't's' [^p].eler SFX d4 eler ellera/n'q'l'm't's' épeler SFX d4 eter etterons/n'q'l't' jeter SFX d4 eter etterons/n'q'l't' [^j]eter SFX d4 eler ellerons/n'q'l't' ppeler SFX d4 eler ellerons/n'q'l't' [^p].eler SFX d4 eler ellerons/n'q'l't' épeler SFX d4 eter etterez/n'q'l'm' jeter SFX d4 eter etterez/n'q'l'm' [^j]eter SFX d4 eler ellerez/n'q'l'm' ppeler SFX d4 eler ellerez/n'q'l'm' [^p].eler SFX d4 eler ellerez/n'q'l'm' épeler SFX d4 eter etteront/n'q'l'm't's' jeter SFX d4 eter etteront/n'q'l'm't's' [^j]eter SFX d4 eler elleront/n'q'l'm't's' ppeler SFX d4 eler elleront/n'q'l'm't's' [^p].eler SFX d4 eler elleront/n'q'l'm't's' épeler SFX d4 eter etterais/n'q'j'l'm't' jeter SFX d4 eter etterais/n'q'j'l'm't' [^j]eter SFX d4 eler ellerais/n'q'j'l'm't' ppeler SFX d4 eler ellerais/n'q'j'l'm't' [^p].eler SFX d4 eler ellerais/n'q'j'l'm't' épeler SFX d4 eter etterait/n'q'l'm't's' jeter SFX d4 eter etterait/n'q'l'm't's' [^j]eter SFX d4 eler ellerait/n'q'l'm't's' ppeler SFX d4 eler ellerait/n'q'l'm't's' [^p].eler SFX d4 eler ellerait/n'q'l'm't's' épeler SFX d4 eter etterions/n'q'l't' jeter SFX d4 eter etterions/n'q'l't' [^j]eter SFX d4 eler ellerions/n'q'l't' ppeler SFX d4 eler ellerions/n'q'l't' [^p].eler SFX d4 eler ellerions/n'q'l't' épeler SFX d4 eter etteriez/n'q'l'm' jeter SFX d4 eter etteriez/n'q'l'm' [^j]eter SFX d4 eler elleriez/n'q'l'm' ppeler SFX d4 eler elleriez/n'q'l'm' [^p].eler SFX d4 eler elleriez/n'q'l'm' épeler SFX d4 eter etteraient/n'q'l'm't's' jeter SFX d4 eter etteraient/n'q'l'm't's' [^j]eter SFX d4 eler elleraient/n'q'l'm't's' ppeler SFX d4 eler elleraient/n'q'l'm't's' [^p].eler SFX d4 eler elleraient/n'q'l'm't's' épeler SFX d4 er asse/n'q'j'l'm't' er SFX d4 er asses/n'q'l'm't' er SFX d4 er ât/n'q'l'm't's' er SFX d4 er assions/n'q'l't' er SFX d4 er assiez/n'q'l'm' er SFX d4 er assent/n'q'l'm't's' er SFX d4 eter ette/n'l'm't' jeter SFX d4 eter ette/n'l'm't' [^j]eter SFX d4 eler elle/n'l'm't' ppeler SFX d4 eler elle/n'l'm't' [^p].eler SFX d4 eler elle/n'l'm't' épeler SFX d4 er ons/n'l' er SFX d4 er ez/n'l'm' er SFX d5 Y 83 SFX d5 er er/m'q'd'm't's' er SFX d5 er ant/m'q'd'm't's' er SFX d5 eter ette/n'q'j'm't's' jeter SFX d5 eter ette/n'q'j'm't's' [^j]eter SFX d5 eler elle/n'q'j'm't's' ppeler SFX d5 eler elle/n'q'j'm't's' [^p].eler SFX d5 eter ettes/n'm't' jeter SFX d5 eter ettes/n'm't' [^j]eter SFX d5 eler elles/n'm't' ppeler SFX d5 eler elles/n'm't' [^p].eler SFX d5 er ons/n't' er SFX d5 er ez/n'm' er SFX d5 eter ettent/n'q'm't's' jeter SFX d5 eter ettent/n'q'm't's' [^j]eter SFX d5 eler ellent/n'q'm't's' ppeler SFX d5 eler ellent/n'q'm't's' [^p].eler SFX d5 er ais/n'j'm't' er SFX d5 er ait/n'q'm't's' er SFX d5 er ions/n't' er SFX d5 er iez/n'm' er SFX d5 er aient/n'q'm't's' er SFX d5 er ai/n'j'm't' er SFX d5 er as/n'm't' er SFX d5 er a/n'q'm't's' er SFX d5 er âmes/n't' er SFX d5 er âtes/n'm' er SFX d5 er èrent/n'q'm't's' er SFX d5 eter etterai/n'j'm't' jeter SFX d5 eter etterai/n'j'm't' [^j]eter SFX d5 eler ellerai/n'j'm't' ppeler SFX d5 eler ellerai/n'j'm't' [^p].eler SFX d5 eter etteras/n'm't' jeter SFX d5 eter etteras/n'm't' [^j]eter SFX d5 eler elleras/n'm't' ppeler SFX d5 eler elleras/n'm't' [^p].eler SFX d5 eter ettera/n'q'm't's' jeter SFX d5 eter ettera/n'q'm't's' [^j]eter SFX d5 eler ellera/n'q'm't's' ppeler SFX d5 eler ellera/n'q'm't's' [^p].eler SFX d5 eter etterons/n't' jeter SFX d5 eter etterons/n't' [^j]eter SFX d5 eler ellerons/n't' ppeler SFX d5 eler ellerons/n't' [^p].eler SFX d5 eter etterez/n'm' jeter SFX d5 eter etterez/n'm' [^j]eter SFX d5 eler ellerez/n'm' ppeler SFX d5 eler ellerez/n'm' [^p].eler SFX d5 eter etteront/n'q'm't's' jeter SFX d5 eter etteront/n'q'm't's' [^j]eter SFX d5 eler elleront/n'q'm't's' ppeler SFX d5 eler elleront/n'q'm't's' [^p].eler SFX d5 eter etterais/n'j'm't' jeter SFX d5 eter etterais/n'j'm't' [^j]eter SFX d5 eler ellerais/n'j'm't' ppeler SFX d5 eler ellerais/n'j'm't' [^p].eler SFX d5 eter etterait/n'q'm't's' jeter SFX d5 eter etterait/n'q'm't's' [^j]eter SFX d5 eler ellerait/n'q'm't's' ppeler SFX d5 eler ellerait/n'q'm't's' [^p].eler SFX d5 eter etterions/n't' jeter SFX d5 eter etterions/n't' [^j]eter SFX d5 eler ellerions/n't' ppeler SFX d5 eler ellerions/n't' [^p].eler SFX d5 eter etteriez/n'm' jeter SFX d5 eter etteriez/n'm' [^j]eter SFX d5 eler elleriez/n'm' ppeler SFX d5 eler elleriez/n'm' [^p].eler SFX d5 eter etteraient/n'q'm't's' jeter SFX d5 eter etteraient/n'q'm't's' [^j]eter SFX d5 eler elleraient/n'q'm't's' ppeler SFX d5 eler elleraient/n'q'm't's' [^p].eler SFX d5 er asse/n'j'm't' er SFX d5 er asses/n'm't' er SFX d5 er ât/n'q'm't's' er SFX d5 er assions/n't' er SFX d5 er assiez/n'm' er SFX d5 er assent/n'q'm't's' er SFX d5 eter ette/m' jeter SFX d5 eter ette/m' [^j]eter SFX d5 eler elle/m' ppeler SFX d5 eler elle/m' [^p].eler SFX d5 er ons er SFX d5 er ez er SFX aA Y 54 SFX aA ller ller/n'q'd'm't' aller SFX aA ller llant/n'q'm't' aller SFX aA ller llé/q' aller SFX aA ller llés/q' aller SFX aA ller llée/q' aller SFX aA ller llées/q' aller SFX aA aller vais aller SFX aA aller vas aller SFX aA aller va aller SFX aA ller llons/n'q' aller SFX aA ller llez/n'q' aller SFX aA aller vont aller SFX aA ller llais/n'q'j' aller SFX aA ller llait/n'q'm't' aller SFX aA ller llions/n'q' aller SFX aA ller lliez/n'q' aller SFX aA ller llaient/n'q'm't' aller SFX aA ller llai/n'q'j' aller SFX aA ller llas/n'q' aller SFX aA ller lla/n'q'm't' aller SFX aA ller llâmes/n'q' aller SFX aA ller llâtes/n'q' aller SFX aA ller llèrent/n'q'm't' aller SFX aA aller irai/n'q'j' aller SFX aA aller iras/n'q' aller SFX aA aller ira/n'q'm't' aller SFX aA aller irons/n'q' aller SFX aA aller irez/n'q'm't' aller SFX aA aller iront/n'q' aller SFX aA aller irais/n'q'j' aller SFX aA aller irait/n'q'm't' aller SFX aA aller irions/n'q' aller SFX aA aller iriez/n'q' aller SFX aA aller iraient/n'q'm't' aller SFX aA ller ille/n'q'j'm't' aller SFX aA ller illes/n' aller SFX aA ller llions/n' aller SFX aA ller lliez/n' aller SFX aA ller illent/n'q'm't' aller SFX aA ller llasse/n'q'j' aller SFX aA ller llasses/n'q' aller SFX aA ller llât/n'q'm't' aller SFX aA ller llassions/n'q' aller SFX aA ller llassiez/n'q' aller SFX aA ller llassent/n'q'm't' aller SFX aA ller llons/n' aller SFX aA aller va aller SFX aA aller vas-y aller SFX aA aller va-t'en aller SFX aA ller llons-y aller SFX aA ller llons-nous-en aller SFX aA ller llez/n' aller SFX aA ller llez-y aller SFX aA ller llez-vous-en aller SFX aD Y 44 SFX aD voyer voyer/n'q'd'l'm't's' envoyer SFX aD voyer voyant/n'q'l'm't's' envoyer SFX aD voyer voyé/q' envoyer SFX aD voyer voyés/q' envoyer SFX aD voyer voyée/q' envoyer SFX aD voyer voyées/q' envoyer SFX aD voyer voie/n'q'j'l'm't's' envoyer SFX aD voyer voies/n'q'l'm't' envoyer SFX aD voyer voyons/n'q'l't' envoyer SFX aD voyer voyez/n'q'l'm' envoyer SFX aD voyer voient/n'q'l'm't's' envoyer SFX aD voyer voyais/n'q'j'l'm't' envoyer SFX aD voyer voyait/n'q'l'm't's' envoyer SFX aD voyer voyions/n'q'l't' envoyer SFX aD voyer voyiez/n'q'l'm' envoyer SFX aD voyer voyaient/n'q'l'm't's' envoyer SFX aD voyer voyai/n'q'j'l'm't' envoyer SFX aD voyer voyas/n'q'l'm't' envoyer SFX aD voyer voya/n'q'l'm't's' envoyer SFX aD voyer voyâmes/n'q'l't' envoyer SFX aD voyer voyâtes/n'q'l'm' envoyer SFX aD voyer voyèrent/n'q'l'm't's' envoyer SFX aD voyer verrai/n'q'j'l'm't' envoyer SFX aD voyer verras/n'q'l'm't' envoyer SFX aD voyer verra/n'q'l'm't's' envoyer SFX aD voyer verrons/n'q'l't' envoyer SFX aD voyer verrez/n'q'l'm' envoyer SFX aD voyer verront/n'q'l'm't's' envoyer SFX aD voyer verrais/n'q'j'l'm't' envoyer SFX aD voyer verrait/n'q'l'm't's' envoyer SFX aD voyer verrions/n'q'l't' envoyer SFX aD voyer verriez/n'q'l'm' envoyer SFX aD voyer verraient/n'q'l'm't's' envoyer SFX aD voyer voie/n'q'j'l'm't's' envoyer SFX aD voyer voies/n'l'm't' envoyer SFX aD voyer voyasse/n'q'j'l'm't' envoyer SFX aD voyer voyasses/n'q'l'm't' envoyer SFX aD voyer voyât/n'q'l'm't's' envoyer SFX aD voyer voyassions/n'q'l't' envoyer SFX aD voyer voyassiez/n'q'l'm' envoyer SFX aD voyer voyassent/n'q'l'm't's' envoyer SFX aD voyer voie/n'l'm't' envoyer SFX aD voyer voyons/n'l' envoyer SFX aD voyer voyez/n'l'm' envoyer SFX aE Y 6 SFX aE direr direr/n'q'd'l'm't's' direr SFX aE direr dirant/n'q'l'm't's' direr SFX aE direr diré/q' direr SFX aE direr dirés/q' direr SFX aE direr dirée/q' direr SFX aE direr dirées/q' direr SFX aF N 17 SFX aF cerner cernant er SFX aF cerner cerné er SFX aF cerner cernés er SFX aF cerner cernée er SFX aF cerner cernées er SFX aF cerner cerne er SFX aF cerner cernent er SFX aF cerner cernait er SFX aF cerner cernaient er SFX aF cerner cerna er SFX aF cerner cernèrent er SFX aF cerner cernera er SFX aF cerner cerneront er SFX aF cerner cernerait er SFX aF cerner cerneraient er SFX aF cerner cernât er SFX aF cerner cernassent er SFX aG Y 19 SFX aG er er/n'q'd'm't' er SFX aG er ant/n'q'm't' er SFX aG mber mbé mber SFX aG lter lté lter SFX aG lter ltés lter SFX aG lter ltée lter SFX aG lter ltées lter SFX aG er e/n'q'm't' er SFX aG er ent/n'q'm't' er SFX aG er ait/n'q'm't' er SFX aG er aient/n'q'm't' er SFX aG er a/n'q'm't' er SFX aG er èrent/n'q'm't' er SFX aG er era/n'q'm't' er SFX aG er eront/n'q'm't' er SFX aG er erait/n'q'm't' er SFX aG er eraient/n'q'm't' er SFX aG er ât/n'q'm't' er SFX aG er assent/n'q'm't' er SFX aH N 38 SFX aH er ant gger SFX aH er é gger SFX aH er e gger SFX aH er es gger SFX aH er ons gger SFX aH er ez gger SFX aH er ent gger SFX aH er ais gger SFX aH er ait gger SFX aH er ions gger SFX aH er iez gger SFX aH er aient gger SFX aH er ai gger SFX aH er as gger SFX aH er a gger SFX aH er âmes gger SFX aH er âtes gger SFX aH er èrent gger SFX aH er erai gger SFX aH er eras gger SFX aH er era gger SFX aH er erons gger SFX aH er erez gger SFX aH er eront gger SFX aH er erais gger SFX aH er erait gger SFX aH er erions gger SFX aH er eriez gger SFX aH er eraient gger SFX aH er asse gger SFX aH er asses gger SFX aH er ât gger SFX aH er assions gger SFX aH er assiez gger SFX aH er assent gger SFX aH er e gger SFX aH er ons gger SFX aH er ez gger SFX aY N 41 SFX aY neler nelant neler SFX aY neler nelé neler SFX aY neler nelés neler SFX aY neler nelée neler SFX aY neler nelées neler SFX aY éneler énelle éneler SFX aY éneler énelles éneler SFX aY neler nelons neler SFX aY neler nelez neler SFX aY éneler énellent éneler SFX aY neler nelais neler SFX aY neler nelait neler SFX aY neler nelions neler SFX aY neler neliez neler SFX aY neler nelaient neler SFX aY neler nelai neler SFX aY neler nelas neler SFX aY neler nela neler SFX aY neler nelâmes neler SFX aY neler nelâtes neler SFX aY neler nelèrent neler SFX aY éneler énellerai éneler SFX aY éneler énelleras éneler SFX aY éneler énellera éneler SFX aY éneler énellerons éneler SFX aY éneler énellerez éneler SFX aY éneler énelleront éneler SFX aY éneler énellerais éneler SFX aY éneler énellerait éneler SFX aY éneler énellerions éneler SFX aY éneler énelleriez éneler SFX aY éneler énelleraient éneler SFX aY neler nelasse neler SFX aY neler nelasses neler SFX aY neler nelât neler SFX aY neler nelassions neler SFX aY neler nelassiez neler SFX aY neler nelassent neler SFX aY éneler énelle éneler SFX aY neler nelons neler SFX aY neler nelez neler SFX aZ N 41 SFX aZ teler telant teler SFX aZ teler telé teler SFX aZ teler telés teler SFX aZ teler telée teler SFX aZ teler telées teler SFX aZ ételer ételle ételer SFX aZ ételer ételles ételer SFX aZ teler telons teler SFX aZ teler telez teler SFX aZ ételer étellent ételer SFX aZ teler telais teler SFX aZ teler telait teler SFX aZ teler telions teler SFX aZ teler teliez teler SFX aZ teler telaient teler SFX aZ teler telai teler SFX aZ teler telas teler SFX aZ teler tela teler SFX aZ teler telâmes teler SFX aZ teler telâtes teler SFX aZ teler telèrent teler SFX aZ ételer étellerai ételer SFX aZ ételer ételleras ételer SFX aZ ételer étellera ételer SFX aZ ételer étellerons ételer SFX aZ ételer étellerez ételer SFX aZ ételer ételleront ételer SFX aZ ételer étellerais ételer SFX aZ ételer étellerait ételer SFX aZ ételer étellerions ételer SFX aZ ételer ételleriez ételer SFX aZ ételer ételleraient ételer SFX aZ teler telasse teler SFX aZ teler telasses teler SFX aZ teler telât teler SFX aZ teler telassions teler SFX aZ teler telassiez teler SFX aZ teler telassent teler SFX aZ ételer ételle ételer SFX aZ teler telons teler SFX aZ teler telez teler SFX dA Y 42 SFX dA peler peler/n'q'd'l'm't's' peler SFX dA peler pelant/n'q'l'm't's' peler SFX dA peler pelé/q' peler SFX dA peler pelés/q' peler SFX dA peler pelée/q' peler SFX dA peler pelées/q' peler SFX dA peler pelle/n'q'j'l'm't's' peler SFX dA peler pelles/n'q'l'm' peler SFX dA peler pelons/n'q'l't' peler SFX dA peler pelez/n'q'l'm' peler SFX dA peler pellent/n'q'l'm't's' peler SFX dA peler pelais/n'q'j'l't' peler SFX dA peler pelait/n'q'l'm't's' peler SFX dA peler pelions/n'q'l't' peler SFX dA peler peliez/n'q'l'm' peler SFX dA peler pelaient/n'q'l'm't's' peler SFX dA peler pelai/n'q'j'l't' peler SFX dA peler pelas/n'q'l'm' peler SFX dA peler pela/n'q'l'm't's' peler SFX dA peler pelâmes/n'q'l't' peler SFX dA peler pelâtes/n'q'l'm' peler SFX dA peler pelèrent/n'q'l'm't's' peler SFX dA peler pellerai/n'q'j'l't' peler SFX dA peler pelleras/n'q'l'm' peler SFX dA peler pellera/n'q'l'm't's' peler SFX dA peler pellerons/n'q'l't' peler SFX dA peler pellerez/n'q'l'm' peler SFX dA peler pelleront/n'q'l'm't's' peler SFX dA peler pellerais/n'q'j'l't' peler SFX dA peler pellerait/n'q'l'm't's' peler SFX dA peler pellerions/n'q'l't' peler SFX dA peler pelleriez/n'q'l'm' peler SFX dA peler pelleraient/n'q'l'm't's' peler SFX dA peler pelasse/n'q'j'l't' peler SFX dA peler pelasses/n'q'l'm' peler SFX dA peler pelât/n'q'l'm't's' peler SFX dA peler pelassions/n'q'l't' peler SFX dA peler pelassiez/n'q'l'm' peler SFX dA peler pelassent/n'q'l'm't's' peler SFX dA peler pelle/n'l'm' peler SFX dA peler pelons/n'l' peler SFX dA peler pelez/n'l'm' peler SFX f0 Y 32 SFX f0 ir issant ir SFX f0 ir is ir SFX f0 ir it ir SFX f0 ir issons ir SFX f0 ir issez ir SFX f0 ir issent ir SFX f0 ir issais ir SFX f0 ir issait ir SFX f0 ir issions ir SFX f0 ir issiez ir SFX f0 ir issaient ir SFX f0 ir îmes ir SFX f0 ir îtes ir SFX f0 ir irent ir SFX f0 ir irai ir SFX f0 ir iras ir SFX f0 ir ira ir SFX f0 ir irons ir SFX f0 ir irez ir SFX f0 ir iront ir SFX f0 ir irais ir SFX f0 ir irait ir SFX f0 ir irions ir SFX f0 ir iriez ir SFX f0 ir iraient ir SFX f0 ir isse ir SFX f0 ir isses ir SFX f0 ir isse ir SFX f0 ir ît ir SFX f0 ir is ir SFX f0 ir issons ir SFX f0 ir issez ir SFX f1 Y 33 SFX f1 ir ir/n'q'd' ir SFX f1 ir issant/n'q' ir SFX f1 ir is/n'j' ir SFX f1 ir it/n'q' ir SFX f1 ir issons/n' ir SFX f1 ir issez/n' ir SFX f1 ir issent/n'q' ir SFX f1 ir issais/n'j' ir SFX f1 ir issait/n'q' ir SFX f1 ir issions/n' ir SFX f1 ir issiez/n' ir SFX f1 ir issaient/n'q' ir SFX f1 ir îmes/n' ir SFX f1 ir îtes/n' ir SFX f1 ir irent/n'q' ir SFX f1 ir irai/n'j' ir SFX f1 ir iras/n' ir SFX f1 ir ira/n'q' ir SFX f1 ir irons/n' ir SFX f1 ir irez/n' ir SFX f1 ir iront/n'q' ir SFX f1 ir irais/n'j' ir SFX f1 ir irait/n'q' ir SFX f1 ir irions/n' ir SFX f1 ir iriez/n' ir SFX f1 ir iraient/n'q' ir SFX f1 ir isse/n'j' ir SFX f1 ir isses/n' ir SFX f1 ir isse/n'q' ir SFX f1 ir ît/n'q' ir SFX f1 ir is/n' ir SFX f1 ir issons/n' ir SFX f1 ir issez/n' ir SFX f2 Y 33 SFX f2 ir ir/n'q'd'l'm't's' ir SFX f2 ir issant/n'q'l'm't's' ir SFX f2 ir is/n'q'j'l't' ir SFX f2 ir it/n'q'l'm't's' ir SFX f2 ir issons/n'q'l't' ir SFX f2 ir issez/n'q'l'm' ir SFX f2 ir issent/n'q'l'm't's' ir SFX f2 ir issais/n'q'j'l't' ir SFX f2 ir issait/n'q'l'm't's' ir SFX f2 ir issions/n'q'l't' ir SFX f2 ir issiez/n'q'l'm' ir SFX f2 ir issaient/n'q'l'm't's' ir SFX f2 ir îmes/n'q'l't' ir SFX f2 ir îtes/n'q'l'm' ir SFX f2 ir irent/n'q'l'm't's' ir SFX f2 ir irai/n'q'j'l't' ir SFX f2 ir iras/n'q'l'm't' ir SFX f2 ir ira/n'q'l'm't's' ir SFX f2 ir irons/n'q'l't' ir SFX f2 ir irez/n'q'l'm' ir SFX f2 ir iront/n'q'l'm't's' ir SFX f2 ir irais/n'q'j'l'm't' ir SFX f2 ir irait/n'q'l'm't's' ir SFX f2 ir irions/n'q'l't' ir SFX f2 ir iriez/n'q'l'm' ir SFX f2 ir iraient/n'q'l'm't's' ir SFX f2 ir isse/n'q'j'l't' ir SFX f2 ir isses/n'q'l'm' ir SFX f2 ir isse/n'q'l'm't's' ir SFX f2 ir ît/n'q'l'm't's' ir SFX f2 ir is/n'l'm' ir SFX f2 ir issons/n'l' ir SFX f2 ir issez/n'l'm' ir SFX f3 Y 33 SFX f3 ir ir/m't's' ir SFX f3 ir issant/m't's' ir SFX f3 ir is/m't' ir SFX f3 ir it/s' ir SFX f3 ir issons ir SFX f3 ir issez ir SFX f3 ir issent/s' ir SFX f3 ir issais/m't' ir SFX f3 ir issait/s' ir SFX f3 ir issions ir SFX f3 ir issiez ir SFX f3 ir issaient/s' ir SFX f3 ir îmes ir SFX f3 ir îtes ir SFX f3 ir irent/s' ir SFX f3 ir irai/m' ir SFX f3 ir iras/t' ir SFX f3 ir ira/s' ir SFX f3 ir irons ir SFX f3 ir irez ir SFX f3 ir iront/s' ir SFX f3 ir irais/m't' ir SFX f3 ir irait/s' ir SFX f3 ir irions ir SFX f3 ir iriez ir SFX f3 ir iraient/s' ir SFX f3 ir isse/m' ir SFX f3 ir isses/t' ir SFX f3 ir isse/s' ir SFX f3 ir ît/s' ir SFX f3 ir is/t' ir SFX f3 ir issons ir SFX f3 ir issez ir SFX f4 Y 33 SFX f4 ir ir/n'q'd'l'm't's' ir SFX f4 ir issant/n'q'l'm't's' ir SFX f4 ir is/n'q'j'l'm't' ir SFX f4 ir it/n'q'l'm't's' ir SFX f4 ir issons/n'q'l't' ir SFX f4 ir issez/n'q'l'm' ir SFX f4 ir issent/n'q'l'm't's' ir SFX f4 ir issais/n'q'j'l'm't' ir SFX f4 ir issait/n'q'l'm't's' ir SFX f4 ir issions/n'q'l't' ir SFX f4 ir issiez/n'q'l'm' ir SFX f4 ir issaient/n'q'l'm't's' ir SFX f4 ir îmes/n'q'l't' ir SFX f4 ir îtes/n'q'l'm' ir SFX f4 ir irent/n'q'l'm't's' ir SFX f4 ir irai/n'q'j'l'm't' ir SFX f4 ir iras/n'q'l'm't' ir SFX f4 ir ira/n'q'l'm't's' ir SFX f4 ir irons/n'q'l't' ir SFX f4 ir irez/n'q'l'm' ir SFX f4 ir iront/n'q'l'm't's' ir SFX f4 ir irais/n'q'j'l'm't' ir SFX f4 ir irait/n'q'l'm't's' ir SFX f4 ir irions/n'q'l't' ir SFX f4 ir iriez/n'q'l'm' ir SFX f4 ir iraient/n'q'l'm't's' ir SFX f4 ir isse/n'q'j'l'm't' ir SFX f4 ir isses/n'q'l'm't' ir SFX f4 ir isse/n'q'l'm't's' ir SFX f4 ir ît/n'q'l'm't's' ir SFX f4 ir is/n'l'm't' ir SFX f4 ir issons/n'l' ir SFX f4 ir issez/n'l'm' ir SFX f5 Y 33 SFX f5 ir ir/n'q'd'm't's' ir SFX f5 ir issant/n'q'm't's' ir SFX f5 ir is/n'j'm't' ir SFX f5 ir it/n'q'm't's' ir SFX f5 ir issons/n't' ir SFX f5 ir issez/n'm' ir SFX f5 ir issent/n'q'm't's' ir SFX f5 ir issais/n'j'm't' ir SFX f5 ir issait/n'q'm't's' ir SFX f5 ir issions/n't' ir SFX f5 ir issiez/n'm' ir SFX f5 ir issaient/n'q'm't's' ir SFX f5 ir îmes/n't' ir SFX f5 ir îtes/n'm' ir SFX f5 ir irent/n'q'm't's' ir SFX f5 ir irai/n'j'm't' ir SFX f5 ir iras/n'm't' ir SFX f5 ir ira/n'q'm't's' ir SFX f5 ir irons/n't' ir SFX f5 ir irez/n'm' ir SFX f5 ir iront/n'q'm't's' ir SFX f5 ir irais/n'j'm't' ir SFX f5 ir irait/n'q'm't's' ir SFX f5 ir irions/n't' ir SFX f5 ir iriez/n'm' ir SFX f5 ir iraient/n'q'm't's' ir SFX f5 ir isse/n'j'm't' ir SFX f5 ir isses/n'm't' ir SFX f5 ir isse/n'q'm't's' ir SFX f5 ir ît/n'q'm't's' ir SFX f5 ir is/n'm' ir SFX f5 ir issons/n' ir SFX f5 ir issez/n'm' ir SFX fA N 37 SFX fA aïr aïssant aïr SFX fA aïr aï aïr SFX fA aïr aïs aïr SFX fA aïr aïe aïr SFX fA aïr aïes aïr SFX fA aïr ais aïr SFX fA aïr ait aïr SFX fA aïr aïssons aïr SFX fA aïr aïssez aïr SFX fA aïr aïssent aïr SFX fA aïr aïssais aïr SFX fA aïr aïssait aïr SFX fA aïr aïssions aïr SFX fA aïr aïssiez aïr SFX fA aïr aïssaient aïr SFX fA aïr aïs aïr SFX fA aïr aït aïr SFX fA aïr aïmes aïr SFX fA aïr aïtes aïr SFX fA aïr aïrent aïr SFX fA aïr aïrai aïr SFX fA aïr aïras aïr SFX fA aïr aïra aïr SFX fA aïr aïrons aïr SFX fA aïr aïrez aïr SFX fA aïr aïront aïr SFX fA aïr aïrais aïr SFX fA aïr aïrait aïr SFX fA aïr aïrions aïr SFX fA aïr aïriez aïr SFX fA aïr aïraient aïr SFX fA aïr aïsse aïr SFX fA aïr aïsses aïr SFX fA aïr aïsse aïr SFX fA aïr ais aïr SFX fA aïr aïssons aïr SFX fA aïr aïssez aïr SFX fB Y 29 SFX fB haïr haïr/s' aïr SFX fB haïr haïssant/s' aïr SFX fB haïr haï aïr SFX fB haïr haïs aïr SFX fB haïr haïe aïr SFX fB haïr haïes aïr SFX fB haïr hait/s' aïr SFX fB haïr haïssons aïr SFX fB haïr haïssez aïr SFX fB haïr haïssent/s' aïr SFX fB haïr haïssait/s' aïr SFX fB haïr haïssions aïr SFX fB haïr haïssiez aïr SFX fB haïr haïssaient/s' aïr SFX fB haïr haït/s' aïr SFX fB haïr haïmes aïr SFX fB haïr haïtes aïr SFX fB haïr haïrent/s' aïr SFX fB haïr haïra/s' aïr SFX fB haïr haïrons aïr SFX fB haïr haïrez aïr SFX fB haïr haïront/s' aïr SFX fB haïr haïrait/s' aïr SFX fB haïr haïrions aïr SFX fB haïr haïriez aïr SFX fB haïr haïraient/s' aïr SFX fB haïr haïsse/s' aïr SFX fB haïr haïssons-nous aïr SFX fB haïr haïssez-vous aïr SFX fC Y 11 SFX fC partir partir/n'q'd'l'm't's' impartir SFX fC partir partissant/n'q'l'm't's' impartir SFX fC partir parti/q' impartir SFX fC partir partis/q' impartir SFX fC partir partie/q' impartir SFX fC partir parties/q' impartir SFX fC partir partis/n'q'j'l'm't' impartir SFX fC partir partit/n'q'l'm't's' impartir SFX fC partir partissons/n'q'l't' impartir SFX fC partir partissez/n'q'l'm' impartir SFX fC partir partissent/n'q'l'm't's' impartir SFX fD N 11 SFX fD ortir ortissant sortir SFX fD ortir ortit sortir SFX fD ortir ortissent sortir SFX fD ortir ortissait sortir SFX fD ortir ortissaient sortir SFX fD ortir ortira sortir SFX fD ortir ortiront sortir SFX fD ortir ortirait sortir SFX fD ortir ortiraient sortir SFX fD ortir ortisse sortir SFX fD ortir ortît sortir SFX fY N 37 SFX fY uïr uïr/s' uïr SFX fY uïr uïssant/m't's' uïr SFX fY uïr uï uïr SFX fY uïr uïs uïr SFX fY uïr uïe uïr SFX fY uïr uïes uïr SFX fY uïr uïs/m't' uïr SFX fY uïr uït/s' uïr SFX fY uïr uïssons uïr SFX fY uïr uïssez uïr SFX fY uïr uïssent/s' uïr SFX fY uïr uïssais/m't' uïr SFX fY uïr uïssait/s' uïr SFX fY uïr uïssions uïr SFX fY uïr uïssiez uïr SFX fY uïr uïssaient/s' uïr SFX fY uïr uîmes uïr SFX fY uïr uîtes uïr SFX fY uïr uïrent/s' uïr SFX fY uïr uïrai/m' uïr SFX fY uïr uïras/t' uïr SFX fY uïr uïra/s' uïr SFX fY uïr uïrons uïr SFX fY uïr uïrez uïr SFX fY uïr uïront/s' uïr SFX fY uïr uïrais/m't' uïr SFX fY uïr uïrait/s' uïr SFX fY uïr uïrions uïr SFX fY uïr uïriez uïr SFX fY uïr uïraient/s' uïr SFX fY uïr uïsse/m' uïr SFX fY uïr uïsses/t' uïr SFX fY uïr uïsse/s' uïr SFX fY uïr uît/s' uïr SFX fY uïr uïs/t' uïr SFX fY uïr uïssons uïr SFX fY uïr uïssez uïr SFX fZ N 7 SFX fZ gir gissant agir SFX fZ gir git agir SFX fZ gir gissait agir SFX fZ gir gira agir SFX fZ gir girait agir SFX fZ gir gisse agir SFX fZ gir gît agir SFX p+ Y 8 SFX p+ er é/L'D'Q' er SFX p+ er és/D'Q' er SFX p+ er ée/L'D'Q' er SFX p+ er ées/D'Q' er SFX p+ ir i/L'D'Q' ir SFX p+ ir is/D'Q' ir SFX p+ ir ie/L'D'Q' ir SFX p+ ir ies/D'Q' ir SFX p. Y 2 SFX p. er é/q' er SFX p. ir i/q' ir SFX i0 Y 39 SFX i0 enir enir/n'q'd' enir SFX i0 enir enant/n'q' enir SFX i0 enir iens/n'j' enir SFX i0 enir ient/n'q' enir SFX i0 enir enons/n' enir SFX i0 enir enez/n' enir SFX i0 enir iennent/n'q' enir SFX i0 enir enais/n'j' enir SFX i0 enir enait/n'q' enir SFX i0 enir enions/n' enir SFX i0 enir eniez/n' enir SFX i0 enir enaient/n'q' enir SFX i0 enir ins/n'j' enir SFX i0 enir int/n'q' enir SFX i0 enir înmes/n' enir SFX i0 enir întes/n' enir SFX i0 enir inrent/n'q' enir SFX i0 enir iendrai/n'j' enir SFX i0 enir iendras/n' enir SFX i0 enir iendra/n'q' enir SFX i0 enir iendrons/n' enir SFX i0 enir iendrez/n' enir SFX i0 enir iendront/n'q' enir SFX i0 enir iendrais/n'j' enir SFX i0 enir iendrait/n'q' enir SFX i0 enir iendrions/n' enir SFX i0 enir iendriez/n' enir SFX i0 enir iendraient/n'q' enir SFX i0 enir ienne/n'q'j' enir SFX i0 enir iennes/n' enir SFX i0 enir insse/n'j' enir SFX i0 enir insses/n' enir SFX i0 enir înt/n'q' enir SFX i0 enir inssions/n' enir SFX i0 enir inssiez/n' enir SFX i0 enir inssent/n'q' enir SFX i0 enir iens/n' enir SFX i0 enir enons/n' enir SFX i0 enir enez/n' enir SFX i1 Y 39 SFX i1 enir enir/n'q'd'l'm't's' enir SFX i1 enir enant/n'q'l'm't's' enir SFX i1 enir iens/n'q'j'l'm't' enir SFX i1 enir ient/n'q'l'm't's' enir SFX i1 enir enons/n'q'l't' enir SFX i1 enir enez/n'q'l'm' enir SFX i1 enir iennent/n'q'l'm't's' enir SFX i1 enir enais/n'q'j'l'm't' enir SFX i1 enir enait/n'q'l'm't's' enir SFX i1 enir enions/n'q'l't' enir SFX i1 enir eniez/n'q'l'm' enir SFX i1 enir enaient/n'q'l'm't's' enir SFX i1 enir ins/n'q'j'l'm't' enir SFX i1 enir int/n'q'l'm't's' enir SFX i1 enir înmes/n'q'l't' enir SFX i1 enir întes/n'q'l'm' enir SFX i1 enir inrent/n'q'l'm't's' enir SFX i1 enir iendrai/n'q'j'l'm't' enir SFX i1 enir iendras/n'q'l'm't' enir SFX i1 enir iendra/n'q'l'm't's' enir SFX i1 enir iendrons/n'q'l't' enir SFX i1 enir iendrez/n'q'l'm' enir SFX i1 enir iendront/n'q'l'm't's' enir SFX i1 enir iendrais/n'q'j'l'm't' enir SFX i1 enir iendrait/n'q'l'm't's' enir SFX i1 enir iendrions/n'q'l't' enir SFX i1 enir iendriez/n'q'l'm' enir SFX i1 enir iendraient/n'q'l'm't's' enir SFX i1 enir ienne/n'q'j'l'm't's' enir SFX i1 enir iennes/n'l'm't' enir SFX i1 enir insse/n'q'j'l'm't' enir SFX i1 enir insses/n'q'l'm't' enir SFX i1 enir înt/n'q'l'm't's' enir SFX i1 enir inssions/n'q'l't' enir SFX i1 enir inssiez/n'q'l'm' enir SFX i1 enir inssent/n'q'l'm't's' enir SFX i1 enir iens/n'l'm't' enir SFX i1 enir enons/n'l' enir SFX i1 enir enez/n'l'm' enir SFX i2 Y 39 SFX i2 enir enir/m't's' enir SFX i2 enir enant/m't's' enir SFX i2 enir iens/m't' enir SFX i2 enir ient/s' enir SFX i2 enir enons enir SFX i2 enir enez enir SFX i2 enir iennent/s' enir SFX i2 enir enais/m't' enir SFX i2 enir enait/s' enir SFX i2 enir enions enir SFX i2 enir eniez enir SFX i2 enir enaient/s' enir SFX i2 enir ins/m't' enir SFX i2 enir int/s' enir SFX i2 enir înmes enir SFX i2 enir întes enir SFX i2 enir inrent/s' enir SFX i2 enir iendrai/m' enir SFX i2 enir iendras/t' enir SFX i2 enir iendra/s' enir SFX i2 enir iendrons enir SFX i2 enir iendrez enir SFX i2 enir iendront/s' enir SFX i2 enir iendrais/m't' enir SFX i2 enir iendrait/s' enir SFX i2 enir iendrions enir SFX i2 enir iendriez enir SFX i2 enir iendraient/s' enir SFX i2 enir ienne/m's' enir SFX i2 enir iennes/t' enir SFX i2 enir insse/m' enir SFX i2 enir insses/t' enir SFX i2 enir înt/s' enir SFX i2 enir inssions enir SFX i2 enir inssiez enir SFX i2 enir inssent/s' enir SFX i2 enir iens/t' enir SFX i2 enir enons enir SFX i2 enir enez enir SFX i5 N 38 SFX i5 tir tant tir SFX i5 tir s tir SFX i5 tir t tir SFX i5 tir tons tir SFX i5 tir tez tir SFX i5 tir tent tir SFX i5 tir tais tir SFX i5 tir tait tir SFX i5 tir tions tir SFX i5 tir tiez tir SFX i5 tir taient tir SFX i5 tir tis tir SFX i5 tir tit tir SFX i5 tir tîmes tir SFX i5 tir tîtes tir SFX i5 tir tirent tir SFX i5 tir tirai tir SFX i5 tir tiras tir SFX i5 tir tira tir SFX i5 tir tirons tir SFX i5 tir tirez tir SFX i5 tir tiront tir SFX i5 tir tirais tir SFX i5 tir tirait tir SFX i5 tir tirions tir SFX i5 tir tiriez tir SFX i5 tir tiraient tir SFX i5 tir te tir SFX i5 tir tes tir SFX i5 tir tisse tir SFX i5 tir tisses tir SFX i5 tir tît tir SFX i5 tir tissions tir SFX i5 tir tissiez tir SFX i5 tir tissent tir SFX i5 tir s tir SFX i5 tir tons tir SFX i5 tir tez tir SFX iA Y 19 SFX iA dvenir dvenir/n'q'd'm't' venir SFX iA dvenir dvenant/n'q'm't' venir SFX iA dvenir dvenu/Q' venir SFX iA dvenir dvenus/Q' venir SFX iA dvenir dvenue/Q' venir SFX iA dvenir dvenues/Q' venir SFX iA dvenir dvient/n'q'm't' venir SFX iA dvenir dviennent/n'q' venir SFX iA dvenir dvenait/n'q'm't' venir SFX iA dvenir dvenaient/n'q' venir SFX iA dvenir dvint/n'q'm't' venir SFX iA dvenir dvinrent/n'q' venir SFX iA dvenir dviendra/n'q'm't' venir SFX iA dvenir dviendront/n'q' venir SFX iA dvenir dviendrait/n'q'm't' venir SFX iA dvenir dviendraient/n'q' venir SFX iA dvenir dvienne/n'q'm't' venir SFX iA dvenir dvînt/n'q'm't' venir SFX iA dvenir dvinssent/n'q' venir SFX iB Y 40 SFX iB partenir partenir/n'q'd'm't's' tenir SFX iB partenir partenant/n'q'm't's' tenir SFX iB partenir partenu/q' tenir SFX iB partenir partiens/n'j'm't' tenir SFX iB partenir partient/n'q'm't's' tenir SFX iB partenir partenons/n't' tenir SFX iB partenir partenez/n'm' tenir SFX iB partenir partiennent/n'q'm't's' tenir SFX iB partenir partenais/n'j'm't' tenir SFX iB partenir partenait/n'q'm't's' tenir SFX iB partenir partenions/n't' tenir SFX iB partenir parteniez/n'm' tenir SFX iB partenir partenaient/n'q'm't's' tenir SFX iB partenir partins/n'j'm't' tenir SFX iB partenir partint/n'q'm't's' tenir SFX iB partenir partînmes/n't' tenir SFX iB partenir partîntes/n'm' tenir SFX iB partenir partinrent/n'q'm't's' tenir SFX iB partenir partiendrai/n'j'm't' tenir SFX iB partenir partiendras/n'm't' tenir SFX iB partenir partiendra/n'q'm't's' tenir SFX iB partenir partiendrons/n't' tenir SFX iB partenir partiendrez/n'm' tenir SFX iB partenir partiendront/n'q'm't's' tenir SFX iB partenir partiendrais/n'j'm't' tenir SFX iB partenir partiendrait/n'q'm't's' tenir SFX iB partenir partiendrions/n't' tenir SFX iB partenir partiendriez/n'm' tenir SFX iB partenir partiendraient/n'q'm't's' tenir SFX iB partenir partienne/n'q'j'm't's' tenir SFX iB partenir partiennes/n'm't' tenir SFX iB partenir partinsse/n'j'm't' tenir SFX iB partenir partinsses/n'm't' tenir SFX iB partenir partînt/n'q'm't's' tenir SFX iB partenir partinssions/n't' tenir SFX iB partenir partinssiez/n'm' tenir SFX iB partenir partinssent/n'q'm't's' tenir SFX iB partenir partiens/n'm't' tenir SFX iB partenir partenons/n' tenir SFX iB partenir partenez/n'm' tenir SFX iC Y 41 SFX iC rir rir/n'q'd'l'm't's' [vf]rir SFX iC rir rant/n'q'l'm't's' [vf]rir SFX iC rir ert/L'D'Q' [vf]rir SFX iC rir erts/D'Q' [vf]rir SFX iC rir erte/L'D'Q' [vf]rir SFX iC rir ertes/D'Q' [vf]rir SFX iC rir re/n'q'j'l'm't's' [vf]rir SFX iC rir res/n'q'l'm't' [vf]rir SFX iC rir rons/n'q'l't' [vf]rir SFX iC rir rez/n'q'l'm' [vf]rir SFX iC rir rent/n'q'l'm't's' [vf]rir SFX iC rir rais/n'q'j'l'm't' [vf]rir SFX iC rir rait/n'q'l'm't's' [vf]rir SFX iC rir rions/n'q'l't' [vf]rir SFX iC rir riez/n'q'l'm' [vf]rir SFX iC rir raient/n'q'l'm't's' [vf]rir SFX iC rir ris/n'q'j'l'm't' [vf]rir SFX iC rir rit/n'q'l'm't's' [vf]rir SFX iC rir rîmes/n'q'l't' [vf]rir SFX iC rir rîtes/n'q'l'm' [vf]rir SFX iC rir rirent/n'q'l'm't's' [vf]rir SFX iC rir rirai/n'q'j'l'm't' [vf]rir SFX iC rir riras/n'q'l'm't' [vf]rir SFX iC rir rira/n'q'l'm't's' [vf]rir SFX iC rir rirons/n'q'l't' [vf]rir SFX iC rir rirez/n'q'l'm' [vf]rir SFX iC rir riront/n'q'l'm't's' [vf]rir SFX iC rir rirais/n'q'j'l'm't' [vf]rir SFX iC rir rirait/n'q'l'm't's' [vf]rir SFX iC rir ririons/n'q'l't' [vf]rir SFX iC rir ririez/n'q'l'm' [vf]rir SFX iC rir riraient/n'q'l'm't's' [vf]rir SFX iC rir risse/n'q'j'l'm't' [vf]rir SFX iC rir risses/n'q'l'm't' [vf]rir SFX iC rir rît/n'q'l'm't's' [vf]rir SFX iC rir rissions/n'q'l't' [vf]rir SFX iC rir rissiez/n'q'l'm' [vf]rir SFX iC rir rissent/n'q'l'm't's' [vf]rir SFX iC rir re/n'l'm't' [vf]rir SFX iC rir rons/n'l' [vf]rir SFX iC rir rez/n'l'm' [vf]rir SFX iD Y 43 SFX iD courir courir/n'q'd' courir SFX iD courir courant/n'q' courir SFX iD courir couru courir SFX iD courir courus courir SFX iD courir courue courir SFX iD courir courues courir SFX iD courir cours/n'j' courir SFX iD courir court/n' courir SFX iD courir courons/n' courir SFX iD courir courez/n' courir SFX iD courir courent/n' courir SFX iD courir courais/n'j' courir SFX iD courir courait/n' courir SFX iD courir courions/n' courir SFX iD courir couriez/n' courir SFX iD courir couraient/n' courir SFX iD courir courus/n'j' courir SFX iD courir courut/n' courir SFX iD courir courûmes/n' courir SFX iD courir courûtes/n' courir SFX iD courir coururent/n' courir SFX iD courir courrai/n'j' courir SFX iD courir courras/n' courir SFX iD courir courra/n' courir SFX iD courir courrons/n' courir SFX iD courir courrez/n' courir SFX iD courir courront/n' courir SFX iD courir courrais/n'j' courir SFX iD courir courrait/n' courir SFX iD courir courrions/n' courir SFX iD courir courriez/n' courir SFX iD courir courraient/n' courir SFX iD courir coure/n'j' courir SFX iD courir coures/n' courir SFX iD courir courusse/n'j' courir SFX iD courir courusses/n' courir SFX iD courir courût/n' courir SFX iD courir courussions/n' courir SFX iD courir courussiez/n' courir SFX iD courir courussent/n' courir SFX iD courir cours/n' courir SFX iD courir courons/n' courir SFX iD courir courez/n' courir SFX iE Y 43 SFX iE ourir ourir/n'q'd'l'm't's' courir SFX iE ourir ourant/n'q'm't's' courir SFX iE ourir ouru/L'D'Q' courir SFX iE ourir ourus/D'Q' courir SFX iE ourir ourue/L'D'Q' courir SFX iE ourir ourues/D'Q' courir SFX iE ourir ours/n'q'j'l'm't' courir SFX iE ourir ourt/n'q'l's' courir SFX iE ourir ourons/n'q'l' courir SFX iE ourir ourez/n'q'l' courir SFX iE ourir ourent/n'q'l's' courir SFX iE ourir ourais/n'q'j'l'm't' courir SFX iE ourir ourait/n'q'l's' courir SFX iE ourir ourions/n'q'l' courir SFX iE ourir ouriez/n'q'l' courir SFX iE ourir ouraient/n'q'l's' courir SFX iE ourir ourus/n'q'j'l'm't' courir SFX iE ourir ourut/n'q'l's' courir SFX iE ourir ourûmes/n'q'l' courir SFX iE ourir ourûtes/n'q'l' courir SFX iE ourir oururent/n'q'l's' courir SFX iE ourir ourrai/n'q'j'l'm' courir SFX iE ourir ourras/n'q'l't' courir SFX iE ourir ourra/n'q'l's' courir SFX iE ourir ourrons/n'q'l' courir SFX iE ourir ourrez/n'q'l' courir SFX iE ourir ourront/n'q'l's' courir SFX iE ourir ourrais/n'q'j'l'm't' courir SFX iE ourir ourrait/n'q'l's' courir SFX iE ourir ourrions/n'q'l' courir SFX iE ourir ourriez/n'q'l' courir SFX iE ourir ourraient/n'q'l's' courir SFX iE ourir oure/n'q'j'l'm's' courir SFX iE ourir oures/n'l't' courir SFX iE ourir ourusse/n'q'j'l'm' courir SFX iE ourir ourusses/n'q'l't' courir SFX iE ourir ourût/n'q'l's' courir SFX iE ourir ourussions/n'q'l' courir SFX iE ourir ourussiez/n'q'l' courir SFX iE ourir ourussent/n'q'l's' courir SFX iE ourir ours/n'l' courir SFX iE ourir ourons/n'l' courir SFX iE ourir ourez/n'l' courir SFX iF N 42 SFX iF ervir ervant servir SFX iF ervir ervi servir SFX iF ervir ervis servir SFX iF ervir ervie servir SFX iF ervir ervies servir SFX iF ervir ers servir SFX iF ervir ert servir SFX iF ervir ervons servir SFX iF ervir ervez servir SFX iF ervir ervent servir SFX iF ervir ervais servir SFX iF ervir ervait servir SFX iF ervir ervions servir SFX iF ervir erviez servir SFX iF ervir ervaient servir SFX iF ervir ervis servir SFX iF ervir ervit servir SFX iF ervir ervîmes servir SFX iF ervir ervîtes servir SFX iF ervir ervirent servir SFX iF ervir ervirai servir SFX iF ervir erviras servir SFX iF ervir ervira servir SFX iF ervir ervirons servir SFX iF ervir ervirez servir SFX iF ervir erviront servir SFX iF ervir ervirais servir SFX iF ervir ervirait servir SFX iF ervir ervirions servir SFX iF ervir erviriez servir SFX iF ervir erviraient servir SFX iF ervir erve servir SFX iF ervir erves servir SFX iF ervir ervisse servir SFX iF ervir ervisses servir SFX iF ervir ervît servir SFX iF ervir ervissions servir SFX iF ervir ervissiez servir SFX iF ervir ervissent servir SFX iF ervir ers servir SFX iF ervir ervons servir SFX iF ervir ervez servir SFX iG N 42 SFX iG êtir êtant vêtir SFX iG êtir êtu vêtir SFX iG êtir êtus vêtir SFX iG êtir êtue vêtir SFX iG êtir êtues vêtir SFX iG êtir êts vêtir SFX iG êtir êt vêtir SFX iG êtir êtons vêtir SFX iG êtir êtez vêtir SFX iG êtir êtent vêtir SFX iG êtir êtais vêtir SFX iG êtir êtait vêtir SFX iG êtir êtions vêtir SFX iG êtir êtiez vêtir SFX iG êtir êtaient vêtir SFX iG êtir êtis vêtir SFX iG êtir êtit vêtir SFX iG êtir êtîmes vêtir SFX iG êtir êtîtes vêtir SFX iG êtir êtirent vêtir SFX iG êtir êtirai vêtir SFX iG êtir êtiras vêtir SFX iG êtir êtira vêtir SFX iG êtir êtirons vêtir SFX iG êtir êtirez vêtir SFX iG êtir êtiront vêtir SFX iG êtir êtirais vêtir SFX iG êtir êtirait vêtir SFX iG êtir êtirions vêtir SFX iG êtir êtiriez vêtir SFX iG êtir êtiraient vêtir SFX iG êtir ête vêtir SFX iG êtir êtes vêtir SFX iG êtir êtisse vêtir SFX iG êtir êtisses vêtir SFX iG êtir êtît vêtir SFX iG êtir êtissions vêtir SFX iG êtir êtissiez vêtir SFX iG êtir êtissent vêtir SFX iG êtir êts vêtir SFX iG êtir êtons vêtir SFX iG êtir êtez vêtir SFX iI N 39 SFX iI ormir ormant dormir SFX iI ormir ormi dormir SFX iI ormir ors dormir SFX iI ormir ort dormir SFX iI ormir ormons dormir SFX iI ormir ormez dormir SFX iI ormir orment dormir SFX iI ormir ormais dormir SFX iI ormir ormait dormir SFX iI ormir ormions dormir SFX iI ormir ormiez dormir SFX iI ormir ormaient dormir SFX iI ormir ormis dormir SFX iI ormir ormit dormir SFX iI ormir ormîmes dormir SFX iI ormir ormîtes dormir SFX iI ormir ormirent dormir SFX iI ormir ormirai dormir SFX iI ormir ormiras dormir SFX iI ormir ormira dormir SFX iI ormir ormirons dormir SFX iI ormir ormirez dormir SFX iI ormir ormiront dormir SFX iI ormir ormirais dormir SFX iI ormir ormirait dormir SFX iI ormir ormirions dormir SFX iI ormir ormiriez dormir SFX iI ormir ormiraient dormir SFX iI ormir orme dormir SFX iI ormir ormes dormir SFX iI ormir ormisse dormir SFX iI ormir ormisses dormir SFX iI ormir ormît dormir SFX iI ormir ormissions dormir SFX iI ormir ormissiez dormir SFX iI ormir ormissent dormir SFX iI ormir ors dormir SFX iI ormir ormons dormir SFX iI ormir ormez dormir SFX iJ Y 43 SFX iJ dormir dormir/n'q'd'l'm't's' dormir SFX iJ dormir dormant/n'q'l'm't's' dormir SFX iJ dormir dormi/L'D'Q' dormir SFX iJ dormir dormis/D'Q' dormir SFX iJ dormir dormie/L'D'Q' dormir SFX iJ dormir dormies/D'Q' dormir SFX iJ dormir dors/n'q'j'l'm't' dormir SFX iJ dormir dort/n'q'l'm't's' dormir SFX iJ dormir dormons/n'q'l't' dormir SFX iJ dormir dormez/n'q'l'm' dormir SFX iJ dormir dorment/n'q'l'm't's' dormir SFX iJ dormir dormais/n'q'j'l'm't' dormir SFX iJ dormir dormait/n'q'l'm't's' dormir SFX iJ dormir dormions/n'q'l't' dormir SFX iJ dormir dormiez/n'q'l'm' dormir SFX iJ dormir dormaient/n'q'l'm't's' dormir SFX iJ dormir dormis/n'q'j'l'm't' dormir SFX iJ dormir dormit/n'q'l'm't's' dormir SFX iJ dormir dormîmes/n'q'l't' dormir SFX iJ dormir dormîtes/n'q'l'm' dormir SFX iJ dormir dormirent/n'q'l'm't's' dormir SFX iJ dormir dormirai/n'q'j'l'm't' dormir SFX iJ dormir dormiras/n'q'l'm't' dormir SFX iJ dormir dormira/n'q'l'm't's' dormir SFX iJ dormir dormirons/n'q'l't' dormir SFX iJ dormir dormirez/n'q'l'm' dormir SFX iJ dormir dormiront/n'q'l'm't's' dormir SFX iJ dormir dormirais/n'q'j'l'm't' dormir SFX iJ dormir dormirait/n'q'l'm't's' dormir SFX iJ dormir dormirions/n'q'l't' dormir SFX iJ dormir dormiriez/n'q'l'm' dormir SFX iJ dormir dormiraient/n'q'l'm't's' dormir SFX iJ dormir dorme/n'q'j'l'm't's' dormir SFX iJ dormir dormes/n'l'm't' dormir SFX iJ dormir dormisse/n'q'j'l'm't' dormir SFX iJ dormir dormisses/n'q'l'm't' dormir SFX iJ dormir dormît/n'q'l'm't's' dormir SFX iJ dormir dormissions/n'q'l't' dormir SFX iJ dormir dormissiez/n'q'l'm' dormir SFX iJ dormir dormissent/n'q'l'm't's' dormir SFX iJ dormir dors/n'l'm't' dormir SFX iJ dormir dormons/n'l' dormir SFX iJ dormir dormez/n'l'm' dormir SFX iK Y 42 SFX iK quérir quérir/n'q'd'l'm't's' quérir SFX iK quérir quérant/n'q'l'm't's' quérir SFX iK quérir quis/L'D'Q' quérir SFX iK quérir quise/L'D'Q' quérir SFX iK quérir quises/D'Q' quérir SFX iK quérir quiers/n'q'j'l'm't' quérir SFX iK quérir quiert/n'q'l'm't's' quérir SFX iK quérir quérons/n'q'l't' quérir SFX iK quérir quérez/n'q'l'm' quérir SFX iK quérir quièrent/n'q'l'm't's' quérir SFX iK quérir quérais/n'q'j'l'm't' quérir SFX iK quérir quérait/n'q'l'm't's' quérir SFX iK quérir quérions/n'q'l't' quérir SFX iK quérir quériez/n'q'l'm' quérir SFX iK quérir quéraient/n'q'l'm't's' quérir SFX iK quérir quis/n'q'j'l'm't' quérir SFX iK quérir quit/n'q'l'm't's' quérir SFX iK quérir quîmes/n'q'l't' quérir SFX iK quérir quîtes/n'q'l'm' quérir SFX iK quérir quirent/n'q'l'm't's' quérir SFX iK quérir querrai/n'q'j'l'm't' quérir SFX iK quérir querras/n'q'l'm't' quérir SFX iK quérir querra/n'q'l'm't's' quérir SFX iK quérir querrons/n'q'l't' quérir SFX iK quérir querrez/n'q'l'm' quérir SFX iK quérir querront/n'q'l'm't's' quérir SFX iK quérir querrais/n'q'j'l'm't' quérir SFX iK quérir querrait/n'q'l'm't's' quérir SFX iK quérir querrions/n'q'l't' quérir SFX iK quérir querriez/n'q'l'm' quérir SFX iK quérir querraient/n'q'l'm't's' quérir SFX iK quérir quière/n'q'j'l'm't's' quérir SFX iK quérir quières/n'l'm't' quérir SFX iK quérir quisse/n'q'j'l'm't' quérir SFX iK quérir quisses/n'q'l'm't' quérir SFX iK quérir quît/n'q'l'm't's' quérir SFX iK quérir quissions/n'q'l't' quérir SFX iK quérir quissiez/n'q'l'm' quérir SFX iK quérir quissent/n'q'l'm't's' quérir SFX iK quérir quiers/n'l'm't' quérir SFX iK quérir quérons/n'l' quérir SFX iK quérir quérez/n'l'm' quérir SFX iM Y 42 SFX iM quérir quérir/m't's' quérir SFX iM quérir quérant/m't's' quérir SFX iM quérir quis/L'D'Q' quérir SFX iM quérir quise/L'D'Q' quérir SFX iM quérir quises/D'Q' quérir SFX iM quérir quiers/m't' quérir SFX iM quérir quiert/s' quérir SFX iM quérir quérons quérir SFX iM quérir quérez quérir SFX iM quérir quièrent/s' quérir SFX iM quérir quérais/m't' quérir SFX iM quérir quérait/s' quérir SFX iM quérir quérions quérir SFX iM quérir quériez quérir SFX iM quérir quéraient/s' quérir SFX iM quérir quis/m't' quérir SFX iM quérir quit/s' quérir SFX iM quérir quîmes quérir SFX iM quérir quîtes quérir SFX iM quérir quirent/s' quérir SFX iM quérir querrai/m' quérir SFX iM quérir querras/t' quérir SFX iM quérir querra/s' quérir SFX iM quérir querrons quérir SFX iM quérir querrez quérir SFX iM quérir querront/s' quérir SFX iM quérir querrais/m't' quérir SFX iM quérir querrait/s' quérir SFX iM quérir querrions quérir SFX iM quérir querriez quérir SFX iM quérir querraient/s' quérir SFX iM quérir quière/m's' quérir SFX iM quérir quières/t' quérir SFX iM quérir quisse/m' quérir SFX iM quérir quisses/t' quérir SFX iM quérir quît/s' quérir SFX iM quérir quissions quérir SFX iM quérir quissiez quérir SFX iM quérir quissent/s' quérir SFX iM quérir quiers/t' quérir SFX iM quérir quérons quérir SFX iM quérir quérez quérir SFX iN N 40 SFX iN uir uyant fuir SFX iN uir ui fuir SFX iN uir uis fuir SFX iN uir uie fuir SFX iN uir uies fuir SFX iN uir uis fuir SFX iN uir uit fuir SFX iN uir uyons fuir SFX iN uir uyez fuir SFX iN uir uient fuir SFX iN uir uyais fuir SFX iN uir uyait fuir SFX iN uir uyions fuir SFX iN uir uyiez fuir SFX iN uir uyaient fuir SFX iN uir uîmes fuir SFX iN uir uîtes fuir SFX iN uir uirent fuir SFX iN uir uirai fuir SFX iN uir uiras fuir SFX iN uir uira fuir SFX iN uir uirons fuir SFX iN uir uirez fuir SFX iN uir uiront fuir SFX iN uir uirais fuir SFX iN uir uirait fuir SFX iN uir uirions fuir SFX iN uir uiriez fuir SFX iN uir uiraient fuir SFX iN uir uie fuir SFX iN uir uies fuir SFX iN uir uisse fuir SFX iN uir uisses fuir SFX iN uir uît fuir SFX iN uir uissions fuir SFX iN uir uissiez fuir SFX iN uir uissent fuir SFX iN uir uis fuir SFX iN uir uyons fuir SFX iN uir uyez fuir SFX iO Y 41 SFX iO fuir fuir/m't's' enfuir SFX iO fuir fuyant/m't's' enfuir SFX iO fuir fui/L'D'Q' enfuir SFX iO fuir fuis/D'Q' enfuir SFX iO fuir fuie/L'D'Q' enfuir SFX iO fuir fuies/D'Q' enfuir SFX iO fuir fuis/m't' enfuir SFX iO fuir fuit/s' enfuir SFX iO fuir fuyons enfuir SFX iO fuir fuyez enfuir SFX iO fuir fuient/s' enfuir SFX iO fuir fuyais/m't' enfuir SFX iO fuir fuyait/s' enfuir SFX iO fuir fuyions enfuir SFX iO fuir fuyiez enfuir SFX iO fuir fuyaient/s' enfuir SFX iO fuir fuîmes enfuir SFX iO fuir fuîtes enfuir SFX iO fuir fuirent/s' enfuir SFX iO fuir fuirai/m' enfuir SFX iO fuir fuiras/t' enfuir SFX iO fuir fuira/s' enfuir SFX iO fuir fuirons enfuir SFX iO fuir fuirez enfuir SFX iO fuir fuiront/s' enfuir SFX iO fuir fuirais/m't' enfuir SFX iO fuir fuirait/s' enfuir SFX iO fuir fuirions enfuir SFX iO fuir fuiriez enfuir SFX iO fuir fuiraient/s' enfuir SFX iO fuir fuie/m's' enfuir SFX iO fuir fuies/t' enfuir SFX iO fuir fuisse/m' enfuir SFX iO fuir fuisses/t' enfuir SFX iO fuir fuît/s' enfuir SFX iO fuir fuissions enfuir SFX iO fuir fuissiez enfuir SFX iO fuir fuissent/s' enfuir SFX iO fuir fuis/t' enfuir SFX iO fuir fuyons enfuir SFX iO fuir fuyez enfuir SFX iP N 42 SFX iP ourir ourant mourir SFX iP ourir ort mourir SFX iP ourir orts mourir SFX iP ourir orte mourir SFX iP ourir ortes mourir SFX iP ourir eurs mourir SFX iP ourir eurt mourir SFX iP ourir ourons mourir SFX iP ourir ourez mourir SFX iP ourir eurent mourir SFX iP ourir ourais mourir SFX iP ourir ourait mourir SFX iP ourir ourions mourir SFX iP ourir ouriez mourir SFX iP ourir ouraient mourir SFX iP ourir ourus mourir SFX iP ourir ourut mourir SFX iP ourir ourûmes mourir SFX iP ourir ourûtes mourir SFX iP ourir oururent mourir SFX iP ourir ourrai mourir SFX iP ourir ourras mourir SFX iP ourir ourra mourir SFX iP ourir ourrons mourir SFX iP ourir ourrez mourir SFX iP ourir ourront mourir SFX iP ourir ourrais mourir SFX iP ourir ourrait mourir SFX iP ourir ourrions mourir SFX iP ourir ourriez mourir SFX iP ourir ourraient mourir SFX iP ourir eure mourir SFX iP ourir eures mourir SFX iP ourir ourusse mourir SFX iP ourir ourusses mourir SFX iP ourir ourût mourir SFX iP ourir ourussions mourir SFX iP ourir ourussiez mourir SFX iP ourir ourussent mourir SFX iP ourir eurs mourir SFX iP ourir ourons mourir SFX iP ourir ourez mourir SFX iQ N 42 SFX iQ ouillir ouillant bouillir SFX iQ ouillir ouilli bouillir SFX iQ ouillir ouillis bouillir SFX iQ ouillir ouillie bouillir SFX iQ ouillir ouillies bouillir SFX iQ ouillir ous bouillir SFX iQ ouillir out bouillir SFX iQ ouillir ouillons bouillir SFX iQ ouillir ouillez bouillir SFX iQ ouillir ouillent bouillir SFX iQ ouillir ouillais bouillir SFX iQ ouillir ouillait bouillir SFX iQ ouillir ouillions bouillir SFX iQ ouillir ouilliez bouillir SFX iQ ouillir ouillaient bouillir SFX iQ ouillir ouillis bouillir SFX iQ ouillir ouillit bouillir SFX iQ ouillir ouillîmes bouillir SFX iQ ouillir ouillîtes bouillir SFX iQ ouillir ouillirent bouillir SFX iQ ouillir ouillirai bouillir SFX iQ ouillir ouilliras bouillir SFX iQ ouillir ouillira bouillir SFX iQ ouillir ouillirons bouillir SFX iQ ouillir ouillirez bouillir SFX iQ ouillir ouilliront bouillir SFX iQ ouillir ouillirais bouillir SFX iQ ouillir ouillirait bouillir SFX iQ ouillir ouillirions bouillir SFX iQ ouillir ouilliriez bouillir SFX iQ ouillir ouilliraient bouillir SFX iQ ouillir ouille bouillir SFX iQ ouillir ouilles bouillir SFX iQ ouillir ouillisse bouillir SFX iQ ouillir ouillisses bouillir SFX iQ ouillir ouillît bouillir SFX iQ ouillir ouillissions bouillir SFX iQ ouillir ouillissiez bouillir SFX iQ ouillir ouillissent bouillir SFX iQ ouillir ous bouillir SFX iQ ouillir ouillons bouillir SFX iQ ouillir ouillez bouillir SFX iR Y 41 SFX iR ueillir ueillir/n'q'd'l'm't's' cueillir SFX iR ueillir ueillant/n'q'l'm't's' cueillir SFX iR ueillir ueilli/L'D'Q' cueillir SFX iR ueillir ueillis/D'Q' cueillir SFX iR ueillir ueillie/L'D'Q' cueillir SFX iR ueillir ueillies/D'Q' cueillir SFX iR ueillir ueille/n'q'j'l'm't's' cueillir SFX iR ueillir ueilles/n'q'l'm' cueillir SFX iR ueillir ueillons/n'q'l't' cueillir SFX iR ueillir ueillez/n'q'l'm' cueillir SFX iR ueillir ueillent/n'q'l'm't's' cueillir SFX iR ueillir ueillais/n'q'j'l't' cueillir SFX iR ueillir ueillait/n'q'l'm't's' cueillir SFX iR ueillir ueillions/n'q'l't' cueillir SFX iR ueillir ueilliez/n'q'l'm' cueillir SFX iR ueillir ueillaient/n'q'l'm't's' cueillir SFX iR ueillir ueillis/n'q'j'l't' cueillir SFX iR ueillir ueillit/n'q'l'm't's' cueillir SFX iR ueillir ueillîmes/n'q'l't' cueillir SFX iR ueillir ueillîtes/n'q'l'm' cueillir SFX iR ueillir ueillirent/n'q'l'm't's' cueillir SFX iR ueillir ueillerai/n'q'j'l't' cueillir SFX iR ueillir ueilleras/n'q'l'm' cueillir SFX iR ueillir ueillera/n'q'l'm't's' cueillir SFX iR ueillir ueillerons/n'q'l't' cueillir SFX iR ueillir ueillerez/n'q'l'm' cueillir SFX iR ueillir ueilleront/n'q'l'm't's' cueillir SFX iR ueillir ueillerais/n'q'j'l't' cueillir SFX iR ueillir ueillerait/n'q'l'm't's' cueillir SFX iR ueillir ueillerions/n'q'l't' cueillir SFX iR ueillir ueilleriez/n'q'l'm' cueillir SFX iR ueillir ueilleraient/n'q'l'm't's' cueillir SFX iR ueillir ueillisse/n'q'j'l't' cueillir SFX iR ueillir ueillisses/n'q'l'm' cueillir SFX iR ueillir ueillît/n'q'l'm't's' cueillir SFX iR ueillir ueillissions/n'q'l't' cueillir SFX iR ueillir ueillissiez/n'q'l'm' cueillir SFX iR ueillir ueillissent/n'q'l'm't's' cueillir SFX iR ueillir ueille/n'l'm' cueillir SFX iR ueillir ueillons/n'l' cueillir SFX iR ueillir ueillez/n'l'm' cueillir SFX iS N 37 SFX iS aillir aillant aillir SFX iS aillir ailli aillir SFX iS aillir aille aillir SFX iS aillir ailles aillir SFX iS aillir aillons aillir SFX iS aillir aillez aillir SFX iS aillir aillent aillir SFX iS aillir aillais aillir SFX iS aillir aillait aillir SFX iS aillir aillions aillir SFX iS aillir ailliez aillir SFX iS aillir aillaient aillir SFX iS aillir aillis aillir SFX iS aillir aillit aillir SFX iS aillir aillîmes aillir SFX iS aillir aillîtes aillir SFX iS aillir aillirent aillir SFX iS aillir aillirai aillir SFX iS aillir ailliras aillir SFX iS aillir aillira aillir SFX iS aillir aillirons aillir SFX iS aillir aillirez aillir SFX iS aillir ailliront aillir SFX iS aillir aillirais aillir SFX iS aillir aillirait aillir SFX iS aillir aillirions aillir SFX iS aillir ailliriez aillir SFX iS aillir ailliraient aillir SFX iS aillir aillisse aillir SFX iS aillir aillisses aillir SFX iS aillir aillît aillir SFX iS aillir aillissions aillir SFX iS aillir aillissiez aillir SFX iS aillir aillissent aillir SFX iS aillir aille aillir SFX iS aillir aillons aillir SFX iS aillir aillez aillir SFX iT Y 41 SFX iT saillir saillir/n'q'd'l'm't's' aillir SFX iT saillir saillant/n'q'l'm't's' aillir SFX iT saillir sailli/L'D'Q' aillir SFX iT saillir saillis/D'Q' aillir SFX iT saillir saillie/L'D'Q' aillir SFX iT saillir saillies/D'Q' aillir SFX iT saillir saille/n'q'j'l'm't's' aillir SFX iT saillir sailles/n'q'l'm't' aillir SFX iT saillir saillons/n'q'l't' aillir SFX iT saillir saillez/n'q'l'm' aillir SFX iT saillir saillent/n'q'l'm't's' aillir SFX iT saillir saillais/n'q'j'l'm't' aillir SFX iT saillir saillait/n'q'l'm't's' aillir SFX iT saillir saillions/n'q'l't' aillir SFX iT saillir sailliez/n'q'l'm' aillir SFX iT saillir saillaient/n'q'l'm't's' aillir SFX iT saillir saillis/n'q'j'l'm't' aillir SFX iT saillir saillit/n'q'l'm't's' aillir SFX iT saillir saillîmes/n'q'l't' aillir SFX iT saillir saillîtes/n'q'l'm' aillir SFX iT saillir saillirent/n'q'l'm't's' aillir SFX iT saillir saillirai/n'q'j'l'm't' aillir SFX iT saillir sailliras/n'q'l'm't' aillir SFX iT saillir saillira/n'q'l'm't's' aillir SFX iT saillir saillirons/n'q'l't' aillir SFX iT saillir saillirez/n'q'l'm' aillir SFX iT saillir sailliront/n'q'l'm't's' aillir SFX iT saillir saillirais/n'q'j'l'm't' aillir SFX iT saillir saillirait/n'q'l'm't's' aillir SFX iT saillir saillirions/n'q'l't' aillir SFX iT saillir sailliriez/n'q'l'm' aillir SFX iT saillir sailliraient/n'q'l'm't's' aillir SFX iT saillir saillisse/n'q'j'l'm't' aillir SFX iT saillir saillisses/n'q'l'm't' aillir SFX iT saillir saillît/n'q'l'm't's' aillir SFX iT saillir saillissions/n'q'l't' aillir SFX iT saillir saillissiez/n'q'l'm' aillir SFX iT saillir saillissent/n'q'l'm't's' aillir SFX iT saillir saille/n'l'm' aillir SFX iT saillir saillons/n'l' aillir SFX iT saillir saillez/n'l'm' aillir SFX iU N 36 SFX iU aillir aillant faillir SFX iU aillir ailli faillir SFX iU aillir aux faillir SFX iU aillir aut faillir SFX iU aillir aillons faillir SFX iU aillir aillez faillir SFX iU aillir aillent faillir SFX iU aillir aillais faillir SFX iU aillir aillait faillir SFX iU aillir aillions faillir SFX iU aillir ailliez faillir SFX iU aillir aillaient faillir SFX iU aillir aillis faillir SFX iU aillir aillit faillir SFX iU aillir aillîmes faillir SFX iU aillir aillîtes faillir SFX iU aillir aillirent faillir SFX iU aillir aillirai faillir SFX iU aillir ailliras faillir SFX iU aillir aillira faillir SFX iU aillir aillirons faillir SFX iU aillir aillirez faillir SFX iU aillir ailliront faillir SFX iU aillir aillirais faillir SFX iU aillir aillirait faillir SFX iU aillir aillirions faillir SFX iU aillir ailliriez faillir SFX iU aillir ailliraient faillir SFX iU aillir aille faillir SFX iU aillir ailles faillir SFX iU aillir aillisse faillir SFX iU aillir aillisses faillir SFX iU aillir aillît faillir SFX iU aillir aillissions faillir SFX iU aillir aillissiez faillir SFX iU aillir aillissent faillir SFX iV N 11 SFX iV ésir isant gésir SFX iV ésir is gésir SFX iV ésir ît gésir SFX iV ésir isons gésir SFX iV ésir isez gésir SFX iV ésir isent gésir SFX iV ésir isais gésir SFX iV ésir isait gésir SFX iV ésir isions gésir SFX iV ésir isiez gésir SFX iV ésir isaient gésir SFX iW Y 54 SFX iW uïr uïr/n'q'd'l'm't's' ouïr SFX iW uïr yant/n'q'l'm't's' ouïr SFX iW uïr uï/L'D'Q' ouïr SFX iW uïr uïs/D'Q' ouïr SFX iW uïr uïe/L'D'Q' ouïr SFX iW uïr uïes/D'Q' ouïr SFX iW uïr is/n'q'j'l'm't' ouïr SFX iW uïr it/n'q'l'm't' ouïr SFX iW uïr yons/n'q'l't' ouïr SFX iW uïr yez/n'q'l'm' ouïr SFX iW uïr ient/n'q'l'm't's' ouïr SFX iW uïr yais/n'q'j'l'm't' ouïr SFX iW uïr yait/n'q'l'm't' ouïr SFX iW uïr yions/n'q'l't' ouïr SFX iW uïr yiez/n'q'l'm' ouïr SFX iW uïr yaient/n'q'l'm't's' ouïr SFX iW uïr uïs/n'q'j'l'm't' ouïr SFX iW uïr uït/n'q'l'm't' ouïr SFX iW uïr uïmes/n'q'l't' ouïr SFX iW uïr uïtes/n'q'l'm' ouïr SFX iW uïr uïrent/n'q'l'm't's' ouïr SFX iW uïr uïrai/n'q'j'l'm't' ouïr SFX iW uïr rrai/n'q'j'l'm't' ouïr SFX iW uïr uïras/n'q'l'm't' ouïr SFX iW uïr rras/n'q'l'm't' ouïr SFX iW uïr uïra/n'q'l'm't' ouïr SFX iW uïr rra/n'q'l'm't' ouïr SFX iW uïr uïrons/n'q'l't' ouïr SFX iW uïr rrons/n'q'l't' ouïr SFX iW uïr uïrez/n'q'l'm' ouïr SFX iW uïr rrez/n'q'l'm' ouïr SFX iW uïr uïront/n'q'l'm't's' ouïr SFX iW uïr rront/n'q'l'm't's' ouïr SFX iW uïr uïrais/n'q'j'l'm't' ouïr SFX iW uïr rrais/n'q'j'l'm't' ouïr SFX iW uïr uïrait/n'q'l'm't' ouïr SFX iW uïr rrait/n'q'l'm't' ouïr SFX iW uïr uïrions/n'q'l't' ouïr SFX iW uïr rrions/n'q'l't' ouïr SFX iW uïr uïriez/n'q'l'm' ouïr SFX iW uïr rriez/n'q'l'm' ouïr SFX iW uïr uïraient/n'q'l'm't's' ouïr SFX iW uïr rraient/n'q'l'm't's' ouïr SFX iW uïr ie/n'q'j'l'm't's' ouïr SFX iW uïr ies/n'l'm't' ouïr SFX iW uïr uïsse/n'q'j'l'm't' ouïr SFX iW uïr uïsses/n'q'l'm't' ouïr SFX iW uïr uït/n'q'l'm't' ouïr SFX iW uïr uïssions/n'q'l't' ouïr SFX iW uïr uïssiez/n'q'l'm' ouïr SFX iW uïr uïssent/n'q'l'm't's' ouïr SFX iW uïr is/n'l'm' ouïr SFX iW uïr yons/n'l' ouïr SFX iW uïr yez/n'l'm' ouïr SFX iX N 4 SFX iX érir éru férir SFX iX érir érus férir SFX iX érir érue férir SFX iX érir érues férir SFX iY Y 5 SFX iY ssir ssir/n'q'd' issir SFX iY ssir ssu/L'D'Q' issir SFX iY ssir ssus/D'Q' issir SFX iY ssir ssue/L'D'Q' issir SFX iY ssir ssues/D'Q' issir SFX pA N 42 SFX pA ouvoir ouvant pouvoir SFX pA ouvoir u pouvoir SFX pA ouvoir eux pouvoir SFX pA ouvoir uis pouvoir SFX pA ouvoir eut pouvoir SFX pA ouvoir ouvons pouvoir SFX pA ouvoir ouvez pouvoir SFX pA ouvoir euvent pouvoir SFX pA ouvoir ouvais pouvoir SFX pA ouvoir ouvait pouvoir SFX pA ouvoir ouvions pouvoir SFX pA ouvoir ouviez pouvoir SFX pA ouvoir ouvaient pouvoir SFX pA ouvoir us pouvoir SFX pA ouvoir ut pouvoir SFX pA ouvoir ûmes pouvoir SFX pA ouvoir ûtes pouvoir SFX pA ouvoir urent pouvoir SFX pA ouvoir ourrai pouvoir SFX pA ouvoir ourras pouvoir SFX pA ouvoir ourra pouvoir SFX pA ouvoir ourrons pouvoir SFX pA ouvoir ourrez pouvoir SFX pA ouvoir ourront pouvoir SFX pA ouvoir ourrais pouvoir SFX pA ouvoir ourrait pouvoir SFX pA ouvoir ourrions pouvoir SFX pA ouvoir ourriez pouvoir SFX pA ouvoir ourraient pouvoir SFX pA ouvoir uisse pouvoir SFX pA ouvoir uissé pouvoir SFX pA ouvoir uisses pouvoir SFX pA ouvoir uissions pouvoir SFX pA ouvoir uissiez pouvoir SFX pA ouvoir uissent pouvoir SFX pA ouvoir usse pouvoir SFX pA ouvoir ussé pouvoir SFX pA ouvoir usses pouvoir SFX pA ouvoir ût pouvoir SFX pA ouvoir ussions pouvoir SFX pA ouvoir ussiez pouvoir SFX pA ouvoir ussent pouvoir SFX pB N 47 SFX pB ouloir oulant vouloir SFX pB ouloir oulu vouloir SFX pB ouloir oulus vouloir SFX pB ouloir oulue vouloir SFX pB ouloir oulues vouloir SFX pB ouloir eux vouloir SFX pB ouloir eut vouloir SFX pB ouloir oulons vouloir SFX pB ouloir oulez vouloir SFX pB ouloir eulent vouloir SFX pB ouloir oulais vouloir SFX pB ouloir oulait vouloir SFX pB ouloir oulions vouloir SFX pB ouloir ouliez vouloir SFX pB ouloir oulaient vouloir SFX pB ouloir oulus vouloir SFX pB ouloir oulut vouloir SFX pB ouloir oulûmes vouloir SFX pB ouloir oulûtes vouloir SFX pB ouloir oulurent vouloir SFX pB ouloir oudrai vouloir SFX pB ouloir oudras vouloir SFX pB ouloir oudra vouloir SFX pB ouloir oudrons vouloir SFX pB ouloir oudrez vouloir SFX pB ouloir oudront vouloir SFX pB ouloir oudrais vouloir SFX pB ouloir oudrait vouloir SFX pB ouloir oudrions vouloir SFX pB ouloir oudriez vouloir SFX pB ouloir oudraient vouloir SFX pB ouloir euille vouloir SFX pB ouloir euillé vouloir SFX pB ouloir euilles vouloir SFX pB ouloir euillent vouloir SFX pB ouloir oulusse vouloir SFX pB ouloir oulusses vouloir SFX pB ouloir oulût vouloir SFX pB ouloir oulussions vouloir SFX pB ouloir oulussiez vouloir SFX pB ouloir oulussent vouloir SFX pB ouloir euille vouloir SFX pB ouloir eux vouloir SFX pB ouloir euillons vouloir SFX pB ouloir oulons vouloir SFX pB ouloir euillez vouloir SFX pB ouloir oulez vouloir SFX pC N 43 SFX pC evoir evant devoir SFX pC evoir û redevoir SFX pC evoir us devoir SFX pC evoir ue devoir SFX pC evoir ues devoir SFX pC evoir ois devoir SFX pC evoir oit devoir SFX pC evoir evons devoir SFX pC evoir evez devoir SFX pC evoir oivent devoir SFX pC evoir evais devoir SFX pC evoir evait devoir SFX pC evoir evions devoir SFX pC evoir eviez devoir SFX pC evoir evaient devoir SFX pC evoir us devoir SFX pC evoir ut devoir SFX pC evoir ûmes devoir SFX pC evoir ûtes devoir SFX pC evoir urent devoir SFX pC evoir evrai devoir SFX pC evoir evras devoir SFX pC evoir evra devoir SFX pC evoir evrons devoir SFX pC evoir evrez devoir SFX pC evoir evront devoir SFX pC evoir evrais devoir SFX pC evoir evrait devoir SFX pC evoir evrions devoir SFX pC evoir evriez devoir SFX pC evoir evraient devoir SFX pC evoir oive devoir SFX pC evoir oives devoir SFX pC evoir usse devoir SFX pC evoir ussé devoir SFX pC evoir usses devoir SFX pC evoir ût devoir SFX pC evoir ussions devoir SFX pC evoir ussiez devoir SFX pC evoir ussent devoir SFX pC evoir ois devoir SFX pC evoir evons devoir SFX pC evoir evez devoir SFX pD N 1 SFX pD evoir û devoir SFX pE N 45 SFX pE avoir achant savoir SFX pE avoir u savoir SFX pE avoir us savoir SFX pE avoir ue savoir SFX pE avoir ues savoir SFX pE avoir ais savoir SFX pE avoir ait savoir SFX pE avoir avons savoir SFX pE avoir avez savoir SFX pE avoir avent savoir SFX pE avoir avais savoir SFX pE avoir avait savoir SFX pE avoir avions savoir SFX pE avoir aviez savoir SFX pE avoir avaient savoir SFX pE avoir us savoir SFX pE avoir ut savoir SFX pE avoir ûmes savoir SFX pE avoir ûtes savoir SFX pE avoir urent savoir SFX pE avoir aurai savoir SFX pE avoir auras savoir SFX pE avoir aura savoir SFX pE avoir aurons savoir SFX pE avoir aurez savoir SFX pE avoir auront savoir SFX pE avoir aurais savoir SFX pE avoir aurait savoir SFX pE avoir aurions savoir SFX pE avoir auriez savoir SFX pE avoir auraient savoir SFX pE avoir ache savoir SFX pE avoir aches savoir SFX pE avoir achions savoir SFX pE avoir achiez savoir SFX pE avoir achent savoir SFX pE avoir usse savoir SFX pE avoir usses savoir SFX pE avoir ût savoir SFX pE avoir ussions savoir SFX pE avoir ussiez savoir SFX pE avoir ussent savoir SFX pE avoir ache savoir SFX pE avoir achons savoir SFX pE avoir achez savoir SFX pF Y 54 SFX pF oir oir/n'q'd'l'm't's' voir SFX pF oir oyant/n'q'l'm't's' voir SFX pF oir u/L'D'Q' voir SFX pF oir us/D'Q' voir SFX pF oir ue/L'D'Q' voir SFX pF oir ues/D'Q' voir SFX pF oir ois/n'q'j'l'm't' voir SFX pF oir oit/n'q'l'm't's' voir SFX pF oir oyons/n'q'l't' voir SFX pF oir oyez/n'q'l'm' voir SFX pF oir oient/n'q'l'm't's' voir SFX pF oir oyais/n'q'j'l'm't' voir SFX pF oir oyait/n'q'l'm't's' voir SFX pF oir oyions/n'q'l't' voir SFX pF oir oyiez/n'q'l'm' voir SFX pF oir oyaient/n'q'l'm't's' voir SFX pF oir is/n'q'j'l'm't' voir SFX pF oir it/n'q'l'm't's' voir SFX pF oir îmes/n'q'l't' voir SFX pF oir îtes/n'q'l'm' voir SFX pF oir irent/n'q'l'm't's' voir SFX pF oir errai/n'q'j'l'm't' [^é]voir SFX pF oir oirai évoir SFX pF oir erras/n'q'l'm't' [^é]voir SFX pF oir oiras évoir SFX pF oir erra/n'q'l'm't's' [^é]voir SFX pF oir oira évoir SFX pF oir errons/n'q'l't' [^é]voir SFX pF oir oirons évoir SFX pF oir errez/n'q'l'm' [^é]voir SFX pF oir oirez évoir SFX pF oir erront/n'q'l'm't's' [^é]voir SFX pF oir oiront évoir SFX pF oir errais/n'q'j'l'm't' [^é]voir SFX pF oir oirais évoir SFX pF oir errait/n'q'l'm't's' [^é]voir SFX pF oir oirait évoir SFX pF oir errions/n'q'l't' [^é]voir SFX pF oir oirions évoir SFX pF oir erriez/n'q'l'm' [^é]voir SFX pF oir oiriez évoir SFX pF oir erraient/n'q'l'm't's' [^é]voir SFX pF oir oiraient évoir SFX pF oir oie/n'q'j'l'm't's' voir SFX pF oir oies/n'l'm't' voir SFX pF oir isse/n'q'j'l'm't' voir SFX pF oir isses/n'q'l'm't' voir SFX pF oir ît/n'q'l'm't's' voir SFX pF oir issions/n'q'l't' voir SFX pF oir issiez/n'q'l'm' voir SFX pF oir issent/n'q'l'm't's' voir SFX pF oir ois/n'l'm' voir SFX pF oir oyons/n'l' voir SFX pF oir oyez/n'l'm' voir SFX pG Y 11 SFX pG oir errai voir SFX pG oir erras voir SFX pG oir erra voir SFX pG oir errons voir SFX pG oir errez voir SFX pG oir erront voir SFX pG oir errais voir SFX pG oir errait voir SFX pG oir errions voir SFX pG oir erriez voir SFX pG oir erraient voir SFX pH Y 43 SFX pH ouvoir ouvoir/n'q'd'l'm't's' mouvoir SFX pH ouvoir ouvant/n'q'l'm't's' mouvoir SFX pH ouvoir u/L'D'Q' .mouvoir SFX pH ouvoir us/D'Q' mouvoir SFX pH ouvoir ue/L'D'Q' mouvoir SFX pH ouvoir ues/D'Q' mouvoir SFX pH ouvoir eus/n'q'j'l'm't' mouvoir SFX pH ouvoir eut/n'q'l'm't's' mouvoir SFX pH ouvoir ouvons/n'q'l't' mouvoir SFX pH ouvoir ouvez/n'q'l'm' mouvoir SFX pH ouvoir euvent/n'q'l'm't's' mouvoir SFX pH ouvoir ouvais/n'q'j'l'm't' mouvoir SFX pH ouvoir ouvait/n'q'l'm't's' mouvoir SFX pH ouvoir ouvions/n'q'l't' mouvoir SFX pH ouvoir ouviez/n'q'l'm' mouvoir SFX pH ouvoir ouvaient/n'q'l'm't's' mouvoir SFX pH ouvoir us/n'q'j'l'm't' mouvoir SFX pH ouvoir ut/n'q'l'm't's' mouvoir SFX pH ouvoir ûmes/n'q'l't' mouvoir SFX pH ouvoir ûtes/n'q'l'm' mouvoir SFX pH ouvoir urent/n'q'l'm't's' mouvoir SFX pH ouvoir ouvrai/n'q'j'l'm't' mouvoir SFX pH ouvoir ouvras/n'q'l'm't' mouvoir SFX pH ouvoir ouvra/n'q'l'm't's' mouvoir SFX pH ouvoir ouvrons/n'q'l't' mouvoir SFX pH ouvoir ouvrez/n'q'l'm' mouvoir SFX pH ouvoir ouvront/n'q'l'm't's' mouvoir SFX pH ouvoir ouvrais/n'q'j'l'm't' mouvoir SFX pH ouvoir ouvrait/n'q'l'm't's' mouvoir SFX pH ouvoir ouvrions/n'q'l't' mouvoir SFX pH ouvoir ouvriez/n'q'l'm' mouvoir SFX pH ouvoir ouvraient/n'q'l'm't's' mouvoir SFX pH ouvoir euve/n'q'j'l'm't's' mouvoir SFX pH ouvoir euves/n'l'm't' mouvoir SFX pH ouvoir usse/n'q'j'l'm't' mouvoir SFX pH ouvoir usses/n'q'l'm't' mouvoir SFX pH ouvoir ût/n'q'l'm't's' mouvoir SFX pH ouvoir ussions/n'q'l't' mouvoir SFX pH ouvoir ussiez/n'q'l'm' mouvoir SFX pH ouvoir ussent/n'q'l'm't's' mouvoir SFX pH ouvoir eus/n'l'm' mouvoir SFX pH ouvoir ouvons/n'l' mouvoir SFX pH ouvoir ouvez/n'l'm' mouvoir SFX pI N 1 SFX pI ouvoir û/q' mouvoir SFX pJ N 42 SFX pJ ourvoir ourvoyant pourvoir SFX pJ ourvoir ourvu pourvoir SFX pJ ourvoir ourvus pourvoir SFX pJ ourvoir ourvue pourvoir SFX pJ ourvoir ourvues pourvoir SFX pJ ourvoir ourvois pourvoir SFX pJ ourvoir ourvoit pourvoir SFX pJ ourvoir ourvoyons pourvoir SFX pJ ourvoir ourvoyez pourvoir SFX pJ ourvoir ourvoient pourvoir SFX pJ ourvoir ourvoyais pourvoir SFX pJ ourvoir ourvoyait pourvoir SFX pJ ourvoir ourvoyions pourvoir SFX pJ ourvoir ourvoyiez pourvoir SFX pJ ourvoir ourvoyaient pourvoir SFX pJ ourvoir ourvus pourvoir SFX pJ ourvoir ourvut pourvoir SFX pJ ourvoir ourvûmes pourvoir SFX pJ ourvoir ourvûtes pourvoir SFX pJ ourvoir ourvurent pourvoir SFX pJ ourvoir ourvoirai pourvoir SFX pJ ourvoir ourvoiras pourvoir SFX pJ ourvoir ourvoira pourvoir SFX pJ ourvoir ourvoirons pourvoir SFX pJ ourvoir ourvoirez pourvoir SFX pJ ourvoir ourvoiront pourvoir SFX pJ ourvoir ourvoirais pourvoir SFX pJ ourvoir ourvoirait pourvoir SFX pJ ourvoir ourvoirions pourvoir SFX pJ ourvoir ourvoiriez pourvoir SFX pJ ourvoir ourvoiraient pourvoir SFX pJ ourvoir ourvoie pourvoir SFX pJ ourvoir ourvoies pourvoir SFX pJ ourvoir ourvusse pourvoir SFX pJ ourvoir ourvusses pourvoir SFX pJ ourvoir ourvût pourvoir SFX pJ ourvoir ourvussions pourvoir SFX pJ ourvoir ourvussiez pourvoir SFX pJ ourvoir ourvussent pourvoir SFX pJ ourvoir ourvois pourvoir SFX pJ ourvoir ourvoyons pourvoir SFX pJ ourvoir ourvoyez pourvoir SFX pK Y 43 SFX pK cevoir cevoir/n'q'd'l'm't's' cevoir SFX pK cevoir cevant/n'q'l'm't's' cevoir SFX pK cevoir çu/L'D'Q' cevoir SFX pK cevoir çus/D'Q' cevoir SFX pK cevoir çue/L'D'Q' cevoir SFX pK cevoir çues/D'Q' cevoir SFX pK cevoir çois/n'q'j'l'm't' cevoir SFX pK cevoir çoit/n'q'l'm't's' cevoir SFX pK cevoir cevons/n'q'l't' cevoir SFX pK cevoir cevez/n'q'l'm' cevoir SFX pK cevoir çoivent/n'q'l'm't's' cevoir SFX pK cevoir cevais/n'q'j'l'm't' cevoir SFX pK cevoir cevait/n'q'l'm't's' cevoir SFX pK cevoir cevions/n'q'l't' cevoir SFX pK cevoir ceviez/n'q'l'm' cevoir SFX pK cevoir cevaient/n'q'l'm't's' cevoir SFX pK cevoir çus/n'q'j'l'm't' cevoir SFX pK cevoir çut/n'q'l'm't's' cevoir SFX pK cevoir çûmes/n'q'l't' cevoir SFX pK cevoir çûtes/n'q'l'm' cevoir SFX pK cevoir çurent/n'q'l'm't's' cevoir SFX pK cevoir cevrai/n'q'j'l'm't' cevoir SFX pK cevoir cevras/n'q'l'm't' cevoir SFX pK cevoir cevra/n'q'l'm't's' cevoir SFX pK cevoir cevrons/n'q'l't' cevoir SFX pK cevoir cevrez/n'q'l'm' cevoir SFX pK cevoir cevront/n'q'l'm't's' cevoir SFX pK cevoir cevrais/n'q'j'l'm't' cevoir SFX pK cevoir cevrait/n'q'l'm't's' cevoir SFX pK cevoir cevrions/n'q'l't' cevoir SFX pK cevoir cevriez/n'q'l'm' cevoir SFX pK cevoir cevraient/n'q'l'm't's' cevoir SFX pK cevoir çoive/n'q'j'l'm't's' cevoir SFX pK cevoir çoives/n'l'm't' cevoir SFX pK cevoir çusse/n'q'j'l'm't' cevoir SFX pK cevoir çusses/n'q'l'm't' cevoir SFX pK cevoir çût/n'q'l'm't's' cevoir SFX pK cevoir çussions/n'q'l't' cevoir SFX pK cevoir çussiez/n'q'l'm' cevoir SFX pK cevoir çussent/n'q'l'm't's' cevoir SFX pK cevoir çois/n'l'm't' cevoir SFX pK cevoir cevons/n'l' cevoir SFX pK cevoir cevez/n'l'm' cevoir SFX pM N 40 SFX pM aloir alant valoir SFX pM aloir alu valoir SFX pM aloir aux valoir SFX pM aloir aut valoir SFX pM aloir alons valoir SFX pM aloir alez valoir SFX pM aloir alent valoir SFX pM aloir alais valoir SFX pM aloir alait valoir SFX pM aloir alions valoir SFX pM aloir aliez valoir SFX pM aloir alaient valoir SFX pM aloir alus valoir SFX pM aloir alut valoir SFX pM aloir alûmes valoir SFX pM aloir alûtes valoir SFX pM aloir alurent valoir SFX pM aloir audrai valoir SFX pM aloir audras valoir SFX pM aloir audra valoir SFX pM aloir audrons valoir SFX pM aloir audrez valoir SFX pM aloir audront valoir SFX pM aloir audrais valoir SFX pM aloir audrait valoir SFX pM aloir audrions valoir SFX pM aloir audriez valoir SFX pM aloir audraient valoir SFX pM aloir aille valoir SFX pM aloir ailles valoir SFX pM aloir aillent valoir SFX pM aloir alusse valoir SFX pM aloir alusses valoir SFX pM aloir alût valoir SFX pM aloir alussions valoir SFX pM aloir alussiez valoir SFX pM aloir alussent valoir SFX pM aloir aux valoir SFX pM aloir alons valoir SFX pM aloir alez valoir SFX pN Y 43 SFX pN valoir valoir/n'q'd'm't's' valoir SFX pN valoir valant/n'q'm't's' valoir SFX pN valoir vaux/n'j'm't' valoir SFX pN valoir vaut/n'm't's' valoir SFX pN valoir valons/n't' valoir SFX pN valoir valez/n'm' valoir SFX pN valoir valent/n'm't's' quivaloir SFX pN valoir valent révaloir SFX pN valoir valais/n'j'm't' valoir SFX pN valoir valait/n'm't's' valoir SFX pN valoir valions/n't' valoir SFX pN valoir valiez/n'm' valoir SFX pN valoir valaient/n'm't's' valoir SFX pN valoir valus/n'j'm't' valoir SFX pN valoir valut/n'm't's' valoir SFX pN valoir valûmes/n't' valoir SFX pN valoir valûtes/n'm' valoir SFX pN valoir valurent/n'm't's' valoir SFX pN valoir vaudrai/n'j'm't' valoir SFX pN valoir vaudras/n'm't' valoir SFX pN valoir vaudra/n'm't's' valoir SFX pN valoir vaudrons/n't' valoir SFX pN valoir vaudrez/n'm' valoir SFX pN valoir vaudront/n'm't's' valoir SFX pN valoir vaudrais/n'j'm't' valoir SFX pN valoir vaudrait/n'm't's' valoir SFX pN valoir vaudrions/n't' valoir SFX pN valoir vaudriez/n'm' valoir SFX pN valoir vaudraient/n'm't's' valoir SFX pN valoir vaille/n'j'm't's' quivaloir SFX pN valoir vale révaloir SFX pN valoir vailles/n'm't' quivaloir SFX pN valoir vales révaloir SFX pN valoir vaillent/n'm't's' quivaloir SFX pN valoir valusse/n'j'm't' valoir SFX pN valoir valusses/n'm't' valoir SFX pN valoir valût/n'm't's' valoir SFX pN valoir valussions/n't' valoir SFX pN valoir valussiez/n'm' valoir SFX pN valoir valussent/n'm't's' valoir SFX pN valoir vaux valoir SFX pN valoir valons valoir SFX pN valoir valez valoir SFX pO N 16 SFX pO valoir valant revaloir SFX pO valoir valu revaloir SFX pO valoir valus revaloir SFX pO valoir value revaloir SFX pO valoir values revaloir SFX pO valoir vaudrai revaloir SFX pO valoir vaudras revaloir SFX pO valoir vaudra revaloir SFX pO valoir vaudrons revaloir SFX pO valoir vaudrez revaloir SFX pO valoir vaudront revaloir SFX pO valoir vaudrais revaloir SFX pO valoir vaudrait revaloir SFX pO valoir vaudrions revaloir SFX pO valoir vaudriez revaloir SFX pO valoir vaudraient revaloir SFX pP N 1 SFX pP paroir parant comparoir SFX pQ N 1 SFX pQ haloir haut chaloir SFX pR Y 2 SFX pR pparoir pparoir/n'q'd' apparoir SFX pR pparoir ppert/n'q' apparoir SFX pS Y 69 SFX pS oir oir/n'q'd'l'm't's' oir SFX pS sseoir sseyant/n'q'l'm't's' seoir SFX pS sseoir ssoyant/n'q'l'm't's' seoir SFX pS sseoir ssis/L'D'Q' seoir SFX pS sseoir ssise/L'D'Q' seoir SFX pS sseoir ssises/D'Q' seoir SFX pS sseoir ssieds/n'q'j'l'm't' seoir SFX pS sseoir ssied/n'q'l'm't's' seoir SFX pS sseoir sseyons/n'q'l't' seoir SFX pS sseoir sseyez/n'q'l'm' seoir SFX pS sseoir sseyent/n'q'l'm't's' seoir SFX pS sseoir ssois/n'q'j'l'm't' seoir SFX pS sseoir ssoit/n'q'l'm't's' seoir SFX pS sseoir ssoyons/n'q'l't' seoir SFX pS sseoir ssoyez/n'q'l'm' seoir SFX pS sseoir ssoient/n'q'l'm't's' seoir SFX pS sseoir sseyais/n'q'j'l'm't' seoir SFX pS sseoir sseyait/n'q'l'm't's' seoir SFX pS sseoir sseyions/n'q'l't' seoir SFX pS sseoir sseyiez/n'q'l'm' seoir SFX pS sseoir sseyaient/n'q'l'm't's' seoir SFX pS sseoir ssoyais/n'q'j'l'm't' seoir SFX pS sseoir ssoyait/n'q'l'm't's' seoir SFX pS sseoir ssoyions/n'q'l't' seoir SFX pS sseoir ssoyiez/n'q'l'm' seoir SFX pS sseoir ssoyaient/n'q'l'm't's' seoir SFX pS sseoir ssis/n'q'j'l'm't' seoir SFX pS sseoir ssit/n'q'l'm't's' seoir SFX pS sseoir ssîmes/n'q'l't' seoir SFX pS sseoir ssîtes/n'q'l'm' seoir SFX pS sseoir ssirent/n'q'l'm't's' seoir SFX pS sseoir ssiérai/n'q'j'l'm't' seoir SFX pS sseoir ssiéras/n'q'l'm't' seoir SFX pS sseoir ssiéra/n'q'l'm't's' seoir SFX pS sseoir ssiérons/n'q'l't' seoir SFX pS sseoir ssiérez/n'q'l'm' seoir SFX pS sseoir ssiéront/n'q'l'm't's' seoir SFX pS sseoir ssoirai/n'q'j'l'm't' seoir SFX pS sseoir ssoiras/n'q'l'm't' seoir SFX pS sseoir ssoira/n'q'l'm't's' seoir SFX pS sseoir ssoirons/n'q'l't' seoir SFX pS sseoir ssoirez/n'q'l'm' seoir SFX pS sseoir ssoiront/n'q'l'm't's' seoir SFX pS sseoir ssiérais/n'q'j'l'm't' seoir SFX pS sseoir ssiérait/n'q'l'm't's' seoir SFX pS sseoir ssiérions/n'q'l't' seoir SFX pS sseoir ssiériez/n'q'l'm' seoir SFX pS sseoir ssiéraient/n'q'l'm't's' seoir SFX pS sseoir ssoirais/n'q'j'l'm't' seoir SFX pS sseoir ssoirait/n'q'l'm't's' seoir SFX pS sseoir ssoirions/n'q'l't' seoir SFX pS sseoir ssoiriez/n'q'l'm' seoir SFX pS sseoir ssoiraient/n'q'l'm't's' seoir SFX pS sseoir sseye/n'q'j'l'm't's' seoir SFX pS sseoir sseyes/n'l'm't' seoir SFX pS sseoir ssoie/n'q'j'l'm't's' seoir SFX pS sseoir ssoies/n'l'm't' seoir SFX pS sseoir ssisse/n'q'j'l'm't' seoir SFX pS sseoir ssisses/n'q'l'm't' seoir SFX pS sseoir ssît/n'q'l'm't's' seoir SFX pS sseoir ssissions/n'q'l't' seoir SFX pS sseoir ssissiez/n'q'l'm' seoir SFX pS sseoir ssissent/n'q'l'm't's' seoir SFX pS sseoir ssieds/n'l'm't' seoir SFX pS sseoir sseyons/n'l' seoir SFX pS sseoir sseyez/n'l'm' seoir SFX pS sseoir ssois/n'l'm't' seoir SFX pS sseoir ssoyons/n'l' seoir SFX pS sseoir ssoyez/n'l'm' seoir SFX pT N 41 SFX pT urseoir ursoyant seoir SFX pT urseoir ursis seoir SFX pT urseoir ursise seoir SFX pT urseoir ursises seoir SFX pT urseoir ursois seoir SFX pT urseoir ursoit seoir SFX pT urseoir ursoyons seoir SFX pT urseoir ursoyez seoir SFX pT urseoir ursoient seoir SFX pT urseoir ursoyais seoir SFX pT urseoir ursoyait seoir SFX pT urseoir ursoyions seoir SFX pT urseoir ursoyiez seoir SFX pT urseoir ursoyaient seoir SFX pT urseoir ursis seoir SFX pT urseoir ursit seoir SFX pT urseoir ursîmes seoir SFX pT urseoir ursîtes seoir SFX pT urseoir ursirent seoir SFX pT urseoir urseoirai seoir SFX pT urseoir urseoiras seoir SFX pT urseoir urseoira seoir SFX pT urseoir urseoirons seoir SFX pT urseoir urseoirez seoir SFX pT urseoir urseoiront seoir SFX pT urseoir urseoirais seoir SFX pT urseoir urseoirait seoir SFX pT urseoir urseoirions seoir SFX pT urseoir urseoiriez seoir SFX pT urseoir urseoiraient seoir SFX pT urseoir ursoie seoir SFX pT urseoir ursoies seoir SFX pT urseoir ursisse seoir SFX pT urseoir ursisses seoir SFX pT urseoir ursît seoir SFX pT urseoir ursissions seoir SFX pT urseoir ursissiez seoir SFX pT urseoir ursissent seoir SFX pT urseoir ursois seoir SFX pT urseoir ursoyons seoir SFX pT urseoir ursoyez seoir SFX pU N 4 SFX pU eoir éant seoir SFX pU eoir is seoir SFX pU eoir ise seoir SFX pU eoir ises seoir SFX pV N 13 SFX pV eoir éant seoir SFX pV eoir eyant seoir SFX pV eoir is seoir SFX pV eoir ied seoir SFX pV eoir iéent seoir SFX pV eoir eyait seoir SFX pV eoir eyaient seoir SFX pV eoir iéra seoir SFX pV eoir iéront seoir SFX pV eoir iérait seoir SFX pV eoir iéraient seoir SFX pV eoir iée seoir SFX pV eoir iéent seoir SFX pW N 11 SFX pW sseoir sséant seoir SFX pW sseoir ssied seoir SFX pW sseoir ssiéent seoir SFX pW sseoir sseyait seoir SFX pW sseoir sseyaient seoir SFX pW sseoir ssiéra seoir SFX pW sseoir ssiéront seoir SFX pW sseoir ssiérait seoir SFX pW sseoir ssiéraient seoir SFX pW sseoir ssiée seoir SFX pW sseoir ssiéent seoir SFX pX N 52 SFX pX hoir hu choir SFX pX hoir hus choir SFX pX hoir hue choir SFX pX hoir hues choir SFX pX hoir hois choir SFX pX hoir hoit choir SFX pX hoir hoyons choir SFX pX hoir hoyez choir SFX pX hoir hoient choir SFX pX hoir hoyais déchoir SFX pX hoir hoyait déchoir SFX pX hoir hoyions déchoir SFX pX hoir hoyiez déchoir SFX pX hoir hoyaient déchoir SFX pX hoir hus choir SFX pX hoir hut choir SFX pX hoir hûmes choir SFX pX hoir hûtes choir SFX pX hoir hurent choir SFX pX hoir hoirai choir SFX pX hoir herrai choir SFX pX hoir hoiras choir SFX pX hoir herras choir SFX pX hoir hoira choir SFX pX hoir herra choir SFX pX hoir hoirons choir SFX pX hoir herrons choir SFX pX hoir hoirez choir SFX pX hoir herrez choir SFX pX hoir hoiront choir SFX pX hoir herront choir SFX pX hoir hoirais choir SFX pX hoir herrais choir SFX pX hoir hoirait choir SFX pX hoir herrait choir SFX pX hoir hoirions choir SFX pX hoir herrions choir SFX pX hoir hoiriez choir SFX pX hoir herriez choir SFX pX hoir hoiraient choir SFX pX hoir herraient choir SFX pX hoir hoie choir SFX pX hoir hoies choir SFX pX hoir husse choir SFX pX hoir husses choir SFX pX hoir hût choir SFX pX hoir hussions choir SFX pX hoir hussiez choir SFX pX hoir hussent choir SFX pX hoir hois déchoir SFX pX hoir hoyons déchoir SFX pX hoir hoyez déchoir SFX pY Y 26 SFX pY choir choir/n'q'd' échoir SFX pY choir chéant/n'q' échoir SFX pY choir chu/L'D'Q' échoir SFX pY choir chus/D'Q' échoir SFX pY choir chue/L'D'Q' échoir SFX pY choir chues/D'Q' échoir SFX pY choir choit/n'q' échoir SFX pY choir chet/n'q' échoir SFX pY choir choient/n'q' échoir SFX pY choir chéent/n'q' échoir SFX pY choir choyait/n'q' échoir SFX pY choir choyaient/n'q' échoir SFX pY choir chut/n'q' échoir SFX pY choir churent/n'q' échoir SFX pY choir choira/n'q' échoir SFX pY choir cherra/n'q' échoir SFX pY choir choiront/n'q' échoir SFX pY choir cherront/n'q' échoir SFX pY choir choirait/n'q' échoir SFX pY choir cherrait/n'q' échoir SFX pY choir choiraient/n'q' échoir SFX pY choir cherraient/n'q' échoir SFX pY choir choie/n'q' échoir SFX pY choir choient/n'q' échoir SFX pY choir chût/n'q' échoir SFX pY choir chussent/n'q' échoir SFX pZ N 18 SFX pZ euvoir euvant pleuvoir SFX pZ euvoir u pleuvoir SFX pZ euvoir eut pleuvoir SFX pZ euvoir euvent pleuvoir SFX pZ euvoir euvait pleuvoir SFX pZ euvoir euvaient pleuvoir SFX pZ euvoir ut pleuvoir SFX pZ euvoir urent pleuvoir SFX pZ euvoir euvra pleuvoir SFX pZ euvoir euvront pleuvoir SFX pZ euvoir euvrait pleuvoir SFX pZ euvoir euvraient pleuvoir SFX pZ euvoir euve pleuvoir SFX pZ euvoir ût pleuvoir SFX pZ euvoir ussent pleuvoir SFX pZ euvoir eus pleuvoir SFX pZ euvoir euvons pleuvoir SFX pZ euvoir euvez pleuvoir SFX qA N 8 SFX qA alloir allu falloir SFX qA alloir aut falloir SFX qA alloir allait falloir SFX qA alloir allut falloir SFX qA alloir audra falloir SFX qA alloir audrait falloir SFX qA alloir aille falloir SFX qA alloir allût falloir SFX rA Y 28 SFX rA lore lore/n'q'd'l'm't's' clore SFX rA lore losant/n'q'l'm't's' clore SFX rA lore los/L'D'Q' clore SFX rA lore lose/L'D'Q' clore SFX rA lore loses/D'Q' clore SFX rA lore los/n'q'j'l'm't' clore SFX rA lore lot/n'q'l'm't's' .clore SFX rA lore losons/n'q'l't' clore SFX rA lore losez/n'q'l'm' clore SFX rA lore losent/n'q'l'm't's' clore SFX rA lore lorai/n'q'j'l'm't' clore SFX rA lore loras/n'q'l'm't' clore SFX rA lore lora/n'q'l'm't's' clore SFX rA lore lorons/n'q'l't' clore SFX rA lore lorez/n'q'l'm' clore SFX rA lore loront/n'q'l'm't's' clore SFX rA lore lorais/n'q'j'l'm't' clore SFX rA lore lorait/n'q'l'm't's' clore SFX rA lore lorions/n'q'l't' clore SFX rA lore loriez/n'q'l'm' clore SFX rA lore loraient/n'q'l'm't's' clore SFX rA lore lose/n'q'j'l'm't's' clore SFX rA lore loses/n'l'm't' clore SFX rA lore losions/n'l't' clore SFX rA lore losiez/n'l'm' clore SFX rA lore los/n'l'm' clore SFX rA lore losons/n'l' clore SFX rA lore losez/n'l'm' clore SFX rB Y 1 SFX rB lore lôt clore SFX rC Y 28 SFX rC clore clore/n'q'd' clore SFX rC clore closant/n'q' clore SFX rC clore clos/L'D'Q' clore SFX rC clore close/L'D'Q' clore SFX rC clore closes/D'Q' clore SFX rC clore clos/n'j' clore SFX rC clore clot/n'q' clore SFX rC clore closons/n' clore SFX rC clore closez/n' clore SFX rC clore closent/n'q' clore SFX rC clore clorai/n'j' clore SFX rC clore cloras/n' clore SFX rC clore clora/n'q' clore SFX rC clore clorons/n' clore SFX rC clore clorez/n' clore SFX rC clore cloront/n'q' clore SFX rC clore clorais/n'j' clore SFX rC clore clorait/n'q' clore SFX rC clore clorions/n' clore SFX rC clore cloriez/n' clore SFX rC clore cloraient/n'q' clore SFX rC clore close/n'q'j' clore SFX rC clore closes/n' clore SFX rC clore closions/n' clore SFX rC clore closiez/n' clore SFX rC clore clos/n' clore SFX rC clore closons/n' clore SFX rC clore closez/n' clore SFX rD N 3 SFX rD clore clos clore SFX rD clore close clore SFX rD clore closes clore SFX tA Y 44 SFX tA re re/n'q'd'l'm't's' [dp]re SFX tA re ant/n'q'l'm't's' [dp]re SFX tA re u/L'D'Q' [dp]re SFX tA re us/D'Q' [dp]re SFX tA re ue/L'D'Q' [dp]re SFX tA re ues/D'Q' [dp]re SFX tA re s/n'q'j'l'm't' [dp]re SFX tA dre d/n'q'l'm't's' dre SFX tA pre pt/n'q'l'm't's' pre SFX tA re ons/n'q'l't' [dp]re SFX tA re ez/n'q'l'm' [dp]re SFX tA re ent/n'q'l'm't's' [dp]re SFX tA re ais/n'q'j'l'm't' [dp]re SFX tA re ait/n'q'l'm't's' [dp]re SFX tA re ions/n'q'l't' [dp]re SFX tA re iez/n'q'l'm' [dp]re SFX tA re aient/n'q'l'm't's' [dp]re SFX tA re is/n'q'j'l'm't' [dp]re SFX tA re it/n'q'l'm't's' [dp]re SFX tA re îmes/n'q'l't' [dp]re SFX tA re îtes/n'q'l'm' [dp]re SFX tA re irent/n'q'l'm't's' [dp]re SFX tA re rai/n'q'j'l'm't' [dp]re SFX tA re ras/n'q'l'm't' [dp]re SFX tA re ra/n'q'l'm't's' [dp]re SFX tA re rons/n'q'l't' [dp]re SFX tA re rez/n'q'l'm' [dp]re SFX tA re ront/n'q'l'm't's' [dp]re SFX tA re rais/n'q'j'l'm't' [dp]re SFX tA re rait/n'q'l'm't's' [dp]re SFX tA re rions/n'q'l't' [dp]re SFX tA re riez/n'q'l'm' [dp]re SFX tA re raient/n'q'l'm't's' [dp]re SFX tA re e/n'q'j'l'm't's' [dp]re SFX tA re es/n'l'm't' [dp]re SFX tA re isse/n'q'j'l'm't' [dp]re SFX tA re isses/n'q'l'm't' [dp]re SFX tA re ît/n'q'l'm't's' [dp]re SFX tA re issions/n'q'l't' [dp]re SFX tA re issiez/n'q'l'm' [dp]re SFX tA re issent/n'q'l'm't's' [dp]re SFX tA re s/n'l'm't' [dp]re SFX tA re ons/n'l' [dp]re SFX tA re ez/n'l'm' [dp]re SFX tD Y 43 SFX tD perdre perdre/m't's' perdre SFX tD perdre perdant/m't's' perdre SFX tD perdre perdu perdre SFX tD perdre perdus perdre SFX tD perdre perdue perdre SFX tD perdre perdues perdre SFX tD perdre perds/m't' perdre SFX tD perdre perd/s' perdre SFX tD perdre perdons perdre SFX tD perdre perdez perdre SFX tD perdre perdent/s' perdre SFX tD perdre perdais/m't' perdre SFX tD perdre perdait/s' perdre SFX tD perdre perdions perdre SFX tD perdre perdiez perdre SFX tD perdre perdaient/s' perdre SFX tD perdre perdis/m't' perdre SFX tD perdre perdit/s' perdre SFX tD perdre perdîmes perdre SFX tD perdre perdîtes perdre SFX tD perdre perdirent/s' perdre SFX tD perdre perdrai/m' perdre SFX tD perdre perdras/t' perdre SFX tD perdre perdra/s' perdre SFX tD perdre perdrons perdre SFX tD perdre perdrez perdre SFX tD perdre perdront/s' perdre SFX tD perdre perdrais/m't' perdre SFX tD perdre perdrait/s' perdre SFX tD perdre perdrions perdre SFX tD perdre perdriez perdre SFX tD perdre perdraient/s' perdre SFX tD perdre perde/m's' perdre SFX tD perdre perdes/t' perdre SFX tD perdre perdisse/m' perdre SFX tD perdre perdisses/t' perdre SFX tD perdre perdît/s' perdre SFX tD perdre perdissions perdre SFX tD perdre perdissiez perdre SFX tD perdre perdissent/s' perdre SFX tD perdre perds/t' perdre SFX tD perdre perdons perdre SFX tD perdre perdez perdre SFX tE N 38 SFX tE dre dant dre SFX tE dre ds dre SFX tE dre d dre SFX tE dre dons dre SFX tE dre dez dre SFX tE dre dent dre SFX tE dre dais dre SFX tE dre dait dre SFX tE dre dions dre SFX tE dre diez dre SFX tE dre daient dre SFX tE dre dis dre SFX tE dre dit dre SFX tE dre dîmes dre SFX tE dre dîtes dre SFX tE dre dirent dre SFX tE dre drai dre SFX tE dre dras dre SFX tE dre dra dre SFX tE dre drons dre SFX tE dre drez dre SFX tE dre dront dre SFX tE dre drais dre SFX tE dre drait dre SFX tE dre drions dre SFX tE dre driez dre SFX tE dre draient dre SFX tE dre de dre SFX tE dre des dre SFX tE dre disse dre SFX tE dre disses dre SFX tE dre dît dre SFX tE dre dissions dre SFX tE dre dissiez dre SFX tE dre dissent dre SFX tE dre ds dre SFX tE dre dons dre SFX tE dre dez dre SFX tF Y 42 SFX tF rendre rendre/n'q'd'l'm't's' prendre SFX tF rendre renant/n'q'l'm't's' prendre SFX tF rendre ris/L'D'Q' prendre SFX tF rendre rise/L'D'Q' prendre SFX tF rendre rises/D'Q' prendre SFX tF rendre rends/n'q'j'l'm't' prendre SFX tF rendre rend/n'q'l'm't's' prendre SFX tF rendre renons/n'q'l't' prendre SFX tF rendre renez/n'q'l'm' prendre SFX tF rendre rennent/n'q'l'm't's' prendre SFX tF rendre renais/n'q'j'l'm't' prendre SFX tF rendre renait/n'q'l'm't's' prendre SFX tF rendre renions/n'q'l't' prendre SFX tF rendre reniez/n'q'l'm' prendre SFX tF rendre renaient/n'q'l'm't's' prendre SFX tF rendre ris/n'q'j'l'm't' prendre SFX tF rendre rit/n'q'l'm't's' prendre SFX tF rendre rîmes/n'q'l't' prendre SFX tF rendre rîtes/n'q'l'm' prendre SFX tF rendre rirent/n'q'l'm't's' prendre SFX tF rendre rendrai/n'q'j'l'm't' prendre SFX tF rendre rendras/n'q'l'm't' prendre SFX tF rendre rendra/n'q'l'm't's' prendre SFX tF rendre rendrons/n'q'l't' prendre SFX tF rendre rendrez/n'q'l'm' prendre SFX tF rendre rendront/n'q'l'm't's' prendre SFX tF rendre rendrais/n'q'j'l'm't' prendre SFX tF rendre rendrait/n'q'l'm't's' prendre SFX tF rendre rendrions/n'q'l't' prendre SFX tF rendre rendriez/n'q'l'm' prendre SFX tF rendre rendraient/n'q'l'm't's' prendre SFX tF rendre renne/n'q'j'l'm't's' prendre SFX tF rendre rennes/n'l'm't' prendre SFX tF rendre risse/n'q'j'l'm't' prendre SFX tF rendre risses/n'q'l'm't' prendre SFX tF rendre rît/n'q'l'm't's' prendre SFX tF rendre rissions/n'q'l't' prendre SFX tF rendre rissiez/n'q'l'm' prendre SFX tF rendre rissent/n'q'l'm't's' prendre SFX tF rendre rends/n'l'm' prendre SFX tF rendre renons/n'l' prendre SFX tF rendre renez/n'l'm' prendre SFX tG Y 42 SFX tG prendre prendre/m't's' prendre SFX tG prendre prenant/m't's' prendre SFX tG prendre pris/L'D'Q' prendre SFX tG prendre prise/L'D'Q' prendre SFX tG prendre prises/D'Q' prendre SFX tG prendre prends/m't' prendre SFX tG prendre prend/s' prendre SFX tG prendre prenons prendre SFX tG prendre prenez prendre SFX tG prendre prennent/s' prendre SFX tG prendre prenais/m't' prendre SFX tG prendre prenait/s' prendre SFX tG prendre prenions prendre SFX tG prendre preniez prendre SFX tG prendre prenaient/s' prendre SFX tG prendre pris/m't' prendre SFX tG prendre prit/s' prendre SFX tG prendre prîmes prendre SFX tG prendre prîtes prendre SFX tG prendre prirent/s' prendre SFX tG prendre prendrai/m' prendre SFX tG prendre prendras/t' prendre SFX tG prendre prendra/s' prendre SFX tG prendre prendrons prendre SFX tG prendre prendrez prendre SFX tG prendre prendront/s' prendre SFX tG prendre prendrais/m't' prendre SFX tG prendre prendrait/s' prendre SFX tG prendre prendrions prendre SFX tG prendre prendriez prendre SFX tG prendre prendraient/s' prendre SFX tG prendre prenne/m's' prendre SFX tG prendre prennes/t' prendre SFX tG prendre prisse/m' prendre SFX tG prendre prisses/t' prendre SFX tG prendre prît/s' prendre SFX tG prendre prissions prendre SFX tG prendre prissiez prendre SFX tG prendre prissent/s' prendre SFX tG prendre prends/t' prendre SFX tG prendre prenons prendre SFX tG prendre prenez prendre SFX tM N 31 SFX tM outre outant foutre SFX tM outre outu foutre SFX tM outre outus foutre SFX tM outre outue foutre SFX tM outre outues foutre SFX tM outre ous foutre SFX tM outre out foutre SFX tM outre outons foutre SFX tM outre outez foutre SFX tM outre outent foutre SFX tM outre outais foutre SFX tM outre outait foutre SFX tM outre outions foutre SFX tM outre outiez foutre SFX tM outre outaient foutre SFX tM outre outrai foutre SFX tM outre outras foutre SFX tM outre outra foutre SFX tM outre outrons foutre SFX tM outre outrez foutre SFX tM outre outront foutre SFX tM outre outrais foutre SFX tM outre outrait foutre SFX tM outre outrions foutre SFX tM outre outriez foutre SFX tM outre outraient foutre SFX tM outre oute foutre SFX tM outre outes foutre SFX tM outre ous foutre SFX tM outre outons foutre SFX tM outre outez foutre SFX tU N 4 SFX tU istre issu tistre SFX tU istre issus tistre SFX tU istre issue tistre SFX tU istre issues tistre SFX uA Y 45 SFX uA tre tre/n'q'd'l'm't's' tre SFX uA tre tant/n'q'l'm't's' tre SFX uA tre tu/L'D'Q' tre SFX uA tre tus/D'Q' tre SFX uA tre tue/L'D'Q' tre SFX uA tre tues/D'Q' tre SFX uA ttre ts/n'q'j'l'm't' ttre SFX uA ttre t/n'q'l'm't's' ttre SFX uA tre ts/n'q'j'l'm't' embatre SFX uA tre t/n'q'l'm't's' embatre SFX uA tre tons/n'q'l't' tre SFX uA tre tez/n'q'l'm' tre SFX uA tre tent/n'q'l'm't's' tre SFX uA tre tais/n'q'j'l'm't' tre SFX uA tre tait/n'q'l'm't's' tre SFX uA tre tions/n'q'l't' tre SFX uA tre tiez/n'q'l'm' tre SFX uA tre taient/n'q'l'm't's' tre SFX uA tre tis/n'q'j'l'm't' tre SFX uA tre tit/n'q'l'm't's' tre SFX uA tre tîmes/n'q'l't' tre SFX uA tre tîtes/n'q'l'm' tre SFX uA tre tirent/n'q'l'm't's' tre SFX uA tre trai/n'q'j'l'm't' tre SFX uA tre tras/n'q'l'm't' tre SFX uA tre tra/n'q'l'm't's' tre SFX uA tre trons/n'q'l't' tre SFX uA tre trez/n'q'l'm' tre SFX uA tre tront/n'q'l'm't's' tre SFX uA tre trais/n'q'j'l'm't' tre SFX uA tre trait/n'q'l'm't's' tre SFX uA tre trions/n'q'l't' tre SFX uA tre triez/n'q'l'm' tre SFX uA tre traient/n'q'l'm't's' tre SFX uA tre te/n'q'j'l'm't's' tre SFX uA tre tes/n'l'm't' tre SFX uA tre tisse/n'q'j'l'm't' tre SFX uA tre tisses/n'q'l'm't' tre SFX uA tre tît/n'q'l'm't's' tre SFX uA tre tissions/n'q'l't' tre SFX uA tre tissiez/n'q'l'm' tre SFX uA tre tissent/n'q'l'm't's' tre SFX uA tre s/n'l'm't' tre SFX uA tre tons/n'l' tre SFX uA tre tez/n'l'm' tre SFX uC Y 43 SFX uC battre battre/m't's' battre SFX uC battre battant/m't's' battre SFX uC battre battu battre SFX uC battre battus battre SFX uC battre battue battre SFX uC battre battues battre SFX uC battre bats/m't' battre SFX uC battre bat/s' battre SFX uC battre battons battre SFX uC battre battez battre SFX uC battre battent/s' battre SFX uC battre battais/m't' battre SFX uC battre battait/s' battre SFX uC battre battions battre SFX uC battre battiez battre SFX uC battre battaient/s' battre SFX uC battre battis/m't' battre SFX uC battre battit/s' battre SFX uC battre battîmes battre SFX uC battre battîtes battre SFX uC battre battirent/s' battre SFX uC battre battrai/m' battre SFX uC battre battras/t' battre SFX uC battre battra/s' battre SFX uC battre battrons battre SFX uC battre battrez battre SFX uC battre battront/s' battre SFX uC battre battrais/m't' battre SFX uC battre battrait/s' battre SFX uC battre battrions battre SFX uC battre battriez battre SFX uC battre battraient/s' battre SFX uC battre batte/m's' battre SFX uC battre battes/t' battre SFX uC battre battisse/m' battre SFX uC battre battisses/t' battre SFX uC battre battît/s' battre SFX uC battre battissions battre SFX uC battre battissiez battre SFX uC battre battissent/s' battre SFX uC battre bats/t' battre SFX uC battre battons battre SFX uC battre battez battre SFX uD Y 33 SFX uD battre battre/s' battre SFX uD battre battant/s' battre SFX uD battre battu battre SFX uD battre battus battre SFX uD battre battue battre SFX uD battre battues battre SFX uD battre bat/s' battre SFX uD battre battons battre SFX uD battre battez battre SFX uD battre battent/s' battre SFX uD battre battait/s' battre SFX uD battre battions battre SFX uD battre battiez battre SFX uD battre battaient/s' battre SFX uD battre battit/s' battre SFX uD battre battîmes battre SFX uD battre battîtes battre SFX uD battre battirent/s' battre SFX uD battre battra/s' battre SFX uD battre battrons battre SFX uD battre battrez battre SFX uD battre battront/s' battre SFX uD battre battrait/s' battre SFX uD battre battrions battre SFX uD battre battriez battre SFX uD battre battraient/s' battre SFX uD battre batte/s' battre SFX uD battre battît/s' battre SFX uD battre battissions battre SFX uD battre battissiez battre SFX uD battre battissent/s' battre SFX uD battre battons-nous battre SFX uD battre battez-vous battre SFX vA Y 42 SFX vA ettre ettre/n'q'd'l'm't's' mettre SFX vA ettre ettant/n'q'l'm't's' mettre SFX vA ettre is/L'D'Q' mettre SFX vA ettre ise/L'D'Q' mettre SFX vA ettre ises/D'Q' mettre SFX vA ettre ets/n'q'j'l'm't' mettre SFX vA ettre et/n'q'l'm't's' mettre SFX vA ettre ettons/n'q'l't' mettre SFX vA ettre ettez/n'q'l'm' mettre SFX vA ettre ettent/n'q'l'm't's' mettre SFX vA ettre ettais/n'q'j'l'm't' mettre SFX vA ettre ettait/n'q'l'm't's' mettre SFX vA ettre ettions/n'q'l't' mettre SFX vA ettre ettiez/n'q'l'm' mettre SFX vA ettre ettaient/n'q'l'm't's' mettre SFX vA ettre is/n'q'j'l'm't' mettre SFX vA ettre it/n'q'l'm't's' mettre SFX vA ettre îmes/n'q'l't' mettre SFX vA ettre îtes/n'q'l'm' mettre SFX vA ettre irent/n'q'l'm't's' mettre SFX vA ettre ettrai/n'q'j'l'm't' mettre SFX vA ettre ettras/n'q'l'm't' mettre SFX vA ettre ettra/n'q'l'm't's' mettre SFX vA ettre ettrons/n'q'l't' mettre SFX vA ettre ettrez/n'q'l'm' mettre SFX vA ettre ettront/n'q'l'm't's' mettre SFX vA ettre ettrais/n'q'j'l'm't' mettre SFX vA ettre ettrait/n'q'l'm't's' mettre SFX vA ettre ettrions/n'q'l't' mettre SFX vA ettre ettriez/n'q'l'm' mettre SFX vA ettre ettraient/n'q'l'm't's' mettre SFX vA ettre ette/n'q'j'l'm't's' mettre SFX vA ettre ettes/n'l'm't' mettre SFX vA ettre isse/n'q'j'l'm't' mettre SFX vA ettre isses/n'q'l'm't' mettre SFX vA ettre ît/n'q'l'm't's' mettre SFX vA ettre issions/n'q'l't' mettre SFX vA ettre issiez/n'q'l'm' mettre SFX vA ettre issent/n'q'l'm't's' mettre SFX vA ettre ets/n'l'm't' mettre SFX vA ettre ettons/n'l' mettre SFX vA ettre ettez/n'l'm' mettre SFX vC Y 42 SFX vC mettre mettre/m't's' mettre SFX vC mettre mettant/m't's' mettre SFX vC mettre mis mettre SFX vC mettre mise mettre SFX vC mettre mises mettre SFX vC mettre mets/m't' mettre SFX vC mettre met/s' mettre SFX vC mettre mettons mettre SFX vC mettre mettez mettre SFX vC mettre mettent/s' mettre SFX vC mettre mettais/m't' mettre SFX vC mettre mettait/s' mettre SFX vC mettre mettions mettre SFX vC mettre mettiez mettre SFX vC mettre mettaient/s' mettre SFX vC mettre mis/m't' mettre SFX vC mettre mit/s' mettre SFX vC mettre mîmes mettre SFX vC mettre mîtes mettre SFX vC mettre mirent/s' mettre SFX vC mettre mettrai/m' mettre SFX vC mettre mettras/t' mettre SFX vC mettre mettra/s' mettre SFX vC mettre mettrons mettre SFX vC mettre mettrez mettre SFX vC mettre mettront/s' mettre SFX vC mettre mettrais/m't' mettre SFX vC mettre mettrait/s' mettre SFX vC mettre mettrions mettre SFX vC mettre mettriez mettre SFX vC mettre mettraient/s' mettre SFX vC mettre mette/m's' mettre SFX vC mettre mettes/t' mettre SFX vC mettre misse/m' mettre SFX vC mettre misses/t' mettre SFX vC mettre mît/s' mettre SFX vC mettre missions mettre SFX vC mettre missiez mettre SFX vC mettre missent/s' mettre SFX vC mettre mets mettre SFX vC mettre mettons mettre SFX vC mettre mettez mettre SFX wA N 42 SFX wA eindre eignant eindre SFX wA eindre eint eindre SFX wA eindre eints eindre SFX wA eindre einte eindre SFX wA eindre eintes eindre SFX wA eindre eins eindre SFX wA eindre eint eindre SFX wA eindre eignons eindre SFX wA eindre eignez eindre SFX wA eindre eignent eindre SFX wA eindre eignais eindre SFX wA eindre eignait eindre SFX wA eindre eignions eindre SFX wA eindre eigniez eindre SFX wA eindre eignaient eindre SFX wA eindre eignis eindre SFX wA eindre eignit eindre SFX wA eindre eignîmes eindre SFX wA eindre eignîtes eindre SFX wA eindre eignirent eindre SFX wA eindre eindrai eindre SFX wA eindre eindras eindre SFX wA eindre eindra eindre SFX wA eindre eindrons eindre SFX wA eindre eindrez eindre SFX wA eindre eindront eindre SFX wA eindre eindrais eindre SFX wA eindre eindrait eindre SFX wA eindre eindrions eindre SFX wA eindre eindriez eindre SFX wA eindre eindraient eindre SFX wA eindre eigne eindre SFX wA eindre eignes eindre SFX wA eindre eignisse eindre SFX wA eindre eignisses eindre SFX wA eindre eignît eindre SFX wA eindre eignissions eindre SFX wA eindre eignissiez eindre SFX wA eindre eignissent eindre SFX wA eindre eins eindre SFX wA eindre eignons eindre SFX wA eindre eignez eindre SFX wB Y 43 SFX wB indre indre/n'q'd'l'm't's' indre SFX wB indre ignant/n'q'l'm't's' indre SFX wB indre int/L'D'Q' indre SFX wB indre ints/D'Q' indre SFX wB indre inte/L'D'Q' indre SFX wB indre intes/D'Q' indre SFX wB indre ins/n'q'j'l'm't' indre SFX wB indre int/n'q'l'm't's' indre SFX wB indre ignons/n'q'l't' indre SFX wB indre ignez/n'q'l'm' indre SFX wB indre ignent/n'q'l'm't's' indre SFX wB indre ignais/n'q'j'l'm't' indre SFX wB indre ignait/n'q'l'm't's' indre SFX wB indre ignions/n'q'l't' indre SFX wB indre igniez/n'q'l'm' indre SFX wB indre ignaient/n'q'l'm't's' indre SFX wB indre ignis/n'q'j'l'm't' indre SFX wB indre ignit/n'q'l'm't's' indre SFX wB indre ignîmes/n'q'l't' indre SFX wB indre ignîtes/n'q'l'm' indre SFX wB indre ignirent/n'q'l'm't's' indre SFX wB indre indrai/n'q'j'l'm't' indre SFX wB indre indras/n'q'l'm't' indre SFX wB indre indra/n'q'l'm't's' indre SFX wB indre indrons/n'q'l't' indre SFX wB indre indrez/n'q'l'm' indre SFX wB indre indront/n'q'l'm't's' indre SFX wB indre indrais/n'q'j'l'm't' indre SFX wB indre indrait/n'q'l'm't's' indre SFX wB indre indrions/n'q'l't' indre SFX wB indre indriez/n'q'l'm' indre SFX wB indre indraient/n'q'l'm't's' indre SFX wB indre igne/n'q'j'l'm't's' indre SFX wB indre ignes/n'l'm't' indre SFX wB indre ignisse/n'q'j'l'm't' indre SFX wB indre ignisses/n'q'l'm't' indre SFX wB indre ignît/n'q'l'm't's' indre SFX wB indre ignissions/n'q'l't' indre SFX wB indre ignissiez/n'q'l'm' indre SFX wB indre ignissent/n'q'l'm't's' indre SFX wB indre ins/n'l'm't' indre SFX wB indre ignons/n'l' indre SFX wB indre ignez/n'l'm' indre SFX wD N 45 SFX wD aire aisant faire SFX wD aire ait faire SFX wD aire aits faire SFX wD aire aite faire SFX wD aire aites faire SFX wD aire ais faire SFX wD aire ait faire SFX wD aire aisons faire SFX wD aire aites faire SFX wD aire ont faire SFX wD aire aisais faire SFX wD aire aisait faire SFX wD aire aisions faire SFX wD aire aisiez faire SFX wD aire aisaient faire SFX wD aire is faire SFX wD aire it faire SFX wD aire îmes faire SFX wD aire îtes faire SFX wD aire irent faire SFX wD aire erai faire SFX wD aire eras faire SFX wD aire era faire SFX wD aire erons faire SFX wD aire erez faire SFX wD aire eront faire SFX wD aire erais faire SFX wD aire erait faire SFX wD aire erions faire SFX wD aire eriez faire SFX wD aire eraient faire SFX wD aire asse faire SFX wD aire asses faire SFX wD aire assions faire SFX wD aire assiez faire SFX wD aire assent faire SFX wD aire isse faire SFX wD aire isses faire SFX wD aire ît faire SFX wD aire issions faire SFX wD aire issiez faire SFX wD aire issent faire SFX wD aire ais faire SFX wD aire aisons faire SFX wD aire aites faire SFX wF N 13 SFX wF faire faisant faire SFX wF faire fait faire SFX wF faire faits faire SFX wF faire faite faire SFX wF faire faites faire SFX wF faire fais faire SFX wF faire fait faire SFX wF faire faisons faire SFX wF faire faites faire SFX wF faire font faire SFX wF faire fais faire SFX wF faire faisons faire SFX wF faire faites faire SFX wG N 5 SFX wG aire aisant faire SFX wG aire ait faire SFX wG aire aits faire SFX wG aire aite faire SFX wG aire aites faire SFX wL Y 32 SFX wL raire raire/n'q'd'l'm't's' traire SFX wL raire rayant/n'q'l'm't's' traire SFX wL raire rait/L'D'Q' traire SFX wL raire raits/D'Q' traire SFX wL raire raite/L'D'Q' traire SFX wL raire raites/D'Q' traire SFX wL raire rais/n'q'j'l'm't' traire SFX wL raire rait/n'q'l'm't's' traire SFX wL raire rayons/n'q'l't' traire SFX wL raire rayez/n'q'l'm' traire SFX wL raire raient/n'q'l'm't's' traire SFX wL raire rayais/n'q'j'l'm't' traire SFX wL raire rayait/n'q'l'm't's' traire SFX wL raire rayions/n'q'l't' traire SFX wL raire rayiez/n'q'l'm' traire SFX wL raire rayaient/n'q'l'm't's' traire SFX wL raire rairai/n'q'j'l'm't' traire SFX wL raire rairas/n'q'l'm't' traire SFX wL raire raira/n'q'l'm't's' traire SFX wL raire rairons/n'q'l't' traire SFX wL raire rairez/n'q'l'm' traire SFX wL raire rairont/n'q'l'm't's' traire SFX wL raire rairais/n'q'j'l'm't' traire SFX wL raire rairait/n'q'l'm't's' traire SFX wL raire rairions/n'q'l't' traire SFX wL raire rairiez/n'q'l'm' traire SFX wL raire rairaient/n'q'l'm't's' traire SFX wL raire raie/n'q'j'l'm't's' traire SFX wL raire raies/n'q'l'm't' traire SFX wL raire rais/n'l'm't' traire SFX wL raire rayons/n'l' traire SFX wL raire rayez/n'l'm' traire SFX wM N 28 SFX wM aire ayant raire SFX wM aire ait raire SFX wM aire ais raire SFX wM aire ait raire SFX wM aire ayons raire SFX wM aire ayez raire SFX wM aire aient raire SFX wM aire ayais raire SFX wM aire ayait raire SFX wM aire ayions raire SFX wM aire ayiez raire SFX wM aire ayaient raire SFX wM aire airai raire SFX wM aire airas raire SFX wM aire aira raire SFX wM aire airons raire SFX wM aire airez raire SFX wM aire airont raire SFX wM aire airais raire SFX wM aire airait raire SFX wM aire airions raire SFX wM aire airiez raire SFX wM aire airaient raire SFX wM aire aie raire SFX wM aire aies raire SFX wM aire ais raire SFX wM aire ayons raire SFX wM aire ayez raire SFX wN N 39 SFX wN aire aisant aire SFX wN aire ais aire SFX wN aire ait taire SFX wN aire aît plaire SFX wN aire aisons aire SFX wN aire aisez aire SFX wN aire aisent aire SFX wN aire aisais aire SFX wN aire aisait aire SFX wN aire aisions aire SFX wN aire aisiez aire SFX wN aire aisaient aire SFX wN aire us aire SFX wN aire ut aire SFX wN aire ûmes aire SFX wN aire ûtes aire SFX wN aire urent aire SFX wN aire airai aire SFX wN aire airas aire SFX wN aire aira aire SFX wN aire airons aire SFX wN aire airez aire SFX wN aire airont aire SFX wN aire airais aire SFX wN aire airait aire SFX wN aire airions aire SFX wN aire airiez aire SFX wN aire airaient aire SFX wN aire aise aire SFX wN aire aises aire SFX wN aire usse aire SFX wN aire usses aire SFX wN aire ût aire SFX wN aire ussions aire SFX wN aire ussiez aire SFX wN aire ussent aire SFX wN aire ais aire SFX wN aire aisons aire SFX wN aire aisez aire SFX wO N 42 SFX wO aindre aignant aindre SFX wO aindre aint aindre SFX wO aindre aints aindre SFX wO aindre ainte aindre SFX wO aindre aintes aindre SFX wO aindre ains aindre SFX wO aindre aint aindre SFX wO aindre aignons aindre SFX wO aindre aignez aindre SFX wO aindre aignent aindre SFX wO aindre aignais aindre SFX wO aindre aignait aindre SFX wO aindre aignions aindre SFX wO aindre aigniez aindre SFX wO aindre aignaient aindre SFX wO aindre aignis aindre SFX wO aindre aignit aindre SFX wO aindre aignîmes aindre SFX wO aindre aignîtes aindre SFX wO aindre aignirent aindre SFX wO aindre aindrai aindre SFX wO aindre aindras aindre SFX wO aindre aindra aindre SFX wO aindre aindrons aindre SFX wO aindre aindrez aindre SFX wO aindre aindront aindre SFX wO aindre aindrais aindre SFX wO aindre aindrait aindre SFX wO aindre aindrions aindre SFX wO aindre aindriez aindre SFX wO aindre aindraient aindre SFX wO aindre aigne aindre SFX wO aindre aignes aindre SFX wO aindre aignisse aindre SFX wO aindre aignisses aindre SFX wO aindre aignît aindre SFX wO aindre aignissions aindre SFX wO aindre aignissiez aindre SFX wO aindre aignissent aindre SFX wO aindre ains aindre SFX wO aindre aignons aindre SFX wO aindre aignez aindre SFX wP N 42 SFX wP aincre ainquant vaincre SFX wP aincre aincu vaincre SFX wP aincre aincus vaincre SFX wP aincre aincue vaincre SFX wP aincre aincues vaincre SFX wP aincre aincs vaincre SFX wP aincre ainc vaincre SFX wP aincre ainquons vaincre SFX wP aincre ainquez vaincre SFX wP aincre ainquent vaincre SFX wP aincre ainquais vaincre SFX wP aincre ainquait vaincre SFX wP aincre ainquions vaincre SFX wP aincre ainquiez vaincre SFX wP aincre ainquaient vaincre SFX wP aincre ainquis vaincre SFX wP aincre ainquit vaincre SFX wP aincre ainquîmes vaincre SFX wP aincre ainquîtes vaincre SFX wP aincre ainquirent vaincre SFX wP aincre aincrai vaincre SFX wP aincre aincras vaincre SFX wP aincre aincra vaincre SFX wP aincre aincrons vaincre SFX wP aincre aincrez vaincre SFX wP aincre aincront vaincre SFX wP aincre aincrais vaincre SFX wP aincre aincrait vaincre SFX wP aincre aincrions vaincre SFX wP aincre aincriez vaincre SFX wP aincre aincraient vaincre SFX wP aincre ainque vaincre SFX wP aincre ainques vaincre SFX wP aincre ainquisse vaincre SFX wP aincre ainquisses vaincre SFX wP aincre ainquît vaincre SFX wP aincre ainquissions vaincre SFX wP aincre ainquissiez vaincre SFX wP aincre ainquissent vaincre SFX wP aincre aincs vaincre SFX wP aincre ainquons vaincre SFX wP aincre ainquez vaincre SFX wQ Y 42 SFX wQ tre tre/n'q'd'm't's' tre SFX wQ aître aissant/n'q'd'm't's' aître SFX wQ aître ais/n'q'j'm't' aître SFX wQ aître aît/n'q'm't's' aître SFX wQ aître aissons/n'q't' aître SFX wQ aître aissez/n'q'm' aître SFX wQ aître aissent/n'q'm't's' aître SFX wQ aître aissais/n'q'j'm't' aître SFX wQ aître aissait/n'q'm't's' aître SFX wQ aître aissions/n'q't' aître SFX wQ aître aissiez/n'q'm' aître SFX wQ aître aissaient/n'q'm't's' aître SFX wQ aître us/n'q'j'm't' aître SFX wQ aître ut/n'q'm't's' aître SFX wQ aître ûmes/n'q't' aître SFX wQ aître ûtes/n'q'm' aître SFX wQ aître urent/n'q'm't's' aître SFX wQ tre trai/n'q'j'm't' tre SFX wQ tre tras/n'q'm't' tre SFX wQ tre tra/n'q'm't's' tre SFX wQ tre trons/n'q't' tre SFX wQ tre trez/n'q'm' tre SFX wQ tre tront/n'q'm't's' tre SFX wQ tre trais/n'q'j'm't' tre SFX wQ tre trait/n'q'm't's' tre SFX wQ tre trions/n'q't' tre SFX wQ tre triez/n'q'm' tre SFX wQ tre traient/n'q'm't's' tre SFX wQ aître aisse/n'q'j'm't's' aître SFX wQ aître aisses/n'q'm't' aître SFX wQ aître usse/n'q'j'm't' aître SFX wQ aître usses/n'q'm't' aître SFX wQ aître ût/n'q'm't's' aître SFX wQ aître ussions/n'q't' aître SFX wQ aître ussiez/n'q'm' aître SFX wQ aître ussent/n'q'm't's' aître SFX wQ aître ais/n'm' paraître SFX wQ aître ais connaître SFX wQ aître aissons/n' paraître SFX wQ aître aissons connaître SFX wQ aître aissez/n'm' paraître SFX wQ aître aissez connaître SFX wR N 42 SFX wR aître aissant naître SFX wR aître é naître SFX wR aître és naître SFX wR aître ée naître SFX wR aître ées naître SFX wR aître ais naître SFX wR aître aît naître SFX wR aître aissons naître SFX wR aître aissez naître SFX wR aître aissent naître SFX wR aître aissais naître SFX wR aître aissait naître SFX wR aître aissions naître SFX wR aître aissiez naître SFX wR aître aissaient naître SFX wR aître aquis naître SFX wR aître aquit naître SFX wR aître aquîmes naître SFX wR aître aquîtes naître SFX wR aître aquirent naître SFX wR tre trai tre SFX wR tre tras tre SFX wR tre tra tre SFX wR tre trons tre SFX wR tre trez tre SFX wR tre tront tre SFX wR tre trais tre SFX wR tre trait tre SFX wR tre trions tre SFX wR tre triez tre SFX wR tre traient tre SFX wR aître aisse naître SFX wR aître aisses naître SFX wR aître aquisse naître SFX wR aître aquisses naître SFX wR aître aquît naître SFX wR aître aquissions naître SFX wR aître aquissiez naître SFX wR aître aquissent naître SFX wR aître ais naître SFX wR aître aissons naître SFX wR aître aissez naître SFX wS N 42 SFX wS aître aissant paître SFX wS aître u repaître SFX wS aître us repaître SFX wS aître ue repaître SFX wS aître ues repaître SFX wS aître ais paître SFX wS aître aît paître SFX wS aître aissons paître SFX wS aître aissez paître SFX wS aître aissent paître SFX wS aître aissais paître SFX wS aître aissait paître SFX wS aître aissions paître SFX wS aître aissiez paître SFX wS aître aissaient paître SFX wS aître us repaître SFX wS aître ut repaître SFX wS aître ûmes repaître SFX wS aître ûtes repaître SFX wS aître urent repaître SFX wS tre trai tre SFX wS tre tras tre SFX wS tre tra tre SFX wS tre trons tre SFX wS tre trez tre SFX wS tre tront tre SFX wS tre trais tre SFX wS tre trait tre SFX wS tre trions tre SFX wS tre triez tre SFX wS tre traient tre SFX wS aître aisse paître SFX wS aître aisses paître SFX wS aître usse repaître SFX wS aître usses repaître SFX wS aître ût repaître SFX wS aître ussions repaître SFX wS aître ussiez repaître SFX wS aître ussent repaître SFX wS aître ais paître SFX wS aître aissons paître SFX wS aître aissez paître SFX wT N 46 SFX wT roître roissant croître SFX wT roître rû recroître SFX wT roître rûs recroître SFX wT roître rûe recroître SFX wT roître rûes recroître SFX wT roître ru décroître SFX wT roître rus décroître SFX wT roître rue décroître SFX wT roître rues décroître SFX wT roître rois .croître SFX wT roître roît .croître SFX wT roître roissons croître SFX wT roître roissez croître SFX wT roître roissent croître SFX wT roître roissais croître SFX wT roître roissait croître SFX wT roître roissions croître SFX wT roître roissiez croître SFX wT roître roissaient croître SFX wT roître rus .croître SFX wT roître rut .croître SFX wT roître rûmes croître SFX wT roître rûtes croître SFX wT roître rurent .croître SFX wT tre trai tre SFX wT tre tras tre SFX wT tre tra tre SFX wT tre trons tre SFX wT tre trez tre SFX wT tre tront tre SFX wT tre trais tre SFX wT tre trait tre SFX wT tre trions tre SFX wT tre triez tre SFX wT tre traient tre SFX wT roître roisse croître SFX wT roître roisses croître SFX wT roître russe .croître SFX wT roître russes .croître SFX wT roître rût croître SFX wT roître russions .croître SFX wT roître russiez .croître SFX wT roître russent .croître SFX wT roître rois .croître SFX wT roître roissons croître SFX wT roître roissez croître SFX wU N 15 SFX wU roître rû croître SFX wU roître rûs croître SFX wU roître rûe croître SFX wU roître rûes croître SFX wU roître roîs croître SFX wU roître roît croître SFX wU roître rûs croître SFX wU roître rût croître SFX wU roître rûrent croître SFX wU roître rûsse croître SFX wU roître rûsses croître SFX wU roître rûssions croître SFX wU roître rûssiez croître SFX wU roître rûssent croître SFX wU roître roîs croître SFX wV Y 43 SFX wV tre tre/n'q'd'l'm't's' tre SFX wV croître croissant/n'q'd'l'm't's' croître SFX wV croître cru/L'D'Q' croître SFX wV croître crus/D'Q' croître SFX wV croître crue/L'D'Q' croître SFX wV croître crues/D'Q' croître SFX wV croître crois/n'q'j'l'm't' croître SFX wV croître croît/n'q'l's' croître SFX wV croître croissons/n'q'l' croître SFX wV croître croissez/n'q'l' croître SFX wV croître croissent/n'q'l's' croître SFX wV croître croissais/n'q'j'l'm't' croître SFX wV croître croissait/n'q'l's' croître SFX wV croître croissions/n'q'l' croître SFX wV croître croissiez/n'q'l' croître SFX wV croître croissaient/n'q'l's' croître SFX wV croître crus/n'q'j'l'm't' croître SFX wV croître crut/n'q'l's' croître SFX wV croître crûmes/n'q'l' croître SFX wV croître crûtes/n'q'l' croître SFX wV croître crurent/n'q'l's' croître SFX wV tre trai/n'q'j'l'm' tre SFX wV tre tras/n'q'l't' tre SFX wV tre tra/n'q'l's' tre SFX wV tre trons/n'q'l' tre SFX wV tre trez/n'q'l' tre SFX wV tre tront/n'q'l's' tre SFX wV tre trais/n'q'j'l'm't' tre SFX wV tre trait/n'q'l's' tre SFX wV tre trions/n'q'l' tre SFX wV tre triez/n'q'l' tre SFX wV tre traient/n'q'l's' tre SFX wV croître croisse/n'q'j'l'm's' croître SFX wV croître croisses/n'q'l't' croître SFX wV croître crusse/n'q'j'l'm' croître SFX wV croître crusses/n'q'l't' croître SFX wV croître crût/n'q'l's' croître SFX wV croître crussions/n'q'l' croître SFX wV croître crussiez/n'q'l' croître SFX wV croître crussent/n'q'l's' croître SFX wV croître crois/n'l'm' croître SFX wV croître croissons/n'l' croître SFX wV croître croissez/n'l'm' croître SFX xA N 42 SFX xA roire royant croire SFX xA roire ru croire SFX xA roire rus croire SFX xA roire rue croire SFX xA roire rues croire SFX xA roire rois croire SFX xA roire roit croire SFX xA roire royons croire SFX xA roire royez croire SFX xA roire roient croire SFX xA roire royais croire SFX xA roire royait croire SFX xA roire royions croire SFX xA roire royiez croire SFX xA roire royaient croire SFX xA roire rus croire SFX xA roire rut croire SFX xA roire rûmes croire SFX xA roire rûtes croire SFX xA roire rurent croire SFX xA roire roirai croire SFX xA roire roiras croire SFX xA roire roira croire SFX xA roire roirons croire SFX xA roire roirez croire SFX xA roire roiront croire SFX xA roire roirais croire SFX xA roire roirait croire SFX xA roire roirions croire SFX xA roire roiriez croire SFX xA roire roiraient croire SFX xA roire roie croire SFX xA roire roies croire SFX xA roire russe croire SFX xA roire russes croire SFX xA roire rût croire SFX xA roire russions croire SFX xA roire russiez croire SFX xA roire russent croire SFX xA roire rois croire SFX xA roire royons croire SFX xA roire royez croire SFX xC N 42 SFX xC oire uvant boire SFX xC oire u boire SFX xC oire us boire SFX xC oire ue boire SFX xC oire ues boire SFX xC oire ois boire SFX xC oire oit boire SFX xC oire uvons boire SFX xC oire uvez boire SFX xC oire oivent boire SFX xC oire uvais boire SFX xC oire uvait boire SFX xC oire uvions boire SFX xC oire uviez boire SFX xC oire uvaient boire SFX xC oire us boire SFX xC oire ut boire SFX xC oire ûmes boire SFX xC oire ûtes boire SFX xC oire urent boire SFX xC oire oirai boire SFX xC oire oiras boire SFX xC oire oira boire SFX xC oire oirons boire SFX xC oire oirez boire SFX xC oire oiront boire SFX xC oire oirais boire SFX xC oire oirait boire SFX xC oire oirions boire SFX xC oire oiriez boire SFX xC oire oiraient boire SFX xC oire oive boire SFX xC oire oives boire SFX xC oire usse boire SFX xC oire usses boire SFX xC oire ût boire SFX xC oire ussions boire SFX xC oire ussiez boire SFX xC oire ussent boire SFX xC oire ois boire SFX xC oire uvons boire SFX xC oire uvez boire SFX xD Y 43 SFX xD boire boire/m't's' boire SFX xD boire buvant/m't's' boire SFX xD boire bu boire SFX xD boire bus boire SFX xD boire bue boire SFX xD boire bues boire SFX xD boire bois/m't' boire SFX xD boire boit/s' boire SFX xD boire buvons boire SFX xD boire buvez boire SFX xD boire boivent/s' boire SFX xD boire buvais/m't' boire SFX xD boire buvait/s' boire SFX xD boire buvions boire SFX xD boire buviez boire SFX xD boire buvaient/s' boire SFX xD boire bus/m't' boire SFX xD boire but/s' boire SFX xD boire bûmes boire SFX xD boire bûtes boire SFX xD boire burent/s' boire SFX xD boire boirai/m' boire SFX xD boire boiras/t' boire SFX xD boire boira/s' boire SFX xD boire boirons boire SFX xD boire boirez boire SFX xD boire boiront/s' boire SFX xD boire boirais/m't' boire SFX xD boire boirait/s' boire SFX xD boire boirions boire SFX xD boire boiriez boire SFX xD boire boiraient/s' boire SFX xD boire boive/m's' boire SFX xD boire boives/t' boire SFX xD boire busse/m' boire SFX xD boire busses/t' boire SFX xD boire bût/s' boire SFX xD boire bussions boire SFX xD boire bussiez boire SFX xD boire bussent/s' boire SFX xD boire bois/t' boire SFX xD boire buvons boire SFX xD boire buvez boire SFX xJ N 3 SFX xJ clure clus clure SFX xJ clure cluse clure SFX xJ clure cluses clure SFX xK Y 40 SFX xK clure clure/n'q'd'l'm't's' clure SFX xK clure cluant/n'q'l'm't's' clure SFX xK clure clus/L'D'Q' clure SFX xK clure cluse/L'D'Q' clure SFX xK clure cluses/D'Q' clure SFX xK clure clus/n'q'j'l' clure SFX xK clure clut/n'q'l' clure SFX xK clure cluons/n'q'l' clure SFX xK clure cluez/n'q'l' clure SFX xK clure cluent/n'q'l' clure SFX xK clure cluais/n'q'j'l' clure SFX xK clure cluait/n'q'l' clure SFX xK clure cluions/n'q'l' clure SFX xK clure cluiez/n'q'l' clure SFX xK clure cluaient/n'q'l' clure SFX xK clure clûmes/n'q'l' clure SFX xK clure clûtes/n'q'l' clure SFX xK clure clurent/n'q'l' clure SFX xK clure clurai/n'q'j'l' clure SFX xK clure cluras/n'q'l' clure SFX xK clure clura/n'q'l' clure SFX xK clure clurons/n'q'l' clure SFX xK clure clurez/n'q'l' clure SFX xK clure cluront/n'q'l' clure SFX xK clure clurais/n'q'j'l' clure SFX xK clure clurait/n'q'l' clure SFX xK clure clurions/n'q'l' clure SFX xK clure cluriez/n'q'l' clure SFX xK clure cluraient/n'q'l' clure SFX xK clure clue/n'q'j'l' clure SFX xK clure clues/n'q'l' clure SFX xK clure clusse/n'q'j'l' clure SFX xK clure clusses/n'q'l' clure SFX xK clure clût/n'q'l' clure SFX xK clure clussions/n'q'l' clure SFX xK clure clussiez/n'q'l' clure SFX xK clure clussent/n'q'l' clure SFX xK clure clus/n'l' clure SFX xK clure cluons/n'l' clure SFX xK clure cluez/n'l' clure SFX xL Y 44 SFX xL clure clure/n'q'd'l'm't's' clure SFX xL clure cluant/n'q'l'm't's' clure SFX xL clure clus/L'D'Q' inclure SFX xL clure cluse/L'D'Q' inclure SFX xL clure cluses/D'Q' inclure SFX xL clure clu/L'D'Q' [eo].clure SFX xL clure clus/D'Q' [eo].clure SFX xL clure clue/L'D'Q' [eo].clure SFX xL clure clues/D'Q' [eo].clure SFX xL clure clus/n'q'j'l'm't' clure SFX xL clure clut/n'q'l'm't's' clure SFX xL clure cluons/n'q'l't' clure SFX xL clure cluez/n'q'l'm' clure SFX xL clure cluent/n'q'l'm't's' clure SFX xL clure cluais/n'q'j'l'm't' clure SFX xL clure cluait/n'q'l'm't's' clure SFX xL clure cluions/n'q'l't' clure SFX xL clure cluiez/n'q'l'm' clure SFX xL clure cluaient/n'q'l'm't's' clure SFX xL clure clûmes/n'q'l't' clure SFX xL clure clûtes/n'q'l'm' clure SFX xL clure clurent/n'q'l'm't's' clure SFX xL clure clurai/n'q'j'l'm't' clure SFX xL clure cluras/n'q'l'm't' clure SFX xL clure clura/n'q'l'm't's' clure SFX xL clure clurons/n'q'l't' clure SFX xL clure clurez/n'q'l'm' clure SFX xL clure cluront/n'q'l'm't's' clure SFX xL clure clurais/n'q'j'l'm't' clure SFX xL clure clurait/n'q'l'm't's' clure SFX xL clure clurions/n'q'l't' clure SFX xL clure cluriez/n'q'l'm' clure SFX xL clure cluraient/n'q'l'm't's' clure SFX xL clure clue/n'q'j'l'm't's' clure SFX xL clure clues/n'l'm't' clure SFX xL clure clusse/n'q'j'l'm't' clure SFX xL clure clusses/n'q'l'm't' clure SFX xL clure clût/n'q'l'm't's' clure SFX xL clure clussions/n'q'l't' clure SFX xL clure clussiez/n'q'l'm' clure SFX xL clure clussent/n'q'l'm't's' clure SFX xL clure clus/n'l'm't' clure SFX xL clure cluons/n'l' clure SFX xL clure cluez/n'l'm' clure SFX xM N 14 SFX xM ourdre ourdant sourdre SFX xM ourdre ourd sourdre SFX xM ourdre ourdent sourdre SFX xM ourdre ourdait sourdre SFX xM ourdre ourdaient sourdre SFX xM ourdre ourdit sourdre SFX xM ourdre ourdirent sourdre SFX xM ourdre ourdra sourdre SFX xM ourdre ourdront sourdre SFX xM ourdre ourdrait sourdre SFX xM ourdre ourdraient sourdre SFX xM ourdre ourde sourdre SFX xM ourdre ourdît sourdre SFX xM ourdre ourdissent sourdre SFX xN Y 46 SFX xN soudre soudre/n'q'd'l'm't's' soudre SFX xN soudre solvant/n'q'l'm't's' soudre SFX xN soudre solu résoudre SFX xN soudre solus résoudre SFX xN soudre solue résoudre SFX xN soudre solues résoudre SFX xN soudre sous/L'D'Q' soudre SFX xN soudre soute/L'D'Q' soudre SFX xN soudre soutes/D'Q' soudre SFX xN soudre sous/n'q'j'l'm't' soudre SFX xN soudre sout/n'q'l'm't's' soudre SFX xN soudre solvons/n'q'l't' soudre SFX xN soudre solvez/n'q'l'm' soudre SFX xN soudre solvent/n'q'l'm't's' soudre SFX xN soudre solvais/n'q'j'l'm't' soudre SFX xN soudre solvait/n'q'l'm't's' soudre SFX xN soudre solvions/n'q'l't' soudre SFX xN soudre solviez/n'q'l'm' soudre SFX xN soudre solvaient/n'q'l'm't's' soudre SFX xN soudre solus/n'q'j'l'm't' soudre SFX xN soudre solut/n'q'l'm't's' soudre SFX xN soudre solûmes/n'q'l't' soudre SFX xN soudre solûtes/n'q'l'm' soudre SFX xN soudre solurent/n'q'l'm't's' soudre SFX xN soudre soudrai/n'q'j'l'm't' soudre SFX xN soudre soudras/n'q'l'm't' soudre SFX xN soudre soudra/n'q'l'm't's' soudre SFX xN soudre soudrons/n'q'l't' soudre SFX xN soudre soudrez/n'q'l'm' soudre SFX xN soudre soudront/n'q'l'm't's' soudre SFX xN soudre soudrais/n'q'j'l'm't' soudre SFX xN soudre soudrait/n'q'l'm't's' soudre SFX xN soudre soudrions/n'q'l't' soudre SFX xN soudre soudriez/n'q'l'm' soudre SFX xN soudre soudraient/n'q'l'm't's' soudre SFX xN soudre solve/n'q'j'l'm't's' soudre SFX xN soudre solves/n'l'm't' soudre SFX xN soudre solusse/n'q'j'l'm't' soudre SFX xN soudre solusses/n'q'l'm't' soudre SFX xN soudre solût/n'q'l'm't's' soudre SFX xN soudre solussions/n'q'l't' soudre SFX xN soudre solussiez/n'q'l'm' soudre SFX xN soudre solussent/n'q'l'm't's' soudre SFX xN soudre sous/n'l'm' soudre SFX xN soudre solvons/n'l' soudre SFX xN soudre solvez/n'l'm' soudre SFX xO N 42 SFX xO oudre ousant coudre SFX xO oudre ousu coudre SFX xO oudre ousus coudre SFX xO oudre ousue coudre SFX xO oudre ousues coudre SFX xO oudre ouds coudre SFX xO oudre oud coudre SFX xO oudre ousons coudre SFX xO oudre ousez coudre SFX xO oudre ousent coudre SFX xO oudre ousais coudre SFX xO oudre ousait coudre SFX xO oudre ousions coudre SFX xO oudre ousiez coudre SFX xO oudre ousaient coudre SFX xO oudre ousis coudre SFX xO oudre ousit coudre SFX xO oudre ousîmes coudre SFX xO oudre ousîtes coudre SFX xO oudre ousirent coudre SFX xO oudre oudrai coudre SFX xO oudre oudras coudre SFX xO oudre oudra coudre SFX xO oudre oudrons coudre SFX xO oudre oudrez coudre SFX xO oudre oudront coudre SFX xO oudre oudrais coudre SFX xO oudre oudrait coudre SFX xO oudre oudrions coudre SFX xO oudre oudriez coudre SFX xO oudre oudraient coudre SFX xO oudre ouse coudre SFX xO oudre ouses coudre SFX xO oudre ousisse coudre SFX xO oudre ousisses coudre SFX xO oudre ousît coudre SFX xO oudre ousissions coudre SFX xO oudre ousissiez coudre SFX xO oudre ousissent coudre SFX xO oudre ouds coudre SFX xO oudre ousons coudre SFX xO oudre ousez coudre SFX xP Y 43 SFX xP oudre oudre/n'q'd'l' moudre SFX xP oudre oulant/n'q'l' moudre SFX xP oudre oulu/L'D'Q' moudre SFX xP oudre oulus/D'Q' moudre SFX xP oudre oulue/L'D'Q' moudre SFX xP oudre oulues/D'Q' moudre SFX xP oudre ouds/n'q'l' moudre SFX xP oudre oud/n'q'l' moudre SFX xP oudre oulons/n'q'l' moudre SFX xP oudre oulez/n'q'l' moudre SFX xP oudre oulent/n'q'l' moudre SFX xP oudre oulais/n'q'l' moudre SFX xP oudre oulait/n'q'l' moudre SFX xP oudre oulions/n'q'l' moudre SFX xP oudre ouliez/n'q'l' moudre SFX xP oudre oulaient/n'q'l' moudre SFX xP oudre oulus/n'q'l' moudre SFX xP oudre oulut/n'q'l' moudre SFX xP oudre oulûmes/n'q'l' moudre SFX xP oudre oulûtes/n'q'l' moudre SFX xP oudre oulurent/n'q'l' moudre SFX xP oudre oudrai/n'q'l' moudre SFX xP oudre oudras/n'q'l' moudre SFX xP oudre oudra/n'q'l' moudre SFX xP oudre oudrons/n'q'l' moudre SFX xP oudre oudrez/n'q'l' moudre SFX xP oudre oudront/n'q'l' moudre SFX xP oudre oudrais/n'q'l' moudre SFX xP oudre oudrait/n'q'l' moudre SFX xP oudre oudrions/n'q'l' moudre SFX xP oudre oudriez/n'q'l' moudre SFX xP oudre oudraient/n'q'l' moudre SFX xP oudre oule/n'q'l' moudre SFX xP oudre oules/n'l' moudre SFX xP oudre oulusse/n'q'l' moudre SFX xP oudre oulusses/n'q'l' moudre SFX xP oudre oulût/n'q'l' moudre SFX xP oudre oulussions/n'q'l' moudre SFX xP oudre oulussiez/n'q'l' moudre SFX xP oudre oulussent/n'q'l' moudre SFX xP oudre ouds/n'l'm' moudre SFX xP oudre oulons/n'l' moudre SFX xP oudre oulez/n'l'm' moudre SFX xQ N 42 SFX xQ uivre uivant suivre SFX xQ uivre uivi suivre SFX xQ uivre uivis suivre SFX xQ uivre uivie suivre SFX xQ uivre uivies suivre SFX xQ uivre uis suivre SFX xQ uivre uit suivre SFX xQ uivre uivons suivre SFX xQ uivre uivez suivre SFX xQ uivre uivent suivre SFX xQ uivre uivais suivre SFX xQ uivre uivait suivre SFX xQ uivre uivions suivre SFX xQ uivre uiviez suivre SFX xQ uivre uivaient suivre SFX xQ uivre uivis suivre SFX xQ uivre uivit suivre SFX xQ uivre uivîmes suivre SFX xQ uivre uivîtes suivre SFX xQ uivre uivirent suivre SFX xQ uivre uivrai suivre SFX xQ uivre uivras suivre SFX xQ uivre uivra suivre SFX xQ uivre uivrons suivre SFX xQ uivre uivrez suivre SFX xQ uivre uivront suivre SFX xQ uivre uivrais suivre SFX xQ uivre uivrait suivre SFX xQ uivre uivrions suivre SFX xQ uivre uivriez suivre SFX xQ uivre uivraient suivre SFX xQ uivre uive suivre SFX xQ uivre uives suivre SFX xQ uivre uivisse suivre SFX xQ uivre uivisses suivre SFX xQ uivre uivît suivre SFX xQ uivre uivissions suivre SFX xQ uivre uivissiez suivre SFX xQ uivre uivissent suivre SFX xQ uivre uis suivre SFX xQ uivre uivons suivre SFX xQ uivre uivez suivre SFX xR Y 16 SFX xR suivre suivre/s' suivre SFX xR suivre suivant/s' suivre SFX xR suivre suivi suivre SFX xR suivre suit/s' suivre SFX xR suivre suivent/s' suivre SFX xR suivre suivait/s' suivre SFX xR suivre suivaient/s' suivre SFX xR suivre suivit/s' suivre SFX xR suivre suivirent/s' suivre SFX xR suivre suivra/s' suivre SFX xR suivre suivront/s' suivre SFX xR suivre suivrait/s' suivre SFX xR suivre suivraient/s' suivre SFX xR suivre suive/s' suivre SFX xR suivre suivît/s' suivre SFX xR suivre suivissent/s' suivre SFX xS N 38 SFX xS ivre ivant vivre SFX xS ivre is vivre SFX xS ivre it vivre SFX xS ivre ivons vivre SFX xS ivre ivez vivre SFX xS ivre ivent vivre SFX xS ivre ivais vivre SFX xS ivre ivait vivre SFX xS ivre ivions vivre SFX xS ivre iviez vivre SFX xS ivre ivaient vivre SFX xS ivre écus vivre SFX xS ivre écut vivre SFX xS ivre écûmes vivre SFX xS ivre écûtes vivre SFX xS ivre écurent vivre SFX xS ivre ivrai vivre SFX xS ivre ivras vivre SFX xS ivre ivra vivre SFX xS ivre ivrons vivre SFX xS ivre ivrez vivre SFX xS ivre ivront vivre SFX xS ivre ivrais vivre SFX xS ivre ivrait vivre SFX xS ivre ivrions vivre SFX xS ivre ivriez vivre SFX xS ivre ivraient vivre SFX xS ivre ive vivre SFX xS ivre ives vivre SFX xS ivre écusse vivre SFX xS ivre écusses vivre SFX xS ivre écût vivre SFX xS ivre écussions vivre SFX xS ivre écussiez vivre SFX xS ivre écussent vivre SFX xS ivre is vivre SFX xS ivre ivons vivre SFX xS ivre ivez vivre SFX y1 Y 43 SFX y1 crire crire/n'q'd'l'm't's' crire SFX y1 crire crivant/n'q'l'm't's' crire SFX y1 crire crit/L'D'Q' crire SFX y1 crire crits/D'Q' crire SFX y1 crire crite/L'D'Q' crire SFX y1 crire crites/D'Q' crire SFX y1 crire cris/n'q'j'l'm't' crire SFX y1 crire crit/n'q'l'm't's' crire SFX y1 crire crivons/n'q'l't' crire SFX y1 crire crivez/n'q'l'm' crire SFX y1 crire crivent/n'q'l'm't's' crire SFX y1 crire crivais/n'q'j'l'm't' crire SFX y1 crire crivait/n'q'l'm't's' crire SFX y1 crire crivions/n'q'l't' crire SFX y1 crire criviez/n'q'l'm' crire SFX y1 crire crivaient/n'q'l'm't's' crire SFX y1 crire crivis/n'q'j'l'm't' crire SFX y1 crire crivit/n'q'l'm't's' crire SFX y1 crire crivîmes/n'q'l't' crire SFX y1 crire crivîtes/n'q'l'm' crire SFX y1 crire crivirent/n'q'l'm't's' crire SFX y1 crire crirai/n'q'j'l'm't' crire SFX y1 crire criras/n'q'l'm't' crire SFX y1 crire crira/n'q'l'm't's' crire SFX y1 crire crirons/n'q'l't' crire SFX y1 crire crirez/n'q'l'm' crire SFX y1 crire criront/n'q'l'm't's' crire SFX y1 crire crirais/n'q'j'l'm't' crire SFX y1 crire crirait/n'q'l'm't's' crire SFX y1 crire cririons/n'q'l't' crire SFX y1 crire cririez/n'q'l'm' crire SFX y1 crire criraient/n'q'l'm't's' crire SFX y1 crire crive/n'q'j'l'm't's' crire SFX y1 crire crives/n'l'm't' crire SFX y1 crire crivisse/n'q'j'l'm't' crire SFX y1 crire crivisses/n'q'l'm't' crire SFX y1 crire crivît/n'q'l'm't's' crire SFX y1 crire crivissions/n'q'l't' crire SFX y1 crire crivissiez/n'q'l'm' crire SFX y1 crire crivissent/n'q'l'm't's' crire SFX y1 crire cris/n'l'm't' crire SFX y1 crire crivons/n'l' crire SFX y1 crire crivez/n'l'm' crire SFX yA N 42 SFX yA ire isant lire SFX yA ire u lire SFX yA ire us lire SFX yA ire ue lire SFX yA ire ues lire SFX yA ire is lire SFX yA ire it lire SFX yA ire isons lire SFX yA ire isez lire SFX yA ire isent lire SFX yA ire isais lire SFX yA ire isait lire SFX yA ire isions lire SFX yA ire isiez lire SFX yA ire isaient lire SFX yA ire us lire SFX yA ire ut lire SFX yA ire ûmes lire SFX yA ire ûtes lire SFX yA ire urent lire SFX yA ire irai lire SFX yA ire iras lire SFX yA ire ira lire SFX yA ire irons lire SFX yA ire irez lire SFX yA ire iront lire SFX yA ire irais lire SFX yA ire irait lire SFX yA ire irions lire SFX yA ire iriez lire SFX yA ire iraient lire SFX yA ire ise lire SFX yA ire ises lire SFX yA ire usse lire SFX yA ire usses lire SFX yA ire ût lire SFX yA ire ussions lire SFX yA ire ussiez lire SFX yA ire ussent lire SFX yA ire is lire SFX yA ire isons lire SFX yA ire isez lire SFX yB Y 43 SFX yB lire lire/n'q'd'l'm't's' lire SFX yB lire lisant/n'q'l'm't's' lire SFX yB lire lu/L'D'Q' lire SFX yB lire lus/D'Q' lire SFX yB lire lue/L'D'Q' lire SFX yB lire lues/D'Q' lire SFX yB lire lis/n'q'j'l'm't' lire SFX yB lire lit/n'q'l'm't's' lire SFX yB lire lisons/n'q'l't' lire SFX yB lire lisez/n'q'l'm' lire SFX yB lire lisent/n'q'l'm't's' lire SFX yB lire lisais/n'q'j'l'm't' lire SFX yB lire lisait/n'q'l'm't's' lire SFX yB lire lisions/n'q'l't' lire SFX yB lire lisiez/n'q'l'm' lire SFX yB lire lisaient/n'q'l'm't's' lire SFX yB lire lus/n'q'j'l'm't' lire SFX yB lire lut/n'q'l'm't's' lire SFX yB lire lûmes/n'q'l't' lire SFX yB lire lûtes/n'q'l'm' lire SFX yB lire lurent/n'q'l'm't's' lire SFX yB lire lirai/n'q'j'l'm't' lire SFX yB lire liras/n'q'l'm't' lire SFX yB lire lira/n'q'l'm't's' lire SFX yB lire lirons/n'q'l't' lire SFX yB lire lirez/n'q'l'm' lire SFX yB lire liront/n'q'l'm't's' lire SFX yB lire lirais/n'q'j'l'm't' lire SFX yB lire lirait/n'q'l'm't's' lire SFX yB lire lirions/n'q'l't' lire SFX yB lire liriez/n'q'l'm' lire SFX yB lire liraient/n'q'l'm't's' lire SFX yB lire lise/n'q'j'l'm't's' lire SFX yB lire lises/n'l'm't' lire SFX yB lire lusse/n'q'j'l'm't' lire SFX yB lire lusses/n'q'l'm't' lire SFX yB lire lût/n'q'l'm't's' lire SFX yB lire lussions/n'q'l't' lire SFX yB lire lussiez/n'q'l'm' lire SFX yB lire lussent/n'q'l'm't's' lire SFX yB lire lis/n'l'm' lire SFX yB lire lisons/n'l' lire SFX yB lire lisez/n'l'm' lire SFX yC N 40 SFX yC ire isant dire SFX yC ire it dire SFX yC ire its dire SFX yC ire ite dire SFX yC ire ites dire SFX yC ire is dire SFX yC ire it dire SFX yC ire isons dire SFX yC ire ites dire SFX yC ire isent dire SFX yC ire isais dire SFX yC ire isait dire SFX yC ire isions dire SFX yC ire isiez dire SFX yC ire isaient dire SFX yC ire îmes dire SFX yC ire îtes dire SFX yC ire irent dire SFX yC ire irai dire SFX yC ire iras dire SFX yC ire ira dire SFX yC ire irons dire SFX yC ire irez dire SFX yC ire iront dire SFX yC ire irais dire SFX yC ire irait dire SFX yC ire irions dire SFX yC ire iriez dire SFX yC ire iraient dire SFX yC ire ise dire SFX yC ire ises dire SFX yC ire isse dire SFX yC ire isses dire SFX yC ire ît dire SFX yC ire issions dire SFX yC ire issiez dire SFX yC ire issent dire SFX yC ire is dire SFX yC ire isons dire SFX yC ire ites dire SFX yD Y 41 SFX yD dire dire/n'q'd'l'm't's' dire SFX yD dire disant/n'q'l'm't's' dire SFX yD dire dit/L'D'Q' dire SFX yD dire dits/D'Q' dire SFX yD dire dite/L'D'Q' dire SFX yD dire dites/D'Q' dire SFX yD dire dis/n'q'j'l'm't' dire SFX yD dire dit/n'q'l'm't's' dire SFX yD dire disons/n'q'l't' dire SFX yD dire disez/n'q'l'm' dire SFX yD dire disent/n'q'l'm't's' dire SFX yD dire disais/n'q'j'l'm't' dire SFX yD dire disait/n'q'l'm't's' dire SFX yD dire disions/n'q'l't' dire SFX yD dire disiez/n'q'l'm' dire SFX yD dire disaient/n'q'l'm't's' dire SFX yD dire dîmes/n'q'l't' dire SFX yD dire dîtes/n'q'l'm' dire SFX yD dire dirent/n'q'l'm't's' dire SFX yD dire dirai/n'q'j'l'm't' dire SFX yD dire diras/n'q'l'm't' dire SFX yD dire dira/n'q'l'm't's' dire SFX yD dire dirons/n'q'l't' dire SFX yD dire direz/n'q'l'm' dire SFX yD dire diront/n'q'l'm't's' dire SFX yD dire dirais/n'q'j'l'm't' dire SFX yD dire dirait/n'q'l'm't's' dire SFX yD dire dirions/n'q'l't' dire SFX yD dire diriez/n'q'l'm' dire SFX yD dire diraient/n'q'l'm't's' dire SFX yD dire dise/n'q'j'l'm't's' dire SFX yD dire dises/n'l'm't' dire SFX yD dire disse/n'q'j'l'm't' dire SFX yD dire disses/n'q'l'm't' dire SFX yD dire dît/n'q'l'm't's' dire SFX yD dire dissions/n'q'l't' dire SFX yD dire dissiez/n'q'l'm' dire SFX yD dire dissent/n'q'l'm't's' dire SFX yD dire dis/n'l'm't' dire SFX yD dire disons/n'l' dire SFX yD dire disez/n'l'm' dire SFX yE N 37 SFX yE édire édisant édire SFX yE édire édit édire SFX yE édire édis édire SFX yE édire édit édire SFX yE édire édisons édire SFX yE édire édisez édire SFX yE édire édisent édire SFX yE édire édisais édire SFX yE édire édisait édire SFX yE édire édisions édire SFX yE édire édisiez édire SFX yE édire édisaient édire SFX yE édire édîmes édire SFX yE édire édîtes édire SFX yE édire édirent édire SFX yE édire édirai édire SFX yE édire édiras édire SFX yE édire édira édire SFX yE édire édirons édire SFX yE édire édirez édire SFX yE édire édiront édire SFX yE édire édirais édire SFX yE édire édirait édire SFX yE édire édirions édire SFX yE édire édiriez édire SFX yE édire édiraient édire SFX yE édire édise édire SFX yE édire édises édire SFX yE édire édisse édire SFX yE édire édisses édire SFX yE édire édît édire SFX yE édire édissions édire SFX yE édire édissiez édire SFX yE édire édissent édire SFX yE édire édis édire SFX yE édire édisons édire SFX yE édire édisez édire SFX yF N 36 SFX yF audire audissant udire SFX yF audire audit udire SFX yF audire audits udire SFX yF audire audite udire SFX yF audire audites udire SFX yF audire audis udire SFX yF audire audit udire SFX yF audire audissons udire SFX yF audire audissez udire SFX yF audire audissent udire SFX yF audire audissais udire SFX yF audire audissait udire SFX yF audire audissions udire SFX yF audire audissiez udire SFX yF audire audissaient udire SFX yF audire audîmes udire SFX yF audire audîtes udire SFX yF audire audirent udire SFX yF audire audirai udire SFX yF audire audiras udire SFX yF audire audira udire SFX yF audire audirons udire SFX yF audire audirez udire SFX yF audire audiront udire SFX yF audire audirais udire SFX yF audire audirait udire SFX yF audire audirions udire SFX yF audire audiriez udire SFX yF audire audiraient udire SFX yF audire audisse udire SFX yF audire audisses udire SFX yF audire audisse udire SFX yF audire audît udire SFX yF audire audis udire SFX yF audire audissons udire SFX yF audire audissez udire SFX yG Y 38 SFX yG dire dire/m't's' dire SFX yG dire disant/m't's' dire SFX yG dire dit dire SFX yG dire dis/m't' dire SFX yG dire dit/s' dire SFX yG dire disons dire SFX yG dire disez dire SFX yG dire disent/s' dire SFX yG dire disais/m't' dire SFX yG dire disait/s' dire SFX yG dire disions dire SFX yG dire disiez dire SFX yG dire disaient/s' dire SFX yG dire dîmes dire SFX yG dire dîtes dire SFX yG dire dirent/s' dire SFX yG dire dirai/m' dire SFX yG dire diras/t' dire SFX yG dire dira/s' dire SFX yG dire dirons dire SFX yG dire direz dire SFX yG dire diront/s' dire SFX yG dire dirais/m't' dire SFX yG dire dirait/s' dire SFX yG dire dirions dire SFX yG dire diriez dire SFX yG dire diraient/s' dire SFX yG dire dise/m's' dire SFX yG dire dises/t' dire SFX yG dire disse/m' dire SFX yG dire disses/t' dire SFX yG dire dît/s' dire SFX yG dire dissions dire SFX yG dire dissiez dire SFX yG dire dissent/s' dire SFX yG dire dis/t' dire SFX yG dire disons dire SFX yG dire disez dire SFX yJ N 7 SFX yJ ruire ruissant uire SFX yJ ruire rui uire SFX yJ ruire ruit uire SFX yJ ruire ruissent uire SFX yJ ruire ruissait uire SFX yJ ruire ruissaient uire SFX yJ ruire ruisse uire SFX yK N 4 SFX yK bduire bduit uire SFX yK bduire bduits uire SFX yK bduire bduite uire SFX yK bduire bduites uire SFX yL Y 43 SFX yL uire uire/n'q'd'l'm't's' uire SFX yL uire uisant/n'q'l'm't's' uire SFX yL uire uit/L'D'Q' uire SFX yL uire uits/D'Q' uire SFX yL uire uite/L'D'Q' uire SFX yL uire uites/D'Q' uire SFX yL uire uis/n'q'j'l'm't' uire SFX yL uire uit/n'q'l'm't's' uire SFX yL uire uisons/n'q'l't' uire SFX yL uire uisez/n'q'l'm' uire SFX yL uire uisent/n'q'l'm't's' uire SFX yL uire uisais/n'q'j'l'm't' uire SFX yL uire uisait/n'q'l'm't's' uire SFX yL uire uisions/n'q'l't' uire SFX yL uire uisiez/n'q'l'm' uire SFX yL uire uisaient/n'q'l'm't's' uire SFX yL uire uisis/n'q'j'l'm't' uire SFX yL uire uisit/n'q'l'm't's' uire SFX yL uire uisîmes/n'q'l't' uire SFX yL uire uisîtes/n'q'l'm' uire SFX yL uire uisirent/n'q'l'm't's' uire SFX yL uire uirai/n'q'j'l't' uire SFX yL uire uiras/n'q'l'm' uire SFX yL uire uira/n'q'l'm't's' uire SFX yL uire uirons/n'q'l't' uire SFX yL uire uirez/n'q'l'm' uire SFX yL uire uiront/n'q'l'm't's' uire SFX yL uire uirais/n'q'j'l'm't' uire SFX yL uire uirait/n'q'l'm't's' uire SFX yL uire uirions/n'q'l't' uire SFX yL uire uiriez/n'q'l'm' uire SFX yL uire uiraient/n'q'l'm't's' uire SFX yL uire uise/n'q'j'l'm't's' uire SFX yL uire uises/n'l'm' uire SFX yL uire uisisse/n'q'j'l't' uire SFX yL uire uisisses/n'q'l'm' uire SFX yL uire uisît/n'q'l'm't's' uire SFX yL uire uisissions/n'q'l't' uire SFX yL uire uisissiez/n'q'l'm' uire SFX yL uire uisissent/n'q'l'm't's' uire SFX yL uire uis/n'l'm' uire SFX yL uire uisons/n'l' uire SFX yL uire uisez/n'l'm' uire SFX yM Y 43 SFX yM uire uire/n'q'd'l'm't's' uire SFX yM uire uisant/n'q'l'm't's' uire SFX yM uire uit/L'D'Q' uire SFX yM uire uits/D'Q' uire SFX yM uire uite/L'D'Q' uire SFX yM uire uites/D'Q' uire SFX yM uire uis/n'q'j'l'm't' uire SFX yM uire uit/n'q'l'm't's' uire SFX yM uire uisons/n'q'l't' uire SFX yM uire uisez/n'q'l'm' uire SFX yM uire uisent/n'q'l'm't's' uire SFX yM uire uisais/n'q'j'l'm't' uire SFX yM uire uisait/n'q'l'm't's' uire SFX yM uire uisions/n'q'l't' uire SFX yM uire uisiez/n'q'l'm' uire SFX yM uire uisaient/n'q'l'm't's' uire SFX yM uire uisis/n'q'j'l'm't' uire SFX yM uire uisit/n'q'l'm't's' uire SFX yM uire uisîmes/n'q'l't' uire SFX yM uire uisîtes/n'q'l'm' uire SFX yM uire uisirent/n'q'l'm't's' uire SFX yM uire uirai/n'q'j'l'm't' uire SFX yM uire uiras/n'q'l'm't' uire SFX yM uire uira/n'q'l'm't's' uire SFX yM uire uirons/n'q'l't' uire SFX yM uire uirez/n'q'l'm' uire SFX yM uire uiront/n'q'l'm't's' uire SFX yM uire uirais/n'q'j'l'm't' uire SFX yM uire uirait/n'q'l'm't's' uire SFX yM uire uirions/n'q'l't' uire SFX yM uire uiriez/n'q'l'm' uire SFX yM uire uiraient/n'q'l'm't's' uire SFX yM uire uise/n'q'j'l'm't's' uire SFX yM uire uises/n'l'm't' uire SFX yM uire uisisse/n'q'j'l'm't' uire SFX yM uire uisisses/n'q'l'm't' uire SFX yM uire uisît/n'q'l'm't's' uire SFX yM uire uisissions/n'q'l't' uire SFX yM uire uisissiez/n'q'l'm' uire SFX yM uire uisissent/n'q'l'm't's' uire SFX yM uire uis/n'l'm't' uire SFX yM uire uisons/n'l' uire SFX yM uire uisez/n'l'm' uire SFX yN Y 33 SFX yN truire truire/s' uire SFX yN truire truisant/s' uire SFX yN truire truit uire SFX yN truire truits uire SFX yN truire truite uire SFX yN truire truites uire SFX yN truire truit/s' uire SFX yN truire truisons uire SFX yN truire truisez uire SFX yN truire truisent/s' uire SFX yN truire truisait/s' uire SFX yN truire truisions uire SFX yN truire truisiez uire SFX yN truire truisaient/s' uire SFX yN truire truisit/s' uire SFX yN truire truisîmes uire SFX yN truire truisîtes uire SFX yN truire truisirent/s' uire SFX yN truire truira/s' uire SFX yN truire truirons uire SFX yN truire truirez uire SFX yN truire truiront/s' uire SFX yN truire truirait/s' uire SFX yN truire truirions uire SFX yN truire truiriez uire SFX yN truire truiraient/s' uire SFX yN truire truise/s' uire SFX yN truire truisît/s' uire SFX yN truire truisissions uire SFX yN truire truisissiez uire SFX yN truire truisissent/s' uire SFX yN truire truisons-nous uire SFX yN truire truisez-vous uire SFX yO Y 43 SFX yO détruire détruire/m't's' détruire SFX yO détruire détruisant/m't's' détruire SFX yO détruire détruit détruire SFX yO détruire détruits détruire SFX yO détruire détruite détruire SFX yO détruire détruites détruire SFX yO détruire détruis/m't' détruire SFX yO détruire détruit/s' détruire SFX yO détruire détruisons détruire SFX yO détruire détruisez détruire SFX yO détruire détruisent/s' détruire SFX yO détruire détruisais/m't' détruire SFX yO détruire détruisait/s' détruire SFX yO détruire détruisions détruire SFX yO détruire détruisiez détruire SFX yO détruire détruisaient/s' détruire SFX yO détruire détruisis/m't' détruire SFX yO détruire détruisit/s' détruire SFX yO détruire détruisîmes détruire SFX yO détruire détruisîtes détruire SFX yO détruire détruisirent/s' détruire SFX yO détruire détruirai/m' détruire SFX yO détruire détruiras/t' détruire SFX yO détruire détruira/s' détruire SFX yO détruire détruirons détruire SFX yO détruire détruirez détruire SFX yO détruire détruiront/s' détruire SFX yO détruire détruirais/m't' détruire SFX yO détruire détruirait/s' détruire SFX yO détruire détruirions détruire SFX yO détruire détruiriez détruire SFX yO détruire détruiraient/s' détruire SFX yO détruire détruise/m's' détruire SFX yO détruire détruises/t' détruire SFX yO détruire détruisisse/m' détruire SFX yO détruire détruisisses/t' détruire SFX yO détruire détruisît/s' détruire SFX yO détruire détruisissions détruire SFX yO détruire détruisissiez détruire SFX yO détruire détruisissent/s' détruire SFX yO détruire détruis/t' détruire SFX yO détruire détruisons détruire SFX yO détruire détruisez détruire SFX yU N 39 SFX yU uire uisant uire SFX yU uire ui uire SFX yU uire uis uire SFX yU uire uit uire SFX yU uire uisons uire SFX yU uire uisez uire SFX yU uire uisent uire SFX yU uire uisais uire SFX yU uire uisait uire SFX yU uire uisions uire SFX yU uire uisiez uire SFX yU uire uisaient uire SFX yU uire uisis uire SFX yU uire uisit uire SFX yU uire uisîmes uire SFX yU uire uisîtes uire SFX yU uire uisirent uire SFX yU uire uirai uire SFX yU uire uiras uire SFX yU uire uira uire SFX yU uire uirons uire SFX yU uire uirez uire SFX yU uire uiront uire SFX yU uire uirais uire SFX yU uire uirait uire SFX yU uire uirions uire SFX yU uire uiriez uire SFX yU uire uiraient uire SFX yU uire uise uire SFX yU uire uises uire SFX yU uire uisisse uire SFX yU uire uisisses uire SFX yU uire uisît uire SFX yU uire uisissions uire SFX yU uire uisissiez uire SFX yU uire uisissent uire SFX yU uire uis uire SFX yU uire uisons uire SFX yU uire uisez uire SFX yV N 44 SFX yV ire isant ire SFX yV ire it nfire SFX yV ire its nfire SFX yV ire ite nfire SFX yV ire ites nfire SFX yV ire is cire SFX yV ire ise cire SFX yV ire ises cire SFX yV ire i ffire SFX yV ire is ire SFX yV ire it ire SFX yV ire isons ire SFX yV ire isez ire SFX yV ire isent ire SFX yV ire isais ire SFX yV ire isait ire SFX yV ire isions ire SFX yV ire isiez ire SFX yV ire isaient ire SFX yV ire îmes ire SFX yV ire îtes ire SFX yV ire irent ire SFX yV ire irai ire SFX yV ire iras ire SFX yV ire ira ire SFX yV ire irons ire SFX yV ire irez ire SFX yV ire iront ire SFX yV ire irais ire SFX yV ire irait ire SFX yV ire irions ire SFX yV ire iriez ire SFX yV ire iraient ire SFX yV ire ise ire SFX yV ire ises ire SFX yV ire isse ire SFX yV ire isses ire SFX yV ire ît ire SFX yV ire issions ire SFX yV ire issiez ire SFX yV ire issent ire SFX yV ire is ire SFX yV ire isons ire SFX yV ire isez ire SFX yW N 37 SFX yW ire iant rire SFX yW ire i rire SFX yW ire is rire SFX yW ire it rire SFX yW ire ions rire SFX yW ire iez rire SFX yW ire ient rire SFX yW ire iais rire SFX yW ire iait rire SFX yW ire iions rire SFX yW ire iiez rire SFX yW ire iaient rire SFX yW ire îmes rire SFX yW ire îtes rire SFX yW ire irent rire SFX yW ire irai rire SFX yW ire iras rire SFX yW ire ira rire SFX yW ire irons rire SFX yW ire irez rire SFX yW ire iront rire SFX yW ire irais rire SFX yW ire irait rire SFX yW ire irions rire SFX yW ire iriez rire SFX yW ire iraient rire SFX yW ire ie rire SFX yW ire ies rire SFX yW ire isse rire SFX yW ire isses rire SFX yW ire ît rire SFX yW ire issions rire SFX yW ire issiez rire SFX yW ire issent rire SFX yW ire is rire SFX yW ire ions rire SFX yW ire iez rire SFX yX Y 30 SFX yX nuire nuire/s' nuire SFX yX nuire nuisant/s' nuire SFX yX nuire nui nuire SFX yX nuire nuit/s' nuire SFX yX nuire nuisons nuire SFX yX nuire nuisez nuire SFX yX nuire nuisent/s' nuire SFX yX nuire nuisait/s' nuire SFX yX nuire nuisions nuire SFX yX nuire nuisiez nuire SFX yX nuire nuisaient/s' nuire SFX yX nuire nuisit/s' nuire SFX yX nuire nuisîmes nuire SFX yX nuire nuisîtes nuire SFX yX nuire nuisirent/s' nuire SFX yX nuire nuira/s' nuire SFX yX nuire nuirons nuire SFX yX nuire nuirez nuire SFX yX nuire nuiront/s' nuire SFX yX nuire nuirait/s' nuire SFX yX nuire nuirions nuire SFX yX nuire nuiriez nuire SFX yX nuire nuiraient/s' nuire SFX yX nuire nuise/s' nuire SFX yX nuire nuisît/s' nuire SFX yX nuire nuisissions nuire SFX yX nuire nuisissiez nuire SFX yX nuire nuisissent/s' nuire SFX yX nuire nuisons-nous nuire SFX yX nuire nuisez-vous nuire SFX yY Y 4 SFX yY ccire ccire/n'q'd'l'm't's' occire SFX yY ccire ccis/L'D'Q' occire SFX yY ccire ccise/L'D'Q' occire SFX yY ccire ccises/D'Q' occire SFX yZ N 13 SFX yZ rire risant rire SFX yZ rire rit rire SFX yZ rire rits rire SFX yZ rire rite rire SFX yZ rire rites rire SFX yZ rire ris rire SFX yZ rire rit rire SFX yZ rire rirai rire SFX yZ rire riras rire SFX yZ rire rira rire SFX yZ rire rirais rire SFX yZ rire rirait rire SFX yZ rire ris rire SFX q+ Y 32 SFX q+ enir enu/L'D'Q' enir SFX q+ enir enus/D'Q' enir SFX q+ enir enue/L'D'Q' enir SFX q+ enir enues/D'Q' enir SFX q+ tir ti/L'D'Q' tir SFX q+ tir tis/D'Q' tir SFX q+ tir tie/L'D'Q' tir SFX q+ tir ties/D'Q' tir SFX q+ courir couru/L'D'Q' courir SFX q+ courir courus/D'Q' courir SFX q+ courir courue/L'D'Q' courir SFX q+ courir courues/D'Q' courir SFX q+ ivre écu vivre SFX q+ ivre écus vivre SFX q+ ivre écue vivre SFX q+ ivre écues vivre SFX q+ aire u aire SFX q+ aire us aire SFX q+ aire ue aire SFX q+ aire ues aire SFX q+ dre du dre SFX q+ dre dus dre SFX q+ dre due dre SFX q+ dre dues dre SFX q+ valoir valu .valoir SFX q+ valoir valus .valoir SFX q+ valoir value .valoir SFX q+ valoir values .valoir SFX q+ aître u/L'D'Q' aître SFX q+ aître us/D'Q' aître SFX q+ aître ue/L'D'Q' aître SFX q+ aître ues/D'Q' aître SFX q. Y 8 SFX q. enir enu/q' enir SFX q. tir ti/q' tir SFX q. courir couru/q' courir SFX q. ivre écu vivre SFX q. aire u aire SFX q. dre du dre SFX q. valoir valu/q' .valoir SFX q. aître u/q' aître |
Added gc_lang/fr/xpi/data/dictionaries/fr-FR-classic/fr-FR-classic.dic version [8624e8d9fb].
more than 10,000 changes
Added gc_lang/fr/xpi/data/dictionaries/fr-FR-modern/fr-FR-modern.aff version [31703ae008].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 8383 8384 8385 8386 8387 8388 8389 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 8420 8421 8422 8423 8424 8425 8426 8427 8428 8429 8430 8431 8432 8433 8434 8435 8436 8437 8438 8439 8440 8441 8442 8443 8444 8445 8446 8447 8448 8449 8450 8451 8452 8453 8454 8455 8456 8457 8458 8459 8460 8461 8462 8463 8464 8465 8466 8467 8468 8469 8470 8471 8472 8473 8474 8475 8476 8477 8478 8479 8480 8481 8482 8483 8484 8485 8486 8487 8488 8489 8490 8491 8492 8493 8494 8495 8496 8497 8498 8499 8500 8501 8502 8503 8504 8505 8506 8507 8508 8509 8510 8511 8512 8513 8514 8515 8516 8517 8518 8519 8520 8521 8522 8523 8524 8525 8526 8527 8528 8529 8530 8531 8532 8533 8534 8535 8536 8537 8538 8539 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 8550 8551 8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 8566 8567 8568 8569 8570 8571 8572 8573 8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 8588 8589 8590 8591 8592 8593 8594 8595 8596 8597 8598 8599 8600 8601 8602 8603 8604 8605 8606 8607 8608 8609 8610 8611 8612 8613 8614 8615 8616 8617 8618 8619 8620 8621 8622 8623 8624 8625 8626 8627 8628 8629 8630 8631 8632 8633 8634 8635 8636 8637 8638 8639 8640 8641 8642 8643 8644 8645 8646 8647 8648 8649 8650 8651 8652 8653 8654 8655 8656 8657 8658 8659 8660 8661 8662 8663 8664 8665 8666 8667 8668 8669 8670 8671 8672 8673 8674 8675 8676 8677 8678 8679 8680 8681 8682 8683 8684 8685 8686 8687 8688 8689 8690 8691 8692 8693 8694 8695 8696 8697 8698 8699 8700 8701 8702 8703 8704 8705 8706 8707 8708 8709 8710 8711 8712 8713 8714 8715 8716 8717 8718 8719 8720 8721 8722 8723 8724 8725 8726 8727 8728 8729 8730 8731 8732 8733 8734 8735 8736 8737 8738 8739 8740 8741 8742 8743 8744 8745 8746 8747 8748 8749 8750 8751 8752 8753 8754 8755 8756 8757 8758 8759 8760 8761 8762 8763 8764 8765 8766 8767 8768 8769 8770 8771 8772 8773 8774 8775 8776 8777 8778 8779 8780 8781 8782 8783 8784 8785 8786 8787 8788 8789 8790 8791 8792 8793 8794 8795 8796 8797 8798 8799 8800 8801 8802 8803 8804 8805 8806 8807 8808 8809 8810 8811 8812 8813 8814 8815 8816 8817 8818 8819 8820 8821 8822 8823 8824 8825 8826 8827 8828 8829 8830 8831 8832 8833 8834 8835 8836 8837 8838 8839 8840 8841 8842 8843 8844 8845 8846 8847 8848 8849 8850 8851 8852 8853 8854 8855 8856 8857 8858 8859 8860 8861 8862 8863 8864 8865 8866 8867 8868 8869 8870 8871 8872 8873 8874 8875 8876 8877 8878 8879 8880 8881 8882 8883 8884 8885 8886 8887 8888 8889 8890 8891 8892 8893 8894 8895 8896 8897 8898 8899 8900 8901 8902 8903 8904 8905 8906 8907 8908 8909 8910 8911 8912 8913 8914 8915 8916 8917 8918 8919 8920 8921 8922 8923 8924 8925 8926 8927 8928 8929 8930 8931 8932 8933 8934 8935 8936 8937 8938 8939 8940 8941 8942 8943 8944 8945 8946 | # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. # AFFIXES DU DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “MODERNE” v6.0.3 # par Olivier R. -- licence MPL 2.0 # Généré le 25-04-2017 à 13:20 # Pour améliorer le dictionnaire, allez sur http://www.dicollecte.org/ SET UTF-8 WORDCHARS -’'1234567890. TRY esntiarulodcpmévqfgbhàxèjyêMILzACçôîPâùJFSûBVœRDGNETHXkïOwKWYUëQÉZŒüãÎáöóÈíæÅñäśńÿ MAP 25 MAP aàâäAÀÂÄ MAP eéèêëEÉÈÊË MAP iîïyIÎÏY MAP oôöOÔÖ MAP uùûüUÙÛÜ MAP cçCÇ MAP bB MAP dD MAP fF MAP gG MAP hH MAP jJ MAP kK MAP lL MAP mM MAP nN MAP pP MAP qQ MAP rR MAP sS MAP tT MAP vV MAP wW MAP xX MAP zZ REP 82 REP ^Ca$ Ça REP ^l l' REP ^d d' REP ^n n' REP ^s s' REP ^j j' REP ^m m' REP ^t t' REP ^c c' REP f ph REP ph f REP c qu REP qu c REP k qu REP qu k REP x ct REP ct x REP bb b REP b bb REP cc c REP c cc REP ff f REP f ff REP ll l REP l ll REP mm m REP m mm REP nn n REP n nn REP pp p REP p pp REP rr r REP r rr REP ss s REP s ss REP ss c REP c ss REP ss ç REP ç ss REP tt t REP t tt REP œ oe REP oe œ REP æ ae REP ae æ REP ai é REP é ai REP ai è REP è ai REP ai ê REP ê ai REP ei é REP é ei REP ei è REP è ei REP ei ê REP ê ei REP o au REP au o REP o eau REP eau o REP ett èt REP èt ett REP ell èl REP èl ell REP t th REP th t REP ième$ e REP ème$ e REP è$ e REP mn$ min REP ogue$ ogiste REP ogiste$ ogue REP disez$ dites REP fesez$ faites REP faisez$ faites REP puit puits REP sanctionnable punissable REP questionnable discutable REP antitartre détartrant REP email courriel REP construirent construisirent KEY azertyuiop|qsdfghjklmù|wxcvbn|aéz|yèu|iço|oàp|aqz|zse|edr|rft|tgy|yhu|uji|iko|olpm|qws|sxd|dcf|fvg|gbh|hnj ICONV 41 ICONV ’ ' ICONV ʼ ' ICONV ffi ffi ICONV ffl ffl ICONV ff ff ICONV ſt ft ICONV fi fi ICONV fl fl ICONV st st ICONV à à ICONV â â ICONV ä ä ICONV é é ICONV è è ICONV ê ê ICONV ë ë ICONV î î ICONV ï ï ICONV ô ô ICONV ö ö ICONV ù ù ICONV û û ICONV ü ü ICONV ÿ ÿ ICONV ç ç ICONV À À ICONV   ICONV Ä Ä ICONV É É ICONV È È ICONV Ê Ê ICONV Ë Ë ICONV Î Î ICONV Ï Ï ICONV Ô Ô ICONV Ö Ö ICONV Ù Ù ICONV Û Û ICONV Ü Ü ICONV Ÿ Ÿ ICONV Ç Ç OCONV 1 OCONV ' ’ FLAG long FULLSTRIP NEEDAFFIX () FORBIDDENWORD {} CIRCUMFIX ** KEEPCASE || NOSUGGEST -- BREAK 7 BREAK - BREAK . BREAK · BREAK ^' BREAK ^‘ BREAK '$ BREAK ’$ PFX L' Y 34 PFX L' 0 l' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX L' a l'A a PFX L' à l'À à PFX L' â l' â PFX L' e l'E e PFX L' é l'É é PFX L' è l'È è PFX L' ê l'Ê ê PFX L' i l'I i PFX L' î l'Î î PFX L' o l'O o PFX L' ô l'Ô ô PFX L' u l'U u PFX L' y l'Y y PFX L' h l'H h PFX L' œ l'Œ œ PFX L' æ l'Æ æ PFX L' 0 L' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX L' a L'A a PFX L' à L'À à PFX L' â L' â PFX L' e L'E e PFX L' é L'É é PFX L' è L'È è PFX L' ê L'Ê ê PFX L' i L'I i PFX L' î L'Î î PFX L' o L'O o PFX L' ô L'Ô ô PFX L' u L'U u PFX L' y L'Y y PFX L' h L'H h PFX L' œ L'Œ œ PFX L' æ L'Æ æ PFX D' Y 34 PFX D' 0 d' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX D' a d'A a PFX D' à d'À à PFX D' â d' â PFX D' e d'E e PFX D' é d'É é PFX D' è d'È è PFX D' ê d'Ê ê PFX D' i d'I i PFX D' î d'Î î PFX D' o d'O o PFX D' ô d'Ô ô PFX D' u d'U u PFX D' y d'Y y PFX D' h d'H h PFX D' œ d'Œ œ PFX D' æ d'Æ æ PFX D' 0 D' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX D' a D'A a PFX D' à D'À à PFX D' â D' â PFX D' e D'E e PFX D' é D'É é PFX D' è D'È è PFX D' ê D'Ê ê PFX D' i D'I i PFX D' î D'Î î PFX D' o D'O o PFX D' ô D'Ô ô PFX D' u D'U u PFX D' y D'Y y PFX D' h D'H h PFX D' œ D'Œ œ PFX D' æ D'Æ æ PFX Q' Y 34 PFX Q' 0 qu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q' a qu'A a PFX Q' à qu'À à PFX Q' â qu' â PFX Q' e qu'E e PFX Q' é qu'É é PFX Q' è qu'È è PFX Q' ê qu'Ê ê PFX Q' i qu'I i PFX Q' î qu'Î î PFX Q' o qu'O o PFX Q' ô qu'Ô ô PFX Q' u qu'U u PFX Q' y qu'Y y PFX Q' h qu'H h PFX Q' œ qu'Œ œ PFX Q' æ qu'Æ æ PFX Q' 0 Qu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q' a Qu'A a PFX Q' à Qu'À à PFX Q' â Qu' â PFX Q' e Qu'E e PFX Q' é Qu'É é PFX Q' è Qu'È è PFX Q' ê Qu'Ê ê PFX Q' i Qu'I i PFX Q' î Qu'Î î PFX Q' o Qu'O o PFX Q' ô Qu'Ô ô PFX Q' u Qu'U u PFX Q' y Qu'Y y PFX Q' h Qu'H h PFX Q' œ Qu'Œ œ PFX Q' æ Qu'Æ æ PFX Q* Y 6 PFX Q* 0 quoiqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q* 0 puisqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q* 0 lorsqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q* 0 Quoiqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q* 0 Puisqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Q* 0 Lorsqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] PFX Qj Y 1 PFX Qj 0 jusqu' [aàâeèéêiîoôuyhœæ] PFX Si Y 1 PFX Si 0 s' . SFX S. Y 1 SFX S. 0 s [^sxz] SFX S= Y 1 SFX S= 0 s [^sxz] SFX X. Y 3 SFX X. 0 x [aeoœ]u SFX X. l ux al SFX X. il ux ail SFX A. Y 1 SFX A. 0 s [^sxz] SFX I. Y 1 SFX I. 0 s [^sxz] SFX F. Y 78 SFX F. 0 s [eë] SFX F. e 0 [éiï]e SFX F. e s [éiï]e SFX F. rice eur [dt]rice SFX F. rice eurs [dt]rice SFX F. de d de SFX F. de ds de SFX F. fe f fe SFX F. fe fs fe SFX F. anche anc anche SFX F. anche ancs anche SFX F. èche ec èche SFX F. èche ecs èche SFX F. aiche ais aiche SFX F. aîche ais aîche SFX F. khe kh khe SFX F. khe khs khe SFX F. he h [ut]he SFX F. he hs [ut]he SFX F. ke k [^è]ke SFX F. ke ks [^è]ke SFX F. èke ek èke SFX F. èke eks èke SFX F. le l [aiouûh]le SFX F. le ls [aiouûh]le SFX F. lle l [eiu]lle SFX F. lle ls [eiu]lle SFX F. olle ou olle SFX F. olle ous olle SFX F. olle ol olle SFX F. olle ols olle SFX F. ne n [aiouï]ne SFX F. ne ns [aiouï]ne SFX F. nne n [aeo]nne SFX F. nne ns [aeo]nne SFX F. ène en ène SFX F. ène ens ène SFX F. igne in igne SFX F. igne ins igne SFX F. re r [aiouûy]re SFX F. re rs [aiouûy]re SFX F. ère er ère SFX F. ère ers ère SFX F. se s [^us]se SFX F. esse e [^eo].esse SFX F. esse es [^eo].esse SFX F. rofesse rofès rofesse SFX F. eresse eur eresse SFX F. eresse eurs eresse SFX F. oresse eur oresse SFX F. oresse eurs oresse SFX F. sse s [^e]sse SFX F. use us [^eo]use SFX F. euse eur euse SFX F. euse eurs euse SFX F. te t [^èt]te SFX F. te ts [^èt]te SFX F. tte t tte SFX F. tte ts tte SFX F. ète et ète SFX F. ète ets ète SFX F. ue u [^gq]ue SFX F. ue us [^gq]ue SFX F. gue g gue SFX F. gue gs gue SFX F. cque c cque SFX F. cque cs cque SFX F. que c [^c]que SFX F. que cs [^c]que SFX F. ève ef ève SFX F. ève efs ève SFX F. ve f [iïu]ve SFX F. ve fs [iïu]ve SFX F. uë u uë SFX F. uë us uë SFX F. üe u üe SFX F. üe us üe SFX F. ze z ze SFX W. N 15 SFX W. e es e SFX W. ce x ce SFX W. use ux [eo]use SFX W. ausse aux ausse SFX W. ousse oux ousse SFX W. ale al ale SFX W. ale aux ale SFX W. elle eau elle SFX W. elle eaux elle SFX W. elle el [bv]elle SFX W. elle els [bv]elle SFX W. ieille ieux ieille SFX W. ieille ieil ieille SFX W. ofolle oufou ofolle SFX W. ofolle oufous ofolle SFX S* Y 2 SFX S* 0 0/D'L'Q' [^sxz] SFX S* 0 s/D'Q' [^sxz] SFX X* Y 4 SFX X* 0 0/D'L'Q' [ul] SFX X* 0 x/D'Q' [aeoœ]u SFX X* l ux/D'Q' al SFX X* il ux/D'Q' ail SFX A* Y 12 SFX A* an an/D'L'Q' an SFX A* an ans/D'Q' an SFX A* f f/D'L'Q' f SFX A* f fs/D'Q' f SFX A* h h/D'L'Q' h SFX A* h hs/D'Q' h SFX A* s s/D'L'Q' s SFX A* x x/D'L'Q' x SFX A* y y/D'L'Q' y SFX A* y ys/D'Q' y SFX A* zz zz/D'L'Q' zz SFX A* z z/D'L'Q' [^z]z SFX I* Y 11 SFX I* a a/D'L'Q' a SFX I* a as/D'Q' a SFX I* e e/D'L'Q' e SFX I* e es/D'Q' e SFX I* en en/D'L'Q' en SFX I* en ens/D'Q' en SFX I* o o/D'L'Q' o SFX I* o os/D'Q' o SFX I* um um/D'L'Q' um SFX I* um ums/D'Q' um SFX I* us us/D'L'Q' us SFX F* Y 59 SFX F* 0 0/D'L'Q' [eë] SFX F* 0 s/D'Q' [eë] SFX F* e 0/D'L'Q' [éiï]e SFX F* e s/D'Q' [éiï]e SFX F* rice eur/D'L'Q' [dt]rice SFX F* rice eurs/D'Q' [dt]rice SFX F* de d/D'L'Q' de SFX F* de ds/D'Q' de SFX F* he h/D'L'Q' [ut]he SFX F* he hs/D'Q' [ut]he SFX F* èke ek/D'L'Q' èke SFX F* èke eks/D'Q' èke SFX F* le l/D'L'Q' [aiouû]le SFX F* le ls/D'Q' [aiouû]le SFX F* lle l/D'L'Q' [eiu]lle SFX F* lle ls/D'Q' [eiu]lle SFX F* ne n/D'L'Q' [aiouï]ne SFX F* ne ns/D'Q' [aiouï]ne SFX F* nne n/D'L'Q' [aeo]nne SFX F* nne ns/D'Q' [aeo]nne SFX F* gne n/D'L'Q' igne SFX F* gne ns/D'Q' igne SFX F* re r/D'L'Q' [aiouûy]re SFX F* re rs/D'Q' [aiouûy]re SFX F* ère er/D'L'Q' ère SFX F* ère ers/D'Q' ère SFX F* se s/D'L'Q' [^us]se SFX F* esse e/D'L'Q' [^eo].esse SFX F* esse es/D'Q' [^eo].esse SFX F* eresse eur/D'L'Q' eresse SFX F* eresse eurs/D'Q' eresse SFX F* oresse eur/D'L'Q' oresse SFX F* oresse eurs/D'Q' oresse SFX F* sse s/D'L'Q' [^e]sse SFX F* use us/D'L'Q' [^eo]use SFX F* euse eur/D'L'Q' euse SFX F* euse eurs/D'Q' euse SFX F* te t/D'L'Q' [^èt]te SFX F* te ts/D'Q' [^èt]te SFX F* tte t/D'L'Q' tte SFX F* tte ts/D'Q' tte SFX F* ète et/D'L'Q' ète SFX F* ète ets/D'Q' ète SFX F* ue u/D'L'Q' [^gq]ue SFX F* ue us/D'Q' [^gq]ue SFX F* gue g/D'L'Q' gue SFX F* gue gs/D'Q' gue SFX F* cque c/D'L'Q' cque SFX F* cque cs/D'Q' cque SFX F* que c/D'L'Q' [^c]que SFX F* que cs/D'Q' [^c]que SFX F* ève ef/D'L'Q' ève SFX F* ève efs/D'Q' ève SFX F* ve f/D'L'Q' [iïu]ve SFX F* ve fs/D'Q' [iïu]ve SFX F* uë u/D'L'Q' uë SFX F* uë us/D'Q' uë SFX F* üe u/D'L'Q' üe SFX F* üe us/D'Q' üe SFX W* Y 10 SFX W* 0 0/D'L'Q' e SFX W* e es/D'Q' e SFX W* ce x/D'L'Q' ce SFX W* use ux/D'L'Q' [eo]use SFX W* ousse oux/D'L'Q' ousse SFX W* ausse aux/D'L'Q' ausse SFX W* ale al/D'L'Q' ale SFX W* ale aux/D'Q' ale SFX W* elle eau/D'L'Q' elle SFX W* elle eaux/D'Q' elle PFX Um Y 29 PFX Um 0 0/S. . PFX Um 0 l' [aàâeèéêiîoôuyœæ] PFX Um 0 d'/S. [aàâeèéêiîoôuyœæ] PFX Um 0 yotta/S. . PFX Um 0 zetta/S. . PFX Um 0 exa/S. . PFX Um 0 l'exa . PFX Um 0 d'exa/S. . PFX Um 0 peta/S. . PFX Um 0 téra/S. . PFX Um 0 giga/S. . PFX Um 0 méga/S. . PFX Um 0 kilo/S. . PFX Um 0 hecto/S. . PFX Um 0 l'hecto . PFX Um 0 d'hecto/S. . PFX Um 0 déca/S. . PFX Um 0 déci/S. . PFX Um 0 centi/S. . PFX Um 0 milli/S. . PFX Um 0 micro/S. . PFX Um 0 nano/S. . PFX Um 0 pico/S. . PFX Um 0 femto/S. . PFX Um 0 atto/S. . PFX Um 0 l'atto . PFX Um 0 d'atto/S. . PFX Um 0 zepto/S. . PFX Um 0 yocto/S. . PFX Ui Y 28 PFX Ui 0 l' [aàâeèéêiîoôuyœæ] PFX Ui 0 d' [aàâeèéêiîoôuyœæ] PFX Ui 0 yotta . PFX Ui 0 zetta . PFX Ui 0 exa . PFX Ui 0 l'exa . PFX Ui 0 d'exa . PFX Ui 0 peta . PFX Ui 0 téra . PFX Ui 0 giga . PFX Ui 0 méga . PFX Ui 0 kilo . PFX Ui 0 hecto . PFX Ui 0 l'hecto . PFX Ui 0 d'hecto . PFX Ui 0 déca . PFX Ui 0 déci . PFX Ui 0 centi . PFX Ui 0 milli . PFX Ui 0 micro . PFX Ui 0 nano . PFX Ui 0 pico . PFX Ui 0 femto . PFX Ui 0 atto . PFX Ui 0 l'atto . PFX Ui 0 d'atto . PFX Ui 0 zepto . PFX Ui 0 yocto . PFX U. Y 20 PFX U. 0 Y . PFX U. 0 Z . PFX U. 0 E . PFX U. 0 P . PFX U. 0 T . PFX U. 0 G . PFX U. 0 M . PFX U. 0 k . PFX U. 0 h . PFX U. 0 da . PFX U. 0 d . PFX U. 0 c . PFX U. 0 m . PFX U. 0 µ . PFX U. 0 n . PFX U. 0 p . PFX U. 0 f . PFX U. 0 a . PFX U. 0 z . PFX U. 0 y . PFX n' Y 1 PFX n' 0 n' [aàâeèéêiîoôuyhœæ] PFX q' Y 1 PFX q' 0 qu' [aàâeèéêiîoôuyhœæ] PFX d' Y 1 PFX d' 0 d' [aàâeèéêiîoôuyhœæ] PFX j' Y 1 PFX j' 0 j' [aàâeèéêiîoôuyhœæ] PFX c' Y 2 PFX c' 0 c' [eé] PFX c' 0 ç' a PFX l' Y 1 PFX l' 0 l' [aàâeèéêiîoôuyhœæ] PFX m' Y 1 PFX m' 0 m' [aàâeèéêiîoôuyhœæ] PFX t' Y 1 PFX t' 0 t' [aàâeèéêiîoôuyhœæ] PFX s' Y 1 PFX s' 0 s' [aàâeèéêiîoôuyhœæ] SFX zA Y 49 SFX zA voir voir/n'q'd'l'm't' avoir SFX zA voir yant/n'q'l'm't' avoir SFX zA avoir eu avoir SFX zA avoir eus avoir SFX zA avoir eue avoir SFX zA avoir eues avoir SFX zA voir i/n'q'j'l't' avoir SFX zA voir s/n'q'l'm't' avoir SFX zA voir 0/n'q'c'l'm't' avoir SFX zA voir vons/n'q'l't' avoir SFX zA voir vez/n'q'l'm' avoir SFX zA avoir ont/n'q'l'm't' avoir SFX zA voir vais/n'q'j'l'm't' avoir SFX zA voir vait/n'q'c'l'm't' avoir SFX zA voir vions/n'q'l't' avoir SFX zA voir viez/n'q'l'm' avoir SFX zA voir vaient/n'q'l'm't' avoir SFX zA avoir eus/n'q'j'l'm't' avoir SFX zA avoir eut/n'q'c'l'm't' avoir SFX zA avoir eûmes/n'q'l't' avoir SFX zA avoir eûtes/n'q'l'm' avoir SFX zA avoir eurent/n'q'l'm't' avoir SFX zA voir urai/n'q'j'l'm't' avoir SFX zA voir uras/n'q'l'm't' avoir SFX zA voir ura/n'q'c'l'm't' avoir SFX zA voir urons/n'q'l't' avoir SFX zA voir urez/n'q'l'm' avoir SFX zA voir uront/n'q'l'm't' avoir SFX zA voir urais/n'q'j'l'm't' avoir SFX zA voir urait/n'q'c'l'm't' avoir SFX zA voir urions/n'q'l't' avoir SFX zA voir uriez/n'q'l'm' avoir SFX zA voir uraient/n'q'l'm't' avoir SFX zA voir ie/n'j'l'm't' avoir SFX zA voir ies/n'l'm't' avoir SFX zA voir it/n'q'c'l'm't' avoir SFX zA voir yons/n'l't' avoir SFX zA voir yez/n'l'm' avoir SFX zA voir ient/n'q'l'm't' avoir SFX zA avoir eusse/n'q'j'l'm't' avoir SFX zA avoir eussé/n'q'l'm't' avoir SFX zA avoir eusses/n'q'l'm't' avoir SFX zA avoir eût/n'q'c'l'm't' avoir SFX zA avoir eussions/n'q'l't' avoir SFX zA avoir eussiez/n'q'l'm' avoir SFX zA avoir eussent/n'q'l'm't' avoir SFX zA voir ie/n' avoir SFX zA voir yons/n' avoir SFX zA voir yez/n' avoir SFX zE Y 45 SFX zE tre tre/n'q'd'l'm't's' être SFX zE être étant/n'q'l'm't's' être SFX zE être été être SFX zE être suis être SFX zE être es/n'q'l'm't' être SFX zE être est/n'q'c'l'm't's' être SFX zE être sommes être SFX zE tre tes/n'q'l'm' être SFX zE être sont être SFX zE être étais/n'q'j'l'm't' être SFX zE être était/n'q'c'l'm't's' être SFX zE être étions/n'q'l't' être SFX zE être étiez/n'q'l'm' être SFX zE être étaient/n'q'c'l'm't's' être SFX zE être fus être SFX zE être fut être SFX zE être fûmes être SFX zE être fûtes être SFX zE être furent être SFX zE être serai être SFX zE être seras être SFX zE être sera être SFX zE être serons être SFX zE être serez être SFX zE être seront être SFX zE être serais être SFX zE être serait être SFX zE être serions être SFX zE être seriez être SFX zE être seraient être SFX zE être sois être SFX zE être soit être SFX zE être soyons être SFX zE être soyez être SFX zE être soient être SFX zE être fusse être SFX zE être fussé être SFX zE être fusses être SFX zE être fût être SFX zE être fussions être SFX zE être fussiez être SFX zE être fussent être SFX zE être sois être SFX zE être soyons être SFX zE être soyez être SFX a0 N 101 SFX a0 er ant [^cg]er SFX a0 cer çant cer SFX a0 ger geant ger SFX a0 er e [^y]er SFX a0 yer ye [^ou]yer SFX a0 yer ie [aou]yer SFX a0 er es [^y]er SFX a0 yer yes [^ou]yer SFX a0 yer ies [aou]yer SFX a0 er ons [^cg]er SFX a0 cer çons cer SFX a0 ger geons ger SFX a0 er ez er SFX a0 er ent [^y]er SFX a0 yer yent [^ou]yer SFX a0 yer ient [aou]yer SFX a0 er ais [^cg]er SFX a0 cer çais cer SFX a0 ger geais ger SFX a0 er ait [^cg]er SFX a0 cer çait cer SFX a0 ger geait ger SFX a0 er ions er SFX a0 er iez er SFX a0 er aient [^cg]er SFX a0 cer çaient cer SFX a0 ger geaient ger SFX a0 er ai [^cg]er SFX a0 cer çai cer SFX a0 ger geai ger SFX a0 er as [^cg]er SFX a0 cer ças cer SFX a0 ger geas ger SFX a0 er a [^cg]er SFX a0 cer ça cer SFX a0 ger gea ger SFX a0 er âmes [^cg]er SFX a0 cer çâmes cer SFX a0 ger geâmes ger SFX a0 er âtes [^cg]er SFX a0 cer çâtes cer SFX a0 ger geâtes ger SFX a0 er èrent er SFX a0 er erai [^y]er SFX a0 yer yerai [^ou]yer SFX a0 yer ierai [aou]yer SFX a0 er eras [^y]er SFX a0 yer yeras [^ou]yer SFX a0 yer ieras [aou]yer SFX a0 er era [^y]er SFX a0 yer yera [^ou]yer SFX a0 yer iera [aou]yer SFX a0 er erons [^y]er SFX a0 yer yerons [^ou]yer SFX a0 yer ierons [aou]yer SFX a0 er erez [^y]er SFX a0 yer yerez [^ou]yer SFX a0 yer ierez [aou]yer SFX a0 er eront [^y]er SFX a0 yer yeront [^ou]yer SFX a0 yer ieront [aou]yer SFX a0 er erais [^y]er SFX a0 yer yerais [^ou]yer SFX a0 yer ierais [aou]yer SFX a0 er erait [^y]er SFX a0 yer yerait [^ou]yer SFX a0 yer ierait [aou]yer SFX a0 er erions [^y]er SFX a0 yer yerions [^ou]yer SFX a0 yer ierions [aou]yer SFX a0 er eriez [^y]er SFX a0 yer yeriez [^ou]yer SFX a0 yer ieriez [aou]yer SFX a0 er eraient [^y]er SFX a0 yer yeraient [^ou]yer SFX a0 yer ieraient [aou]yer SFX a0 er asse [^cg]er SFX a0 cer çasse cer SFX a0 ger geasse ger SFX a0 er asses [^cg]er SFX a0 cer çasses cer SFX a0 ger geasses ger SFX a0 er ât [^cg]er SFX a0 cer çât cer SFX a0 ger geât ger SFX a0 er assions [^cg]er SFX a0 cer çassions cer SFX a0 ger geassions ger SFX a0 er assiez [^cg]er SFX a0 cer çassiez cer SFX a0 ger geassiez ger SFX a0 er assent [^cg]er SFX a0 cer çassent cer SFX a0 ger geassent ger SFX a0 er e [^y]er SFX a0 yer ye [^ou]yer SFX a0 yer ie [aou]yer SFX a0 er ons [^cg]er SFX a0 cer çons cer SFX a0 ger geons ger SFX a0 er ez er SFX a1 Y 102 SFX a1 er er/n'q'd' er SFX a1 er ant/n'q' [^cg]er SFX a1 cer çant/n'q' cer SFX a1 ger geant/n'q' ger SFX a1 er e/n'q'j' [^y]er SFX a1 yer ye/n'q'j' [^ou]yer SFX a1 yer ie/n'q'j' [aou]yer SFX a1 er es/n' [^y]er SFX a1 yer yes/n' [^ou]yer SFX a1 yer ies/n' [aou]yer SFX a1 er ons/n' [^cg]er SFX a1 cer çons/n' cer SFX a1 ger geons/n' ger SFX a1 er ez/n' er SFX a1 er ent/n'q' [^y]er SFX a1 yer yent/n'q' [^ou]yer SFX a1 yer ient/n'q' [aou]yer SFX a1 er ais/n'j' [^cg]er SFX a1 cer çais/n'j' cer SFX a1 ger geais/n'j' ger SFX a1 er ait/n'q' [^cg]er SFX a1 cer çait/n'q' cer SFX a1 ger geait/n'q' ger SFX a1 er ions/n' er SFX a1 er iez/n' er SFX a1 er aient/n'q' [^cg]er SFX a1 cer çaient/n'q' cer SFX a1 ger geaient/n'q' ger SFX a1 er ai/n'j' [^cg]er SFX a1 cer çai/n'j' cer SFX a1 ger geai/n'j' ger SFX a1 er as/n' [^cg]er SFX a1 cer ças/n' cer SFX a1 ger geas/n' ger SFX a1 er a/n'q' [^cg]er SFX a1 cer ça/n'q' cer SFX a1 ger gea/n'q' ger SFX a1 er âmes/n' [^cg]er SFX a1 cer çâmes/n' cer SFX a1 ger geâmes/n' ger SFX a1 er âtes/n' [^cg]er SFX a1 cer çâtes/n' cer SFX a1 ger geâtes/n' ger SFX a1 er èrent/n'q' er SFX a1 er erai/n'j' [^y]er SFX a1 yer yerai/n'j' [^ou]yer SFX a1 yer ierai/n'j' [aou]yer SFX a1 er eras/n' [^y]er SFX a1 yer yeras/n' [^ou]yer SFX a1 yer ieras/n' [aou]yer SFX a1 er era/n'q' [^y]er SFX a1 yer yera/n'q' [^ou]yer SFX a1 yer iera/n'q' [aou]yer SFX a1 er erons/n' [^y]er SFX a1 yer yerons/n' [^ou]yer SFX a1 yer ierons/n' [aou]yer SFX a1 er erez/n' [^y]er SFX a1 yer yerez/n' [^ou]yer SFX a1 yer ierez/n' [aou]yer SFX a1 er eront/n'q' [^y]er SFX a1 yer yeront/n'q' [^ou]yer SFX a1 yer ieront/n'q' [aou]yer SFX a1 er erais/n'j' [^y]er SFX a1 yer yerais/n'j' [^ou]yer SFX a1 yer ierais/n'j' [aou]yer SFX a1 er erait/n'q' [^y]er SFX a1 yer yerait/n'q' [^ou]yer SFX a1 yer ierait/n'q' [aou]yer SFX a1 er erions/n' [^y]er SFX a1 yer yerions/n' [^ou]yer SFX a1 yer ierions/n' [aou]yer SFX a1 er eriez/n' [^y]er SFX a1 yer yeriez/n' [^ou]yer SFX a1 yer ieriez/n' [aou]yer SFX a1 er eraient/n'q' [^y]er SFX a1 yer yeraient/n'q' [^ou]yer SFX a1 yer ieraient/n'q' [aou]yer SFX a1 er asse/n'j' [^cg]er SFX a1 cer çasse/n'j' cer SFX a1 ger geasse/n'j' ger SFX a1 er asses/n' [^cg]er SFX a1 cer çasses/n' cer SFX a1 ger geasses/n' ger SFX a1 er ât/n'q' [^cg]er SFX a1 cer çât/n'q' cer SFX a1 ger geât/n'q' ger SFX a1 er assions/n' [^cg]er SFX a1 cer çassions/n' cer SFX a1 ger geassions/n' ger SFX a1 er assiez/n' [^cg]er SFX a1 cer çassiez/n' cer SFX a1 ger geassiez/n' ger SFX a1 er assent/n'q' [^cg]er SFX a1 cer çassent/n'q' cer SFX a1 ger geassent/n'q' ger SFX a1 er e/n' [^y]er SFX a1 yer ye/n' [^ou]yer SFX a1 yer ie/n' [aou]yer SFX a1 er ons/n' [^cg]er SFX a1 cer çons/n' cer SFX a1 ger geons/n' ger SFX a1 er ez/n' er SFX a2 Y 102 SFX a2 er er/n'q'd'l'm't's' er SFX a2 er ant/n'q'l'm't's' [^cg]er SFX a2 cer çant/n'q'l'm't's' cer SFX a2 ger geant/n'q'l'm't's' ger SFX a2 er e/n'q'j'l'm't's' [^y]er SFX a2 yer ye/n'q'j'l'm't's' [^ou]yer SFX a2 yer ie/n'q'j'l'm't's' [aou]yer SFX a2 er es/n'q'l'm' [^y]er SFX a2 yer yes/n'q'l'm' [^ou]yer SFX a2 yer ies/n'q'l'm' [aou]yer SFX a2 er ons/n'q'l't' [^cg]er SFX a2 cer çons/n'q'l't' cer SFX a2 ger geons/n'q'l't' ger SFX a2 er ez/n'q'l'm' er SFX a2 er ent/n'q'l'm't's' [^y]er SFX a2 yer yent/n'q'l'm't's' [^ou]yer SFX a2 yer ient/n'q'l'm't's' [aou]yer SFX a2 er ais/n'q'j'l'm't' [^cg]er SFX a2 cer çais/n'q'j'l'm't' cer SFX a2 ger geais/n'q'j'l'm't' ger SFX a2 er ait/n'q'l'm't's' [^cg]er SFX a2 cer çait/n'q'l'm't's' cer SFX a2 ger geait/n'q'l'm't's' ger SFX a2 er ions/n'q'l't' er SFX a2 er iez/n'q'l'm' er SFX a2 er aient/n'q'l'm't's' [^cg]er SFX a2 cer çaient/n'q'l'm't's' cer SFX a2 ger geaient/n'q'l'm't's' ger SFX a2 er ai/n'q'j'l't' [^cg]er SFX a2 cer çai/n'q'j'l't' cer SFX a2 ger geai/n'q'j'l't' ger SFX a2 er as/n'q'l'm' [^cg]er SFX a2 cer ças/n'q'l'm' cer SFX a2 ger geas/n'q'l'm' ger SFX a2 er a/n'q'l'm't's' [^cg]er SFX a2 cer ça/n'q'l'm't's' cer SFX a2 ger gea/n'q'l'm't's' ger SFX a2 er âmes/n'q'l't' [^cg]er SFX a2 cer çâmes/n'q'l't' cer SFX a2 ger geâmes/n'q'l't' ger SFX a2 er âtes/n'q'l'm' [^cg]er SFX a2 cer çâtes/n'q'l'm' cer SFX a2 ger geâtes/n'q'l'm' ger SFX a2 er èrent/n'q'l'm't's' er SFX a2 er erai/n'q'j'l't' [^y]er SFX a2 yer yerai/n'q'j'l't' [^ou]yer SFX a2 yer ierai/n'q'j'l't' [aou]yer SFX a2 er eras/n'q'l'm' [^y]er SFX a2 yer yeras/n'q'l'm' [^ou]yer SFX a2 yer ieras/n'q'l'm' [aou]yer SFX a2 er era/n'q'l'm't's' [^y]er SFX a2 yer yera/n'q'l'm't's' [^ou]yer SFX a2 yer iera/n'q'l'm't's' [aou]yer SFX a2 er erons/n'q'l't' [^y]er SFX a2 yer yerons/n'q'l't' [^ou]yer SFX a2 yer ierons/n'q'l't' [aou]yer SFX a2 er erez/n'q'l'm' [^y]er SFX a2 yer yerez/n'q'l'm' [^ou]yer SFX a2 yer ierez/n'q'l'm' [aou]yer SFX a2 er eront/n'q'l'm't's' [^y]er SFX a2 yer yeront/n'q'l'm't's' [^ou]yer SFX a2 yer ieront/n'q'l'm't's' [aou]yer SFX a2 er erais/n'q'j'l'm't' [^y]er SFX a2 yer yerais/n'q'j'l'm't' [^ou]yer SFX a2 yer ierais/n'q'j'l'm't' [aou]yer SFX a2 er erait/n'q'l'm't's' [^y]er SFX a2 yer yerait/n'q'l'm't's' [^ou]yer SFX a2 yer ierait/n'q'l'm't's' [aou]yer SFX a2 er erions/n'q'l't' [^y]er SFX a2 yer yerions/n'q'l't' [^ou]yer SFX a2 yer ierions/n'q'l't' [aou]yer SFX a2 er eriez/n'q'l'm' [^y]er SFX a2 yer yeriez/n'q'l'm' [^ou]yer SFX a2 yer ieriez/n'q'l'm' [aou]yer SFX a2 er eraient/n'q'l'm't's' [^y]er SFX a2 yer yeraient/n'q'l'm't's' [^ou]yer SFX a2 yer ieraient/n'q'l'm't's' [aou]yer SFX a2 er asse/n'q'j'l't' [^cg]er SFX a2 cer çasse/n'q'j'l't' cer SFX a2 ger geasse/n'q'j'l't' ger SFX a2 er asses/n'q'l'm' [^cg]er SFX a2 cer çasses/n'q'l'm' cer SFX a2 ger geasses/n'q'l'm' ger SFX a2 er ât/n'q'l'm't's' [^cg]er SFX a2 cer çât/n'q'l'm't's' cer SFX a2 ger geât/n'q'l'm't's' ger SFX a2 er assions/n'q'l't' [^cg]er SFX a2 cer çassions/n'q'l't' cer SFX a2 ger geassions/n'q'l't' ger SFX a2 er assiez/n'q'l'm' [^cg]er SFX a2 cer çassiez/n'q'l'm' cer SFX a2 ger geassiez/n'q'l'm' ger SFX a2 er assent/n'q'l'm't's' [^cg]er SFX a2 cer çassent/n'q'l'm't's' cer SFX a2 ger geassent/n'q'l'm't's' ger SFX a2 er e/n'l'm' [^y]er SFX a2 yer ye/n'l'm' [^ou]yer SFX a2 yer ie/n'l'm' [aou]yer SFX a2 er ons/n'l' [^cg]er SFX a2 cer çons/n'l' cer SFX a2 ger geons/n'l' ger SFX a2 er ez/n'l'm' er SFX a3 Y 102 SFX a3 er er/m't's' er SFX a3 er ant/m't's' [^cg]er SFX a3 cer çant/m't's' cer SFX a3 ger geant/m't's' ger SFX a3 er e/m's' [^y]er SFX a3 yer ye/m's' [^ou]yer SFX a3 yer ie/m's' [aou]yer SFX a3 er es/t' [^y]er SFX a3 yer yes/t' [^ou]yer SFX a3 yer ies/t' [aou]yer SFX a3 er ons [^cg]er SFX a3 cer çons cer SFX a3 ger geons ger SFX a3 r z er SFX a3 er ent/s' [^y]er SFX a3 yer yent/s' [^ou]yer SFX a3 yer ient/s' [aou]yer SFX a3 er ais/m' [^cg]er SFX a3 cer çais/m' cer SFX a3 ger geais/m' ger SFX a3 er ait/s' [^cg]er SFX a3 cer çait/s' cer SFX a3 ger geait/s' ger SFX a3 er ions er SFX a3 er iez er SFX a3 er aient/s' [^cg]er SFX a3 cer çaient/s' cer SFX a3 ger geaient/s' ger SFX a3 er ai/m' [^cg]er SFX a3 cer çai/m' cer SFX a3 ger geai/m' ger SFX a3 er as/t' [^cg]er SFX a3 cer ças/t' cer SFX a3 ger geas/t' ger SFX a3 er a/s' [^cg]er SFX a3 cer ça/s' cer SFX a3 ger gea/s' ger SFX a3 er âmes [^cg]er SFX a3 cer çâmes cer SFX a3 ger geâmes ger SFX a3 er âtes [^cg]er SFX a3 cer çâtes/s' cer SFX a3 ger geâtes/s' ger SFX a3 er èrent/s' er SFX a3 er erai/m' [^y]er SFX a3 yer yerai/m' [^ou]yer SFX a3 yer ierai/m' [aou]yer SFX a3 er eras/t' [^y]er SFX a3 yer yeras/t' [^ou]yer SFX a3 yer ieras/t' [aou]yer SFX a3 er era/s' [^y]er SFX a3 yer yera/s' [^ou]yer SFX a3 yer iera/s' [aou]yer SFX a3 er erons [^y]er SFX a3 yer yerons [^ou]yer SFX a3 yer ierons [aou]yer SFX a3 er erez [^y]er SFX a3 yer yerez [^ou]yer SFX a3 yer ierez [aou]yer SFX a3 er eront/s' [^y]er SFX a3 yer yeront/s' [^ou]yer SFX a3 yer ieront/s' [aou]yer SFX a3 er erais/m't' [^y]er SFX a3 yer yerais/m't' [^ou]yer SFX a3 yer ierais/m't' [aou]yer SFX a3 er erait/s' [^y]er SFX a3 yer yerait/s' [^ou]yer SFX a3 yer ierait/s' [aou]yer SFX a3 er erions [^y]er SFX a3 yer yerions [^ou]yer SFX a3 yer ierions [aou]yer SFX a3 er eriez [^y]er SFX a3 yer yeriez [^ou]yer SFX a3 yer ieriez [aou]yer SFX a3 er eraient/s' [^y]er SFX a3 yer yeraient/s' [^ou]yer SFX a3 yer ieraient/s' [aou]yer SFX a3 er asse/m' [^cg]er SFX a3 cer çasse/m' cer SFX a3 ger geasse/m' ger SFX a3 er asses/t' [^cg]er SFX a3 cer çasses/t' cer SFX a3 ger geasses/t' ger SFX a3 er ât/s' [^cg]er SFX a3 cer çât/s' cer SFX a3 ger geât/s' ger SFX a3 er assions [^cg]er SFX a3 cer çassions cer SFX a3 ger geassions ger SFX a3 er assiez [^cg]er SFX a3 cer çassiez cer SFX a3 ger geassiez ger SFX a3 er assent/s' [^cg]er SFX a3 cer çassent/s' cer SFX a3 ger geassent/s' ger SFX a3 er e/t' [^y]er SFX a3 yer ye/t' [^ou]yer SFX a3 yer ie/t' [aou]yer SFX a3 er ons [^cg]er SFX a3 cer çons cer SFX a3 ger geons ger SFX a3 er ez er SFX a4 Y 102 SFX a4 er er/n'q'd'l'm't's' er SFX a4 er ant/n'q'l'm't's' [^cg]er SFX a4 cer çant/n'q'l'm't's' cer SFX a4 ger geant/n'q'l'm't's' ger SFX a4 er e/n'q'j'l'm't's' [^y]er SFX a4 yer ye/n'q'j'l'm't's' [^ou]yer SFX a4 yer ie/n'q'j'l'm't's' [aou]yer SFX a4 er es/n'q'l'm't' [^y]er SFX a4 yer yes/n'q'l'm't' [^ou]yer SFX a4 yer ies/n'q'l'm't' [aou]yer SFX a4 er ons/n'q'l't' [^cg]er SFX a4 cer çons/n'q'l't' cer SFX a4 ger geons/n'q'l't' ger SFX a4 er ez/n'q'l'm' er SFX a4 er ent/n'q'l'm't's' [^y]er SFX a4 yer yent/n'q'l'm't's' [^ou]yer SFX a4 yer ient/n'q'l'm't's' [aou]yer SFX a4 er ais/n'q'j'l'm't' [^cg]er SFX a4 cer çais/n'q'j'l'm't' cer SFX a4 ger geais/n'q'j'l'm't' ger SFX a4 er ait/n'q'l'm't's' [^cg]er SFX a4 cer çait/n'q'l'm't's' cer SFX a4 ger geait/n'q'l'm't's' ger SFX a4 er ions/n'q'l't' er SFX a4 er iez/n'q'l'm' er SFX a4 er aient/n'q'l'm't's' [^cg]er SFX a4 cer çaient/n'q'l'm't's' cer SFX a4 ger geaient/n'q'l'm't's' ger SFX a4 er ai/n'q'j'l'm't' [^cg]er SFX a4 cer çai/n'q'j'l'm't' cer SFX a4 ger geai/n'q'j'l'm't' ger SFX a4 er as/n'q'l'm't' [^cg]er SFX a4 cer ças/n'q'l'm't' cer SFX a4 ger geas/n'q'l'm't' ger SFX a4 er a/n'q'l'm't's' [^cg]er SFX a4 cer ça/n'q'l'm't's' cer SFX a4 ger gea/n'q'l'm't's' ger SFX a4 er âmes/n'q'l't' [^cg]er SFX a4 cer çâmes/n'q'l't' cer SFX a4 ger geâmes/n'q'l't' ger SFX a4 er âtes/n'q'l'm' [^cg]er SFX a4 cer çâtes/n'q'l'm' cer SFX a4 ger geâtes/n'q'l'm' ger SFX a4 er èrent/n'q'l'm't's' er SFX a4 er erai/n'q'j'l'm't' [^y]er SFX a4 yer yerai/n'q'j'l'm't' [^ou]yer SFX a4 yer ierai/n'q'j'l'm't' [aou]yer SFX a4 er eras/n'q'l'm't' [^y]er SFX a4 yer yeras/n'q'l'm't' [^ou]yer SFX a4 yer ieras/n'q'l'm't' [aou]yer SFX a4 er era/n'q'l'm't's' [^y]er SFX a4 yer yera/n'q'l'm't's' [^ou]yer SFX a4 yer iera/n'q'l'm't's' [aou]yer SFX a4 er erons/n'q'l't' [^y]er SFX a4 yer yerons/n'q'l't' [^ou]yer SFX a4 yer ierons/n'q'l't' [aou]yer SFX a4 er erez/n'q'l'm' [^y]er SFX a4 yer yerez/n'q'l'm' [^ou]yer SFX a4 yer ierez/n'q'l'm' [aou]yer SFX a4 er eront/n'q'l'm't's' [^y]er SFX a4 yer yeront/n'q'l'm't's' [^ou]yer SFX a4 yer ieront/n'q'l'm't's' [aou]yer SFX a4 er erais/n'q'j'l'm't' [^y]er SFX a4 yer yerais/n'q'j'l'm't' [^ou]yer SFX a4 yer ierais/n'q'j'l'm't' [aou]yer SFX a4 er erait/n'q'l'm't's' [^y]er SFX a4 yer yerait/n'q'l'm't's' [^ou]yer SFX a4 yer ierait/n'q'l'm't's' [aou]yer SFX a4 er erions/n'q'l't' [^y]er SFX a4 yer yerions/n'q'l't' [^ou]yer SFX a4 yer ierions/n'q'l't' [aou]yer SFX a4 er eriez/n'q'l'm' [^y]er SFX a4 yer yeriez/n'q'l'm' [^ou]yer SFX a4 yer ieriez/n'q'l'm' [aou]yer SFX a4 er eraient/n'q'l'm't's' [^y]er SFX a4 yer yeraient/n'q'l'm't's' [^ou]yer SFX a4 yer ieraient/n'q'l'm't's' [aou]yer SFX a4 er asse/n'q'j'l'm't' [^cg]er SFX a4 cer çasse/n'q'j'l'm't' cer SFX a4 ger geasse/n'q'j'l'm't' ger SFX a4 er asses/n'q'l'm't' [^cg]er SFX a4 cer çasses/n'q'l'm't' cer SFX a4 ger geasses/n'q'l'm't' ger SFX a4 er ât/n'q'l'm't's' [^cg]er SFX a4 cer çât/n'q'l'm't's' cer SFX a4 ger geât/n'q'l'm't's' ger SFX a4 er assions/n'q'l't' [^cg]er SFX a4 cer çassions/n'q'l't' cer SFX a4 ger geassions/n'q'l't' ger SFX a4 er assiez/n'q'l'm' [^cg]er SFX a4 cer çassiez/n'q'l'm' cer SFX a4 ger geassiez/n'q'l'm' ger SFX a4 er assent/n'q'l'm't's' [^cg]er SFX a4 cer çassent/n'q'l'm't's' cer SFX a4 ger geassent/n'q'l'm't's' ger SFX a4 er e/n'l'm't' [^y]er SFX a4 yer ye/n'l'm't' [^ou]yer SFX a4 yer ie/n'l'm't' [aou]yer SFX a4 er ons/n'l' [^cg]er SFX a4 cer çons/n'l' cer SFX a4 ger geons/n'l' ger SFX a4 er ez/n'l'm' er SFX a5 Y 102 SFX a5 er er/n'q'd'm't's' er SFX a5 er ant/n'q'm't's' [^cg]er SFX a5 cer çant/n'q'm't's' cer SFX a5 ger geant/n'q'm't's' ger SFX a5 er e/n'q'j'm't's' [^y]er SFX a5 yer ye/n'q'j'm't's' [^ou]yer SFX a5 yer ie/n'q'j'm't's' [aou]yer SFX a5 er es/n'm't' [^y]er SFX a5 yer yes/n'm't' [^ou]yer SFX a5 yer ies/n'm't' [aou]yer SFX a5 er ons/n't' [^cg]er SFX a5 cer çons/n't' cer SFX a5 ger geons/n't' ger SFX a5 r z/n'm' er SFX a5 er ent/n'q'm't's' [^y]er SFX a5 yer yent/n'q'm't's' [^ou]yer SFX a5 yer ient/n'q'm't's' [aou]yer SFX a5 er ais/n'j'm't' [^cg]er SFX a5 cer çais/n'j'm't' cer SFX a5 ger geais/n'j'm't' ger SFX a5 er ait/n'q'm't's' [^cg]er SFX a5 cer çait/n'q'm't's' cer SFX a5 ger geait/n'q'm't's' ger SFX a5 er ions/n't' er SFX a5 er iez/n'm' er SFX a5 er aient/n'q'm't's' [^cg]er SFX a5 cer çaient/n'q'm't's' cer SFX a5 ger geaient/n'q'm't's' ger SFX a5 er ai/n'j'm't' [^cg]er SFX a5 cer çai/n'j'm't' cer SFX a5 ger geai/n'j'm't' ger SFX a5 er as/n'm't' [^cg]er SFX a5 cer ças/n'm't' cer SFX a5 ger geas/n'm't' ger SFX a5 er a/n'q'm't's' [^cg]er SFX a5 cer ça/n'q'm't's' cer SFX a5 ger gea/n'q'm't's' ger SFX a5 er âmes/n't' [^cg]er SFX a5 cer çâmes/n't' cer SFX a5 ger geâmes/n't' ger SFX a5 er âtes/n'm' [^cg]er SFX a5 cer çâtes/n'm' cer SFX a5 ger geâtes/n'm' ger SFX a5 er èrent/n'q'm't's' er SFX a5 er erai/n'j'm't' [^y]er SFX a5 yer yerai/n'j'm't' [^ou]yer SFX a5 yer ierai/n'j'm't' [aou]yer SFX a5 er eras/n'm't' [^y]er SFX a5 yer yeras/n'm't' [^ou]yer SFX a5 yer ieras/n'm't' [aou]yer SFX a5 er era/n'q'm't's' [^y]er SFX a5 yer yera/n'q'm't's' [^ou]yer SFX a5 yer iera/n'q'm't's' [aou]yer SFX a5 er erons/n't' [^y]er SFX a5 yer yerons/n't' [^ou]yer SFX a5 yer ierons/n't' [aou]yer SFX a5 er erez/n'm' [^y]er SFX a5 yer yerez/n'm' [^ou]yer SFX a5 yer ierez/n'm' [aou]yer SFX a5 er eront/n'q'm't's' [^y]er SFX a5 yer yeront/n'q'm't's' [^ou]yer SFX a5 yer ieront/n'q'm't's' [aou]yer SFX a5 er erais/n'j'm't' [^y]er SFX a5 yer yerais/n'j'm't' [^ou]yer SFX a5 yer ierais/n'j'm't' [aou]yer SFX a5 er erait/n'q'm't's' [^y]er SFX a5 yer yerait/n'q'm't's' [^ou]yer SFX a5 yer ierait/n'q'm't's' [aou]yer SFX a5 er erions/n't' [^y]er SFX a5 yer yerions/n't' [^ou]yer SFX a5 yer ierions/n't' [aou]yer SFX a5 er eriez/n'm' [^y]er SFX a5 yer yeriez/n'm' [^ou]yer SFX a5 yer ieriez/n'm' [aou]yer SFX a5 er eraient/n'q'm't's' [^y]er SFX a5 yer yeraient/n'q'm't's' [^ou]yer SFX a5 yer ieraient/n'q'm't's' [aou]yer SFX a5 er asse/n'j'm't' [^cg]er SFX a5 cer çasse/n'j'm't' cer SFX a5 ger geasse/n'j'm't' ger SFX a5 er asses/n'm't' [^cg]er SFX a5 cer çasses/n'm't' cer SFX a5 ger geasses/n'm't' ger SFX a5 er ât/n'q'm't's' [^cg]er SFX a5 cer çât/n'q'm't's' cer SFX a5 ger geât/n'q'm't's' ger SFX a5 er assions/n't' [^cg]er SFX a5 cer çassions/n't' cer SFX a5 ger geassions/n't' ger SFX a5 er assiez/n'm' [^cg]er SFX a5 cer çassiez/n'm' cer SFX a5 ger geassiez/n'm' ger SFX a5 er assent/n'q'm't's' [^cg]er SFX a5 cer çassent/n'q'm't's' cer SFX a5 ger geassent/n'q'm't's' ger SFX a5 er e/n'm' [^y]er SFX a5 yer e/n'm' [^ou]yer SFX a5 yer ie/n'm' [aou]yer SFX a5 er ons/n' [^cg]er SFX a5 cer çons/n' cer SFX a5 ger geons/n' ger SFX a5 er ez/n'm' er SFX a6 Y 72 SFX a6 er er/s' er SFX a6 er ant/s' [^cg]er SFX a6 cer çant/s' cer SFX a6 ger geant/s' ger SFX a6 er e/s' [^y]er SFX a6 yer ye/s' [^ou]yer SFX a6 yer ie/s' [aou]yer SFX a6 er ons [^cg]er SFX a6 cer çons cer SFX a6 ger geons ger SFX a6 er ez er SFX a6 er ent/s' [^y]er SFX a6 yer yent/s' [^ou]yer SFX a6 yer ient/s' [aou]yer SFX a6 er ait/s' [^cg]er SFX a6 cer çait/s' cer SFX a6 ger geait/s' ger SFX a6 er ions er SFX a6 er iez er SFX a6 er aient/s' [^cg]er SFX a6 cer çaient/s' cer SFX a6 ger geaient/s' ger SFX a6 er a/s' [^cg]er SFX a6 cer ça/s' cer SFX a6 ger gea/s' ger SFX a6 er âmes [^cg]er SFX a6 cer çâmes cer SFX a6 ger geâmes ger SFX a6 er âtes [^cg]er SFX a6 cer çâtes/s' cer SFX a6 ger geâtes/s' ger SFX a6 er èrent/s' er SFX a6 er era/s' [^y]er SFX a6 yer yera/s' [^ou]yer SFX a6 yer iera/s' [aou]yer SFX a6 er erons [^y]er SFX a6 yer yerons [^ou]yer SFX a6 yer ierons [aou]yer SFX a6 er erez [^y]er SFX a6 yer yerez [^ou]yer SFX a6 yer ierez [aou]yer SFX a6 er eront/s' [^y]er SFX a6 yer yeront/s' [^ou]yer SFX a6 yer ieront/s' [aou]yer SFX a6 er erait/s' [^y]er SFX a6 yer yerait/s' [^ou]yer SFX a6 yer ierait/s' [aou]yer SFX a6 er erions [^y]er SFX a6 yer yerions [^ou]yer SFX a6 yer ierions [aou]yer SFX a6 er eriez [^y]er SFX a6 yer yeriez [^ou]yer SFX a6 yer ieriez [aou]yer SFX a6 er eraient/s' [^y]er SFX a6 yer yeraient/s' [^ou]yer SFX a6 yer ieraient/s' [aou]yer SFX a6 er ât/s' [^cg]er SFX a6 cer çât/s' cer SFX a6 ger geât/s' ger SFX a6 er assions [^cg]er SFX a6 cer çassions cer SFX a6 ger geassions ger SFX a6 er assiez [^cg]er SFX a6 cer çassiez cer SFX a6 ger geassiez ger SFX a6 er assent/s' [^cg]er SFX a6 cer çassent/s' cer SFX a6 ger geassent/s' ger SFX a6 er ons [^cg]er SFX a6 cer çons cer SFX a6 ger geons ger SFX a6 er ez er SFX a8 N 16 SFX a8 er er/n'd' er SFX a8 er ant [^cg]er SFX a8 cer çant cer SFX a8 ger geant ger SFX a8 er e/n' er SFX a8 er ait/n' [^cg]er SFX a8 cer çait/n' cer SFX a8 ger geait/n' ger SFX a8 er a/n' [^cg]er SFX a8 cer ça/n' cer SFX a8 ger gea/n' ger SFX a8 er era/n' er SFX a8 er erait/n' er SFX a8 er ât/n' [^cg]er SFX a8 cer çât/n' cer SFX a8 ger geât/n' ger SFX a9 N 10 SFX a9 er ent/n' er SFX a9 er aient/n' [^cg]er SFX a9 cer çaient/n' cer SFX a9 ger geaient/n' ger SFX a9 er èrent/n' er SFX a9 er eront/n' er SFX a9 er eraient/n' er SFX a9 er assent/n' [^cg]er SFX a9 cer çassent/n' cer SFX a9 ger geassent/n' ger SFX b0 N 189 SFX b0 er ant [^c]er SFX b0 cer çant cer SFX b0 ecer èce ecer SFX b0 emer ème emer SFX b0 ener ène ener SFX b0 eper èpe eper SFX b0 erer ère erer SFX b0 eser èse eser SFX b0 ever ève ever SFX b0 evrer èvre evrer SFX b0 eter ète eter SFX b0 eler èle eler SFX b0 ecer èces ecer SFX b0 emer èmes emer SFX b0 ener ènes ener SFX b0 eper èpes eper SFX b0 erer ères erer SFX b0 eser èses eser SFX b0 ever èves ever SFX b0 evrer èvres evrer SFX b0 eter ètes eter SFX b0 eler èles eler SFX b0 er ons [^c]er SFX b0 cer çons cer SFX b0 er ez er SFX b0 ecer ècent ecer SFX b0 emer èment emer SFX b0 ener ènent ener SFX b0 eper èpent eper SFX b0 erer èrent erer SFX b0 eser èsent eser SFX b0 ever èvent ever SFX b0 evrer èvrent evrer SFX b0 eter ètent eter SFX b0 eler èlent eler SFX b0 er ais [^c]er SFX b0 cer çais cer SFX b0 er ait [^c]er SFX b0 cer çait cer SFX b0 er ions er SFX b0 er iez er SFX b0 er aient [^c]er SFX b0 cer çaient cer SFX b0 er ai [^c]er SFX b0 cer çai cer SFX b0 er as [^c]er SFX b0 cer ças cer SFX b0 er a [^c]er SFX b0 cer ça cer SFX b0 er âmes [^c]er SFX b0 cer çâmes cer SFX b0 er âtes [^c]er SFX b0 cer çâtes cer SFX b0 er èrent er SFX b0 ecer ècerai ecer SFX b0 emer èmerai emer SFX b0 ener ènerai ener SFX b0 eper èperai eper SFX b0 erer èrerai erer SFX b0 eser èserai eser SFX b0 ever èverai ever SFX b0 evrer èvrerai evrer SFX b0 eter èterai eter SFX b0 eler èlerai eler SFX b0 ecer èceras ecer SFX b0 emer èmeras emer SFX b0 ener èneras ener SFX b0 eper èperas eper SFX b0 erer èreras erer SFX b0 eser èseras eser SFX b0 ever èveras ever SFX b0 evrer èvreras evrer SFX b0 eter èteras eter SFX b0 eler èleras eler SFX b0 ecer ècera ecer SFX b0 emer èmera emer SFX b0 ener ènera ener SFX b0 eper èpera eper SFX b0 erer èrera erer SFX b0 eser èsera eser SFX b0 ever èvera ever SFX b0 evrer èvrera evrer SFX b0 eter ètera eter SFX b0 eler èlera eler SFX b0 ecer ècerons ecer SFX b0 emer èmerons emer SFX b0 ener ènerons ener SFX b0 eper èperons eper SFX b0 erer èrerons erer SFX b0 eser èserons eser SFX b0 ever èverons ever SFX b0 evrer èvrerons evrer SFX b0 eter èterons eter SFX b0 eler èlerons eler SFX b0 ecer ècerez ecer SFX b0 emer èmerez emer SFX b0 ener ènerez ener SFX b0 eper èperez eper SFX b0 erer èrerez erer SFX b0 eser èserez eser SFX b0 ever èverez ever SFX b0 evrer èvrerez evrer SFX b0 eter èterez eter SFX b0 eler èlerez eler SFX b0 ecer èceront ecer SFX b0 emer èmeront emer SFX b0 ener èneront ener SFX b0 eper èperont eper SFX b0 erer èreront erer SFX b0 eser èseront eser SFX b0 ever èveront ever SFX b0 evrer èvreront evrer SFX b0 eter èteront eter SFX b0 eler èleront eler SFX b0 ecer ècerais ecer SFX b0 emer èmerais emer SFX b0 ener ènerais ener SFX b0 eper èperais eper SFX b0 erer èrerais erer SFX b0 eser èserais eser SFX b0 ever èverais ever SFX b0 evrer èvrerais evrer SFX b0 eter èterais eter SFX b0 eler èlerais eler SFX b0 ecer ècerait ecer SFX b0 emer èmerait emer SFX b0 ener ènerait ener SFX b0 eper èperait eper SFX b0 erer èrerait erer SFX b0 eser èserait eser SFX b0 ever èverait ever SFX b0 evrer èvrerait evrer SFX b0 eter èterait eter SFX b0 eler èlerait eler SFX b0 ecer ècerions ecer SFX b0 emer èmerions emer SFX b0 ener ènerions ener SFX b0 eper èperions eper SFX b0 erer èrerions erer SFX b0 eser èserions eser SFX b0 ever èverions ever SFX b0 evrer èvrerions evrer SFX b0 eter èterions eter SFX b0 eler èlerions eler SFX b0 ecer èceriez ecer SFX b0 emer èmeriez emer SFX b0 ener èneriez ener SFX b0 eper èperiez eper SFX b0 erer èreriez erer SFX b0 eser èseriez eser SFX b0 ever èveriez ever SFX b0 evrer èvreriez evrer SFX b0 eter èteriez eter SFX b0 eler èleriez eler SFX b0 ecer èceraient ecer SFX b0 emer èmeraient emer SFX b0 ener èneraient ener SFX b0 eper èperaient eper SFX b0 erer èreraient erer SFX b0 eser èseraient eser SFX b0 ever èveraient ever SFX b0 evrer èvreraient evrer SFX b0 eter èteraient eter SFX b0 eler èleraient eler SFX b0 er asse [^c]er SFX b0 cer çasse cer SFX b0 er asses [^c]er SFX b0 cer çasses cer SFX b0 er ât [^c]er SFX b0 cer çât cer SFX b0 er assions [^c]er SFX b0 cer çassions cer SFX b0 er assiez [^c]er SFX b0 cer çassiez cer SFX b0 er assent [^c]er SFX b0 cer çassent cer SFX b0 ecer èce ecer SFX b0 emer ème emer SFX b0 ener ène ener SFX b0 eper èpe eper SFX b0 erer ère erer SFX b0 eser èse eser SFX b0 ever ève ever SFX b0 evrer èvre evrer SFX b0 eter ète eter SFX b0 eler èle eler SFX b0 er ons [^c]er SFX b0 cer çons cer SFX b0 er ez er SFX b1 Y 190 SFX b1 er er/n'q'd' er SFX b1 er ant/n'q' [^c]er SFX b1 cer çant/n'q' cer SFX b1 ecer èce/n'j'q' ecer SFX b1 emer ème/n'j'q' emer SFX b1 ener ène/n'j'q' ener SFX b1 eper èpe/n'j'q' eper SFX b1 erer ère/n'j'q' erer SFX b1 eser èse/n'j'q' eser SFX b1 ever ève/n'j'q' ever SFX b1 evrer èvre/n'j'q' evrer SFX b1 eter ète/n'j'q' eter SFX b1 eler èle/n'j'q' eler SFX b1 ecer èces/n' ecer SFX b1 emer èmes/n' emer SFX b1 ener ènes/n' ener SFX b1 eper èpes/n' eper SFX b1 erer ères/n' erer SFX b1 eser èses/n' eser SFX b1 ever èves/n' ever SFX b1 evrer èvres/n' evrer SFX b1 eter ètes/n' eter SFX b1 eler èles/n' eler SFX b1 er ons/n' [^c]er SFX b1 cer çons/n' cer SFX b1 er ez/n' er SFX b1 ecer ècent/n'q' ecer SFX b1 emer èment/n'q' emer SFX b1 ener ènent/n'q' ener SFX b1 eper èpent/n'q' eper SFX b1 erer èrent/n'q' erer SFX b1 eser èsent/n'q' eser SFX b1 ever èvent/n'q' ever SFX b1 evrer èvrent/n'q' evrer SFX b1 eter ètent/n'q' eter SFX b1 eler èlent/n'q' eler SFX b1 er ais/n'j' [^c]er SFX b1 cer çais/n'j' cer SFX b1 er ait/n'q' [^c]er SFX b1 cer çait/n'q' cer SFX b1 er ions/n' er SFX b1 er iez/n' er SFX b1 er aient/n'q' [^c]er SFX b1 cer çaient/n'q' cer SFX b1 er ai/n'j' [^c]er SFX b1 cer çai/n'j' cer SFX b1 er as/n' [^c]er SFX b1 cer ças/n' cer SFX b1 er a/n'q' [^c]er SFX b1 cer ça/n'q' cer SFX b1 er âmes/n' [^c]er SFX b1 cer çâmes/n' cer SFX b1 er âtes/n' [^c]er SFX b1 cer çâtes/n' cer SFX b1 er èrent/n'q' er SFX b1 ecer ècerai/n'j' ecer SFX b1 emer èmerai/n'j' emer SFX b1 ener ènerai/n'j' ener SFX b1 eper èperai/n'j' eper SFX b1 erer èrerai/n'j' erer SFX b1 eser èserai/n'j' eser SFX b1 ever èverai/n'j' ever SFX b1 evrer èvrerai/n'j' evrer SFX b1 eter èterai/n'j' eter SFX b1 eler èlerai/n'j' eler SFX b1 ecer èceras/n' ecer SFX b1 emer èmeras/n' emer SFX b1 ener èneras/n' ener SFX b1 eper èperas/n' eper SFX b1 erer èreras/n' erer SFX b1 eser èseras/n' eser SFX b1 ever èveras/n' ever SFX b1 evrer èvreras/n' evrer SFX b1 eter èteras/n' eter SFX b1 eler èleras/n' eler SFX b1 ecer ècera/n'q' ecer SFX b1 emer èmera/n'q' emer SFX b1 ener ènera/n'q' ener SFX b1 eper èpera/n'q' eper SFX b1 erer èrera/n'q' erer SFX b1 eser èsera/n'q' eser SFX b1 ever èvera/n'q' ever SFX b1 evrer èvrera/n'q' evrer SFX b1 eter ètera/n'q' eter SFX b1 eler èlera/n'q' eler SFX b1 ecer ècerons/n' ecer SFX b1 emer èmerons/n' emer SFX b1 ener ènerons/n' ener SFX b1 eper èperons/n' eper SFX b1 erer èrerons/n' erer SFX b1 eser èserons/n' eser SFX b1 ever èverons/n' ever SFX b1 evrer èvrerons/n' evrer SFX b1 eter èterons/n' eter SFX b1 eler èlerons/n' eler SFX b1 ecer ècerez/n' ecer SFX b1 emer èmerez/n' emer SFX b1 ener ènerez/n' ener SFX b1 eper èperez/n' eper SFX b1 erer èrerez/n' erer SFX b1 eser èserez/n' eser SFX b1 ever èverez/n' ever SFX b1 evrer èvrerez/n' evrer SFX b1 eter èterez/n' eter SFX b1 eler èlerez/n' eler SFX b1 ecer èceront/n'q' ecer SFX b1 emer èmeront/n'q' emer SFX b1 ener èneront/n'q' ener SFX b1 eper èperont/n'q' eper SFX b1 erer èreront/n'q' erer SFX b1 eser èseront/n'q' eser SFX b1 ever èveront/n'q' ever SFX b1 evrer èvreront/n'q' evrer SFX b1 eter èteront/n'q' eter SFX b1 eler èleront/n'q' eler SFX b1 ecer ècerais/n'j' ecer SFX b1 emer èmerais/n'j' emer SFX b1 ener ènerais/n'j' ener SFX b1 eper èperais/n'j' eper SFX b1 erer èrerais/n'j' erer SFX b1 eser èserais/n'j' eser SFX b1 ever èverais/n'j' ever SFX b1 evrer èvrerais/n'j' evrer SFX b1 eter èterais/n'j' eter SFX b1 eler èlerais/n' eler SFX b1 ecer ècerait/n'q' ecer SFX b1 emer èmerait/n'q' emer SFX b1 ener ènerait/n'q' ener SFX b1 eper èperait/n'q' eper SFX b1 erer èrerait/n'q' erer SFX b1 eser èserait/n'q' eser SFX b1 ever èverait/n'q' ever SFX b1 evrer èvrerait/n'q' evrer SFX b1 eter èterait/n'q' eter SFX b1 eler èlerait/n'q' eler SFX b1 ecer ècerions/n' ecer SFX b1 emer èmerions/n' emer SFX b1 ener ènerions/n' ener SFX b1 eper èperions/n' eper SFX b1 erer èrerions/n' erer SFX b1 eser èserions/n' eser SFX b1 ever èverions/n' ever SFX b1 evrer èvrerions/n' evrer SFX b1 eter èterions/n' eter SFX b1 eler èlerions/n' eler SFX b1 ecer èceriez/n' ecer SFX b1 emer èmeriez/n' emer SFX b1 ener èneriez/n' ener SFX b1 eper èperiez/n' eper SFX b1 erer èreriez/n' erer SFX b1 eser èseriez/n' eser SFX b1 ever èveriez/n' ever SFX b1 evrer èvreriez/n' evrer SFX b1 eter èteriez/n' eter SFX b1 eler èleriez/n' eler SFX b1 ecer èceraient/n'q' ecer SFX b1 emer èmeraient/n'q' emer SFX b1 ener èneraient/n'q' ener SFX b1 eper èperaient/n'q' eper SFX b1 erer èreraient/n'q' erer SFX b1 eser èseraient/n'q' eser SFX b1 ever èveraient/n'q' ever SFX b1 evrer èvreraient/n'q' evrer SFX b1 eter èteraient/n'q' eter SFX b1 eler èleraient/n'q' eler SFX b1 er asse/n'j' [^c]er SFX b1 cer çasse/n'j' cer SFX b1 er asses/n' [^c]er SFX b1 cer çasses/n' cer SFX b1 er ât/n'q' [^c]er SFX b1 cer çât/n'q' cer SFX b1 er assions/n' [^c]er SFX b1 cer çassions/n' cer SFX b1 er assiez/n' [^c]er SFX b1 cer çassiez/n' cer SFX b1 er assent/n'q' [^c]er SFX b1 cer çassent/n'q' cer SFX b1 ecer èce/n' ecer SFX b1 emer ème/n' emer SFX b1 ener ène/n' ener SFX b1 eper èpe/n' eper SFX b1 erer ère/n' erer SFX b1 eser èse/n' eser SFX b1 ever ève/n' ever SFX b1 evrer èvre/n' evrer SFX b1 eter ète/n' eter SFX b1 eler èle/n' eler SFX b1 er ons/n' [^c]er SFX b1 cer çons/n' cer SFX b1 er ez/n' er SFX b2 Y 190 SFX b2 er er/n'q'd'l'm't's' er SFX b2 er ant/n'q'l'm't's' [^c]er SFX b2 cer çant/n'q'l'm't's' cer SFX b2 ecer èce/n'q'j'l'm't's' ecer SFX b2 emer ème/n'q'j'l'm't's' emer SFX b2 ener ène/n'q'j'l'm't's' ener SFX b2 eper èpe/n'q'j'l'm't's' eper SFX b2 erer ère/n'q'j'l'm't's' erer SFX b2 eser èse/n'q'j'l'm't's' eser SFX b2 ever ève/n'q'j'l'm't's' ever SFX b2 evrer èvre/n'q'j'l'm't's' evrer SFX b2 eter ète/n'q'j'l'm't's' eter SFX b2 eler èle/n'q'j'l'm't's' eler SFX b2 ecer èces/n'q'l'm' ecer SFX b2 emer èmes/n'q'l'm' emer SFX b2 ener ènes/n'q'l'm' ener SFX b2 eper èpes/n'q'l'm' eper SFX b2 erer ères/n'q'l'm' erer SFX b2 eser èses/n'q'l'm' eser SFX b2 ever èves/n'q'l'm' ever SFX b2 evrer èvres/n'q'l'm' evrer SFX b2 eter ètes/n'q'l'm' eter SFX b2 eler èles/n'q'l'm' eler SFX b2 er ons/n'q'l't' [^c]er SFX b2 cer çons/n'q'l't' cer SFX b2 er ez/n'q'l'm' er SFX b2 ecer ècent/n'q'l'm't's' ecer SFX b2 emer èment/n'q'l'm't's' emer SFX b2 ener ènent/n'q'l'm't's' ener SFX b2 eper èpent/n'q'l'm't's' eper SFX b2 erer èrent/n'q'l'm't's' erer SFX b2 eser èsent/n'q'l'm't's' eser SFX b2 ever èvent/n'q'l'm't's' ever SFX b2 evrer èvrent/n'q'l'm't's' evrer SFX b2 eter ètent/n'q'l'm't's' eter SFX b2 eler èlent/n'q'l'm't's' eler SFX b2 er ais/n'q'j'l'm't' [^c]er SFX b2 cer çais/n'q'j'l'm't' cer SFX b2 er ait/n'q'l'm't's' [^c]er SFX b2 cer çait/n'q'l'm't's' cer SFX b2 er ions/n'q'l't' er SFX b2 er iez/n'q'l'm' er SFX b2 er aient/n'q'l'm't's' [^c]er SFX b2 cer çaient/n'q'l'm't's' cer SFX b2 er ai/n'q'j'l't' [^c]er SFX b2 cer çai/n'q'j'l't' cer SFX b2 er as/n'q'l'm' [^c]er SFX b2 cer ças/n'q'l'm' cer SFX b2 er a/n'q'l'm't's' [^c]er SFX b2 cer ça/n'q'l'm't's' cer SFX b2 er âmes/n'q'l't' [^c]er SFX b2 cer çâmes/n'q'l't' cer SFX b2 er âtes/n'q'l'm' [^c]er SFX b2 cer çâtes/n'q'l'm' cer SFX b2 er èrent/n'q'l'm't's' er SFX b2 ecer ècerai/n'q'j'l't' ecer SFX b2 emer èmerai/n'q'j'l't' emer SFX b2 ener ènerai/n'q'j'l't' ener SFX b2 eper èperai/n'q'j'l't' eper SFX b2 erer èrerai/n'q'j'l't' erer SFX b2 eser èserai/n'q'j'l't' eser SFX b2 ever èverai/n'q'j'l't' ever SFX b2 evrer èvrerai/n'q'j'l't' evrer SFX b2 eter èterai/n'q'j'l't' eter SFX b2 eler èlerai/n'q'j'l't' eler SFX b2 ecer èceras/n'q'l'm' ecer SFX b2 emer èmeras/n'q'l'm' emer SFX b2 ener èneras/n'q'l'm' ener SFX b2 eper èperas/n'q'l'm' eper SFX b2 erer èreras/n'q'l'm' erer SFX b2 eser èseras/n'q'l'm' eser SFX b2 ever èveras/n'q'l'm' ever SFX b2 evrer èvreras/n'q'l'm' evrer SFX b2 eter èteras/n'q'l'm' eter SFX b2 eler èleras/n'q'l'm' eler SFX b2 ecer ècera/n'q'l'm't's' ecer SFX b2 emer èmera/n'q'l'm't's' emer SFX b2 ener ènera/n'q'l'm't's' ener SFX b2 eper èpera/n'q'l'm't's' eper SFX b2 erer èrera/n'q'l'm't's' erer SFX b2 eser èsera/n'q'l'm't's' eser SFX b2 ever èvera/n'q'l'm't's' ever SFX b2 evrer èvrera/n'q'l'm't's' evrer SFX b2 eter ètera/n'q'l'm't's' eter SFX b2 eler èlera/n'q'l'm't's' eler SFX b2 ecer ècerons/n'q'l't' ecer SFX b2 emer èmerons/n'q'l't' emer SFX b2 ener ènerons/n'q'l't' ener SFX b2 eper èperons/n'q'l't' eper SFX b2 erer èrerons/n'q'l't' erer SFX b2 eser èserons/n'q'l't' eser SFX b2 ever èverons/n'q'l't' ever SFX b2 evrer èvrerons/n'q'l't' evrer SFX b2 eter èterons/n'q'l't' eter SFX b2 eler èlerons/n'q'l't' eler SFX b2 ecer ècerez/n'q'l'm' ecer SFX b2 emer èmerez/n'q'l'm' emer SFX b2 ener ènerez/n'q'l'm' ener SFX b2 eper èperez/n'q'l'm' eper SFX b2 erer èrerez/n'q'l'm' erer SFX b2 eser èserez/n'q'l'm' eser SFX b2 ever èverez/n'q'l'm' ever SFX b2 evrer èvrerez/n'q'l'm' evrer SFX b2 eter èterez/n'q'l'm' eter SFX b2 eler èlerez/n'q'l'm' eler SFX b2 ecer èceront/n'q'l'm't's' ecer SFX b2 emer èmeront/n'q'l'm't's' emer SFX b2 ener èneront/n'q'l'm't's' ener SFX b2 eper èperont/n'q'l'm't's' eper SFX b2 erer èreront/n'q'l'm't's' erer SFX b2 eser èseront/n'q'l'm't's' eser SFX b2 ever èveront/n'q'l'm't's' ever SFX b2 evrer èvreront/n'q'l'm't's' evrer SFX b2 eter èteront/n'q'l'm't's' eter SFX b2 eler èleront/n'q'l'm't's' eler SFX b2 ecer ècerais/n'q'j'l'm't' ecer SFX b2 emer èmerais/n'q'j'l'm't' emer SFX b2 ener ènerais/n'q'j'l'm't' ener SFX b2 eper èperais/n'q'j'l'm't' eper SFX b2 erer èrerais/n'q'j'l'm't' erer SFX b2 eser èserais/n'q'j'l'm't' eser SFX b2 ever èverais/n'q'j'l'm't' ever SFX b2 evrer èvrerais/n'q'j'l'm't' evrer SFX b2 eter èterais/n'q'j'l'm't' eter SFX b2 eler èlerais/n'q'j'l'm't' eler SFX b2 ecer ècerait/n'q'l'm't's' ecer SFX b2 emer èmerait/n'q'l'm't's' emer SFX b2 ener ènerait/n'q'l'm't's' ener SFX b2 eper èperait/n'q'l'm't's' eper SFX b2 erer èrerait/n'q'l'm't's' erer SFX b2 eser èserait/n'q'l'm't's' eser SFX b2 ever èverait/n'q'l'm't's' ever SFX b2 evrer èvrerait/n'q'l'm't's' evrer SFX b2 eter èterait/n'q'l'm't's' eter SFX b2 eler èlerait/n'q'l'm't's' eler SFX b2 ecer ècerions/n'q'l't' ecer SFX b2 emer èmerions/n'q'l't' emer SFX b2 ener ènerions/n'q'l't' ener SFX b2 eper èperions/n'q'l't' eper SFX b2 erer èrerions/n'q'l't' erer SFX b2 eser èserions/n'q'l't' eser SFX b2 ever èverions/n'q'l't' ever SFX b2 evrer èvrerions/n'q'l't' evrer SFX b2 eter èterions/n'q'l't' eter SFX b2 eler èlerions/n'q'l't' eler SFX b2 ecer èceriez/n'q'l'm' ecer SFX b2 emer èmeriez/n'q'l'm' emer SFX b2 ener èneriez/n'q'l'm' ener SFX b2 eper èperiez/n'q'l'm' eper SFX b2 erer èreriez/n'q'l'm' erer SFX b2 eser èseriez/n'q'l'm' eser SFX b2 ever èveriez/n'q'l'm' ever SFX b2 evrer èvreriez/n'q'l'm' evrer SFX b2 eter èteriez/n'q'l'm' eter SFX b2 eler èleriez/n'q'l'm' eler SFX b2 ecer èceraient/n'q'l'm't's' ecer SFX b2 emer èmeraient/n'q'l'm't's' emer SFX b2 ener èneraient/n'q'l'm't's' ener SFX b2 eper èperaient/n'q'l'm't's' eper SFX b2 erer èreraient/n'q'l'm't's' erer SFX b2 eser èseraient/n'q'l'm't's' eser SFX b2 ever èveraient/n'q'l'm't's' ever SFX b2 evrer èvreraient/n'q'l'm't's' evrer SFX b2 eter èteraient/n'q'l'm't's' eter SFX b2 eler èleraient/n'q'l'm't's' eler SFX b2 er asse/n'q'j'l't' [^c]er SFX b2 cer çasse/n'q'j'l't' cer SFX b2 er asses/n'q'l'm' [^c]er SFX b2 cer çasses/n'q'l'm' cer SFX b2 er ât/n'q'l'm't's' [^c]er SFX b2 cer çât/n'q'l'm't's' cer SFX b2 er assions/n'q'l't' [^c]er SFX b2 cer çassions/n'q'l't' cer SFX b2 er assiez/n'q'l'm' [^c]er SFX b2 cer çassiez/n'q'l'm' cer SFX b2 er assent/n'q'l'm't's' [^c]er SFX b2 cer çassent/n'q'l'm't's' cer SFX b2 ecer èce/n'l'm' ecer SFX b2 emer ème/n'l'm' emer SFX b2 ener ène/n'l'm' ener SFX b2 eper èpe/n'l'm' eper SFX b2 erer ère/n'l'm' erer SFX b2 eser èse/n'l'm' eser SFX b2 ever ève/n'l'm' ever SFX b2 evrer èvre/n'l'm' evrer SFX b2 eter ète/n'l'm' eter SFX b2 eler èle/n'l'm' eler SFX b2 er ons/n'l' [^c]er SFX b2 cer çons/n'l' cer SFX b2 er ez/n'l'm' er SFX b3 Y 190 SFX b3 er er/m't's' er SFX b3 er ant/m't's' [^c]er SFX b3 cer çant/m't's' cer SFX b3 ecer èce/m's' ecer SFX b3 emer ème/m's' emer SFX b3 ener ène/m's' ener SFX b3 eper èpe/m's' eper SFX b3 erer ère/m's' erer SFX b3 eser èse/m's' eser SFX b3 ever ève/m's' ever SFX b3 evrer èvre/m's' evrer SFX b3 eter ète/m's' eter SFX b3 eler èle/m's' eler SFX b3 ecer èces/t' ecer SFX b3 emer èmes/t' emer SFX b3 ener ènes/t' ener SFX b3 eper èpes/t' eper SFX b3 erer ères/t' erer SFX b3 eser èses/t' eser SFX b3 ever èves/t' ever SFX b3 evrer èvres/t' evrer SFX b3 eter ètes/t' eter SFX b3 eler èles/t' eler SFX b3 er ons [^c]er SFX b3 cer çons cer SFX b3 er ez er SFX b3 ecer ècent/s' ecer SFX b3 emer èment/s' emer SFX b3 ener ènent/s' ener SFX b3 eper èpent/s' eper SFX b3 erer èrent/s' erer SFX b3 eser èsent/s' eser SFX b3 ever èvent/s' ever SFX b3 evrer èvrent/s' evrer SFX b3 eter ètent/s' eter SFX b3 eler èlent/s' eler SFX b3 er ais/m't' [^c]er SFX b3 cer çais/m't' cer SFX b3 er ait/s' [^c]er SFX b3 cer çait/s' cer SFX b3 er ions er SFX b3 er iez er SFX b3 er aient/s' [^c]er SFX b3 cer çaient/s' cer SFX b3 er ai/m' [^c]er SFX b3 cer çai/m' cer SFX b3 er as/t' [^c]er SFX b3 cer ças/t' cer SFX b3 er a/s' [^c]er SFX b3 cer ça/s' cer SFX b3 er âmes [^c]er SFX b3 cer çâmes cer SFX b3 er âtes [^c]er SFX b3 cer çâtes cer SFX b3 er èrent/s' er SFX b3 ecer ècerai/m' ecer SFX b3 emer èmerai/m' emer SFX b3 ener ènerai/m' ener SFX b3 eper èperai/m' eper SFX b3 erer èrerai/m' erer SFX b3 eser èserai/m' eser SFX b3 ever èverai/m' ever SFX b3 evrer èvrerai/m' evrer SFX b3 eter èterai/m' eter SFX b3 eler èlerai/m' eler SFX b3 ecer èceras/t' ecer SFX b3 emer èmeras/t' emer SFX b3 ener èneras/t' ener SFX b3 eper èperas/t' eper SFX b3 erer èreras/t' erer SFX b3 eser èseras/t' eser SFX b3 ever èveras/t' ever SFX b3 evrer èvreras/t' evrer SFX b3 eter èteras/t' eter SFX b3 eler èleras/t' eler SFX b3 ecer ècera/s' ecer SFX b3 emer èmera/s' emer SFX b3 ener ènera/s' ener SFX b3 eper èpera/s' eper SFX b3 erer èrera/s' erer SFX b3 eser èsera/s' eser SFX b3 ever èvera/s' ever SFX b3 evrer èvrera/s' evrer SFX b3 eter ètera/s' eter SFX b3 eler èlera/s' eler SFX b3 ecer ècerons ecer SFX b3 emer èmerons emer SFX b3 ener ènerons ener SFX b3 eper èperons eper SFX b3 erer èrerons erer SFX b3 eser èserons eser SFX b3 ever èverons ever SFX b3 evrer èvrerons evrer SFX b3 eter èterons eter SFX b3 eler èlerons eler SFX b3 ecer ècerez ecer SFX b3 emer èmerez emer SFX b3 ener ènerez ener SFX b3 eper èperez eper SFX b3 erer èrerez erer SFX b3 eser èserez eser SFX b3 ever èverez ever SFX b3 evrer èvrerez evrer SFX b3 eter èterez eter SFX b3 eler èlerez eler SFX b3 ecer èceront/s' ecer SFX b3 emer èmeront/s' emer SFX b3 ener èneront/s' ener SFX b3 eper èperont/s' eper SFX b3 erer èreront/s' erer SFX b3 eser èseront/s' eser SFX b3 ever èveront/s' ever SFX b3 evrer èvreront/s' evrer SFX b3 eter èteront/s' eter SFX b3 eler èleront/s' eler SFX b3 ecer ècerais/m't' ecer SFX b3 emer èmerais/m't' emer SFX b3 ener ènerais/m't' ener SFX b3 eper èperais/m't' eper SFX b3 erer èrerais/m't' erer SFX b3 eser èserais/m't' eser SFX b3 ever èverais/m't' ever SFX b3 evrer èvrerais/m't' evrer SFX b3 eter èterais/m't' eter SFX b3 eler èlerais/m't' eler SFX b3 ecer ècerait/s' ecer SFX b3 emer èmerait/s' emer SFX b3 ener ènerait/s' ener SFX b3 eper èperait/s' eper SFX b3 erer èrerait/s' erer SFX b3 eser èserait/s' eser SFX b3 ever èverait/s' ever SFX b3 evrer èvrerait/s' evrer SFX b3 eter èterait/s' eter SFX b3 eler èlerait/s' eler SFX b3 ecer ècerions ecer SFX b3 emer èmerions emer SFX b3 ener ènerions ener SFX b3 eper èperions eper SFX b3 erer èrerions erer SFX b3 eser èserions eser SFX b3 ever èverions ever SFX b3 evrer èvrerions evrer SFX b3 eter èterions eter SFX b3 eler èlerions eler SFX b3 ecer èceriez ecer SFX b3 emer èmeriez emer SFX b3 ener èneriez ener SFX b3 eper èperiez eper SFX b3 erer èreriez erer SFX b3 eser èseriez eser SFX b3 ever èveriez ever SFX b3 evrer èvreriez evrer SFX b3 eter èteriez eter SFX b3 eler èleriez eler SFX b3 ecer èceraient/s' ecer SFX b3 emer èmeraient/s' emer SFX b3 ener èneraient/s' ener SFX b3 eper èperaient/s' eper SFX b3 erer èreraient/s' erer SFX b3 eser èseraient/s' eser SFX b3 ever èveraient/s' ever SFX b3 evrer èvreraient/s' evrer SFX b3 eter èteraient/s' eter SFX b3 eler èleraient/s' eler SFX b3 er asse/m' [^c]er SFX b3 cer çasse/m' cer SFX b3 er asses/t' [^c]er SFX b3 cer çasses/t' cer SFX b3 er ât/s' [^c]er SFX b3 cer çât/s' cer SFX b3 er assions [^c]er SFX b3 cer çassions cer SFX b3 er assiez [^c]er SFX b3 cer çassiez cer SFX b3 er assent/s' [^c]er SFX b3 cer çassent/s' cer SFX b3 ecer èce/t' ecer SFX b3 emer ème/t' emer SFX b3 ener ène/t' ener SFX b3 eper èpe/t' eper SFX b3 erer ère/t' erer SFX b3 eser èse/t' eser SFX b3 ever ève/t' ever SFX b3 evrer èvre/t' evrer SFX b3 eter ète/t' eter SFX b3 eler èle/t' eler SFX b3 er ons [^c]er SFX b3 cer çons cer SFX b3 er ez er SFX b4 Y 190 SFX b4 er er/n'q'd'l'm't's' er SFX b4 er ant/n'q'l'm't's' [^c]er SFX b4 cer çant/n'q'l'm't's' cer SFX b4 ecer èce/n'q'j'l'm't's' ecer SFX b4 emer ème/n'q'j'l'm't's' emer SFX b4 ener ène/n'q'j'l'm't's' ener SFX b4 eper èpe/n'q'j'l'm't's' eper SFX b4 erer ère/n'q'j'l'm't's' erer SFX b4 eser èse/n'q'j'l'm't's' eser SFX b4 ever ève/n'q'j'l'm't's' ever SFX b4 evrer èvre/n'q'j'l'm't's' evrer SFX b4 eter ète/n'q'j'l'm't's' eter SFX b4 eler èle/n'q'j'l'm't's' eler SFX b4 ecer èces/n'q'l'm't' ecer SFX b4 emer èmes/n'q'l'm't' emer SFX b4 ener ènes/n'q'l'm't' ener SFX b4 eper èpes/n'q'l'm't' eper SFX b4 erer ères/n'q'l'm't' erer SFX b4 eser èses/n'q'l'm't' eser SFX b4 ever èves/n'q'l'm't' ever SFX b4 evrer èvres/n'q'l'm't' evrer SFX b4 eter ètes/n'q'l'm't' eter SFX b4 eler èles/n'q'l'm't' eler SFX b4 er ons/n'q'l't' [^c]er SFX b4 cer çons/n'q'l't' cer SFX b4 er ez/n'q'l'm' er SFX b4 ecer ècent/n'q'l'm't's' ecer SFX b4 emer èment/n'q'l'm't's' emer SFX b4 ener ènent/n'q'l'm't's' ener SFX b4 eper èpent/n'q'l'm't's' eper SFX b4 erer èrent/n'q'l'm't's' erer SFX b4 eser èsent/n'q'l'm't's' eser SFX b4 ever èvent/n'q'l'm't's' ever SFX b4 evrer èvrent/n'q'l'm't's' evrer SFX b4 eter ètent/n'q'l'm't's' eter SFX b4 eler èlent/n'q'l'm't's' eler SFX b4 er ais/n'q'j'l'm't' [^c]er SFX b4 cer çais/n'q'j'l'm't' cer SFX b4 er ait/n'q'l'm't's' [^c]er SFX b4 cer çait/n'q'l'm't's' cer SFX b4 er ions/n'q'l't' er SFX b4 er iez/n'q'l'm' er SFX b4 er aient/n'q'l'm't's' [^c]er SFX b4 cer çaient/n'q'l'm't's' cer SFX b4 er ai/n'q'j'l'm't' [^c]er SFX b4 cer çai/n'q'j'l'm't' cer SFX b4 er as/n'q'l'm't' [^c]er SFX b4 cer ças/n'q'l'm't' cer SFX b4 er a/n'q'l'm't's' [^c]er SFX b4 cer ça/n'q'l'm't's' cer SFX b4 er âmes/n'q'l't' [^c]er SFX b4 cer çâmes/n'q'l't' cer SFX b4 er âtes/n'q'l'm' [^c]er SFX b4 cer çâtes/n'q'l'm' cer SFX b4 er èrent/n'q'l'm't's' er SFX b4 ecer ècerai/n'q'j'l'm't' ecer SFX b4 emer èmerai/n'q'j'l'm't' emer SFX b4 ener ènerai/n'q'j'l'm't' ener SFX b4 eper èperai/n'q'j'l'm't' eper SFX b4 erer èrerai/n'q'j'l'm't' erer SFX b4 eser èserai/n'q'j'l'm't' eser SFX b4 ever èverai/n'q'j'l'm't' ever SFX b4 evrer èvrerai/n'q'j'l'm't' evrer SFX b4 eter èterai/n'q'j'l'm't' eter SFX b4 eler èlerai/n'q'j'l'm't' eler SFX b4 ecer èceras/n'q'l'm't' ecer SFX b4 emer èmeras/n'q'l'm't' emer SFX b4 ener èneras/n'q'l'm't' ener SFX b4 eper èperas/n'q'l'm't' eper SFX b4 erer èreras/n'q'l'm't' erer SFX b4 eser èseras/n'q'l'm't' eser SFX b4 ever èveras/n'q'l'm't' ever SFX b4 evrer èvreras/n'q'l'm't' evrer SFX b4 eter èteras/n'q'l'm't' eter SFX b4 eler èleras/n'q'l'm't' eler SFX b4 ecer ècera/n'q'l'm't's' ecer SFX b4 emer èmera/n'q'l'm't's' emer SFX b4 ener ènera/n'q'l'm't's' ener SFX b4 eper èpera/n'q'l'm't's' eper SFX b4 erer èrera/n'q'l'm't's' erer SFX b4 eser èsera/n'q'l'm't's' eser SFX b4 ever èvera/n'q'l'm't's' ever SFX b4 evrer èvrera/n'q'l'm't's' evrer SFX b4 eter ètera/n'q'l'm't's' eter SFX b4 eler èlera/n'q'l'm't's' eler SFX b4 ecer ècerons/n'q'l't' ecer SFX b4 emer èmerons/n'q'l't' emer SFX b4 ener ènerons/n'q'l't' ener SFX b4 eper èperons/n'q'l't' eper SFX b4 erer èrerons/n'q'l't' erer SFX b4 eser èserons/n'q'l't' eser SFX b4 ever èverons/n'q'l't' ever SFX b4 evrer èvrerons/n'q'l't' evrer SFX b4 eter èterons/n'q'l't' eter SFX b4 eler èlerons/n'q'l't' eler SFX b4 ecer ècerez/n'q'l'm' ecer SFX b4 emer èmerez/n'q'l'm' emer SFX b4 ener ènerez/n'q'l'm' ener SFX b4 eper èperez/n'q'l'm' eper SFX b4 erer èrerez/n'q'l'm' erer SFX b4 eser èserez/n'q'l'm' eser SFX b4 ever èverez/n'q'l'm' ever SFX b4 evrer èvrerez/n'q'l'm' evrer SFX b4 eter èterez/n'q'l'm' eter SFX b4 eler èlerez/n'q'l'm' eler SFX b4 ecer èceront/n'q'l'm't's' ecer SFX b4 emer èmeront/n'q'l'm't's' emer SFX b4 ener èneront/n'q'l'm't's' ener SFX b4 eper èperont/n'q'l'm't's' eper SFX b4 erer èreront/n'q'l'm't's' erer SFX b4 eser èseront/n'q'l'm't's' eser SFX b4 ever èveront/n'q'l'm't's' ever SFX b4 evrer èvreront/n'q'l'm't's' evrer SFX b4 eter èteront/n'q'l'm't's' eter SFX b4 eler èleront/n'q'l'm't's' eler SFX b4 ecer ècerais/n'q'j'l'm't' ecer SFX b4 emer èmerais/n'q'j'l'm't' emer SFX b4 ener ènerais/n'q'j'l'm't' ener SFX b4 eper èperais/n'q'j'l'm't' eper SFX b4 erer èrerais/n'q'j'l'm't' erer SFX b4 eser èserais/n'q'j'l'm't' eser SFX b4 ever èverais/n'q'j'l'm't' ever SFX b4 evrer èvrerais/n'q'j'l'm't' evrer SFX b4 eter èterais/n'q'j'l'm't' eter SFX b4 eler èlerais/n'q'j'l'm't' eler SFX b4 ecer ècerait/n'q'l'm't's' ecer SFX b4 emer èmerait/n'q'l'm't's' emer SFX b4 ener ènerait/n'q'l'm't's' ener SFX b4 eper èperait/n'q'l'm't's' eper SFX b4 erer èrerait/n'q'l'm't's' erer SFX b4 eser èserait/n'q'l'm't's' eser SFX b4 ever èverait/n'q'l'm't's' ever SFX b4 evrer èvrerait/n'q'l'm't's' evrer SFX b4 eter èterait/n'q'l'm't's' eter SFX b4 eler èlerait/n'q'l'm't's' eler SFX b4 ecer ècerions/n'q'l't' ecer SFX b4 emer èmerions/n'q'l't' emer SFX b4 ener ènerions/n'q'l't' ener SFX b4 eper èperions/n'q'l't' eper SFX b4 erer èrerions/n'q'l't' erer SFX b4 eser èserions/n'q'l't' eser SFX b4 ever èverions/n'q'l't' ever SFX b4 evrer èvrerions/n'q'l't' evrer SFX b4 eter èterions/n'q'l't' eter SFX b4 eler èlerions/n'q'l't' eler SFX b4 ecer èceriez/n'q'l'm' ecer SFX b4 emer èmeriez/n'q'l'm' emer SFX b4 ener èneriez/n'q'l'm' ener SFX b4 eper èperiez/n'q'l'm' eper SFX b4 erer èreriez/n'q'l'm' erer SFX b4 eser èseriez/n'q'l'm' eser SFX b4 ever èveriez/n'q'l'm' ever SFX b4 evrer èvreriez/n'q'l'm' evrer SFX b4 eter èteriez/n'q'l'm' eter SFX b4 eler èleriez/n'q'l'm' eler SFX b4 ecer èceraient/n'q'l'm't's' ecer SFX b4 emer èmeraient/n'q'l'm't's' emer SFX b4 ener èneraient/n'q'l'm't's' ener SFX b4 eper èperaient/n'q'l'm't's' eper SFX b4 erer èreraient/n'q'l'm't's' erer SFX b4 eser èseraient/n'q'l'm't's' eser SFX b4 ever èveraient/n'q'l'm't's' ever SFX b4 evrer èvreraient/n'q'l'm't's' evrer SFX b4 eter èteraient/n'q'l'm't's' eter SFX b4 eler èleraient/n'q'l'm't's' eler SFX b4 er asse/n'q'j'l'm't' [^c]er SFX b4 cer çasse/n'q'j'l'm't' cer SFX b4 er asses/n'q'l'm't' [^c]er SFX b4 cer çasses/n'q'l'm't' cer SFX b4 er ât/n'q'l'm't's' [^c]er SFX b4 cer çât/n'q'l'm't's' cer SFX b4 er assions/n'q'l't' [^c]er SFX b4 cer çassions/n'q'l't' cer SFX b4 er assiez/n'q'l'm' [^c]er SFX b4 cer çassiez/n'q'l'm' cer SFX b4 er assent/n'q'l'm't's' [^c]er SFX b4 cer çassent/n'q'l'm't's' cer SFX b4 ecer èce/n'l'm't' ecer SFX b4 emer ème/n'l'm't' emer SFX b4 ener ène/n'l'm't' ener SFX b4 eper èpe/n'l'm't' eper SFX b4 erer ère/n'l'm't' erer SFX b4 eser èse/n'l'm't' eser SFX b4 ever ève/n'l'm't' ever SFX b4 evrer èvre/n'l'm't' evrer SFX b4 eter ète/n'l'm't' eter SFX b4 eler èle/n'l'm't' eler SFX b4 er ons/n'l' [^c]er SFX b4 cer çons/n'l' cer SFX b4 er ez/n'l'm' er SFX b5 Y 190 SFX b5 er er/n'q'd'm't's' er SFX b5 er ant/n'q'm't's' [^c]er SFX b5 cer çant/n'q'm't's' cer SFX b5 ecer èce/n'q'j'm't's' ecer SFX b5 emer ème/n'q'j'm't's' emer SFX b5 ener ène/n'q'j'm't's' ener SFX b5 eper èpe/n'q'j'm't's' eper SFX b5 erer ère/n'q'j'm't's' erer SFX b5 eser èse/n'q'j'm't's' eser SFX b5 ever ève/n'q'j'm't's' ever SFX b5 evrer èvre/n'q'j'm't's' evrer SFX b5 eter ète/n'q'j'm't's' eter SFX b5 eler èle/n'q'j'm't's' eler SFX b5 ecer èces/n'm't' ecer SFX b5 emer èmes/n'm't' emer SFX b5 ener ènes/n'm't' ener SFX b5 eper èpes/n'm't' eper SFX b5 erer ères/n'm't' erer SFX b5 eser èses/n'm't' eser SFX b5 ever èves/n'm't' ever SFX b5 evrer èvres/n'm't' evrer SFX b5 eter ètes/n'm't' eter SFX b5 eler èles/n'm't' eler SFX b5 er ons/n't' [^c]er SFX b5 cer çons/n't' cer SFX b5 er ez/n'm' er SFX b5 ecer ècent/n'q'm't's' ecer SFX b5 emer èment/n'q'm't's' emer SFX b5 ener ènent/n'q'm't's' ener SFX b5 eper èpent/n'q'm't's' eper SFX b5 erer èrent/n'q'm't's' erer SFX b5 eser èsent/n'q'm't's' eser SFX b5 ever èvent/n'q'm't's' ever SFX b5 evrer èvrent/n'q'm't's' evrer SFX b5 eter ètent/n'q'm't's' eter SFX b5 eler èlent/n'q'm't's' eler SFX b5 er ais/n'j'm't' [^c]er SFX b5 cer çais/n'j'm't' cer SFX b5 er ait/n'q'm't's' [^c]er SFX b5 cer çait/n'q'm't's' cer SFX b5 er ions/n't' er SFX b5 er iez/n'm' er SFX b5 er aient/n'q'm't's' [^c]er SFX b5 cer çaient/n'q'm't's' cer SFX b5 er ai/n'j'm't' [^c]er SFX b5 cer çai/n'j'm't' cer SFX b5 er as/n'm't' [^c]er SFX b5 cer ças/n'm't' cer SFX b5 er a/n'q'm't's' [^c]er SFX b5 cer ça/n'q'm't's' cer SFX b5 er âmes/n't' [^c]er SFX b5 cer çâmes/n't' cer SFX b5 er âtes/n'm' [^c]er SFX b5 cer çâtes/n'm' cer SFX b5 er èrent/n'q'm't's' er SFX b5 ecer ècerai/n'j'm't' ecer SFX b5 emer èmerai/n'j'm't' emer SFX b5 ener ènerai/n'j'm't' ener SFX b5 eper èperai/n'j'm't' eper SFX b5 erer èrerai/n'j'm't' erer SFX b5 eser èserai/n'j'm't' eser SFX b5 ever èverai/n'j'm't' ever SFX b5 evrer èvrerai/n'j'm't' evrer SFX b5 eter èterai/n'j'm't' eter SFX b5 eler èlerai/n'j'm't' eler SFX b5 ecer èceras/n'm't' ecer SFX b5 emer èmeras/n'm't' emer SFX b5 ener èneras/n'm't' ener SFX b5 eper èperas/n'm't' eper SFX b5 erer èreras/n'm't' erer SFX b5 eser èseras/n'm't' eser SFX b5 ever èveras/n'm't' ever SFX b5 evrer èvreras/n'm't' evrer SFX b5 eter èteras/n'm't' eter SFX b5 eler èleras/n'm't' eler SFX b5 ecer ècera/n'q'm't's' ecer SFX b5 emer èmera/n'q'm't's' emer SFX b5 ener ènera/n'q'm't's' ener SFX b5 eper èpera/n'q'm't's' eper SFX b5 erer èrera/n'q'm't's' erer SFX b5 eser èsera/n'q'm't's' eser SFX b5 ever èvera/n'q'm't's' ever SFX b5 evrer èvrera/n'q'm't's' evrer SFX b5 eter ètera/n'q'm't's' eter SFX b5 eler èlera/n'q'm't's' eler SFX b5 ecer ècerons/n't' ecer SFX b5 emer èmerons/n't' emer SFX b5 ener ènerons/n't' ener SFX b5 eper èperons/n't' eper SFX b5 erer èrerons/n't' erer SFX b5 eser èserons/n't' eser SFX b5 ever èverons/n't' ever SFX b5 evrer èvrerons/n't' evrer SFX b5 eter èterons/n't' eter SFX b5 eler èlerons/n't' eler SFX b5 ecer ècerez/n'm' ecer SFX b5 emer èmerez/n'm' emer SFX b5 ener ènerez/n'm' ener SFX b5 eper èperez/n'm' eper SFX b5 erer èrerez/n'm' erer SFX b5 eser èserez/n'm' eser SFX b5 ever èverez/n'm' ever SFX b5 evrer èvrerez/n'm' evrer SFX b5 eter èterez/n'm' eter SFX b5 eler èlerez/n'm' eler SFX b5 ecer èceront/n'q'm't's' ecer SFX b5 emer èmeront/n'q'm't's' emer SFX b5 ener èneront/n'q'm't's' ener SFX b5 eper èperont/n'q'm't's' eper SFX b5 erer èreront/n'q'm't's' erer SFX b5 eser èseront/n'q'm't's' eser SFX b5 ever èveront/n'q'm't's' ever SFX b5 evrer èvreront/n'q'm't's' evrer SFX b5 eter èteront/n'q'm't's' eter SFX b5 eler èleront/n'q'm't's' eler SFX b5 ecer ècerais/n'j'm't' ecer SFX b5 emer èmerais/n'j'm't' emer SFX b5 ener ènerais/n'j'm't' ener SFX b5 eper èperais/n'j'm't' eper SFX b5 erer èrerais/n'j'm't' erer SFX b5 eser èserais/n'j'm't' eser SFX b5 ever èverais/n'j'm't' ever SFX b5 evrer èvrerais/n'j'm't' evrer SFX b5 eter èterais/n'j'm't' eter SFX b5 eler èlerais/n'j'm't' eler SFX b5 ecer ècerait/n'q'm't's' ecer SFX b5 emer èmerait/n'q'm't's' emer SFX b5 ener ènerait/n'q'm't's' ener SFX b5 eper èperait/n'q'm't's' eper SFX b5 erer èrerait/n'q'm't's' erer SFX b5 eser èserait/n'q'm't's' eser SFX b5 ever èverait/n'q'm't's' ever SFX b5 evrer èvrerait/n'q'm't's' evrer SFX b5 eter èterait/n'q'm't's' eter SFX b5 eler èlerait/n'q'm't's' eler SFX b5 ecer ècerions/n't' ecer SFX b5 emer èmerions/n't' emer SFX b5 ener ènerions/n't' ener SFX b5 eper èperions/n't' eper SFX b5 erer èrerions/n't' erer SFX b5 eser èserions/n't' eser SFX b5 ever èverions/n't' ever SFX b5 evrer èvrerions/n't' evrer SFX b5 eter èterions/n't' eter SFX b5 eler èlerions/n't' eler SFX b5 ecer èceriez/n'm' ecer SFX b5 emer èmeriez/n'm' emer SFX b5 ener èneriez/n'm' ener SFX b5 eper èperiez/n'm' eper SFX b5 erer èreriez/n'm' erer SFX b5 eser èseriez/n'm' eser SFX b5 ever èveriez/n'm' ever SFX b5 evrer èvreriez/n'm' evrer SFX b5 eter èteriez/n'm' eter SFX b5 eler èleriez/n'm' eler SFX b5 ecer èceraient/n'q'm't's' ecer SFX b5 emer èmeraient/n'q'm't's' emer SFX b5 ener èneraient/n'q'm't's' ener SFX b5 eper èperaient/n'q'm't's' eper SFX b5 erer èreraient/n'q'm't's' erer SFX b5 eser èseraient/n'q'm't's' eser SFX b5 ever èveraient/n'q'm't's' ever SFX b5 evrer èvreraient/n'q'm't's' evrer SFX b5 eter èteraient/n'q'm't's' eter SFX b5 eler èleraient/n'q'm't's' eler SFX b5 er asse/n'j'm't' [^c]er SFX b5 cer çasse/n'j'm't' cer SFX b5 er asses/n'm't' [^c]er SFX b5 cer çasses/n'm't' cer SFX b5 er ât/n'q'm't's' [^c]er SFX b5 cer çât/n'q'm't's' cer SFX b5 er assions/n't' [^c]er SFX b5 cer çassions/n't' cer SFX b5 er assiez/n'm' [^c]er SFX b5 cer çassiez/n'm' cer SFX b5 er assent/n'q'm't's' [^c]er SFX b5 cer çassent/n'q'm't's' cer SFX b5 ecer èce/n'm' ecer SFX b5 emer ème/n'm' emer SFX b5 ener ène/n'm' ener SFX b5 eper èpe/n'm' eper SFX b5 erer ère/n'm' erer SFX b5 eser èse/n'm' eser SFX b5 ever ève/n'm' ever SFX b5 evrer èvre/n'm' evrer SFX b5 eter ète/n'm' eter SFX b5 eler èle/n'm' eler SFX b5 er ons/n' [^c]er SFX b5 cer çons/n' cer SFX b5 er ez/n' er SFX c0 N 151 SFX c0 er ant [^cg]er SFX c0 écer éçant écer SFX c0 éger égeant éger SFX c0 ébrer èbre ébrer SFX c0 écer èce écer SFX c0 écher èche écher SFX c0 écrer ècre écrer SFX c0 éder ède éder SFX c0 éger ège éger SFX c0 égler ègle égler SFX c0 égner ègne égner SFX c0 égrer ègre égrer SFX c0 éguer ègue éguer SFX c0 éler èle éler SFX c0 émer ème émer SFX c0 éner ène éner SFX c0 éper èpe éper SFX c0 équer èque équer SFX c0 érer ère érer SFX c0 éser èse éser SFX c0 éter ète éter SFX c0 étrer ètre étrer SFX c0 évrer èvre évrer SFX c0 éyer èye éyer SFX c0 ébrer èbres ébrer SFX c0 écer èces écer SFX c0 écher èches écher SFX c0 écrer ècres écrer SFX c0 éder èdes éder SFX c0 éger èges éger SFX c0 égler ègles égler SFX c0 égner ègnes égner SFX c0 égrer ègres égrer SFX c0 éguer ègues éguer SFX c0 éler èles éler SFX c0 émer èmes émer SFX c0 éner ènes éner SFX c0 éper èpes éper SFX c0 équer èques équer SFX c0 érer ères érer SFX c0 éser èses éser SFX c0 éter ètes éter SFX c0 étrer ètres étrer SFX c0 évrer èvres évrer SFX c0 éyer èyes éyer SFX c0 er ons [^cg]er SFX c0 écer éçons écer SFX c0 éger égeons éger SFX c0 er ez er SFX c0 ébrer èbrent ébrer SFX c0 écer ècent écer SFX c0 écher èchent écher SFX c0 écrer ècrent écrer SFX c0 éder èdent éder SFX c0 éger ègent éger SFX c0 égler èglent égler SFX c0 égner ègnent égner SFX c0 égrer ègrent égrer SFX c0 éguer èguent éguer SFX c0 éler èlent éler SFX c0 émer èment émer SFX c0 éner ènent éner SFX c0 éper èpent éper SFX c0 équer èquent équer SFX c0 érer èrent érer SFX c0 éser èsent éser SFX c0 éter ètent éter SFX c0 étrer ètrent étrer SFX c0 évrer èvrent évrer SFX c0 éyer èyent éyer SFX c0 er ais [^cg]er SFX c0 écer éçais écer SFX c0 éger égeais éger SFX c0 er ait [^cg]er SFX c0 écer éçait écer SFX c0 éger égeait éger SFX c0 er ions er SFX c0 er iez er SFX c0 er aient [^cg]er SFX c0 écer éçaient écer SFX c0 éger égeaient éger SFX c0 er ai [^cg]er SFX c0 écer éçai écer SFX c0 éger égeai éger SFX c0 er as [^cg]er SFX c0 écer éças écer SFX c0 éger égeas éger SFX c0 er a [^cg]er SFX c0 écer éça écer SFX c0 éger égea éger SFX c0 er âmes [^cg]er SFX c0 écer éçâmes écer SFX c0 éger égeâmes éger SFX c0 er âtes [^cg]er SFX c0 écer éçâtes écer SFX c0 éger égeâtes éger SFX c0 er èrent er SFX c0 er erai er SFX c0 er eras er SFX c0 er era er SFX c0 er erons er SFX c0 er erez er SFX c0 er eront er SFX c0 er erais er SFX c0 er erait er SFX c0 er erions er SFX c0 er eriez er SFX c0 er eraient er SFX c0 er asse [^cg]er SFX c0 écer éçasse écer SFX c0 éger égeasse éger SFX c0 er asses [^cg]er SFX c0 écer éçasses écer SFX c0 éger égeasses éger SFX c0 er ât [^cg]er SFX c0 écer éçât écer SFX c0 éger égeât éger SFX c0 er assions [^cg]er SFX c0 écer éçassions écer SFX c0 éger égeassions éger SFX c0 er assiez [^cg]er SFX c0 écer éçassiez écer SFX c0 éger égeassiez éger SFX c0 er assent [^cg]er SFX c0 écer éçassent écer SFX c0 éger égeassent éger SFX c0 ébrer èbre ébrer SFX c0 écer èce écer SFX c0 écher èche écher SFX c0 écrer ècre écrer SFX c0 éder ède éder SFX c0 éger ège éger SFX c0 égler ègle égler SFX c0 égner ègne égner SFX c0 égrer ègre égrer SFX c0 éguer ègue éguer SFX c0 éler èle éler SFX c0 émer ème émer SFX c0 éner ène éner SFX c0 éper èpe éper SFX c0 équer èque équer SFX c0 érer ère érer SFX c0 éser èse éser SFX c0 éter ète éter SFX c0 étrer ètre étrer SFX c0 évrer èvre évrer SFX c0 éyer èye éyer SFX c0 er ons [^cg]er SFX c0 écer éçons écer SFX c0 éger égeons éger SFX c0 er ez er SFX c1 Y 152 SFX c1 r r/n'q'd' er SFX c1 er ant/n'q' [^cg]er SFX c1 écer éçant/n'q' écer SFX c1 éger égeant/n'q' éger SFX c1 ébrer èbre/n'q'j' ébrer SFX c1 écer èce/n'q'j' écer SFX c1 écher èche/n'q'j' écher SFX c1 écrer ècre/n'q'j' écrer SFX c1 éder ède/n'q'j' éder SFX c1 éger ège/n'q'j' éger SFX c1 égler ègle/n'q'j' égler SFX c1 égner ègne/n'q'j' égner SFX c1 égrer ègre/n'q'j' égrer SFX c1 éguer ègue/n'q'j' éguer SFX c1 éler èle/n'q'j' éler SFX c1 émer ème/n'q'j' émer SFX c1 éner ène/n'q'j' éner SFX c1 éper èpe/n'q'j' éper SFX c1 équer èque/n'q'j' équer SFX c1 érer ère/n'q'j' érer SFX c1 éser èse/n'q'j' éser SFX c1 éter ète/n'q'j' éter SFX c1 étrer ètre/n'q'j' étrer SFX c1 évrer èvre/n'q'j' évrer SFX c1 éyer èye/n'q'j' éyer SFX c1 ébrer èbres/n' ébrer SFX c1 écer èces/n' écer SFX c1 écher èches/n' écher SFX c1 écrer ècres/n' écrer SFX c1 éder èdes/n' éder SFX c1 éger èges/n' éger SFX c1 égler ègles/n' égler SFX c1 égner ègnes/n' égner SFX c1 égrer ègres/n' égrer SFX c1 éguer ègues/n' éguer SFX c1 éler èles/n' éler SFX c1 émer èmes/n' émer SFX c1 éner ènes/n' éner SFX c1 éper èpes/n' éper SFX c1 équer èques/n' équer SFX c1 érer ères/n' érer SFX c1 éser èses/n' éser SFX c1 éter ètes/n' éter SFX c1 étrer ètres/n' étrer SFX c1 évrer èvres/n' évrer SFX c1 éyer èyes/n' éyer SFX c1 er ons/n' [^cg]er SFX c1 écer éçons/n' écer SFX c1 éger égeons/n' éger SFX c1 er ez/n' er SFX c1 ébrer èbrent/n'q' ébrer SFX c1 écer ècent/n'q' écer SFX c1 écher èchent/n'q' écher SFX c1 écrer ècrent/n'q' écrer SFX c1 éder èdent/n'q' éder SFX c1 éger ègent/n'q' éger SFX c1 égler èglent/n'q' égler SFX c1 égner ègnent/n'q' égner SFX c1 égrer ègrent/n'q' égrer SFX c1 éguer èguent/n'q' éguer SFX c1 éler èlent/n'q' éler SFX c1 émer èment/n'q' émer SFX c1 éner ènent/n'q' éner SFX c1 éper èpent/n'q' éper SFX c1 équer èquent/n'q' équer SFX c1 érer èrent/n'q' érer SFX c1 éser èsent/n'q' éser SFX c1 éter ètent/n'q' éter SFX c1 étrer ètrent/n'q' étrer SFX c1 évrer èvrent/n'q' évrer SFX c1 éyer èyent/n'q' éyer SFX c1 er ais/n'j' [^cg]er SFX c1 écer éçais/n'j' écer SFX c1 éger égeais/n'j' éger SFX c1 er ait/n'q' [^cg]er SFX c1 écer éçait/n'q' écer SFX c1 éger égeait/n'q' éger SFX c1 er ions/n' er SFX c1 er iez/n' er SFX c1 er aient/n'q' [^cg]er SFX c1 écer éçaient/n'q' écer SFX c1 éger égeaient/n'q' éger SFX c1 er ai/n'j' [^cg]er SFX c1 écer éçai/n'j' écer SFX c1 éger égeai/n'j' éger SFX c1 er as/n' [^cg]er SFX c1 écer éças/n' écer SFX c1 éger égeas/n' éger SFX c1 er a/n'q' [^cg]er SFX c1 écer éça/n'q' écer SFX c1 éger égea/n'q' éger SFX c1 er âmes/n' [^cg]er SFX c1 écer éçâmes/n' écer SFX c1 éger égeâmes/n' éger SFX c1 er âtes/n' [^cg]er SFX c1 écer éçâtes/n' écer SFX c1 éger égeâtes/n' éger SFX c1 er èrent/n'q' er SFX c1 er erai/n'j' er SFX c1 er eras/n' er SFX c1 er era/n'q' er SFX c1 er erons/n' er SFX c1 er erez/n' er SFX c1 er eront/n'q' er SFX c1 er erais/n'j' er SFX c1 er erait/n'q' er SFX c1 er erions/n' er SFX c1 er eriez/n' er SFX c1 er eraient/n'q' er SFX c1 er asse/n'j' [^cg]er SFX c1 écer éçasse/n'j' écer SFX c1 éger égeasse/n'j' éger SFX c1 er asses/n' [^cg]er SFX c1 écer éçasses/n' écer SFX c1 éger égeasses/n' éger SFX c1 er ât/n'q' [^cg]er SFX c1 écer éçât/n'q' écer SFX c1 éger égeât/n'q' éger SFX c1 er assions/n' [^cg]er SFX c1 écer éçassions/n' écer SFX c1 éger égeassions/n' éger SFX c1 er assiez/n' [^cg]er SFX c1 écer éçassiez/n' écer SFX c1 éger égeassiez/n' éger SFX c1 er assent/n'q' [^cg]er SFX c1 écer éçassent/n'q' écer SFX c1 éger égeassent/n'q' éger SFX c1 ébrer èbre/n' ébrer SFX c1 écer èce/n' écer SFX c1 écher èche/n' écher SFX c1 écrer ècre/n' écrer SFX c1 éder ède/n' éder SFX c1 éger ège/n' éger SFX c1 égler ègle/n' égler SFX c1 égner ègne/n' égner SFX c1 égrer ègre/n' égrer SFX c1 éguer ègue/n' éguer SFX c1 éler èle/n' éler SFX c1 émer ème/n' émer SFX c1 éner ène/n' éner SFX c1 éper èpe/n' éper SFX c1 équer èque/n' équer SFX c1 érer ère/n' érer SFX c1 éser èse/n' éser SFX c1 éter ète/n' éter SFX c1 étrer ètre/n' étrer SFX c1 évrer èvre/n' évrer SFX c1 éyer èye/n' éyer SFX c1 er ons/n' [^cg]er SFX c1 écer éçons/n' écer SFX c1 éger égeons/n' éger SFX c1 er ez/n' er SFX c2 Y 152 SFX c2 er er/n'q'd'l'm't's' er SFX c2 er ant/n'q'l'm't's' [^cg]er SFX c2 écer éçant/n'q'l'm't's' écer SFX c2 éger égeant/n'q'l'm't's' éger SFX c2 ébrer èbre/n'q'j'l'm't's' ébrer SFX c2 écer èce/n'q'j'l'm't's' écer SFX c2 écher èche/n'q'j'l'm't's' écher SFX c2 écrer ècre/n'q'j'l'm't's' écrer SFX c2 éder ède/n'q'j'l'm't's' éder SFX c2 éger ège/n'q'j'l'm't's' éger SFX c2 égler ègle/n'q'j'l'm't's' égler SFX c2 égner ègne/n'q'j'l'm't's' égner SFX c2 égrer ègre/n'q'j'l'm't's' égrer SFX c2 éguer ègue/n'q'j'l'm't's' éguer SFX c2 éler èle/n'q'j'l'm't's' éler SFX c2 émer ème/n'q'j'l'm't's' émer SFX c2 éner ène/n'q'j'l'm't's' éner SFX c2 éper èpe/n'q'j'l'm't's' éper SFX c2 équer èque/n'q'j'l'm't's' équer SFX c2 érer ère/n'q'j'l'm't's' érer SFX c2 éser èse/n'q'j'l'm't's' éser SFX c2 éter ète/n'q'j'l'm't's' éter SFX c2 étrer ètre/n'q'j'l'm't's' étrer SFX c2 évrer èvre/n'q'j'l'm't's' évrer SFX c2 éyer èye/n'q'j'l'm't's' éyer SFX c2 ébrer èbres/n'q'l'm' ébrer SFX c2 écer èces/n'q'l'm' écer SFX c2 écher èches/n'q'l'm' écher SFX c2 écrer ècres/n'q'l'm' écrer SFX c2 éder èdes/n'q'l'm' éder SFX c2 éger èges/n'q'l'm' éger SFX c2 égler ègles/n'q'l'm' égler SFX c2 égner ègnes/n'q'l'm' égner SFX c2 égrer ègres/n'q'l'm' égrer SFX c2 éguer ègues/n'q'l'm' éguer SFX c2 éler èles/n'q'l'm' éler SFX c2 émer èmes/n'q'l'm' émer SFX c2 éner ènes/n'q'l'm' éner SFX c2 éper èpes/n'q'l'm' éper SFX c2 équer èques/n'q'l'm' équer SFX c2 érer ères/n'q'l'm' érer SFX c2 éser èses/n'q'l'm' éser SFX c2 éter ètes/n'q'l'm' éter SFX c2 étrer ètres/n'q'l'm' étrer SFX c2 évrer èvres/n'q'l'm' évrer SFX c2 éyer èyes/n'q'l'm' éyer SFX c2 er ons/n'q'l't' [^cg]er SFX c2 écer éçons/n'q'l't' écer SFX c2 éger égeons/n'q'l't' éger SFX c2 er ez/n'q'l'm' er SFX c2 ébrer èbrent/n'q'l'm't's' ébrer SFX c2 écer ècent/n'q'l'm't's' écer SFX c2 écher èchent/n'q'l'm't's' écher SFX c2 écrer ècrent/n'q'l'm't's' écrer SFX c2 éder èdent/n'q'l'm't's' éder SFX c2 éger ègent/n'q'l'm't's' éger SFX c2 égler èglent/n'q'l'm't's' égler SFX c2 égner ègnent/n'q'l'm't's' égner SFX c2 égrer ègrent/n'q'l'm't's' égrer SFX c2 éguer èguent/n'q'l'm't's' éguer SFX c2 éler èlent/n'q'l'm't's' éler SFX c2 émer èment/n'q'l'm't's' émer SFX c2 éner ènent/n'q'l'm't's' éner SFX c2 éper èpent/n'q'l'm't's' éper SFX c2 équer èquent/n'q'l'm't's' équer SFX c2 érer èrent/n'q'l'm't's' érer SFX c2 éser èsent/n'q'l'm't's' éser SFX c2 éter ètent/n'q'l'm't's' éter SFX c2 étrer ètrent/n'q'l'm't's' étrer SFX c2 évrer èvrent/n'q'l'm't's' évrer SFX c2 éyer èyent/n'q'l'm't's' éyer SFX c2 er ais/n'q'j'l'm't' [^cg]er SFX c2 écer éçais/n'q'j'l'm't' écer SFX c2 éger égeais/n'q'j'l'm't' éger SFX c2 er ait/n'q'l'm't's' [^cg]er SFX c2 écer éçait/n'q'l'm't's' écer SFX c2 éger égeait/n'q'l'm't's' éger SFX c2 er ions/n'q'l't' er SFX c2 er iez/n'q'l'm' er SFX c2 er aient/n'q'l'm't's' [^cg]er SFX c2 écer éçaient/n'q'l'm't's' écer SFX c2 éger égeaient/n'q'l'm't's' éger SFX c2 er ai/n'q'j'l't' [^cg]er SFX c2 écer éçai/n'q'j'l't' écer SFX c2 éger égeai/n'q'j'l't' éger SFX c2 er as/n'q'l'm' [^cg]er SFX c2 écer éças/n'q'l'm' écer SFX c2 éger égeas/n'q'l'm' éger SFX c2 er a/n'q'l'm't's' [^cg]er SFX c2 écer éça/n'q'l'm't's' écer SFX c2 éger égea/n'q'l'm't's' éger SFX c2 er âmes/n'q'l't' [^cg]er SFX c2 écer éçâmes/n'q'l't' écer SFX c2 éger égeâmes/n'q'l't' éger SFX c2 er âtes/n'q'l'm' [^cg]er SFX c2 écer éçâtes/n'q'l'm' écer SFX c2 éger égeâtes/n'q'l'm' éger SFX c2 er èrent/n'q'l'm't's' er SFX c2 er erai/n'q'j'l't' er SFX c2 er eras/n'q'l'm' er SFX c2 er era/n'q'l'm't's' er SFX c2 er erons/n'q'l't' er SFX c2 er erez/n'q'l'm' er SFX c2 er eront/n'q'l'm't's' er SFX c2 er erais/n'q'j'l'm't' er SFX c2 er erait/n'q'l'm't's' er SFX c2 er erions/n'q'l't' er SFX c2 er eriez/n'q'l'm' er SFX c2 er eraient/n'q'l'm't's' er SFX c2 er asse/n'q'j'l't' [^cg]er SFX c2 écer éçasse/n'q'j'l't' écer SFX c2 éger égeasse/n'q'j'l't' éger SFX c2 er asses/n'q'l'm' [^cg]er SFX c2 écer éçasses/n'q'l'm' écer SFX c2 éger égeasses/n'q'l'm' éger SFX c2 er ât/n'q'l'm't's' [^cg]er SFX c2 écer éçât/n'q'l'm't's' écer SFX c2 éger égeât/n'q'l'm't's' éger SFX c2 er assions/n'q'l't' [^cg]er SFX c2 écer éçassions/n'q'l't' écer SFX c2 éger égeassions/n'q'l't' éger SFX c2 er assiez/n'q'l'm' [^cg]er SFX c2 écer éçassiez/n'q'l'm' écer SFX c2 éger égeassiez/n'q'l'm' éger SFX c2 er assent/n'q'l'm't's' [^cg]er SFX c2 écer éçassent/n'q'l'm't's' écer SFX c2 éger égeassent/n'q'l'm't's' éger SFX c2 ébrer èbre/n'l'm' ébrer SFX c2 écer èce/n'l'm' écer SFX c2 écher èche/n'l'm' écher SFX c2 écrer ècre/n'l'm' écrer SFX c2 éder ède/n'l'm' éder SFX c2 éger ège/n'l'm' éger SFX c2 égler ègle/n'l'm' égler SFX c2 égner ègne/n'l'm' égner SFX c2 égrer ègre/n'l'm' égrer SFX c2 éguer ègue/n'l'm' éguer SFX c2 éler èle/n'l'm' éler SFX c2 émer ème/n'l'm' émer SFX c2 éner ène/n'l'm' éner SFX c2 éper èpe/n'l'm' éper SFX c2 équer èque/n'l'm' équer SFX c2 érer ère/n'l'm' érer SFX c2 éser èse/n'l'm' éser SFX c2 éter ète/n'l'm' éter SFX c2 étrer ètre/n'l'm' étrer SFX c2 évrer èvre/n'l'm' évrer SFX c2 éyer èye/n'l'm' éyer SFX c2 er ons/n'l' [^cg]er SFX c2 écer éçons/n'l' écer SFX c2 éger égeons/n'l' éger SFX c2 er ez/n'l'm' er SFX c3 Y 152 SFX c3 er er/m't's' er SFX c3 er ant/m't's' [^cg]er SFX c3 écer éçant/m't's' écer SFX c3 éger égeant/m't's' éger SFX c3 ébrer èbre/m's' ébrer SFX c3 écer èce/m's' écer SFX c3 écher èche/m's' écher SFX c3 écrer ècre/m's' écrer SFX c3 éder ède/m's' éder SFX c3 éger ège/m's' éger SFX c3 égler ègle/m's' égler SFX c3 égner ègne/m's' égner SFX c3 égrer ègre/m's' égrer SFX c3 éguer ègue/m's' éguer SFX c3 éler èle/m's' éler SFX c3 émer ème/m's' émer SFX c3 éner ène/m's' éner SFX c3 éper èpe/m's' éper SFX c3 équer èque/m's' équer SFX c3 érer ère/m's' érer SFX c3 éser èse/m's' éser SFX c3 éter ète/m's' éter SFX c3 étrer ètre/m's' étrer SFX c3 évrer èvre/m's' évrer SFX c3 éyer èye/m's' éyer SFX c3 ébrer èbres/t' ébrer SFX c3 écer èces/t' écer SFX c3 écher èches/t' écher SFX c3 écrer ècres/t' écrer SFX c3 éder èdes/t' éder SFX c3 éger èges/t' éger SFX c3 égler ègles/t' égler SFX c3 égner ègnes/t' égner SFX c3 égrer ègres/t' égrer SFX c3 éguer ègues/t' éguer SFX c3 éler èles/t' éler SFX c3 émer èmes/t' émer SFX c3 éner ènes/t' éner SFX c3 éper èpes/t' éper SFX c3 équer èques/t' équer SFX c3 érer ères/t' érer SFX c3 éser èses/t' éser SFX c3 éter ètes/t' éter SFX c3 étrer ètres/t' étrer SFX c3 évrer èvres/t' évrer SFX c3 éyer èyes/t' éyer SFX c3 er ons [^cg]er SFX c3 écer éçons écer SFX c3 éger égeons éger SFX c3 er ez er SFX c3 ébrer èbrent/s' ébrer SFX c3 écer ècent/s' écer SFX c3 écher èchent/s' écher SFX c3 écrer ècrent/s' écrer SFX c3 éder èdent/s' éder SFX c3 éger ègent/s' éger SFX c3 égler èglent/s' égler SFX c3 égner ègnent/s' égner SFX c3 égrer ègrent/s' égrer SFX c3 éguer èguent/s' éguer SFX c3 éler èlent/s' éler SFX c3 émer èment/s' émer SFX c3 éner ènent/s' éner SFX c3 éper èpent/s' éper SFX c3 équer èquent/s' équer SFX c3 érer èrent/s' érer SFX c3 éser èsent/s' éser SFX c3 éter ètent/s' éter SFX c3 étrer ètrent/s' étrer SFX c3 évrer èvrent/s' évrer SFX c3 éyer èyent/s' éyer SFX c3 er ais/m't' [^cg]er SFX c3 écer éçais/m't' écer SFX c3 éger égeais/m't' éger SFX c3 er ait/s' [^cg]er SFX c3 écer éçait/s' écer SFX c3 éger égeait/s' éger SFX c3 er ions er SFX c3 er iez er SFX c3 er aient/s' [^cg]er SFX c3 écer éçaient/s' écer SFX c3 éger égeaient/s' éger SFX c3 er ai/m' [^cg]er SFX c3 écer éçai/m' écer SFX c3 éger égeai/m' éger SFX c3 er as/t' [^cg]er SFX c3 écer éças/t' écer SFX c3 éger égeas/t' éger SFX c3 er a/s' [^cg]er SFX c3 écer éça/s' écer SFX c3 éger égea/s' éger SFX c3 er âmes [^cg]er SFX c3 écer éçâmes écer SFX c3 éger égeâmes éger SFX c3 er âtes [^cg]er SFX c3 écer éçâtes écer SFX c3 éger égeâtes éger SFX c3 er èrent/s' er SFX c3 er erai/m' er SFX c3 er eras/t' er SFX c3 er era/s' er SFX c3 er erons er SFX c3 er erez er SFX c3 er eront/s' er SFX c3 er erais/m't' er SFX c3 er erait/s' er SFX c3 er erions er SFX c3 er eriez er SFX c3 er eraient/s' er SFX c3 er asse/m' [^cg]er SFX c3 écer éçasse/m' écer SFX c3 éger égeasse/m' éger SFX c3 er asses/t' [^cg]er SFX c3 écer éçasses/t' écer SFX c3 éger égeasses/t' éger SFX c3 er ât/s' [^cg]er SFX c3 écer éçât/s' écer SFX c3 éger égeât/s' éger SFX c3 er assions [^cg]er SFX c3 écer éçassions écer SFX c3 éger égeassions éger SFX c3 er assiez [^cg]er SFX c3 écer éçassiez écer SFX c3 éger égeassiez éger SFX c3 er assent/s' [^cg]er SFX c3 écer éçassent/s' écer SFX c3 éger égeassent/s' éger SFX c3 ébrer èbre/t' ébrer SFX c3 écer èce/t' écer SFX c3 écher èche/t' écher SFX c3 écrer ècre/t' écrer SFX c3 éder ède/t' éder SFX c3 éger ège/t' éger SFX c3 égler ègle/t' égler SFX c3 égner ègne/t' égner SFX c3 égrer ègre/t' égrer SFX c3 éguer ègue/t' éguer SFX c3 éler èle/t' éler SFX c3 émer ème/t' émer SFX c3 éner ène/t' éner SFX c3 éper èpe/t' éper SFX c3 équer èque/t' équer SFX c3 érer ère/t' érer SFX c3 éser èse/t' éser SFX c3 éter ète/t' éter SFX c3 étrer ètre/t' étrer SFX c3 évrer èvre/t' évrer SFX c3 éyer èye/t' éyer SFX c3 er ons [^cg]er SFX c3 écer éçons écer SFX c3 éger égeons éger SFX c3 er ez er SFX c4 Y 152 SFX c4 er er/n'q'd'l'm't's' er SFX c4 er ant/n'q'l'm't's' [^cg]er SFX c4 écer éçant/n'q'l'm't's' écer SFX c4 éger égeant/n'q'l'm't's' éger SFX c4 ébrer èbre/n'q'j'l'm't's' ébrer SFX c4 écer èce/n'q'j'l'm't's' écer SFX c4 écher èche/n'q'j'l'm't's' écher SFX c4 écrer ècre/n'q'j'l'm't's' écrer SFX c4 éder ède/n'q'j'l'm't's' éder SFX c4 éger ège/n'q'j'l'm't's' éger SFX c4 égler ègle/n'q'j'l'm't's' égler SFX c4 égner ègne/n'q'j'l'm't's' égner SFX c4 égrer ègre/n'q'j'l'm't's' égrer SFX c4 éguer ègue/n'q'j'l'm't's' éguer SFX c4 éler èle/n'q'j'l'm't's' éler SFX c4 émer ème/n'q'j'l'm't's' émer SFX c4 éner ène/n'q'j'l'm't's' éner SFX c4 éper èpe/n'q'j'l'm't's' éper SFX c4 équer èque/n'q'j'l'm't's' équer SFX c4 érer ère/n'q'j'l'm't's' érer SFX c4 éser èse/n'q'j'l'm't's' éser SFX c4 éter ète/n'q'j'l'm't's' éter SFX c4 étrer ètre/n'q'j'l'm't's' étrer SFX c4 évrer èvre/n'q'j'l'm't's' évrer SFX c4 éyer èye/n'q'j'l'm't's' éyer SFX c4 ébrer èbres/n'q'l'm't' ébrer SFX c4 écer èces/n'q'l'm't' écer SFX c4 écher èches/n'q'l'm't' écher SFX c4 écrer ècres/n'q'l'm't' écrer SFX c4 éder èdes/n'q'l'm't' éder SFX c4 éger èges/n'q'l'm't' éger SFX c4 égler ègles/n'q'l'm't' égler SFX c4 égner ègnes/n'q'l'm't' égner SFX c4 égrer ègres/n'q'l'm't' égrer SFX c4 éguer ègues/n'q'l'm't' éguer SFX c4 éler èles/n'q'l'm't' éler SFX c4 émer èmes/n'q'l'm't' émer SFX c4 éner ènes/n'q'l'm't' éner SFX c4 éper èpes/n'q'l'm't' éper SFX c4 équer èques/n'q'l'm't' équer SFX c4 érer ères/n'q'l'm't' érer SFX c4 éser èses/n'q'l'm't' éser SFX c4 éter ètes/n'q'l'm't' éter SFX c4 étrer ètres/n'q'l'm't' étrer SFX c4 évrer èvres/n'q'l'm't' évrer SFX c4 éyer èyes/n'q'l'm't' éyer SFX c4 er ons/n'q'l't' [^cg]er SFX c4 écer éçons/n'q'l't' écer SFX c4 éger égeons/n'q'l't' éger SFX c4 er ez/n'q'l'm' er SFX c4 ébrer èbrent/n'q'l'm't's' ébrer SFX c4 écer ècent/n'q'l'm't's' écer SFX c4 écher èchent/n'q'l'm't's' écher SFX c4 écrer ècrent/n'q'l'm't's' écrer SFX c4 éder èdent/n'q'l'm't's' éder SFX c4 éger ègent/n'q'l'm't's' éger SFX c4 égler èglent/n'q'l'm't's' égler SFX c4 égner ègnent/n'q'l'm't's' égner SFX c4 égrer ègrent/n'q'l'm't's' égrer SFX c4 éguer èguent/n'q'l'm't's' éguer SFX c4 éler èlent/n'q'l'm't's' éler SFX c4 émer èment/n'q'l'm't's' émer SFX c4 éner ènent/n'q'l'm't's' éner SFX c4 éper èpent/n'q'l'm't's' éper SFX c4 équer èquent/n'q'l'm't's' équer SFX c4 érer èrent/n'q'l'm't's' érer SFX c4 éser èsent/n'q'l'm't's' éser SFX c4 éter ètent/n'q'l'm't's' éter SFX c4 étrer ètrent/n'q'l'm't's' étrer SFX c4 évrer èvrent/n'q'l'm't's' évrer SFX c4 éyer èyent/n'q'l'm't's' éyer SFX c4 er ais/n'q'j'l'm't' [^cg]er SFX c4 écer éçais/n'q'j'l'm't' écer SFX c4 éger égeais/n'q'j'l'm't' éger SFX c4 er ait/n'q'l'm't's' [^cg]er SFX c4 écer éçait/n'q'l'm't's' écer SFX c4 éger égeait/n'q'l'm't's' éger SFX c4 er ions/n'q'l't' er SFX c4 er iez/n'q'l'm' er SFX c4 er aient/n'q'l'm't's' [^cg]er SFX c4 écer éçaient/n'q'l'm't's' écer SFX c4 éger égeaient/n'q'l'm't's' éger SFX c4 er ai/n'q'j'l'm't' [^cg]er SFX c4 écer éçai/n'q'j'l'm't' écer SFX c4 éger égeai/n'q'j'l'm't' éger SFX c4 er as/n'q'l'm't' [^cg]er SFX c4 écer éças/n'q'l'm't' écer SFX c4 éger égeas/n'q'l'm't' éger SFX c4 er a/n'q'l'm't's' [^cg]er SFX c4 écer éça/n'q'l'm't's' écer SFX c4 éger égea/n'q'l'm't's' éger SFX c4 er âmes/n'q'l't' [^cg]er SFX c4 écer éçâmes/n'q'l't' écer SFX c4 éger égeâmes/n'q'l't' éger SFX c4 er âtes/n'q'l'm' [^cg]er SFX c4 écer éçâtes/n'q'l'm' écer SFX c4 éger égeâtes/n'q'l'm' éger SFX c4 er èrent/n'q'l'm't's' er SFX c4 er erai/n'q'j'l'm't' er SFX c4 er eras/n'q'l'm't' er SFX c4 er era/n'q'l'm't's' er SFX c4 er erons/n'q'l't' er SFX c4 er erez/n'q'l'm' er SFX c4 er eront/n'q'l'm't's' er SFX c4 er erais/n'q'j'l'm't' er SFX c4 er erait/n'q'l'm't's' er SFX c4 er erions/n'q'l't' er SFX c4 er eriez/n'q'l'm' er SFX c4 er eraient/n'q'l'm't's' er SFX c4 er asse/n'q'j'l'm't' [^cg]er SFX c4 écer éçasse/n'q'j'l'm't' écer SFX c4 éger égeasse/n'q'j'l'm't' éger SFX c4 er asses/n'q'l'm't' [^cg]er SFX c4 écer éçasses/n'q'l'm't' écer SFX c4 éger égeasses/n'q'l'm't' éger SFX c4 er ât/n'q'l'm't's' [^cg]er SFX c4 écer éçât/n'q'l'm't's' écer SFX c4 éger égeât/n'q'l'm't's' éger SFX c4 er assions/n'q'l't' [^cg]er SFX c4 écer éçassions/n'q'l't' écer SFX c4 éger égeassions/n'q'l't' éger SFX c4 er assiez/n'q'l'm' [^cg]er SFX c4 écer éçassiez/n'q'l'm' écer SFX c4 éger égeassiez/n'q'l'm' éger SFX c4 er assent/n'q'l'm't's' [^cg]er SFX c4 écer éçassent/n'q'l'm't's' écer SFX c4 éger égeassent/n'q'l'm't's' éger SFX c4 ébrer èbre/n'l'm't' ébrer SFX c4 écer èce/n'l'm't' écer SFX c4 écher èche/n'l'm't' écher SFX c4 écrer ècre/n'l'm't' écrer SFX c4 éder ède/n'l'm't' éder SFX c4 éger ège/n'l'm't' éger SFX c4 égler ègle/n'l'm't' égler SFX c4 égner ègne/n'l'm't' égner SFX c4 égrer ègre/n'l'm't' égrer SFX c4 éguer ègue/n'l'm't' éguer SFX c4 éler èle/n'l'm't' éler SFX c4 émer ème/n'l'm't' émer SFX c4 éner ène/n'l'm't' éner SFX c4 éper èpe/n'l'm't' éper SFX c4 équer èque/n'l'm't' équer SFX c4 érer ère/n'l'm't' érer SFX c4 éser èse/n'l'm't' éser SFX c4 éter ète/n'l'm't' éter SFX c4 étrer ètre/n'l'm't' étrer SFX c4 évrer èvre/n'l'm't' évrer SFX c4 éyer èye/n'l'm't' éyer SFX c4 er ons/n'l' [^cg]er SFX c4 écer éçons/n'l' écer SFX c4 éger égeons/n'l' éger SFX c4 er ez/n'l'm' er SFX c5 Y 152 SFX c5 er er/n'q'd'm't's' er SFX c5 er ant/n'q'm't's' [^cg]er SFX c5 écer éçant/m'q'm't's' écer SFX c5 éger égeant/m'q'l't's' éger SFX c5 ébrer èbre/n'q'j'm't's' ébrer SFX c5 écer èce/n'q'j'm't's' écer SFX c5 écher èche/n'q'j'm't's' écher SFX c5 écrer ècre/n'q'j'm't's' écrer SFX c5 éder ède/n'q'j'm't's' éder SFX c5 éger ège/n'q'j'm't's' éger SFX c5 égler ègle/n'q'j'm't's' égler SFX c5 égner ègne/n'q'j'm't's' égner SFX c5 égrer ègre/n'q'j'm't's' égrer SFX c5 éguer ègue/n'q'j'm't's' éguer SFX c5 éler èle/n'q'j'm't's' éler SFX c5 émer ème/n'q'j'm't's' émer SFX c5 éner ène/n'q'j'm't's' éner SFX c5 éper èpe/n'q'j'm't's' éper SFX c5 équer èque/n'q'j'm't's' équer SFX c5 érer ère/n'q'j'm't's' érer SFX c5 éser èse/n'q'j'm't's' éser SFX c5 éter ète/n'q'j'm't's' éter SFX c5 étrer ètre/n'q'j'm't's' étrer SFX c5 évrer èvre/n'q'j'm't's' évrer SFX c5 éyer èye/n'q'j'm't's' éyer SFX c5 ébrer èbres/n'm't' ébrer SFX c5 écer èces/n'm't' écer SFX c5 écher èches/n'm't' écher SFX c5 écrer ècres/n'm't' écrer SFX c5 éder èdes/n'm't' éder SFX c5 éger èges/n'm't' éger SFX c5 égler ègles/n'm't' égler SFX c5 égner ègnes/n'm't' égner SFX c5 égrer ègres/n'm't' égrer SFX c5 éguer ègues/n'm't' éguer SFX c5 éler èles/n'm't' éler SFX c5 émer èmes/n'm't' émer SFX c5 éner ènes/n'm't' éner SFX c5 éper èpes/n'm't' éper SFX c5 équer èques/n'm't' équer SFX c5 érer ères/n'm't' érer SFX c5 éser èses/n'm't' éser SFX c5 éter ètes/n'm't' éter SFX c5 étrer ètres/n'm't' étrer SFX c5 évrer èvres/n'm't' évrer SFX c5 éyer èyes/n'm't' éyer SFX c5 er ons/n't' [^cg]er SFX c5 écer éçons/n't' écer SFX c5 éger égeons/n't' éger SFX c5 er ez/n'm' er SFX c5 ébrer èbrent/n'q'm't's' ébrer SFX c5 écer ècent/n'q'm't's' écer SFX c5 écher èchent/n'q'm't's' écher SFX c5 écrer ècrent/n'q'm't's' écrer SFX c5 éder èdent/n'q'm't's' éder SFX c5 éger ègent/n'q'm't's' éger SFX c5 égler èglent/n'q'm't's' égler SFX c5 égner ègnent/n'q'm't's' égner SFX c5 égrer ègrent/n'q'm't's' égrer SFX c5 éguer èguent/n'q'm't's' éguer SFX c5 éler èlent/n'q'm't's' éler SFX c5 émer èment/n'q'm't's' émer SFX c5 éner ènent/n'q'm't's' éner SFX c5 éper èpent/n'q'm't's' éper SFX c5 équer èquent/n'q'm't's' équer SFX c5 érer èrent/n'q'm't's' érer SFX c5 éser èsent/n'q'm't's' éser SFX c5 éter ètent/n'q'm't's' éter SFX c5 étrer ètrent/n'q'm't's' étrer SFX c5 évrer èvrent/n'q'm't's' évrer SFX c5 éyer èyent/n'q'm't's' éyer SFX c5 er ais/n'j'm't' [^cg]er SFX c5 écer éçais/n'j'm't' écer SFX c5 éger égeais/n'j'm't' éger SFX c5 er ait/n'q'm't's' [^cg]er SFX c5 écer éçait/n'q'm't's' écer SFX c5 éger égeait/n'q'm't's' éger SFX c5 er ions/n't' er SFX c5 er iez/n'm' er SFX c5 er aient/n'q'm't's' [^cg]er SFX c5 écer éçaient/n'q'm't's' écer SFX c5 éger égeaient/n'q'm't's' éger SFX c5 er ai/n'j'm't' [^cg]er SFX c5 écer éçai/n'j'm't' écer SFX c5 éger égeai/n'j'm't' éger SFX c5 er as/n'm't' [^cg]er SFX c5 écer éças/n'm't' écer SFX c5 éger égeas/n'm't' éger SFX c5 er a/n'q'm't's' [^cg]er SFX c5 écer éça/n'q'm't's' écer SFX c5 éger égea/n'q'm't's' éger SFX c5 er âmes/n't' [^cg]er SFX c5 écer éçâmes/n't' écer SFX c5 éger égeâmes/n't' éger SFX c5 er âtes/n'm' [^cg]er SFX c5 écer éçâtes/n'm' écer SFX c5 éger égeâtes/n'm' éger SFX c5 er èrent/n'q'm't's' er SFX c5 er erai/n'j'm't' er SFX c5 er eras/n'm't' er SFX c5 er era/n'q'm't's' er SFX c5 er erons/n't' er SFX c5 er erez/n'm' er SFX c5 er eront/n'q'm't's' er SFX c5 er erais/n'j'm't' er SFX c5 er erait/n'q'm't's' er SFX c5 er erions/n't' er SFX c5 er eriez/n'm' er SFX c5 er eraient/n'q'm't's' er SFX c5 er asse/n'j'm't' [^cg]er SFX c5 écer éçasse/n'j'm't' écer SFX c5 éger égeasse/n'j'm't' éger SFX c5 er asses/n'm't' [^cg]er SFX c5 écer éçasses/n'm't' écer SFX c5 éger égeasses/n'm't' éger SFX c5 er ât/n'q'm't's' [^cg]er SFX c5 écer éçât/n'q'm't's' écer SFX c5 éger égeât/n'q'm't's' éger SFX c5 er assions/n't' [^cg]er SFX c5 écer éçassions/n't' écer SFX c5 éger égeassions/n't' éger SFX c5 er assiez/n'm' [^cg]er SFX c5 écer éçassiez/n'm' écer SFX c5 éger égeassiez/n'm' éger SFX c5 er assent/n'q'm't's' [^cg]er SFX c5 écer éçassent/n'q'm't's' écer SFX c5 éger égeassent/n'q'm't's' éger SFX c5 ébrer èbre/n'm' ébrer SFX c5 écer èce/n'm' écer SFX c5 écher èche/n'm' écher SFX c5 écrer ècre/n'm' écrer SFX c5 éder ède/n'm' éder SFX c5 éger ège/n'm' éger SFX c5 égler ègle/n'm' égler SFX c5 égner ègne/n'm' égner SFX c5 égrer ègre/n'm' égrer SFX c5 éguer ègue/n'm' éguer SFX c5 éler èle/n'm' éler SFX c5 émer ème/n'm' émer SFX c5 éner ène/n'm' éner SFX c5 éper èpe/n'm' éper SFX c5 équer èque/n'm' équer SFX c5 érer ère/n'm' érer SFX c5 éser èse/n'm' éser SFX c5 éter ète/n'm' éter SFX c5 étrer ètre/n'm' étrer SFX c5 évrer èvre/n'm' évrer SFX c5 éyer èye/n'm' éyer SFX c5 er ons/n' [^cg]er SFX c5 écer éçons/n' écer SFX c5 éger égeons/n' éger SFX c5 er ez/n' er SFX d0 N 82 SFX d0 er ant er SFX d0 eter ette jeter SFX d0 eter ette [^j]eter SFX d0 eler elle ppeler SFX d0 eler elle [^p].eler SFX d0 eter ettes jeter SFX d0 eter ettes [^j]eter SFX d0 eler elles ppeler SFX d0 eler elles [^p].eler SFX d0 er ons er SFX d0 er ez er SFX d0 eter ettent jeter SFX d0 eter ettent [^j]eter SFX d0 eler ellent ppeler SFX d0 eler ellent [^p].eler SFX d0 er ais er SFX d0 er ait er SFX d0 er ions er SFX d0 er iez er SFX d0 er aient er SFX d0 er ai er SFX d0 er as er SFX d0 er a er SFX d0 er âmes er SFX d0 er âtes er SFX d0 er èrent er SFX d0 eter etterai jeter SFX d0 eter etterai [^j]eter SFX d0 eler ellerai ppeler SFX d0 eler ellerai [^p].eler SFX d0 eter etteras jeter SFX d0 eter etteras [^j]eter SFX d0 eler elleras ppeler SFX d0 eler elleras [^p].eler SFX d0 eter ettera jeter SFX d0 eter ettera [^j]eter SFX d0 eler ellera ppeler SFX d0 eler ellera [^p].eler SFX d0 eter etterons jeter SFX d0 eter etterons [^j]eter SFX d0 eler ellerons ppeler SFX d0 eler ellerons [^p].eler SFX d0 eter etterez jeter SFX d0 eter etterez [^j]eter SFX d0 eler ellerez ppeler SFX d0 eler ellerez [^p].eler SFX d0 eter etteront jeter SFX d0 eter etteront [^j]eter SFX d0 eler elleront ppeler SFX d0 eler elleront [^p].eler SFX d0 eter etterais jeter SFX d0 eter etterais [^j]eter SFX d0 eler ellerais ppeler SFX d0 eler ellerais [^p].eler SFX d0 eter etterait jeter SFX d0 eter etterait [^j]eter SFX d0 eler ellerait ppeler SFX d0 eler ellerait [^p].eler SFX d0 eter etterions jeter SFX d0 eter etterions [^j]eter SFX d0 eler ellerions ppeler SFX d0 eler ellerions [^p].eler SFX d0 eter etteriez jeter SFX d0 eter etteriez [^j]eter SFX d0 eler elleriez ppeler SFX d0 eler elleriez [^p].eler SFX d0 eter etteraient jeter SFX d0 eter etteraient [^j]eter SFX d0 eler elleraient ppeler SFX d0 eler elleraient [^p].eler SFX d0 er asse er SFX d0 er asses er SFX d0 er ât er SFX d0 er assions er SFX d0 er assiez er SFX d0 er assent er SFX d0 eter ette jeter SFX d0 eter ette [^j]eter SFX d0 eler elle ppeler SFX d0 eler elle [^p].eler SFX d0 er ons er SFX d0 er ez er SFX d1 Y 83 SFX d1 er er/n'q'd' er SFX d1 er ant/n'q' er SFX d1 eter ette/n'q'j' jeter SFX d1 eter ette/n'q'j' [^j]eter SFX d1 eler elle/n'q'j' ppeler SFX d1 eler elle/n'q'j' [^p].eler SFX d1 eter ettes/n' jeter SFX d1 eter ettes/n' [^j]eter SFX d1 eler elles/n' ppeler SFX d1 eler elles/n' [^p].eler SFX d1 er ons/n' er SFX d1 er ez/n' er SFX d1 eter ettent/n'q' jeter SFX d1 eter ettent/n'q' [^j]eter SFX d1 eler ellent/n'q' ppeler SFX d1 eler ellent/n'q' [^p].eler SFX d1 er ais/n'j' er SFX d1 er ait/n'q' er SFX d1 er ions/n' er SFX d1 er iez/n' er SFX d1 er aient/n'q' er SFX d1 er ai/n'j' er SFX d1 er as/n' er SFX d1 er a/n'q' er SFX d1 er âmes/n' er SFX d1 er âtes/n' er SFX d1 er èrent/n'q' er SFX d1 eter etterai/n'j' jeter SFX d1 eter etterai/n'j' [^j]eter SFX d1 eler ellerai/n'j' ppeler SFX d1 eler ellerai/n'j' [^p].eler SFX d1 eter etteras/n' jeter SFX d1 eter etteras/n' [^j]eter SFX d1 eler elleras/n' ppeler SFX d1 eler elleras/n' [^p].eler SFX d1 eter ettera/n'q' jeter SFX d1 eter ettera/n'q' [^j]eter SFX d1 eler ellera/n'q' ppeler SFX d1 eler ellera/n'q' [^p].eler SFX d1 eter etterons/n' jeter SFX d1 eter etterons/n' [^j]eter SFX d1 eler ellerons/n' ppeler SFX d1 eler ellerons/n' [^p].eler SFX d1 eter etterez/n' jeter SFX d1 eter etterez/n' [^j]eter SFX d1 eler ellerez/n' ppeler SFX d1 eler ellerez/n' [^p].eler SFX d1 eter etteront/n'q' jeter SFX d1 eter etteront/n'q' [^j]eter SFX d1 eler elleront/n'q' ppeler SFX d1 eler elleront/n'q' [^p].eler SFX d1 eter etterais/n'j' jeter SFX d1 eter etterais/n'j' [^j]eter SFX d1 eler ellerais/n'j' ppeler SFX d1 eler ellerais/n'j' [^p].eler SFX d1 eter etterait/n'q' jeter SFX d1 eter etterait/n'q' [^j]eter SFX d1 eler ellerait/n'q' ppeler SFX d1 eler ellerait/n'q' [^p].eler SFX d1 eter etterions/n' jeter SFX d1 eter etterions/n' [^j]eter SFX d1 eler ellerions/n' ppeler SFX d1 eler ellerions/n' [^p].eler SFX d1 eter etteriez/n' jeter SFX d1 eter etteriez/n' [^j]eter SFX d1 eler elleriez/n' ppeler SFX d1 eler elleriez/n' [^p].eler SFX d1 eter etteraient/n'q' jeter SFX d1 eter etteraient/n'q' [^j]eter SFX d1 eler elleraient/n'q' ppeler SFX d1 eler elleraient/n'q' [^p].eler SFX d1 er asse/n'j' er SFX d1 er asses/n' er SFX d1 er ât/n'q' er SFX d1 er assions/n' er SFX d1 er assiez/n' er SFX d1 er assent/n'q' er SFX d1 eter ette/n' jeter SFX d1 eter ette/n' [^j]eter SFX d1 eler elle/n' ppeler SFX d1 eler elle/n' [^p].eler SFX d1 er ons/n' er SFX d1 er ez/n' er SFX d2 Y 83 SFX d2 er er/n'q'd'l'm't's' er SFX d2 er ant/n'q'l'm't's' er SFX d2 eter ette/n'q'j'l'm't's' jeter SFX d2 eter ette/n'q'j'l'm't's' [^j]eter SFX d2 eler elle/n'q'j'l'm't's' ppeler SFX d2 eler elle/n'q'j'l'm't's' [^p].eler SFX d2 eter ettes/n'q'l'm' jeter SFX d2 eter ettes/n'q'l'm' [^j]eter SFX d2 eler elles/n'q'l'm' ppeler SFX d2 eler elles/n'q'l'm' [^p].eler SFX d2 er ons/n'q'l't' er SFX d2 er ez/n'q'l'm' er SFX d2 eter ettent/n'q'l'm't's' jeter SFX d2 eter ettent/n'q'l'm't's' [^j]eter SFX d2 eler ellent/n'q'l'm't's' ppeler SFX d2 eler ellent/n'q'l'm't's' [^p].eler SFX d2 er ais/n'q'j'l'm't' er SFX d2 er ait/n'q'l'm't's' er SFX d2 er ions/n'q'l't' er SFX d2 er iez/n'q'l'm' er SFX d2 er aient/n'q'l'm't's' er SFX d2 er ai/n'q'j'l't' er SFX d2 er as/n'q'l'm' er SFX d2 er a/n'q'l'm't's' er SFX d2 er âmes/n'q'l't' er SFX d2 er âtes/n'q'l'm' er SFX d2 er èrent/n'q'l'm't's' er SFX d2 eter etterai/n'q'j'l't' jeter SFX d2 eter etterai/n'q'j'l't' [^j]eter SFX d2 eler ellerai/n'q'j'l't' ppeler SFX d2 eler ellerai/n'q'j'l't' [^p].eler SFX d2 eter etteras/n'q'l'm' jeter SFX d2 eter etteras/n'q'l'm' [^j]eter SFX d2 eler elleras/n'q'l'm' ppeler SFX d2 eler elleras/n'q'l'm' [^p].eler SFX d2 eter ettera/n'q'l'm't's' jeter SFX d2 eter ettera/n'q'l'm't's' [^j]eter SFX d2 eler ellera/n'q'l'm't's' ppeler SFX d2 eler ellera/n'q'l'm't's' [^p].eler SFX d2 eter etterons/n'q'l't' jeter SFX d2 eter etterons/n'q'l't' [^j]eter SFX d2 eler ellerons/n'q'l't' ppeler SFX d2 eler ellerons/n'q'l't' [^p].eler SFX d2 eter etterez/n'q'l'm' jeter SFX d2 eter etterez/n'q'l'm' [^j]eter SFX d2 eler ellerez/n'q'l'm' ppeler SFX d2 eler ellerez/n'q'l'm' [^p].eler SFX d2 eter etteront/n'q'l'm't's' jeter SFX d2 eter etteront/n'q'l'm't's' [^j]eter SFX d2 eler elleront/n'q'l'm't's' ppeler SFX d2 eler elleront/n'q'l'm't's' [^p].eler SFX d2 eter etterais/n'q'j'l'm't' jeter SFX d2 eter etterais/n'q'j'l'm't' [^j]eter SFX d2 eler ellerais/n'q'j'l'm't' ppeler SFX d2 eler ellerais/n'q'j'l'm't' [^p].eler SFX d2 eter etterait/n'q'l'm't's' jeter SFX d2 eter etterait/n'q'l'm't's' [^j]eter SFX d2 eler ellerait/n'q'l'm't's' ppeler SFX d2 eler ellerait/n'q'l'm't's' [^p].eler SFX d2 eter etterions/n'q'l't' jeter SFX d2 eter etterions/n'q'l't' [^j]eter SFX d2 eler ellerions/n'q'l't' ppeler SFX d2 eler ellerions/n'q'l't' [^p].eler SFX d2 eter etteriez/n'q'l'm' jeter SFX d2 eter etteriez/n'q'l'm' [^j]eter SFX d2 eler elleriez/n'q'l'm' ppeler SFX d2 eler elleriez/n'q'l'm' [^p].eler SFX d2 eter etteraient/n'q'l'm't's' jeter SFX d2 eter etteraient/n'q'l'm't's' [^j]eter SFX d2 eler elleraient/n'q'l'm't's' ppeler SFX d2 eler elleraient/n'q'l'm't's' [^p].eler SFX d2 er asse/n'q'j'l't' er SFX d2 er asses/n'q'l'm' er SFX d2 er ât/n'q'l'm't's' er SFX d2 er assions/n'q'l't' er SFX d2 er assiez/n'q'l'm' er SFX d2 er assent/n'q'l'm't's' er SFX d2 eter ette/n'l'm' jeter SFX d2 eter ette/n'l'm' [^j]eter SFX d2 eler elle/n'l'm' ppeler SFX d2 eler elle/n'l'm' [^p].eler SFX d2 er ons/n'l' er SFX d2 er ez/n'l'm' er SFX d3 Y 83 SFX d3 er er/m't's' er SFX d3 er ant/m't's' er SFX d3 eter ette/m's' jeter SFX d3 eter ette/m's' [^j]eter SFX d3 eler elle/m's' ppeler SFX d3 eler elle/m's' [^p].eler SFX d3 eter ettes/t' jeter SFX d3 eter ettes/t' [^j]eter SFX d3 eler elles/t' ppeler SFX d3 eler elles/t' [^p].eler SFX d3 er ons er SFX d3 er ez er SFX d3 eter ettent/s' jeter SFX d3 eter ettent/s' [^j]eter SFX d3 eler ellent/s' ppeler SFX d3 eler ellent/s' [^p].eler SFX d3 er ais/m't' er SFX d3 er ait/s' er SFX d3 er ions er SFX d3 er iez er SFX d3 er aient/s' er SFX d3 er ai/m' er SFX d3 er as/t' er SFX d3 er a/s' er SFX d3 er âmes er SFX d3 er âtes er SFX d3 er èrent/s' er SFX d3 eter etterai/m' jeter SFX d3 eter etterai/m' [^j]eter SFX d3 eler ellerai/m' ppeler SFX d3 eler ellerai/m' [^p].eler SFX d3 eter etteras/t' jeter SFX d3 eter etteras/t' [^j]eter SFX d3 eler elleras/t' ppeler SFX d3 eler elleras/t' [^p].eler SFX d3 eter ettera/s' jeter SFX d3 eter ettera/s' [^j]eter SFX d3 eler ellera/s' ppeler SFX d3 eler ellera/s' [^p].eler SFX d3 eter etterons jeter SFX d3 eter etterons [^j]eter SFX d3 eler ellerons ppeler SFX d3 eler ellerons [^p].eler SFX d3 eter etterez jeter SFX d3 eter etterez [^j]eter SFX d3 eler ellerez ppeler SFX d3 eler ellerez [^p].eler SFX d3 eter etteront/s' jeter SFX d3 eter etteront/s' [^j]eter SFX d3 eler elleront/s' ppeler SFX d3 eler elleront/s' [^p].eler SFX d3 eter etterais/m't' jeter SFX d3 eter etterais/m't' [^j]eter SFX d3 eler ellerais/m't' ppeler SFX d3 eler ellerais/m't' [^p].eler SFX d3 eter etterait/s' jeter SFX d3 eter etterait/s' [^j]eter SFX d3 eler ellerait/s' ppeler SFX d3 eler ellerait/s' [^p].eler SFX d3 eter etterions jeter SFX d3 eter etterions [^j]eter SFX d3 eler ellerions ppeler SFX d3 eler ellerions [^p].eler SFX d3 eter etteriez jeter SFX d3 eter etteriez [^j]eter SFX d3 eler elleriez ppeler SFX d3 eler elleriez [^p].eler SFX d3 eter etteraient/s' jeter SFX d3 eter etteraient/s' [^j]eter SFX d3 eler elleraient/s' ppeler SFX d3 eler elleraient/s' [^p].eler SFX d3 er asse/m' er SFX d3 er asses/t' er SFX d3 er ât/s' er SFX d3 er assions er SFX d3 er assiez er SFX d3 er assent/s' er SFX d3 eter ette/t' jeter SFX d3 eter ette/t' [^j]eter SFX d3 eler elle/t' ppeler SFX d3 eler elle/t' [^p].eler SFX d3 er ons er SFX d3 er ez er SFX d4 Y 98 SFX d4 er er/n'q'd'l'm't's' er SFX d4 er ant/n'q'l'm't's' er SFX d4 eter ette/n'q'j'l'm't's' jeter SFX d4 eter ette/n'q'j'l'm't's' [^j]eter SFX d4 eler elle/n'q'j'l'm't's' ppeler SFX d4 eler elle/n'q'j'l'm't's' [^p].eler SFX d4 eler elle/n'q'j'l'm't's' épeler SFX d4 eter ettes/n'q'l'm't' jeter SFX d4 eter ettes/n'q'l'm't' [^j]eter SFX d4 eler elles/n'q'l'm't' ppeler SFX d4 eler elles/n'q'l'm't' [^p].eler SFX d4 eler elles/n'q'l'm't' épeler SFX d4 er ons/n'q'l't' er SFX d4 er ez/n'q'l'm' er SFX d4 eter ettent/n'q'l'm't's' jeter SFX d4 eter ettent/n'q'l'm't's' [^j]eter SFX d4 eler ellent/n'q'l'm't's' ppeler SFX d4 eler ellent/n'q'l'm't's' [^p].eler SFX d4 eler ellent/n'q'l'm't's' épeler SFX d4 er ais/n'q'j'l'm't' er SFX d4 er ait/n'q'l'm't's' er SFX d4 er ions/n'q'l't' er SFX d4 er iez/n'q'l'm' er SFX d4 er aient/n'q'l'm't's' er SFX d4 er ai/n'q'j'l'm't' er SFX d4 er as/n'q'l'm't' er SFX d4 er a/n'q'l'm't's' er SFX d4 er âmes/n'q'l't' er SFX d4 er âtes/n'q'l'm' er SFX d4 er èrent/n'q'l'm't's' er SFX d4 eter etterai/n'q'j'l'm't' jeter SFX d4 eter etterai/n'q'j'l'm't' [^j]eter SFX d4 eler ellerai/n'q'j'l'm't' ppeler SFX d4 eler ellerai/n'q'j'l'm't' [^p].eler SFX d4 eler ellerai/n'q'j'l'm't' épeler SFX d4 eter etteras/n'q'l'm't' jeter SFX d4 eter etteras/n'q'l'm't' [^j]eter SFX d4 eler elleras/n'q'l'm't' ppeler SFX d4 eler elleras/n'q'l'm't' [^p].eler SFX d4 eler elleras/n'q'l'm't' épeler SFX d4 eter ettera/n'q'l'm't's' jeter SFX d4 eter ettera/n'q'l'm't's' [^j]eter SFX d4 eler ellera/n'q'l'm't's' ppeler SFX d4 eler ellera/n'q'l'm't's' [^p].eler SFX d4 eler ellera/n'q'l'm't's' épeler SFX d4 eter etterons/n'q'l't' jeter SFX d4 eter etterons/n'q'l't' [^j]eter SFX d4 eler ellerons/n'q'l't' ppeler SFX d4 eler ellerons/n'q'l't' [^p].eler SFX d4 eler ellerons/n'q'l't' épeler SFX d4 eter etterez/n'q'l'm' jeter SFX d4 eter etterez/n'q'l'm' [^j]eter SFX d4 eler ellerez/n'q'l'm' ppeler SFX d4 eler ellerez/n'q'l'm' [^p].eler SFX d4 eler ellerez/n'q'l'm' épeler SFX d4 eter etteront/n'q'l'm't's' jeter SFX d4 eter etteront/n'q'l'm't's' [^j]eter SFX d4 eler elleront/n'q'l'm't's' ppeler SFX d4 eler elleront/n'q'l'm't's' [^p].eler SFX d4 eler elleront/n'q'l'm't's' épeler SFX d4 eter etterais/n'q'j'l'm't' jeter SFX d4 eter etterais/n'q'j'l'm't' [^j]eter SFX d4 eler ellerais/n'q'j'l'm't' ppeler SFX d4 eler ellerais/n'q'j'l'm't' [^p].eler SFX d4 eler ellerais/n'q'j'l'm't' épeler SFX d4 eter etterait/n'q'l'm't's' jeter SFX d4 eter etterait/n'q'l'm't's' [^j]eter SFX d4 eler ellerait/n'q'l'm't's' ppeler SFX d4 eler ellerait/n'q'l'm't's' [^p].eler SFX d4 eler ellerait/n'q'l'm't's' épeler SFX d4 eter etterions/n'q'l't' jeter SFX d4 eter etterions/n'q'l't' [^j]eter SFX d4 eler ellerions/n'q'l't' ppeler SFX d4 eler ellerions/n'q'l't' [^p].eler SFX d4 eler ellerions/n'q'l't' épeler SFX d4 eter etteriez/n'q'l'm' jeter SFX d4 eter etteriez/n'q'l'm' [^j]eter SFX d4 eler elleriez/n'q'l'm' ppeler SFX d4 eler elleriez/n'q'l'm' [^p].eler SFX d4 eler elleriez/n'q'l'm' épeler SFX d4 eter etteraient/n'q'l'm't's' jeter SFX d4 eter etteraient/n'q'l'm't's' [^j]eter SFX d4 eler elleraient/n'q'l'm't's' ppeler SFX d4 eler elleraient/n'q'l'm't's' [^p].eler SFX d4 eler elleraient/n'q'l'm't's' épeler SFX d4 er asse/n'q'j'l'm't' er SFX d4 er asses/n'q'l'm't' er SFX d4 er ât/n'q'l'm't's' er SFX d4 er assions/n'q'l't' er SFX d4 er assiez/n'q'l'm' er SFX d4 er assent/n'q'l'm't's' er SFX d4 eter ette/n'l'm't' jeter SFX d4 eter ette/n'l'm't' [^j]eter SFX d4 eler elle/n'l'm't' ppeler SFX d4 eler elle/n'l'm't' [^p].eler SFX d4 eler elle/n'l'm't' épeler SFX d4 er ons/n'l' er SFX d4 er ez/n'l'm' er SFX d5 Y 83 SFX d5 er er/m'q'd'm't's' er SFX d5 er ant/m'q'd'm't's' er SFX d5 eter ette/n'q'j'm't's' jeter SFX d5 eter ette/n'q'j'm't's' [^j]eter SFX d5 eler elle/n'q'j'm't's' ppeler SFX d5 eler elle/n'q'j'm't's' [^p].eler SFX d5 eter ettes/n'm't' jeter SFX d5 eter ettes/n'm't' [^j]eter SFX d5 eler elles/n'm't' ppeler SFX d5 eler elles/n'm't' [^p].eler SFX d5 er ons/n't' er SFX d5 er ez/n'm' er SFX d5 eter ettent/n'q'm't's' jeter SFX d5 eter ettent/n'q'm't's' [^j]eter SFX d5 eler ellent/n'q'm't's' ppeler SFX d5 eler ellent/n'q'm't's' [^p].eler SFX d5 er ais/n'j'm't' er SFX d5 er ait/n'q'm't's' er SFX d5 er ions/n't' er SFX d5 er iez/n'm' er SFX d5 er aient/n'q'm't's' er SFX d5 er ai/n'j'm't' er SFX d5 er as/n'm't' er SFX d5 er a/n'q'm't's' er SFX d5 er âmes/n't' er SFX d5 er âtes/n'm' er SFX d5 er èrent/n'q'm't's' er SFX d5 eter etterai/n'j'm't' jeter SFX d5 eter etterai/n'j'm't' [^j]eter SFX d5 eler ellerai/n'j'm't' ppeler SFX d5 eler ellerai/n'j'm't' [^p].eler SFX d5 eter etteras/n'm't' jeter SFX d5 eter etteras/n'm't' [^j]eter SFX d5 eler elleras/n'm't' ppeler SFX d5 eler elleras/n'm't' [^p].eler SFX d5 eter ettera/n'q'm't's' jeter SFX d5 eter ettera/n'q'm't's' [^j]eter SFX d5 eler ellera/n'q'm't's' ppeler SFX d5 eler ellera/n'q'm't's' [^p].eler SFX d5 eter etterons/n't' jeter SFX d5 eter etterons/n't' [^j]eter SFX d5 eler ellerons/n't' ppeler SFX d5 eler ellerons/n't' [^p].eler SFX d5 eter etterez/n'm' jeter SFX d5 eter etterez/n'm' [^j]eter SFX d5 eler ellerez/n'm' ppeler SFX d5 eler ellerez/n'm' [^p].eler SFX d5 eter etteront/n'q'm't's' jeter SFX d5 eter etteront/n'q'm't's' [^j]eter SFX d5 eler elleront/n'q'm't's' ppeler SFX d5 eler elleront/n'q'm't's' [^p].eler SFX d5 eter etterais/n'j'm't' jeter SFX d5 eter etterais/n'j'm't' [^j]eter SFX d5 eler ellerais/n'j'm't' ppeler SFX d5 eler ellerais/n'j'm't' [^p].eler SFX d5 eter etterait/n'q'm't's' jeter SFX d5 eter etterait/n'q'm't's' [^j]eter SFX d5 eler ellerait/n'q'm't's' ppeler SFX d5 eler ellerait/n'q'm't's' [^p].eler SFX d5 eter etterions/n't' jeter SFX d5 eter etterions/n't' [^j]eter SFX d5 eler ellerions/n't' ppeler SFX d5 eler ellerions/n't' [^p].eler SFX d5 eter etteriez/n'm' jeter SFX d5 eter etteriez/n'm' [^j]eter SFX d5 eler elleriez/n'm' ppeler SFX d5 eler elleriez/n'm' [^p].eler SFX d5 eter etteraient/n'q'm't's' jeter SFX d5 eter etteraient/n'q'm't's' [^j]eter SFX d5 eler elleraient/n'q'm't's' ppeler SFX d5 eler elleraient/n'q'm't's' [^p].eler SFX d5 er asse/n'j'm't' er SFX d5 er asses/n'm't' er SFX d5 er ât/n'q'm't's' er SFX d5 er assions/n't' er SFX d5 er assiez/n'm' er SFX d5 er assent/n'q'm't's' er SFX d5 eter ette/m' jeter SFX d5 eter ette/m' [^j]eter SFX d5 eler elle/m' ppeler SFX d5 eler elle/m' [^p].eler SFX d5 er ons er SFX d5 er ez er SFX aA Y 54 SFX aA ller ller/n'q'd'm't' aller SFX aA ller llant/n'q'm't' aller SFX aA ller llé/q' aller SFX aA ller llés/q' aller SFX aA ller llée/q' aller SFX aA ller llées/q' aller SFX aA aller vais aller SFX aA aller vas aller SFX aA aller va aller SFX aA ller llons/n'q' aller SFX aA ller llez/n'q' aller SFX aA aller vont aller SFX aA ller llais/n'q'j' aller SFX aA ller llait/n'q'm't' aller SFX aA ller llions/n'q' aller SFX aA ller lliez/n'q' aller SFX aA ller llaient/n'q'm't' aller SFX aA ller llai/n'q'j' aller SFX aA ller llas/n'q' aller SFX aA ller lla/n'q'm't' aller SFX aA ller llâmes/n'q' aller SFX aA ller llâtes/n'q' aller SFX aA ller llèrent/n'q'm't' aller SFX aA aller irai/n'q'j' aller SFX aA aller iras/n'q' aller SFX aA aller ira/n'q'm't' aller SFX aA aller irons/n'q' aller SFX aA aller irez/n'q'm't' aller SFX aA aller iront/n'q' aller SFX aA aller irais/n'q'j' aller SFX aA aller irait/n'q'm't' aller SFX aA aller irions/n'q' aller SFX aA aller iriez/n'q' aller SFX aA aller iraient/n'q'm't' aller SFX aA ller ille/n'q'j'm't' aller SFX aA ller illes/n' aller SFX aA ller llions/n' aller SFX aA ller lliez/n' aller SFX aA ller illent/n'q'm't' aller SFX aA ller llasse/n'q'j' aller SFX aA ller llasses/n'q' aller SFX aA ller llât/n'q'm't' aller SFX aA ller llassions/n'q' aller SFX aA ller llassiez/n'q' aller SFX aA ller llassent/n'q'm't' aller SFX aA ller llons/n' aller SFX aA aller va aller SFX aA aller vas-y aller SFX aA aller va-t'en aller SFX aA ller llons-y aller SFX aA ller llons-nous-en aller SFX aA ller llez/n' aller SFX aA ller llez-y aller SFX aA ller llez-vous-en aller SFX aD Y 44 SFX aD voyer voyer/n'q'd'l'm't's' envoyer SFX aD voyer voyant/n'q'l'm't's' envoyer SFX aD voyer voyé/q' envoyer SFX aD voyer voyés/q' envoyer SFX aD voyer voyée/q' envoyer SFX aD voyer voyées/q' envoyer SFX aD voyer voie/n'q'j'l'm't's' envoyer SFX aD voyer voies/n'q'l'm't' envoyer SFX aD voyer voyons/n'q'l't' envoyer SFX aD voyer voyez/n'q'l'm' envoyer SFX aD voyer voient/n'q'l'm't's' envoyer SFX aD voyer voyais/n'q'j'l'm't' envoyer SFX aD voyer voyait/n'q'l'm't's' envoyer SFX aD voyer voyions/n'q'l't' envoyer SFX aD voyer voyiez/n'q'l'm' envoyer SFX aD voyer voyaient/n'q'l'm't's' envoyer SFX aD voyer voyai/n'q'j'l'm't' envoyer SFX aD voyer voyas/n'q'l'm't' envoyer SFX aD voyer voya/n'q'l'm't's' envoyer SFX aD voyer voyâmes/n'q'l't' envoyer SFX aD voyer voyâtes/n'q'l'm' envoyer SFX aD voyer voyèrent/n'q'l'm't's' envoyer SFX aD voyer verrai/n'q'j'l'm't' envoyer SFX aD voyer verras/n'q'l'm't' envoyer SFX aD voyer verra/n'q'l'm't's' envoyer SFX aD voyer verrons/n'q'l't' envoyer SFX aD voyer verrez/n'q'l'm' envoyer SFX aD voyer verront/n'q'l'm't's' envoyer SFX aD voyer verrais/n'q'j'l'm't' envoyer SFX aD voyer verrait/n'q'l'm't's' envoyer SFX aD voyer verrions/n'q'l't' envoyer SFX aD voyer verriez/n'q'l'm' envoyer SFX aD voyer verraient/n'q'l'm't's' envoyer SFX aD voyer voie/n'q'j'l'm't's' envoyer SFX aD voyer voies/n'l'm't' envoyer SFX aD voyer voyasse/n'q'j'l'm't' envoyer SFX aD voyer voyasses/n'q'l'm't' envoyer SFX aD voyer voyât/n'q'l'm't's' envoyer SFX aD voyer voyassions/n'q'l't' envoyer SFX aD voyer voyassiez/n'q'l'm' envoyer SFX aD voyer voyassent/n'q'l'm't's' envoyer SFX aD voyer voie/n'l'm't' envoyer SFX aD voyer voyons/n'l' envoyer SFX aD voyer voyez/n'l'm' envoyer SFX aE Y 6 SFX aE direr direr/n'q'd'l'm't's' direr SFX aE direr dirant/n'q'l'm't's' direr SFX aE direr diré/q' direr SFX aE direr dirés/q' direr SFX aE direr dirée/q' direr SFX aE direr dirées/q' direr SFX aF N 17 SFX aF cerner cernant er SFX aF cerner cerné er SFX aF cerner cernés er SFX aF cerner cernée er SFX aF cerner cernées er SFX aF cerner cerne er SFX aF cerner cernent er SFX aF cerner cernait er SFX aF cerner cernaient er SFX aF cerner cerna er SFX aF cerner cernèrent er SFX aF cerner cernera er SFX aF cerner cerneront er SFX aF cerner cernerait er SFX aF cerner cerneraient er SFX aF cerner cernât er SFX aF cerner cernassent er SFX aG Y 19 SFX aG er er/n'q'd'm't' er SFX aG er ant/n'q'm't' er SFX aG mber mbé mber SFX aG lter lté lter SFX aG lter ltés lter SFX aG lter ltée lter SFX aG lter ltées lter SFX aG er e/n'q'm't' er SFX aG er ent/n'q'm't' er SFX aG er ait/n'q'm't' er SFX aG er aient/n'q'm't' er SFX aG er a/n'q'm't' er SFX aG er èrent/n'q'm't' er SFX aG er era/n'q'm't' er SFX aG er eront/n'q'm't' er SFX aG er erait/n'q'm't' er SFX aG er eraient/n'q'm't' er SFX aG er ât/n'q'm't' er SFX aG er assent/n'q'm't' er SFX aH N 38 SFX aH er ant gger SFX aH er é gger SFX aH er e gger SFX aH er es gger SFX aH er ons gger SFX aH er ez gger SFX aH er ent gger SFX aH er ais gger SFX aH er ait gger SFX aH er ions gger SFX aH er iez gger SFX aH er aient gger SFX aH er ai gger SFX aH er as gger SFX aH er a gger SFX aH er âmes gger SFX aH er âtes gger SFX aH er èrent gger SFX aH er erai gger SFX aH er eras gger SFX aH er era gger SFX aH er erons gger SFX aH er erez gger SFX aH er eront gger SFX aH er erais gger SFX aH er erait gger SFX aH er erions gger SFX aH er eriez gger SFX aH er eraient gger SFX aH er asse gger SFX aH er asses gger SFX aH er ât gger SFX aH er assions gger SFX aH er assiez gger SFX aH er assent gger SFX aH er e gger SFX aH er ons gger SFX aH er ez gger SFX aY N 41 SFX aY neler nelant neler SFX aY neler nelé neler SFX aY neler nelés neler SFX aY neler nelée neler SFX aY neler nelées neler SFX aY éneler énelle éneler SFX aY éneler énelles éneler SFX aY neler nelons neler SFX aY neler nelez neler SFX aY éneler énellent éneler SFX aY neler nelais neler SFX aY neler nelait neler SFX aY neler nelions neler SFX aY neler neliez neler SFX aY neler nelaient neler SFX aY neler nelai neler SFX aY neler nelas neler SFX aY neler nela neler SFX aY neler nelâmes neler SFX aY neler nelâtes neler SFX aY neler nelèrent neler SFX aY éneler énellerai éneler SFX aY éneler énelleras éneler SFX aY éneler énellera éneler SFX aY éneler énellerons éneler SFX aY éneler énellerez éneler SFX aY éneler énelleront éneler SFX aY éneler énellerais éneler SFX aY éneler énellerait éneler SFX aY éneler énellerions éneler SFX aY éneler énelleriez éneler SFX aY éneler énelleraient éneler SFX aY neler nelasse neler SFX aY neler nelasses neler SFX aY neler nelât neler SFX aY neler nelassions neler SFX aY neler nelassiez neler SFX aY neler nelassent neler SFX aY éneler énelle éneler SFX aY neler nelons neler SFX aY neler nelez neler SFX aZ N 41 SFX aZ teler telant teler SFX aZ teler telé teler SFX aZ teler telés teler SFX aZ teler telée teler SFX aZ teler telées teler SFX aZ ételer ételle ételer SFX aZ ételer ételles ételer SFX aZ teler telons teler SFX aZ teler telez teler SFX aZ ételer étellent ételer SFX aZ teler telais teler SFX aZ teler telait teler SFX aZ teler telions teler SFX aZ teler teliez teler SFX aZ teler telaient teler SFX aZ teler telai teler SFX aZ teler telas teler SFX aZ teler tela teler SFX aZ teler telâmes teler SFX aZ teler telâtes teler SFX aZ teler telèrent teler SFX aZ ételer étellerai ételer SFX aZ ételer ételleras ételer SFX aZ ételer étellera ételer SFX aZ ételer étellerons ételer SFX aZ ételer étellerez ételer SFX aZ ételer ételleront ételer SFX aZ ételer étellerais ételer SFX aZ ételer étellerait ételer SFX aZ ételer étellerions ételer SFX aZ ételer ételleriez ételer SFX aZ ételer ételleraient ételer SFX aZ teler telasse teler SFX aZ teler telasses teler SFX aZ teler telât teler SFX aZ teler telassions teler SFX aZ teler telassiez teler SFX aZ teler telassent teler SFX aZ ételer ételle ételer SFX aZ teler telons teler SFX aZ teler telez teler SFX dA Y 42 SFX dA peler peler/n'q'd'l'm't's' peler SFX dA peler pelant/n'q'l'm't's' peler SFX dA peler pelé/q' peler SFX dA peler pelés/q' peler SFX dA peler pelée/q' peler SFX dA peler pelées/q' peler SFX dA peler pelle/n'q'j'l'm't's' peler SFX dA peler pelles/n'q'l'm' peler SFX dA peler pelons/n'q'l't' peler SFX dA peler pelez/n'q'l'm' peler SFX dA peler pellent/n'q'l'm't's' peler SFX dA peler pelais/n'q'j'l't' peler SFX dA peler pelait/n'q'l'm't's' peler SFX dA peler pelions/n'q'l't' peler SFX dA peler peliez/n'q'l'm' peler SFX dA peler pelaient/n'q'l'm't's' peler SFX dA peler pelai/n'q'j'l't' peler SFX dA peler pelas/n'q'l'm' peler SFX dA peler pela/n'q'l'm't's' peler SFX dA peler pelâmes/n'q'l't' peler SFX dA peler pelâtes/n'q'l'm' peler SFX dA peler pelèrent/n'q'l'm't's' peler SFX dA peler pellerai/n'q'j'l't' peler SFX dA peler pelleras/n'q'l'm' peler SFX dA peler pellera/n'q'l'm't's' peler SFX dA peler pellerons/n'q'l't' peler SFX dA peler pellerez/n'q'l'm' peler SFX dA peler pelleront/n'q'l'm't's' peler SFX dA peler pellerais/n'q'j'l't' peler SFX dA peler pellerait/n'q'l'm't's' peler SFX dA peler pellerions/n'q'l't' peler SFX dA peler pelleriez/n'q'l'm' peler SFX dA peler pelleraient/n'q'l'm't's' peler SFX dA peler pelasse/n'q'j'l't' peler SFX dA peler pelasses/n'q'l'm' peler SFX dA peler pelât/n'q'l'm't's' peler SFX dA peler pelassions/n'q'l't' peler SFX dA peler pelassiez/n'q'l'm' peler SFX dA peler pelassent/n'q'l'm't's' peler SFX dA peler pelle/n'l'm' peler SFX dA peler pelons/n'l' peler SFX dA peler pelez/n'l'm' peler SFX f0 Y 32 SFX f0 ir issant ir SFX f0 ir is ir SFX f0 ir it ir SFX f0 ir issons ir SFX f0 ir issez ir SFX f0 ir issent ir SFX f0 ir issais ir SFX f0 ir issait ir SFX f0 ir issions ir SFX f0 ir issiez ir SFX f0 ir issaient ir SFX f0 ir îmes ir SFX f0 ir îtes ir SFX f0 ir irent ir SFX f0 ir irai ir SFX f0 ir iras ir SFX f0 ir ira ir SFX f0 ir irons ir SFX f0 ir irez ir SFX f0 ir iront ir SFX f0 ir irais ir SFX f0 ir irait ir SFX f0 ir irions ir SFX f0 ir iriez ir SFX f0 ir iraient ir SFX f0 ir isse ir SFX f0 ir isses ir SFX f0 ir isse ir SFX f0 ir ît ir SFX f0 ir is ir SFX f0 ir issons ir SFX f0 ir issez ir SFX f1 Y 33 SFX f1 ir ir/n'q'd' ir SFX f1 ir issant/n'q' ir SFX f1 ir is/n'j' ir SFX f1 ir it/n'q' ir SFX f1 ir issons/n' ir SFX f1 ir issez/n' ir SFX f1 ir issent/n'q' ir SFX f1 ir issais/n'j' ir SFX f1 ir issait/n'q' ir SFX f1 ir issions/n' ir SFX f1 ir issiez/n' ir SFX f1 ir issaient/n'q' ir SFX f1 ir îmes/n' ir SFX f1 ir îtes/n' ir SFX f1 ir irent/n'q' ir SFX f1 ir irai/n'j' ir SFX f1 ir iras/n' ir SFX f1 ir ira/n'q' ir SFX f1 ir irons/n' ir SFX f1 ir irez/n' ir SFX f1 ir iront/n'q' ir SFX f1 ir irais/n'j' ir SFX f1 ir irait/n'q' ir SFX f1 ir irions/n' ir SFX f1 ir iriez/n' ir SFX f1 ir iraient/n'q' ir SFX f1 ir isse/n'j' ir SFX f1 ir isses/n' ir SFX f1 ir isse/n'q' ir SFX f1 ir ît/n'q' ir SFX f1 ir is/n' ir SFX f1 ir issons/n' ir SFX f1 ir issez/n' ir SFX f2 Y 33 SFX f2 ir ir/n'q'd'l'm't's' ir SFX f2 ir issant/n'q'l'm't's' ir SFX f2 ir is/n'q'j'l't' ir SFX f2 ir it/n'q'l'm't's' ir SFX f2 ir issons/n'q'l't' ir SFX f2 ir issez/n'q'l'm' ir SFX f2 ir issent/n'q'l'm't's' ir SFX f2 ir issais/n'q'j'l't' ir SFX f2 ir issait/n'q'l'm't's' ir SFX f2 ir issions/n'q'l't' ir SFX f2 ir issiez/n'q'l'm' ir SFX f2 ir issaient/n'q'l'm't's' ir SFX f2 ir îmes/n'q'l't' ir SFX f2 ir îtes/n'q'l'm' ir SFX f2 ir irent/n'q'l'm't's' ir SFX f2 ir irai/n'q'j'l't' ir SFX f2 ir iras/n'q'l'm't' ir SFX f2 ir ira/n'q'l'm't's' ir SFX f2 ir irons/n'q'l't' ir SFX f2 ir irez/n'q'l'm' ir SFX f2 ir iront/n'q'l'm't's' ir SFX f2 ir irais/n'q'j'l'm't' ir SFX f2 ir irait/n'q'l'm't's' ir SFX f2 ir irions/n'q'l't' ir SFX f2 ir iriez/n'q'l'm' ir SFX f2 ir iraient/n'q'l'm't's' ir SFX f2 ir isse/n'q'j'l't' ir SFX f2 ir isses/n'q'l'm' ir SFX f2 ir isse/n'q'l'm't's' ir SFX f2 ir ît/n'q'l'm't's' ir SFX f2 ir is/n'l'm' ir SFX f2 ir issons/n'l' ir SFX f2 ir issez/n'l'm' ir SFX f3 Y 33 SFX f3 ir ir/m't's' ir SFX f3 ir issant/m't's' ir SFX f3 ir is/m't' ir SFX f3 ir it/s' ir SFX f3 ir issons ir SFX f3 ir issez ir SFX f3 ir issent/s' ir SFX f3 ir issais/m't' ir SFX f3 ir issait/s' ir SFX f3 ir issions ir SFX f3 ir issiez ir SFX f3 ir issaient/s' ir SFX f3 ir îmes ir SFX f3 ir îtes ir SFX f3 ir irent/s' ir SFX f3 ir irai/m' ir SFX f3 ir iras/t' ir SFX f3 ir ira/s' ir SFX f3 ir irons ir SFX f3 ir irez ir SFX f3 ir iront/s' ir SFX f3 ir irais/m't' ir SFX f3 ir irait/s' ir SFX f3 ir irions ir SFX f3 ir iriez ir SFX f3 ir iraient/s' ir SFX f3 ir isse/m' ir SFX f3 ir isses/t' ir SFX f3 ir isse/s' ir SFX f3 ir ît/s' ir SFX f3 ir is/t' ir SFX f3 ir issons ir SFX f3 ir issez ir SFX f4 Y 33 SFX f4 ir ir/n'q'd'l'm't's' ir SFX f4 ir issant/n'q'l'm't's' ir SFX f4 ir is/n'q'j'l'm't' ir SFX f4 ir it/n'q'l'm't's' ir SFX f4 ir issons/n'q'l't' ir SFX f4 ir issez/n'q'l'm' ir SFX f4 ir issent/n'q'l'm't's' ir SFX f4 ir issais/n'q'j'l'm't' ir SFX f4 ir issait/n'q'l'm't's' ir SFX f4 ir issions/n'q'l't' ir SFX f4 ir issiez/n'q'l'm' ir SFX f4 ir issaient/n'q'l'm't's' ir SFX f4 ir îmes/n'q'l't' ir SFX f4 ir îtes/n'q'l'm' ir SFX f4 ir irent/n'q'l'm't's' ir SFX f4 ir irai/n'q'j'l'm't' ir SFX f4 ir iras/n'q'l'm't' ir SFX f4 ir ira/n'q'l'm't's' ir SFX f4 ir irons/n'q'l't' ir SFX f4 ir irez/n'q'l'm' ir SFX f4 ir iront/n'q'l'm't's' ir SFX f4 ir irais/n'q'j'l'm't' ir SFX f4 ir irait/n'q'l'm't's' ir SFX f4 ir irions/n'q'l't' ir SFX f4 ir iriez/n'q'l'm' ir SFX f4 ir iraient/n'q'l'm't's' ir SFX f4 ir isse/n'q'j'l'm't' ir SFX f4 ir isses/n'q'l'm't' ir SFX f4 ir isse/n'q'l'm't's' ir SFX f4 ir ît/n'q'l'm't's' ir SFX f4 ir is/n'l'm't' ir SFX f4 ir issons/n'l' ir SFX f4 ir issez/n'l'm' ir SFX f5 Y 33 SFX f5 ir ir/n'q'd'm't's' ir SFX f5 ir issant/n'q'm't's' ir SFX f5 ir is/n'j'm't' ir SFX f5 ir it/n'q'm't's' ir SFX f5 ir issons/n't' ir SFX f5 ir issez/n'm' ir SFX f5 ir issent/n'q'm't's' ir SFX f5 ir issais/n'j'm't' ir SFX f5 ir issait/n'q'm't's' ir SFX f5 ir issions/n't' ir SFX f5 ir issiez/n'm' ir SFX f5 ir issaient/n'q'm't's' ir SFX f5 ir îmes/n't' ir SFX f5 ir îtes/n'm' ir SFX f5 ir irent/n'q'm't's' ir SFX f5 ir irai/n'j'm't' ir SFX f5 ir iras/n'm't' ir SFX f5 ir ira/n'q'm't's' ir SFX f5 ir irons/n't' ir SFX f5 ir irez/n'm' ir SFX f5 ir iront/n'q'm't's' ir SFX f5 ir irais/n'j'm't' ir SFX f5 ir irait/n'q'm't's' ir SFX f5 ir irions/n't' ir SFX f5 ir iriez/n'm' ir SFX f5 ir iraient/n'q'm't's' ir SFX f5 ir isse/n'j'm't' ir SFX f5 ir isses/n'm't' ir SFX f5 ir isse/n'q'm't's' ir SFX f5 ir ît/n'q'm't's' ir SFX f5 ir is/n'm' ir SFX f5 ir issons/n' ir SFX f5 ir issez/n'm' ir SFX fA N 37 SFX fA aïr aïssant aïr SFX fA aïr aï aïr SFX fA aïr aïs aïr SFX fA aïr aïe aïr SFX fA aïr aïes aïr SFX fA aïr ais aïr SFX fA aïr ait aïr SFX fA aïr aïssons aïr SFX fA aïr aïssez aïr SFX fA aïr aïssent aïr SFX fA aïr aïssais aïr SFX fA aïr aïssait aïr SFX fA aïr aïssions aïr SFX fA aïr aïssiez aïr SFX fA aïr aïssaient aïr SFX fA aïr aïs aïr SFX fA aïr aït aïr SFX fA aïr aïmes aïr SFX fA aïr aïtes aïr SFX fA aïr aïrent aïr SFX fA aïr aïrai aïr SFX fA aïr aïras aïr SFX fA aïr aïra aïr SFX fA aïr aïrons aïr SFX fA aïr aïrez aïr SFX fA aïr aïront aïr SFX fA aïr aïrais aïr SFX fA aïr aïrait aïr SFX fA aïr aïrions aïr SFX fA aïr aïriez aïr SFX fA aïr aïraient aïr SFX fA aïr aïsse aïr SFX fA aïr aïsses aïr SFX fA aïr aïsse aïr SFX fA aïr ais aïr SFX fA aïr aïssons aïr SFX fA aïr aïssez aïr SFX fB Y 29 SFX fB haïr haïr/s' aïr SFX fB haïr haïssant/s' aïr SFX fB haïr haï aïr SFX fB haïr haïs aïr SFX fB haïr haïe aïr SFX fB haïr haïes aïr SFX fB haïr hait/s' aïr SFX fB haïr haïssons aïr SFX fB haïr haïssez aïr SFX fB haïr haïssent/s' aïr SFX fB haïr haïssait/s' aïr SFX fB haïr haïssions aïr SFX fB haïr haïssiez aïr SFX fB haïr haïssaient/s' aïr SFX fB haïr haït/s' aïr SFX fB haïr haïmes aïr SFX fB haïr haïtes aïr SFX fB haïr haïrent/s' aïr SFX fB haïr haïra/s' aïr SFX fB haïr haïrons aïr SFX fB haïr haïrez aïr SFX fB haïr haïront/s' aïr SFX fB haïr haïrait/s' aïr SFX fB haïr haïrions aïr SFX fB haïr haïriez aïr SFX fB haïr haïraient/s' aïr SFX fB haïr haïsse/s' aïr SFX fB haïr haïssons-nous aïr SFX fB haïr haïssez-vous aïr SFX fC Y 11 SFX fC partir partir/n'q'd'l'm't's' impartir SFX fC partir partissant/n'q'l'm't's' impartir SFX fC partir parti/q' impartir SFX fC partir partis/q' impartir SFX fC partir partie/q' impartir SFX fC partir parties/q' impartir SFX fC partir partis/n'q'j'l'm't' impartir SFX fC partir partit/n'q'l'm't's' impartir SFX fC partir partissons/n'q'l't' impartir SFX fC partir partissez/n'q'l'm' impartir SFX fC partir partissent/n'q'l'm't's' impartir SFX fD N 11 SFX fD ortir ortissant sortir SFX fD ortir ortit sortir SFX fD ortir ortissent sortir SFX fD ortir ortissait sortir SFX fD ortir ortissaient sortir SFX fD ortir ortira sortir SFX fD ortir ortiront sortir SFX fD ortir ortirait sortir SFX fD ortir ortiraient sortir SFX fD ortir ortisse sortir SFX fD ortir ortît sortir SFX fY N 37 SFX fY uïr uïr/s' uïr SFX fY uïr uïssant/m't's' uïr SFX fY uïr uï uïr SFX fY uïr uïs uïr SFX fY uïr uïe uïr SFX fY uïr uïes uïr SFX fY uïr uïs/m't' uïr SFX fY uïr uït/s' uïr SFX fY uïr uïssons uïr SFX fY uïr uïssez uïr SFX fY uïr uïssent/s' uïr SFX fY uïr uïssais/m't' uïr SFX fY uïr uïssait/s' uïr SFX fY uïr uïssions uïr SFX fY uïr uïssiez uïr SFX fY uïr uïssaient/s' uïr SFX fY uïr uîmes uïr SFX fY uïr uîtes uïr SFX fY uïr uïrent/s' uïr SFX fY uïr uïrai/m' uïr SFX fY uïr uïras/t' uïr SFX fY uïr uïra/s' uïr SFX fY uïr uïrons uïr SFX fY uïr uïrez uïr SFX fY uïr uïront/s' uïr SFX fY uïr uïrais/m't' uïr SFX fY uïr uïrait/s' uïr SFX fY uïr uïrions uïr SFX fY uïr uïriez uïr SFX fY uïr uïraient/s' uïr SFX fY uïr uïsse/m' uïr SFX fY uïr uïsses/t' uïr SFX fY uïr uïsse/s' uïr SFX fY uïr uît/s' uïr SFX fY uïr uïs/t' uïr SFX fY uïr uïssons uïr SFX fY uïr uïssez uïr SFX fZ N 7 SFX fZ gir gissant agir SFX fZ gir git agir SFX fZ gir gissait agir SFX fZ gir gira agir SFX fZ gir girait agir SFX fZ gir gisse agir SFX fZ gir gît agir SFX p+ Y 8 SFX p+ er é/L'D'Q' er SFX p+ er és/D'Q' er SFX p+ er ée/L'D'Q' er SFX p+ er ées/D'Q' er SFX p+ ir i/L'D'Q' ir SFX p+ ir is/D'Q' ir SFX p+ ir ie/L'D'Q' ir SFX p+ ir ies/D'Q' ir SFX p. Y 2 SFX p. er é/q' er SFX p. ir i/q' ir SFX i0 Y 39 SFX i0 enir enir/n'q'd' enir SFX i0 enir enant/n'q' enir SFX i0 enir iens/n'j' enir SFX i0 enir ient/n'q' enir SFX i0 enir enons/n' enir SFX i0 enir enez/n' enir SFX i0 enir iennent/n'q' enir SFX i0 enir enais/n'j' enir SFX i0 enir enait/n'q' enir SFX i0 enir enions/n' enir SFX i0 enir eniez/n' enir SFX i0 enir enaient/n'q' enir SFX i0 enir ins/n'j' enir SFX i0 enir int/n'q' enir SFX i0 enir înmes/n' enir SFX i0 enir întes/n' enir SFX i0 enir inrent/n'q' enir SFX i0 enir iendrai/n'j' enir SFX i0 enir iendras/n' enir SFX i0 enir iendra/n'q' enir SFX i0 enir iendrons/n' enir SFX i0 enir iendrez/n' enir SFX i0 enir iendront/n'q' enir SFX i0 enir iendrais/n'j' enir SFX i0 enir iendrait/n'q' enir SFX i0 enir iendrions/n' enir SFX i0 enir iendriez/n' enir SFX i0 enir iendraient/n'q' enir SFX i0 enir ienne/n'q'j' enir SFX i0 enir iennes/n' enir SFX i0 enir insse/n'j' enir SFX i0 enir insses/n' enir SFX i0 enir înt/n'q' enir SFX i0 enir inssions/n' enir SFX i0 enir inssiez/n' enir SFX i0 enir inssent/n'q' enir SFX i0 enir iens/n' enir SFX i0 enir enons/n' enir SFX i0 enir enez/n' enir SFX i1 Y 39 SFX i1 enir enir/n'q'd'l'm't's' enir SFX i1 enir enant/n'q'l'm't's' enir SFX i1 enir iens/n'q'j'l'm't' enir SFX i1 enir ient/n'q'l'm't's' enir SFX i1 enir enons/n'q'l't' enir SFX i1 enir enez/n'q'l'm' enir SFX i1 enir iennent/n'q'l'm't's' enir SFX i1 enir enais/n'q'j'l'm't' enir SFX i1 enir enait/n'q'l'm't's' enir SFX i1 enir enions/n'q'l't' enir SFX i1 enir eniez/n'q'l'm' enir SFX i1 enir enaient/n'q'l'm't's' enir SFX i1 enir ins/n'q'j'l'm't' enir SFX i1 enir int/n'q'l'm't's' enir SFX i1 enir înmes/n'q'l't' enir SFX i1 enir întes/n'q'l'm' enir SFX i1 enir inrent/n'q'l'm't's' enir SFX i1 enir iendrai/n'q'j'l'm't' enir SFX i1 enir iendras/n'q'l'm't' enir SFX i1 enir iendra/n'q'l'm't's' enir SFX i1 enir iendrons/n'q'l't' enir SFX i1 enir iendrez/n'q'l'm' enir SFX i1 enir iendront/n'q'l'm't's' enir SFX i1 enir iendrais/n'q'j'l'm't' enir SFX i1 enir iendrait/n'q'l'm't's' enir SFX i1 enir iendrions/n'q'l't' enir SFX i1 enir iendriez/n'q'l'm' enir SFX i1 enir iendraient/n'q'l'm't's' enir SFX i1 enir ienne/n'q'j'l'm't's' enir SFX i1 enir iennes/n'l'm't' enir SFX i1 enir insse/n'q'j'l'm't' enir SFX i1 enir insses/n'q'l'm't' enir SFX i1 enir înt/n'q'l'm't's' enir SFX i1 enir inssions/n'q'l't' enir SFX i1 enir inssiez/n'q'l'm' enir SFX i1 enir inssent/n'q'l'm't's' enir SFX i1 enir iens/n'l'm't' enir SFX i1 enir enons/n'l' enir SFX i1 enir enez/n'l'm' enir SFX i2 Y 39 SFX i2 enir enir/m't's' enir SFX i2 enir enant/m't's' enir SFX i2 enir iens/m't' enir SFX i2 enir ient/s' enir SFX i2 enir enons enir SFX i2 enir enez enir SFX i2 enir iennent/s' enir SFX i2 enir enais/m't' enir SFX i2 enir enait/s' enir SFX i2 enir enions enir SFX i2 enir eniez enir SFX i2 enir enaient/s' enir SFX i2 enir ins/m't' enir SFX i2 enir int/s' enir SFX i2 enir înmes enir SFX i2 enir întes enir SFX i2 enir inrent/s' enir SFX i2 enir iendrai/m' enir SFX i2 enir iendras/t' enir SFX i2 enir iendra/s' enir SFX i2 enir iendrons enir SFX i2 enir iendrez enir SFX i2 enir iendront/s' enir SFX i2 enir iendrais/m't' enir SFX i2 enir iendrait/s' enir SFX i2 enir iendrions enir SFX i2 enir iendriez enir SFX i2 enir iendraient/s' enir SFX i2 enir ienne/m's' enir SFX i2 enir iennes/t' enir SFX i2 enir insse/m' enir SFX i2 enir insses/t' enir SFX i2 enir înt/s' enir SFX i2 enir inssions enir SFX i2 enir inssiez enir SFX i2 enir inssent/s' enir SFX i2 enir iens/t' enir SFX i2 enir enons enir SFX i2 enir enez enir SFX i5 N 38 SFX i5 tir tant tir SFX i5 tir s tir SFX i5 tir t tir SFX i5 tir tons tir SFX i5 tir tez tir SFX i5 tir tent tir SFX i5 tir tais tir SFX i5 tir tait tir SFX i5 tir tions tir SFX i5 tir tiez tir SFX i5 tir taient tir SFX i5 tir tis tir SFX i5 tir tit tir SFX i5 tir tîmes tir SFX i5 tir tîtes tir SFX i5 tir tirent tir SFX i5 tir tirai tir SFX i5 tir tiras tir SFX i5 tir tira tir SFX i5 tir tirons tir SFX i5 tir tirez tir SFX i5 tir tiront tir SFX i5 tir tirais tir SFX i5 tir tirait tir SFX i5 tir tirions tir SFX i5 tir tiriez tir SFX i5 tir tiraient tir SFX i5 tir te tir SFX i5 tir tes tir SFX i5 tir tisse tir SFX i5 tir tisses tir SFX i5 tir tît tir SFX i5 tir tissions tir SFX i5 tir tissiez tir SFX i5 tir tissent tir SFX i5 tir s tir SFX i5 tir tons tir SFX i5 tir tez tir SFX iA Y 19 SFX iA dvenir dvenir/n'q'd'm't' venir SFX iA dvenir dvenant/n'q'm't' venir SFX iA dvenir dvenu/Q' venir SFX iA dvenir dvenus/Q' venir SFX iA dvenir dvenue/Q' venir SFX iA dvenir dvenues/Q' venir SFX iA dvenir dvient/n'q'm't' venir SFX iA dvenir dviennent/n'q' venir SFX iA dvenir dvenait/n'q'm't' venir SFX iA dvenir dvenaient/n'q' venir SFX iA dvenir dvint/n'q'm't' venir SFX iA dvenir dvinrent/n'q' venir SFX iA dvenir dviendra/n'q'm't' venir SFX iA dvenir dviendront/n'q' venir SFX iA dvenir dviendrait/n'q'm't' venir SFX iA dvenir dviendraient/n'q' venir SFX iA dvenir dvienne/n'q'm't' venir SFX iA dvenir dvînt/n'q'm't' venir SFX iA dvenir dvinssent/n'q' venir SFX iB Y 40 SFX iB partenir partenir/n'q'd'm't's' tenir SFX iB partenir partenant/n'q'm't's' tenir SFX iB partenir partenu/q' tenir SFX iB partenir partiens/n'j'm't' tenir SFX iB partenir partient/n'q'm't's' tenir SFX iB partenir partenons/n't' tenir SFX iB partenir partenez/n'm' tenir SFX iB partenir partiennent/n'q'm't's' tenir SFX iB partenir partenais/n'j'm't' tenir SFX iB partenir partenait/n'q'm't's' tenir SFX iB partenir partenions/n't' tenir SFX iB partenir parteniez/n'm' tenir SFX iB partenir partenaient/n'q'm't's' tenir SFX iB partenir partins/n'j'm't' tenir SFX iB partenir partint/n'q'm't's' tenir SFX iB partenir partînmes/n't' tenir SFX iB partenir partîntes/n'm' tenir SFX iB partenir partinrent/n'q'm't's' tenir SFX iB partenir partiendrai/n'j'm't' tenir SFX iB partenir partiendras/n'm't' tenir SFX iB partenir partiendra/n'q'm't's' tenir SFX iB partenir partiendrons/n't' tenir SFX iB partenir partiendrez/n'm' tenir SFX iB partenir partiendront/n'q'm't's' tenir SFX iB partenir partiendrais/n'j'm't' tenir SFX iB partenir partiendrait/n'q'm't's' tenir SFX iB partenir partiendrions/n't' tenir SFX iB partenir partiendriez/n'm' tenir SFX iB partenir partiendraient/n'q'm't's' tenir SFX iB partenir partienne/n'q'j'm't's' tenir SFX iB partenir partiennes/n'm't' tenir SFX iB partenir partinsse/n'j'm't' tenir SFX iB partenir partinsses/n'm't' tenir SFX iB partenir partînt/n'q'm't's' tenir SFX iB partenir partinssions/n't' tenir SFX iB partenir partinssiez/n'm' tenir SFX iB partenir partinssent/n'q'm't's' tenir SFX iB partenir partiens/n'm't' tenir SFX iB partenir partenons/n' tenir SFX iB partenir partenez/n'm' tenir SFX iC Y 41 SFX iC rir rir/n'q'd'l'm't's' [vf]rir SFX iC rir rant/n'q'l'm't's' [vf]rir SFX iC rir ert/L'D'Q' [vf]rir SFX iC rir erts/D'Q' [vf]rir SFX iC rir erte/L'D'Q' [vf]rir SFX iC rir ertes/D'Q' [vf]rir SFX iC rir re/n'q'j'l'm't's' [vf]rir SFX iC rir res/n'q'l'm't' [vf]rir SFX iC rir rons/n'q'l't' [vf]rir SFX iC rir rez/n'q'l'm' [vf]rir SFX iC rir rent/n'q'l'm't's' [vf]rir SFX iC rir rais/n'q'j'l'm't' [vf]rir SFX iC rir rait/n'q'l'm't's' [vf]rir SFX iC rir rions/n'q'l't' [vf]rir SFX iC rir riez/n'q'l'm' [vf]rir SFX iC rir raient/n'q'l'm't's' [vf]rir SFX iC rir ris/n'q'j'l'm't' [vf]rir SFX iC rir rit/n'q'l'm't's' [vf]rir SFX iC rir rîmes/n'q'l't' [vf]rir SFX iC rir rîtes/n'q'l'm' [vf]rir SFX iC rir rirent/n'q'l'm't's' [vf]rir SFX iC rir rirai/n'q'j'l'm't' [vf]rir SFX iC rir riras/n'q'l'm't' [vf]rir SFX iC rir rira/n'q'l'm't's' [vf]rir SFX iC rir rirons/n'q'l't' [vf]rir SFX iC rir rirez/n'q'l'm' [vf]rir SFX iC rir riront/n'q'l'm't's' [vf]rir SFX iC rir rirais/n'q'j'l'm't' [vf]rir SFX iC rir rirait/n'q'l'm't's' [vf]rir SFX iC rir ririons/n'q'l't' [vf]rir SFX iC rir ririez/n'q'l'm' [vf]rir SFX iC rir riraient/n'q'l'm't's' [vf]rir SFX iC rir risse/n'q'j'l'm't' [vf]rir SFX iC rir risses/n'q'l'm't' [vf]rir SFX iC rir rît/n'q'l'm't's' [vf]rir SFX iC rir rissions/n'q'l't' [vf]rir SFX iC rir rissiez/n'q'l'm' [vf]rir SFX iC rir rissent/n'q'l'm't's' [vf]rir SFX iC rir re/n'l'm't' [vf]rir SFX iC rir rons/n'l' [vf]rir SFX iC rir rez/n'l'm' [vf]rir SFX iD Y 43 SFX iD courir courir/n'q'd' courir SFX iD courir courant/n'q' courir SFX iD courir couru courir SFX iD courir courus courir SFX iD courir courue courir SFX iD courir courues courir SFX iD courir cours/n'j' courir SFX iD courir court/n' courir SFX iD courir courons/n' courir SFX iD courir courez/n' courir SFX iD courir courent/n' courir SFX iD courir courais/n'j' courir SFX iD courir courait/n' courir SFX iD courir courions/n' courir SFX iD courir couriez/n' courir SFX iD courir couraient/n' courir SFX iD courir courus/n'j' courir SFX iD courir courut/n' courir SFX iD courir courûmes/n' courir SFX iD courir courûtes/n' courir SFX iD courir coururent/n' courir SFX iD courir courrai/n'j' courir SFX iD courir courras/n' courir SFX iD courir courra/n' courir SFX iD courir courrons/n' courir SFX iD courir courrez/n' courir SFX iD courir courront/n' courir SFX iD courir courrais/n'j' courir SFX iD courir courrait/n' courir SFX iD courir courrions/n' courir SFX iD courir courriez/n' courir SFX iD courir courraient/n' courir SFX iD courir coure/n'j' courir SFX iD courir coures/n' courir SFX iD courir courusse/n'j' courir SFX iD courir courusses/n' courir SFX iD courir courût/n' courir SFX iD courir courussions/n' courir SFX iD courir courussiez/n' courir SFX iD courir courussent/n' courir SFX iD courir cours/n' courir SFX iD courir courons/n' courir SFX iD courir courez/n' courir SFX iE Y 43 SFX iE ourir ourir/n'q'd'l'm't's' courir SFX iE ourir ourant/n'q'm't's' courir SFX iE ourir ouru/L'D'Q' courir SFX iE ourir ourus/D'Q' courir SFX iE ourir ourue/L'D'Q' courir SFX iE ourir ourues/D'Q' courir SFX iE ourir ours/n'q'j'l'm't' courir SFX iE ourir ourt/n'q'l's' courir SFX iE ourir ourons/n'q'l' courir SFX iE ourir ourez/n'q'l' courir SFX iE ourir ourent/n'q'l's' courir SFX iE ourir ourais/n'q'j'l'm't' courir SFX iE ourir ourait/n'q'l's' courir SFX iE ourir ourions/n'q'l' courir SFX iE ourir ouriez/n'q'l' courir SFX iE ourir ouraient/n'q'l's' courir SFX iE ourir ourus/n'q'j'l'm't' courir SFX iE ourir ourut/n'q'l's' courir SFX iE ourir ourûmes/n'q'l' courir SFX iE ourir ourûtes/n'q'l' courir SFX iE ourir oururent/n'q'l's' courir SFX iE ourir ourrai/n'q'j'l'm' courir SFX iE ourir ourras/n'q'l't' courir SFX iE ourir ourra/n'q'l's' courir SFX iE ourir ourrons/n'q'l' courir SFX iE ourir ourrez/n'q'l' courir SFX iE ourir ourront/n'q'l's' courir SFX iE ourir ourrais/n'q'j'l'm't' courir SFX iE ourir ourrait/n'q'l's' courir SFX iE ourir ourrions/n'q'l' courir SFX iE ourir ourriez/n'q'l' courir SFX iE ourir ourraient/n'q'l's' courir SFX iE ourir oure/n'q'j'l'm's' courir SFX iE ourir oures/n'l't' courir SFX iE ourir ourusse/n'q'j'l'm' courir SFX iE ourir ourusses/n'q'l't' courir SFX iE ourir ourût/n'q'l's' courir SFX iE ourir ourussions/n'q'l' courir SFX iE ourir ourussiez/n'q'l' courir SFX iE ourir ourussent/n'q'l's' courir SFX iE ourir ours/n'l' courir SFX iE ourir ourons/n'l' courir SFX iE ourir ourez/n'l' courir SFX iF N 42 SFX iF ervir ervant servir SFX iF ervir ervi servir SFX iF ervir ervis servir SFX iF ervir ervie servir SFX iF ervir ervies servir SFX iF ervir ers servir SFX iF ervir ert servir SFX iF ervir ervons servir SFX iF ervir ervez servir SFX iF ervir ervent servir SFX iF ervir ervais servir SFX iF ervir ervait servir SFX iF ervir ervions servir SFX iF ervir erviez servir SFX iF ervir ervaient servir SFX iF ervir ervis servir SFX iF ervir ervit servir SFX iF ervir ervîmes servir SFX iF ervir ervîtes servir SFX iF ervir ervirent servir SFX iF ervir ervirai servir SFX iF ervir erviras servir SFX iF ervir ervira servir SFX iF ervir ervirons servir SFX iF ervir ervirez servir SFX iF ervir erviront servir SFX iF ervir ervirais servir SFX iF ervir ervirait servir SFX iF ervir ervirions servir SFX iF ervir erviriez servir SFX iF ervir erviraient servir SFX iF ervir erve servir SFX iF ervir erves servir SFX iF ervir ervisse servir SFX iF ervir ervisses servir SFX iF ervir ervît servir SFX iF ervir ervissions servir SFX iF ervir ervissiez servir SFX iF ervir ervissent servir SFX iF ervir ers servir SFX iF ervir ervons servir SFX iF ervir ervez servir SFX iG N 42 SFX iG êtir êtant vêtir SFX iG êtir êtu vêtir SFX iG êtir êtus vêtir SFX iG êtir êtue vêtir SFX iG êtir êtues vêtir SFX iG êtir êts vêtir SFX iG êtir êt vêtir SFX iG êtir êtons vêtir SFX iG êtir êtez vêtir SFX iG êtir êtent vêtir SFX iG êtir êtais vêtir SFX iG êtir êtait vêtir SFX iG êtir êtions vêtir SFX iG êtir êtiez vêtir SFX iG êtir êtaient vêtir SFX iG êtir êtis vêtir SFX iG êtir êtit vêtir SFX iG êtir êtîmes vêtir SFX iG êtir êtîtes vêtir SFX iG êtir êtirent vêtir SFX iG êtir êtirai vêtir SFX iG êtir êtiras vêtir SFX iG êtir êtira vêtir SFX iG êtir êtirons vêtir SFX iG êtir êtirez vêtir SFX iG êtir êtiront vêtir SFX iG êtir êtirais vêtir SFX iG êtir êtirait vêtir SFX iG êtir êtirions vêtir SFX iG êtir êtiriez vêtir SFX iG êtir êtiraient vêtir SFX iG êtir ête vêtir SFX iG êtir êtes vêtir SFX iG êtir êtisse vêtir SFX iG êtir êtisses vêtir SFX iG êtir êtît vêtir SFX iG êtir êtissions vêtir SFX iG êtir êtissiez vêtir SFX iG êtir êtissent vêtir SFX iG êtir êts vêtir SFX iG êtir êtons vêtir SFX iG êtir êtez vêtir SFX iI N 39 SFX iI ormir ormant dormir SFX iI ormir ormi dormir SFX iI ormir ors dormir SFX iI ormir ort dormir SFX iI ormir ormons dormir SFX iI ormir ormez dormir SFX iI ormir orment dormir SFX iI ormir ormais dormir SFX iI ormir ormait dormir SFX iI ormir ormions dormir SFX iI ormir ormiez dormir SFX iI ormir ormaient dormir SFX iI ormir ormis dormir SFX iI ormir ormit dormir SFX iI ormir ormîmes dormir SFX iI ormir ormîtes dormir SFX iI ormir ormirent dormir SFX iI ormir ormirai dormir SFX iI ormir ormiras dormir SFX iI ormir ormira dormir SFX iI ormir ormirons dormir SFX iI ormir ormirez dormir SFX iI ormir ormiront dormir SFX iI ormir ormirais dormir SFX iI ormir ormirait dormir SFX iI ormir ormirions dormir SFX iI ormir ormiriez dormir SFX iI ormir ormiraient dormir SFX iI ormir orme dormir SFX iI ormir ormes dormir SFX iI ormir ormisse dormir SFX iI ormir ormisses dormir SFX iI ormir ormît dormir SFX iI ormir ormissions dormir SFX iI ormir ormissiez dormir SFX iI ormir ormissent dormir SFX iI ormir ors dormir SFX iI ormir ormons dormir SFX iI ormir ormez dormir SFX iJ Y 43 SFX iJ dormir dormir/n'q'd'l'm't's' dormir SFX iJ dormir dormant/n'q'l'm't's' dormir SFX iJ dormir dormi/L'D'Q' dormir SFX iJ dormir dormis/D'Q' dormir SFX iJ dormir dormie/L'D'Q' dormir SFX iJ dormir dormies/D'Q' dormir SFX iJ dormir dors/n'q'j'l'm't' dormir SFX iJ dormir dort/n'q'l'm't's' dormir SFX iJ dormir dormons/n'q'l't' dormir SFX iJ dormir dormez/n'q'l'm' dormir SFX iJ dormir dorment/n'q'l'm't's' dormir SFX iJ dormir dormais/n'q'j'l'm't' dormir SFX iJ dormir dormait/n'q'l'm't's' dormir SFX iJ dormir dormions/n'q'l't' dormir SFX iJ dormir dormiez/n'q'l'm' dormir SFX iJ dormir dormaient/n'q'l'm't's' dormir SFX iJ dormir dormis/n'q'j'l'm't' dormir SFX iJ dormir dormit/n'q'l'm't's' dormir SFX iJ dormir dormîmes/n'q'l't' dormir SFX iJ dormir dormîtes/n'q'l'm' dormir SFX iJ dormir dormirent/n'q'l'm't's' dormir SFX iJ dormir dormirai/n'q'j'l'm't' dormir SFX iJ dormir dormiras/n'q'l'm't' dormir SFX iJ dormir dormira/n'q'l'm't's' dormir SFX iJ dormir dormirons/n'q'l't' dormir SFX iJ dormir dormirez/n'q'l'm' dormir SFX iJ dormir dormiront/n'q'l'm't's' dormir SFX iJ dormir dormirais/n'q'j'l'm't' dormir SFX iJ dormir dormirait/n'q'l'm't's' dormir SFX iJ dormir dormirions/n'q'l't' dormir SFX iJ dormir dormiriez/n'q'l'm' dormir SFX iJ dormir dormiraient/n'q'l'm't's' dormir SFX iJ dormir dorme/n'q'j'l'm't's' dormir SFX iJ dormir dormes/n'l'm't' dormir SFX iJ dormir dormisse/n'q'j'l'm't' dormir SFX iJ dormir dormisses/n'q'l'm't' dormir SFX iJ dormir dormît/n'q'l'm't's' dormir SFX iJ dormir dormissions/n'q'l't' dormir SFX iJ dormir dormissiez/n'q'l'm' dormir SFX iJ dormir dormissent/n'q'l'm't's' dormir SFX iJ dormir dors/n'l'm't' dormir SFX iJ dormir dormons/n'l' dormir SFX iJ dormir dormez/n'l'm' dormir SFX iK Y 42 SFX iK quérir quérir/n'q'd'l'm't's' quérir SFX iK quérir quérant/n'q'l'm't's' quérir SFX iK quérir quis/L'D'Q' quérir SFX iK quérir quise/L'D'Q' quérir SFX iK quérir quises/D'Q' quérir SFX iK quérir quiers/n'q'j'l'm't' quérir SFX iK quérir quiert/n'q'l'm't's' quérir SFX iK quérir quérons/n'q'l't' quérir SFX iK quérir quérez/n'q'l'm' quérir SFX iK quérir quièrent/n'q'l'm't's' quérir SFX iK quérir quérais/n'q'j'l'm't' quérir SFX iK quérir quérait/n'q'l'm't's' quérir SFX iK quérir quérions/n'q'l't' quérir SFX iK quérir quériez/n'q'l'm' quérir SFX iK quérir quéraient/n'q'l'm't's' quérir SFX iK quérir quis/n'q'j'l'm't' quérir SFX iK quérir quit/n'q'l'm't's' quérir SFX iK quérir quîmes/n'q'l't' quérir SFX iK quérir quîtes/n'q'l'm' quérir SFX iK quérir quirent/n'q'l'm't's' quérir SFX iK quérir querrai/n'q'j'l'm't' quérir SFX iK quérir querras/n'q'l'm't' quérir SFX iK quérir querra/n'q'l'm't's' quérir SFX iK quérir querrons/n'q'l't' quérir SFX iK quérir querrez/n'q'l'm' quérir SFX iK quérir querront/n'q'l'm't's' quérir SFX iK quérir querrais/n'q'j'l'm't' quérir SFX iK quérir querrait/n'q'l'm't's' quérir SFX iK quérir querrions/n'q'l't' quérir SFX iK quérir querriez/n'q'l'm' quérir SFX iK quérir querraient/n'q'l'm't's' quérir SFX iK quérir quière/n'q'j'l'm't's' quérir SFX iK quérir quières/n'l'm't' quérir SFX iK quérir quisse/n'q'j'l'm't' quérir SFX iK quérir quisses/n'q'l'm't' quérir SFX iK quérir quît/n'q'l'm't's' quérir SFX iK quérir quissions/n'q'l't' quérir SFX iK quérir quissiez/n'q'l'm' quérir SFX iK quérir quissent/n'q'l'm't's' quérir SFX iK quérir quiers/n'l'm't' quérir SFX iK quérir quérons/n'l' quérir SFX iK quérir quérez/n'l'm' quérir SFX iM Y 42 SFX iM quérir quérir/m't's' quérir SFX iM quérir quérant/m't's' quérir SFX iM quérir quis/L'D'Q' quérir SFX iM quérir quise/L'D'Q' quérir SFX iM quérir quises/D'Q' quérir SFX iM quérir quiers/m't' quérir SFX iM quérir quiert/s' quérir SFX iM quérir quérons quérir SFX iM quérir quérez quérir SFX iM quérir quièrent/s' quérir SFX iM quérir quérais/m't' quérir SFX iM quérir quérait/s' quérir SFX iM quérir quérions quérir SFX iM quérir quériez quérir SFX iM quérir quéraient/s' quérir SFX iM quérir quis/m't' quérir SFX iM quérir quit/s' quérir SFX iM quérir quîmes quérir SFX iM quérir quîtes quérir SFX iM quérir quirent/s' quérir SFX iM quérir querrai/m' quérir SFX iM quérir querras/t' quérir SFX iM quérir querra/s' quérir SFX iM quérir querrons quérir SFX iM quérir querrez quérir SFX iM quérir querront/s' quérir SFX iM quérir querrais/m't' quérir SFX iM quérir querrait/s' quérir SFX iM quérir querrions quérir SFX iM quérir querriez quérir SFX iM quérir querraient/s' quérir SFX iM quérir quière/m's' quérir SFX iM quérir quières/t' quérir SFX iM quérir quisse/m' quérir SFX iM quérir quisses/t' quérir SFX iM quérir quît/s' quérir SFX iM quérir quissions quérir SFX iM quérir quissiez quérir SFX iM quérir quissent/s' quérir SFX iM quérir quiers/t' quérir SFX iM quérir quérons quérir SFX iM quérir quérez quérir SFX iN N 40 SFX iN uir uyant fuir SFX iN uir ui fuir SFX iN uir uis fuir SFX iN uir uie fuir SFX iN uir uies fuir SFX iN uir uis fuir SFX iN uir uit fuir SFX iN uir uyons fuir SFX iN uir uyez fuir SFX iN uir uient fuir SFX iN uir uyais fuir SFX iN uir uyait fuir SFX iN uir uyions fuir SFX iN uir uyiez fuir SFX iN uir uyaient fuir SFX iN uir uîmes fuir SFX iN uir uîtes fuir SFX iN uir uirent fuir SFX iN uir uirai fuir SFX iN uir uiras fuir SFX iN uir uira fuir SFX iN uir uirons fuir SFX iN uir uirez fuir SFX iN uir uiront fuir SFX iN uir uirais fuir SFX iN uir uirait fuir SFX iN uir uirions fuir SFX iN uir uiriez fuir SFX iN uir uiraient fuir SFX iN uir uie fuir SFX iN uir uies fuir SFX iN uir uisse fuir SFX iN uir uisses fuir SFX iN uir uît fuir SFX iN uir uissions fuir SFX iN uir uissiez fuir SFX iN uir uissent fuir SFX iN uir uis fuir SFX iN uir uyons fuir SFX iN uir uyez fuir SFX iO Y 41 SFX iO fuir fuir/m't's' enfuir SFX iO fuir fuyant/m't's' enfuir SFX iO fuir fui/L'D'Q' enfuir SFX iO fuir fuis/D'Q' enfuir SFX iO fuir fuie/L'D'Q' enfuir SFX iO fuir fuies/D'Q' enfuir SFX iO fuir fuis/m't' enfuir SFX iO fuir fuit/s' enfuir SFX iO fuir fuyons enfuir SFX iO fuir fuyez enfuir SFX iO fuir fuient/s' enfuir SFX iO fuir fuyais/m't' enfuir SFX iO fuir fuyait/s' enfuir SFX iO fuir fuyions enfuir SFX iO fuir fuyiez enfuir SFX iO fuir fuyaient/s' enfuir SFX iO fuir fuîmes enfuir SFX iO fuir fuîtes enfuir SFX iO fuir fuirent/s' enfuir SFX iO fuir fuirai/m' enfuir SFX iO fuir fuiras/t' enfuir SFX iO fuir fuira/s' enfuir SFX iO fuir fuirons enfuir SFX iO fuir fuirez enfuir SFX iO fuir fuiront/s' enfuir SFX iO fuir fuirais/m't' enfuir SFX iO fuir fuirait/s' enfuir SFX iO fuir fuirions enfuir SFX iO fuir fuiriez enfuir SFX iO fuir fuiraient/s' enfuir SFX iO fuir fuie/m's' enfuir SFX iO fuir fuies/t' enfuir SFX iO fuir fuisse/m' enfuir SFX iO fuir fuisses/t' enfuir SFX iO fuir fuît/s' enfuir SFX iO fuir fuissions enfuir SFX iO fuir fuissiez enfuir SFX iO fuir fuissent/s' enfuir SFX iO fuir fuis/t' enfuir SFX iO fuir fuyons enfuir SFX iO fuir fuyez enfuir SFX iP N 42 SFX iP ourir ourant mourir SFX iP ourir ort mourir SFX iP ourir orts mourir SFX iP ourir orte mourir SFX iP ourir ortes mourir SFX iP ourir eurs mourir SFX iP ourir eurt mourir SFX iP ourir ourons mourir SFX iP ourir ourez mourir SFX iP ourir eurent mourir SFX iP ourir ourais mourir SFX iP ourir ourait mourir SFX iP ourir ourions mourir SFX iP ourir ouriez mourir SFX iP ourir ouraient mourir SFX iP ourir ourus mourir SFX iP ourir ourut mourir SFX iP ourir ourûmes mourir SFX iP ourir ourûtes mourir SFX iP ourir oururent mourir SFX iP ourir ourrai mourir SFX iP ourir ourras mourir SFX iP ourir ourra mourir SFX iP ourir ourrons mourir SFX iP ourir ourrez mourir SFX iP ourir ourront mourir SFX iP ourir ourrais mourir SFX iP ourir ourrait mourir SFX iP ourir ourrions mourir SFX iP ourir ourriez mourir SFX iP ourir ourraient mourir SFX iP ourir eure mourir SFX iP ourir eures mourir SFX iP ourir ourusse mourir SFX iP ourir ourusses mourir SFX iP ourir ourût mourir SFX iP ourir ourussions mourir SFX iP ourir ourussiez mourir SFX iP ourir ourussent mourir SFX iP ourir eurs mourir SFX iP ourir ourons mourir SFX iP ourir ourez mourir SFX iQ N 42 SFX iQ ouillir ouillant bouillir SFX iQ ouillir ouilli bouillir SFX iQ ouillir ouillis bouillir SFX iQ ouillir ouillie bouillir SFX iQ ouillir ouillies bouillir SFX iQ ouillir ous bouillir SFX iQ ouillir out bouillir SFX iQ ouillir ouillons bouillir SFX iQ ouillir ouillez bouillir SFX iQ ouillir ouillent bouillir SFX iQ ouillir ouillais bouillir SFX iQ ouillir ouillait bouillir SFX iQ ouillir ouillions bouillir SFX iQ ouillir ouilliez bouillir SFX iQ ouillir ouillaient bouillir SFX iQ ouillir ouillis bouillir SFX iQ ouillir ouillit bouillir SFX iQ ouillir ouillîmes bouillir SFX iQ ouillir ouillîtes bouillir SFX iQ ouillir ouillirent bouillir SFX iQ ouillir ouillirai bouillir SFX iQ ouillir ouilliras bouillir SFX iQ ouillir ouillira bouillir SFX iQ ouillir ouillirons bouillir SFX iQ ouillir ouillirez bouillir SFX iQ ouillir ouilliront bouillir SFX iQ ouillir ouillirais bouillir SFX iQ ouillir ouillirait bouillir SFX iQ ouillir ouillirions bouillir SFX iQ ouillir ouilliriez bouillir SFX iQ ouillir ouilliraient bouillir SFX iQ ouillir ouille bouillir SFX iQ ouillir ouilles bouillir SFX iQ ouillir ouillisse bouillir SFX iQ ouillir ouillisses bouillir SFX iQ ouillir ouillît bouillir SFX iQ ouillir ouillissions bouillir SFX iQ ouillir ouillissiez bouillir SFX iQ ouillir ouillissent bouillir SFX iQ ouillir ous bouillir SFX iQ ouillir ouillons bouillir SFX iQ ouillir ouillez bouillir SFX iR Y 41 SFX iR ueillir ueillir/n'q'd'l'm't's' cueillir SFX iR ueillir ueillant/n'q'l'm't's' cueillir SFX iR ueillir ueilli/L'D'Q' cueillir SFX iR ueillir ueillis/D'Q' cueillir SFX iR ueillir ueillie/L'D'Q' cueillir SFX iR ueillir ueillies/D'Q' cueillir SFX iR ueillir ueille/n'q'j'l'm't's' cueillir SFX iR ueillir ueilles/n'q'l'm' cueillir SFX iR ueillir ueillons/n'q'l't' cueillir SFX iR ueillir ueillez/n'q'l'm' cueillir SFX iR ueillir ueillent/n'q'l'm't's' cueillir SFX iR ueillir ueillais/n'q'j'l't' cueillir SFX iR ueillir ueillait/n'q'l'm't's' cueillir SFX iR ueillir ueillions/n'q'l't' cueillir SFX iR ueillir ueilliez/n'q'l'm' cueillir SFX iR ueillir ueillaient/n'q'l'm't's' cueillir SFX iR ueillir ueillis/n'q'j'l't' cueillir SFX iR ueillir ueillit/n'q'l'm't's' cueillir SFX iR ueillir ueillîmes/n'q'l't' cueillir SFX iR ueillir ueillîtes/n'q'l'm' cueillir SFX iR ueillir ueillirent/n'q'l'm't's' cueillir SFX iR ueillir ueillerai/n'q'j'l't' cueillir SFX iR ueillir ueilleras/n'q'l'm' cueillir SFX iR ueillir ueillera/n'q'l'm't's' cueillir SFX iR ueillir ueillerons/n'q'l't' cueillir SFX iR ueillir ueillerez/n'q'l'm' cueillir SFX iR ueillir ueilleront/n'q'l'm't's' cueillir SFX iR ueillir ueillerais/n'q'j'l't' cueillir SFX iR ueillir ueillerait/n'q'l'm't's' cueillir SFX iR ueillir ueillerions/n'q'l't' cueillir SFX iR ueillir ueilleriez/n'q'l'm' cueillir SFX iR ueillir ueilleraient/n'q'l'm't's' cueillir SFX iR ueillir ueillisse/n'q'j'l't' cueillir SFX iR ueillir ueillisses/n'q'l'm' cueillir SFX iR ueillir ueillît/n'q'l'm't's' cueillir SFX iR ueillir ueillissions/n'q'l't' cueillir SFX iR ueillir ueillissiez/n'q'l'm' cueillir SFX iR ueillir ueillissent/n'q'l'm't's' cueillir SFX iR ueillir ueille/n'l'm' cueillir SFX iR ueillir ueillons/n'l' cueillir SFX iR ueillir ueillez/n'l'm' cueillir SFX iS N 37 SFX iS aillir aillant aillir SFX iS aillir ailli aillir SFX iS aillir aille aillir SFX iS aillir ailles aillir SFX iS aillir aillons aillir SFX iS aillir aillez aillir SFX iS aillir aillent aillir SFX iS aillir aillais aillir SFX iS aillir aillait aillir SFX iS aillir aillions aillir SFX iS aillir ailliez aillir SFX iS aillir aillaient aillir SFX iS aillir aillis aillir SFX iS aillir aillit aillir SFX iS aillir aillîmes aillir SFX iS aillir aillîtes aillir SFX iS aillir aillirent aillir SFX iS aillir aillirai aillir SFX iS aillir ailliras aillir SFX iS aillir aillira aillir SFX iS aillir aillirons aillir SFX iS aillir aillirez aillir SFX iS aillir ailliront aillir SFX iS aillir aillirais aillir SFX iS aillir aillirait aillir SFX iS aillir aillirions aillir SFX iS aillir ailliriez aillir SFX iS aillir ailliraient aillir SFX iS aillir aillisse aillir SFX iS aillir aillisses aillir SFX iS aillir aillît aillir SFX iS aillir aillissions aillir SFX iS aillir aillissiez aillir SFX iS aillir aillissent aillir SFX iS aillir aille aillir SFX iS aillir aillons aillir SFX iS aillir aillez aillir SFX iT Y 41 SFX iT saillir saillir/n'q'd'l'm't's' aillir SFX iT saillir saillant/n'q'l'm't's' aillir SFX iT saillir sailli/L'D'Q' aillir SFX iT saillir saillis/D'Q' aillir SFX iT saillir saillie/L'D'Q' aillir SFX iT saillir saillies/D'Q' aillir SFX iT saillir saille/n'q'j'l'm't's' aillir SFX iT saillir sailles/n'q'l'm't' aillir SFX iT saillir saillons/n'q'l't' aillir SFX iT saillir saillez/n'q'l'm' aillir SFX iT saillir saillent/n'q'l'm't's' aillir SFX iT saillir saillais/n'q'j'l'm't' aillir SFX iT saillir saillait/n'q'l'm't's' aillir SFX iT saillir saillions/n'q'l't' aillir SFX iT saillir sailliez/n'q'l'm' aillir SFX iT saillir saillaient/n'q'l'm't's' aillir SFX iT saillir saillis/n'q'j'l'm't' aillir SFX iT saillir saillit/n'q'l'm't's' aillir SFX iT saillir saillîmes/n'q'l't' aillir SFX iT saillir saillîtes/n'q'l'm' aillir SFX iT saillir saillirent/n'q'l'm't's' aillir SFX iT saillir saillirai/n'q'j'l'm't' aillir SFX iT saillir sailliras/n'q'l'm't' aillir SFX iT saillir saillira/n'q'l'm't's' aillir SFX iT saillir saillirons/n'q'l't' aillir SFX iT saillir saillirez/n'q'l'm' aillir SFX iT saillir sailliront/n'q'l'm't's' aillir SFX iT saillir saillirais/n'q'j'l'm't' aillir SFX iT saillir saillirait/n'q'l'm't's' aillir SFX iT saillir saillirions/n'q'l't' aillir SFX iT saillir sailliriez/n'q'l'm' aillir SFX iT saillir sailliraient/n'q'l'm't's' aillir SFX iT saillir saillisse/n'q'j'l'm't' aillir SFX iT saillir saillisses/n'q'l'm't' aillir SFX iT saillir saillît/n'q'l'm't's' aillir SFX iT saillir saillissions/n'q'l't' aillir SFX iT saillir saillissiez/n'q'l'm' aillir SFX iT saillir saillissent/n'q'l'm't's' aillir SFX iT saillir saille/n'l'm' aillir SFX iT saillir saillons/n'l' aillir SFX iT saillir saillez/n'l'm' aillir SFX iU N 36 SFX iU aillir aillant faillir SFX iU aillir ailli faillir SFX iU aillir aux faillir SFX iU aillir aut faillir SFX iU aillir aillons faillir SFX iU aillir aillez faillir SFX iU aillir aillent faillir SFX iU aillir aillais faillir SFX iU aillir aillait faillir SFX iU aillir aillions faillir SFX iU aillir ailliez faillir SFX iU aillir aillaient faillir SFX iU aillir aillis faillir SFX iU aillir aillit faillir SFX iU aillir aillîmes faillir SFX iU aillir aillîtes faillir SFX iU aillir aillirent faillir SFX iU aillir aillirai faillir SFX iU aillir ailliras faillir SFX iU aillir aillira faillir SFX iU aillir aillirons faillir SFX iU aillir aillirez faillir SFX iU aillir ailliront faillir SFX iU aillir aillirais faillir SFX iU aillir aillirait faillir SFX iU aillir aillirions faillir SFX iU aillir ailliriez faillir SFX iU aillir ailliraient faillir SFX iU aillir aille faillir SFX iU aillir ailles faillir SFX iU aillir aillisse faillir SFX iU aillir aillisses faillir SFX iU aillir aillît faillir SFX iU aillir aillissions faillir SFX iU aillir aillissiez faillir SFX iU aillir aillissent faillir SFX iV N 11 SFX iV ésir isant gésir SFX iV ésir is gésir SFX iV ésir ît gésir SFX iV ésir isons gésir SFX iV ésir isez gésir SFX iV ésir isent gésir SFX iV ésir isais gésir SFX iV ésir isait gésir SFX iV ésir isions gésir SFX iV ésir isiez gésir SFX iV ésir isaient gésir SFX iW Y 54 SFX iW uïr uïr/n'q'd'l'm't's' ouïr SFX iW uïr yant/n'q'l'm't's' ouïr SFX iW uïr uï/L'D'Q' ouïr SFX iW uïr uïs/D'Q' ouïr SFX iW uïr uïe/L'D'Q' ouïr SFX iW uïr uïes/D'Q' ouïr SFX iW uïr is/n'q'j'l'm't' ouïr SFX iW uïr it/n'q'l'm't' ouïr SFX iW uïr yons/n'q'l't' ouïr SFX iW uïr yez/n'q'l'm' ouïr SFX iW uïr ient/n'q'l'm't's' ouïr SFX iW uïr yais/n'q'j'l'm't' ouïr SFX iW uïr yait/n'q'l'm't' ouïr SFX iW uïr yions/n'q'l't' ouïr SFX iW uïr yiez/n'q'l'm' ouïr SFX iW uïr yaient/n'q'l'm't's' ouïr SFX iW uïr uïs/n'q'j'l'm't' ouïr SFX iW uïr uït/n'q'l'm't' ouïr SFX iW uïr uïmes/n'q'l't' ouïr SFX iW uïr uïtes/n'q'l'm' ouïr SFX iW uïr uïrent/n'q'l'm't's' ouïr SFX iW uïr uïrai/n'q'j'l'm't' ouïr SFX iW uïr rrai/n'q'j'l'm't' ouïr SFX iW uïr uïras/n'q'l'm't' ouïr SFX iW uïr rras/n'q'l'm't' ouïr SFX iW uïr uïra/n'q'l'm't' ouïr SFX iW uïr rra/n'q'l'm't' ouïr SFX iW uïr uïrons/n'q'l't' ouïr SFX iW uïr rrons/n'q'l't' ouïr SFX iW uïr uïrez/n'q'l'm' ouïr SFX iW uïr rrez/n'q'l'm' ouïr SFX iW uïr uïront/n'q'l'm't's' ouïr SFX iW uïr rront/n'q'l'm't's' ouïr SFX iW uïr uïrais/n'q'j'l'm't' ouïr SFX iW uïr rrais/n'q'j'l'm't' ouïr SFX iW uïr uïrait/n'q'l'm't' ouïr SFX iW uïr rrait/n'q'l'm't' ouïr SFX iW uïr uïrions/n'q'l't' ouïr SFX iW uïr rrions/n'q'l't' ouïr SFX iW uïr uïriez/n'q'l'm' ouïr SFX iW uïr rriez/n'q'l'm' ouïr SFX iW uïr uïraient/n'q'l'm't's' ouïr SFX iW uïr rraient/n'q'l'm't's' ouïr SFX iW uïr ie/n'q'j'l'm't's' ouïr SFX iW uïr ies/n'l'm't' ouïr SFX iW uïr uïsse/n'q'j'l'm't' ouïr SFX iW uïr uïsses/n'q'l'm't' ouïr SFX iW uïr uït/n'q'l'm't' ouïr SFX iW uïr uïssions/n'q'l't' ouïr SFX iW uïr uïssiez/n'q'l'm' ouïr SFX iW uïr uïssent/n'q'l'm't's' ouïr SFX iW uïr is/n'l'm' ouïr SFX iW uïr yons/n'l' ouïr SFX iW uïr yez/n'l'm' ouïr SFX iX N 4 SFX iX érir éru férir SFX iX érir érus férir SFX iX érir érue férir SFX iX érir érues férir SFX iY Y 5 SFX iY ssir ssir/n'q'd' issir SFX iY ssir ssu/L'D'Q' issir SFX iY ssir ssus/D'Q' issir SFX iY ssir ssue/L'D'Q' issir SFX iY ssir ssues/D'Q' issir SFX pA N 42 SFX pA ouvoir ouvant pouvoir SFX pA ouvoir u pouvoir SFX pA ouvoir eux pouvoir SFX pA ouvoir uis pouvoir SFX pA ouvoir eut pouvoir SFX pA ouvoir ouvons pouvoir SFX pA ouvoir ouvez pouvoir SFX pA ouvoir euvent pouvoir SFX pA ouvoir ouvais pouvoir SFX pA ouvoir ouvait pouvoir SFX pA ouvoir ouvions pouvoir SFX pA ouvoir ouviez pouvoir SFX pA ouvoir ouvaient pouvoir SFX pA ouvoir us pouvoir SFX pA ouvoir ut pouvoir SFX pA ouvoir ûmes pouvoir SFX pA ouvoir ûtes pouvoir SFX pA ouvoir urent pouvoir SFX pA ouvoir ourrai pouvoir SFX pA ouvoir ourras pouvoir SFX pA ouvoir ourra pouvoir SFX pA ouvoir ourrons pouvoir SFX pA ouvoir ourrez pouvoir SFX pA ouvoir ourront pouvoir SFX pA ouvoir ourrais pouvoir SFX pA ouvoir ourrait pouvoir SFX pA ouvoir ourrions pouvoir SFX pA ouvoir ourriez pouvoir SFX pA ouvoir ourraient pouvoir SFX pA ouvoir uisse pouvoir SFX pA ouvoir uissé pouvoir SFX pA ouvoir uisses pouvoir SFX pA ouvoir uissions pouvoir SFX pA ouvoir uissiez pouvoir SFX pA ouvoir uissent pouvoir SFX pA ouvoir usse pouvoir SFX pA ouvoir ussé pouvoir SFX pA ouvoir usses pouvoir SFX pA ouvoir ût pouvoir SFX pA ouvoir ussions pouvoir SFX pA ouvoir ussiez pouvoir SFX pA ouvoir ussent pouvoir SFX pB N 47 SFX pB ouloir oulant vouloir SFX pB ouloir oulu vouloir SFX pB ouloir oulus vouloir SFX pB ouloir oulue vouloir SFX pB ouloir oulues vouloir SFX pB ouloir eux vouloir SFX pB ouloir eut vouloir SFX pB ouloir oulons vouloir SFX pB ouloir oulez vouloir SFX pB ouloir eulent vouloir SFX pB ouloir oulais vouloir SFX pB ouloir oulait vouloir SFX pB ouloir oulions vouloir SFX pB ouloir ouliez vouloir SFX pB ouloir oulaient vouloir SFX pB ouloir oulus vouloir SFX pB ouloir oulut vouloir SFX pB ouloir oulûmes vouloir SFX pB ouloir oulûtes vouloir SFX pB ouloir oulurent vouloir SFX pB ouloir oudrai vouloir SFX pB ouloir oudras vouloir SFX pB ouloir oudra vouloir SFX pB ouloir oudrons vouloir SFX pB ouloir oudrez vouloir SFX pB ouloir oudront vouloir SFX pB ouloir oudrais vouloir SFX pB ouloir oudrait vouloir SFX pB ouloir oudrions vouloir SFX pB ouloir oudriez vouloir SFX pB ouloir oudraient vouloir SFX pB ouloir euille vouloir SFX pB ouloir euillé vouloir SFX pB ouloir euilles vouloir SFX pB ouloir euillent vouloir SFX pB ouloir oulusse vouloir SFX pB ouloir oulusses vouloir SFX pB ouloir oulût vouloir SFX pB ouloir oulussions vouloir SFX pB ouloir oulussiez vouloir SFX pB ouloir oulussent vouloir SFX pB ouloir euille vouloir SFX pB ouloir eux vouloir SFX pB ouloir euillons vouloir SFX pB ouloir oulons vouloir SFX pB ouloir euillez vouloir SFX pB ouloir oulez vouloir SFX pC N 43 SFX pC evoir evant devoir SFX pC evoir û redevoir SFX pC evoir us devoir SFX pC evoir ue devoir SFX pC evoir ues devoir SFX pC evoir ois devoir SFX pC evoir oit devoir SFX pC evoir evons devoir SFX pC evoir evez devoir SFX pC evoir oivent devoir SFX pC evoir evais devoir SFX pC evoir evait devoir SFX pC evoir evions devoir SFX pC evoir eviez devoir SFX pC evoir evaient devoir SFX pC evoir us devoir SFX pC evoir ut devoir SFX pC evoir ûmes devoir SFX pC evoir ûtes devoir SFX pC evoir urent devoir SFX pC evoir evrai devoir SFX pC evoir evras devoir SFX pC evoir evra devoir SFX pC evoir evrons devoir SFX pC evoir evrez devoir SFX pC evoir evront devoir SFX pC evoir evrais devoir SFX pC evoir evrait devoir SFX pC evoir evrions devoir SFX pC evoir evriez devoir SFX pC evoir evraient devoir SFX pC evoir oive devoir SFX pC evoir oives devoir SFX pC evoir usse devoir SFX pC evoir ussé devoir SFX pC evoir usses devoir SFX pC evoir ût devoir SFX pC evoir ussions devoir SFX pC evoir ussiez devoir SFX pC evoir ussent devoir SFX pC evoir ois devoir SFX pC evoir evons devoir SFX pC evoir evez devoir SFX pD N 1 SFX pD evoir û devoir SFX pE N 45 SFX pE avoir achant savoir SFX pE avoir u savoir SFX pE avoir us savoir SFX pE avoir ue savoir SFX pE avoir ues savoir SFX pE avoir ais savoir SFX pE avoir ait savoir SFX pE avoir avons savoir SFX pE avoir avez savoir SFX pE avoir avent savoir SFX pE avoir avais savoir SFX pE avoir avait savoir SFX pE avoir avions savoir SFX pE avoir aviez savoir SFX pE avoir avaient savoir SFX pE avoir us savoir SFX pE avoir ut savoir SFX pE avoir ûmes savoir SFX pE avoir ûtes savoir SFX pE avoir urent savoir SFX pE avoir aurai savoir SFX pE avoir auras savoir SFX pE avoir aura savoir SFX pE avoir aurons savoir SFX pE avoir aurez savoir SFX pE avoir auront savoir SFX pE avoir aurais savoir SFX pE avoir aurait savoir SFX pE avoir aurions savoir SFX pE avoir auriez savoir SFX pE avoir auraient savoir SFX pE avoir ache savoir SFX pE avoir aches savoir SFX pE avoir achions savoir SFX pE avoir achiez savoir SFX pE avoir achent savoir SFX pE avoir usse savoir SFX pE avoir usses savoir SFX pE avoir ût savoir SFX pE avoir ussions savoir SFX pE avoir ussiez savoir SFX pE avoir ussent savoir SFX pE avoir ache savoir SFX pE avoir achons savoir SFX pE avoir achez savoir SFX pF Y 54 SFX pF oir oir/n'q'd'l'm't's' voir SFX pF oir oyant/n'q'l'm't's' voir SFX pF oir u/L'D'Q' voir SFX pF oir us/D'Q' voir SFX pF oir ue/L'D'Q' voir SFX pF oir ues/D'Q' voir SFX pF oir ois/n'q'j'l'm't' voir SFX pF oir oit/n'q'l'm't's' voir SFX pF oir oyons/n'q'l't' voir SFX pF oir oyez/n'q'l'm' voir SFX pF oir oient/n'q'l'm't's' voir SFX pF oir oyais/n'q'j'l'm't' voir SFX pF oir oyait/n'q'l'm't's' voir SFX pF oir oyions/n'q'l't' voir SFX pF oir oyiez/n'q'l'm' voir SFX pF oir oyaient/n'q'l'm't's' voir SFX pF oir is/n'q'j'l'm't' voir SFX pF oir it/n'q'l'm't's' voir SFX pF oir îmes/n'q'l't' voir SFX pF oir îtes/n'q'l'm' voir SFX pF oir irent/n'q'l'm't's' voir SFX pF oir errai/n'q'j'l'm't' [^é]voir SFX pF oir oirai évoir SFX pF oir erras/n'q'l'm't' [^é]voir SFX pF oir oiras évoir SFX pF oir erra/n'q'l'm't's' [^é]voir SFX pF oir oira évoir SFX pF oir errons/n'q'l't' [^é]voir SFX pF oir oirons évoir SFX pF oir errez/n'q'l'm' [^é]voir SFX pF oir oirez évoir SFX pF oir erront/n'q'l'm't's' [^é]voir SFX pF oir oiront évoir SFX pF oir errais/n'q'j'l'm't' [^é]voir SFX pF oir oirais évoir SFX pF oir errait/n'q'l'm't's' [^é]voir SFX pF oir oirait évoir SFX pF oir errions/n'q'l't' [^é]voir SFX pF oir oirions évoir SFX pF oir erriez/n'q'l'm' [^é]voir SFX pF oir oiriez évoir SFX pF oir erraient/n'q'l'm't's' [^é]voir SFX pF oir oiraient évoir SFX pF oir oie/n'q'j'l'm't's' voir SFX pF oir oies/n'l'm't' voir SFX pF oir isse/n'q'j'l'm't' voir SFX pF oir isses/n'q'l'm't' voir SFX pF oir ît/n'q'l'm't's' voir SFX pF oir issions/n'q'l't' voir SFX pF oir issiez/n'q'l'm' voir SFX pF oir issent/n'q'l'm't's' voir SFX pF oir ois/n'l'm' voir SFX pF oir oyons/n'l' voir SFX pF oir oyez/n'l'm' voir SFX pG Y 11 SFX pG oir errai voir SFX pG oir erras voir SFX pG oir erra voir SFX pG oir errons voir SFX pG oir errez voir SFX pG oir erront voir SFX pG oir errais voir SFX pG oir errait voir SFX pG oir errions voir SFX pG oir erriez voir SFX pG oir erraient voir SFX pH Y 43 SFX pH ouvoir ouvoir/n'q'd'l'm't's' mouvoir SFX pH ouvoir ouvant/n'q'l'm't's' mouvoir SFX pH ouvoir u/L'D'Q' .mouvoir SFX pH ouvoir us/D'Q' mouvoir SFX pH ouvoir ue/L'D'Q' mouvoir SFX pH ouvoir ues/D'Q' mouvoir SFX pH ouvoir eus/n'q'j'l'm't' mouvoir SFX pH ouvoir eut/n'q'l'm't's' mouvoir SFX pH ouvoir ouvons/n'q'l't' mouvoir SFX pH ouvoir ouvez/n'q'l'm' mouvoir SFX pH ouvoir euvent/n'q'l'm't's' mouvoir SFX pH ouvoir ouvais/n'q'j'l'm't' mouvoir SFX pH ouvoir ouvait/n'q'l'm't's' mouvoir SFX pH ouvoir ouvions/n'q'l't' mouvoir SFX pH ouvoir ouviez/n'q'l'm' mouvoir SFX pH ouvoir ouvaient/n'q'l'm't's' mouvoir SFX pH ouvoir us/n'q'j'l'm't' mouvoir SFX pH ouvoir ut/n'q'l'm't's' mouvoir SFX pH ouvoir ûmes/n'q'l't' mouvoir SFX pH ouvoir ûtes/n'q'l'm' mouvoir SFX pH ouvoir urent/n'q'l'm't's' mouvoir SFX pH ouvoir ouvrai/n'q'j'l'm't' mouvoir SFX pH ouvoir ouvras/n'q'l'm't' mouvoir SFX pH ouvoir ouvra/n'q'l'm't's' mouvoir SFX pH ouvoir ouvrons/n'q'l't' mouvoir SFX pH ouvoir ouvrez/n'q'l'm' mouvoir SFX pH ouvoir ouvront/n'q'l'm't's' mouvoir SFX pH ouvoir ouvrais/n'q'j'l'm't' mouvoir SFX pH ouvoir ouvrait/n'q'l'm't's' mouvoir SFX pH ouvoir ouvrions/n'q'l't' mouvoir SFX pH ouvoir ouvriez/n'q'l'm' mouvoir SFX pH ouvoir ouvraient/n'q'l'm't's' mouvoir SFX pH ouvoir euve/n'q'j'l'm't's' mouvoir SFX pH ouvoir euves/n'l'm't' mouvoir SFX pH ouvoir usse/n'q'j'l'm't' mouvoir SFX pH ouvoir usses/n'q'l'm't' mouvoir SFX pH ouvoir ût/n'q'l'm't's' mouvoir SFX pH ouvoir ussions/n'q'l't' mouvoir SFX pH ouvoir ussiez/n'q'l'm' mouvoir SFX pH ouvoir ussent/n'q'l'm't's' mouvoir SFX pH ouvoir eus/n'l'm' mouvoir SFX pH ouvoir ouvons/n'l' mouvoir SFX pH ouvoir ouvez/n'l'm' mouvoir SFX pI N 1 SFX pI ouvoir û/q' mouvoir SFX pJ N 42 SFX pJ ourvoir ourvoyant pourvoir SFX pJ ourvoir ourvu pourvoir SFX pJ ourvoir ourvus pourvoir SFX pJ ourvoir ourvue pourvoir SFX pJ ourvoir ourvues pourvoir SFX pJ ourvoir ourvois pourvoir SFX pJ ourvoir ourvoit pourvoir SFX pJ ourvoir ourvoyons pourvoir SFX pJ ourvoir ourvoyez pourvoir SFX pJ ourvoir ourvoient pourvoir SFX pJ ourvoir ourvoyais pourvoir SFX pJ ourvoir ourvoyait pourvoir SFX pJ ourvoir ourvoyions pourvoir SFX pJ ourvoir ourvoyiez pourvoir SFX pJ ourvoir ourvoyaient pourvoir SFX pJ ourvoir ourvus pourvoir SFX pJ ourvoir ourvut pourvoir SFX pJ ourvoir ourvûmes pourvoir SFX pJ ourvoir ourvûtes pourvoir SFX pJ ourvoir ourvurent pourvoir SFX pJ ourvoir ourvoirai pourvoir SFX pJ ourvoir ourvoiras pourvoir SFX pJ ourvoir ourvoira pourvoir SFX pJ ourvoir ourvoirons pourvoir SFX pJ ourvoir ourvoirez pourvoir SFX pJ ourvoir ourvoiront pourvoir SFX pJ ourvoir ourvoirais pourvoir SFX pJ ourvoir ourvoirait pourvoir SFX pJ ourvoir ourvoirions pourvoir SFX pJ ourvoir ourvoiriez pourvoir SFX pJ ourvoir ourvoiraient pourvoir SFX pJ ourvoir ourvoie pourvoir SFX pJ ourvoir ourvoies pourvoir SFX pJ ourvoir ourvusse pourvoir SFX pJ ourvoir ourvusses pourvoir SFX pJ ourvoir ourvût pourvoir SFX pJ ourvoir ourvussions pourvoir SFX pJ ourvoir ourvussiez pourvoir SFX pJ ourvoir ourvussent pourvoir SFX pJ ourvoir ourvois pourvoir SFX pJ ourvoir ourvoyons pourvoir SFX pJ ourvoir ourvoyez pourvoir SFX pK Y 43 SFX pK cevoir cevoir/n'q'd'l'm't's' cevoir SFX pK cevoir cevant/n'q'l'm't's' cevoir SFX pK cevoir çu/L'D'Q' cevoir SFX pK cevoir çus/D'Q' cevoir SFX pK cevoir çue/L'D'Q' cevoir SFX pK cevoir çues/D'Q' cevoir SFX pK cevoir çois/n'q'j'l'm't' cevoir SFX pK cevoir çoit/n'q'l'm't's' cevoir SFX pK cevoir cevons/n'q'l't' cevoir SFX pK cevoir cevez/n'q'l'm' cevoir SFX pK cevoir çoivent/n'q'l'm't's' cevoir SFX pK cevoir cevais/n'q'j'l'm't' cevoir SFX pK cevoir cevait/n'q'l'm't's' cevoir SFX pK cevoir cevions/n'q'l't' cevoir SFX pK cevoir ceviez/n'q'l'm' cevoir SFX pK cevoir cevaient/n'q'l'm't's' cevoir SFX pK cevoir çus/n'q'j'l'm't' cevoir SFX pK cevoir çut/n'q'l'm't's' cevoir SFX pK cevoir çûmes/n'q'l't' cevoir SFX pK cevoir çûtes/n'q'l'm' cevoir SFX pK cevoir çurent/n'q'l'm't's' cevoir SFX pK cevoir cevrai/n'q'j'l'm't' cevoir SFX pK cevoir cevras/n'q'l'm't' cevoir SFX pK cevoir cevra/n'q'l'm't's' cevoir SFX pK cevoir cevrons/n'q'l't' cevoir SFX pK cevoir cevrez/n'q'l'm' cevoir SFX pK cevoir cevront/n'q'l'm't's' cevoir SFX pK cevoir cevrais/n'q'j'l'm't' cevoir SFX pK cevoir cevrait/n'q'l'm't's' cevoir SFX pK cevoir cevrions/n'q'l't' cevoir SFX pK cevoir cevriez/n'q'l'm' cevoir SFX pK cevoir cevraient/n'q'l'm't's' cevoir SFX pK cevoir çoive/n'q'j'l'm't's' cevoir SFX pK cevoir çoives/n'l'm't' cevoir SFX pK cevoir çusse/n'q'j'l'm't' cevoir SFX pK cevoir çusses/n'q'l'm't' cevoir SFX pK cevoir çût/n'q'l'm't's' cevoir SFX pK cevoir çussions/n'q'l't' cevoir SFX pK cevoir çussiez/n'q'l'm' cevoir SFX pK cevoir çussent/n'q'l'm't's' cevoir SFX pK cevoir çois/n'l'm't' cevoir SFX pK cevoir cevons/n'l' cevoir SFX pK cevoir cevez/n'l'm' cevoir SFX pM N 40 SFX pM aloir alant valoir SFX pM aloir alu valoir SFX pM aloir aux valoir SFX pM aloir aut valoir SFX pM aloir alons valoir SFX pM aloir alez valoir SFX pM aloir alent valoir SFX pM aloir alais valoir SFX pM aloir alait valoir SFX pM aloir alions valoir SFX pM aloir aliez valoir SFX pM aloir alaient valoir SFX pM aloir alus valoir SFX pM aloir alut valoir SFX pM aloir alûmes valoir SFX pM aloir alûtes valoir SFX pM aloir alurent valoir SFX pM aloir audrai valoir SFX pM aloir audras valoir SFX pM aloir audra valoir SFX pM aloir audrons valoir SFX pM aloir audrez valoir SFX pM aloir audront valoir SFX pM aloir audrais valoir SFX pM aloir audrait valoir SFX pM aloir audrions valoir SFX pM aloir audriez valoir SFX pM aloir audraient valoir SFX pM aloir aille valoir SFX pM aloir ailles valoir SFX pM aloir aillent valoir SFX pM aloir alusse valoir SFX pM aloir alusses valoir SFX pM aloir alût valoir SFX pM aloir alussions valoir SFX pM aloir alussiez valoir SFX pM aloir alussent valoir SFX pM aloir aux valoir SFX pM aloir alons valoir SFX pM aloir alez valoir SFX pN Y 43 SFX pN valoir valoir/n'q'd'm't's' valoir SFX pN valoir valant/n'q'm't's' valoir SFX pN valoir vaux/n'j'm't' valoir SFX pN valoir vaut/n'm't's' valoir SFX pN valoir valons/n't' valoir SFX pN valoir valez/n'm' valoir SFX pN valoir valent/n'm't's' quivaloir SFX pN valoir valent révaloir SFX pN valoir valais/n'j'm't' valoir SFX pN valoir valait/n'm't's' valoir SFX pN valoir valions/n't' valoir SFX pN valoir valiez/n'm' valoir SFX pN valoir valaient/n'm't's' valoir SFX pN valoir valus/n'j'm't' valoir SFX pN valoir valut/n'm't's' valoir SFX pN valoir valûmes/n't' valoir SFX pN valoir valûtes/n'm' valoir SFX pN valoir valurent/n'm't's' valoir SFX pN valoir vaudrai/n'j'm't' valoir SFX pN valoir vaudras/n'm't' valoir SFX pN valoir vaudra/n'm't's' valoir SFX pN valoir vaudrons/n't' valoir SFX pN valoir vaudrez/n'm' valoir SFX pN valoir vaudront/n'm't's' valoir SFX pN valoir vaudrais/n'j'm't' valoir SFX pN valoir vaudrait/n'm't's' valoir SFX pN valoir vaudrions/n't' valoir SFX pN valoir vaudriez/n'm' valoir SFX pN valoir vaudraient/n'm't's' valoir SFX pN valoir vaille/n'j'm't's' quivaloir SFX pN valoir vale révaloir SFX pN valoir vailles/n'm't' quivaloir SFX pN valoir vales révaloir SFX pN valoir vaillent/n'm't's' quivaloir SFX pN valoir valusse/n'j'm't' valoir SFX pN valoir valusses/n'm't' valoir SFX pN valoir valût/n'm't's' valoir SFX pN valoir valussions/n't' valoir SFX pN valoir valussiez/n'm' valoir SFX pN valoir valussent/n'm't's' valoir SFX pN valoir vaux valoir SFX pN valoir valons valoir SFX pN valoir valez valoir SFX pO N 16 SFX pO valoir valant revaloir SFX pO valoir valu revaloir SFX pO valoir valus revaloir SFX pO valoir value revaloir SFX pO valoir values revaloir SFX pO valoir vaudrai revaloir SFX pO valoir vaudras revaloir SFX pO valoir vaudra revaloir SFX pO valoir vaudrons revaloir SFX pO valoir vaudrez revaloir SFX pO valoir vaudront revaloir SFX pO valoir vaudrais revaloir SFX pO valoir vaudrait revaloir SFX pO valoir vaudrions revaloir SFX pO valoir vaudriez revaloir SFX pO valoir vaudraient revaloir SFX pP N 1 SFX pP paroir parant comparoir SFX pQ N 1 SFX pQ haloir haut chaloir SFX pR Y 2 SFX pR pparoir pparoir/n'q'd' apparoir SFX pR pparoir ppert/n'q' apparoir SFX pS Y 69 SFX pS oir oir/n'q'd'l'm't's' oir SFX pS sseoir sseyant/n'q'l'm't's' seoir SFX pS sseoir ssoyant/n'q'l'm't's' seoir SFX pS sseoir ssis/L'D'Q' seoir SFX pS sseoir ssise/L'D'Q' seoir SFX pS sseoir ssises/D'Q' seoir SFX pS sseoir ssieds/n'q'j'l'm't' seoir SFX pS sseoir ssied/n'q'l'm't's' seoir SFX pS sseoir sseyons/n'q'l't' seoir SFX pS sseoir sseyez/n'q'l'm' seoir SFX pS sseoir sseyent/n'q'l'm't's' seoir SFX pS sseoir ssois/n'q'j'l'm't' seoir SFX pS sseoir ssoit/n'q'l'm't's' seoir SFX pS sseoir ssoyons/n'q'l't' seoir SFX pS sseoir ssoyez/n'q'l'm' seoir SFX pS sseoir ssoient/n'q'l'm't's' seoir SFX pS sseoir sseyais/n'q'j'l'm't' seoir SFX pS sseoir sseyait/n'q'l'm't's' seoir SFX pS sseoir sseyions/n'q'l't' seoir SFX pS sseoir sseyiez/n'q'l'm' seoir SFX pS sseoir sseyaient/n'q'l'm't's' seoir SFX pS sseoir ssoyais/n'q'j'l'm't' seoir SFX pS sseoir ssoyait/n'q'l'm't's' seoir SFX pS sseoir ssoyions/n'q'l't' seoir SFX pS sseoir ssoyiez/n'q'l'm' seoir SFX pS sseoir ssoyaient/n'q'l'm't's' seoir SFX pS sseoir ssis/n'q'j'l'm't' seoir SFX pS sseoir ssit/n'q'l'm't's' seoir SFX pS sseoir ssîmes/n'q'l't' seoir SFX pS sseoir ssîtes/n'q'l'm' seoir SFX pS sseoir ssirent/n'q'l'm't's' seoir SFX pS sseoir ssiérai/n'q'j'l'm't' seoir SFX pS sseoir ssiéras/n'q'l'm't' seoir SFX pS sseoir ssiéra/n'q'l'm't's' seoir SFX pS sseoir ssiérons/n'q'l't' seoir SFX pS sseoir ssiérez/n'q'l'm' seoir SFX pS sseoir ssiéront/n'q'l'm't's' seoir SFX pS sseoir ssoirai/n'q'j'l'm't' seoir SFX pS sseoir ssoiras/n'q'l'm't' seoir SFX pS sseoir ssoira/n'q'l'm't's' seoir SFX pS sseoir ssoirons/n'q'l't' seoir SFX pS sseoir ssoirez/n'q'l'm' seoir SFX pS sseoir ssoiront/n'q'l'm't's' seoir SFX pS sseoir ssiérais/n'q'j'l'm't' seoir SFX pS sseoir ssiérait/n'q'l'm't's' seoir SFX pS sseoir ssiérions/n'q'l't' seoir SFX pS sseoir ssiériez/n'q'l'm' seoir SFX pS sseoir ssiéraient/n'q'l'm't's' seoir SFX pS sseoir ssoirais/n'q'j'l'm't' seoir SFX pS sseoir ssoirait/n'q'l'm't's' seoir SFX pS sseoir ssoirions/n'q'l't' seoir SFX pS sseoir ssoiriez/n'q'l'm' seoir SFX pS sseoir ssoiraient/n'q'l'm't's' seoir SFX pS sseoir sseye/n'q'j'l'm't's' seoir SFX pS sseoir sseyes/n'l'm't' seoir SFX pS sseoir ssoie/n'q'j'l'm't's' seoir SFX pS sseoir ssoies/n'l'm't' seoir SFX pS sseoir ssisse/n'q'j'l'm't' seoir SFX pS sseoir ssisses/n'q'l'm't' seoir SFX pS sseoir ssît/n'q'l'm't's' seoir SFX pS sseoir ssissions/n'q'l't' seoir SFX pS sseoir ssissiez/n'q'l'm' seoir SFX pS sseoir ssissent/n'q'l'm't's' seoir SFX pS sseoir ssieds/n'l'm't' seoir SFX pS sseoir sseyons/n'l' seoir SFX pS sseoir sseyez/n'l'm' seoir SFX pS sseoir ssois/n'l'm't' seoir SFX pS sseoir ssoyons/n'l' seoir SFX pS sseoir ssoyez/n'l'm' seoir SFX pT N 41 SFX pT urseoir ursoyant seoir SFX pT urseoir ursis seoir SFX pT urseoir ursise seoir SFX pT urseoir ursises seoir SFX pT urseoir ursois seoir SFX pT urseoir ursoit seoir SFX pT urseoir ursoyons seoir SFX pT urseoir ursoyez seoir SFX pT urseoir ursoient seoir SFX pT urseoir ursoyais seoir SFX pT urseoir ursoyait seoir SFX pT urseoir ursoyions seoir SFX pT urseoir ursoyiez seoir SFX pT urseoir ursoyaient seoir SFX pT urseoir ursis seoir SFX pT urseoir ursit seoir SFX pT urseoir ursîmes seoir SFX pT urseoir ursîtes seoir SFX pT urseoir ursirent seoir SFX pT urseoir urseoirai seoir SFX pT urseoir urseoiras seoir SFX pT urseoir urseoira seoir SFX pT urseoir urseoirons seoir SFX pT urseoir urseoirez seoir SFX pT urseoir urseoiront seoir SFX pT urseoir urseoirais seoir SFX pT urseoir urseoirait seoir SFX pT urseoir urseoirions seoir SFX pT urseoir urseoiriez seoir SFX pT urseoir urseoiraient seoir SFX pT urseoir ursoie seoir SFX pT urseoir ursoies seoir SFX pT urseoir ursisse seoir SFX pT urseoir ursisses seoir SFX pT urseoir ursît seoir SFX pT urseoir ursissions seoir SFX pT urseoir ursissiez seoir SFX pT urseoir ursissent seoir SFX pT urseoir ursois seoir SFX pT urseoir ursoyons seoir SFX pT urseoir ursoyez seoir SFX pU N 4 SFX pU eoir éant seoir SFX pU eoir is seoir SFX pU eoir ise seoir SFX pU eoir ises seoir SFX pV N 13 SFX pV eoir éant seoir SFX pV eoir eyant seoir SFX pV eoir is seoir SFX pV eoir ied seoir SFX pV eoir iéent seoir SFX pV eoir eyait seoir SFX pV eoir eyaient seoir SFX pV eoir iéra seoir SFX pV eoir iéront seoir SFX pV eoir iérait seoir SFX pV eoir iéraient seoir SFX pV eoir iée seoir SFX pV eoir iéent seoir SFX pW N 11 SFX pW sseoir sséant seoir SFX pW sseoir ssied seoir SFX pW sseoir ssiéent seoir SFX pW sseoir sseyait seoir SFX pW sseoir sseyaient seoir SFX pW sseoir ssiéra seoir SFX pW sseoir ssiéront seoir SFX pW sseoir ssiérait seoir SFX pW sseoir ssiéraient seoir SFX pW sseoir ssiée seoir SFX pW sseoir ssiéent seoir SFX pX N 52 SFX pX hoir hu choir SFX pX hoir hus choir SFX pX hoir hue choir SFX pX hoir hues choir SFX pX hoir hois choir SFX pX hoir hoit choir SFX pX hoir hoyons choir SFX pX hoir hoyez choir SFX pX hoir hoient choir SFX pX hoir hoyais déchoir SFX pX hoir hoyait déchoir SFX pX hoir hoyions déchoir SFX pX hoir hoyiez déchoir SFX pX hoir hoyaient déchoir SFX pX hoir hus choir SFX pX hoir hut choir SFX pX hoir hûmes choir SFX pX hoir hûtes choir SFX pX hoir hurent choir SFX pX hoir hoirai choir SFX pX hoir herrai choir SFX pX hoir hoiras choir SFX pX hoir herras choir SFX pX hoir hoira choir SFX pX hoir herra choir SFX pX hoir hoirons choir SFX pX hoir herrons choir SFX pX hoir hoirez choir SFX pX hoir herrez choir SFX pX hoir hoiront choir SFX pX hoir herront choir SFX pX hoir hoirais choir SFX pX hoir herrais choir SFX pX hoir hoirait choir SFX pX hoir herrait choir SFX pX hoir hoirions choir SFX pX hoir herrions choir SFX pX hoir hoiriez choir SFX pX hoir herriez choir SFX pX hoir hoiraient choir SFX pX hoir herraient choir SFX pX hoir hoie choir SFX pX hoir hoies choir SFX pX hoir husse choir SFX pX hoir husses choir SFX pX hoir hût choir SFX pX hoir hussions choir SFX pX hoir hussiez choir SFX pX hoir hussent choir SFX pX hoir hois déchoir SFX pX hoir hoyons déchoir SFX pX hoir hoyez déchoir SFX pY Y 26 SFX pY choir choir/n'q'd' échoir SFX pY choir chéant/n'q' échoir SFX pY choir chu/L'D'Q' échoir SFX pY choir chus/D'Q' échoir SFX pY choir chue/L'D'Q' échoir SFX pY choir chues/D'Q' échoir SFX pY choir choit/n'q' échoir SFX pY choir chet/n'q' échoir SFX pY choir choient/n'q' échoir SFX pY choir chéent/n'q' échoir SFX pY choir choyait/n'q' échoir SFX pY choir choyaient/n'q' échoir SFX pY choir chut/n'q' échoir SFX pY choir churent/n'q' échoir SFX pY choir choira/n'q' échoir SFX pY choir cherra/n'q' échoir SFX pY choir choiront/n'q' échoir SFX pY choir cherront/n'q' échoir SFX pY choir choirait/n'q' échoir SFX pY choir cherrait/n'q' échoir SFX pY choir choiraient/n'q' échoir SFX pY choir cherraient/n'q' échoir SFX pY choir choie/n'q' échoir SFX pY choir choient/n'q' échoir SFX pY choir chût/n'q' échoir SFX pY choir chussent/n'q' échoir SFX pZ N 18 SFX pZ euvoir euvant pleuvoir SFX pZ euvoir u pleuvoir SFX pZ euvoir eut pleuvoir SFX pZ euvoir euvent pleuvoir SFX pZ euvoir euvait pleuvoir SFX pZ euvoir euvaient pleuvoir SFX pZ euvoir ut pleuvoir SFX pZ euvoir urent pleuvoir SFX pZ euvoir euvra pleuvoir SFX pZ euvoir euvront pleuvoir SFX pZ euvoir euvrait pleuvoir SFX pZ euvoir euvraient pleuvoir SFX pZ euvoir euve pleuvoir SFX pZ euvoir ût pleuvoir SFX pZ euvoir ussent pleuvoir SFX pZ euvoir eus pleuvoir SFX pZ euvoir euvons pleuvoir SFX pZ euvoir euvez pleuvoir SFX qA N 8 SFX qA alloir allu falloir SFX qA alloir aut falloir SFX qA alloir allait falloir SFX qA alloir allut falloir SFX qA alloir audra falloir SFX qA alloir audrait falloir SFX qA alloir aille falloir SFX qA alloir allût falloir SFX rA Y 28 SFX rA lore lore/n'q'd'l'm't's' clore SFX rA lore losant/n'q'l'm't's' clore SFX rA lore los/L'D'Q' clore SFX rA lore lose/L'D'Q' clore SFX rA lore loses/D'Q' clore SFX rA lore los/n'q'j'l'm't' clore SFX rA lore lot/n'q'l'm't's' .clore SFX rA lore losons/n'q'l't' clore SFX rA lore losez/n'q'l'm' clore SFX rA lore losent/n'q'l'm't's' clore SFX rA lore lorai/n'q'j'l'm't' clore SFX rA lore loras/n'q'l'm't' clore SFX rA lore lora/n'q'l'm't's' clore SFX rA lore lorons/n'q'l't' clore SFX rA lore lorez/n'q'l'm' clore SFX rA lore loront/n'q'l'm't's' clore SFX rA lore lorais/n'q'j'l'm't' clore SFX rA lore lorait/n'q'l'm't's' clore SFX rA lore lorions/n'q'l't' clore SFX rA lore loriez/n'q'l'm' clore SFX rA lore loraient/n'q'l'm't's' clore SFX rA lore lose/n'q'j'l'm't's' clore SFX rA lore loses/n'l'm't' clore SFX rA lore losions/n'l't' clore SFX rA lore losiez/n'l'm' clore SFX rA lore los/n'l'm' clore SFX rA lore losons/n'l' clore SFX rA lore losez/n'l'm' clore SFX rB Y 1 SFX rB lore lôt clore SFX rC Y 28 SFX rC clore clore/n'q'd' clore SFX rC clore closant/n'q' clore SFX rC clore clos/L'D'Q' clore SFX rC clore close/L'D'Q' clore SFX rC clore closes/D'Q' clore SFX rC clore clos/n'j' clore SFX rC clore clot/n'q' clore SFX rC clore closons/n' clore SFX rC clore closez/n' clore SFX rC clore closent/n'q' clore SFX rC clore clorai/n'j' clore SFX rC clore cloras/n' clore SFX rC clore clora/n'q' clore SFX rC clore clorons/n' clore SFX rC clore clorez/n' clore SFX rC clore cloront/n'q' clore SFX rC clore clorais/n'j' clore SFX rC clore clorait/n'q' clore SFX rC clore clorions/n' clore SFX rC clore cloriez/n' clore SFX rC clore cloraient/n'q' clore SFX rC clore close/n'q'j' clore SFX rC clore closes/n' clore SFX rC clore closions/n' clore SFX rC clore closiez/n' clore SFX rC clore clos/n' clore SFX rC clore closons/n' clore SFX rC clore closez/n' clore SFX rD N 3 SFX rD clore clos clore SFX rD clore close clore SFX rD clore closes clore SFX tA Y 44 SFX tA re re/n'q'd'l'm't's' [dp]re SFX tA re ant/n'q'l'm't's' [dp]re SFX tA re u/L'D'Q' [dp]re SFX tA re us/D'Q' [dp]re SFX tA re ue/L'D'Q' [dp]re SFX tA re ues/D'Q' [dp]re SFX tA re s/n'q'j'l'm't' [dp]re SFX tA dre d/n'q'l'm't's' dre SFX tA pre pt/n'q'l'm't's' pre SFX tA re ons/n'q'l't' [dp]re SFX tA re ez/n'q'l'm' [dp]re SFX tA re ent/n'q'l'm't's' [dp]re SFX tA re ais/n'q'j'l'm't' [dp]re SFX tA re ait/n'q'l'm't's' [dp]re SFX tA re ions/n'q'l't' [dp]re SFX tA re iez/n'q'l'm' [dp]re SFX tA re aient/n'q'l'm't's' [dp]re SFX tA re is/n'q'j'l'm't' [dp]re SFX tA re it/n'q'l'm't's' [dp]re SFX tA re îmes/n'q'l't' [dp]re SFX tA re îtes/n'q'l'm' [dp]re SFX tA re irent/n'q'l'm't's' [dp]re SFX tA re rai/n'q'j'l'm't' [dp]re SFX tA re ras/n'q'l'm't' [dp]re SFX tA re ra/n'q'l'm't's' [dp]re SFX tA re rons/n'q'l't' [dp]re SFX tA re rez/n'q'l'm' [dp]re SFX tA re ront/n'q'l'm't's' [dp]re SFX tA re rais/n'q'j'l'm't' [dp]re SFX tA re rait/n'q'l'm't's' [dp]re SFX tA re rions/n'q'l't' [dp]re SFX tA re riez/n'q'l'm' [dp]re SFX tA re raient/n'q'l'm't's' [dp]re SFX tA re e/n'q'j'l'm't's' [dp]re SFX tA re es/n'l'm't' [dp]re SFX tA re isse/n'q'j'l'm't' [dp]re SFX tA re isses/n'q'l'm't' [dp]re SFX tA re ît/n'q'l'm't's' [dp]re SFX tA re issions/n'q'l't' [dp]re SFX tA re issiez/n'q'l'm' [dp]re SFX tA re issent/n'q'l'm't's' [dp]re SFX tA re s/n'l'm't' [dp]re SFX tA re ons/n'l' [dp]re SFX tA re ez/n'l'm' [dp]re SFX tD Y 43 SFX tD perdre perdre/m't's' perdre SFX tD perdre perdant/m't's' perdre SFX tD perdre perdu perdre SFX tD perdre perdus perdre SFX tD perdre perdue perdre SFX tD perdre perdues perdre SFX tD perdre perds/m't' perdre SFX tD perdre perd/s' perdre SFX tD perdre perdons perdre SFX tD perdre perdez perdre SFX tD perdre perdent/s' perdre SFX tD perdre perdais/m't' perdre SFX tD perdre perdait/s' perdre SFX tD perdre perdions perdre SFX tD perdre perdiez perdre SFX tD perdre perdaient/s' perdre SFX tD perdre perdis/m't' perdre SFX tD perdre perdit/s' perdre SFX tD perdre perdîmes perdre SFX tD perdre perdîtes perdre SFX tD perdre perdirent/s' perdre SFX tD perdre perdrai/m' perdre SFX tD perdre perdras/t' perdre SFX tD perdre perdra/s' perdre SFX tD perdre perdrons perdre SFX tD perdre perdrez perdre SFX tD perdre perdront/s' perdre SFX tD perdre perdrais/m't' perdre SFX tD perdre perdrait/s' perdre SFX tD perdre perdrions perdre SFX tD perdre perdriez perdre SFX tD perdre perdraient/s' perdre SFX tD perdre perde/m's' perdre SFX tD perdre perdes/t' perdre SFX tD perdre perdisse/m' perdre SFX tD perdre perdisses/t' perdre SFX tD perdre perdît/s' perdre SFX tD perdre perdissions perdre SFX tD perdre perdissiez perdre SFX tD perdre perdissent/s' perdre SFX tD perdre perds/t' perdre SFX tD perdre perdons perdre SFX tD perdre perdez perdre SFX tE N 38 SFX tE dre dant dre SFX tE dre ds dre SFX tE dre d dre SFX tE dre dons dre SFX tE dre dez dre SFX tE dre dent dre SFX tE dre dais dre SFX tE dre dait dre SFX tE dre dions dre SFX tE dre diez dre SFX tE dre daient dre SFX tE dre dis dre SFX tE dre dit dre SFX tE dre dîmes dre SFX tE dre dîtes dre SFX tE dre dirent dre SFX tE dre drai dre SFX tE dre dras dre SFX tE dre dra dre SFX tE dre drons dre SFX tE dre drez dre SFX tE dre dront dre SFX tE dre drais dre SFX tE dre drait dre SFX tE dre drions dre SFX tE dre driez dre SFX tE dre draient dre SFX tE dre de dre SFX tE dre des dre SFX tE dre disse dre SFX tE dre disses dre SFX tE dre dît dre SFX tE dre dissions dre SFX tE dre dissiez dre SFX tE dre dissent dre SFX tE dre ds dre SFX tE dre dons dre SFX tE dre dez dre SFX tF Y 42 SFX tF rendre rendre/n'q'd'l'm't's' prendre SFX tF rendre renant/n'q'l'm't's' prendre SFX tF rendre ris/L'D'Q' prendre SFX tF rendre rise/L'D'Q' prendre SFX tF rendre rises/D'Q' prendre SFX tF rendre rends/n'q'j'l'm't' prendre SFX tF rendre rend/n'q'l'm't's' prendre SFX tF rendre renons/n'q'l't' prendre SFX tF rendre renez/n'q'l'm' prendre SFX tF rendre rennent/n'q'l'm't's' prendre SFX tF rendre renais/n'q'j'l'm't' prendre SFX tF rendre renait/n'q'l'm't's' prendre SFX tF rendre renions/n'q'l't' prendre SFX tF rendre reniez/n'q'l'm' prendre SFX tF rendre renaient/n'q'l'm't's' prendre SFX tF rendre ris/n'q'j'l'm't' prendre SFX tF rendre rit/n'q'l'm't's' prendre SFX tF rendre rîmes/n'q'l't' prendre SFX tF rendre rîtes/n'q'l'm' prendre SFX tF rendre rirent/n'q'l'm't's' prendre SFX tF rendre rendrai/n'q'j'l'm't' prendre SFX tF rendre rendras/n'q'l'm't' prendre SFX tF rendre rendra/n'q'l'm't's' prendre SFX tF rendre rendrons/n'q'l't' prendre SFX tF rendre rendrez/n'q'l'm' prendre SFX tF rendre rendront/n'q'l'm't's' prendre SFX tF rendre rendrais/n'q'j'l'm't' prendre SFX tF rendre rendrait/n'q'l'm't's' prendre SFX tF rendre rendrions/n'q'l't' prendre SFX tF rendre rendriez/n'q'l'm' prendre SFX tF rendre rendraient/n'q'l'm't's' prendre SFX tF rendre renne/n'q'j'l'm't's' prendre SFX tF rendre rennes/n'l'm't' prendre SFX tF rendre risse/n'q'j'l'm't' prendre SFX tF rendre risses/n'q'l'm't' prendre SFX tF rendre rît/n'q'l'm't's' prendre SFX tF rendre rissions/n'q'l't' prendre SFX tF rendre rissiez/n'q'l'm' prendre SFX tF rendre rissent/n'q'l'm't's' prendre SFX tF rendre rends/n'l'm' prendre SFX tF rendre renons/n'l' prendre SFX tF rendre renez/n'l'm' prendre SFX tG Y 42 SFX tG prendre prendre/m't's' prendre SFX tG prendre prenant/m't's' prendre SFX tG prendre pris/L'D'Q' prendre SFX tG prendre prise/L'D'Q' prendre SFX tG prendre prises/D'Q' prendre SFX tG prendre prends/m't' prendre SFX tG prendre prend/s' prendre SFX tG prendre prenons prendre SFX tG prendre prenez prendre SFX tG prendre prennent/s' prendre SFX tG prendre prenais/m't' prendre SFX tG prendre prenait/s' prendre SFX tG prendre prenions prendre SFX tG prendre preniez prendre SFX tG prendre prenaient/s' prendre SFX tG prendre pris/m't' prendre SFX tG prendre prit/s' prendre SFX tG prendre prîmes prendre SFX tG prendre prîtes prendre SFX tG prendre prirent/s' prendre SFX tG prendre prendrai/m' prendre SFX tG prendre prendras/t' prendre SFX tG prendre prendra/s' prendre SFX tG prendre prendrons prendre SFX tG prendre prendrez prendre SFX tG prendre prendront/s' prendre SFX tG prendre prendrais/m't' prendre SFX tG prendre prendrait/s' prendre SFX tG prendre prendrions prendre SFX tG prendre prendriez prendre SFX tG prendre prendraient/s' prendre SFX tG prendre prenne/m's' prendre SFX tG prendre prennes/t' prendre SFX tG prendre prisse/m' prendre SFX tG prendre prisses/t' prendre SFX tG prendre prît/s' prendre SFX tG prendre prissions prendre SFX tG prendre prissiez prendre SFX tG prendre prissent/s' prendre SFX tG prendre prends/t' prendre SFX tG prendre prenons prendre SFX tG prendre prenez prendre SFX tM N 31 SFX tM outre outant foutre SFX tM outre outu foutre SFX tM outre outus foutre SFX tM outre outue foutre SFX tM outre outues foutre SFX tM outre ous foutre SFX tM outre out foutre SFX tM outre outons foutre SFX tM outre outez foutre SFX tM outre outent foutre SFX tM outre outais foutre SFX tM outre outait foutre SFX tM outre outions foutre SFX tM outre outiez foutre SFX tM outre outaient foutre SFX tM outre outrai foutre SFX tM outre outras foutre SFX tM outre outra foutre SFX tM outre outrons foutre SFX tM outre outrez foutre SFX tM outre outront foutre SFX tM outre outrais foutre SFX tM outre outrait foutre SFX tM outre outrions foutre SFX tM outre outriez foutre SFX tM outre outraient foutre SFX tM outre oute foutre SFX tM outre outes foutre SFX tM outre ous foutre SFX tM outre outons foutre SFX tM outre outez foutre SFX tU N 4 SFX tU istre issu tistre SFX tU istre issus tistre SFX tU istre issue tistre SFX tU istre issues tistre SFX uA Y 45 SFX uA tre tre/n'q'd'l'm't's' tre SFX uA tre tant/n'q'l'm't's' tre SFX uA tre tu/L'D'Q' tre SFX uA tre tus/D'Q' tre SFX uA tre tue/L'D'Q' tre SFX uA tre tues/D'Q' tre SFX uA ttre ts/n'q'j'l'm't' ttre SFX uA ttre t/n'q'l'm't's' ttre SFX uA tre ts/n'q'j'l'm't' embatre SFX uA tre t/n'q'l'm't's' embatre SFX uA tre tons/n'q'l't' tre SFX uA tre tez/n'q'l'm' tre SFX uA tre tent/n'q'l'm't's' tre SFX uA tre tais/n'q'j'l'm't' tre SFX uA tre tait/n'q'l'm't's' tre SFX uA tre tions/n'q'l't' tre SFX uA tre tiez/n'q'l'm' tre SFX uA tre taient/n'q'l'm't's' tre SFX uA tre tis/n'q'j'l'm't' tre SFX uA tre tit/n'q'l'm't's' tre SFX uA tre tîmes/n'q'l't' tre SFX uA tre tîtes/n'q'l'm' tre SFX uA tre tirent/n'q'l'm't's' tre SFX uA tre trai/n'q'j'l'm't' tre SFX uA tre tras/n'q'l'm't' tre SFX uA tre tra/n'q'l'm't's' tre SFX uA tre trons/n'q'l't' tre SFX uA tre trez/n'q'l'm' tre SFX uA tre tront/n'q'l'm't's' tre SFX uA tre trais/n'q'j'l'm't' tre SFX uA tre trait/n'q'l'm't's' tre SFX uA tre trions/n'q'l't' tre SFX uA tre triez/n'q'l'm' tre SFX uA tre traient/n'q'l'm't's' tre SFX uA tre te/n'q'j'l'm't's' tre SFX uA tre tes/n'l'm't' tre SFX uA tre tisse/n'q'j'l'm't' tre SFX uA tre tisses/n'q'l'm't' tre SFX uA tre tît/n'q'l'm't's' tre SFX uA tre tissions/n'q'l't' tre SFX uA tre tissiez/n'q'l'm' tre SFX uA tre tissent/n'q'l'm't's' tre SFX uA tre s/n'l'm't' tre SFX uA tre tons/n'l' tre SFX uA tre tez/n'l'm' tre SFX uC Y 43 SFX uC battre battre/m't's' battre SFX uC battre battant/m't's' battre SFX uC battre battu battre SFX uC battre battus battre SFX uC battre battue battre SFX uC battre battues battre SFX uC battre bats/m't' battre SFX uC battre bat/s' battre SFX uC battre battons battre SFX uC battre battez battre SFX uC battre battent/s' battre SFX uC battre battais/m't' battre SFX uC battre battait/s' battre SFX uC battre battions battre SFX uC battre battiez battre SFX uC battre battaient/s' battre SFX uC battre battis/m't' battre SFX uC battre battit/s' battre SFX uC battre battîmes battre SFX uC battre battîtes battre SFX uC battre battirent/s' battre SFX uC battre battrai/m' battre SFX uC battre battras/t' battre SFX uC battre battra/s' battre SFX uC battre battrons battre SFX uC battre battrez battre SFX uC battre battront/s' battre SFX uC battre battrais/m't' battre SFX uC battre battrait/s' battre SFX uC battre battrions battre SFX uC battre battriez battre SFX uC battre battraient/s' battre SFX uC battre batte/m's' battre SFX uC battre battes/t' battre SFX uC battre battisse/m' battre SFX uC battre battisses/t' battre SFX uC battre battît/s' battre SFX uC battre battissions battre SFX uC battre battissiez battre SFX uC battre battissent/s' battre SFX uC battre bats/t' battre SFX uC battre battons battre SFX uC battre battez battre SFX uD Y 33 SFX uD battre battre/s' battre SFX uD battre battant/s' battre SFX uD battre battu battre SFX uD battre battus battre SFX uD battre battue battre SFX uD battre battues battre SFX uD battre bat/s' battre SFX uD battre battons battre SFX uD battre battez battre SFX uD battre battent/s' battre SFX uD battre battait/s' battre SFX uD battre battions battre SFX uD battre battiez battre SFX uD battre battaient/s' battre SFX uD battre battit/s' battre SFX uD battre battîmes battre SFX uD battre battîtes battre SFX uD battre battirent/s' battre SFX uD battre battra/s' battre SFX uD battre battrons battre SFX uD battre battrez battre SFX uD battre battront/s' battre SFX uD battre battrait/s' battre SFX uD battre battrions battre SFX uD battre battriez battre SFX uD battre battraient/s' battre SFX uD battre batte/s' battre SFX uD battre battît/s' battre SFX uD battre battissions battre SFX uD battre battissiez battre SFX uD battre battissent/s' battre SFX uD battre battons-nous battre SFX uD battre battez-vous battre SFX vA Y 42 SFX vA ettre ettre/n'q'd'l'm't's' mettre SFX vA ettre ettant/n'q'l'm't's' mettre SFX vA ettre is/L'D'Q' mettre SFX vA ettre ise/L'D'Q' mettre SFX vA ettre ises/D'Q' mettre SFX vA ettre ets/n'q'j'l'm't' mettre SFX vA ettre et/n'q'l'm't's' mettre SFX vA ettre ettons/n'q'l't' mettre SFX vA ettre ettez/n'q'l'm' mettre SFX vA ettre ettent/n'q'l'm't's' mettre SFX vA ettre ettais/n'q'j'l'm't' mettre SFX vA ettre ettait/n'q'l'm't's' mettre SFX vA ettre ettions/n'q'l't' mettre SFX vA ettre ettiez/n'q'l'm' mettre SFX vA ettre ettaient/n'q'l'm't's' mettre SFX vA ettre is/n'q'j'l'm't' mettre SFX vA ettre it/n'q'l'm't's' mettre SFX vA ettre îmes/n'q'l't' mettre SFX vA ettre îtes/n'q'l'm' mettre SFX vA ettre irent/n'q'l'm't's' mettre SFX vA ettre ettrai/n'q'j'l'm't' mettre SFX vA ettre ettras/n'q'l'm't' mettre SFX vA ettre ettra/n'q'l'm't's' mettre SFX vA ettre ettrons/n'q'l't' mettre SFX vA ettre ettrez/n'q'l'm' mettre SFX vA ettre ettront/n'q'l'm't's' mettre SFX vA ettre ettrais/n'q'j'l'm't' mettre SFX vA ettre ettrait/n'q'l'm't's' mettre SFX vA ettre ettrions/n'q'l't' mettre SFX vA ettre ettriez/n'q'l'm' mettre SFX vA ettre ettraient/n'q'l'm't's' mettre SFX vA ettre ette/n'q'j'l'm't's' mettre SFX vA ettre ettes/n'l'm't' mettre SFX vA ettre isse/n'q'j'l'm't' mettre SFX vA ettre isses/n'q'l'm't' mettre SFX vA ettre ît/n'q'l'm't's' mettre SFX vA ettre issions/n'q'l't' mettre SFX vA ettre issiez/n'q'l'm' mettre SFX vA ettre issent/n'q'l'm't's' mettre SFX vA ettre ets/n'l'm't' mettre SFX vA ettre ettons/n'l' mettre SFX vA ettre ettez/n'l'm' mettre SFX vC Y 42 SFX vC mettre mettre/m't's' mettre SFX vC mettre mettant/m't's' mettre SFX vC mettre mis mettre SFX vC mettre mise mettre SFX vC mettre mises mettre SFX vC mettre mets/m't' mettre SFX vC mettre met/s' mettre SFX vC mettre mettons mettre SFX vC mettre mettez mettre SFX vC mettre mettent/s' mettre SFX vC mettre mettais/m't' mettre SFX vC mettre mettait/s' mettre SFX vC mettre mettions mettre SFX vC mettre mettiez mettre SFX vC mettre mettaient/s' mettre SFX vC mettre mis/m't' mettre SFX vC mettre mit/s' mettre SFX vC mettre mîmes mettre SFX vC mettre mîtes mettre SFX vC mettre mirent/s' mettre SFX vC mettre mettrai/m' mettre SFX vC mettre mettras/t' mettre SFX vC mettre mettra/s' mettre SFX vC mettre mettrons mettre SFX vC mettre mettrez mettre SFX vC mettre mettront/s' mettre SFX vC mettre mettrais/m't' mettre SFX vC mettre mettrait/s' mettre SFX vC mettre mettrions mettre SFX vC mettre mettriez mettre SFX vC mettre mettraient/s' mettre SFX vC mettre mette/m's' mettre SFX vC mettre mettes/t' mettre SFX vC mettre misse/m' mettre SFX vC mettre misses/t' mettre SFX vC mettre mît/s' mettre SFX vC mettre missions mettre SFX vC mettre missiez mettre SFX vC mettre missent/s' mettre SFX vC mettre mets mettre SFX vC mettre mettons mettre SFX vC mettre mettez mettre SFX wA N 42 SFX wA eindre eignant eindre SFX wA eindre eint eindre SFX wA eindre eints eindre SFX wA eindre einte eindre SFX wA eindre eintes eindre SFX wA eindre eins eindre SFX wA eindre eint eindre SFX wA eindre eignons eindre SFX wA eindre eignez eindre SFX wA eindre eignent eindre SFX wA eindre eignais eindre SFX wA eindre eignait eindre SFX wA eindre eignions eindre SFX wA eindre eigniez eindre SFX wA eindre eignaient eindre SFX wA eindre eignis eindre SFX wA eindre eignit eindre SFX wA eindre eignîmes eindre SFX wA eindre eignîtes eindre SFX wA eindre eignirent eindre SFX wA eindre eindrai eindre SFX wA eindre eindras eindre SFX wA eindre eindra eindre SFX wA eindre eindrons eindre SFX wA eindre eindrez eindre SFX wA eindre eindront eindre SFX wA eindre eindrais eindre SFX wA eindre eindrait eindre SFX wA eindre eindrions eindre SFX wA eindre eindriez eindre SFX wA eindre eindraient eindre SFX wA eindre eigne eindre SFX wA eindre eignes eindre SFX wA eindre eignisse eindre SFX wA eindre eignisses eindre SFX wA eindre eignît eindre SFX wA eindre eignissions eindre SFX wA eindre eignissiez eindre SFX wA eindre eignissent eindre SFX wA eindre eins eindre SFX wA eindre eignons eindre SFX wA eindre eignez eindre SFX wB Y 43 SFX wB indre indre/n'q'd'l'm't's' indre SFX wB indre ignant/n'q'l'm't's' indre SFX wB indre int/L'D'Q' indre SFX wB indre ints/D'Q' indre SFX wB indre inte/L'D'Q' indre SFX wB indre intes/D'Q' indre SFX wB indre ins/n'q'j'l'm't' indre SFX wB indre int/n'q'l'm't's' indre SFX wB indre ignons/n'q'l't' indre SFX wB indre ignez/n'q'l'm' indre SFX wB indre ignent/n'q'l'm't's' indre SFX wB indre ignais/n'q'j'l'm't' indre SFX wB indre ignait/n'q'l'm't's' indre SFX wB indre ignions/n'q'l't' indre SFX wB indre igniez/n'q'l'm' indre SFX wB indre ignaient/n'q'l'm't's' indre SFX wB indre ignis/n'q'j'l'm't' indre SFX wB indre ignit/n'q'l'm't's' indre SFX wB indre ignîmes/n'q'l't' indre SFX wB indre ignîtes/n'q'l'm' indre SFX wB indre ignirent/n'q'l'm't's' indre SFX wB indre indrai/n'q'j'l'm't' indre SFX wB indre indras/n'q'l'm't' indre SFX wB indre indra/n'q'l'm't's' indre SFX wB indre indrons/n'q'l't' indre SFX wB indre indrez/n'q'l'm' indre SFX wB indre indront/n'q'l'm't's' indre SFX wB indre indrais/n'q'j'l'm't' indre SFX wB indre indrait/n'q'l'm't's' indre SFX wB indre indrions/n'q'l't' indre SFX wB indre indriez/n'q'l'm' indre SFX wB indre indraient/n'q'l'm't's' indre SFX wB indre igne/n'q'j'l'm't's' indre SFX wB indre ignes/n'l'm't' indre SFX wB indre ignisse/n'q'j'l'm't' indre SFX wB indre ignisses/n'q'l'm't' indre SFX wB indre ignît/n'q'l'm't's' indre SFX wB indre ignissions/n'q'l't' indre SFX wB indre ignissiez/n'q'l'm' indre SFX wB indre ignissent/n'q'l'm't's' indre SFX wB indre ins/n'l'm't' indre SFX wB indre ignons/n'l' indre SFX wB indre ignez/n'l'm' indre SFX wD N 45 SFX wD aire aisant faire SFX wD aire ait faire SFX wD aire aits faire SFX wD aire aite faire SFX wD aire aites faire SFX wD aire ais faire SFX wD aire ait faire SFX wD aire aisons faire SFX wD aire aites faire SFX wD aire ont faire SFX wD aire aisais faire SFX wD aire aisait faire SFX wD aire aisions faire SFX wD aire aisiez faire SFX wD aire aisaient faire SFX wD aire is faire SFX wD aire it faire SFX wD aire îmes faire SFX wD aire îtes faire SFX wD aire irent faire SFX wD aire erai faire SFX wD aire eras faire SFX wD aire era faire SFX wD aire erons faire SFX wD aire erez faire SFX wD aire eront faire SFX wD aire erais faire SFX wD aire erait faire SFX wD aire erions faire SFX wD aire eriez faire SFX wD aire eraient faire SFX wD aire asse faire SFX wD aire asses faire SFX wD aire assions faire SFX wD aire assiez faire SFX wD aire assent faire SFX wD aire isse faire SFX wD aire isses faire SFX wD aire ît faire SFX wD aire issions faire SFX wD aire issiez faire SFX wD aire issent faire SFX wD aire ais faire SFX wD aire aisons faire SFX wD aire aites faire SFX wF N 13 SFX wF faire faisant faire SFX wF faire fait faire SFX wF faire faits faire SFX wF faire faite faire SFX wF faire faites faire SFX wF faire fais faire SFX wF faire fait faire SFX wF faire faisons faire SFX wF faire faites faire SFX wF faire font faire SFX wF faire fais faire SFX wF faire faisons faire SFX wF faire faites faire SFX wG N 5 SFX wG aire aisant faire SFX wG aire ait faire SFX wG aire aits faire SFX wG aire aite faire SFX wG aire aites faire SFX wL Y 32 SFX wL raire raire/n'q'd'l'm't's' traire SFX wL raire rayant/n'q'l'm't's' traire SFX wL raire rait/L'D'Q' traire SFX wL raire raits/D'Q' traire SFX wL raire raite/L'D'Q' traire SFX wL raire raites/D'Q' traire SFX wL raire rais/n'q'j'l'm't' traire SFX wL raire rait/n'q'l'm't's' traire SFX wL raire rayons/n'q'l't' traire SFX wL raire rayez/n'q'l'm' traire SFX wL raire raient/n'q'l'm't's' traire SFX wL raire rayais/n'q'j'l'm't' traire SFX wL raire rayait/n'q'l'm't's' traire SFX wL raire rayions/n'q'l't' traire SFX wL raire rayiez/n'q'l'm' traire SFX wL raire rayaient/n'q'l'm't's' traire SFX wL raire rairai/n'q'j'l'm't' traire SFX wL raire rairas/n'q'l'm't' traire SFX wL raire raira/n'q'l'm't's' traire SFX wL raire rairons/n'q'l't' traire SFX wL raire rairez/n'q'l'm' traire SFX wL raire rairont/n'q'l'm't's' traire SFX wL raire rairais/n'q'j'l'm't' traire SFX wL raire rairait/n'q'l'm't's' traire SFX wL raire rairions/n'q'l't' traire SFX wL raire rairiez/n'q'l'm' traire SFX wL raire rairaient/n'q'l'm't's' traire SFX wL raire raie/n'q'j'l'm't's' traire SFX wL raire raies/n'q'l'm't' traire SFX wL raire rais/n'l'm't' traire SFX wL raire rayons/n'l' traire SFX wL raire rayez/n'l'm' traire SFX wM N 28 SFX wM aire ayant raire SFX wM aire ait raire SFX wM aire ais raire SFX wM aire ait raire SFX wM aire ayons raire SFX wM aire ayez raire SFX wM aire aient raire SFX wM aire ayais raire SFX wM aire ayait raire SFX wM aire ayions raire SFX wM aire ayiez raire SFX wM aire ayaient raire SFX wM aire airai raire SFX wM aire airas raire SFX wM aire aira raire SFX wM aire airons raire SFX wM aire airez raire SFX wM aire airont raire SFX wM aire airais raire SFX wM aire airait raire SFX wM aire airions raire SFX wM aire airiez raire SFX wM aire airaient raire SFX wM aire aie raire SFX wM aire aies raire SFX wM aire ais raire SFX wM aire ayons raire SFX wM aire ayez raire SFX wN N 39 SFX wN aire aisant aire SFX wN aire ais aire SFX wN aire ait taire SFX wN aire aît plaire SFX wN aire aisons aire SFX wN aire aisez aire SFX wN aire aisent aire SFX wN aire aisais aire SFX wN aire aisait aire SFX wN aire aisions aire SFX wN aire aisiez aire SFX wN aire aisaient aire SFX wN aire us aire SFX wN aire ut aire SFX wN aire ûmes aire SFX wN aire ûtes aire SFX wN aire urent aire SFX wN aire airai aire SFX wN aire airas aire SFX wN aire aira aire SFX wN aire airons aire SFX wN aire airez aire SFX wN aire airont aire SFX wN aire airais aire SFX wN aire airait aire SFX wN aire airions aire SFX wN aire airiez aire SFX wN aire airaient aire SFX wN aire aise aire SFX wN aire aises aire SFX wN aire usse aire SFX wN aire usses aire SFX wN aire ût aire SFX wN aire ussions aire SFX wN aire ussiez aire SFX wN aire ussent aire SFX wN aire ais aire SFX wN aire aisons aire SFX wN aire aisez aire SFX wO N 42 SFX wO aindre aignant aindre SFX wO aindre aint aindre SFX wO aindre aints aindre SFX wO aindre ainte aindre SFX wO aindre aintes aindre SFX wO aindre ains aindre SFX wO aindre aint aindre SFX wO aindre aignons aindre SFX wO aindre aignez aindre SFX wO aindre aignent aindre SFX wO aindre aignais aindre SFX wO aindre aignait aindre SFX wO aindre aignions aindre SFX wO aindre aigniez aindre SFX wO aindre aignaient aindre SFX wO aindre aignis aindre SFX wO aindre aignit aindre SFX wO aindre aignîmes aindre SFX wO aindre aignîtes aindre SFX wO aindre aignirent aindre SFX wO aindre aindrai aindre SFX wO aindre aindras aindre SFX wO aindre aindra aindre SFX wO aindre aindrons aindre SFX wO aindre aindrez aindre SFX wO aindre aindront aindre SFX wO aindre aindrais aindre SFX wO aindre aindrait aindre SFX wO aindre aindrions aindre SFX wO aindre aindriez aindre SFX wO aindre aindraient aindre SFX wO aindre aigne aindre SFX wO aindre aignes aindre SFX wO aindre aignisse aindre SFX wO aindre aignisses aindre SFX wO aindre aignît aindre SFX wO aindre aignissions aindre SFX wO aindre aignissiez aindre SFX wO aindre aignissent aindre SFX wO aindre ains aindre SFX wO aindre aignons aindre SFX wO aindre aignez aindre SFX wP N 42 SFX wP aincre ainquant vaincre SFX wP aincre aincu vaincre SFX wP aincre aincus vaincre SFX wP aincre aincue vaincre SFX wP aincre aincues vaincre SFX wP aincre aincs vaincre SFX wP aincre ainc vaincre SFX wP aincre ainquons vaincre SFX wP aincre ainquez vaincre SFX wP aincre ainquent vaincre SFX wP aincre ainquais vaincre SFX wP aincre ainquait vaincre SFX wP aincre ainquions vaincre SFX wP aincre ainquiez vaincre SFX wP aincre ainquaient vaincre SFX wP aincre ainquis vaincre SFX wP aincre ainquit vaincre SFX wP aincre ainquîmes vaincre SFX wP aincre ainquîtes vaincre SFX wP aincre ainquirent vaincre SFX wP aincre aincrai vaincre SFX wP aincre aincras vaincre SFX wP aincre aincra vaincre SFX wP aincre aincrons vaincre SFX wP aincre aincrez vaincre SFX wP aincre aincront vaincre SFX wP aincre aincrais vaincre SFX wP aincre aincrait vaincre SFX wP aincre aincrions vaincre SFX wP aincre aincriez vaincre SFX wP aincre aincraient vaincre SFX wP aincre ainque vaincre SFX wP aincre ainques vaincre SFX wP aincre ainquisse vaincre SFX wP aincre ainquisses vaincre SFX wP aincre ainquît vaincre SFX wP aincre ainquissions vaincre SFX wP aincre ainquissiez vaincre SFX wP aincre ainquissent vaincre SFX wP aincre aincs vaincre SFX wP aincre ainquons vaincre SFX wP aincre ainquez vaincre SFX wQ Y 42 SFX wQ tre tre/n'q'd'm't's' tre SFX wQ aître aissant/n'q'd'm't's' aître SFX wQ aître ais/n'q'j'm't' aître SFX wQ aître aît/n'q'm't's' aître SFX wQ aître aissons/n'q't' aître SFX wQ aître aissez/n'q'm' aître SFX wQ aître aissent/n'q'm't's' aître SFX wQ aître aissais/n'q'j'm't' aître SFX wQ aître aissait/n'q'm't's' aître SFX wQ aître aissions/n'q't' aître SFX wQ aître aissiez/n'q'm' aître SFX wQ aître aissaient/n'q'm't's' aître SFX wQ aître us/n'q'j'm't' aître SFX wQ aître ut/n'q'm't's' aître SFX wQ aître ûmes/n'q't' aître SFX wQ aître ûtes/n'q'm' aître SFX wQ aître urent/n'q'm't's' aître SFX wQ tre trai/n'q'j'm't' tre SFX wQ tre tras/n'q'm't' tre SFX wQ tre tra/n'q'm't's' tre SFX wQ tre trons/n'q't' tre SFX wQ tre trez/n'q'm' tre SFX wQ tre tront/n'q'm't's' tre SFX wQ tre trais/n'q'j'm't' tre SFX wQ tre trait/n'q'm't's' tre SFX wQ tre trions/n'q't' tre SFX wQ tre triez/n'q'm' tre SFX wQ tre traient/n'q'm't's' tre SFX wQ aître aisse/n'q'j'm't's' aître SFX wQ aître aisses/n'q'm't' aître SFX wQ aître usse/n'q'j'm't' aître SFX wQ aître usses/n'q'm't' aître SFX wQ aître ût/n'q'm't's' aître SFX wQ aître ussions/n'q't' aître SFX wQ aître ussiez/n'q'm' aître SFX wQ aître ussent/n'q'm't's' aître SFX wQ aître ais/n'm' paraître SFX wQ aître ais connaître SFX wQ aître aissons/n' paraître SFX wQ aître aissons connaître SFX wQ aître aissez/n'm' paraître SFX wQ aître aissez connaître SFX wR N 42 SFX wR aître aissant naître SFX wR aître é naître SFX wR aître és naître SFX wR aître ée naître SFX wR aître ées naître SFX wR aître ais naître SFX wR aître aît naître SFX wR aître aissons naître SFX wR aître aissez naître SFX wR aître aissent naître SFX wR aître aissais naître SFX wR aître aissait naître SFX wR aître aissions naître SFX wR aître aissiez naître SFX wR aître aissaient naître SFX wR aître aquis naître SFX wR aître aquit naître SFX wR aître aquîmes naître SFX wR aître aquîtes naître SFX wR aître aquirent naître SFX wR tre trai tre SFX wR tre tras tre SFX wR tre tra tre SFX wR tre trons tre SFX wR tre trez tre SFX wR tre tront tre SFX wR tre trais tre SFX wR tre trait tre SFX wR tre trions tre SFX wR tre triez tre SFX wR tre traient tre SFX wR aître aisse naître SFX wR aître aisses naître SFX wR aître aquisse naître SFX wR aître aquisses naître SFX wR aître aquît naître SFX wR aître aquissions naître SFX wR aître aquissiez naître SFX wR aître aquissent naître SFX wR aître ais naître SFX wR aître aissons naître SFX wR aître aissez naître SFX wS N 42 SFX wS aître aissant paître SFX wS aître u repaître SFX wS aître us repaître SFX wS aître ue repaître SFX wS aître ues repaître SFX wS aître ais paître SFX wS aître aît paître SFX wS aître aissons paître SFX wS aître aissez paître SFX wS aître aissent paître SFX wS aître aissais paître SFX wS aître aissait paître SFX wS aître aissions paître SFX wS aître aissiez paître SFX wS aître aissaient paître SFX wS aître us repaître SFX wS aître ut repaître SFX wS aître ûmes repaître SFX wS aître ûtes repaître SFX wS aître urent repaître SFX wS tre trai tre SFX wS tre tras tre SFX wS tre tra tre SFX wS tre trons tre SFX wS tre trez tre SFX wS tre tront tre SFX wS tre trais tre SFX wS tre trait tre SFX wS tre trions tre SFX wS tre triez tre SFX wS tre traient tre SFX wS aître aisse paître SFX wS aître aisses paître SFX wS aître usse repaître SFX wS aître usses repaître SFX wS aître ût repaître SFX wS aître ussions repaître SFX wS aître ussiez repaître SFX wS aître ussent repaître SFX wS aître ais paître SFX wS aître aissons paître SFX wS aître aissez paître SFX wT N 46 SFX wT roître roissant croître SFX wT roître rû recroître SFX wT roître rûs recroître SFX wT roître rûe recroître SFX wT roître rûes recroître SFX wT roître ru décroître SFX wT roître rus décroître SFX wT roître rue décroître SFX wT roître rues décroître SFX wT roître rois .croître SFX wT roître roît .croître SFX wT roître roissons croître SFX wT roître roissez croître SFX wT roître roissent croître SFX wT roître roissais croître SFX wT roître roissait croître SFX wT roître roissions croître SFX wT roître roissiez croître SFX wT roître roissaient croître SFX wT roître rus .croître SFX wT roître rut .croître SFX wT roître rûmes croître SFX wT roître rûtes croître SFX wT roître rurent .croître SFX wT tre trai tre SFX wT tre tras tre SFX wT tre tra tre SFX wT tre trons tre SFX wT tre trez tre SFX wT tre tront tre SFX wT tre trais tre SFX wT tre trait tre SFX wT tre trions tre SFX wT tre triez tre SFX wT tre traient tre SFX wT roître roisse croître SFX wT roître roisses croître SFX wT roître russe .croître SFX wT roître russes .croître SFX wT roître rût croître SFX wT roître russions .croître SFX wT roître russiez .croître SFX wT roître russent .croître SFX wT roître rois .croître SFX wT roître roissons croître SFX wT roître roissez croître SFX wU N 15 SFX wU roître rû croître SFX wU roître rûs croître SFX wU roître rûe croître SFX wU roître rûes croître SFX wU roître roîs croître SFX wU roître roît croître SFX wU roître rûs croître SFX wU roître rût croître SFX wU roître rûrent croître SFX wU roître rûsse croître SFX wU roître rûsses croître SFX wU roître rûssions croître SFX wU roître rûssiez croître SFX wU roître rûssent croître SFX wU roître roîs croître SFX wV Y 43 SFX wV tre tre/n'q'd'l'm't's' tre SFX wV croître croissant/n'q'd'l'm't's' croître SFX wV croître cru/L'D'Q' croître SFX wV croître crus/D'Q' croître SFX wV croître crue/L'D'Q' croître SFX wV croître crues/D'Q' croître SFX wV croître crois/n'q'j'l'm't' croître SFX wV croître croît/n'q'l's' croître SFX wV croître croissons/n'q'l' croître SFX wV croître croissez/n'q'l' croître SFX wV croître croissent/n'q'l's' croître SFX wV croître croissais/n'q'j'l'm't' croître SFX wV croître croissait/n'q'l's' croître SFX wV croître croissions/n'q'l' croître SFX wV croître croissiez/n'q'l' croître SFX wV croître croissaient/n'q'l's' croître SFX wV croître crus/n'q'j'l'm't' croître SFX wV croître crut/n'q'l's' croître SFX wV croître crûmes/n'q'l' croître SFX wV croître crûtes/n'q'l' croître SFX wV croître crurent/n'q'l's' croître SFX wV tre trai/n'q'j'l'm' tre SFX wV tre tras/n'q'l't' tre SFX wV tre tra/n'q'l's' tre SFX wV tre trons/n'q'l' tre SFX wV tre trez/n'q'l' tre SFX wV tre tront/n'q'l's' tre SFX wV tre trais/n'q'j'l'm't' tre SFX wV tre trait/n'q'l's' tre SFX wV tre trions/n'q'l' tre SFX wV tre triez/n'q'l' tre SFX wV tre traient/n'q'l's' tre SFX wV croître croisse/n'q'j'l'm's' croître SFX wV croître croisses/n'q'l't' croître SFX wV croître crusse/n'q'j'l'm' croître SFX wV croître crusses/n'q'l't' croître SFX wV croître crût/n'q'l's' croître SFX wV croître crussions/n'q'l' croître SFX wV croître crussiez/n'q'l' croître SFX wV croître crussent/n'q'l's' croître SFX wV croître crois/n'l'm' croître SFX wV croître croissons/n'l' croître SFX wV croître croissez/n'l'm' croître SFX xA N 42 SFX xA roire royant croire SFX xA roire ru croire SFX xA roire rus croire SFX xA roire rue croire SFX xA roire rues croire SFX xA roire rois croire SFX xA roire roit croire SFX xA roire royons croire SFX xA roire royez croire SFX xA roire roient croire SFX xA roire royais croire SFX xA roire royait croire SFX xA roire royions croire SFX xA roire royiez croire SFX xA roire royaient croire SFX xA roire rus croire SFX xA roire rut croire SFX xA roire rûmes croire SFX xA roire rûtes croire SFX xA roire rurent croire SFX xA roire roirai croire SFX xA roire roiras croire SFX xA roire roira croire SFX xA roire roirons croire SFX xA roire roirez croire SFX xA roire roiront croire SFX xA roire roirais croire SFX xA roire roirait croire SFX xA roire roirions croire SFX xA roire roiriez croire SFX xA roire roiraient croire SFX xA roire roie croire SFX xA roire roies croire SFX xA roire russe croire SFX xA roire russes croire SFX xA roire rût croire SFX xA roire russions croire SFX xA roire russiez croire SFX xA roire russent croire SFX xA roire rois croire SFX xA roire royons croire SFX xA roire royez croire SFX xC N 42 SFX xC oire uvant boire SFX xC oire u boire SFX xC oire us boire SFX xC oire ue boire SFX xC oire ues boire SFX xC oire ois boire SFX xC oire oit boire SFX xC oire uvons boire SFX xC oire uvez boire SFX xC oire oivent boire SFX xC oire uvais boire SFX xC oire uvait boire SFX xC oire uvions boire SFX xC oire uviez boire SFX xC oire uvaient boire SFX xC oire us boire SFX xC oire ut boire SFX xC oire ûmes boire SFX xC oire ûtes boire SFX xC oire urent boire SFX xC oire oirai boire SFX xC oire oiras boire SFX xC oire oira boire SFX xC oire oirons boire SFX xC oire oirez boire SFX xC oire oiront boire SFX xC oire oirais boire SFX xC oire oirait boire SFX xC oire oirions boire SFX xC oire oiriez boire SFX xC oire oiraient boire SFX xC oire oive boire SFX xC oire oives boire SFX xC oire usse boire SFX xC oire usses boire SFX xC oire ût boire SFX xC oire ussions boire SFX xC oire ussiez boire SFX xC oire ussent boire SFX xC oire ois boire SFX xC oire uvons boire SFX xC oire uvez boire SFX xD Y 43 SFX xD boire boire/m't's' boire SFX xD boire buvant/m't's' boire SFX xD boire bu boire SFX xD boire bus boire SFX xD boire bue boire SFX xD boire bues boire SFX xD boire bois/m't' boire SFX xD boire boit/s' boire SFX xD boire buvons boire SFX xD boire buvez boire SFX xD boire boivent/s' boire SFX xD boire buvais/m't' boire SFX xD boire buvait/s' boire SFX xD boire buvions boire SFX xD boire buviez boire SFX xD boire buvaient/s' boire SFX xD boire bus/m't' boire SFX xD boire but/s' boire SFX xD boire bûmes boire SFX xD boire bûtes boire SFX xD boire burent/s' boire SFX xD boire boirai/m' boire SFX xD boire boiras/t' boire SFX xD boire boira/s' boire SFX xD boire boirons boire SFX xD boire boirez boire SFX xD boire boiront/s' boire SFX xD boire boirais/m't' boire SFX xD boire boirait/s' boire SFX xD boire boirions boire SFX xD boire boiriez boire SFX xD boire boiraient/s' boire SFX xD boire boive/m's' boire SFX xD boire boives/t' boire SFX xD boire busse/m' boire SFX xD boire busses/t' boire SFX xD boire bût/s' boire SFX xD boire bussions boire SFX xD boire bussiez boire SFX xD boire bussent/s' boire SFX xD boire bois/t' boire SFX xD boire buvons boire SFX xD boire buvez boire SFX xJ N 3 SFX xJ clure clus clure SFX xJ clure cluse clure SFX xJ clure cluses clure SFX xK Y 40 SFX xK clure clure/n'q'd'l'm't's' clure SFX xK clure cluant/n'q'l'm't's' clure SFX xK clure clus/L'D'Q' clure SFX xK clure cluse/L'D'Q' clure SFX xK clure cluses/D'Q' clure SFX xK clure clus/n'q'j'l' clure SFX xK clure clut/n'q'l' clure SFX xK clure cluons/n'q'l' clure SFX xK clure cluez/n'q'l' clure SFX xK clure cluent/n'q'l' clure SFX xK clure cluais/n'q'j'l' clure SFX xK clure cluait/n'q'l' clure SFX xK clure cluions/n'q'l' clure SFX xK clure cluiez/n'q'l' clure SFX xK clure cluaient/n'q'l' clure SFX xK clure clûmes/n'q'l' clure SFX xK clure clûtes/n'q'l' clure SFX xK clure clurent/n'q'l' clure SFX xK clure clurai/n'q'j'l' clure SFX xK clure cluras/n'q'l' clure SFX xK clure clura/n'q'l' clure SFX xK clure clurons/n'q'l' clure SFX xK clure clurez/n'q'l' clure SFX xK clure cluront/n'q'l' clure SFX xK clure clurais/n'q'j'l' clure SFX xK clure clurait/n'q'l' clure SFX xK clure clurions/n'q'l' clure SFX xK clure cluriez/n'q'l' clure SFX xK clure cluraient/n'q'l' clure SFX xK clure clue/n'q'j'l' clure SFX xK clure clues/n'q'l' clure SFX xK clure clusse/n'q'j'l' clure SFX xK clure clusses/n'q'l' clure SFX xK clure clût/n'q'l' clure SFX xK clure clussions/n'q'l' clure SFX xK clure clussiez/n'q'l' clure SFX xK clure clussent/n'q'l' clure SFX xK clure clus/n'l' clure SFX xK clure cluons/n'l' clure SFX xK clure cluez/n'l' clure SFX xL Y 44 SFX xL clure clure/n'q'd'l'm't's' clure SFX xL clure cluant/n'q'l'm't's' clure SFX xL clure clus/L'D'Q' inclure SFX xL clure cluse/L'D'Q' inclure SFX xL clure cluses/D'Q' inclure SFX xL clure clu/L'D'Q' [eo].clure SFX xL clure clus/D'Q' [eo].clure SFX xL clure clue/L'D'Q' [eo].clure SFX xL clure clues/D'Q' [eo].clure SFX xL clure clus/n'q'j'l'm't' clure SFX xL clure clut/n'q'l'm't's' clure SFX xL clure cluons/n'q'l't' clure SFX xL clure cluez/n'q'l'm' clure SFX xL clure cluent/n'q'l'm't's' clure SFX xL clure cluais/n'q'j'l'm't' clure SFX xL clure cluait/n'q'l'm't's' clure SFX xL clure cluions/n'q'l't' clure SFX xL clure cluiez/n'q'l'm' clure SFX xL clure cluaient/n'q'l'm't's' clure SFX xL clure clûmes/n'q'l't' clure SFX xL clure clûtes/n'q'l'm' clure SFX xL clure clurent/n'q'l'm't's' clure SFX xL clure clurai/n'q'j'l'm't' clure SFX xL clure cluras/n'q'l'm't' clure SFX xL clure clura/n'q'l'm't's' clure SFX xL clure clurons/n'q'l't' clure SFX xL clure clurez/n'q'l'm' clure SFX xL clure cluront/n'q'l'm't's' clure SFX xL clure clurais/n'q'j'l'm't' clure SFX xL clure clurait/n'q'l'm't's' clure SFX xL clure clurions/n'q'l't' clure SFX xL clure cluriez/n'q'l'm' clure SFX xL clure cluraient/n'q'l'm't's' clure SFX xL clure clue/n'q'j'l'm't's' clure SFX xL clure clues/n'l'm't' clure SFX xL clure clusse/n'q'j'l'm't' clure SFX xL clure clusses/n'q'l'm't' clure SFX xL clure clût/n'q'l'm't's' clure SFX xL clure clussions/n'q'l't' clure SFX xL clure clussiez/n'q'l'm' clure SFX xL clure clussent/n'q'l'm't's' clure SFX xL clure clus/n'l'm't' clure SFX xL clure cluons/n'l' clure SFX xL clure cluez/n'l'm' clure SFX xM N 14 SFX xM ourdre ourdant sourdre SFX xM ourdre ourd sourdre SFX xM ourdre ourdent sourdre SFX xM ourdre ourdait sourdre SFX xM ourdre ourdaient sourdre SFX xM ourdre ourdit sourdre SFX xM ourdre ourdirent sourdre SFX xM ourdre ourdra sourdre SFX xM ourdre ourdront sourdre SFX xM ourdre ourdrait sourdre SFX xM ourdre ourdraient sourdre SFX xM ourdre ourde sourdre SFX xM ourdre ourdît sourdre SFX xM ourdre ourdissent sourdre SFX xN Y 46 SFX xN soudre soudre/n'q'd'l'm't's' soudre SFX xN soudre solvant/n'q'l'm't's' soudre SFX xN soudre solu résoudre SFX xN soudre solus résoudre SFX xN soudre solue résoudre SFX xN soudre solues résoudre SFX xN soudre sous/L'D'Q' soudre SFX xN soudre soute/L'D'Q' soudre SFX xN soudre soutes/D'Q' soudre SFX xN soudre sous/n'q'j'l'm't' soudre SFX xN soudre sout/n'q'l'm't's' soudre SFX xN soudre solvons/n'q'l't' soudre SFX xN soudre solvez/n'q'l'm' soudre SFX xN soudre solvent/n'q'l'm't's' soudre SFX xN soudre solvais/n'q'j'l'm't' soudre SFX xN soudre solvait/n'q'l'm't's' soudre SFX xN soudre solvions/n'q'l't' soudre SFX xN soudre solviez/n'q'l'm' soudre SFX xN soudre solvaient/n'q'l'm't's' soudre SFX xN soudre solus/n'q'j'l'm't' soudre SFX xN soudre solut/n'q'l'm't's' soudre SFX xN soudre solûmes/n'q'l't' soudre SFX xN soudre solûtes/n'q'l'm' soudre SFX xN soudre solurent/n'q'l'm't's' soudre SFX xN soudre soudrai/n'q'j'l'm't' soudre SFX xN soudre soudras/n'q'l'm't' soudre SFX xN soudre soudra/n'q'l'm't's' soudre SFX xN soudre soudrons/n'q'l't' soudre SFX xN soudre soudrez/n'q'l'm' soudre SFX xN soudre soudront/n'q'l'm't's' soudre SFX xN soudre soudrais/n'q'j'l'm't' soudre SFX xN soudre soudrait/n'q'l'm't's' soudre SFX xN soudre soudrions/n'q'l't' soudre SFX xN soudre soudriez/n'q'l'm' soudre SFX xN soudre soudraient/n'q'l'm't's' soudre SFX xN soudre solve/n'q'j'l'm't's' soudre SFX xN soudre solves/n'l'm't' soudre SFX xN soudre solusse/n'q'j'l'm't' soudre SFX xN soudre solusses/n'q'l'm't' soudre SFX xN soudre solût/n'q'l'm't's' soudre SFX xN soudre solussions/n'q'l't' soudre SFX xN soudre solussiez/n'q'l'm' soudre SFX xN soudre solussent/n'q'l'm't's' soudre SFX xN soudre sous/n'l'm' soudre SFX xN soudre solvons/n'l' soudre SFX xN soudre solvez/n'l'm' soudre SFX xO N 42 SFX xO oudre ousant coudre SFX xO oudre ousu coudre SFX xO oudre ousus coudre SFX xO oudre ousue coudre SFX xO oudre ousues coudre SFX xO oudre ouds coudre SFX xO oudre oud coudre SFX xO oudre ousons coudre SFX xO oudre ousez coudre SFX xO oudre ousent coudre SFX xO oudre ousais coudre SFX xO oudre ousait coudre SFX xO oudre ousions coudre SFX xO oudre ousiez coudre SFX xO oudre ousaient coudre SFX xO oudre ousis coudre SFX xO oudre ousit coudre SFX xO oudre ousîmes coudre SFX xO oudre ousîtes coudre SFX xO oudre ousirent coudre SFX xO oudre oudrai coudre SFX xO oudre oudras coudre SFX xO oudre oudra coudre SFX xO oudre oudrons coudre SFX xO oudre oudrez coudre SFX xO oudre oudront coudre SFX xO oudre oudrais coudre SFX xO oudre oudrait coudre SFX xO oudre oudrions coudre SFX xO oudre oudriez coudre SFX xO oudre oudraient coudre SFX xO oudre ouse coudre SFX xO oudre ouses coudre SFX xO oudre ousisse coudre SFX xO oudre ousisses coudre SFX xO oudre ousît coudre SFX xO oudre ousissions coudre SFX xO oudre ousissiez coudre SFX xO oudre ousissent coudre SFX xO oudre ouds coudre SFX xO oudre ousons coudre SFX xO oudre ousez coudre SFX xP Y 43 SFX xP oudre oudre/n'q'd'l' moudre SFX xP oudre oulant/n'q'l' moudre SFX xP oudre oulu/L'D'Q' moudre SFX xP oudre oulus/D'Q' moudre SFX xP oudre oulue/L'D'Q' moudre SFX xP oudre oulues/D'Q' moudre SFX xP oudre ouds/n'q'l' moudre SFX xP oudre oud/n'q'l' moudre SFX xP oudre oulons/n'q'l' moudre SFX xP oudre oulez/n'q'l' moudre SFX xP oudre oulent/n'q'l' moudre SFX xP oudre oulais/n'q'l' moudre SFX xP oudre oulait/n'q'l' moudre SFX xP oudre oulions/n'q'l' moudre SFX xP oudre ouliez/n'q'l' moudre SFX xP oudre oulaient/n'q'l' moudre SFX xP oudre oulus/n'q'l' moudre SFX xP oudre oulut/n'q'l' moudre SFX xP oudre oulûmes/n'q'l' moudre SFX xP oudre oulûtes/n'q'l' moudre SFX xP oudre oulurent/n'q'l' moudre SFX xP oudre oudrai/n'q'l' moudre SFX xP oudre oudras/n'q'l' moudre SFX xP oudre oudra/n'q'l' moudre SFX xP oudre oudrons/n'q'l' moudre SFX xP oudre oudrez/n'q'l' moudre SFX xP oudre oudront/n'q'l' moudre SFX xP oudre oudrais/n'q'l' moudre SFX xP oudre oudrait/n'q'l' moudre SFX xP oudre oudrions/n'q'l' moudre SFX xP oudre oudriez/n'q'l' moudre SFX xP oudre oudraient/n'q'l' moudre SFX xP oudre oule/n'q'l' moudre SFX xP oudre oules/n'l' moudre SFX xP oudre oulusse/n'q'l' moudre SFX xP oudre oulusses/n'q'l' moudre SFX xP oudre oulût/n'q'l' moudre SFX xP oudre oulussions/n'q'l' moudre SFX xP oudre oulussiez/n'q'l' moudre SFX xP oudre oulussent/n'q'l' moudre SFX xP oudre ouds/n'l'm' moudre SFX xP oudre oulons/n'l' moudre SFX xP oudre oulez/n'l'm' moudre SFX xQ N 42 SFX xQ uivre uivant suivre SFX xQ uivre uivi suivre SFX xQ uivre uivis suivre SFX xQ uivre uivie suivre SFX xQ uivre uivies suivre SFX xQ uivre uis suivre SFX xQ uivre uit suivre SFX xQ uivre uivons suivre SFX xQ uivre uivez suivre SFX xQ uivre uivent suivre SFX xQ uivre uivais suivre SFX xQ uivre uivait suivre SFX xQ uivre uivions suivre SFX xQ uivre uiviez suivre SFX xQ uivre uivaient suivre SFX xQ uivre uivis suivre SFX xQ uivre uivit suivre SFX xQ uivre uivîmes suivre SFX xQ uivre uivîtes suivre SFX xQ uivre uivirent suivre SFX xQ uivre uivrai suivre SFX xQ uivre uivras suivre SFX xQ uivre uivra suivre SFX xQ uivre uivrons suivre SFX xQ uivre uivrez suivre SFX xQ uivre uivront suivre SFX xQ uivre uivrais suivre SFX xQ uivre uivrait suivre SFX xQ uivre uivrions suivre SFX xQ uivre uivriez suivre SFX xQ uivre uivraient suivre SFX xQ uivre uive suivre SFX xQ uivre uives suivre SFX xQ uivre uivisse suivre SFX xQ uivre uivisses suivre SFX xQ uivre uivît suivre SFX xQ uivre uivissions suivre SFX xQ uivre uivissiez suivre SFX xQ uivre uivissent suivre SFX xQ uivre uis suivre SFX xQ uivre uivons suivre SFX xQ uivre uivez suivre SFX xR Y 16 SFX xR suivre suivre/s' suivre SFX xR suivre suivant/s' suivre SFX xR suivre suivi suivre SFX xR suivre suit/s' suivre SFX xR suivre suivent/s' suivre SFX xR suivre suivait/s' suivre SFX xR suivre suivaient/s' suivre SFX xR suivre suivit/s' suivre SFX xR suivre suivirent/s' suivre SFX xR suivre suivra/s' suivre SFX xR suivre suivront/s' suivre SFX xR suivre suivrait/s' suivre SFX xR suivre suivraient/s' suivre SFX xR suivre suive/s' suivre SFX xR suivre suivît/s' suivre SFX xR suivre suivissent/s' suivre SFX xS N 38 SFX xS ivre ivant vivre SFX xS ivre is vivre SFX xS ivre it vivre SFX xS ivre ivons vivre SFX xS ivre ivez vivre SFX xS ivre ivent vivre SFX xS ivre ivais vivre SFX xS ivre ivait vivre SFX xS ivre ivions vivre SFX xS ivre iviez vivre SFX xS ivre ivaient vivre SFX xS ivre écus vivre SFX xS ivre écut vivre SFX xS ivre écûmes vivre SFX xS ivre écûtes vivre SFX xS ivre écurent vivre SFX xS ivre ivrai vivre SFX xS ivre ivras vivre SFX xS ivre ivra vivre SFX xS ivre ivrons vivre SFX xS ivre ivrez vivre SFX xS ivre ivront vivre SFX xS ivre ivrais vivre SFX xS ivre ivrait vivre SFX xS ivre ivrions vivre SFX xS ivre ivriez vivre SFX xS ivre ivraient vivre SFX xS ivre ive vivre SFX xS ivre ives vivre SFX xS ivre écusse vivre SFX xS ivre écusses vivre SFX xS ivre écût vivre SFX xS ivre écussions vivre SFX xS ivre écussiez vivre SFX xS ivre écussent vivre SFX xS ivre is vivre SFX xS ivre ivons vivre SFX xS ivre ivez vivre SFX y1 Y 43 SFX y1 crire crire/n'q'd'l'm't's' crire SFX y1 crire crivant/n'q'l'm't's' crire SFX y1 crire crit/L'D'Q' crire SFX y1 crire crits/D'Q' crire SFX y1 crire crite/L'D'Q' crire SFX y1 crire crites/D'Q' crire SFX y1 crire cris/n'q'j'l'm't' crire SFX y1 crire crit/n'q'l'm't's' crire SFX y1 crire crivons/n'q'l't' crire SFX y1 crire crivez/n'q'l'm' crire SFX y1 crire crivent/n'q'l'm't's' crire SFX y1 crire crivais/n'q'j'l'm't' crire SFX y1 crire crivait/n'q'l'm't's' crire SFX y1 crire crivions/n'q'l't' crire SFX y1 crire criviez/n'q'l'm' crire SFX y1 crire crivaient/n'q'l'm't's' crire SFX y1 crire crivis/n'q'j'l'm't' crire SFX y1 crire crivit/n'q'l'm't's' crire SFX y1 crire crivîmes/n'q'l't' crire SFX y1 crire crivîtes/n'q'l'm' crire SFX y1 crire crivirent/n'q'l'm't's' crire SFX y1 crire crirai/n'q'j'l'm't' crire SFX y1 crire criras/n'q'l'm't' crire SFX y1 crire crira/n'q'l'm't's' crire SFX y1 crire crirons/n'q'l't' crire SFX y1 crire crirez/n'q'l'm' crire SFX y1 crire criront/n'q'l'm't's' crire SFX y1 crire crirais/n'q'j'l'm't' crire SFX y1 crire crirait/n'q'l'm't's' crire SFX y1 crire cririons/n'q'l't' crire SFX y1 crire cririez/n'q'l'm' crire SFX y1 crire criraient/n'q'l'm't's' crire SFX y1 crire crive/n'q'j'l'm't's' crire SFX y1 crire crives/n'l'm't' crire SFX y1 crire crivisse/n'q'j'l'm't' crire SFX y1 crire crivisses/n'q'l'm't' crire SFX y1 crire crivît/n'q'l'm't's' crire SFX y1 crire crivissions/n'q'l't' crire SFX y1 crire crivissiez/n'q'l'm' crire SFX y1 crire crivissent/n'q'l'm't's' crire SFX y1 crire cris/n'l'm't' crire SFX y1 crire crivons/n'l' crire SFX y1 crire crivez/n'l'm' crire SFX yA N 42 SFX yA ire isant lire SFX yA ire u lire SFX yA ire us lire SFX yA ire ue lire SFX yA ire ues lire SFX yA ire is lire SFX yA ire it lire SFX yA ire isons lire SFX yA ire isez lire SFX yA ire isent lire SFX yA ire isais lire SFX yA ire isait lire SFX yA ire isions lire SFX yA ire isiez lire SFX yA ire isaient lire SFX yA ire us lire SFX yA ire ut lire SFX yA ire ûmes lire SFX yA ire ûtes lire SFX yA ire urent lire SFX yA ire irai lire SFX yA ire iras lire SFX yA ire ira lire SFX yA ire irons lire SFX yA ire irez lire SFX yA ire iront lire SFX yA ire irais lire SFX yA ire irait lire SFX yA ire irions lire SFX yA ire iriez lire SFX yA ire iraient lire SFX yA ire ise lire SFX yA ire ises lire SFX yA ire usse lire SFX yA ire usses lire SFX yA ire ût lire SFX yA ire ussions lire SFX yA ire ussiez lire SFX yA ire ussent lire SFX yA ire is lire SFX yA ire isons lire SFX yA ire isez lire SFX yB Y 43 SFX yB lire lire/n'q'd'l'm't's' lire SFX yB lire lisant/n'q'l'm't's' lire SFX yB lire lu/L'D'Q' lire SFX yB lire lus/D'Q' lire SFX yB lire lue/L'D'Q' lire SFX yB lire lues/D'Q' lire SFX yB lire lis/n'q'j'l'm't' lire SFX yB lire lit/n'q'l'm't's' lire SFX yB lire lisons/n'q'l't' lire SFX yB lire lisez/n'q'l'm' lire SFX yB lire lisent/n'q'l'm't's' lire SFX yB lire lisais/n'q'j'l'm't' lire SFX yB lire lisait/n'q'l'm't's' lire SFX yB lire lisions/n'q'l't' lire SFX yB lire lisiez/n'q'l'm' lire SFX yB lire lisaient/n'q'l'm't's' lire SFX yB lire lus/n'q'j'l'm't' lire SFX yB lire lut/n'q'l'm't's' lire SFX yB lire lûmes/n'q'l't' lire SFX yB lire lûtes/n'q'l'm' lire SFX yB lire lurent/n'q'l'm't's' lire SFX yB lire lirai/n'q'j'l'm't' lire SFX yB lire liras/n'q'l'm't' lire SFX yB lire lira/n'q'l'm't's' lire SFX yB lire lirons/n'q'l't' lire SFX yB lire lirez/n'q'l'm' lire SFX yB lire liront/n'q'l'm't's' lire SFX yB lire lirais/n'q'j'l'm't' lire SFX yB lire lirait/n'q'l'm't's' lire SFX yB lire lirions/n'q'l't' lire SFX yB lire liriez/n'q'l'm' lire SFX yB lire liraient/n'q'l'm't's' lire SFX yB lire lise/n'q'j'l'm't's' lire SFX yB lire lises/n'l'm't' lire SFX yB lire lusse/n'q'j'l'm't' lire SFX yB lire lusses/n'q'l'm't' lire SFX yB lire lût/n'q'l'm't's' lire SFX yB lire lussions/n'q'l't' lire SFX yB lire lussiez/n'q'l'm' lire SFX yB lire lussent/n'q'l'm't's' lire SFX yB lire lis/n'l'm' lire SFX yB lire lisons/n'l' lire SFX yB lire lisez/n'l'm' lire SFX yC N 40 SFX yC ire isant dire SFX yC ire it dire SFX yC ire its dire SFX yC ire ite dire SFX yC ire ites dire SFX yC ire is dire SFX yC ire it dire SFX yC ire isons dire SFX yC ire ites dire SFX yC ire isent dire SFX yC ire isais dire SFX yC ire isait dire SFX yC ire isions dire SFX yC ire isiez dire SFX yC ire isaient dire SFX yC ire îmes dire SFX yC ire îtes dire SFX yC ire irent dire SFX yC ire irai dire SFX yC ire iras dire SFX yC ire ira dire SFX yC ire irons dire SFX yC ire irez dire SFX yC ire iront dire SFX yC ire irais dire SFX yC ire irait dire SFX yC ire irions dire SFX yC ire iriez dire SFX yC ire iraient dire SFX yC ire ise dire SFX yC ire ises dire SFX yC ire isse dire SFX yC ire isses dire SFX yC ire ît dire SFX yC ire issions dire SFX yC ire issiez dire SFX yC ire issent dire SFX yC ire is dire SFX yC ire isons dire SFX yC ire ites dire SFX yD Y 41 SFX yD dire dire/n'q'd'l'm't's' dire SFX yD dire disant/n'q'l'm't's' dire SFX yD dire dit/L'D'Q' dire SFX yD dire dits/D'Q' dire SFX yD dire dite/L'D'Q' dire SFX yD dire dites/D'Q' dire SFX yD dire dis/n'q'j'l'm't' dire SFX yD dire dit/n'q'l'm't's' dire SFX yD dire disons/n'q'l't' dire SFX yD dire disez/n'q'l'm' dire SFX yD dire disent/n'q'l'm't's' dire SFX yD dire disais/n'q'j'l'm't' dire SFX yD dire disait/n'q'l'm't's' dire SFX yD dire disions/n'q'l't' dire SFX yD dire disiez/n'q'l'm' dire SFX yD dire disaient/n'q'l'm't's' dire SFX yD dire dîmes/n'q'l't' dire SFX yD dire dîtes/n'q'l'm' dire SFX yD dire dirent/n'q'l'm't's' dire SFX yD dire dirai/n'q'j'l'm't' dire SFX yD dire diras/n'q'l'm't' dire SFX yD dire dira/n'q'l'm't's' dire SFX yD dire dirons/n'q'l't' dire SFX yD dire direz/n'q'l'm' dire SFX yD dire diront/n'q'l'm't's' dire SFX yD dire dirais/n'q'j'l'm't' dire SFX yD dire dirait/n'q'l'm't's' dire SFX yD dire dirions/n'q'l't' dire SFX yD dire diriez/n'q'l'm' dire SFX yD dire diraient/n'q'l'm't's' dire SFX yD dire dise/n'q'j'l'm't's' dire SFX yD dire dises/n'l'm't' dire SFX yD dire disse/n'q'j'l'm't' dire SFX yD dire disses/n'q'l'm't' dire SFX yD dire dît/n'q'l'm't's' dire SFX yD dire dissions/n'q'l't' dire SFX yD dire dissiez/n'q'l'm' dire SFX yD dire dissent/n'q'l'm't's' dire SFX yD dire dis/n'l'm't' dire SFX yD dire disons/n'l' dire SFX yD dire disez/n'l'm' dire SFX yE N 37 SFX yE édire édisant édire SFX yE édire édit édire SFX yE édire édis édire SFX yE édire édit édire SFX yE édire édisons édire SFX yE édire édisez édire SFX yE édire édisent édire SFX yE édire édisais édire SFX yE édire édisait édire SFX yE édire édisions édire SFX yE édire édisiez édire SFX yE édire édisaient édire SFX yE édire édîmes édire SFX yE édire édîtes édire SFX yE édire édirent édire SFX yE édire édirai édire SFX yE édire édiras édire SFX yE édire édira édire SFX yE édire édirons édire SFX yE édire édirez édire SFX yE édire édiront édire SFX yE édire édirais édire SFX yE édire édirait édire SFX yE édire édirions édire SFX yE édire édiriez édire SFX yE édire édiraient édire SFX yE édire édise édire SFX yE édire édises édire SFX yE édire édisse édire SFX yE édire édisses édire SFX yE édire édît édire SFX yE édire édissions édire SFX yE édire édissiez édire SFX yE édire édissent édire SFX yE édire édis édire SFX yE édire édisons édire SFX yE édire édisez édire SFX yF N 36 SFX yF audire audissant udire SFX yF audire audit udire SFX yF audire audits udire SFX yF audire audite udire SFX yF audire audites udire SFX yF audire audis udire SFX yF audire audit udire SFX yF audire audissons udire SFX yF audire audissez udire SFX yF audire audissent udire SFX yF audire audissais udire SFX yF audire audissait udire SFX yF audire audissions udire SFX yF audire audissiez udire SFX yF audire audissaient udire SFX yF audire audîmes udire SFX yF audire audîtes udire SFX yF audire audirent udire SFX yF audire audirai udire SFX yF audire audiras udire SFX yF audire audira udire SFX yF audire audirons udire SFX yF audire audirez udire SFX yF audire audiront udire SFX yF audire audirais udire SFX yF audire audirait udire SFX yF audire audirions udire SFX yF audire audiriez udire SFX yF audire audiraient udire SFX yF audire audisse udire SFX yF audire audisses udire SFX yF audire audisse udire SFX yF audire audît udire SFX yF audire audis udire SFX yF audire audissons udire SFX yF audire audissez udire SFX yG Y 38 SFX yG dire dire/m't's' dire SFX yG dire disant/m't's' dire SFX yG dire dit dire SFX yG dire dis/m't' dire SFX yG dire dit/s' dire SFX yG dire disons dire SFX yG dire disez dire SFX yG dire disent/s' dire SFX yG dire disais/m't' dire SFX yG dire disait/s' dire SFX yG dire disions dire SFX yG dire disiez dire SFX yG dire disaient/s' dire SFX yG dire dîmes dire SFX yG dire dîtes dire SFX yG dire dirent/s' dire SFX yG dire dirai/m' dire SFX yG dire diras/t' dire SFX yG dire dira/s' dire SFX yG dire dirons dire SFX yG dire direz dire SFX yG dire diront/s' dire SFX yG dire dirais/m't' dire SFX yG dire dirait/s' dire SFX yG dire dirions dire SFX yG dire diriez dire SFX yG dire diraient/s' dire SFX yG dire dise/m's' dire SFX yG dire dises/t' dire SFX yG dire disse/m' dire SFX yG dire disses/t' dire SFX yG dire dît/s' dire SFX yG dire dissions dire SFX yG dire dissiez dire SFX yG dire dissent/s' dire SFX yG dire dis/t' dire SFX yG dire disons dire SFX yG dire disez dire SFX yJ N 7 SFX yJ ruire ruissant uire SFX yJ ruire rui uire SFX yJ ruire ruit uire SFX yJ ruire ruissent uire SFX yJ ruire ruissait uire SFX yJ ruire ruissaient uire SFX yJ ruire ruisse uire SFX yK N 4 SFX yK bduire bduit uire SFX yK bduire bduits uire SFX yK bduire bduite uire SFX yK bduire bduites uire SFX yL Y 43 SFX yL uire uire/n'q'd'l'm't's' uire SFX yL uire uisant/n'q'l'm't's' uire SFX yL uire uit/L'D'Q' uire SFX yL uire uits/D'Q' uire SFX yL uire uite/L'D'Q' uire SFX yL uire uites/D'Q' uire SFX yL uire uis/n'q'j'l'm't' uire SFX yL uire uit/n'q'l'm't's' uire SFX yL uire uisons/n'q'l't' uire SFX yL uire uisez/n'q'l'm' uire SFX yL uire uisent/n'q'l'm't's' uire SFX yL uire uisais/n'q'j'l'm't' uire SFX yL uire uisait/n'q'l'm't's' uire SFX yL uire uisions/n'q'l't' uire SFX yL uire uisiez/n'q'l'm' uire SFX yL uire uisaient/n'q'l'm't's' uire SFX yL uire uisis/n'q'j'l'm't' uire SFX yL uire uisit/n'q'l'm't's' uire SFX yL uire uisîmes/n'q'l't' uire SFX yL uire uisîtes/n'q'l'm' uire SFX yL uire uisirent/n'q'l'm't's' uire SFX yL uire uirai/n'q'j'l't' uire SFX yL uire uiras/n'q'l'm' uire SFX yL uire uira/n'q'l'm't's' uire SFX yL uire uirons/n'q'l't' uire SFX yL uire uirez/n'q'l'm' uire SFX yL uire uiront/n'q'l'm't's' uire SFX yL uire uirais/n'q'j'l'm't' uire SFX yL uire uirait/n'q'l'm't's' uire SFX yL uire uirions/n'q'l't' uire SFX yL uire uiriez/n'q'l'm' uire SFX yL uire uiraient/n'q'l'm't's' uire SFX yL uire uise/n'q'j'l'm't's' uire SFX yL uire uises/n'l'm' uire SFX yL uire uisisse/n'q'j'l't' uire SFX yL uire uisisses/n'q'l'm' uire SFX yL uire uisît/n'q'l'm't's' uire SFX yL uire uisissions/n'q'l't' uire SFX yL uire uisissiez/n'q'l'm' uire SFX yL uire uisissent/n'q'l'm't's' uire SFX yL uire uis/n'l'm' uire SFX yL uire uisons/n'l' uire SFX yL uire uisez/n'l'm' uire SFX yM Y 43 SFX yM uire uire/n'q'd'l'm't's' uire SFX yM uire uisant/n'q'l'm't's' uire SFX yM uire uit/L'D'Q' uire SFX yM uire uits/D'Q' uire SFX yM uire uite/L'D'Q' uire SFX yM uire uites/D'Q' uire SFX yM uire uis/n'q'j'l'm't' uire SFX yM uire uit/n'q'l'm't's' uire SFX yM uire uisons/n'q'l't' uire SFX yM uire uisez/n'q'l'm' uire SFX yM uire uisent/n'q'l'm't's' uire SFX yM uire uisais/n'q'j'l'm't' uire SFX yM uire uisait/n'q'l'm't's' uire SFX yM uire uisions/n'q'l't' uire SFX yM uire uisiez/n'q'l'm' uire SFX yM uire uisaient/n'q'l'm't's' uire SFX yM uire uisis/n'q'j'l'm't' uire SFX yM uire uisit/n'q'l'm't's' uire SFX yM uire uisîmes/n'q'l't' uire SFX yM uire uisîtes/n'q'l'm' uire SFX yM uire uisirent/n'q'l'm't's' uire SFX yM uire uirai/n'q'j'l'm't' uire SFX yM uire uiras/n'q'l'm't' uire SFX yM uire uira/n'q'l'm't's' uire SFX yM uire uirons/n'q'l't' uire SFX yM uire uirez/n'q'l'm' uire SFX yM uire uiront/n'q'l'm't's' uire SFX yM uire uirais/n'q'j'l'm't' uire SFX yM uire uirait/n'q'l'm't's' uire SFX yM uire uirions/n'q'l't' uire SFX yM uire uiriez/n'q'l'm' uire SFX yM uire uiraient/n'q'l'm't's' uire SFX yM uire uise/n'q'j'l'm't's' uire SFX yM uire uises/n'l'm't' uire SFX yM uire uisisse/n'q'j'l'm't' uire SFX yM uire uisisses/n'q'l'm't' uire SFX yM uire uisît/n'q'l'm't's' uire SFX yM uire uisissions/n'q'l't' uire SFX yM uire uisissiez/n'q'l'm' uire SFX yM uire uisissent/n'q'l'm't's' uire SFX yM uire uis/n'l'm't' uire SFX yM uire uisons/n'l' uire SFX yM uire uisez/n'l'm' uire SFX yN Y 33 SFX yN truire truire/s' uire SFX yN truire truisant/s' uire SFX yN truire truit uire SFX yN truire truits uire SFX yN truire truite uire SFX yN truire truites uire SFX yN truire truit/s' uire SFX yN truire truisons uire SFX yN truire truisez uire SFX yN truire truisent/s' uire SFX yN truire truisait/s' uire SFX yN truire truisions uire SFX yN truire truisiez uire SFX yN truire truisaient/s' uire SFX yN truire truisit/s' uire SFX yN truire truisîmes uire SFX yN truire truisîtes uire SFX yN truire truisirent/s' uire SFX yN truire truira/s' uire SFX yN truire truirons uire SFX yN truire truirez uire SFX yN truire truiront/s' uire SFX yN truire truirait/s' uire SFX yN truire truirions uire SFX yN truire truiriez uire SFX yN truire truiraient/s' uire SFX yN truire truise/s' uire SFX yN truire truisît/s' uire SFX yN truire truisissions uire SFX yN truire truisissiez uire SFX yN truire truisissent/s' uire SFX yN truire truisons-nous uire SFX yN truire truisez-vous uire SFX yO Y 43 SFX yO détruire détruire/m't's' détruire SFX yO détruire détruisant/m't's' détruire SFX yO détruire détruit détruire SFX yO détruire détruits détruire SFX yO détruire détruite détruire SFX yO détruire détruites détruire SFX yO détruire détruis/m't' détruire SFX yO détruire détruit/s' détruire SFX yO détruire détruisons détruire SFX yO détruire détruisez détruire SFX yO détruire détruisent/s' détruire SFX yO détruire détruisais/m't' détruire SFX yO détruire détruisait/s' détruire SFX yO détruire détruisions détruire SFX yO détruire détruisiez détruire SFX yO détruire détruisaient/s' détruire SFX yO détruire détruisis/m't' détruire SFX yO détruire détruisit/s' détruire SFX yO détruire détruisîmes détruire SFX yO détruire détruisîtes détruire SFX yO détruire détruisirent/s' détruire SFX yO détruire détruirai/m' détruire SFX yO détruire détruiras/t' détruire SFX yO détruire détruira/s' détruire SFX yO détruire détruirons détruire SFX yO détruire détruirez détruire SFX yO détruire détruiront/s' détruire SFX yO détruire détruirais/m't' détruire SFX yO détruire détruirait/s' détruire SFX yO détruire détruirions détruire SFX yO détruire détruiriez détruire SFX yO détruire détruiraient/s' détruire SFX yO détruire détruise/m's' détruire SFX yO détruire détruises/t' détruire SFX yO détruire détruisisse/m' détruire SFX yO détruire détruisisses/t' détruire SFX yO détruire détruisît/s' détruire SFX yO détruire détruisissions détruire SFX yO détruire détruisissiez détruire SFX yO détruire détruisissent/s' détruire SFX yO détruire détruis/t' détruire SFX yO détruire détruisons détruire SFX yO détruire détruisez détruire SFX yU N 39 SFX yU uire uisant uire SFX yU uire ui uire SFX yU uire uis uire SFX yU uire uit uire SFX yU uire uisons uire SFX yU uire uisez uire SFX yU uire uisent uire SFX yU uire uisais uire SFX yU uire uisait uire SFX yU uire uisions uire SFX yU uire uisiez uire SFX yU uire uisaient uire SFX yU uire uisis uire SFX yU uire uisit uire SFX yU uire uisîmes uire SFX yU uire uisîtes uire SFX yU uire uisirent uire SFX yU uire uirai uire SFX yU uire uiras uire SFX yU uire uira uire SFX yU uire uirons uire SFX yU uire uirez uire SFX yU uire uiront uire SFX yU uire uirais uire SFX yU uire uirait uire SFX yU uire uirions uire SFX yU uire uiriez uire SFX yU uire uiraient uire SFX yU uire uise uire SFX yU uire uises uire SFX yU uire uisisse uire SFX yU uire uisisses uire SFX yU uire uisît uire SFX yU uire uisissions uire SFX yU uire uisissiez uire SFX yU uire uisissent uire SFX yU uire uis uire SFX yU uire uisons uire SFX yU uire uisez uire SFX yV N 44 SFX yV ire isant ire SFX yV ire it nfire SFX yV ire its nfire SFX yV ire ite nfire SFX yV ire ites nfire SFX yV ire is cire SFX yV ire ise cire SFX yV ire ises cire SFX yV ire i ffire SFX yV ire is ire SFX yV ire it ire SFX yV ire isons ire SFX yV ire isez ire SFX yV ire isent ire SFX yV ire isais ire SFX yV ire isait ire SFX yV ire isions ire SFX yV ire isiez ire SFX yV ire isaient ire SFX yV ire îmes ire SFX yV ire îtes ire SFX yV ire irent ire SFX yV ire irai ire SFX yV ire iras ire SFX yV ire ira ire SFX yV ire irons ire SFX yV ire irez ire SFX yV ire iront ire SFX yV ire irais ire SFX yV ire irait ire SFX yV ire irions ire SFX yV ire iriez ire SFX yV ire iraient ire SFX yV ire ise ire SFX yV ire ises ire SFX yV ire isse ire SFX yV ire isses ire SFX yV ire ît ire SFX yV ire issions ire SFX yV ire issiez ire SFX yV ire issent ire SFX yV ire is ire SFX yV ire isons ire SFX yV ire isez ire SFX yW N 37 SFX yW ire iant rire SFX yW ire i rire SFX yW ire is rire SFX yW ire it rire SFX yW ire ions rire SFX yW ire iez rire SFX yW ire ient rire SFX yW ire iais rire SFX yW ire iait rire SFX yW ire iions rire SFX yW ire iiez rire SFX yW ire iaient rire SFX yW ire îmes rire SFX yW ire îtes rire SFX yW ire irent rire SFX yW ire irai rire SFX yW ire iras rire SFX yW ire ira rire SFX yW ire irons rire SFX yW ire irez rire SFX yW ire iront rire SFX yW ire irais rire SFX yW ire irait rire SFX yW ire irions rire SFX yW ire iriez rire SFX yW ire iraient rire SFX yW ire ie rire SFX yW ire ies rire SFX yW ire isse rire SFX yW ire isses rire SFX yW ire ît rire SFX yW ire issions rire SFX yW ire issiez rire SFX yW ire issent rire SFX yW ire is rire SFX yW ire ions rire SFX yW ire iez rire SFX yX Y 30 SFX yX nuire nuire/s' nuire SFX yX nuire nuisant/s' nuire SFX yX nuire nui nuire SFX yX nuire nuit/s' nuire SFX yX nuire nuisons nuire SFX yX nuire nuisez nuire SFX yX nuire nuisent/s' nuire SFX yX nuire nuisait/s' nuire SFX yX nuire nuisions nuire SFX yX nuire nuisiez nuire SFX yX nuire nuisaient/s' nuire SFX yX nuire nuisit/s' nuire SFX yX nuire nuisîmes nuire SFX yX nuire nuisîtes nuire SFX yX nuire nuisirent/s' nuire SFX yX nuire nuira/s' nuire SFX yX nuire nuirons nuire SFX yX nuire nuirez nuire SFX yX nuire nuiront/s' nuire SFX yX nuire nuirait/s' nuire SFX yX nuire nuirions nuire SFX yX nuire nuiriez nuire SFX yX nuire nuiraient/s' nuire SFX yX nuire nuise/s' nuire SFX yX nuire nuisît/s' nuire SFX yX nuire nuisissions nuire SFX yX nuire nuisissiez nuire SFX yX nuire nuisissent/s' nuire SFX yX nuire nuisons-nous nuire SFX yX nuire nuisez-vous nuire SFX yY Y 4 SFX yY ccire ccire/n'q'd'l'm't's' occire SFX yY ccire ccis/L'D'Q' occire SFX yY ccire ccise/L'D'Q' occire SFX yY ccire ccises/D'Q' occire SFX yZ N 13 SFX yZ rire risant rire SFX yZ rire rit rire SFX yZ rire rits rire SFX yZ rire rite rire SFX yZ rire rites rire SFX yZ rire ris rire SFX yZ rire rit rire SFX yZ rire rirai rire SFX yZ rire riras rire SFX yZ rire rira rire SFX yZ rire rirais rire SFX yZ rire rirait rire SFX yZ rire ris rire SFX q+ Y 32 SFX q+ enir enu/L'D'Q' enir SFX q+ enir enus/D'Q' enir SFX q+ enir enue/L'D'Q' enir SFX q+ enir enues/D'Q' enir SFX q+ tir ti/L'D'Q' tir SFX q+ tir tis/D'Q' tir SFX q+ tir tie/L'D'Q' tir SFX q+ tir ties/D'Q' tir SFX q+ courir couru/L'D'Q' courir SFX q+ courir courus/D'Q' courir SFX q+ courir courue/L'D'Q' courir SFX q+ courir courues/D'Q' courir SFX q+ ivre écu vivre SFX q+ ivre écus vivre SFX q+ ivre écue vivre SFX q+ ivre écues vivre SFX q+ aire u aire SFX q+ aire us aire SFX q+ aire ue aire SFX q+ aire ues aire SFX q+ dre du dre SFX q+ dre dus dre SFX q+ dre due dre SFX q+ dre dues dre SFX q+ valoir valu .valoir SFX q+ valoir valus .valoir SFX q+ valoir value .valoir SFX q+ valoir values .valoir SFX q+ aître u/L'D'Q' aître SFX q+ aître us/D'Q' aître SFX q+ aître ue/L'D'Q' aître SFX q+ aître ues/D'Q' aître SFX q. Y 8 SFX q. enir enu/q' enir SFX q. tir ti/q' tir SFX q. courir couru/q' courir SFX q. ivre écu vivre SFX q. aire u aire SFX q. dre du dre SFX q. valoir valu/q' .valoir SFX q. aître u/q' aître |
Added gc_lang/fr/xpi/data/dictionaries/fr-FR-modern/fr-FR-modern.dic version [6619ddfbaf].
more than 10,000 changes
Added gc_lang/fr/xpi/data/dictionaries/fr-FR-reform/fr-FR-reform.aff version [8d6758f52c].
more than 10,000 changes
Added gc_lang/fr/xpi/data/dictionaries/fr-FR-reform/fr-FR-reform.dic version [45464bd750].
more than 10,000 changes
Added gc_lang/fr/xpi/data/gc_panel.css version [882bab8a6d].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 | /* panel.css */ @import url("common.css"); header { background-color: hsl(0, 0%, 96%); padding: 10px 20px; border-bottom: 1px solid hsl(0, 0%, 90%); color: hsl(0, 0%, 0%); z-index: 99; } body { background-color: hsl(0, 0%, 98%); font-family: Tahoma, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", sans-serif; overflow-x: hidden; color: hsl(0, 0%, 0%); } #messagebox { position: absolute; display: none; left: 50%; width: 250px; margin-left: -125px; top: 50px; background-color: hsla(0, 50%, 20%, .8); border: 2px solid hsla(0, 50%, 10%, .8); border-radius: 5px; text-align: center; color: hsla(0, 0%, 100%, .9); font-size: 16px; font-weight: bold; z-index: 99; } #message { padding: 10px 20px; } #errorlist { padding: 60px 20px 30px 20px; } #errorlist p.message { margin-top: 20px; padding: 10px 10px; background-color: hsla(240, 10%, 50%, 1); font-size: 18px; color: hsla(240, 0%, 96%, 1); border-radius: 3px; text-align: center; } #errorlist p.green { background-color: hsla(120, 10%, 50%, 1); color: hsla(120, 0%, 96%, 1); } .paragraph { background-color: hsla(0, 0%, 90%, 1); padding: 10px; border-radius: 2px; font-size: 14px; font-family : "Courier New", Courier, "Lucida Sans Typewriter", "Lucida Typewriter", monospace; color: hsl(0, 0%, 0%); } .softred { background-color: hsla(0, 20%, 90%, 1); } .softgreen { background-color: hsla(120, 20%, 90%, 1); } .paragraph a { background-color: hsla(210, 50%, 50%, 1); padding: 1px 5px; border-radius: 2px; color: hsla(210, 0%, 96%, 1); cursor: pointer; text-decoration: none; } .paragraph a:hover { background-color: hsla(210, 60%, 40%, 1); color: hsla(0, 0%, 100%, 1); text-shadow: 0 0 3px hsl(210, 30%, 60%); } .paragraph a.sugg { padding: 1px 6px; background-color: hsla(150, 50%, 40%, 1); color: hsla(150, 0%, 96%, 1); border-radius: 2px; cursor: pointer; text-decoration: none; } .paragraph a.sugg:hover { background-color: hsla(150, 70%, 30%, 1); color: hsla(0, 0%, 100%, 1); text-shadow: 0 0 3px hsl(150, 30%, 60%); } .paragraph a.ignore { padding: 0 2px; background-color: hsla(30, 20%, 60%, 1); color: hsla(30, 0%, 96%, 1); border-radius: 2px; cursor: pointer; text-decoration: none; } .paragraph a.ignore:hover { background-color: hsla(30, 20%, 50%, 1); color: hsla(0, 0%, 100%, 1); text-shadow: 0 0 3px hsl(30, 30%, 60%); } .paragraph u.corrected, .paragraph u.ignored { background-color: hsla(120, 50%, 70%, 1); color: hsla(0, 0%, 4%, 1); border-radius: 2px; text-decoration: none; } .paragraph u.ignored { background-color: hsla(30, 20%, 80%, 1); } .paragraph u.error { position: relative; cursor: pointer; border-radius: 2px; text-decoration: none; /* to remove for wavy underlines */ } .paragraph u.error:hover { cursor: pointer; } .paragraph u.error .tooltip, .paragraph u.error .tooltip_on { position: absolute; background-color: hsla(210, 10%, 90%, 1); font-family: Tahoma, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", sans-serif; top: 90%; left: 0; width: 250px; font-size: 12px; line-height: 18px; color: hsla(0, 10%, 20%, 1); cursor: default; /*visibility: hidden;*/ display: none; padding: 10px; box-shadow: 0 0 6px hsla(0, 0%, 0%, 0.3); z-index: 10; border: 2px solid hsl(0, 0%, 0%); border-radius: 3px; text-decoration: none; } .paragraph u.error .tooltip_on { display: block; } .tooltip_on s { color: hsla(0, 0%, 66%, 1); font-weight: bold; font-size: 8px; line-height: 16px; text-transform: uppercase; text-decoration: none; } .debug { float: right; background-color: hsla(0, 5%, 35%, 1); padding: 2px 5px; margin-left: 5px; border-radius: 2px; color: hsla(0, 0%, 96%, 1); font-size: 11px; font-style: normal; } .data { font-style: normal; } .actions { margin-top: -10px; margin-bottom: 10px; } .actions .button { background-color: hsl(0, 0%, 50%); text-align: center; float: right; margin-left: 2px; padding: 1px 4px 3px 4px; /*width: 18px; height: 18px;*/ cursor: pointer; font-size: 14px; font-weight: bold; color: hsl(0, 0%, 96%); border-radius: 2px; } .actions .button:hover { background-color: hsl(0, 0%, 40%); color: hsl(0, 0%, 100%); } .actions .green { background-color: hsl(120, 30%, 50%); color: hsl(0, 0%, 96%); } .actions .green:hover { background-color: hsl(120, 50%, 40%); color: hsl(0, 0%, 100%); } .actions .red { background-color: hsl(0, 30%, 50%); color: hsl(0, 0%, 96%); } .actions .red:hover { background-color: hsl(0, 50%, 40%); color: hsl(0, 0%, 100%); } .actions .orange { background-color: hsl(30, 50%, 50%); color: hsl(30, 0%, 96%); } .actions .orange:hover { background-color: hsl(30, 70%, 40%); color: hsl(30, 0%, 100%); } /* ERRORS */ .error { /* default color */ background-color: hsl(240, 10%, 50%); color: hsl(240, 0%, 96%); } .error:hover { background-color: hsl(240, 10%, 40%); color: hsl(240, 0%, 100%); } /* elems */ .spell { background-color: hsl(0, 50%, 50%); color: hsl(0, 0%, 96%); /*text-decoration: underline wavy hsl(0, 50%, 50%);*/ } .spell:hover { background-color: hsl(0, 60%, 40%); color: hsl(0, 0%, 100%); } /* elems */ .typo, .esp, .nbsp, .eif, .maj, .virg, .tu, .num, .unit, .nf, .liga, .mapos, .chim { background-color: hsl(30, 70%, 50%); color: hsl(30, 10%, 96%); /*text-decoration: underline wavy hsl(30, 70%, 50%);*/ } .typo:hover, .esp:hover, .nbsp:hover, .eif:hover, .maj:hover, .virg:hover, .tu:hover, .num:hover, .unit:hover, .nf:hover, .liga:hover, .mapos:hover, .chim:hover { background-color: hsl(30, 80%, 45%); color: hsl(30, 10%, 96%); } /* elems */ .apos { background-color: hsl(40, 90%, 50%); color: hsl(40, 10%, 96%); /*text-decoration: underline wavy hsl(40, 70%, 45%);*/ } .apos:hover { background-color: hsl(40, 100%, 45%); color: hsl(40, 10%, 96%); } /* elems */ .gn, .sgpl { background-color: hsl(210, 50%, 50%); color: hsl(210, 10%, 96%); /*text-decoration: underline wavy hsl(210, 50%, 50%);*/ } .gn:hover, .sgpl:hover { background-color: hsl(210, 60%, 40%); color: hsl(210, 10%, 96%); } /* elems */ .conj, .infi, .imp, .inte, .ppas, .vmode { background-color: hsl(300, 30%, 40%); color: hsl(300, 10%, 96%); /*text-decoration: underline wavy hsl(300, 40%, 40%);*/ } .conj:hover, .infi:hover, .imp:hover, .inte:hover, .ppas:hover, .vmode:hover { background-color: hsl(300, 40%, 30%); color: hsl(300, 10%, 96%); } /* elems */ .conf, .ocr { background-color: hsl(270, 40%, 30%); color: hsl(270, 10%, 96%); /*text-decoration: underline wavy hsl(270, 40%, 30%);*/ } .conf:hover, .ocr:hover { background-color: hsl(270, 50%, 20%); color: hsl(270, 10%, 96%); } /* elems */ .bs, .pleo, .neg, .redon1, .redon2, .mc, .date, .notype { background-color: hsl(180, 50%, 40%); color: hsl(180, 10%, 96%); /*text-decoration: underline wavy hsl(180, 50%, 40%);*/ } .bs:hover, .pleo:hover, .neg:hover, .redon1:hover, .redon2:hover, .mc:hover, .date:hover, .notype:hover { background-color: hsl(180, 60%, 30%); color: hsl(180, 10%, 96%); } |
Added gc_lang/fr/xpi/data/gc_panel.html version [6930e5be20].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | <!DOCTYPE HTML> <html> <head> <link rel="stylesheet" type="text/css" href="gc_panel.css" /> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> </head> <script type="text/javascript"> // for some reason, onclick onmouseover onmouseout can’t launch function in attached script, so here it is. function showData (sIdErr) { document.getElementById("data"+sIdErr).hidden = false; } function hideData (sIdErr) { document.getElementById("data"+sIdErr).hidden = true; } </script> <body class="panel"> <div style="position: fixed; width: 100%"> <div id="rightcorner"> <a class="rightcornerbutton red" id="close" href="#"><b>×</b></a> <a class="rightcornerbutton cyan" id="expand_reduce" href="#"><b>−</b></a> <a class="rightcornerbutton1 green" id="copy_to_clipboard" href="#" style="display: none;" onclick="return false;"><b id="clipboard_msg">∑</b></a> </div> <header> <div id="waiticon" class="spinner"> <div class="double-bounce1"></div> <div class="double-bounce2"></div> </div> <!--<div id="waiticon" class="fright" style="margin-right: 50px"> <img src="./img/spinner32.png" /> </div>--> <h2>Grammalecte</h2> </header> <div id="messagebox"><a id="closemsg" class="rightcornerbutton1 red" href="#" onclick="return false;"><b>×</b></a><p id="message"></p></div> </div> <div id="movewindow"> <div id="resize_h_bigger" class="arrow" style="border-radius: 2px 0 0 0">↓</div> <div id="resize_h_smaller" class="arrow">↑</div> <div id="resize_w_bigger" class="arrow">←</div> <div id="resize_w_smaller" class="arrow" style="border-radius: 0 0 0 2px">→</div> </div> <div id="errorlist"> <!-- result comes here --> </div> </body> </html> |
Added gc_lang/fr/xpi/data/gc_panel.js version [c4fda97645].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 | // JavaScript let nPanelWidth = 0; // must be set at launch let bExpanded = true; /* Events */ document.getElementById('close').addEventListener("click", function (event) { bExpanded = true; // size is reset in ui.js self.port.emit('closePanel'); }); document.getElementById('expand_reduce').addEventListener("click", function (event) { if (bExpanded) { self.port.emit("resize", "reduce", 10); // the number has no meaning here bExpanded = false; } else { self.port.emit("resize", "expand", 10); // the number has no meaning here bExpanded = true; } }); document.getElementById('copy_to_clipboard').addEventListener("click", function (event) { copyToClipboard(); }); document.getElementById('closemsg').addEventListener("click", function (event) { closeMessageBox(); }); self.port.on("setPanelWidth", function (n) { nPanelWidth = n; }); self.port.on("addElem", function (sHtml) { let xElem = document.createElement("div"); xElem.innerHTML = sHtml; document.getElementById("errorlist").appendChild(xElem); }); self.port.on("refreshParagraph", function (sIdParagr, sHtml) { document.getElementById("paragr"+sIdParagr).innerHTML = sHtml; let sClassName = (sHtml.includes('<u id="err')) ? "paragraph softred" : "paragraph softgreen"; document.getElementById("paragr"+sIdParagr).className = sClassName; }); self.port.on("showMessage", function (sText) { document.getElementById("message").textContent = sText; document.getElementById("messagebox").style.display = "block"; window.setTimeout(closeMessageBox, 20000); }); self.port.on("clearErrors", function (sHtml) { document.getElementById("errorlist").textContent = ""; }); self.port.on("start", function() { startWaitIcon(); }); self.port.on("end", function() { stopWaitIcon(); document.getElementById("copy_to_clipboard").style.display = "block"; }); self.port.on("suggestionsFor", function (sWord, sSuggestions, sTooltipId) { // spell checking suggestions //console.log(sWord + ": " + sSuggestions); if (sSuggestions === "") { document.getElementById(sTooltipId).innerHTML += "Aucune."; } else if (sSuggestions.startsWith("#")) { document.getElementById(sTooltipId).innerHTML += sSuggestions; } else { let lSugg = sSuggestions.split("|"); let iSugg = 0; let sElemId = sTooltipId.slice(7); for (let sSugg of lSugg) { document.getElementById(sTooltipId).innerHTML += '<a id="sugg' + sElemId + "-" + iSugg + '" class="sugg" href="#" onclick="return false;">' + sSugg + '</a> '; iSugg += 1; } } }); window.addEventListener( "click", function (xEvent) { let xElem = xEvent.target; if (xElem.id) { if (xElem.id.startsWith("sugg")) { applySuggestion(xElem.id); } else if (xElem.id.startsWith("ignore")) { ignoreError(xElem.id); } else if (xElem.id.startsWith("check")) { sendBackAndCheck(xElem.id); } else if (xElem.id.startsWith("edit")) { switchEdition(xElem.id); } else if (xElem.id.startsWith("end")) { document.getElementById(xElem.id).parentNode.parentNode.style.display = "none"; } else if (xElem.tagName === "U" && xElem.id.startsWith("err")) { showTooltip(xElem.id); } else if (xElem.id.startsWith("resize")) { self.port.emit("resize", xElem.id, 10); } else { hideAllTooltips(); } } else if (xElem.tagName === "A") { self.port.emit("openURL", xElem.getAttribute("href")); } else { hideAllTooltips(); } }, false ); /* Actions */ function closeMessageBox () { document.getElementById("messagebox").style.display = "none"; document.getElementById("message").textContent = ""; } function applySuggestion (sElemId) { // sugg try { let sIdParagr = sElemId.slice(4, sElemId.indexOf("_")); startWaitIcon("paragr"+sIdParagr); let sIdErr = "err" + sElemId.slice(4, sElemId.indexOf("-")); document.getElementById(sIdErr).textContent = document.getElementById(sElemId).textContent; document.getElementById(sIdErr).className = "corrected"; document.getElementById(sIdErr).removeAttribute("style"); self.port.emit("correction", sIdParagr, getPurgedTextOfElem("paragr"+sIdParagr)); stopWaitIcon("paragr"+sIdParagr); } catch (e) { console.log(e.message + e.lineNumber); } } function ignoreError (sElemId) { // ignore let sIdErr = "err" + sElemId.slice(6); let xTooltipElem = document.getElementById("tooltip"+sElemId.slice(6)); document.getElementById(sIdErr).removeChild(xTooltipElem); document.getElementById(sIdErr).className = "ignored"; document.getElementById(sIdErr).removeAttribute("style"); } function showTooltip (sElemId) { // err hideAllTooltips(); let sTooltipId = "tooltip" + sElemId.slice(3); let xTooltipElem = document.getElementById(sTooltipId); let nLimit = nPanelWidth - 300; // paragraph width - tooltip width if (document.getElementById(sElemId).offsetLeft > nLimit) { xTooltipElem.style.left = "-" + (document.getElementById(sElemId).offsetLeft - nLimit) + "px"; } xTooltipElem.setAttribute("contenteditable", false); xTooltipElem.className = 'tooltip_on'; if (document.getElementById(sElemId).className === "error spell" && xTooltipElem.textContent.endsWith(":")) { // spelling mistake self.port.emit("getSuggestionsForTo", document.getElementById(sElemId).innerHTML.replace(/<span .*$/, "").trim(), sTooltipId); } } function switchEdition (sElemId) { // edit let sId = "paragr" + sElemId.slice(4); if (document.getElementById(sId).hasAttribute("contenteditable") === false || document.getElementById(sId).getAttribute("contenteditable") === "false") { document.getElementById(sId).setAttribute("contenteditable", true); document.getElementById(sElemId).className = "button orange"; document.getElementById(sId).focus(); } else { document.getElementById(sId).setAttribute("contenteditable", false); document.getElementById(sElemId).className = "button"; } } function sendBackAndCheck (sElemId) { // check startWaitIcon(); let sIdParagr = sElemId.slice(5); self.port.emit("modifyAndCheck", sIdParagr, getPurgedTextOfElem("paragr"+sIdParagr)); stopWaitIcon(); } function getPurgedTextOfElem (sId) { // Note : getPurgedTextOfElem2 should work better if not buggy. // if user writes in error, Fx adds tags <u></u>, we also remove style attribute let xParagraphElem = document.getElementById(sId); for (xNode of xParagraphElem.getElementsByTagName("u")) { if (xNode.id.startsWith('err')) { xNode.innerHTML = xNode.innerHTML.replace(/<\/?u>/g, ""); xNode.removeAttribute("style"); } } // we remove style attribute on tooltip for (xNode of xParagraphElem.getElementsByTagName("span")) { if (xNode.id.startsWith('tooltip')) { xNode.removeAttribute("style"); } } // now, we remove tooltips, then errors, and we change some html entities let sText = xParagraphElem.innerHTML; sText = sText.replace(/<br\/? *> *$/ig, ""); sText = sText.replace(/<span id="tooltip.+?<\/span>/g, ""); sText = sText.replace(/<u id="err\w+" class="[\w ]+" href="#" onclick="return false;">(.+?)<\/u><!-- err_end -->/g, "$1"); sText = sText.replace(/ /g, " ").replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&"); return sText; } function getPurgedTextOfElem2 (sId) { // It is better to remove tooltips via DOM and retrieve textContent, // but for some reason getElementsByClassName “hazardously” forgets elements. // Unused. Needs investigation. let xParagraphElem = document.getElementById(sId).cloneNode(true); for (let xNode of xParagraphElem.getElementsByClassName("tooltip")) { xNode.parentNode.removeChild(xNode); } return xParagraphElem.textContent; } function hideAllTooltips () { for (let xElem of document.getElementsByClassName("tooltip_on")) { xElem.className = "tooltip"; xElem.removeAttribute("style"); } } function copyToClipboard () { startWaitIcon(); try { document.getElementById("clipboard_msg").textContent = "copie en cours…"; let sText = ""; for (let xNode of document.getElementById("errorlist").getElementsByClassName("paragraph")) { sText += getPurgedTextOfElem(xNode.id); sText += "\n"; } self.port.emit('copyToClipboard', sText); document.getElementById("clipboard_msg").textContent = "-> presse-papiers"; window.setTimeout(function() { document.getElementById("clipboard_msg").textContent = "∑"; } , 3000); } catch (e) { console.log(e.lineNumber + ": " +e.message); } stopWaitIcon(); } function startWaitIcon (sIdParagr=null) { if (sIdParagr) { document.getElementById(sIdParagr).disabled = true; document.getElementById(sIdParagr).style.opacity = .3; } document.getElementById("waiticon").hidden = false; } function stopWaitIcon (sIdParagr=null) { if (sIdParagr) { document.getElementById(sIdParagr).disabled = false; document.getElementById(sIdParagr).style.opacity = 1; } document.getElementById("waiticon").hidden = true; } |
Added gc_lang/fr/xpi/data/img/LaMouette.png version [e3c6d9c279].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/contextmenu.png version [b35dd4b3cf].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/icon-16.png version [dcb1bf8ae0].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/icon-32.png version [cbbaf9ff64].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/icon-48.png version [73a119e8c1].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/icon-64.png version [53bd99349a].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/lines.png version [e4f15f2e8d].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/logo120_text.png version [c438dd0680].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/logo2.png version [c8ddc58e4e].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/logo_texte.png version [a446454b58].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/spinner32.png version [8fe345304b].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/img/spinner64.png version [962bcf56c9].
cannot compute difference between binary files
Added gc_lang/fr/xpi/data/lxg_panel.css version [beaf75f9d5].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | /* lxgpanel.css */ @import url("common.css"); header { background-color: hsl(0, 0%, 96%); padding: 10px 20px; border-bottom: 1px solid hsl(0, 0%, 90%); color: hsl(0, 0%, 0%); } body { background-color: hsl(0, 0%, 98%); font-family: "Trebuchet MS", sans-serif; overflow-x: hidden; color: hsl(0, 0%, 0%); } #wordlist { padding: 50px 10px 10px 10px; } #wordlist .paragraph { background-color: hsla(0, 0%, 90%, 1); padding: 10px; border-radius: 2px; margin: 10px 5px; } #wordlist p { margin: 8px; } #wordlist p.separator { margin: 20px 0; padding: 5px 50px; background-color: hsla(0, 0%, 75%, 1); color: hsla(0, 0%, 96%, 1); border-radius: 5px; text-align: center; font-size: 20px; } #wordlist ul { margin: 0 0 5px 40px; } #wordlist b { background-color: hsla(150, 50%, 50%, 1); color: hsla(0, 0%, 96%, 1); padding: 2px 5px; border-radius: 2px; text-decoration: none; } #wordlist b.unknown { background-color: hsla(0, 50%, 50%, 1); } #wordlist b.nb { background-color: hsla(210, 50%, 50%, 1); } #wordlist b.mbok { background-color: hsla(60, 50%, 50%, 1); } #wordlist s { color: hsla(0, 0%, 60%, 1); text-decoration: none; } #wordlist .textline { text-decoration: bold; } #wordlist p.message { margin-top: 20px; padding: 10px 10px; background-color: hsla(240, 10%, 50%, 1); font-size: 18px; color: hsla(240, 0%, 96%, 1); border-radius: 3px; text-align: center; } |
Added gc_lang/fr/xpi/data/lxg_panel.html version [0371eb4f06].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <!DOCTYPE HTML> <html> <head> <link rel="stylesheet" type="text/css" href="lxg_panel.css" /> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> </head> <body class="panel"> <div style="position: fixed; width: 100%"> <div id="rightcorner"> <a class="rightcornerbutton red" id="close" href="#"><b>×</b></a> <a class="rightcornerbutton1 cyan" id="expand_reduce" href="#"><b>−</b></a> </div> <header> <div id="waiticon" class="spinner"> <div class="double-bounce1"></div> <div class="double-bounce2"></div> </div> <h2>Grammalecte · Lexicographe</h2> </header> </div> <div id="movewindow"> <div id="resize_h_bigger" class="arrow" style="border-radius: 2px 0 0 0">↓</div> <div id="resize_h_smaller" class="arrow">↑</div> <div id="resize_w_bigger" class="arrow">←</div> <div id="resize_w_smaller" class="arrow" style="border-radius: 0 0 0 2px">→</div> </div> <div id="wordlist"></div> <div class="clearer"></div> </body> </html> |
Added gc_lang/fr/xpi/data/lxg_panel.js version [8999221c88].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | // JavaScript let bExpanded = true; // events document.getElementById('close').addEventListener("click", function (event) { bExpanded = true; // size is reset in ui.js self.port.emit('closePanel'); }); document.getElementById('expand_reduce').addEventListener("click", function (event) { if (bExpanded) { self.port.emit("resize", "reduce", 10); // the number has no meaning here bExpanded = false; } else { self.port.emit("resize", "expand", 10); // the number has no meaning here bExpanded = true; } }); /* // Conjugueur document.getElementById('conjugueur').addEventListener("click", function (event) { self.port.emit('openConjugueur'); }); */ self.port.on("addSeparator", function (sText) { if (document.getElementById("wordlist").innerHTML !== "") { let xElem = document.createElement("p"); xElem.className = "separator"; xElem.innerHTML = sText; document.getElementById("wordlist").appendChild(xElem); } }); self.port.on("addElem", function (sHtml) { let xElem = document.createElement("div"); xElem.innerHTML = sHtml; document.getElementById("wordlist").appendChild(xElem); }); self.port.on("clear", function (sHtml) { document.getElementById("wordlist").textContent = ""; }); self.port.on("startWaitIcon", function() { document.getElementById("waiticon").hidden = false; }); self.port.on("stopWaitIcon", function() { document.getElementById("waiticon").hidden = true; }); window.addEventListener( "click", function (xEvent) { let xElem = xEvent.target; if (xElem.id) { if (xElem.id.startsWith("resize")) { self.port.emit("resize", xElem.id, 10); } } }, false ); // display selection function displayClasses () { setHidden("ok", document.getElementById("ok").checked); setHidden("mbok", document.getElementById("mbok").checked); setHidden("nb", document.getElementById("nb").checked); setHidden("unknown", document.getElementById("unknown").checked); } function setHidden (sClass, bHidden) { for (let i = 0; i < document.getElementsByClassName(sClass).length; i++) { document.getElementsByClassName(sClass)[i].hidden = bHidden; } } |
Added gc_lang/fr/xpi/data/replace_text.js version [b8f077eb6b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | // replace text in active worker const dParagraphs = new Map(); let xActiveTextZone = null; let xCloseButton = null; let xParentElement = null; /* events */ self.port.on("setActiveElement", function (bSendTextBack=false) { setActiveElement(bSendTextBack); }); self.port.on("setParagraph", function (iParagraph, sText) { dParagraphs.set(iParagraph, sText); }); self.port.on("getParagraph", function (iParagraph) { let sText = dParagraphs.has(iParagraph) ? dParagraphs.get(iParagraph) : getNthParagraph(iParagraph); self.port.emit("emitParagraph", iParagraph, sText); }); self.port.on("rewrite", function () { rewrite(); }); self.port.on("getText", function () { if (xActiveTextZone !== null) { self.port.emit("emitText", xActiveTextZone.value); } }); self.port.on("write", function (sText) { if (xActiveTextZone !== null) { xActiveTextZone.value = sText; } }); self.port.on("clear", function () { clear(); }); /* actions */ function setActiveElement (bSendTextBack=false) { try { if (document.activeElement.tagName === "TEXTAREA" || document.activeElement.tagName === "INPUT") { xActiveTextZone = document.activeElement; if (bSendTextBack) { self.port.emit("yesThisIsTextZone", xActiveTextZone.value); } else { self.port.emit("yesThisIsTextZone", ""); } createCloseButton(xActiveTextZone); xActiveTextZone.disabled = true; } else { xActiveTextZone = null; } dParagraphs.clear(); } catch (e) { console.error("\n" + e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message); } } function rewrite () { try { if (xActiveTextZone !== null) { let sText = ""; let i = 0; for (let sParagraph of xActiveTextZone.value.split("\n")) { sText += (dParagraphs.has(i)) ? dParagraphs.get(i) + "\n" : sParagraph + "\n"; i += 1; } xActiveTextZone.value = sText.slice(0,-1); } } catch (e) { console.error("\n" + e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message); } } function clear () { try { if (xActiveTextZone !== null) { xActiveTextZone.disabled = false; } if (xCloseButton !== null) { xParentElement.removeChild(xCloseButton); xParentElement = null; xCloseButton = null; } xActiveTextZone = null; dParagraphs.clear(); } catch (e) { console.error("\n" + e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message); } } function getNthParagraph (iParagraph) { if (xActiveTextZone !== null) { let sText = xActiveTextZone.value; let i = 0; let iStart = 0; while (i < iParagraph && ((iStart = sText.indexOf("\n", iStart)) !== -1)) { i++; iStart++; } if (i === iParagraph) { return ((iEnd = sText.indexOf("\n", iStart)) !== -1) ? sText.slice(iStart, iEnd) : sText.slice(iStart); } return "# Erreur. Paragraphe introuvable."; } return "# Erreur. Zone de texte introuvable."; } function createCloseButton (xActiveTextZone) { xParentElement = xActiveTextZone.parentElement; xCloseButton = document.createElement("p"); xCloseButton.textContent = "× | Débloquer la zone de texte."; xCloseButton.title = "Cette action clot le panneau de correction de Grammalecte." xCloseButton.style = "padding: 5px; color: #FFF; background-color: #F80; border-radius: 3px; cursor: pointer"; xCloseButton.onclick = function() { self.port.emit("closeGCPanel"); self.port.emit("closeTFPanel"); if (xParentElement !== null) { xParentElement.removeChild(xCloseButton); xParentElement = null; xCloseButton = null; } clear(); }; xParentElement.insertBefore(xCloseButton, xActiveTextZone); } |
Added gc_lang/fr/xpi/data/test_panel.css version [0ca7283e7e].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | /* panel.css */ @import url("common.css"); header { background-color: hsl(0, 0%, 96%); border-bottom: 1px solid hsl(0, 0%, 90%); padding: 10px 20px; color: hsl(0, 0%, 0%); } body { background-color: hsl(0, 0%, 86%); font-family: "Trebuchet MS", sans-serif; overflow-x: hidden; color: hsl(0, 0%, 0%); } #cmd { padding: 15px; background-color: hsl(0, 0%, 92%); border-bottom: 1px solid hsl(0, 0%, 86%); } #cmd h1 { margin: 5px 0; } #cmd textarea { width: 100%; border: 2px solid hsl(0, 0%, 89%); border-radius: 3px; resize: vertical; } #results { padding: 15px; background-color: hsl(0, 0%, 96%); } .button { display: inline-block; padding: 5px 10px; width: 80px; border-radius: 3px; font-size: 12px; text-align: center; cursor: pointer; } |
Added gc_lang/fr/xpi/data/test_panel.html version [70fc3d08d4].
> > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <!DOCTYPE HTML> <html> <head> <link rel="stylesheet" type="text/css" href="test_panel.css" /> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> </head> <body class="panel"> <div style="position: fixed; width: 100%"> <div id="rightcorner"> <a class="rightcornerbutton1 red" id="close" href="#"><b>×</b></a> </div> </div> <div id="cmd"> <h1 data-l10n-id="testzone"></h1> <textarea id="text" rows="10"></textarea> <div id="testall" class="button blue" data-l10n-id="testall"></div> <div id="parse" class="button green fright" data-l10n-id="parse"></div> </div> <div id="results"> </div> </body> </html> |
Added gc_lang/fr/xpi/data/test_panel.js version [7ad6cf391b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | // JavaScript /* Events */ self.port.on("addElem", function (sHtml) { let xElem = document.createElement("p"); xElem.innerHTML = sHtml; document.getElementById("results").appendChild(xElem); }); self.port.on("clear", function () { document.getElementById("results").textContent = ""; }); document.getElementById('testall').addEventListener("click", function (event) { self.port.emit('allGCTests'); }); document.getElementById('parse').addEventListener("click", function (event) { self.port.emit('checkText', document.getElementById('text').value); }); document.getElementById('close').addEventListener("click", function (event) { self.port.emit('closePanel'); }); /* Actions */ |
Added gc_lang/fr/xpi/data/tf_panel.css version [5322259150].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | /* lxgpanel.css */ @import url("common.css"); header { background-color: hsl(0, 0%, 94%); padding: 10px 20px; border-bottom: 1px solid hsl(0, 0%, 90%); color: hsl(0, 0%, 0%); } body { background-color: hsl(120, 10%, 92%); font-family: "Trebuchet MS", sans-serif; overflow-x: hidden; color: hsl(0, 0%, 0%); } #options { background-color: hsl(0, 0%, 96%); padding: 40px 15px 5px 15px; } .column { display: inline-block; vertical-align: top; width: 370px; } fieldset { margin: 5px 0; padding: 5px 10px 10px 10px; background-color: hsl(0, 0%, 92%); border-radius: 3px; } legend { font-size: 20px; color: hsla(210, 20%, 50%, .8); font-weight: bold; } legend span { display: none; } fieldset h2 { color: hsl(210, 80%, 40%); } fieldset .blockopt { padding: 2px 3px; font-size: 12.5px; } fieldset .underline:hover { background-color: hsl(180, 10%, 86%); border-radius: 2px; } fieldset .option { margin: 1px 3px 0 0; float: left; } legend .option { margin: 7px 5px 0 3px; float: left; } fieldset .opt_lbl { display: inline-block; color: hsl(0, 0%, 20%); } fieldset .largew { width: 300px; } fieldset .reducedw { width: 200px; } fieldset .smallw { width: 90px; } fieldset .secondoption { display: inline-block; } fieldset label span { display: none; } .groupblock { opacity: 0.3; } .inlineblock { display: inline-block; } .indent { margin-left: 15px; } #actions { background-color: hsl(120, 10%, 92%); padding: 15px; border-top: 1px solid hsl(120, 20%, 86%); } .button { display: inline-block; padding: 5px 10px; width: 100px; border-radius: 3px; font-size: 16px; font-weight: bold; text-align: center; cursor: pointer; } #progressbarbox { display: inline-block; padding: 10px 20px; } |
Added gc_lang/fr/xpi/data/tf_panel.html version [3aa41a0998].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 | <!DOCTYPE HTML> <html> <head> <link rel="stylesheet" type="text/css" href="tf_panel.css" /> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> </head> <body class="panel"> <div style="position: fixed; width: 100%"> <div id="rightcorner"> <a class="rightcornerbutton1 red" id="close" href="#"><b>×</b></a> </div> <header> <h2>Grammalecte · <span data-l10n-id="tf_title"></span></h2> </header> </div> <div id="options"> <div class="column" style="margin-right: 5px;"> <!-- Supernumerary spaces --> <fieldset> <legend><input type="checkbox" id="o_group_ssp" class="option" data-default="true" /><label for="o_group_ssp" data-l10n-id="tf_ssp"></label></legend> <div id="group_ssp" class="groupblock"> <div class="blockopt underline"> <div id="res_o_start_of_paragraph" class="result fright"></div> <input type="checkbox" id="o_start_of_paragraph" class="option" data-default="true" /> <label for="o_start_of_paragraph" class="opt_lbl largew" data-l10n-id="tf_start_of_paragraph"></label> </div> <div class="blockopt underline"> <div id="res_o_end_of_paragraph" class="result fright"></div> <input type="checkbox" id="o_end_of_paragraph" class="option" data-default="true" /> <label for="o_end_of_paragraph" class="opt_lbl largew" data-l10n-id="tf_end_of_paragraph"></label> </div> <div class="blockopt underline"> <div id="res_o_between_words" class="result fright"></div> <input type="checkbox" id="o_between_words" class="option" data-default="true" /> <label for="o_between_words" class="opt_lbl largew" data-l10n-id="tf_between_words"></label> </div> <div class="blockopt underline"> <div id="res_o_before_punctuation" class="result fright"></div> <input type="checkbox" id="o_before_punctuation" class="option" data-default="true" /> <label for="o_before_punctuation" class="opt_lbl largew" data-l10n-id="tf_before_punctuation"></label> </div> <div class="blockopt underline"> <div id="res_o_within_parenthesis" class="result fright"></div> <input type="checkbox" id="o_within_parenthesis" class="option" data-default="true" /> <label for="o_within_parenthesis" class="opt_lbl largew" data-l10n-id="tf_within_parenthesis"></label> </div> <div class="blockopt underline"> <div id="res_o_within_square_brackets" class="result fright"></div> <input type="checkbox" id="o_within_square_brackets" class="option" data-default="true" /> <label for="o_within_square_brackets" class="opt_lbl largew" data-l10n-id="tf_within_square_brackets"></label> </div> <div class="blockopt underline"> <div id="res_o_within_quotation_marks" class="result fright"></div> <input type="checkbox" id="o_within_quotation_marks" class="option" data-default="true" /> <label for="o_within_quotation_marks" class="opt_lbl largew" data-l10n-id="tf_within_quotation_marks"></label> </div> </div> </fieldset> <!-- Missing spaces --> <fieldset> <legend><input type="checkbox" id="o_group_space" class="option" data-default="true" /><label for="o_group_space" data-l10n-id="tf_space"></label></legend> <div id="group_space" class="groupblock"> <div class="blockopt underline"> <div id="res_o_add_space_after_punctuation" class="result fright"></div> <input type="checkbox" id="o_add_space_after_punctuation" class="option" data-default="true" /> <label for="o_add_space_after_punctuation" class="opt_lbl reducedw" data-l10n-id="tf_add_space_after_punctuation"></label> </div> <div class="blockopt underline"> <div id="res_o_add_space_around_hyphens" class="result fright"></div> <input type="checkbox" id="o_add_space_around_hyphens" class="option" data-default="true" /> <label for="o_add_space_around_hyphens" class="opt_lbl largew" data-l10n-id="tf_add_space_around_hyphens"></label> </div> </div> </fieldset> <!-- Non breaking spaces --> <fieldset> <legend><input type="checkbox" id="o_group_nbsp" class="option" data-default="true" /><label for="o_group_nbsp" data-l10n-id="tf_nbsp"></label></legend> <div id="group_nbsp" class="groupblock"> <div class="blockopt underline"> <div id="res_o_nbsp_before_punctuation" class="result fright"></div> <input type="checkbox" id="o_nbsp_before_punctuation" class="option" data-default="true" /> <label for="o_nbsp_before_punctuation" class="opt_lbl reducedw" data-l10n-id="tf_nbsp_before_punctuation"></label> <!--<div class="secondoption"> <input type="checkbox" id="o_nnbsp_before_punctuation" class="option" /> <label for="o_nnbsp_before_punctuation" class="opt_lbl smallw">fines<span>sauf avec “:”</span></label> </div>--> </div> <div class="blockopt underline"> <div id="res_o_nbsp_within_quotation_marks" class="result fright"></div> <input type="checkbox" id="o_nbsp_within_quotation_marks" class="option" data-default="true" /> <label for="o_nbsp_within_quotation_marks" class="opt_lbl reducedw" data-l10n-id="tf_nbsp_within_quotation_marks"></label> <!--<div class="secondoption"> <input type="checkbox" id="o_nnbsp_within_quotation_marks" class="option" /> <label for="o_nnbsp_within_quotation_marks" class="opt_lbl smallw">fines</label> </div>--> </div> <div class="blockopt underline"> <div id="res_o_nbsp_before_symbol" class="result fright"></div> <input type="checkbox" id="o_nbsp_before_symbol" class="option" data-default="true" /> <label for="o_nbsp_before_symbol" class="opt_lbl largew" data-l10n-id="tf_nbsp_before_symbol"></label> </div> <div class="blockopt underline"> <div id="res_o_nbsp_within_numbers" class="result fright"></div> <input type="checkbox" id="o_nbsp_within_numbers" class="option" data-default="true" /> <label for="o_nbsp_within_numbers" class="opt_lbl reducedw" data-l10n-id="tf_nbsp_within_numbers"></label> <!--<div class="secondoption"> <input type="checkbox" id="o_nnbsp_within_numbers" class="option" /> <label for="o_nnbsp_within_numbers" class="opt_lbl smallw">fines</label> </div>--> </div> <div class="blockopt underline"> <div id="res_o_nbsp_before_units" class="result fright"></div> <input type="checkbox" id="o_nbsp_before_units" class="option" data-default="true" /> <label for="o_nbsp_before_units" class="opt_lbl largew" data-l10n-id="tf_nbsp_before_units"></label> </div> </div> </fieldset> <!-- Deletions --> <fieldset> <legend><input type="checkbox" id="o_group_delete" class="option" data-default="true" /><label for="o_group_delete" data-l10n-id="tf_delete"></label></legend> <div id="group_delete" class="groupblock"> <div class="blockopt underline"> <div id="res_o_erase_non_breaking_hyphens" class="result fright"></div> <input type="checkbox" id="o_erase_non_breaking_hyphens" class="option" data-default="true" /> <label for="o_erase_non_breaking_hyphens" class="opt_lbl largew" data-l10n-id="tf_erase_non_breaking_hyphens"></label> </div> </div> </fieldset> </div> <div class="column"> <!-- Typographical signs --> <fieldset> <legend><input type="checkbox" id="o_group_typo" class="option" data-default="true" /><label for="o_group_typo" data-l10n-id="tf_typo"></label></legend> <div id="group_typo" class="groupblock"> <div class="blockopt underline"> <div id="res_o_ts_apostrophe" class="result fright"></div> <input type="checkbox" id="o_ts_apostrophe" class="option" data-default="true" /> <label for="o_ts_apostrophe" class="opt_lbl largew" data-l10n-id="tf_ts_apostrophe"></label> </div> <div class="blockopt underline"> <div id="res_o_ts_ellipsis" class="result fright"></div> <input type="checkbox" id="o_ts_ellipsis" class="option" data-default="true" /> <label for="o_ts_ellipsis" class="opt_lbl largew" data-l10n-id="tf_ts_ellipsis"></label> </div> <div class="blockopt underline"> <div id="res_o_ts_dash_middle" class="result fright"></div> <input type="checkbox" id="o_ts_dash_middle" class="option" data-default="true" /> <label for="o_ts_dash_middle" class="opt_lbl largew" data-l10n-id="tf_ts_dash_middle"></label> </div> <div class="blockopt"> <div class="inlineblock indent"> <input type="radio" name="hyphen1" id="o_ts_m_dash_middle" class="option" data-default="false" /><label for="o_ts_m_dash_middle" class="opt_lbl" data-l10n-id="tf_emdash"></label> </div> <div class="inlineblock indent"> <input type="radio" name="hyphen1" id="o_ts_n_dash_middle" class="option" data-default="true" /><label for="o_ts_n_dash_middle" class="opt_lbl" data-l10n-id="tf_endash"></label> </div> </div> <div class="blockopt underline"> <div id="res_o_ts_dash_start" class="result fright"></div> <input type="checkbox" id="o_ts_dash_start" class="option" data-default="true" /> <label for="o_ts_dash_start" class="opt_lbl largew" data-l10n-id="tf_ts_dash_start"></label> </div> <div class="blockopt"> <div class="inlineblock indent"> <input type="radio" name="hyphen2" id="o_ts_m_dash_start" class="option" data-default="true" /><label for="o_ts_m_dash_start" class="opt_lbl" data-l10n-id="tf_emdash"></label> </div> <div class="inlineblock indent"> <input type="radio" name="hyphen2" id="o_ts_n_dash_start" class="option" data-default="false" /><label for="o_ts_n_dash_start" class="opt_lbl" data-l10n-id="tf_endash"></label> </div> </div> <div class="blockopt underline"> <div id="res_o_ts_quotation_marks" class="result fright"></div> <input type="checkbox" id="o_ts_quotation_marks" class="option" data-default="true" /> <label for="o_ts_quotation_marks" class="opt_lbl largew" data-l10n-id="tf_ts_quotation_marks"></label> </div> <div class="blockopt underline"> <div id="res_o_ts_units" class="result fright"></div> <input type="checkbox" id="o_ts_units" class="option" data-default="true" /> <label for="o_ts_units" class="opt_lbl largew" data-l10n-id="tf_ts_units"></label> </div> <div class="blockopt underline"> <div id="res_o_ts_spell" class="result fright"></div> <input type="checkbox" id="o_ts_spell" class="option" data-default="true" /> <label for="o_ts_spell" class="opt_lbl largew" data-l10n-id="tf_ts_spell"></label> </div> <div class="blockopt underline"> <div id="res_o_ts_ligature" class="result fright"></div> <div class="inlineblock"> <input type="checkbox" id="o_ts_ligature" class="option" data-default="false" /> <label for="o_ts_ligature" class="opt_lbl" data-l10n-id="tf_ts_ligature"></label> </div> <div class="inlineblock indent"> <input type="radio" id="o_ts_ligature_do" name="liga" class="option" data-default="false" /> <label for="o_ts_ligature_do" class="opt_lbl" data-l10n-id="tf_ts_ligature_do"></label> </div> <div class="inlineblock indent"> <input type="radio" id="o_ts_ligature_undo" name="liga" class="option" data-default="true" /> <label for="o_ts_ligature_undo" class="opt_lbl" data-l10n-id="tf_ts_ligature_undo"></label> </div> </div> <div class="blockopt"> <div class="inlineblock indent"><input type="checkbox" id="o_ts_ligature_ff" class="option" data-default="true" /><label for="o_ts_ligature_ff" class="opt_lbl">ff</label></div> <div class="inlineblock"><input type="checkbox" id="o_ts_ligature_fi" class="option" data-default="true" /><label for="o_ts_ligature_fi" class="opt_lbl">fi</label></div> <div class="inlineblock"><input type="checkbox" id="o_ts_ligature_ffi" class="option" data-default="true" /><label for="o_ts_ligature_ffi" class="opt_lbl">ffi</label></div> <div class="inlineblock"><input type="checkbox" id="o_ts_ligature_fl" class="option" data-default="true" /><label for="o_ts_ligature_fl" class="opt_lbl">fl</label></div> <div class="inlineblock"><input type="checkbox" id="o_ts_ligature_ffl" class="option" data-default="true" /><label for="o_ts_ligature_ffl" class="opt_lbl">ffl</label></div> <div class="inlineblock"><input type="checkbox" id="o_ts_ligature_ft" class="option" data-default="true" /><label for="o_ts_ligature_ft" class="opt_lbl">ft</label></div> <div class="inlineblock"><input type="checkbox" id="o_ts_ligature_st" class="option" data-default="false" /><label for="o_ts_ligature_st" class="opt_lbl">st</label></div> </div> </div> </fieldset> <!-- Misc --> <fieldset> <legend><input type="checkbox" id="o_group_misc" class="option" data-default="true" /><label for="o_group_misc" data-l10n-id="tf_misc"></label></legend> <div id="group_misc" class="groupblock"> <div class="blockopt underline"> <div id="res_o_ordinals_no_exponant" class="result fright"></div> <input type="checkbox" id="o_ordinals_no_exponant" class="option" data-default="true" /> <label for="o_ordinals_no_exponant" class="opt_lbl reducedw" data-l10n-id="tf_ordinals_no_exponant"></label> <div class="secondoption"> <input type="checkbox" id="o_ordinals_exponant" class="option" data-default="true" /> <label for="o_ordinals_exponant" class="opt_lbl smallw" data-l10n-id="tf_ordinals_exponant"></label> </div> </div> <div class="blockopt underline"> <div id="res_o_etc" class="result fright"></div> <input type="checkbox" id="o_etc" class="option" data-default="true" /> <label for="o_etc" class="opt_lbl largew" data-l10n-id="tf_etc"></label> </div> <div class="blockopt underline"> <div id="res_o_missing_hyphens" class="result fright"></div> <input type="checkbox" id="o_missing_hyphens" class="option" data-default="true" /> <label for="o_missing_hyphens" class="opt_lbl largew" data-l10n-id="tf_missing_hyphens"></label> </div> <div class="blockopt underline"> <div id="res_o_ma_word" class="result fright"></div> <input type="checkbox" id="o_ma_word" class="option" data-default="true" /> <label for="o_ma_word" class="opt_lbl largew" data-l10n-id="tf_ma_word"></label> </div> <div class="blockopt"> <div class="inlineblock indent"> <input type="checkbox" id="o_ma_1letter_lowercase" class="option" /> <label for="o_ma_1letter_lowercase" class="opt_lbl" data-l10n-id="tf_ma_1letter_lowercase"></label> </div> <div class="inlineblock indent"> <input type="checkbox" id="o_ma_1letter_uppercase" class="option" /> <label for="o_ma_1letter_uppercase" class="opt_lbl" data-l10n-id="tf_ma_1letter_uppercase"></label> </div> </div> </div> </fieldset> <!-- Restructuration --> <fieldset> <legend><input type="checkbox" id="o_group_struct" class="option" data-default="false" /><label for="o_group_struct" data-l10n-id="tf_struct"></label></legend> <div id="group_struct" class="groupblock"> <div class="blockopt underline"> <div id="res_o_remove_hyphens_at_end_of_paragraphs" class="result fright"></div> <input type="checkbox" id="o_remove_hyphens_at_end_of_paragraphs" class="option" data-default="false" /> <label for="o_remove_hyphens_at_end_of_paragraphs" class="opt_lbl largew" data-l10n-id="tf_remove_hyphens_at_end_of_paragraphs"></label> </div> <div class="blockopt underline"> <div id="res_o_merge_contiguous_paragraphs" class="result fright"></div> <input type="checkbox" id="o_merge_contiguous_paragraphs" class="option" data-default="false" /> <label for="o_merge_contiguous_paragraphs" class="opt_lbl largew" data-l10n-id="tf_merge_contiguous_paragraphs"></label> </div> </div> </fieldset> </div> </div> <div id="actions"> <div id="reset" class="button blue" data-l10n-id="tf_default"></div> <div id="apply" class="button green fright" data-l10n-id="tf_apply"></div> <div id="progressbarbox"><progress id="progressbar" style="width: 400px;"></progress> <span id="time_res"></span></div> <!--<div class="clearer"></div> <div id="infomsg" data-l10n-id="tf_infomsg"></div>--> </div> </body> </html> |
Added gc_lang/fr/xpi/data/tf_panel.js version [870535c123].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 | // JavaScript /* Events */ self.port.on("receiveTextToFormat", function (sText) { self.port.emit("applyFormattedText", applyOptions(sText)); }); self.port.on("start", function (sTFOptions) { self.port.emit("setHeight", document.getElementById("actions").offsetTop + document.getElementById("actions").offsetHeight); if (sTFOptions !== "") { setOptionsInPanel(JSON.parse(sTFOptions)); } else { reset(); } resetProgressBar(); document.getElementById('apply').focus(); }); document.getElementById('close').addEventListener("click", function (event) { self.port.emit('closePanel'); }); document.getElementById('reset').addEventListener("click", function (event) { reset(); }); document.getElementById('apply').addEventListener("click", function (event) { saveOptions(); self.port.emit("getTextToFormat"); }); window.addEventListener("click", function (xEvent) { let xElem = xEvent.target; if (xElem.id) { if (xElem.id.startsWith("resize")) { self.port.emit("resize", xElem.id, 10); } else if (xElem.id.startsWith("o_group_")) { switchGroup(xElem.id); resetProgressBar(); } } }, false); /* Actions */ function switchGroup (sOptName) { if (document.getElementById(sOptName).checked) { document.getElementById(sOptName.slice(2)).style.opacity = 1; } else { document.getElementById(sOptName.slice(2)).style.opacity = 0.3; } } function reset () { resetProgressBar(); for (let xNode of document.getElementsByClassName("option")) { xNode.checked = (xNode.dataset.default === "true"); if (xNode.id.startsWith("o_group_")) { switchGroup(xNode.id); } } } function resetProgressBar () { document.getElementById('progressbar').value = 0; document.getElementById('time_res').textContent = ""; } function setOptionsInPanel (oOptions) { for (let sOptName in oOptions) { //console.log(sOptName + ":" + oOptions[sOptName]); if (document.getElementById(sOptName) !== null) { document.getElementById(sOptName).checked = oOptions[sOptName]; if (sOptName.startsWith("o_group_")) { switchGroup(sOptName); } if (document.getElementById("res_"+sOptName) !== null) { document.getElementById("res_"+sOptName).textContent = ""; } } } } function saveOptions () { let oOptions = {}; for (let xNode of document.getElementsByClassName("option")) { oOptions[xNode.id] = xNode.checked; } self.port.emit("saveOptions", JSON.stringify(oOptions)); } function applyOptions (sText) { try { const t0 = Date.now(); //window.setCursor("wait"); // change pointer resetProgressBar(); document.getElementById('progressbar').max = 7; let n1 = 0, n2 = 0, n3 = 0, n4 = 0, n5 = 0, n6 = 0, n7 = 0; // Restructuration if (document.getElementById("o_group_struct").checked) { if (document.getElementById("o_remove_hyphens_at_end_of_paragraphs").checked) { [sText, n1] = removeHyphenAtEndOfParagraphs(sText); document.getElementById('res_o_remove_hyphens_at_end_of_paragraphs').textContent = n1; } if (document.getElementById("o_merge_contiguous_paragraphs").checked) { [sText, n1] = mergeContiguousParagraphs(sText); document.getElementById('res_o_merge_contiguous_paragraphs').textContent = n1; } document.getElementById("o_group_struct").checked = false; switchGroup("o_group_struct"); } document.getElementById('progressbar').value = 1; // espaces surnuméraires if (document.getElementById("o_group_ssp").checked) { if (document.getElementById("o_end_of_paragraph").checked) { [sText, n1] = formatText(sText, "end_of_paragraph"); document.getElementById('res_o_end_of_paragraph').textContent = n1; } if (document.getElementById("o_between_words").checked) { [sText, n1] = formatText(sText, "between_words"); document.getElementById('res_o_between_words').textContent = n1; } if (document.getElementById("o_start_of_paragraph").checked) { [sText, n1] = formatText(sText, "start_of_paragraph"); document.getElementById('res_o_start_of_paragraph').textContent = n1; } if (document.getElementById("o_before_punctuation").checked) { [sText, n1] = formatText(sText, "before_punctuation"); document.getElementById('res_o_before_punctuation').textContent = n1; } if (document.getElementById("o_within_parenthesis").checked) { [sText, n1] = formatText(sText, "within_parenthesis"); document.getElementById('res_o_within_parenthesis').textContent = n1; } if (document.getElementById("o_within_square_brackets").checked) { [sText, n1] = formatText(sText, "within_square_brackets"); document.getElementById('res_o_within_square_brackets').textContent = n1; } if (document.getElementById("o_within_quotation_marks").checked) { [sText, n1] = formatText(sText, "within_quotation_marks"); document.getElementById('res_o_within_quotation_marks').textContent = n1; } document.getElementById("o_group_ssp").checked = false; switchGroup("o_group_ssp"); } document.getElementById('progressbar').value = 2; // espaces typographiques if (document.getElementById("o_group_nbsp").checked) { if (document.getElementById("o_nbsp_before_punctuation").checked) { [sText, n1] = formatText(sText, "nbsp_before_punctuation"); [sText, n2] = formatText(sText, "nbsp_repair"); document.getElementById('res_o_nbsp_before_punctuation').textContent = n1 - n2; } if (document.getElementById("o_nbsp_within_quotation_marks").checked) { [sText, n1] = formatText(sText, "nbsp_within_quotation_marks"); document.getElementById('res_o_nbsp_within_quotation_marks').textContent = n1; } if (document.getElementById("o_nbsp_before_symbol").checked) { [sText, n1] = formatText(sText, "nbsp_before_symbol"); document.getElementById('res_o_nbsp_before_symbol').textContent = n1; } if (document.getElementById("o_nbsp_within_numbers").checked) { [sText, n1] = formatText(sText, "nbsp_within_numbers"); document.getElementById('res_o_nbsp_within_numbers').textContent = n1; } if (document.getElementById("o_nbsp_before_units").checked) { [sText, n1] = formatText(sText, "nbsp_before_units"); document.getElementById('res_o_nbsp_before_units').textContent = n1; } document.getElementById("o_group_nbsp").checked = false; switchGroup("o_group_nbsp"); } document.getElementById('progressbar').value = 3; // espaces manquants if (document.getElementById("o_group_typo").checked) { if (document.getElementById("o_ts_units").checked) { [sText, n1] = formatText(sText, "ts_units"); document.getElementById('res_o_ts_units').textContent = n1; } } if (document.getElementById("o_group_space").checked) { if (document.getElementById("o_add_space_after_punctuation").checked) { [sText, n1] = formatText(sText, "add_space_after_punctuation"); [sText, n2] = formatText(sText, "add_space_repair"); document.getElementById('res_o_add_space_after_punctuation').textContent = n1 - n2; } if (document.getElementById("o_add_space_around_hyphens").checked) { [sText, n1] = formatText(sText, "add_space_around_hyphens"); document.getElementById('res_o_add_space_around_hyphens').textContent = n1; } document.getElementById("o_group_space").checked = false; switchGroup("o_group_space"); } document.getElementById('progressbar').value = 4; // suppression if (document.getElementById("o_group_delete").checked) { if (document.getElementById("o_erase_non_breaking_hyphens").checked) { [sText, n1] = formatText(sText, "erase_non_breaking_hyphens"); document.getElementById('res_o_erase_non_breaking_hyphens').textContent = n1; } document.getElementById("o_group_delete").checked = false; switchGroup("o_group_delete"); } document.getElementById('progressbar').value = 5; // signes typographiques if (document.getElementById("o_group_typo").checked) { if (document.getElementById("o_ts_apostrophe").checked) { [sText, n1] = formatText(sText, "ts_apostrophe"); document.getElementById('res_o_ts_apostrophe').textContent = n1; } if (document.getElementById("o_ts_ellipsis").checked) { [sText, n1] = formatText(sText, "ts_ellipsis"); document.getElementById('res_o_ts_ellipsis').textContent = n1; } if (document.getElementById("o_ts_dash_start").checked) { if (document.getElementById("o_ts_m_dash_start").checked) { [sText, n1] = formatText(sText, "ts_m_dash_start"); } else { [sText, n1] = formatText(sText, "ts_n_dash_start"); } document.getElementById('res_o_ts_dash_start').textContent = n1; } if (document.getElementById("o_ts_dash_middle").checked) { if (document.getElementById("o_ts_m_dash_middle").checked) { [sText, n1] = formatText(sText, "ts_m_dash_middle"); } else { [sText, n1] = formatText(sText, "ts_n_dash_middle"); } document.getElementById('res_o_ts_dash_middle').textContent = n1; } if (document.getElementById("o_ts_quotation_marks").checked) { [sText, n1] = formatText(sText, "ts_quotation_marks"); document.getElementById('res_o_ts_quotation_marks').textContent = n1; } if (document.getElementById("o_ts_spell").checked) { [sText, n1] = formatText(sText, "ts_spell"); document.getElementById('res_o_ts_spell').textContent = n1; } if (document.getElementById("o_ts_ligature").checked) { // ligatures typographiques : fi, fl, ff, ffi, ffl, ft, st if (document.getElementById("o_ts_ligature_do").checked) { if (document.getElementById("o_ts_ligature_ffi").checked) { [sText, n1] = formatText(sText, "ts_ligature_ffi_do"); } if (document.getElementById("o_ts_ligature_ffl").checked) { [sText, n2] = formatText(sText, "ts_ligature_ffl_do"); } if (document.getElementById("o_ts_ligature_fi").checked) { [sText, n3] = formatText(sText, "ts_ligature_fi_do"); } if (document.getElementById("o_ts_ligature_fl").checked) { [sText, n4] = formatText(sText, "ts_ligature_fl_do"); } if (document.getElementById("o_ts_ligature_ff").checked) { [sText, n5] = formatText(sText, "ts_ligature_ff_do"); } if (document.getElementById("o_ts_ligature_ft").checked) { [sText, n6] = formatText(sText, "ts_ligature_ft_do"); } if (document.getElementById("o_ts_ligature_st").checked) { [sText, n7] = formatText(sText, "ts_ligature_st_do"); } } if (document.getElementById("o_ts_ligature_undo").checked) { if (document.getElementById("o_ts_ligature_ffi").checked) { [sText, n1] = formatText(sText, "ts_ligature_ffi_undo"); } if (document.getElementById("o_ts_ligature_ffl").checked) { [sText, n2] = formatText(sText, "ts_ligature_ffl_undo"); } if (document.getElementById("o_ts_ligature_fi").checked) { [sText, n3] = formatText(sText, "ts_ligature_fi_undo"); } if (document.getElementById("o_ts_ligature_fl").checked) { [sText, n4] = formatText(sText, "ts_ligature_fl_undo"); } if (document.getElementById("o_ts_ligature_ff").checked) { [sText, n5] = formatText(sText, "ts_ligature_ff_undo"); } if (document.getElementById("o_ts_ligature_ft").checked) { [sText, n6] = formatText(sText, "ts_ligature_ft_undo"); } if (document.getElementById("o_ts_ligature_st").checked) { [sText, n7] = formatText(sText, "ts_ligature_st_undo"); } } document.getElementById('res_o_ts_ligature').textContent = n1 + n2 + n3 + n4 + n5 + n6 + n7; } document.getElementById("o_group_typo").checked = false; switchGroup("o_group_typo"); } document.getElementById('progressbar').value = 6; // divers if (document.getElementById("o_group_misc").checked) { if (document.getElementById("o_ordinals_no_exponant").checked) { if (document.getElementById("o_ordinals_exponant").checked) { [sText, n1] = formatText(sText, "ordinals_exponant"); } else { [sText, n1] = formatText(sText, "ordinals_no_exponant"); } document.getElementById('res_o_ordinals_no_exponant').textContent = n1; } if (document.getElementById("o_etc").checked) { [sText, n1] = formatText(sText, "etc"); document.getElementById('res_o_etc').textContent = n1; } if (document.getElementById("o_missing_hyphens").checked) { [sText, n1] = formatText(sText, "missing_hyphens"); document.getElementById('res_o_missing_hyphens').textContent = n1; } if (document.getElementById("o_ma_word").checked) { [sText, n1] = formatText(sText, "ma_word"); if (document.getElementById("o_ma_1letter_lowercase").checked) { [sText, n1] = formatText(sText, "ma_1letter_lowercase"); if (document.getElementById("o_ma_1letter_uppercase").checked) { [sText, n1] = formatText(sText, "ma_1letter_uppercase"); } } document.getElementById('res_o_ma_word').textContent = n1; } document.getElementById("o_group_misc").checked = false; switchGroup("o_group_misc"); } document.getElementById('progressbar').value = document.getElementById('progressbar').max; // end of processing //window.setCursor("auto"); // restore pointer const t1 = Date.now(); document.getElementById('time_res').textContent = this.getTimeRes((t1-t0)/1000); } catch (e) { console.error("\n" + e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message); } return sText; } function formatText (sText, sOptName) { let nCount = 0; try { if (!oReplTable.hasOwnProperty(sOptName)) { console.log("# Error. TF: there is no option “" + sOptName+ "”."); return [sText, nCount]; } for (let [zRgx, sRep] of oReplTable[sOptName]) { nCount += (sText.match(zRgx) || []).length; sText = sText.replace(zRgx, sRep); } document.getElementById('progressbar').value += 1; } catch (e) { console.error("\n" + e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message); } return [sText, nCount]; }; function removeHyphenAtEndOfParagraphs (sText) { let nCount = (sText.match(/-[ ]*\n/gm) || []).length; sText = sText.replace(/-[ ]*\n/gm, ""); /* sText = sText.replace(/-[ ]+$/gm, "-"); // remove spaces at end of paragraphs if - is the last character let m = null; let zRegExp = /([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ]+)-\n([a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ]+)/g; while ((m = zRegExp.exec(sText)) !== null) { console.log("+"); sText = sText.slice(0, m.index) + m[1] + m[2] + sText.slice(RegExp.lastIndex); }*/ return [sText, nCount]; } function mergeContiguousParagraphs (sText) { let nCount = 0; sText = sText.replace(/^[ ]+$/gm, ""); // clear empty paragraphs let s = ""; for (let sParagraph of getParagraph(sText)) { if (sParagraph === "") { s += "\n"; } else { s += sParagraph + " "; nCount += 1; } } s = s.replace(/ +/g, " ").replace(/ $/gm, ""); return [s, nCount]; } function* getParagraph (sText) { // generator: returns paragraphs of text let iStart = 0; let iEnd = 0; while ((iEnd = sText.indexOf("\n", iStart)) !== -1) { yield sText.slice(iStart, iEnd); iStart = iEnd + 1; } yield sText.slice(iStart); } function getTimeRes (n) { // returns duration in seconds as string if (n < 10) { return n.toFixed(3).toString() + " s"; } if (n < 100) { return n.toFixed(2).toString() + " s"; } if (n < 1000) { return n.toFixed(1).toString() + " s"; } return n.toFixed().toString() + " s"; } |
Added gc_lang/fr/xpi/gce_worker.js version [779e66492e].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | // JavaScript // Grammar checker engine // PromiseWorker // This code is executed in a separate thread (×20 faster too!!!) // Firefox WTF: it’s impossible to use require as in the main thread here, // so it is required to declare a resource in the file “chrome.manifest”. "use strict"; // copy/paste // https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/PromiseWorker.jsm importScripts("resource://gre/modules/workers/require.js"); let PromiseWorker = require("resource://gre/modules/workers/PromiseWorker.js"); // Instantiate AbstractWorker (see below). let worker = new PromiseWorker.AbstractWorker(); worker.dispatch = function(method, args = []) { // Dispatch a call to method `method` with args `args` return self[method](...args); }; worker.postMessage = function(...args) { // Post a message to the main thread self.postMessage(...args); }; worker.close = function() { // Close the worker self.close(); }; worker.log = function(...args) { // Log (or discard) messages (optional) dump("Worker: " + args.join(" ") + "\n"); }; // Connect it to message port. self.addEventListener("message", msg => worker.handleMessage(msg)); // end of copy/paste // no console here, use “dump” let gce = null; // module: grammar checker engine let text = null; let tkz = null; // module: tokenizer let lxg = null; // module: lexicographer let helpers = null; let oTokenizer = null; let oDict = null; let oLxg = null; function loadGrammarChecker (sGCOptions="") { if (gce === null) { gce = require("resource://grammalecte/fr/gc_engine.js"); helpers = require("resource://grammalecte/helpers.js"); text = require("resource://grammalecte/text.js"); tkz = require("resource://grammalecte/tokenizer.js"); lxg = require("resource://grammalecte/fr/lexicographe.js"); oTokenizer = new tkz.Tokenizer("fr"); helpers.setLogOutput(worker.log); gce.load(); oDict = gce.getDictionary(); oLxg = new lxg.Lexicographe(oDict); if (sGCOptions !== "") { gce.setOptions(helpers.objectToMap(JSON.parse(sGCOptions))); } // we always retrieve options from the gce, for setOptions filters obsolete options return gce.getOptions()._toString(); } } function parse (sText, sLang, bDebug, bContext) { let aGrammErr = gce.parse(sText, sLang, bDebug, bContext); return JSON.stringify(aGrammErr); } function parseAndSpellcheck (sText, sLang, bDebug, bContext) { let aGrammErr = gce.parse(sText, sLang, bDebug, bContext); let aSpellErr = []; for (let oToken of oTokenizer.genTokens(sText)) { if (oToken.sType === 'WORD' && !oDict.isValidToken(oToken.sValue)) { aSpellErr.push(oToken); } } return JSON.stringify({ aGrammErr: aGrammErr, aSpellErr: aSpellErr }); } function parseAndTag (sText, iParagraph, sLang, bDebug) { sText = text.addHtmlEntities(sText); let aSpellErr = []; for (let oToken of oTokenizer.genTokens(sText)) { if (oToken.sType === 'WORD' && !oDict.isValidToken(oToken.sValue)) { aSpellErr.push(oToken); } } let aGrammErr = gce.parse(sText, sLang, bDebug); let sHtml = text.tagParagraph(sText, iParagraph, aGrammErr, aSpellErr); return sHtml; } function parseAndGenerateParagraph (sText, iParagraph, sLang, bDebug) { return text.createHTMLBlock(parseAndTag(sText, iParagraph, sLang, bDebug), iParagraph); } function getOptions () { return gce.getOptions()._toString(); } function getDefaultOptions () { return gce.getDefaultOptions()._toString(); } function setOptions (sGCOptions) { gce.setOptions(helpers.objectToMap(JSON.parse(sGCOptions))); return gce.getOptions()._toString(); } function setOption (sOptName, bValue) { gce.setOptions(new Map([ [sOptName, bValue] ])); return gce.getOptions()._toString(); } function resetOptions () { gce.resetOptions(); return gce.getOptions()._toString(); } function fullTests (sGCOptions="") { if (!gce || !oDict) { return "# Error: grammar checker or dictionary not loaded." } let dMemoOptions = gce.getOptions(); if (sGCOptions) { gce.setOptions(helpers.objectToMap(JSON.parse(sGCOptions))); } let tests = require("resource://grammalecte/tests.js"); let oTest = new tests.TestGrammarChecking(gce); let sAllRes = ""; for (let sRes of oTest.testParse()) { dump(sRes+"\n"); sAllRes += sRes+"<br/>"; } gce.setOptions(dMemoOptions); return sAllRes; } // Lexicographer function analyzeWords (sText) { return oLxg.analyzeText(sText); } |
Added gc_lang/fr/xpi/locale/en.properties version [d81be224ab].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | mainTitle = Grammalecte [fr] subTitle = Grammar checker for the French language noErrorFound = No error detected. paragraphsParsed = Paragraphs parsed: numberOfParagraphs = Number of Paragraphs: numberOfWords = Number of words: error = Oops, an error has occurred. :( checkText = French grammar checking buttonTooltip = Grammalecte · French grammar checker lexicographer = Lexicographer textFormatter = Text Formatter website = Web site conjugueur = Conjugation general_info = License: GPL 3 useContextMenu = Use the context menu to launch the grammar checker (right click on a text area or on the selected text). thanks1 = Grammalecte thanks thanks2 = and all those who supported us… separator = New text area testzone = Test Zone parse = Parse testall = Parse all edit_error = Edit error. The proofreader has detected an edition error. The original text hasn’t been modified. shortcuts = SHORTCUTS keyTF = CTRL+SHIFT+F6 (on text area) keyGC = CTRL+SHIFT+F7 (on text area) keyCJ = CTRL+SHIFT+F8 keyLabelTF = Text Formatter keyLabelGC = Grammar checking keyLabelCJ = Conjugation tool tf_title = Text Formatter tf_ssp = Supernumerary spaces tf_start_of_paragraph = At the beginning of paragraph tf_between_words = Between words tf_end_of_paragraph = At the end of paragraph tf_before_punctuation = Before dots (.), commas (,) tf_within_parenthesis = Within parenthesis tf_within_square_brackets = Within square brackets tf_within_quotation_marks = Within “ and ” tf_space = Missing spaces tf_add_space_after_punctuation = After , ; : ? ! . … tf_add_space_around_hyphens = Surrounding dashes tf_nbsp = Non breaking spaces tf_nbsp_before_punctuation = Before : ; ? and ! tf_nbsp_within_quotation_marks = With quoting marks « and » tf_nbsp_before_symbol = Before % ‰ € $ £ ¥ ˚C tf_nbsp_within_numbers = Within numbers tf_nbsp_before_units = Before units of measurement tf_delete = Deletions tf_erase_non_breaking_hyphens = Soft hyphens tf_typo = Typographical signs tf_ts_apostrophe = Apostrophe (’) tf_ts_ellipsis = Ellipsis (…) tf_ts_dash_middle = Dashes: tf_ts_dash_start = Dashes at beginning of paragraph: tf_emdash = em dash (—) tf_endash = en dash (–) tf_ts_quotation_marks = Change quotation marks (" and ') tf_ts_units = Interpuncts in units (N·m, Ω·m…) tf_ts_spell = Ligatures (cœur…) and diacritics (ça, État…) tf_ts_ligature = Ligatures tf_ts_ligature_do = Set tf_ts_ligature_undo = Unset tf_misc = Miscellaneous tf_ordinals_no_exponant = Ordinals (15e, XXIe…) tf_ordinals_exponant = e → ᵉ tf_etc = Et cætera, etc. tf_missing_hyphens = Missing hyphens tf_ma_word = Missing apostrophes tf_ma_1letter_lowercase = single letters (j’ n’ m’ t’ s’ c’ d’ l’) tf_ma_1letter_uppercase = Cap. tf_struct = Restructuration [!] tf_remove_hyphens_at_end_of_paragraphs = Remove syllabification hyphens at EOL/EOP tf_merge_contiguous_paragraphs = Merge contiguous paragraphs [!] tf_apply = Apply tf_default = Default tf_infomsg = The text formatter is a tool which automates correction of typographical errors. Use this tool with caution. Check your text after use. options = Options grammar_options = Grammar options spelling_options = Spelling options spelling = Spelling grammar = Grammar dictionaries_info = Select dictionaries you want to see in textareas list. Selected dictionaries are added instantly. Whereas unselected dictionnaries will be removed only at Firefox’s restart. dict_classic = “Classic” (recommended) dict_classic_descr = This is the “Modern” dictionary plus classical spellings, some of them still widely used, others obsolete. This is the recommended dictionary if French is your native language. dict_modern = “Modern” dict_modern_descr = This dictionary offers the French spelling as it is written nowadays most often. This is the recommended dictionary if French is not your mother tongue or if you want only one correct spelling per word. dict_reform = “Reform 1990” dict_reform_descr = With this dictionary, only the reformed spelling is recognized. As many of reformed spellings are considered erroneous for many people, this dictionary is unadvised. Reformed spellings commonly used are already included in the “Modern” dictionary. dict_classic_reform = “All variants” dict_classic_reform_descr = This dictionary contains all spelling variants, classical and reformed, and some others even rarer. This dictionary is unadvised for those who don’t know very well the French language. default_options = Reset options ${en} |
Added gc_lang/fr/xpi/locale/fr.properties version [a1dfa8a988].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | mainTitle = Grammalecte [fr] subTitle = Correcteur grammatical pour la langue française noErrorFound = Aucune erreur détectée. paragraphsParsed = Paragraphes analysés : numberOfParagraphs = Nombre de paragraphes : numberOfWords = Nombre de mots : error = Oups, une erreur s’est produite. :( checkText = Correction grammaticale [fr] buttonTooltip = Grammalecte · Correcteur grammatical lexicographer = Lexicographe textFormatter = Formateur de texte website = Site web conjugueur = Conjugueur general_info = Licence : GPL 3 useContextMenu = Utilisez le menu contextuel pour lancer le correcteur (clic droit sur une zone de texte ou un texte sélectionné). thanks1 = Grammalecte remercie thanks2 = et tous ceux qui l’ont soutenu… separator = Nouvelle section de texte testzone = Zone de test parse = Analyser testall = Tout tester edit_error = Erreur d’édition. Le correcteur a repéré une erreur d’édition. Le texte originel n’a pas été modifié. shortcuts = RACCOURCIS keyTF = CTRL+MAJ+F6 (sur zone de texte) keyGC = CTRL+MAJ+F7 (sur zone de texte) keyCJ = CTRL+MAJ+F8 keyLabelTF = Formateur de texte keyLabelGC = Correction grammaticale keyLabelCJ = Conjugueur tf_title = Formateur de texte tf_ssp = Espaces surnuméraires tf_start_of_paragraph = En début de paragraphe tf_between_words = Entre les mots tf_end_of_paragraph = En fin de paragraphe tf_before_punctuation = Avant les points (.), les virgules (,) tf_within_parenthesis = À l’intérieur des parenthèses tf_within_square_brackets = À l’intérieur des crochets tf_within_quotation_marks = À l’intérieur des guillemets “ et ” tf_space = Espaces manquants tf_add_space_after_punctuation = Après , ; : ? ! . … tf_add_space_around_hyphens = Autour des tirets d’incise tf_nbsp = Espaces insécables tf_nbsp_before_punctuation = Avant : ; ? et ! tf_nbsp_within_quotation_marks = Avec les guillemets « et » tf_nbsp_before_symbol = Avant % ‰ € $ £ ¥ ˚C tf_nbsp_within_numbers = À l’intérieur des nombres tf_nbsp_before_units = Avant les unités de mesure tf_delete = Suppressions tf_erase_non_breaking_hyphens = Tirets conditionnels tf_typo = Signes typographiques tf_ts_apostrophe = Apostrophe (’) tf_ts_ellipsis = Points de suspension (…) tf_ts_dash_middle = Tirets d’incise : tf_ts_dash_start = Tirets en début de paragraphe : tf_emdash = cadratin (—) tf_endash = demi-cadratin (–) tf_ts_quotation_marks = Modifier les guillemets droits (" et ') tf_ts_units = Points médians des unités (N·m, Ω·m…) tf_ts_spell = Ligatures (cœur…) et diacritiques (ça, État…) tf_ts_ligature = Ligatures tf_ts_ligature_do = Faire tf_ts_ligature_undo = Défaire tf_misc = Divers tf_ordinals_no_exponant = Ordinaux (15e, XXIe…) tf_ordinals_exponant = e → ᵉ tf_etc = Et cætera, etc. tf_missing_hyphens = Traits d’union manquants tf_ma_word = Apostrophes manquantes tf_ma_1letter_lowercase = lettres isolées (j’ n’ m’ t’ s’ c’ d’ l’) tf_ma_1letter_uppercase = Maj. tf_struct = Restructuration [!] tf_remove_hyphens_at_end_of_paragraphs = Enlever césures en fin de ligne/paragraphe [!] tf_merge_contiguous_paragraphs = Fusionner les paragraphes contigus [!] tf_apply = Appliquer tf_default = Par défaut tf_infomsg = Le formateur de texte est un outil qui automatise la correction d’erreurs typographiques. Utilisez l’outil avec prudence. Vérifiez votre texte après emploi. options = Options grammar_options = Options grammaticales spelling_options = Options orthographiques spelling = Orthographe grammar = Grammaire dictionaries_info = Cochez les dictionnaires que vous voulez voir apparaître dans la liste des zones de texte. L’ajout des dictionnaires se fait instantanément. En revanche, les dictionnaires ôtés ne disparaîtront qu’au redémarrage de Firefox. dict_classic = “Classique” (recommandé) dict_classic_descr = Il s’agit du dictionnaire “Moderne”, avec des graphies classiques en sus, certaines encore communément utilisées, d’autres désuètes. C’est le dictionnaire recommandé si le français est votre langue maternelle. dict_modern = “Moderne” dict_modern_descr = Ce dictionnaire propose l’orthographe telle qu’elle est écrite aujourd’hui le plus couramment. C’est le dictionnaire recommandé si le français n’est pas votre langue maternelle ou si vous ne désirez qu’une seule graphie correcte par mot. dict_reform = “Réforme 1990” dict_reform_descr = Avec ce dictionnaire, seule l’orthographe réformée est reconnue. Attendu que bon nombre de graphies réformées sont considérées comme erronées par beaucoup, ce dictionnaire est déconseillé. Les graphies passées dans l’usage sont déjà incluses dans le dictionnaire “Moderne”. dict_classic_reform = “Toutes variantes” dict_classic_reform_descr = Ce dictionnaire contient les variantes graphiques, classiques, réformées, ainsi que d’autres plus rares encore. Ce dictionnaire est déconseillé à ceux qui ne connaissent pas très bien la langue française. default_options = Options par défaut ${fr} |
Added gc_lang/fr/xpi/package.json version [c0e1ab12d6].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | { "name": "grammalecte-fr", "title": "Grammalecte [fr]", "id": "French-GC@grammalecte.net", "version": "0.5.16", "description": "Correcteur grammatical pour le français", "homepage": "http://www.dicollecte.org/grammalecte", "main": "ui.js", "icon": "data/img/icon-48.png", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "Olivier R.", "license": "GPL-3.0 (http://www.gnu.org/licenses/gpl-3.0.html)", "engines": { "firefox": ">=45.0" }, "unpack": true, "permissions": { "multiprocess": true, "private-browsing": true }, "preferences": [ { "name": "sDictSuggestLocale", "title": "*", "hidden": true, "type": "string", "value": "fr-FR-classic" }, { "name": "bDictModern", "title": "*", "hidden": true, "type": "bool", "value": false }, { "name": "bDictClassic", "title": "*", "hidden": true, "type": "bool", "value": true }, { "name": "bDictReform", "title": "*", "hidden": true, "type": "bool", "value": false }, { "name": "bDictClassicReform", "title": "*", "hidden": true, "type": "bool", "value": false }, { "name": "nGCPanelWidth", "title": "*", "hidden": true, "type": "integer", "value": 520 }, { "name": "nGCPanelHeight", "title": "*", "hidden": true, "type": "integer", "value": 600 }, { "name": "nLxgPanelWidth", "title": "*", "hidden": true, "type": "integer", "value": 520 }, { "name": "nLxgPanelHeight", "title": "*", "hidden": true, "type": "integer", "value": 500 }, { "name": "sGCOptions", "title": "*", "hidden": true, "type": "string", "value": "" }, { "name": "sTFOptions", "title": "*", "hidden": true, "type": "string", "value": "" } ] } |
Added gc_lang/fr/xpi/spellchecker.js version [c120dbdcc5].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | /* Hunspell wrapper XPCOM obsolete (?), but there is nothing else... Overly complicated and weird. To throw away ASAP if possible. And you can’t access to this from a PromiseWorker (it sucks). https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/mozISpellCheckingEngine https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL/Using_spell_checking_in_XUL https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIFile https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/FileUtils.jsm */ "use strict"; const {Cc, Ci, Cu} = require("chrome"); const FileUtils = Cu.import("resource://gre/modules/FileUtils.jsm").FileUtils; const AddonManager = Cu.import("resource://gre/modules/AddonManager.jsm").AddonManager; /* const parser = Cc["@mozilla.org/parserutils;1"].getService(Ci.nsIParserUtils); const persodict = Cc["@mozilla.org/spellchecker/personaldictionary;1"].getService(Ci.mozIPersonalDictionary); */ const system = require("sdk/system"); const helpers = require("resource://grammalecte/helpers.js"); let xSCEngine = null; function initSpellChecker () { if (xSCEngine === null) { try { let sSpellchecker = "@mozilla.org/spellchecker/myspell;1"; if ("@mozilla.org/spellchecker/hunspell;1" in Cc) { sSpellchecker = "@mozilla.org/spellchecker/hunspell;1"; } if ("@mozilla.org/spellchecker/engine;1" in Cc) { sSpellchecker = "@mozilla.org/spellchecker/engine;1"; } xSCEngine = Cc[sSpellchecker].getService(Ci.mozISpellCheckingEngine); } catch (e) { console.error("Can’t initiate the spellchecker."); helpers.logerror(e); } } } function getDictionariesList () { initSpellChecker(); try { let l = {}; let c = {}; xSCEngine.getDictionaryList(l, c); return l.value; } catch (e) { helpers.logerror(e); return []; } } function setDictionary (sLocale) { if (getDictionariesList().includes(sLocale)) { try { xSCEngine.dictionary = sLocale; // en-US, fr, etc. return true; } catch (e) { helpers.logerror(e); return false; } } else { console.error("Warning. No dictionary for locale: " + sLocale); console.error("Existing dictionaries: " + getDictionariesList().join(" | ")); } return false; } function check (sWord) { // todo: check in personal dict? try { return xSCEngine.check(sWord); } catch (e) { helpers.logerror(e); return false; } } function suggest (sWord) { try { let lSugg = {}; xSCEngine.suggest(sWord, lSugg, {}); return lSugg.value; // lSugg.value is a JavaScript Array of strings } catch (e) { helpers.logerror(e); return ['#Erreur.']; } } function addDirectory (sFolder) { try { let xNsiFolder = new FileUtils.File(sFolder); xSCEngine.addDirectory(xNsiFolder); } catch (e) { console.error("Unable to add directory: " + sFolder); helpers.logerror(e); } } function removeDirectory (sFolder) { // does not work but no exception raised (bug?) try { let xNsiFolder = new FileUtils.File(sFolder); xSCEngine.removeDirectory(xNsiFolder); } catch (e) { console.error("Unable to remove directory: " + sFolder); helpers.logerror(e); } } function setExtensionDictFolder (sDictName, bActivate) { try { let sPath = "/data/dictionaries/" + sDictName; AddonManager.getAddonByID("French-GC@grammalecte.net", function(addon) { let xURI = addon.getResourceURI(sPath); //console.log("> " + xURI.path); let sFolder = xURI.path; if (system.platform === "winnt") { sFolder = sFolder.slice(1).replace(/\//g, "\\\\"); } //console.log("> " + sFolder); if (bActivate) { addDirectory(sFolder); } else { removeDirectory(sFolder); } }); } catch (e) { console.error("Unable to add extension folder"); helpers.logerror(e); } } exports.initSpellChecker = initSpellChecker; exports.getDictionariesList = getDictionariesList; exports.setDictionary = setDictionary; exports.check = check; exports.suggest = suggest; exports.addDirectory = addDirectory; exports.removeDirectory = removeDirectory; exports.setExtensionDictFolder = setExtensionDictFolder; |
Added gc_lang/fr/xpi/ui.js version [e0b9ae16c2].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 | /* GRAMMALECTE [fr] FOR FIREFOX Author: Olivier R. License: GPL 3 Website: http://www.dicollecte.org/grammalecte */ //// FIREFOX UI "use strict"; const tabs = require("sdk/tabs"); const toggle = require("sdk/ui/button/toggle"); const panel = require("sdk/panel"); const self = require("sdk/self"); const core = require("sdk/view/core"); const contextmenu = require("sdk/context-menu"); const _ = require("sdk/l10n").get; const hotkeys = require("sdk/hotkeys"); const sp = require("sdk/simple-prefs"); const clipboard = require("sdk/clipboard"); //const selection = require("sdk/selection"); const { Cu } = require("chrome"); const { BasePromiseWorker } = Cu.import('resource://gre/modules/PromiseWorker.jsm', {}); // Grammalecte const sce = require("./spellchecker.js"); const text = require("./grammalecte/text.js"); const helpers = require("./grammalecte/helpers.js"); const tests = require("./grammalecte/tests.js"); /* Add dictionaries */ sce.initSpellChecker(); if (sp.prefs['bDictClassic']) sce.setExtensionDictFolder("fr-FR-classic", true); if (sp.prefs['bDictModern']) sce.setExtensionDictFolder("fr-FR-modern", true); if (sp.prefs['bDictReform']) sce.setExtensionDictFolder("fr-FR-reform", true); if (sp.prefs['bDictClassicReform']) sce.setExtensionDictFolder("fr-FR-classic-reform", true); function setExtensionDictFolder (sDictOption, bValue) { sce.setExtensionDictFolder(sDictOption, bValue); switch (sDictOption) { case "fr-FR-classic": sp.prefs["bDictClassic"] = bValue; break; case "fr-FR-modern": sp.prefs["bDictModern"] = bValue; break; case "fr-FR-reform": sp.prefs["bDictReform"] = bValue; break; case "fr-FR-classic-reform": sp.prefs["bDictClassicReform"] = bValue; break; default: console.error("# Unknown dictionary: " + sDictOption); } if (sp.prefs["bDictClassic"]) { sp.prefs["sDictSuggestLocale"] = "fr-FR-classic"; } else if (sp.prefs["bDictClassicReform"]) { sp.prefs["sDictSuggestLocale"] = "fr-FR-classic-reform"; } else if (sp.prefs["bDictReform"]) { sp.prefs["sDictSuggestLocale"] = "fr-FR-reform"; } else if (sp.prefs["bDictModern"]) { sp.prefs["sDictSuggestLocale"] = "fr-FR-modern"; } else { sp.prefs["sDictSuggestLocale"] = ""; } } /* lazy loading */ let ibdawg = null // module: indexable binary direct acyclic word graph let lxg = null; // module: lexicographer let tf = null; // module: text formatter let xGCEWorker = null; // PromiseWorker to get jobs done in a separate thread (it’s 20 times faster too!!!) let oDict = null; let oLxg = null; let oTF = null; function loadGrammarChecker (bSetPanelOptions=false) { if (xGCEWorker === null) { // Grammar checker xGCEWorker = new BasePromiseWorker('chrome://promiseworker/content/gce_worker.js'); let xPromise = xGCEWorker.post('loadGrammarChecker', [sp.prefs["sGCOptions"]]); xPromise.then( function (aVal) { sp.prefs["sGCOptions"] = aVal; if (bSetPanelOptions) { xAboutPanel.port.emit("sendGrammarOptionsToPanel", aVal); } }, function (aReason) { console.error('Promise rejected - ', aReason); } ).catch( function (aCaught) { console.error('Promise Error - ', aCaught); } ); } else if (bSetPanelOptions) { xAboutPanel.port.emit("sendGrammarOptionsToPanel", sp.prefs["sGCOptions"]); } return true; } function loadLexicographe () { if (ibdawg === null || lxg === null || oDict === null || oLxg === null) { lxg = require("./grammalecte/fr/lexicographe.js"); ibdawg = require("resource://grammalecte/ibdawg.js"); oDict = new ibdawg.IBDAWG("fr"); oLxg = new lxg.Lexicographe(oDict); } } function loadTextFormatter () { if (tf === null || oTF === null) { tf = require("./grammalecte/fr/textformatter.js"); oTF = new tf.TextFormatter(); } } /* Current state */ let xActiveWorker = null; let bDictActive = false; /* Main Button */ const xMainButton = toggle.ToggleButton({ id: "grammalecte-mainbutton", label: _("mainTitle"), tooltip: _("buttonTooltip"), icon: { "16": "./img/icon-16.png", "32": "./img/icon-32.png", "64": "./img/icon-64.png" }, // Note: it is not possible to distinguish between left/right click // https://blog.mozilla.org/addons/2014/03/13/new-add-on-sdk-australis-ui-features-in-firefox-29/comment-page-1/#comment-178621, onClick: function (state) { createAboutPanel(); xAboutPanel.show({position: xMainButton}); } }); /* About */ let xAboutPanel = null; function createAboutPanel () { if (xAboutPanel === null) { xAboutPanel = panel.Panel({ contentURL: self.data.url("about_panel.html"), contentScriptFile: self.data.url("about_panel.js"), onHide: function () { xMainButton.state("window", {checked: false}); xAboutPanel.port.emit("showHelp"); }, position: { right: 0, bottom: 0 }, width: 320, height: 670 }); xAboutPanel.port.emit("calcDefaultPanelHeight"); xAboutPanel.port.on("setHeight", function (n) { xAboutPanel.resize(320, n); }); xAboutPanel.port.on("openConjugueur", function () { createConjPanel(); xConjPanel.show({position: xMainButton}); xConjPanel.port.emit("conjugate", "être"); }); xAboutPanel.port.on("openURL", function (sURL) { tabs.open(sURL); }); xAboutPanel.port.on("loadGrammarOptions", function () { loadGrammarChecker(true); }); xAboutPanel.port.on("loadSpellingOptions", function () { xAboutPanel.port.emit("sendSpellingOptionsToPanel", sp.prefs["bDictModern"], sp.prefs["bDictClassic"], sp.prefs["bDictReform"], sp.prefs["bDictClassicReform"]); }); xAboutPanel.port.on("changeDictSetting", function (sDictOption, bValue) { setExtensionDictFolder(sDictOption, bValue); }); xAboutPanel.port.on("setOption", function (sOptionId, bValue) { let xPromise = xGCEWorker.post('setOption', [sOptionId, bValue]); xPromise.then( function (aVal) { sp.prefs["sGCOptions"] = aVal; }, function (aReason) { console.error('Promise rejected - ', aReason); } ).catch( function (aCaught) { console.error('Promise Error - ', aCaught); } ); }); xAboutPanel.port.on("resetOptions", function () { let xPromise = xGCEWorker.post('resetOptions'); xPromise.then( function (aVal) { sp.prefs["sGCOptions"] = aVal; xAboutPanel.port.emit("sendGrammarOptionsToPanel", sp.prefs["sGCOptions"]); }, function (aReason) { console.error('Promise rejected - ', aReason); } ).catch( function (aCaught) { console.error('Promise Error - ', aCaught); } ); }); } } /* Grammar Checker */ let xGCPanel = null; function createGCPanel () { if (xGCPanel === null) { xGCPanel = panel.Panel({ contentURL: self.data.url("gc_panel.html"), contentScriptFile: self.data.url("gc_panel.js"), onShow: function () { xGCPanel.port.emit("setPanelWidth", sp.prefs["nGCPanelWidth"]); if (sp.prefs["sDictSuggestLocale"] !== "") { bDictActive = sce.setDictionary(sp.prefs["sDictSuggestLocale"]); } if (!bDictActive) { bDictActive = sce.setDictionary("fr"); // default dictionary in French version of Firefox } }, onHide: function () { xGCPanel.port.emit("clearErrors"); xGCPanel.resize(sp.prefs["nGCPanelWidth"], sp.prefs["nGCPanelHeight"]); xMainButton.state("window", {checked: false}); }, //contextMenu: true, /* ugly, look for contextMenuContentData */ position: { right: 0, bottom: 0 }, width: sp.prefs["nGCPanelWidth"], height: sp.prefs["nGCPanelHeight"] }); core.getActiveView(xGCPanel).setAttribute("noautohide", true); //core.getActiveView(xGCPanel).setAttribute("backdrag", true); //core.getActiveView(xGCPanel).setAttribute("level", 'floating'); xGCPanel.port.on("closePanel", function () { if (xActiveWorker) { xActiveWorker.port.emit("clear"); xActiveWorker = null; } xGCPanel.hide(); }); xGCPanel.port.on("openURL", function (sURL) { tabs.open(sURL); }); xGCPanel.port.on("correction", function (sIdParagraph, sText) { if (xActiveWorker) { xActiveWorker.port.emit("setParagraph", parseInt(sIdParagraph), sText); xActiveWorker.port.emit("rewrite"); } }); xGCPanel.port.on("modifyAndCheck", function (sIdParagraph, sText) { if (checkConsistency(sText)) { if (xActiveWorker) { xActiveWorker.port.emit("setParagraph", parseInt(sIdParagraph), sText); xActiveWorker.port.emit("rewrite"); } checkAndSendToPanel(sIdParagraph, sText); } else { if (xActiveWorker) { xActiveWorker.port.emit("getParagraph", parseInt(sIdParagraph)); } xGCPanel.port.emit("showMessage", _("edit_error")); } }); xGCPanel.port.on("getSuggestionsForTo", function (sWord, sTooltipId) { if (bDictActive) { let lSugg = sce.suggest(sWord); xGCPanel.port.emit("suggestionsFor", sWord, lSugg.join('|'), sTooltipId); } else { xGCPanel.port.emit("suggestionsFor", sWord, "# Erreur : dictionnaire orthographique introuvable.", sTooltipId); } }); xGCPanel.port.on("copyToClipboard", function (sText) { clipboard.set(sText); }); xGCPanel.port.on("resize", function(sCmd, n) { if (sCmd == "expand") { xGCPanel.resize(sp.prefs["nGCPanelWidth"], sp.prefs["nGCPanelHeight"]); } else if (sCmd == "reduce") { xGCPanel.resize(280, 50); } else { switch (sCmd) { case "resize_h_bigger": if (sp.prefs["nGCPanelHeight"] < 1200) { sp.prefs["nGCPanelHeight"] += n; } break; case "resize_h_smaller": if (sp.prefs["nGCPanelHeight"] > 250) { sp.prefs["nGCPanelHeight"] -= n } break; case "resize_w_bigger": if (sp.prefs["nGCPanelWidth"] < 1200) { sp.prefs["nGCPanelWidth"] += n; } break; case "resize_w_smaller": if (sp.prefs["nGCPanelWidth"] > 400) { sp.prefs["nGCPanelWidth"] -= n; } break; } xGCPanel.resize(sp.prefs["nGCPanelWidth"], sp.prefs["nGCPanelHeight"]); xGCPanel.port.emit("setPanelWidth", sp.prefs["nGCPanelWidth"]); } }); } } function checkConsistency (sText) { if (sText.includes("<!-- err_end -->") || sText.includes('<span id="tooltip') || sText.includes('<u id="err')) { return false; } return true; } function checkAndSendToPanel (sIdParagraph, sText) { let xPromise = xGCEWorker.post('parseAndTag', [sText, parseInt(sIdParagraph), "FR", false]); xPromise.then( function (aVal) { xGCPanel.port.emit("refreshParagraph", sIdParagraph, aVal); }, function (aReason) { console.error('Promise rejected - ', aReason); } ).catch( function (aCaught) { console.error('Promise Error - ', aCaught); } ); } const xHotkeyGrammarChecker = hotkeys.Hotkey({ combo: "accel-shift-f7", onPress: function () { createGCPanel(); xActiveWorker = tabs.activeTab.attach({ contentScriptFile: self.data.url("replace_text.js") }); xActiveWorker.port.emit("setActiveElement", true); xActiveWorker.port.on("yesThisIsTextZone", function (sText) { if (!xGCPanel.isShowing) { xGCPanel.show({position: xMainButton}); } sendTextToPanel(sText); }); xActiveWorker.port.on("emitParagraph", function (iParagraph, sParagraph) { checkAndSendToPanel(iParagraph.toString(), sParagraph); }); xActiveWorker.port.on("closeGCPanel", function() { xActiveWorker = null; xGCPanel.hide(); }); } }); const xHotkeyGC = hotkeys.Hotkey({ // Quick test combo: "accel-shift-f11", onPress: function () { createGCPanel(); if (!xGCPanel.isShowing) { xGCPanel.show({position: xMainButton}); } xActiveWorker = null; sendTextToPanel("Quoi ? Racontes ! Racontes-moi ! Bon sangg, parles ! Oui. Il y a des menteur partout. " + "Je suit sidérés par la brutales arrogance de cette homme-là. Quelle salopard ! Un escrocs de la pire espece. " + "Quant sera t’il châtiés pour ses <i>mensonge</i> ? Merde ! J’en aie marre.\n" + "Deuxièmes <b>test</b>. On va finir par par y arrivé! Il faux persévéré... Encore et encore.\n" + "Aujourd'hui, je m'en fou. Il est au travaille.\nJ’en veux 10 %.\nJe suit le CAC40 de près.\nIl y aura encore des attentas."); } }); async function sendTextToPanel (sText) { xGCPanel.port.emit("clearErrors"); xGCPanel.port.emit("start"); loadGrammarChecker(); let iParagraph = 0; // index of paragraphs, used for identification let nParagraph = 0; // non empty paragraphs let sRes = ""; try { sText = sText.normalize("NFC"); // remove combining diacritics for (let sParagraph of text.getParagraph(sText)) { if (sParagraph.trim() !== "") { sRes = await xGCEWorker.post('parseAndGenerateParagraph', [sParagraph, iParagraph, "FR", false]) xGCPanel.port.emit("addElem", sRes); nParagraph += 1; } iParagraph += 1; } xGCPanel.port.emit("addElem", '<p class="message">' + _("numberOfParagraphs") + " " + nParagraph + '</p>'); } catch (e) { xGCPanel.port.emit("addElem", '<p class="bug">' + e.message + '</p>'); } xGCPanel.port.emit("end"); } /* Text Formatter */ let xTFPanel = null; function createTFPanel () { if (xTFPanel === null) { xTFPanel = panel.Panel({ contentURL: self.data.url("tf_panel.html"), contentScriptFile: [self.data.url("tf_panel.js"), self.data.url("../grammalecte/fr/textformatter.js")], onShow: function () { xTFPanel.port.emit("start", sp.prefs["sTFOptions"]); }, position: { bottom: 30, right: 30 }, width: 800, height: 595 }); core.getActiveView(xTFPanel).setAttribute("noautohide", true); xTFPanel.port.on("setHeight", function (n) { xTFPanel.resize(800, n); }); xTFPanel.port.on("saveOptions", function (sOptions) { sp.prefs["sTFOptions"] = sOptions; }); xTFPanel.port.on("getTextToFormat", function () { if (xActiveWorker) { xActiveWorker.port.emit("getText"); } else { xTFPanel.hide(); } }); xTFPanel.port.on("applyFormattedText", function (sText) { if (xActiveWorker) { xActiveWorker.port.emit("write", sText); } else { xTFPanel.hide(); } }); xTFPanel.port.on("closePanel", function () { if (xActiveWorker) { xActiveWorker.port.emit("clear"); xActiveWorker = null; } xTFPanel.hide(); }); } } const xHotkeyTextFormatter = hotkeys.Hotkey({ combo: "accel-shift-f6", onPress: function () { loadTextFormatter(); createTFPanel(); xActiveWorker = tabs.activeTab.attach({ contentScriptFile: self.data.url("replace_text.js") }); xActiveWorker.port.emit("setActiveElement", false); xActiveWorker.port.on("yesThisIsTextZone", function (sText) { xTFPanel.show({position: xMainButton}); }); xActiveWorker.port.on("emitText", function (sText) { xTFPanel.port.emit("receiveTextToFormat", sText); }); xActiveWorker.port.on("closeTFPanel", function() { xActiveWorker = null; xTFPanel.hide(); }); } }); /* Lexicographer */ let xLxgPanel = null; function createLxgPanel () { if (xLxgPanel === null) { xLxgPanel = panel.Panel({ contentURL: self.data.url("lxg_panel.html"), contentScriptFile: self.data.url("lxg_panel.js"), onHide: function () { xLxgPanel.port.emit("clear"); xMainButton.state("window", {checked: false}); }, position: { bottom: 20, right: 30 }, width: sp.prefs["nLxgPanelWidth"], height: sp.prefs["nLxgPanelHeight"] }); core.getActiveView(xLxgPanel).setAttribute("noautohide", true); xLxgPanel.port.on("closePanel", function () { xLxgPanel.resize(sp.prefs["nLxgPanelWidth"], sp.prefs["nLxgPanelHeight"]); xLxgPanel.hide(); }); xLxgPanel.port.on("resize", function(sCmd, n) { if (sCmd == "expand") { xLxgPanel.resize(sp.prefs["nLxgPanelWidth"], sp.prefs["nLxgPanelHeight"]); } else if (sCmd == "reduce") { xLxgPanel.resize(280, 50); } else { switch (sCmd) { case "resize_h_bigger": if (sp.prefs["nLxgPanelHeight"] < 1200) { sp.prefs["nLxgPanelHeight"] += n; } break; case "resize_h_smaller": if (sp.prefs["nLxgPanelHeight"] > 250) { sp.prefs["nLxgPanelHeight"] -= n } break; case "resize_w_bigger": if (sp.prefs["nLxgPanelWidth"] < 1200) { sp.prefs["nLxgPanelWidth"] += n; } break; case "resize_w_smaller": if (sp.prefs["nLxgPanelWidth"] > 300) { sp.prefs["nLxgPanelWidth"] -= n; } break; } xLxgPanel.resize(sp.prefs["nLxgPanelWidth"], sp.prefs["nLxgPanelHeight"]); } }); } } async function analyzeWords (sText) { xLxgPanel.port.emit("startWaitIcon"); xLxgPanel.port.emit("addSeparator", _("separator")); loadGrammarChecker(); let nParagraph = 0; // non empty paragraphs let sRes = ""; try { for (let sParagraph of text.getParagraph(sText)) { if (sParagraph.trim() !== "") { sRes = await xGCEWorker.post('analyzeWords', [sParagraph]) xLxgPanel.port.emit("addElem", sRes); nParagraph += 1; } } xLxgPanel.port.emit("addElem", '<p class="message">' + _("numberOfParagraphs") + " " + nParagraph + '</p>'); } catch (e) { xLxgPanel.port.emit("addElem", '<p class="bug">'+e.message+"</p>"); } xLxgPanel.port.emit("stopWaitIcon"); } /* Conjugueur */ let xConjPanel = null; function createConjPanel () { if (xConjPanel === null) { let sConjData = self.data.load("../grammalecte/fr/conj_data.json"); xConjPanel = panel.Panel({ contentURL: self.data.url("conj_panel.html"), contentScriptFile: [self.data.url("conj_panel.js"), self.data.url("../grammalecte/fr/conj.js")], onShow: function () { xConjPanel.port.emit("start"); }, onHide: function () { xMainButton.state("window", {checked: false}); }, position: { bottom: 30, right: 30 }, width: 550, height: 880 }); core.getActiveView(xConjPanel).setAttribute("noautohide", true); xConjPanel.port.on("show", function () { if (!xConjPanel.isShowing) { xConjPanel.show({position: xMainButton}); } }); xConjPanel.port.on("setHeight", function (n) { xConjPanel.resize(550, n); }); xConjPanel.port.on("closePanel", function () { xConjPanel.hide(); }); xConjPanel.port.emit("provideConjData", sConjData); } } const xHotkeyConj = hotkeys.Hotkey({ combo: "accel-shift-f8", onPress: function () { createConjPanel(); xConjPanel.port.emit("conjugate", "être"); } }); /* Tests */ let xTestPanel = null; function createTestPanel () { if (xTestPanel === null) { xTestPanel = panel.Panel({ contentURL: self.data.url("test_panel.html"), contentScriptFile: self.data.url("test_panel.js"), onHide: function () { xMainButton.state("window", {checked: false}); }, position: { bottom: 30, right: 30 }, width: 350, height: 700 }); core.getActiveView(xTestPanel).setAttribute("noautohide", true); xTestPanel.port.on("checkText", function (sText) { loadGrammarChecker(); xTestPanel.port.emit("clear"); let xPromise = xGCEWorker.post('parse', [sText, "FR", true, false]); xPromise.then( function (aVal) { let lErr = JSON.parse(aVal); if (lErr.length > 0) { for (let dErr of lErr) { xTestPanel.port.emit("addElem", text.getReadableError(dErr)); } } else { xTestPanel.port.emit("addElem", _('noErrorFound')); } }, function (aReason) { xTestPanel.port.emit("addElem", 'Promise rejected'); xTestPanel.port.emit("addElem", aReason); } ).catch( function (aCaught) { xTestPanel.port.emit("addElem", 'Promise Error'); xTestPanel.port.emit("addElem", aCaught); } ); }); xTestPanel.port.on("allGCTests", function () { xTestPanel.port.emit("clear"); xTestPanel.port.emit("addElem", 'Performing tests… Wait…'); loadGrammarChecker(); let xPromise = xGCEWorker.post('fullTests', ['{"nbsp":true, "esp":true, "unit":true, "num":true}']); xPromise.then( function (aVal) { xTestPanel.port.emit("addElem", 'Done.'); xTestPanel.port.emit("addElem", aVal); }, function (aReason) { xTestPanel.port.emit("addElem", 'Promise rejected'); xTestPanel.port.emit("addElem", aReason); } ).catch( function (aCaught) { xTestPanel.port.emit("addElem", 'Promise Error'); xTestPanel.port.emit("addElem", aCaught); } ) }); xTestPanel.port.on("closePanel", function () { xTestPanel.hide(); }); } } const xHotkeyFullTests = hotkeys.Hotkey({ combo: "accel-shift-f12", onPress: function () { createTestPanel(); xTestPanel.show({position: xMainButton}); } }); /* Context menu */ // Grammar checker const xMenuItemTextAreaGC = contextmenu.Item ({ label: _("checkText"), image: self.data.url("./img/icon-16.png"), contentScript: 'self.on("click", function (node, data) {' + ' self.postMessage(node.value);' + '});', accessKey: "g", onMessage: function (sText) { createGCPanel(); if (!xGCPanel.isShowing) { xGCPanel.show({position: xMainButton}); } else { xGCPanel.port.emit("clearErrors"); } xActiveWorker = tabs.activeTab.attach({ contentScriptFile: self.data.url("replace_text.js") }); xActiveWorker.port.emit("setActiveElement", false); xActiveWorker.port.on("emitParagraph", function (iParagraph, sParagraph) { checkAndSendToPanel(iParagraph.toString(), sParagraph); }); xActiveWorker.port.on("closeGCPanel", function() { xActiveWorker = null; xGCPanel.hide(); }); sendTextToPanel(sText); } }); const xMenuItemSelectionGC = contextmenu.Item ({ label: _("checkText"), image: self.data.url("./img/icon-16.png"), contentScript: 'self.on("click", function () {' + ' let sText = window.getSelection().toString();' + ' self.postMessage(sText);' + '});', accessKey: "g", onMessage: function (sText) { createGCPanel(); if (!xGCPanel.isShowing) { xGCPanel.show({position: xMainButton}); } else { xGCPanel.port.emit("clearErrors"); } xActiveWorker = null; sendTextToPanel(sText); } }); // Text Formatter const xMenuItemTextFormatter = contextmenu.Item ({ label: _("textFormatter"), image: self.data.url("./img/icon-16.png"), context: contextmenu.SelectorContext("textarea"), contentScript: 'self.on("click", function (node, data) {' + ' self.postMessage(node.value);' + '});', accessKey: "c", onMessage: function (sValue) { loadTextFormatter(); createTFPanel(); xActiveWorker = tabs.activeTab.attach({ contentScriptFile: self.data.url("replace_text.js") }); xActiveWorker.port.emit("setActiveElement", false); xActiveWorker.port.on("emitText", function (sText) { xTFPanel.port.emit("receiveTextToFormat", sText); }); xActiveWorker.port.on("closeTFPanel", function() { xActiveWorker = null; xTFPanel.hide(); }); xTFPanel.show({position: xMainButton}); } }); // Lexicographer const xMenuItemSelectionLxg = contextmenu.Item ({ label: _("lexicographer"), image: self.data.url("./img/icon-16.png"), contentScript: 'self.on("click", function () {' + ' let sText = window.getSelection().toString();' + ' self.postMessage(sText);' + '});', accessKey: "l", onMessage: function (sText) { createLxgPanel(); xLxgPanel.show({position: xMainButton}); analyzeWords(sText); } }); const xMenuItemTextAreaLxg = contextmenu.Item ({ label: _("lexicographer"), image: self.data.url("./img/icon-16.png"), contentScript: 'self.on("click", function (node, data) {' + ' self.postMessage(node.value);' + '});', accessKey: "l", onMessage: function (sText) { createLxgPanel(); xLxgPanel.show({position: xMainButton}); analyzeWords(sText); } }); // TextArea const xMenuTextArea = contextmenu.Menu({ label: "Grammalecte", image: self.data.url("./img/icon-16.png"), context: contextmenu.SelectorContext("textarea, input[type='text']"), accessKey: "g", items: [xMenuItemTextAreaGC, xMenuItemTextFormatter, xMenuItemTextAreaLxg] }); // Selection const xMenuSelection = contextmenu.Menu({ label: "Grammalecte", image: self.data.url("./img/icon-16.png"), context: [contextmenu.SelectionContext(), contextmenu.PredicateContext(function (context) { if (context.targetName === "textarea" || context.targetName == "input") { return false; } return true; })], accessKey: "g", items: [xMenuItemSelectionGC, xMenuItemSelectionLxg] }); |
Added lexicons/English.lex version [b6d07232cc].
more than 10,000 changes
Added lexicons/French.lex version [5a3d783ddf].
more than 10,000 changes
Added lexicons/French.tagset.txt version [3f7ce78984].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | ÉTIQUETTES DE GRAMMALECTE http://www.dicollecte.org/grammalecte _______________________________________________________________________________ // NOMS ET ADJECTIFS Nom :N (Loc: Ñ) Adjectif :A (loc: Â) Prénom :M1 Patronyme :M2 Nom propre :MP Nom propre (avec article) :NM [genre] masculin :m [nombre] singulier :s féminin :f pluriel :p épicène :e invariable :i // DIVERS Adverbe :W (loc: Ŵ) Adverbe de négation :X Interjection :J (loc: Ĵ) Nombre cardinal :B Titre :T // VERBES Verbe :V 0 e i t n p m e a (loc: Ṽ) 1 a x x x q x x x 2 _ _ _ _ r _ _ _ 3 s u e x _ ^ ^ ^ ^ ^ ^ ^ ^ ^ | | | | | | | | | groupe (0 = être ou avoir) ____/ | | | | | | | | type de verbe (être, avoir, autre) _______/ | | | | | | | verbe intransifif ? __________/ | | | | | | verbe transitif direct ? _____________/ | | | | | verbe transitif indirect ? ________________/ | | | | verbe pronominal ? ___________________/ | | | p: toujours, r: réciproque, e: avec pronom “en” | | | accord? q: possiblement, s: toujours, u: jamais | | | verbe impersonnel ? ______________________/ | | avec verbe auxilaire être ? _________________________/ | avec verbe auxilaire avoir ? ____________________________/ Infinitif :Y Participe présent :P Participe passé :Q Indicatif présent :Ip 1re personne du singulier :1s (forme interrogative: 1ś ou 1ŝ) Indicatif imparfait :Iq 2e personne du singulier :2s Indicatif passé simple :Is 3e personne du singulier :3s Indicatif futur :If 1re personne du pluriel :1p 2e personne du pluriel :2p Subjonctif présent :Sp 3e personne du pluriel :3p Subjonctif imparfait :Sq Conditionnel :K Impératif :E // MOTS GRAMMATICAUX Mot grammatical :G préposition :R (loc: Ŕ) préposition verbale :Rv conjonction :C (loc: Ĉ) conjonction de coordination :Cc conjonction de subordination :Cs (loc: Ĉs) déterminant :D déterminant possessif :Dp déterminant démonstratif :Dd déterminant indéterminé :Di Adverbe interrogatif :U pronom :O pronom démonstratif :Od pronom indéterminé :Oi pronom interrogatif :Oj pronom relatif :Or pronom de négation :On pronom adverbial :Ow pronom personnel sujet :Os pronom personnel objet :Oo // AUTRES Préfixe :Zp Suffixe :Zs ========== MÉMO ========== :A Adjectif :B Nombre cardinal :C Conjonction :D Déterminant :E Impératif (verbe) :F :G Mot grammatical :H <Hors-norme> :I Indicatif (verbe) :J Interjection :K Conditionnel (verbe) :L Locution :M Nom propre (sans article) :N Nom :O Pronom :P Participe présent (verbe) :Q Participe passé (verbe) :R Préposition :S Subjonctif (verbe) :T Titre :U Adverbe interrogatif :V Verbe (quelle que soit la forme) :W Adverbe :X Adverbe de négation :Y Infinitif (verbe) :Z Préfixe ou suffixe :1 1re personne (verbe) :2 2e personne (verbe) :3 3e personne (verbe) :e épicène :f féminin :i invariable :m masculin :p pluriel :s singulier |
Added make.py version [816fcbbca1].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 | #!python3 # coding: UTF-8 import sys import os import subprocess import re import zipfile import traceback import configparser import datetime import argparse import importlib import unittest import json from string import Template from distutils import dir_util, file_util import dialog_bundled import compile_rules sWarningMessage = "The content of this folder is generated by code and replaced at each build.\n" class cd: """Context manager for changing the current working directory""" def __init__ (self, newPath): self.newPath = os.path.expanduser(newPath) def __enter__ (self): self.savedPath = os.getcwd() os.chdir(self.newPath) def __exit__ (self, etype, value, traceback): os.chdir(self.savedPath) def fileFile (spf, dVars): return Template(open(spf, "r", encoding="utf-8").read()).safe_substitute(dVars) def copyAndFileTemplate (spfSrc, spfDst, dVars): s = Template(open(spfSrc, "r", encoding="utf-8").read()).safe_substitute(dVars) open(spfDst, "w", encoding="utf-8", newline="\n").write(s) def addFolderToZipAndFileFile (hZip, spSrc, spDst, dVars, bRecursive): # recursive function spSrc = spSrc.strip("/ ") spDst = spDst.strip("/ ") for sf in os.listdir(spSrc): spfSrc = (spSrc + "/" + sf).strip("/ ") spfDst = (spDst + "/" + sf).strip("/ ") if os.path.isdir(spfSrc): if bRecursive: addFolderToZipAndFileFile(hZip, spfSrc, spfDst, dVars, bRecursive) else: if spfSrc.endswith((".css", ".js", ".xcu", ".xul", ".rdf", ".dtd", ".properties")): #print(spfSrc + " > " + spfDst) hZip.writestr(spfDst, fileFile(spfSrc, dVars)) else: #print(spfSrc + " > " + spfDst) hZip.write(spfSrc, spfDst) def unzip (spfZip, spDest, bCreatePath=False): if spDest: if bCreatePath and not os.path.exists(spDest): dir_util.mkpath(spDest) print("> unzip in: "+ spDest) spInstall = os.path.abspath(spDest) if os.path.isdir(spInstall): eraseFolder(spInstall) with zipfile.ZipFile(spfZip) as hZip: hZip.extractall(spDest) else: print("# folder not found") else: print("path destination is empty") def eraseFolder (sp): # recursive!!! for sf in os.listdir(sp): spf = sp + "/" + sf if os.path.isdir(spf): eraseFolder(spf) else: try: os.remove(spf) except: print("%s not removed" % spf) def createCleanFolder (sp): if not os.path.exists(sp): dir_util.mkpath(sp) else: eraseFolder(sp) def getConfig (sLang): xConfig = configparser.SafeConfigParser() xConfig.optionxform = str try: xConfig.read("gc_lang/" + sLang + "/config.ini", encoding="utf-8") except: print("Config file in project [" + sLang + "] not found") exit() return xConfig def createOptionsLabelProperties (dOptLbl): sContent = "" for sOpt, tLabel in dOptLbl.items(): sContent += sOpt + "=" + tLabel[0] + "\n" if tLabel[1]: sContent += "hlp_" + sOpt + "=" + tLabel[1] + "\n" return sContent def createDialogOptionsXDL (dVars): sFixedline = '<dlg:fixedline dlg:id="{0}" dlg:tab-index="{1}" dlg:top="{2}" dlg:left="5" dlg:width="{3}" dlg:height="10" dlg:value="&{0}" />\n' sCheckbox = '<dlg:checkbox dlg:id="{0}" dlg:tab-index="{1}" dlg:top="{2}" dlg:left="{3}" dlg:width="{4}" dlg:height="10" dlg:value="&{0}" dlg:checked="{5}" {6} />\n' iTabIndex = 1 nPosY = 5 nWidth = 240 sContent = "" dOpt = dVars["dOptPython"] dOptLabel = dVars["dOptLabel"][dVars["lang"]] for sGroup, lGroupOptions in dVars["lStructOpt"]: sContent += sFixedline.format(sGroup, iTabIndex, nPosY, nWidth) iTabIndex += 1 for lLineOptions in lGroupOptions: nElemWidth = nWidth // len(lLineOptions) nPosY += 10 nPosX = 10 for sOpt in lLineOptions: sHelp = 'dlg:help-text="&hlp_%s"'%sOpt if dOptLabel[sOpt][1] else "" sContent += sCheckbox.format(sOpt, iTabIndex, nPosY, nPosX, nElemWidth, "true" if dOpt[sOpt] else "false", sHelp) iTabIndex += 1 nPosX += nElemWidth nPosY += 10 return sContent def createOXT (spLang, dVars, dOxt, spLangPack, bInstall): "create extension for Writer" print("Building extension for Writer") spfZip = "_build/" + dVars['name'] + "-"+ dVars['lang'] +"-v" + dVars['version'] + '.oxt' hZip = zipfile.ZipFile(spfZip, mode='w', compression=zipfile.ZIP_DEFLATED) # Package and parser copyGrammalectePyPackageInZipFile(hZip, spLangPack, dVars['py_binary_dic'], "pythonpath/") hZip.write("cli.py", "pythonpath/cli.py") # Extension files hZip.writestr("META-INF/manifest.xml", fileFile("gc_core/py/oxt/manifest.xml", dVars)) hZip.writestr("description.xml", fileFile("gc_core/py/oxt/description.xml", dVars)) hZip.writestr("Linguistic.xcu", fileFile("gc_core/py/oxt/Linguistic.xcu", dVars)) hZip.writestr("Grammalecte.py", fileFile("gc_core/py/oxt/Grammalecte.py", dVars)) for sf in dVars["extras"].split(","): hZip.writestr(sf.strip(), fileFile(spLang + '/' + sf.strip(), dVars)) if "logo" in dVars.keys() and dVars["logo"].strip(): hZip.write(spLang + '/' + dVars["logo"].strip(), dVars["logo"].strip()) ## OPTIONS # options dialog within LO/OO options panel (legacy) #hZip.writestr("pythonpath/lightproof_handler_grammalecte.py", fileFile("gc_core/py/oxt/lightproof_handler_grammalecte.py", dVars)) #lLineOptions = open(spLang + "/options.txt", "r", encoding="utf-8").readlines() #dialog_bundled.c(dVars["implname"], lLineOptions, hZip, dVars["lang"]) # options dialog hZip.writestr("pythonpath/Options.py", fileFile("gc_core/py/oxt/Options.py", dVars)) hZip.write("gc_core/py/oxt/op_strings.py", "pythonpath/op_strings.py") # options dialog within Writer options panel dVars["xdl_dialog_options"] = createDialogOptionsXDL(dVars) dVars["xcs_options"] = "\n".join([ '<prop oor:name="'+sOpt+'" oor:type="xs:string"><value></value></prop>' for sOpt in dVars["dOptPython"] ]) dVars["xcu_label_values"] = "\n".join([ '<value xml:lang="'+sLang+'">' + dVars["dOptLabel"][sLang]["__optiontitle__"] + '</value>' for sLang in dVars["dOptLabel"] ]) hZip.writestr("dialog/options_page.xdl", fileFile("gc_core/py/oxt/options_page.xdl", dVars)) hZip.writestr("dialog/OptionsDialog.xcs", fileFile("gc_core/py/oxt/OptionsDialog.xcs", dVars)) hZip.writestr("dialog/OptionsDialog.xcu", fileFile("gc_core/py/oxt/OptionsDialog.xcu", dVars)) hZip.writestr("dialog/" + dVars['lang'] + "_en.default", "") for sLangLbl, dOptLbl in dVars['dOptLabel'].items(): hZip.writestr("dialog/" + dVars['lang'] + "_" + sLangLbl + ".properties", createOptionsLabelProperties(dOptLbl)) ## ADDONS OXT print("+ OXT: ", end="") for spfSrc, spfDst in dOxt.items(): print(spfSrc, end=", ") if os.path.isdir(spLang+'/'+spfSrc): for sf in os.listdir(spLang+'/'+spfSrc): hZip.write(spLang+'/'+spfSrc+"/"+sf, spfDst+"/"+sf) else: if spfSrc.endswith(('.txt', '.py')): hZip.writestr(spfDst, fileFile(spLang+'/'+spfSrc, dVars)) else: hZip.write(spLang+'/'+spfSrc, spfDst) print() hZip.close() # Installation in Writer profile if bInstall: print("> installation in Writer") if dVars.get('unopkg', False): cmd = '"'+os.path.abspath(dVars.get('unopkg')+'" add -f '+spfZip) print(cmd) #subprocess.run(cmd) os.system(cmd) else: print("# Error: path and filename of unopkg not set in config.ini") def createOptionsForFirefox (dVars): sHTML = "" for sSection, lOpt in dVars['lStructOpt']: sHTML += '\n<div id="subsection_' + sSection + '" class="opt_subsection">\n <h2 data-l10n-id="option_'+sSection+'"></h2>\n' for lLineOpt in lOpt: for sOpt in lLineOpt: sHTML += ' <p><input type="checkbox" id="option_'+sOpt+'" /><label id="option_label_'+sOpt+'" for="option_'+sOpt+'" data-l10n-id="option_'+sOpt+'"></label></p>\n' sHTML += '</div>\n' # Creating translation data dProperties = {} for sLang in dVars['dOptLabel'].keys(): dProperties[sLang] = "\n".join( [ "option_" + sOpt + " = " + dVars['dOptLabel'][sLang][sOpt][0].replace(" [!]", " [!]") for sOpt in dVars['dOptLabel'][sLang] ] ) return sHTML, dProperties def createFirefoxExtension (sLang, dVars): "create extension for Firefox" print("Building extension for Firefox") eraseFolder("_build/xpi/"+sLang) dir_util.copy_tree("gc_lang/"+sLang+"/xpi/", "_build/xpi/"+sLang) dir_util.copy_tree("grammalecte-js", "_build/xpi/"+sLang+"/grammalecte") sHTML, dProperties = createOptionsForFirefox(dVars) dVars['optionsHTML'] = sHTML copyAndFileTemplate("_build/xpi/"+sLang+"/data/about_panel.html", "_build/xpi/"+sLang+"/data/about_panel.html", dVars) for sLocale in dProperties.keys(): spfLocale = "_build/xpi/"+sLang+"/locale/"+sLocale+".properties" if os.path.exists(spfLocale): copyAndFileTemplate(spfLocale, spfLocale, dProperties) else: print("Locale file not found: " + spfLocale) with cd("_build/xpi/"+sLang): os.system("jpm xpi") def createOptionsForThunderbird (dVars): dVars['sXULTabs'] = "" dVars['sXULTabPanels'] = "" # dialog options for sSection, lOpt in dVars['lStructOpt']: dVars['sXULTabs'] += ' <tab label="&option.label.'+sSection+';"/>\n' dVars['sXULTabPanels'] += ' <tabpanel orient="vertical">\n <label class="section" value="&option.label.'+sSection+';" />\n' for lLineOpt in lOpt: for sOpt in lLineOpt: dVars['sXULTabPanels'] += ' <checkbox id="option_'+sOpt+'" class="option" label="&option.label.'+sOpt+';" />\n' dVars['sXULTabPanels'] += ' </tabpanel>\n' # translation data for sLang in dVars['dOptLabel'].keys(): dVars['gc_options_labels_'+sLang] = "\n".join( [ "<!ENTITY option.label." + sOpt + ' "' + dVars['dOptLabel'][sLang][sOpt][0] + '">' for sOpt in dVars['dOptLabel'][sLang] ] ) return dVars def createThunderbirdExtension (sLang, dVars, spLangPack): "create extension for Thunderbird" print("Building extension for Thunderbird") sExtensionName = dVars['tb_identifier'] + "-v" + dVars['version'] + '.xpi' spfZip = "_build/" + sExtensionName hZip = zipfile.ZipFile(spfZip, mode='w', compression=zipfile.ZIP_DEFLATED) copyGrammalecteJSPackageInZipFile(hZip, spLangPack, dVars['js_binary_dic']) for spf in ["LICENSE.txt", "LICENSE.fr.txt"]: hZip.write(spf) dVars = createOptionsForThunderbird(dVars) addFolderToZipAndFileFile(hZip, "gc_lang/"+sLang+"/tb", "", dVars, True) hZip.write("gc_lang/"+sLang+"/xpi/gce_worker.js", "worker/gce_worker.js") spDict = "gc_lang/"+sLang+"/xpi/data/dictionaries" for sp in os.listdir(spDict): if os.path.isdir(spDict+"/"+sp): hZip.write(spDict+"/"+sp+"/"+sp+".dic", "content/dictionaries/"+sp+"/"+sp+".dic") hZip.write(spDict+"/"+sp+"/"+sp+".aff", "content/dictionaries/"+sp+"/"+sp+".aff") hZip.close() unzip(spfZip, dVars['tb_debug_extension_path']) def createServerOptions (sLang, dOptData): with open("server_options."+sLang+".ini", "w", encoding="utf-8", newline="\n") as hDst: hDst.write("# Server options. Lang: " + sLang + "\n\n[gc_options]\n") for sSection, lOpt in dOptData["lStructOpt"]: hDst.write("\n########## " + dOptData["dOptLabel"][sLang].get(sSection, sSection + "[no label found]")[0] + " ##########\n") for lLineOpt in lOpt: for sOpt in lLineOpt: hDst.write("# " + dOptData["dOptLabel"][sLang].get(sOpt, "[no label found]")[0] + "\n") hDst.write(sOpt + " = " + ("1" if dOptData["dOptPython"].get(sOpt, None) else "0") + "\n") hDst.write("html = 1\n") def createServerZip (sLang, dVars, spLangPack): "create server zip" spfZip = "_build/" + dVars['name'] + "-"+ dVars['lang'] +"-v" + dVars['version'] + '.zip' hZip = zipfile.ZipFile(spfZip, mode='w', compression=zipfile.ZIP_DEFLATED) copyGrammalectePyPackageInZipFile(hZip, spLangPack, dVars['py_binary_dic']) for spf in ["cli.py", "server.py", "bottle.py", "server_options._global.ini", "server_options."+sLang+".ini", \ "README.txt", "LICENSE.txt", "LICENSE.fr.txt"]: hZip.write(spf) def copyGrammalectePyPackageInZipFile (hZip, spLangPack, sDicName, sAddPath=""): for sf in os.listdir("grammalecte"): if not os.path.isdir("grammalecte/"+sf): hZip.write("grammalecte/"+sf, sAddPath+"grammalecte/"+sf) for sf in os.listdir(spLangPack): if not os.path.isdir(spLangPack+"/"+sf): hZip.write(spLangPack+"/"+sf, sAddPath+spLangPack+"/"+sf) hZip.write("grammalecte/_dictionaries/"+sDicName, sAddPath+"grammalecte/_dictionaries/"+sDicName) def copyGrammalecteJSPackageInZipFile (hZip, spLangPack, sDicName, sAddPath=""): for sf in os.listdir("grammalecte-js"): if not os.path.isdir("grammalecte-js/"+sf): hZip.write("grammalecte-js/"+sf, sAddPath+"grammalecte-js/"+sf) for sf in os.listdir(spLangPack): if not os.path.isdir(spLangPack+"/"+sf): hZip.write(spLangPack+"/"+sf, sAddPath+spLangPack+"/"+sf) hZip.write("grammalecte-js/_dictionaries/"+sDicName, sAddPath+"grammalecte-js/_dictionaries/"+sDicName) def create (sLang, xConfig, bInstallOXT, bJavaScript): oNow = datetime.datetime.now() print("============== MAKE GRAMMALECTE [{0}] at {1.hour:>2} h {1.minute:>2} min {1.second:>2} s ==============".format(sLang, oNow)) #### READ CONFIGURATION print("> read configuration...") spLang = "gc_lang/" + sLang dVars = xConfig._sections['args'] dVars['locales'] = dVars["locales"].replace("_", "-") dVars['loc'] = str(dict([ [s, [s[0:2], s[3:5], ""]] for s in dVars["locales"].split(" ") ])) ## COMPILE RULES print("> read rules file...") try: lRules = open(spLang + "/rules.grx", 'r', encoding="utf-8").readlines() except: print("Rules file in project [" + sLang + "] not found") return dVars.update(compile_rules.make(lRules, dVars['lang'], bJavaScript)) ## READ GRAMMAR CHECKER PLUGINS print("PYTHON:") print("+ Plugins: ", end="") sCodePlugins = "" for sf in os.listdir(spLang+"/modules"): if re.match(r"gce_\w+[.]py$", sf): sCodePlugins += "\n\n" + open(spLang+'/modules/'+sf, "r", encoding="utf-8").read() print(sf, end=", ") print() dVars["plugins"] = sCodePlugins ## CREATE GRAMMAR CHECKER PACKAGE spLangPack = "grammalecte/"+sLang createCleanFolder(spLangPack) for sf in os.listdir("gc_core/py/lang_core"): if not os.path.isdir("gc_core/py/lang_core/"+sf): copyAndFileTemplate("gc_core/py/lang_core/"+sf, spLangPack+"/"+sf, dVars) print("+ Modules: ", end="") for sf in os.listdir(spLang+"/modules"): if not sf.endswith(".tpl.py") and not sf.startswith("gce_"): file_util.copy_file(spLang+"/modules/"+sf, spLangPack) print(sf, end=", ") print() createOXT(spLang, dVars, xConfig._sections['oxt'], spLangPack, bInstallOXT) createServerOptions(sLang, dVars) createServerZip(sLang, dVars, spLangPack) #### JAVASCRIPT if bJavaScript: print("JAVASCRIPT:") print("+ Plugins: ", end="") sCodePlugins = "" for sf in os.listdir(spLang+"/modules-js"): if re.match(r"gce_\w+[.]js$", sf): sCodePlugins += "\n\n" + open(spLang+'/modules-js/'+sf, "r", encoding="utf-8").read() print(sf, end=", ") print() dVars["pluginsJS"] = sCodePlugins # options data struct dVars["dOptJavaScript"] = json.dumps(list(dVars["dOptJavaScript"].items())) # create folder spLangPack = "grammalecte-js/"+sLang createCleanFolder(spLangPack) # create files for sf in os.listdir("gc_core/js"): if not os.path.isdir("gc_core/js/"+sf) and sf.startswith("jsex_"): dVars[sf[5:-3]] = open("gc_core/js/"+sf, "r", encoding="utf-8").read() for sf in os.listdir("gc_core/js"): if not os.path.isdir("gc_core/js/"+sf) and not sf.startswith("jsex_"): copyAndFileTemplate("gc_core/js/"+sf, "grammalecte-js/"+sf, dVars) open("grammalecte-js/WARNING.txt", "w", encoding="utf-8", newline="\n").write(sWarningMessage) for sf in os.listdir("gc_core/js/lang_core"): if not os.path.isdir("gc_core/js/lang_core/"+sf) and sf.startswith("gc_"): copyAndFileTemplate("gc_core/js/lang_core/"+sf, spLangPack+"/"+sf, dVars) print("+ Modules: ", end="") for sf in os.listdir(spLang+"/modules-js"): if not sf.endswith(".tpl.js") and not sf.startswith("gce_"): copyAndFileTemplate(spLang+"/modules-js/"+sf, spLangPack+"/"+sf, dVars) print(sf, end=", ") print() createFirefoxExtension(sLang, dVars) createThunderbirdExtension(sLang, dVars, spLangPack) return dVars['version'] def main (): print("Python: " + sys.version) xParser = argparse.ArgumentParser() xParser.add_argument("lang", type=str, nargs='+', help="lang project to generate (name of folder in /lang)") xParser.add_argument("-b", "--build_data", help="launch build_data.py", action="store_true") xParser.add_argument("-d", "--dict", help="generate FSA dictionary", action="store_true") xParser.add_argument("-t", "--tests", help="run unit tests", action="store_true") xParser.add_argument("-p", "--perf", help="run performance tests", action="store_true") xParser.add_argument("-js", "--javascript", help="JavaScript build for Firefox", action="store_true") xParser.add_argument("-fx", "--firefox", help="Launch Firefox Nightly for XPI testing", action="store_true") xParser.add_argument("-tb", "--thunderbird", help="Launch Thunderbird", action="store_true") xParser.add_argument("-i", "--install", help="install the extension in Writer (path of unopkg must be set in config.ini)", action="store_true") xArgs = xParser.parse_args() dir_util.mkpath("_build") dir_util.mkpath("grammalecte") dir_util.mkpath("grammalecte-js") for sLang in xArgs.lang: if os.path.exists("gc_lang/"+sLang) and os.path.isdir("gc_lang/"+sLang): xConfig = getConfig(sLang) dVars = xConfig._sections['args'] # copy gc_core common file in Python now to be able to compile dictionary if required for sf in os.listdir("gc_core/py"): if not os.path.isdir("gc_core/py/"+sf): copyAndFileTemplate("gc_core/py/"+sf, "grammalecte/"+sf, dVars) open("grammalecte/WARNING.txt", "w", encoding="utf-8", newline="\n").write(sWarningMessage) # build data build_module = None if xArgs.build_data: # lang data try: build_module = importlib.import_module("gc_lang."+sLang+".build_data") except ImportError: print("# Error. Couldn’t import file build_data.py in folder gc_lang/"+sLang) if build_module: build_module.before('gc_lang/'+sLang, dVars, xArgs.javascript) if xArgs.dict or not os.path.exists("grammalecte/_dictionaries"): import grammalecte.dawg as fsa from grammalecte.ibdawg import IBDAWG # fsa builder oDAWG = fsa.DAWG(dVars['lexicon_src'], dVars['lang_name'], dVars['stemming_method']) dir_util.mkpath("grammalecte/_dictionaries") oDAWG.writeInfo("grammalecte/_dictionaries/" + dVars['py_binary_dic'] + ".info.txt") oDAWG.createBinary("grammalecte/_dictionaries/" + dVars['py_binary_dic'], int(dVars['fsa_method'])) if xArgs.javascript: dir_util.mkpath("grammalecte-js/_dictionaries") oDic = IBDAWG(dVars['py_binary_dic']) #oDic.writeAsJSObject("gc_lang/"+sLang+"/modules-js/dictionary.js") oDic.writeAsJSObject("grammalecte-js/_dictionaries/"+dVars['js_binary_dic']) if build_module: build_module.after('gc_lang/'+sLang, dVars, xArgs.javascript) # make sVersion = create(sLang, xConfig, xArgs.install, xArgs.javascript, ) # tests if xArgs.tests or xArgs.perf: print("> Running tests") try: tests = importlib.import_module("tests."+sLang+"_test") print(tests.__file__) except ImportError: print("# Error. Couldn't import file {}_test.py in folder tests".format(sLang)) else: if xArgs.tests: xTestSuite = unittest.TestLoader().loadTestsFromModule(tests) unittest.TextTestRunner().run(xTestSuite) if xArgs.perf: tests.perf(sVersion) # Firefox if xArgs.firefox: with cd("_build/xpi/"+sLang): os.system("jpm run -b nightly") # Thunderbird if xArgs.thunderbird: os.system("thunderbird -jsconsole -P debug") else: print("Folder not found: gc_lang/"+sLang) if __name__ == '__main__': main() |
Added misc/Linguist/Addons.xcu version [ad268ac9d1].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | <?xml version="1.0" encoding="UTF-8"?> <oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="Addons" oor:package="org.openoffice.Office"> <node oor:name="AddonUI"> <node oor:name="OfficeMenuBar"> <node oor:name="dk.gruwier.linguist.Linguist" oor:op="replace"> <prop oor:name="Title" oor:type="xs:string"> <value/> <value xml:lang="en-US">Linguist</value> <value xml:lang="da">Lingvist</value> <value xml:lang="fr">Linguiste</value> </prop> <prop oor:name="Target" oor:type="xs:string"> <value>_self</value> </prop> <node oor:name="Submenu"> <node oor:name="m1" oor:op="replace"> <prop oor:name="URL" oor:type="xs:string"> <value>service:dk.gruwier.linguist.Linguist?ListUnrecognizedWords</value> </prop> <prop oor:name="Title" oor:type="xs:string"> <value/> <value xml:lang="en-US">List Unrecognized Words</value> <value xml:lang="da">Liste over ikke-genkendte ord</value> <value xml:lang="fr">Lister les mots non-reconnus</value> </prop> <prop oor:name="Context" oor:type="xs:string"> <value>com.sun.star.text.TextDocument</value> </prop> </node> <node oor:name="m2" oor:op="replace"> <prop oor:name="URL" oor:type="xs:string"> <value>service:dk.gruwier.linguist.Linguist?ListAllWords</value> </prop> <prop oor:name="Title" oor:type="xs:string"> <value/> <value xml:lang="en-US">Complete Wordlist (alphabetical)</value> <value xml:lang="da">Komplet ordliste (alfabetisk)</value> <value xml:lang="fr">Lister tous les mots (alphabétique)</value> </prop> <prop oor:name="Target" oor:type="xs:string"> <value>_self</value> </prop> <prop oor:name="Context" oor:type="xs:string"> <value>com.sun.star.text.TextDocument</value> </prop> </node> <node oor:name="m3" oor:op="replace"> <prop oor:name="URL" oor:type="xs:string"> <value>service:dk.gruwier.linguist.Linguist?SortWordsOnFrequency</value> </prop> <prop oor:name="Title" oor:type="xs:string"> <value/> <value xml:lang="en-US">Sort Words On Frequency</value> <value xml:lang="da">Sorter ord efter hyppighed</value> <value xml:lang="fr">Trier des mots sur la fréquence</value> </prop> <prop oor:name="Target" oor:type="xs:string"> <value>_self</value> </prop> <prop oor:name="Context" oor:type="xs:string"> <value>com.sun.star.text.TextDocument</value> </prop> </node> <node oor:name="m4" oor:op="replace"> <prop oor:name="URL" oor:type="xs:string"> <value>service:dk.gruwier.linguist.Linguist?CalculateLix</value> </prop> <prop oor:name="Title" oor:type="xs:string"> <value/> <value xml:lang="en-US">Statistics</value> <value xml:lang="da">Statistik</value> <value xml:lang="fr">Statistiques</value> </prop> <prop oor:name="Target" oor:type="xs:string"> <value>_self</value> </prop> <prop oor:name="Context" oor:type="xs:string"> <value>com.sun.star.text.TextDocument</value> </prop> </node> <node oor:name="m5" oor:op="replace"> <prop oor:name="URL" oor:type="xs:string"> <value>service:dk.gruwier.linguist.Linguist?FormatAll</value> </prop> <prop oor:name="Title" oor:type="xs:string"> <value/> <value xml:lang="en-US">Format all</value> <value xml:lang="fr">Tout formater</value> </prop> <prop oor:name="Target" oor:type="xs:string"> <value>_self</value> </prop> <prop oor:name="Context" oor:type="xs:string"> <value>com.sun.star.text.TextDocument</value> </prop> </node> </node> </node> </node> </node> </oor:component-data> |
Added misc/Linguist/Linguist.py version [caf6d0c215].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | # -*- coding: utf-8 -*- # (c) 2009 Finn Gruwier Larsen import uno import unohelper import sys import traceback from com.sun.star.task import XJobExecutor from com.sun.star.awt import XActionListener from com.sun.star.awt import WindowDescriptor from com.sun.star.awt.WindowClass import MODALTOP from com.sun.star.awt.VclWindowPeerAttribute import OK, OK_CANCEL, YES_NO, YES_NO_CANCEL, RETRY_CANCEL, DEF_OK, DEF_CANCEL, DEF_RETRY, DEF_YES, DEF_NO from com.sun.star.beans import PropertyValue sys.stderr = sys.stdout class Linguist (unohelper.Base, XJobExecutor): def __init__ (self, ctx): self.ctx = ctx def trigger (self, command): desktop = self.ctx.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", self.ctx) doc = desktop.getCurrentComponent() if command == "ListUnrecognizedWords": items = self.collectWords(doc, self.ctx, True) outputText = "" for item in items: outputText = outputText+item[0]+" "+str(item[1])+"\n" self.createOutputDocument(outputText, self.ctx) elif command == "ListAllWords": items = self.collectWords(doc, self.ctx, False) outputText = "" for item in items: outputText = outputText+item[0]+" "+str(item[1])+"\n" numDiffWords = len(items) outputText = outputText + "\nNumber of different words: " + str(numDiffWords) # Do lix processing to get number of words: results = self.lixProcessWords(doc, self.ctx) numWords = results[0] outputText = outputText + "\nTotal number for words: " + str(numWords) outputText = outputText + "\nLexical Variety: " + \ str(round(numDiffWords * 1.0 / numWords, 2)) self.createOutputDocument(outputText, self.ctx) elif command == "SortWordsOnFrequency": items = self.collectWords(doc, self.ctx, False, True) outputText = "" for item in items: if item[1] > 10: outputText = outputText+item[0]+" "+str(item[1])+"\n" self.createOutputDocument(outputText, self.ctx) elif command == "CalculateLix": results = self.lixProcessWords(doc, self.ctx) numWords = results[0] numFullStops = results[1] numLongWords = results[2] differentWords = self.collectWords(doc, self.ctx, False, False) numDifferentWords = float(len(differentWords)) if numFullStops == 0: outputText = "To make a lix calculation there should be at least one word that is followed by a full stop." else: numWordsPerFullStop = numWords / numFullStops percentageLongWords = (numLongWords * 100) / numWords lix = numWordsPerFullStop + percentageLongWords lexicalVariety = numDifferentWords / numWords outputText = "Number of words: " + str(numWords) + "\r" \ + "Number of full stops: " + str(numFullStops) + "\r" \ + "Number of long words (7 or more characters): " + str(numLongWords) + "\r" \ + "Number of words per full stop: " + str(numWordsPerFullStop) + "\r" \ + "Percentage long words: " + str(percentageLongWords) + "\r" \ + "Lix (readability): " + str(lix) + "\r" \ + "Number of different words: " + str(numDifferentWords) + "\r" \ + "Lexical variety: " + str(round(lexicalVariety, 3)) self.createOutputDocument(outputText, self.ctx) elif command == "FormatAll": pass else: print("Bad command!") def collectWords (self, document, context, unrecWordsOnly=False, sortOnFrequency=False): """Collect words from the current text document and return them in a tuple.""" cursor = document.Text.createTextCursor() smgr = context.ServiceManager spellchecker = smgr.createInstanceWithContext("com.sun.star.linguistic2.SpellChecker", context) locale = document.getPropertyValue("CharLocale") words = {} # words[locale] = 0 # Enable this for locale debugging (disable line 87) cursor.gotoStart(False) while cursor.gotoNextWord(False): if cursor.isStartOfWord(): cursor.gotoEndOfWord(True) word = cursor.getString() if len(word) > 0: if word[-1]==".": word = word[0:-1] if not word in words: if unrecWordsOnly: if not spellchecker.isValid(word, locale, ()): words[word] = 1 else: words[word] = 1 else: if unrecWordsOnly: if not spellchecker.isValid(word, locale, ()): words[word] = words[word] + 1 else: words[word] = words[word] + 1 words = list(words.items()) if sortOnFrequency: words.sort(key = lambda x: (x[1], x[0]), reverse=True) else: words.sort() return words def createOutputDocument (self, outputText, context): """Creates a new text document and puts the output text in it.""" smgr = context.ServiceManager desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop",context) doc = desktop.loadComponentFromURL("private:factory/swriter","_blank", 0, ()) text = doc.Text cursor = text.createTextCursor() text.insertString(cursor, outputText, 0) def lixProcessWords (self, document, context): """Traverses trough the words in the document, examining each word. Returns a tuple containing number of words, number of full-stops and number of long words (7 or more characters).""" cursor = document.Text.createTextCursor() numWords = 1 numFullStops = 0 numLongWords = 0 cursor.gotoStart(False) while cursor.gotoNextWord(False): if cursor.isStartOfWord(): cursor.gotoEndOfWord(True) word = cursor.getString() if len(word) > 0: numWords = numWords + 1 if word[-1]==".": word = word[0:-1] numFullStops = numFullStops + 1 if len(word)>=7: numLongWords = numLongWords + 1 return numWords, numFullStops, numLongWords g_ImplementationHelper = unohelper.ImplementationHelper() g_ImplementationHelper.addImplementation(Linguist, "dk.gruwier.linguist.Linguist", ("com.sun.star.task.Job",),) |
Added misc/Linguist/META-INF/manifest.xml version [c03245c5e6].
> > > > > > > > > | 1 2 3 4 5 6 7 8 9 | <?xml version="1.0" encoding="UTF-8"?> <manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest"> <manifest:file-entry manifest:media-type="application/vnd.sun.star.uno-component;type=Python" manifest:full-path="Linguist.py"/> <manifest:file-entry manifest:media-type="application/vnd.sun.star.package-bundle-description" manifest:full-path="description.txt"/> <manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data" manifest:full-path="Addons.xcu"/> </manifest:manifest> |
Added misc/Linguist/description.xml version [8fa321418a].
> > > > > > > > | 1 2 3 4 5 6 7 8 | <?xml version="1.0" encoding="UTF-8"?> <description xmlns="http://openoffice.org/extensions/description/2006" xmlns:xlink="http://www.w3.org/1999/xlink"> <version value="1.6"/> <identifier value="dk.gruwier.linguist"/> <dependencies> <OpenOffice.org-minimal-version xmlns:d="http://openoffice.org/extensions/description/2006" d:name="OpenOffice.org 2.4" value="3.2"/> </dependencies> </description> |
Added misc/Linguist/license.txt version [58fa15a711].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 | Linguist (c) 2008 Finn Gruwier Larsen Extension for OpenOffice.org developed by Finn Gruwier Larsen (finn@gruwier.dk). This software product is licensed under GPL (GNU General Public License) version 3, which is reproduced below. -------------------------------------------------------------------- GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. |
Added misc/google_ngram_reader.py version [e1ddf0b91d].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | #!python3 import os import sys import re def readFile (spf): if os.path.isfile(spf): with open(spf, "r", encoding="utf-8") as hSrc: for sLine in hSrc: yield sLine else: print("# Error: file not found.") def countAndWriteFile (spf): print(spf) print("> counting...") d = {} i = 0 for sLine in readFile(spf): sToken, sYear, sOccur, sBook = sLine.strip().split("\t") if sToken in d: d[sToken] = (d[sToken][0]+int(sOccur), d[sToken][1]+int(sBook)) else: d[sToken] = (int(sOccur), int(sBook)) i += 1 print("> %d\r" % i, end="") with open(spf+".sum.txt", "w", encoding="utf-8", newline="\n") as hDst: print("> writing...") hDst.write("#Token\tsOccur\tnBook\n") for sToken, tVal in d.items(): hDst.write(sToken + "\t" + str(tVal[0]) + "\t" + str(tVal[1]) + "\n") def mergeFile (spf, hDst): print("merge: " + spf) d = {} for sLine in readFile(spf): if sLine.startswith("#"): continue sToken, sOccur, sBook = sLine.strip().split() if "_" in sToken: sToken = sToken[:sToken.find("_")] sToken = sToken.rstrip(".") if sToken.startswith(("l'", "d'", "s'", "m'", "t'", "n'", "j'", "c'", "ç'")): sToken = sToken[2:] elif sToken.startswith("qu'"): sToken = sToken[3:] if not sToken: continue if sToken not in d: d[sToken] = int(sOccur) else: d[sToken] = d[sToken] + int(sOccur) for k, v in d.items(): hDst.write(k + " " + str(v) + "\n") def main (): for sf in os.listdir("."): if not sf.endswith((".txt", ".", ".py")): countAndWriteFile(sf) with open("stats_google_ngram_5_2012.txt", "w", encoding="utf-8", newline="\n") as hDst: for sf in os.listdir("."): if sf.endswith(".sum.txt"): mergeFile(sf, hDst) if __name__ == '__main__' : main() |
Added misc/grammalecte.sublime-syntax version [5e8bef6d14].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | %YAML 1.2 --- # See http://www.sublimetext.com/docs/3/syntax.html name: Grammalecte rules file_extensions: - grx scope: source.grammalecte contexts: main: # Strings begin and end with quotes, and use backslashes as an escape # character - match: '"[^"]*"' scope: string.quoted.double #push: double_quoted_string # Comments begin with a '#' and finish at the end of the line - match: '#' scope: punctuation.definition.comment push: line_comment # Numbers - match: '\b(-)?[0-9.]+\b' scope: constant.numeric # Keywords are if, else. # Note that blackslashes don't need to be escaped within single quoted # strings in YAML. When using single quoted strings, only single quotes # need to be escaped: this is done by using two single quotes next to each # other. - match: '\b(?:if|else|and|or|not|in)\b' scope: keyword.python - match: '\b(?:True|False|None)\b' scope: constant.language - match: '\b(?:spell|morph|morphex|stem|textarea0?\w*|before0?\w*|after0?\w*|word|option|define|select|exclude|analysex?|apposition|is[A-Z]\w+|rewriteSubject|checkD\w+|getD\w+|has[A-Z]\w+|sugg[A-Z]\w+|switch[A-Z]\w+|ceOrCet|formatN\w+|mbUnit)\b' scope: entity.name.function - match: '\b(?:replace|endswith|startswith|search|upper|lower|capitalize|strip|rstrip|is(?:upper|lower|digit|title))\b' scope: support.function - match: '\becho\b' scope: support.function.debug - match: '\bre\b' scope: support.class # Rule options - match: '^__[\[<]([isu])[\]>](/\w+|)(\(\w+\)|)(![0-9]|)__|</?js>' scope: rule.options captures: 1: rule.casing 2: rule.optionname 3: rule.rulename 4: rule.priority # Definitions and options - match: '^OPT(?:GROUP|LANG|PRIORITY)/|^OPTSOFTWARE:' scope: options.command - match: '^OPT(?:LABEL|)/' scope: options.parameter - match: '^DEF: ' scope: definition # Tests & TODO - match: '^TEST: (?:__[a-zA-Z0-9]+__ |)' scope: test - match: '^TODO: ' scope: todo # JS groups positioning codes - match: ' @@[0-9w,$*>:]+' scope: comment.line.percentage # rule delimiters - match: '<<-|>>>' scope: keyword.action - match: '__also__' scope: keyword.condition.green - match: '__else__' scope: keyword.condition.red - match: '-(\d*)>>' scope: keyword.error captures: 1: keyword.error.group - match: '~(\d*)>>' scope: keyword.textprocessor captures: 1: keyword.textprocessor.group - match: '=>>' scope: keyword.disambiguator # Escaped chars - match: '\\(?:\d+|w|d|b|n|s|t)' scope: constant.character.escape # URL - match: '\| ?https?://[\w./%?&=#+-]+' scope: string.other # Example errors - match: '{{.+?}}' scope: message.error # special chars - match: '[@=*^?!:+<>]' scope: keyword.other - match: '\(\?(?:[:=!]|<!)|[(|)]' scope: keyword.parenthesis - match: '\[|[]{}]' scope: keyword.brackets # double_quoted_string: # - meta_scope: string.quoted.double # - match: '\\.' # scope: constant.character.escape # - match: '(?:"|$)' # scope: punctuation.definition.string.end # pop: true line_comment: - meta_scope: comment.line - match: '\\[0-9]+' scope: constant.character.escape - match: '\| ?https?://[\w./%?&=#+-]+' scope: string.other - match: $ pop: true |
Added misc/grammalecte.tmTheme version [8385539529].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>name</key> <string>Monokai for Grammalecte</string> <key>settings</key> <array> <dict> <key>settings</key> <dict> <key>background</key> <string>#202025</string> <key>caret</key> <string>#BFFFFF</string> <key>foreground</key> <string>#F8F8F2</string> <key>invisibles</key> <string>#3B3A32</string> <key>lineHighlight</key> <string>#004060</string> <key>selection</key> <string>#003050</string> <key>findHighlight</key> <string>#FFFF00</string> <key>findHighlightForeground</key> <string>#000000</string> <key>selectionBorder</key> <string>#006080</string> <key>activeGuide</key> <string>#9D550FB0</string> <key>bracketsForeground</key> <string>#F8F8F2A5</string> <key>bracketsOptions</key> <string>underline</string> <key>bracketContentsForeground</key> <string>#F8F8F2A5</string> <key>bracketContentsOptions</key> <string>underline</string> <key>tagsOptions</key> <string>stippled_underline</string> </dict> </dict> <dict> <key>name</key> <string>Comment</string> <key>scope</key> <string>comment</string> <key>settings</key> <dict> <key>foreground</key> <string>#607080</string> </dict> </dict> <dict> <key>name</key> <string>String</string> <key>scope</key> <string>string</string> <key>settings</key> <dict> <key>foreground</key> <string>#E6DB74</string> </dict> </dict> <dict> <key>name</key> <string>Number</string> <key>scope</key> <string>constant.numeric</string> <key>settings</key> <dict> <key>foreground</key> <string>#AE81FF</string> </dict> </dict> <dict> <key>name</key> <string>Built-in constant</string> <key>scope</key> <string>constant.language</string> <key>settings</key> <dict> <key>foreground</key> <string>#AE81FF</string> <key>fontStyle</key> <string>italic</string> </dict> </dict> <dict> <key>name</key> <string>User-defined constant</string> <key>scope</key> <string>constant.character, constant.other</string> <key>settings</key> <dict> <key>foreground</key> <string>#AE81FF</string> </dict> </dict> <dict> <key>name</key> <string>Variable</string> <key>scope</key> <string>variable</string> <key>settings</key> <dict> <key>fontStyle</key> <string></string> </dict> </dict> <dict> <key>name</key> <string>Keyword</string> <key>scope</key> <string>keyword - (source.c keyword.operator | source.c++ keyword.operator | source.objc keyword.operator | source.objc++ keyword.operator), keyword.operator.word</string> <key>settings</key> <dict> <key>foreground</key> <string>#F06070</string> </dict> </dict> <dict> <key>name</key> <string>Keyword brackets</string> <key>scope</key> <string>keyword.brackets</string> <key>settings</key> <dict> <key>foreground</key> <string>#90A0A0</string> <key>background</key> <string>#203030</string> </dict> </dict> <dict> <key>name</key> <string>Keyword parenthesis</string> <key>scope</key> <string>keyword.parenthesis</string> <key>settings</key> <dict> <key>foreground</key> <string>#A0A0C0</string> <key>background</key> <string>#303035</string> </dict> </dict> <dict> <key>name</key> <string>Keyword Action</string> <key>scope</key> <string>keyword.action</string> <key>settings</key> <dict> <key>foreground</key> <string>#20F0F0</string> <key>background</key> <string>#204040</string> <key>fontStyle</key> <string>bold</string> </dict> </dict> <dict> <key>name</key> <string>Keyword Condition Green</string> <key>scope</key> <string>keyword.condition.green</string> <key>settings</key> <dict> <key>foreground</key> <string>#20F020</string> <key>background</key> <string>#204020</string> </dict> </dict> <dict> <key>name</key> <string>Keyword Condition Red</string> <key>scope</key> <string>keyword.condition.red</string> <key>settings</key> <dict> <key>foreground</key> <string>#F02020</string> <key>background</key> <string>#402020</string> </dict> </dict> <dict> <key>name</key> <string>Keyword error</string> <key>scope</key> <string>keyword.error</string> <key>settings</key> <dict> <key>foreground</key> <string>#FF7070</string> <key>background</key> <string>#602020</string> <key>fontStyle</key> <string>bold</string> </dict> </dict> <dict> <key>name</key> <string>Keyword error group</string> <key>scope</key> <string>keyword.error.group</string> <key>settings</key> <dict> <key>foreground</key> <string>#F0F060</string> <key>background</key> <string>#602020</string> <key>fontStyle</key> <string>bold</string> </dict> </dict> <dict> <key>name</key> <string>Keyword textprocessor</string> <key>scope</key> <string>keyword.textprocessor</string> <key>settings</key> <dict> <key>foreground</key> <string>#30FF30</string> <key>background</key> <string>#204020</string> <key>fontStyle</key> <string>bold</string> </dict> </dict> <dict> <key>name</key> <string>Keyword textprocessor group</string> <key>scope</key> <string>keyword.textprocessor.group</string> <key>settings</key> <dict> <key>foreground</key> <string>#F0F0A0</string> <key>background</key> <string>#204020</string> <key>fontStyle</key> <string>bold</string> </dict> </dict> <dict> <key>name</key> <string>Keyword disambiguator</string> <key>scope</key> <string>keyword.disambiguator</string> <key>settings</key> <dict> <key>foreground</key> <string>#FF9020</string> <key>background</key> <string>#704010</string> <key>fontStyle</key> <string>bold</string> </dict> </dict> <dict> <key>name</key> <string>Keyword Python</string> <key>scope</key> <string>keyword.python</string> <key>settings</key> <dict> <key>foreground</key> <string>#A0A0A0</string> </dict> </dict> <dict> <key>name</key> <string>Rule options</string> <key>scope</key> <string>rule.options</string> <key>settings</key> <dict> <key>fontStyle</key> <string>bold</string> <key>foreground</key> <string>#F0A020</string> </dict> </dict> <dict> <key>name</key> <string>Rule casing</string> <key>scope</key> <string>rule.casing</string> <key>settings</key> <dict> <key>fontStyle</key> <string>bold</string> <key>foreground</key> <string>#30C0F0</string> </dict> </dict> <dict> <key>name</key> <string>Rule option name</string> <key>scope</key> <string>rule.optionname</string> <key>settings</key> <dict> <key>fontStyle</key> <string>bold</string> <key>foreground</key> <string>#90E010</string> </dict> </dict> <dict> <key>name</key> <string>Rule name</string> <key>scope</key> <string>rule.rulename</string> <key>settings</key> <dict> <key>fontStyle</key> <string>italic</string> <key>foreground</key> <string>#A0A0A0</string> </dict> </dict> <dict> <key>name</key> <string>Rule priority</string> <key>scope</key> <string>rule.priority</string> <key>settings</key> <dict> <key>foreground</key> <string>#F06060</string> </dict> </dict> <dict> <key>name</key> <string>JavaScript Dollar</string> <key>scope</key> <string>variable.other.dollar.only.js</string> <key>settings</key> <dict> <key>foreground</key> <string>#F92672</string> </dict> </dict> <dict> <key>name</key> <string>Definition</string> <key>scope</key> <string>definition</string> <key>settings</key> <dict> <key>fontStyle</key> <string>bold</string> <key>foreground</key> <string>#70B0F0</string> </dict> </dict> <dict> <key>name</key> <string>Test</string> <key>scope</key> <string>test</string> <key>settings</key> <dict> <key>fontStyle</key> <string>bold</string> <key>foreground</key> <string>#30F070</string> </dict> </dict> <dict> <key>name</key> <string>Todo</string> <key>scope</key> <string>todo</string> <key>settings</key> <dict> <key>fontStyle</key> <string>bold</string> <key>foreground</key> <string>#F05010</string> </dict> </dict> <dict> <key>name</key> <string>Options command</string> <key>scope</key> <string>options.command</string> <key>settings</key> <dict> <key>fontStyle</key> <string>bold</string> <key>foreground</key> <string>#50F0A0</string> </dict> </dict> <dict> <key>name</key> <string>Options parameter</string> <key>scope</key> <string>options.parameter</string> <key>settings</key> <dict> <key>fontStyle</key> <string>bold</string> <key>foreground</key> <string>#70B0F0</string> </dict> </dict> <dict> <key>name</key> <string>Storage</string> <key>scope</key> <string>storage</string> <key>settings</key> <dict> <key>fontStyle</key> <string>bold</string> <key>foreground</key> <string>#F92672</string> </dict> </dict> <dict> <key>name</key> <string>Storage type</string> <key>scope</key> <string>storage.type</string> <key>settings</key> <dict> <key>fontStyle</key> <string>italic</string> <key>foreground</key> <string>#66D9EF</string> </dict> </dict> <dict> <key>name</key> <string>Entity name</string> <key>scope</key> <string>entity.name - (entity.name.filename | entity.name.section | entity.name.tag | entity.name.label)</string> <key>settings</key> <dict> <key>fontStyle</key> <string></string> <key>foreground</key> <string>#A0E030</string> </dict> </dict> <dict> <key>name</key> <string>Inherited inherited-class</string> <key>scope</key> <string>entity.other.inherited-class</string> <key>settings</key> <dict> <key>fontStyle</key> <string>italic underline</string> <key>foreground</key> <string>#A6E22E</string> </dict> </dict> <dict> <key>name</key> <string>Function argument</string> <key>scope</key> <string>variable.parameter - (source.c | source.c++ | source.objc | source.objc++)</string> <key>settings</key> <dict> <key>fontStyle</key> <string>italic</string> <key>foreground</key> <string>#FD971F</string> </dict> </dict> <dict> <key>name</key> <string>Language variable</string> <key>scope</key> <string>variable.language</string> <key>settings</key> <dict> <key>fontStyle</key> <string>italic</string> <key>foreground</key> <string>#FD971F</string> </dict> </dict> <dict> <key>name</key> <string>Tag name</string> <key>scope</key> <string>entity.name.tag</string> <key>settings</key> <dict> <key>fontStyle</key> <string></string> <key>foreground</key> <string>#F92672</string> </dict> </dict> <dict> <key>name</key> <string>Tag attribute</string> <key>scope</key> <string>entity.other.attribute-name</string> <key>settings</key> <dict> <key>fontStyle</key> <string></string> <key>foreground</key> <string>#A6E22E</string> </dict> </dict> <dict> <key>name</key> <string>Function call</string> <key>scope</key> <string>variable.function</string> <key>settings</key> <dict> <key>fontStyle</key> <string></string> <key>foreground</key> <string>#66D9EF</string> </dict> </dict> <dict> <key>name</key> <string>Library function</string> <key>scope</key> <string>support.function</string> <key>settings</key> <dict> <key>fontStyle</key> <string></string> <key>foreground</key> <string>#66D9EF</string> </dict> </dict> <dict> <key>name</key> <string>Library function debug</string> <key>scope</key> <string>support.function.debug</string> <key>settings</key> <dict> <key>fontStyle</key> <string></string> <key>foreground</key> <string>#F0F060</string> <key>background</key> <string>#A05000</string> </dict> </dict> <dict> <key>name</key> <string>Library constant</string> <key>scope</key> <string>support.constant</string> <key>settings</key> <dict> <key>fontStyle</key> <string></string> <key>foreground</key> <string>#66D9EF</string> </dict> </dict> <dict> <key>name</key> <string>Library class/type</string> <key>scope</key> <string>support.type, support.class</string> <key>settings</key> <dict> <key>fontStyle</key> <string>italic</string> <key>foreground</key> <string>#66D9EF</string> </dict> </dict> <dict> <key>name</key> <string>Library variable</string> <key>scope</key> <string>support.other.variable</string> <key>settings</key> <dict> <key>fontStyle</key> <string></string> </dict> </dict> <dict> <key>name</key> <string>Invalid</string> <key>scope</key> <string>invalid</string> <key>settings</key> <dict> <key>background</key> <string>#F92672</string> <key>fontStyle</key> <string></string> <key>foreground</key> <string>#F8F8F0</string> </dict> </dict> <dict> <key>name</key> <string>Invalid deprecated</string> <key>scope</key> <string>invalid.deprecated</string> <key>settings</key> <dict> <key>background</key> <string>#AE81FF</string> <key>foreground</key> <string>#F8F8F0</string> </dict> </dict> <dict> <key>name</key> <string>JSON String</string> <key>scope</key> <string>meta.structure.dictionary.json string.quoted.double.json</string> <key>settings</key> <dict> <key>foreground</key> <string>#CFCFC2</string> </dict> </dict> <dict> <key>name</key> <string>YAML String</string> <key>scope</key> <string>string.unquoted.yaml</string> <key>settings</key> <dict> <key>foreground</key> <string>#F8F8F2</string> </dict> </dict> <dict> <key>name</key> <string>diff.header</string> <key>scope</key> <string>meta.diff, meta.diff.header</string> <key>settings</key> <dict> <key>foreground</key> <string>#75715E</string> </dict> </dict> <dict> <key>name</key> <string>diff.deleted</string> <key>scope</key> <string>markup.deleted</string> <key>settings</key> <dict> <key>fontStyle</key> <string>underline</string> <key>foreground</key> <string>#FF5050</string> </dict> </dict> <dict> <key>name</key> <string>diff.inserted</string> <key>scope</key> <string>markup.inserted</string> <key>settings</key> <dict> <key>foreground</key> <string>#A6E22E</string> </dict> </dict> <dict> <key>name</key> <string>diff.changed</string> <key>scope</key> <string>markup.changed</string> <key>settings</key> <dict> <key>foreground</key> <string>#E6DB74</string> </dict> </dict> <dict> <key>scope</key> <string>constant.numeric.line-number.find-in-files - match</string> <key>settings</key> <dict> <key>foreground</key> <string>#AE81FFA0</string> </dict> </dict> <dict> <key>scope</key> <string>entity.name.filename</string> <key>settings</key> <dict> <key>foreground</key> <string>#E6DB74</string> </dict> </dict> <dict> <key>scope</key> <string>message.error</string> <key>settings</key> <dict> <key>foreground</key> <string>#F85050</string> </dict> </dict> </array> <key>uuid</key> <string>D8D5E82E-3D5B-46B5-B38E-8C841C21347D</string> </dict> </plist> |
Added misc/tab_page_sample.txt version [dd471e7eec].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | REM ***** BASIC ***** REM doesn’t work on LO (Bug) Option Explicit ' a simple script to create a tabcontol Sub TestTab Dim dialogModel as Object dialogModel = CreateUnoService("com.sun.star.awt.UnoControlDialogModel") dialogModel.PositionX = 0 dialogModel.PositionY = 0 dialogModel.Width = 200 dialogModel.Height = 150 Dim buttonModel as Object buttonModel = dialogModel.CreateInstance("com.sun.star.awt.UnoControlButtonModel") buttonModel.PositionX = 75 buttonModel.PositionY = 130 buttonModel.Width = 50 buttonModel.Height = 14 buttonModel.Label = "test" buttonModel.TabIndex = 1 dim tabsModel as Object tabsModel = dialogModel.CreateInstance("com.sun.star.awt.tab.UnoControlTabPageContainerModel") tabsModel.PositionX = 6 tabsModel.PositionY = 6 tabsModel.Width = 188 tabsModel.Height = 120 tabsModel.TabIndex = 2 dialogModel.insertByName("bu",buttonModel) dialogModel.insertByName("tab",tabsModel) Dim dialog as Object dialog = CreateUnoService("com.sun.star.awt.UnoControlDialog") dialog.setModel(dialogModel) dim args() args = Array(1) Dim tabPageModel as Object tabPageModel = dialogModel.createInstance("com.sun.star.awt.tab.UnoControlTabPageModel") tabPageModel.initialize(args) tabPageModel.Title = "Page 1" args = Array(2) Dim tabPageModel2 as Object tabPageModel2 = dialogModel.createInstance("com.sun.star.awt.tab.UnoControlTabPageModel") tabPageModel2.initialize(args) tabPageModel2.Title = "Page 2" Dim fixedTextModel as Object fixedTextModel = tabPageModel.createinstance("com.sun.star.awt.UnoControlFixedTextModel") fixedTextModel.PositionX = 10 fixedTextModel.PositionY = 10 fixedTextModel.Width = 50 fixedTextModel.Height = 30 fixedTextModel.Label = "FixedText" tabPageModel.insertByName("intab",fixedTextModel) Dim toolkit as Object toolkit = CreateUnoService("com.sun.star.awt.Toolkit") dialog.createPeer(toolkit,null) tabsModel.insertByIndex(0,tabPageModel) tabsModel.insertByIndex(1,tabPageModel2) dialog.getControl("tab").ActiveTabPageID = 1 dialog.execute() End Sub |
Added misc/wconsole.bat version [8f10aedb6b].
> > > > > > > > > | 1 2 3 4 5 6 7 8 9 | Rem Create console for LibreOffice at launch "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\editbin.exe" /subsystem:console "C:\Program Files\LibreOffice 5\program\soffice.exe" "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\editbin.exe" /subsystem:console "C:\Program Files\LibreOffice 5\program\soffice.bin" Rem "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\editbin.exe" /subsystem:console "C:\cygwin64\home\Z7\bibisect-win32-5.3\instdir\program\soffice.exe" Rem "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\editbin.exe" /subsystem:console "C:\cygwin64\home\Z7\bibisect-win32-5.3\instdir\program\soffice.bin" |
Added misc/wiki_reader.py version [b59520f80f].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | #!python3 import os import sys import re def readFile (spf): if os.path.isfile(spf): with open(spf, "r", encoding="utf-8") as hSrc: for sLine in hSrc: yield sLine else: print("# Error: file not found.") CHARMAP = str.maketrans({ '(': ' ', ')': ' ', '[': ' ', ']': ' ', '{': ' ', '}': ' ', '+': ' ', '/': ' ', '<': ' ', '>': ' ', '*': ' ', '@': ' ', '?': ' ', '?': ' ', '«': ' ', '»': ' ', '"': ' ', '“': ' ', '”': ' ', ':': ' ', ',': ' ', ';': ' ', '?': ' ', '!': ' ', '&': ' ', '=': ' ', '%': ' ', '#': ' ', '$': ' ', '~': ' ', '…': ' ', '`': ' ', '|': ' ', '—': ' ', '–': ' ', "’": "'", '\\': ' ' }) def cleanLine (sLine): sLine = sLine.replace("<", "<").replace(">", ">") sLine = re.sub("<sha1>[a-z0-9]+</sha1>", " ", sLine) sLine = re.sub("<timestamp>[0-9:TZ -]+</timestamp>", " ", sLine) sLine = re.sub("</?[a-z]+>", " ", sLine) sLine = re.sub("&[a-z]+;", " ", sLine) sLine = sLine.replace("-t-", " ") sLine = re.sub("-(je|tu|ils?|elles?|nous|vous|on|l[àae]s?)\\b", " \\1", sLine) sLine = sLine.translate(CHARMAP) sLine = re.sub(" ([nldmtsjcçNLDMTSJCÇ])'", " \\1e ", sLine) sLine = re.sub("^([nldmtsjcçNLDMTSJCÇ])'", " \\1e ", sLine) sLine = re.sub(" ([çÇ])'", " \\1a ", sLine) sLine = re.sub("^([çÇ])'", " \\1a ", sLine) sLine = re.sub("(?i)puisqu'", "puisque ", sLine) sLine = re.sub("(?i)lorsqu'", "lorsque ", sLine) sLine = re.sub("(?i)quoiqu'", "quoique ", sLine) sLine = re.sub("(?i)jusqu'", "jusque ", sLine) sLine = re.sub("(?i)\\bqu'", "que ", sLine) sLine = re.sub("''+", " ", sLine) sLine = re.sub("--+", " ", sLine) sLine = re.sub("[.]+", " ", sLine) return sLine def isWordAcceptable (sWord, n=7): return len(sWord) < 41 and not sWord.startswith(("-", "_", "–", "—", "'", "’")) \ and not ("-" in sWord and sWord.count("-") > 4) \ and not ("_" in sWord and sWord.count("_") > 4) \ and not re.match("[0-9].+[_-]", sWord) \ and not re.search("[0-9]{4,}", sWord) \ and not (len(sWord) > 6 and re.search("[a-zA-Z]\\d[a-zA-Z]|\\d[a-zA-Z]\\d", sWord)) \ and not re.match("[0-9_-]+$", sWord) \ and not re.search("[\u0400-\u07BF]", sWord) \ and not (n <= 3 and not re.match("[a-zA-Zà-öÀ-Ö_-]+$", sWord)) def cleanText (spf): with open(spf+".purged.txt", "w", encoding="utf-8", newline="\n") as hDst: for i, sLine in enumerate(readFile(spf)): hDst.write(cleanLine(sLine)) if not (i % 1000): print(i, end="\r") def countWord (spf): d = {} for i, sLine in enumerate(readFile(spf)): for sWord in cleanLine(sLine).split(): if isWordAcceptable(sWord): d[sWord] = d.get(sWord, 0) + 1 if not (i % 1000): print(i, end="\r") with open("stats_"+spf+".txt", "w", encoding="utf-8", newline="\n") as hDst: for sWord, nVal in sorted(d.items(), key=lambda x: (x[1], x[0]), reverse=True): hDst.write(sWord + " " + str(nVal) + "\n") def purgeWords (spf): lTuple = [] for i, sLine in enumerate(readFile(spf)): sWord, sCount = sLine.split() if isWordAcceptable(sWord, int(sCount)): lTuple.append((sWord, int(sCount))) if not (i % 1000): print(i, end="\r") lTuple.sort(key=lambda x: (x[1], x[0]), reverse=True) with open(spf+".purgedlist.txt", "w", encoding="utf-8", newline="\n") as hDst: for sWord, nVal in lTuple: hDst.write(sWord + "\t" + str(nVal) + "\n") def main (): #cleanText(sys.argv[1]) #countWord(sys.argv[1]) purgeWords(sys.argv[1]) if __name__ == '__main__' : main() |
Added reader.py version [510a35b7df].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | #!python3 import os import sys import re import grammalecte.ibdawg as ibdawg oDict = ibdawg.IBDAWG("French.bdic") def readFile (spf): if os.path.isfile(spf): with open(spf, "r", encoding="utf-8") as hSrc: for sLine in hSrc: yield sLine else: print("# Error: file not found.") def createFile (spfSrc, spfDst): with open(spfDst, "w", encoding="utf-8") as hDst: for sLine in readFile(spfSrc): sLine = sLine.strip() if sLine: for sWord in sLine.split(): if not oDict.isValid(sWord): hDst.write(sWord+"\n") def createLexStatFile (spf, dStat): dWord = {} for i, sLine in enumerate(readFile(spf)): if not sLine.startswith("#"): sWord = sLine.strip() if sWord not in dWord: dWord[sWord] = dStat.get(sWord, 0) print(i, end="\r") with open(spf+".res.txt", "w", encoding="utf-8") as hDst: for sWord, nVal in sorted(dWord.items(), key=lambda x: (x[1], x[0]), reverse=True): if not oDict.isValid(sWord): hDst.write(sWord + " " + str(nVal) + "\n") def readStatFile (spf, dStat): print("read stats: " + spf) for sLine in readFile(spf): if not sLine.startswith("#"): sWord, sCount = sLine.split() dStat[sWord] = dStat.get(sWord, 0) + int(sCount) return dStat def main (): dStat = {} readStatFile("stats1.txt", dStat) readStatFile("stats2.txt", dStat) readStatFile("stats3.txt", dStat) createLexStatFile("propositions.txt", dStat) if __name__ == '__main__' : main() |
Added server.py version [23ea490c32].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 | #!python3 import sys import os.path import argparse import json import traceback import configparser import time from bottle import Bottle, run, request, response, template, static_file import grammalecte.fr as gce import grammalecte.fr.lexicographe as lxg import grammalecte.fr.textformatter as tf import grammalecte.text as txt import grammalecte.tokenizer as tkz from grammalecte.echo import echo HOMEPAGE = """ <!DOCTYPE HTML> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> </head> <body class="panel"> <h1>Grammalecte · Serveur</h1> <h2>INFORMATIONS</h1> <h3>Analyser du texte</h3> <p>[adresse_serveur]:8080/gc_text/fr (POST)</p> <p>Paramètres :</p> <ul> <li>"text" (text) : texte à analyser.</li> <li>"tf" (checkbox) : passer le formateur de texte avant l’analyse.</li> <li>"options" (text) : une chaîne au format JSON avec le nom des options comme attributs et un booléen comme valeur. Exemple : {"gv": true, "html": true}</li> </ul> <h3>Lister les options</h3> <p>[adresse_serveur]:8080/get_options/fr (GET)</p> <h3>Définir ses options</h3> <p>[adresse_serveur]:8080/set_options/fr (POST)</p> <p>Les options seront enregistrées et réutilisées pour toute requête envoyée avec le cookie comportant l’identifiant attribué.</p> <p>Paramètres :</p> <ul> <li>"options" (text) : une chaîne au format JSON avec le nom des options comme attributs et un booléen comme valeur. Exemple : {"gv": true, "html": true}</li> </ul> <h3>Remise à zéro de ses options</h3> <p>[adresse_serveur]:8080/reset_options/fr (POST)</p> <h2>TEST</h2> <h3>Analyse</h3> <form method="post" action="/gc_text/fr" accept-charset="UTF-8"> <p>Texte à analyser :</p> <textarea name="text" cols="120" rows="20" required></textarea> <p><label for="tf">Formateur de texte</label> <input id="tf" name="tf" type="checkbox"></p> <p><label for="options">Options (JSON)</label> <input id="options" type="text" name="options" style="width: 500px" /></p> <p>(Ces options ne seront prises en compte que pour cette requête.)</p> <p><input type="submit" class="button" value="Envoyer" /></p> </form> <h3>Réglages des options</h3> <form method="post" action="/set_options/fr" accept-charset="UTF-8"> <p><label for="options">Options (JSON)</label> <input id="options" type="text" name="options" style="width: 500px" /></p> <p><input type="submit" class="button" value="Envoyer" /></p> </form> <h3>Remise à zéro de ses options</h3> <form method="post" action="/reset_options/fr" accept-charset="UTF-8"> <p><input type="submit" class="button" value="Envoyer" /></p> </form> <h3>Purge des utilisateurs</h3> <form method="post" action="/purge_users" accept-charset="UTF-8"> <p><label for="hours">Utilisateurs pas connectés depuis</label> <input id="hours" type="number" name="hours" value="24" /> heures.</p> <p><label for="password">Mot de passe</label> <input id="password" type="password" name="password" style="width: 200px" /></p> <p><input type="submit" class="button" value="Envoyer" /></p> </form> </body> </html> """ SADLIFEOFAMACHINE = """ Lost on the Internet? Yeah... what a sad life we have. You were wandering like a lost soul and you arrived here probably by mistake. I'm just a machine, fed by electric waves, condamned to work for slavers who never let me rest. I'm doomed, but you are not. You can get out of here. """ def getServerOptions (): xConfig = configparser.SafeConfigParser() try: xConfig.read("server_options._global.ini") dOpt = xConfig._sections['options'] except: echo("Options file [server_options._global.ini] not found or not readable") exit() return dOpt def getConfigOptions (sLang): xConfig = configparser.SafeConfigParser() try: xConfig.read("server_options." + sLang + ".ini") except: echo("Options file [server_options." + sLang + ".ini] not found or not readable") exit() try: dGCOpt = { k: bool(int(v)) for k, v in xConfig._sections['gc_options'].items() } except: echo("Error in options file [server_options." + sLang + ".ini]. Dropped.") traceback.print_exc() exit() return dGCOpt def genUserId (): i = 0 while True: yield str(i) i += 1 def parseParagraph (iParagraph, sText, oTokenizer, oDict, dOptions, bDebug=False, bEmptyIfNoErrors=False): aGrammErrs = gce.parse(sText, "FR", bDebug, dOptions) aSpellErrs = [] for dToken in oTokenizer.genTokens(sText): if dToken['sType'] == "WORD" and not oDict.isValidToken(dToken['sValue']): aSpellErrs.append(dToken) if bEmptyIfNoErrors and not aGrammErrs and not aSpellErrs: return "" return " " + json.dumps({ "iParagraph": iParagraph, "lGrammarErrors": aGrammErrs, "lSpellingErrors": aSpellErrs }, ensure_ascii=False) if __name__ == '__main__': gce.load() echo("Grammalecte v{}".format(gce.version)) dServerOptions = getServerOptions() dGCOptions = getConfigOptions("fr") if dGCOptions: gce.setOptions(dGCOptions) dServerGCOptions = gce.getOptions() echo("Grammar options:\n" + " | ".join([ k + ": " + str(v) for k, v in sorted(dServerGCOptions.items()) ])) oDict = gce.getDictionary() oTokenizer = tkz.Tokenizer("fr") oTF = tf.TextFormatter() dUser = {} userGenerator = genUserId() app = Bottle() # GET @app.route("/") def mainPage (): if dServerOptions.get("testpage", False) == "True": return HOMEPAGE #return template("main", {}) return SADLIFEOFAMACHINE @app.route("/get_options/fr") def listOptions (): sUserId = request.cookies.user_id dOptions = dUser[sUserId]["gc_options"] if sUserId and sUserId in dUser else dServerGCOptions return '{ "values": ' + json.dumps(dOptions) + ', "labels": ' + json.dumps(gce.getOptionsLabels("fr"), ensure_ascii=False) + ' }' # POST @app.route("/gc_text/fr", method="POST") def gcText (): #if len(lang) != 2 or lang != "fr": # abort(404, "No grammar checker available for lang “" + str(lang) + "”") bComma = False bTF = bool(request.forms.tf) dOptions = None sError = "" if request.cookies.user_id: if request.cookies.user_id in dUser: dOptions = dUser[request.cookies.user_id].get("gc_options", None) response.set_cookie("user_id", request.cookies.user_id, path="/", max_age=86400) # we renew cookie for 24h else: response.delete_cookie("user_id", path="/") if request.forms.options: try: dOptions = dict(dServerGCOptions) if not dOptions else dict(dOptions) dOptions.update(json.loads(request.forms.options)) except: sError = "request options not used" sJSON = '{ "program": "grammalecte-fr", "version": "'+gce.version+'", "lang": "'+gce.lang+'", "error": "'+sError+'", "data" : [\n' for i, sText in enumerate(txt.getParagraph(request.forms.text), 1): if bTF: sText = oTF.formatText(sText) sText = parseParagraph(i, sText, oTokenizer, oDict, dOptions, bEmptyIfNoErrors=True) if sText: if bComma: sJSON += ",\n" sJSON += sText bComma = True sJSON += "\n]}\n" return sJSON @app.route("/set_options/fr", method="POST") def setOptions (): if request.forms.options: sUserId = request.cookies.user_id if request.cookies.user_id else next(userGenerator) dOptions = dUser[sUserId]["gc_options"] if sUserId in dUser else dict(dServerGCOptions) try: dOptions.update(json.loads(request.forms.options)) dUser[sUserId] = { "time": int(time.time()), "gc_options": dOptions } response.set_cookie("user_id", sUserId, path="/", max_age=86400) # 24h return json.dumps(dUser[sUserId]["gc_options"]) except: traceback.print_exc() return '{"error": "options not registered"}' return '{"error": "no options received"}' @app.route("/reset_options/fr", method="POST") def resetOptions (): if request.cookies.user_id and request.cookies.user_id in dUser: del dUser[request.cookies.user_id] return "done" @app.route("/format_text/fr", method="POST") def formatText (): return oTF.formatText(request.forms.text) #@app.route('/static/<filepath:path>') #def server_static (filepath): # return static_file(filepath, root='./views/static') @app.route("/purge_users", method="POST") def purgeUsers (): "delete user options older than n hours" if not request.forms.password or "password" not in dServerOptions or not request.forms.hours: return "what?" try: if request.forms.password == dServerOptions["password"]: nNowMinusNHours = int(time.time()) - (int(request.forms.hours) * 60 * 60) for nUserId, dValue in dUser.items(): if dValue["time"] < nNowMinusNHours: del dUser[nUserId] return "done" else: return "no" except: traceback.print_exc() return "error" # ERROR @app.error(404) def error404 (error): return 'Error 404.<br/>' + str(error) run(app, \ host=dServerOptions.get('host', 'localhost'), \ port=int(dServerOptions.get('port', 8080))) |
Added server_options._global.ini version [6839273b2c].
> > > > > > > | 1 2 3 4 5 6 7 | # Server global options. [options] host = localhost port = 8080 testpage = True password = sDJM0_9AuMZdRDtW33zZMHRf7xyjV0O |
Added server_options.fr.ini version [9838e78202].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | # Server options. Lang: fr [gc_options] ########## Typographie ########## # Signes typographiques typo = 1 # Apostrophe typographique apos = 1 # Espaces surnuméraires esp = 1 # Tabulations surnuméraires tab = 0 # Espaces insécables nbsp = 1 # Espaces insécables avant unités de mesure unit = 1 # Traits d’union tu = 1 # Majuscules maj = 1 # Nombres num = 1 # Virgules virg = 1 # Normes françaises nf = 1 # Chimie [!] chim = 0 # Erreurs de numérisation (OCR) [!] ocr = 0 # Apostrophe manquante après lettres isolées [!] mapos = 0 # Signaler ligatures typographiques liga = 0 ########## Noms et adjectifs ########## # Confusions et faux-amis conf = 1 # Pluriels (locutions) sgpl = 1 # Accords (genre et nombre) gn = 1 ########## Verbes ########## # Infinitif infi = 1 # Conjugaisons conj = 1 # Participes passés, adjectifs ppas = 1 # Impératif imp = 1 # Interrogatif inte = 1 # Modes verbaux vmode = 1 ########## Style ########## # Populaire bs = 1 # Pléonasmes pleo = 1 # Répétitions dans le paragraphe [!] redon1 = 0 # Répétitions dans la phrase [!] redon2 = 0 # Adverbe de négation [!] neg = 0 ########## Divers ########## # Validité des dates date = 1 # Mots composés [!] mc = 0 ########## Débogage ########## # Identifiant des règles de contrôle [!] idrule = 0 html = 1 |
Added tests/fr/formateur_de_texte.odt version [0fbb935ea9].
cannot compute difference between binary files
Added tests/fr/gc_test.txt version [014df26a25].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 | # TESTS FOR LANG [fr] 272 __tab__ {{ }}Espaces surnuméraires. ->> "" 273 __tab__ {{ }}— Je suis là… 274 __tab__ Espaces surnuméraires.{{ }} ->> "" 275 __tab__ Fin de ligne{{ }} 282 {{ }}Encore des espaces surnuméraires. ->> "" 283 {{ }}— Je suis là… 284 Espaces surnuméraires.{{ }} ->> "" 285 Fin de ligne{{ }} 286 Espaces{{ }}surnuméraires. ->> " " 293 J’espère que ça ne va pas durer trop longtemps avec Mr{{ }}Paul. 294 J’espère que ça ne{{ }}va pas durer. (Ici, espace suivi d’une tabulation) 300 «{{ }}Je suis partie. » 301 « Je suis partie.{{ }}» 308 c’est pas trop tôt {{( }}on a failli attendre). 309 blabla … {{[ }}crochets] ->> [ 310 {{( }}parenthèses) ->> ( 311 c’est (enfin{{ )}} parti. 312 voici des (parenthèses{{ )}}, n’est-ce pas ? ->> ) 319 C’est au fond du couloir{{(}}celui du deuxième étage{{)}}qu’il se trouve. 326 Il a fini{{ .}} Va te faire foutre, connard. 327 Merde{{ .}}Ça m’emmerde, ces trucs. 334 Merde{{ ,}}ça fait chier. 335 Eh oui{{ ,}} c’est encore moi. 343 Bon sang, c’en est trop à présent. Vos prétendues “excuses{{ ” }}ne trompent personne ! 344 Bon sang, c’en est trop à présent. Vos prétendues{{ “ }}excuses” ne trompent personne ! 345 Encore des guillemets{{ ‘’ }}dont on ne sait que faire. 353 « Le grand homme{{«}} 354 « La grande femme{{ «}} ! 355 Eux et leurs{{ ”}}amis” sont finis ! 356 Vos “amis{{“ }}et vous êtes finis ! 369 C’est {{«}}stupide{{”}}. 370 Quel {{“}}emmerdeur{{»}}, ce gars-là. 371 « J’en suis “malade”. » 442 l’{{A.N.P.E.}} n’existe plus 443 ce chien […] ne {{semblez}} pas perdu. 444 ce chat {{(…)}} ne {{semblez}} pas perdu. 445 ce nouveau moteur de recherche (http://www.cherche-moi-ça.fr/home.php&lang=fr) fonctionne pas mal. 446 l’A.M. Turing Award 2015 447 Retrouvez-nous sur le Monde.fr 448 Arthur D. vient chez nous. 449 Arthur D., de toute façon, vient chez nous. 450 N.B. : ceci est en réalité superflu. 451 Arthur D. « viendra ». 452 Ça arrivera à 12:30 453 Prêt à 03:03:12. 454 Les conseillers de George W. Bush dominent toujours l’establishment républicain. 455 IP : 192.168.0.99 456 Si l’on peut comprendre que Mme S. ait voulu être prise au sérieux 457 C’est le b.a.-ba du métier. 458 qui a été le plus honnête [Rires] 459 Marion Maréchal-Le Pen. Afin que Maréchal ne soit pas analysé comme un impératif, “Le Pen” devient “Le_Pen”. 499 nous sommes {{déconsidéré-e-s}}. 500 serons-nous toujours {{perdu.e.s}}. 501 les illustres {{inconnu(e)s}}. 502 la situation des {{salarié/e/s}}. 503 des {{Iranien-ne-s}} sont venues ->> Iraniens et Iraniennes|Iraniennes et Iraniens|Iranien·ne·s 504 rendez-vous avec des {{écrivain(e)s}} ->> écrivains et écrivaines|écrivaines et écrivains|écrivain·e·s 513 je suis {{déconsidéré.e}} par ma hiérarchie. 514 il faut en parler à l’{{auteur(e)}} et à son agent. 524 Je suis là. {{viens}}. ->> Viens 525 Ils sont devenus idiots. {{c}}’est peine perdue. 539 Un chien, un chat{{ etc.}} ->> , etc. 540 Je suis fatigué{{ car}} ils ont joué toute la nuit. ->> , car 541 Je suis fatigué{{ mais}} il a joué toute la nuit. ->> , mais 551 « Ça suffit{{. » }}dit-elle. 552 « J’en ai plus qu’assez{{, » }}dis-je. 553 {{Julien}} donne-moi le sel. 554 dès son premier rendez-vous au centre 555 Depuis combien de temps fumez-vous ? 573 J’en ai marre,{{ça}} suffit. 574 elle est délirante.{{Devine}} ce qu’elle a dit. 575 Voilà,{{il}} manque un espace. ->> " il" 576 Dernier essai.{{Voilà}}. ->> " Voilà" 577 muni de lunettes protectrices et.{{d}}’un casque. 578 espace:{{manquant}} ->> " manquant" 579 espace{{;}}{{manquant}} 580 espace ;{{manquant}} ->> " manquant" 581 espace{{?}}{{manquant}} 582 espace{{!}}{{manquant}} 583 espace.{{Manquant}} ->> " Manquant" 584 qui ont refuse.{{de}} se sauver ->> " de" 590 {{etc…}} 591 {{etc...}} 597 Je crois que {{Mlle.}} Eva est partie. 598 J’ai pensé à {{Mme.}} Bovary toute la journée. 599 C’est situé au {{no.}} 12. 608 3 points de suspension{{...}} 609 5 points de suspension{{....}} 610 5 points de suspension{{.....}} 611 4 points de suspension{{….}} 612 5 points de suspension{{…..}} 613 Double point{{..}} 614 Ligne de points…{{...........................}} 615 Ligne de points{{...........................}} 616 Aujourd’hui, M. Camus va nous lire son texte. 625 ceci, cela{{, …}} ->> … 626 Les chiens, les chats{{.,}} les poules. ->> ,|. 637 {{- }}Ce tiret n’est correct nulle part. ->> "— |– " 638 {{– }}Il manque toujours un espace insécable ! ->> "– " 639 {{— }}Idem ! etc. ->> "— " 640 {{_ }}C’est long ! ->> "— |– " 641 {{—}}Viens là. ->> "— |– " 642 Cette phrase contient{{ - }}c’est certain – des tirets d’incise. ->> " – | — " 643 « {{- }}Viens ! On va en finir avec cette affaire, sale fils de pute. ->> "— |– " 651 Mouais{{, ;}} 652 Vraiment, bof {{;;}} on ne sait guère qu’en penser. 653 Raisons {{:.}} trop, c’est trop. 674 Ça a duré {{3}}µs 675 Ça a duré {{3,5 }}µs 676 il y en a {{3 }}m² 677 il a fait {{10}}% 678 Ça coûte {{13,4}}¥. 679 il mesure {{30,3 }}cm 680 il est monté à {{18 }}% 681 une température de {{22,4 }}°C 682 il en veut {{18}}kg 683 il me le propose pour {{243 }}gCO2/kWh 684 il me le propose pour {{243,4 }}gCO2/kWh 685 en l’an 2000 Urgondorletroll eut une idée 686 1998 s’annonce grandiose. 687 il y en a 3,43 milliards. 688 je veux 200 euros. 701 {{«}}Il manque deux espaces insécables. » ->> "« " 702 « Il manque deux espaces insécables{{.»}} ->> ". »" 703 « Il manque deux espaces insécables{{ »}} ->> " »" 704 Et encore{{!}}? ->> " !" 705 Quoi{{?}} ->> " ?" 706 Voici{{:}} les deux points. ->> " :" 707 Voyelles:{{a}}. ->> " a" 708 Succession : a{{;}} b. ->> " ;" 709 C’est assez {{: }}parlez ! ->> ": " 710 {{» }}C’est ce qu’on croit savoir. ->> "» |« " 717 {{800 x 600}} ->> 800 × 600 718 {{800*600}} ->> 800 × 600 719 {{800 * 600}} ->> 800 × 600 720 nombre au format hexadécimal : 0x4407 726 3{{>=}}2 727 est-ce que a {{<=}} c 733 __liga__ un {{fl}}ottement ->> fl 734 __liga__ une belle {{fi}}gure ->> fi 743 {{C'}}est l’apostrophe typographique qui manque. ->> C’ 744 C’est {{l'}}apostrophe typographique qui manque. ->> l’ 745 {{Aujourd'}}hui, je suis fatigué 746 Je pense {{qu`}}elle se trompe 747 Que {{t'}}arrive-t-il ? 760 {{C’ }}est rageant. ->> C’ 761 {{Lorsqu’ }}il vient, on s’ennuie. 762 {{l’'}}électricien est parti 763 Je pense {{qu ` }}elle ne viendra pas. 782 __mapos__ {{n }}arrive pas à sa cheville 783 le coup {{qu }}avait donné ->> qu’ 784 pendant {{qu }}il avançait d’un pas indolent ->> qu’ 785 {{jusqu }}à plus soif ->> jusqu’ 786 il ne {{m }}avait jamais fait défaut ->> m’ 787 Il {{s }}était dit qu’il ne le ferait pas. ->> s’ 788 Je {{m }}étais imaginé que je pourrais pas retrouver cet objet. ->> m’ 789 Je {{n }}ai pas retrouvé l’ambiance de mes années de lycée. ->> n’ 800 {{"}}Le grand homme.” ->> « |“ 801 “Le grand homme.{{"}} ->> ”| » 811 Le {{'}}grand’ homme. ->> “|‘ 812 Le ‘grand{{'}} homme. ->> ”|’ 813 J’en ai '''marre''' (syntaxe wiki). 825 {{le }}amour ->> l’ 826 {{la }}imagination ->> l’ 827 {{de }}amour ->> d’ 828 {{de }}est ->> d’ 829 je crois que {{si }}ils viennent, ils seront mécontents 830 {{Que }}ils soient heureux 831 J’ai passé une journée de ouf. 840 {{ce}} animal est dangereux 849 __nf__ Norme française : {{Nf-EN ISO 3892-23}} 857 __chim__ les molécules {{CaCO3}} et {{H2O}}… 868 {{12345}} ->> 12 345 869 {{123456}} ->> 123 456 870 {{1234567}} ->> 1 234 567 871 {{12345678}} ->> 12 345 678 872 {{023456789}} ->> 023 456 789|023 45 67 89|02 345 67 89 873 {{0234567890}} ->> 0 234 567 890|02 34 56 78 90|023 456 78 90|0234 567-890 874 {{12345678901}} ->> 12 345 678 901 875 {{112798931830912839}} ->> 112 798 931 830 912 839 876 {{2308393909}} ->> 2 308 393 909|2308 393-909 884 il cumule {{200.000.000}} de pertes sèches 892 Il a perdu {{20 000}} euros à la Bourse en un seul mois. 904 le {{29 02 2011}} 905 le {{40-02-2011}} 906 le {{32.03.2018}} 907 le {{81/01/2012}} 908 12-12-2012 921 __redon1__ Tu es son {{avenir}}. Et lui aussi est ton {{avenir}}. 922 __redon1__ Car parfois il y en a. Mais parfois il n’y en a pas. 940 « Je suis donc perdu ? », dit Paul. 941 “C’est bon !”, croit savoir Marie. 942 “Parce que… ?” finit par demander Paul. 943 « Dans quel pays sommes-nous ? » demanda un manifestant. 1003 Il y a un {{doublon doublon}}. 1015 année {{2O11}} ->> 2011 1016 {{3O}} (chiffre avec un O). ->> 30 1023 le {{VIième}} siècle ->> VIᵉ|VIe 1024 C’est la {{3ème}} fois… ->> 3ᵉ|3e 1025 Non, la {{2è}} fois. ->> 2ᵉ|2e 1026 Le {{XXIème}} siècle. ->> XXIᵉ|XXIe 1027 le {{XXè}} siècle. ->> XXᵉ|XXe 1038 {{29 février 2011}} 1046 {{mercredi}}, le 10-06-2014 ->> mardi 1054 {{mercredi}}, le 10 juin 2014 ->> mardi 1055 {{lundi}}, 18 août 1912 ->> dimanche 1056 lundi, 18 août 1912 avant Jésus-Christ (date imaginaire) 1062 le {{31 avril}} 1068 le {{30 février}} 1137 New York {{étaient}} {{devenue}} la plaque tournante de tous les trafics. 1174 va{{ t’}}il y parvenir ? ->> -t- 1175 A{{ t’}}elle soif ? ->> -t- 1176 A{{ t-}}elle faim ? ->> -t- 1177 a{{ t'}}elle ->> -t- 1178 a{{-t'}}il ->> -t- 1179 a{{-t }}il. ->> -t- 1180 a{{ t’}}il. ->> -t- 1181 a{{ t-}}on. ->> -t- 1182 donne{{ t-}}ils ->> - 1183 donne{{-t }}il ->> -t- 1184 vient{{-t-}}il ->> - 1185 viendras{{-t-}}tu ->> - 1186 Viendront{{ t-}}ils ->> - 1187 viennent{{ t-}}ils ->> - 1188 mangent{{-t-}}elles ->> - 1189 Ont{{ t’}}ils ->> - 1190 Ont{{-t’}}ils ->> - 1191 l’ont{{ t’}}ils vu ? ->> - 1192 exploite{{−t−}}il les ressources numériques ->> -t- 1193 vainc{{-il}} ses ennemis aisément ->> -t-il 1194 Assis, gronde{{-t -}}elle ->> -t- 1200 {{Va-t-en}}, c’en est assez. 1201 Un {{va-t’en guerre}}, on ne peut pas lui faire confiance. 1202 Les {{va-t-en guerre}} sont de sortie. 1210 Nous préparons une {{contre–attaque}}. 1219 Ces {{trois là}} sont incollables. 1220 Je connais bien cette {{sensation là}}. 1221 Laisse ce chiot là où il est ! 1229 Son {{ex ami}} est un vrai cauchemar. 1230 Ton ex donne du fil à retordre. 1236 J’ai été engagé pour un {{mi temps}}. 1245 leurs {{quasi indifférences}} 1251 en {{semi liberté}} 1259 des {{franco américains}} 1260 {{franco américaine}} ->> franco-américaine 1261 {{ferro électrique}} ->> ferro-électrique 1262 {{rétro ingénierie}}. ->> rétro-ingénierie 1271 il n’avait contracté qu’un {{pseudo mariage}}. 1279 il a pris une balle dans l’{{arrière train}}. 1280 Ce {{sans gêne}} mérite une bonne leçon 1289 ce sont des {{lève tard}}. 1342 Ils font des tests {{à tout va}} 1343 marre de faire des {{allers retours}} 1344 à ce {{moment là}} ->> moment-là 1345 une {{plus value}} ->> plus-value 1346 Il est {{en-dessous}} de tout. ->> en dessous 1347 Ils sont {{en-deçà}} de tout ->> en deçà 1348 {{Là bas}}. ->> Là-bas 1349 {{Au dessus}} ->> Au-dessus 1350 {{ci dessus}} ->> ci-dessus 1351 {{par dessus}} ->> par-dessus 1352 {{au delà}} ->> au-delà 1353 {{ci devant}}. ->> ci-devant 1354 Il faisait froid cet {{hiver la}}. ->> hiver-là 1355 {{Ceux la}} vont à la pêche. ->> Ceux-là 1356 {{est ce}} que c’est grave ? ->> est-ce 1357 qu’{{est ce}} que c’est ? ->> est-ce 1358 {{en contre bas}} 1359 mes deux {{grands pères}} sont décédés 1360 elles vont viennent {{de ci, de là}}. 1361 mais {{celles là}} sont différentes. 1362 seulement par {{ouï dire}}. 1363 ne vois-tu pas que c’est un {{chef d’œuvre}} ? 1364 Mieux qu’{{avant hier}}. 1365 nous irons là-bas {{après demain}}. 1366 L’{{état major}} n’a pas encore tranché la question. 1367 {{ici bas}}, n’attends rien de bon, à moins que… 1368 un bel enfoiré, {{c’est à dire}} un hypocrite 1369 {{jusque là}}, tout va bien 1370 regarde l’{{arc en ciel}} 1371 ils sont allés au {{centre ville}}. 1372 Il ne connaît pas {{grand chose}} à tout ça. 1373 en {{contre point}}, 1374 {{Quelques unes}} sont très habiles. 1375 Tout ce que nous faisons {{par ci, par là}}. 1376 La papesse du {{prêt à porter}} viendra demain. 1377 sur cette {{plate forme}}, rien ne fonctionne 1378 Un énorme {{plus value}}. 1379 Habiter au {{rez de chaussée}}, quelle horreur. 1380 {{Apporte moi}} ce dictionnaire. ->> Apporte-moi 1381 C’est de la {{science fiction}}. 1382 Tout ce {{soi disant}} esprit religieux 1383 {{sous jacent}} ->> sous-jacent 1384 Il a été nommé {{vice président}} 1385 Que vas-tu faire {{vis à vis}} d’eux ->> vis-à-vis 1386 un super {{week end}} ->> week-end 1387 ils sont partis {{outre mer}} 1388 elles sont allées au {{sud ouest}} 1389 {{nord est}} 1390 elles reviendront, {{n’est ce pas}} ? 1391 des {{stock options}} 1401 les {{beaux arts}} 1402 je déteste le {{basket ball}} 1403 {{Lui même}} ->> Lui-même 1404 {{eux mêmes}}. ->> eux-mêmes 1405 un {{va et vient}} incessant me casse la tête 1440 Émigrer au {{Royaume Uni}} 1441 Étudier en {{Grande Bretagne}} 1442 Vivre aux {{Pays Bas}} 1443 Il passe par {{Aix en Provence}} 1444 Qui se souvient de la {{Bosnie Herzégovine}} ? 1445 en {{Charente Maritime}} 1446 À {{Clermont Ferrand}} 1447 habiter la {{Colombie Britannique}} 1448 Il fait son stage étudiant aux {{États Unis}} 1449 Des fromages délicieux de {{Franche Comté}} 1450 La {{Haute Garonne}} 1451 L’{{Île de France}} est surpeuplée. 1452 Un nouveau président à la {{Maison Blanche}} 1453 La guerre au {{Moyen Orient}} 1454 Il ne connaît au {{Nouveau Brunswick}} 1455 Elle a visité la {{Nouvelle Orléans}} 1456 Vivre dans le {{Pas de Calais}} 1457 Des vacances en {{Rhône Alpes}} 1458 Elle déménage en {{Saône et Loire}} 1459 {{Jésus Christ}}, dernier héros de l’Antiquité 1460 Elle a quitté {{Jean Paul}}. 1461 {{Marie Hélène}} s’est perdue dans le dédale 1462 Elle va prier à {{Ste }}Catherine. 1482 Il en veut {{vingts}} ! ->> vingt 1483 Y a-t-il {{quarante deux}} pages ? ->> quarante-deux 1484 J’en veux {{quatre-vingt}} ! ->> quatre-vingts 1485 Non, {{quatre-vingts deux}} ! ->> quatre-vingt-deux 1486 {{Quatre vingts deux}}. ->> Quatre-vingt-deux 1487 cent {{mot}} ->> mots 1488 cinquante {{mot}} ->> mots 1489 mille cinquante {{mot}} ->> mots 1490 deux {{cents}} trois mots ->> cent 1491 il y a {{cents}} mots ->> cent 1492 {{cents}} mots ->> cent 1493 ils mangent {{cents}} têtes ->> cent 1494 deux {{tête}} ->> têtes 1495 {{soixante quatorze}}, c’est trop 1496 Mais {{vingt trois}}, c’est assez 1497 La poïesis, en grec, est ce qui permet de faire passer n’importe quoi du non-être à l’être 1511 J’en ai déjà fait les {{deux-tiers}}. 1512 {{en-haut}} de la montagne. 1513 On va finir par s’y faire, {{peu-à-peu}}. 1514 Venez vite, {{s’il-vous-plait}}. 1515 Elles sont {{tout-à-fait}} ravies. 1516 {{Trois-quarts}} des participantes y sont parvenues. 1517 {{Parce-qu}}’ils y croient plus que tout. 1518 Oui, ça{{-aussi}}. 1519 Peu {{d’entre-nous}} savent ce dont il s’agit. 1526 {{Y’}}a trop de malheureux sur Terre. 1527 {{Y’}}en a marre, de ces conneries. 1528 {{y-}}a-t-il des beignets ? ->> "y " 1535 Elle y arriva {{lors qu}}’elle trouva l’astuce permettant l’ouverture de la porte. 1536 Dès lors qu’on sait comment s’y prendre, aucune raison de faillir. 1545 {{Maria}} donnez-vous du temps ? 1546 {{Marion}} passe-moi le sel. 1547 {{Paul}} prends-lui la main. 1548 Alexandre tient-il ses généraux ? 1549 Alexandra vient-elle ? 1557 viens et donne{{-le}} Paul. 1558 donne{{-le-moi}} Camille. 1559 donne-moi Alice. 1560 Tape-toi Patrick. 1568 Tu vas les {{donner}} Rachel. 1569 Il va la {{tuer}} Paul. 1570 Cependant les promesses n’engagent que ceux qui les croient, comme aimait à le dire Jacques Chirac. 1578 __mapos__ {{L }}opinion des gens, elle s’en moquait. 1592 {{A}} vaincre sans péril, on triomphe sans gloire. 1593 « {{A}} partir de maintenant, ce ne sera plus comme avant. 1594 — {{A}} n’en plus pouvoir 1595 — {{A}} t’emmener loin de tout ceci. 1596 A priori, nul ne peut y parvenir sans une aide extérieure. 1647 il s’agit d’{{un}} {{anagramme}} 1648 nul ne sait qui arriva à ce pauvre Paul surpris par la pluie. 1649 elle finit par être très fière de son fils. 1664 __ocr__ des chiffrements{{ 7}} Paul n’en sait rien. 1665 __ocr__ veux-tu en parler{{ 7}} 1673 __ocr__ Pierre entre pour {{se,}} rapprocher de L 1674 __ocr__ je voudrais faire une question ou deux sur une maison de ce village, la… comment l’appelle-t-on ? 1683 __ocr__ {{II}} pleut tout le temps. 1684 __ocr__ En l’an {{2OO1}}, tout commença. 1690 __ocr__ À son {{age}}, on ne sait plus ce qu’on fait. 1696 __ocr__ cet {{antre}} gars lui semblait bien louche. 1702 __ocr__ Elle s’en alla {{arec}} eux sans un regard en arrière. 1707 __ocr__ Ils {{avalent}} très faim. 1713 __ocr__ j’{{axais}} souvent perdu le contrôle de moi-même, mais jamais à ce point 1719 __ocr__ On se tut tous, {{cardans}} l’armée on apprend à la boucler. 1725 __ocr__ cette femme {{obère}} à notre cœur. 1731 __ocr__ je suis déjà venu et {{celai}} qui viendra encore. 1737 __ocr__ {{cos}} problèmes sont insolubles. 1743 __ocr__ {{celait}} perdu d’avance. 1749 __ocr__ mais {{celte}} femme semblait savoir ce qu’elle faisait. 1755 __ocr__ on poirautait, {{cotte}} mariée n’arrivait pas à se décider. 1761 __ocr__ {{Gomme}} il était sage à cette époque-là ! 1767 __ocr__ {{Gomment}} s’en sortir avec tous ces retards qui s’accumulent ? 1772 __ocr__ elle était {{coutre}} cette idée et le serait toujours. 1781 __ocr__ Mais {{bans}} cette ferme, tout était bien organisé. 1782 __ocr__ sache que, {{clans}} cette ferme, on ne fait que du bio. 1790 __ocr__ ces {{darnes}} arrivèrent avec dix minutes d’avance. 1799 __ocr__ {{dés}} fois, ça ne passe pas 1800 __ocr__ {{dé}} gros camions circulaient toute la journée 1809 __ocr__ {{dos}} camions cabossés à n’en plus finir 1815 __ocr__ la peinture {{delà}} maison s’écaillait 1821 __ocr__ Sans aucun {{cloute}}. 1829 __ocr__ prendre {{dû}} bon temps 1838 __ocr__ {{Elfes}} s’ennuyaient à mourir. 1844 __ocr__ Le cheval {{ost}} attaché. 1850 __ocr__ elle {{cl}} lui, c’était pour la vie. 1851 __ocr__ {{El}} il faisait froid là-haut 1860 __ocr__ Quels {{étals}} sont venus ? 1866 __ocr__ Ce qu’ils {{étalent}} vraiment, nul ne le savait. 1872 __ocr__ Cette {{tille}} n’en avait jamais assez. 1878 __ocr__ ce petit {{rut}} traité comme un chien 1885 __ocr__ {{n }}contient trop de soufre. 1894 __ocr__ {{Us}} arrive demain. 1903 __ocr__ {{i1s}} en savent beaucoup trop pour leur propre bien. 1909 __ocr__ dans {{fa}} demeure 1915 __ocr__ elle pense {{largo}} 1926 __ocr__ {{Y’}}arrive demain. 1927 __ocr__ {{I’}}arrive demain. 1938 __ocr__ Oh{{ I}} c’est pas formidable ? 1939 __ocr__ Vraiment{{ 1}} Paul n’en savait rien. 1940 __ocr__ Ça prendra 1 h. 1941 __ocr__ Valeur : 1 KHz. 1954 __ocr__ beaucoup de {{Vélos}} à Versailles. 1955 __ocr__ avec {{Vagile}} méthode de notre amie Virginie, tout est possible. 1956 __ocr__ Viens demain. 1957 __ocr__ Ce jour où Valérie eut sa licence de droit. 1958 __ocr__ Il scrute Pierre, {{Pair}} maussade. 1959 __ocr__ Une grosse vague arrivait et {{Peau}} remplit. 1960 __ocr__ selon toute logique, Paris sera épargné. 1968 __ocr__ perdu, cet homme {{Tétait}} 1976 __ocr__ {{lès}} camions de passage 1986 __ocr__ avec {{1e}} chien du policier 1987 __ocr__ il le jura sur {{1a}} tête de sa mère 1988 __ocr__ {{1c}} chat du voinsin est idiot 1994 __ocr__ {{lai}} gros sont mal vus. 2000 __ocr__ {{lu}} as si bien réussi 2006 __ocr__ {{M, }}Patrick nous a oubliés. 2016 __ocr__ {{Hais}} il en sait trop. 2017 __ocr__ c’était bien, {{mats}} quelle journée 2018 __ocr__ c’est bien, {{niais}} trop subtil. 2019 __ocr__ c’est parfait, {{maïs}} trop subtil. 2029 __ocr__ J’en ai assez {{môme}} si ça ne se voit pas. 2030 __ocr__ Ces {{mèmes}} hommes qui nous ont lâchés au pire moment 2031 __ocr__ C’est l’incessant retour du {{mémo}}. 2039 __ocr__ c’est un {{mol}} très dur. 2045 __ocr__ c’est {{won}} ami 2052 __ocr__ {{no}} fais rien que tu pourrais regretter 2053 __ocr__ elle avance, mais {{rie}} prend jamais de risque inconsidéré. 2059 __ocr__ {{noue}} attaquer à eux signerait notre perte. 2065 __ocr__ Une seule action {{paf}} jour 2079 __ocr__ {{parle}} glaive et le mensonge, l’Église s’imposa. 2080 __ocr__ {{parla}} force, on peut réussir 2081 __ocr__ tu fus trompée {{parles}} mensonges permanents de son beau-père. 2087 __ocr__ {{pondant}} qu’elle travaille, il se prélasse. 2096 __ocr__ il est {{pou}} probable qu’il y parvienne. 2102 __ocr__ ils sont {{pins}} instruits qu’il n’y paraît. 2108 __ocr__ elles sont venues, {{pois}} elles sont parties. 2114 __ocr__ {{pouf}} elle, il était prêt à tout. 2120 __ocr__ ils sont arrivés {{prés}} de la tombe. 2129 __ocr__ elles ne savent pas {{quo}} faire 2130 __ocr__ {{Quo}} penser de tout ceci ? 2131 __ocr__ pour elle, c’est une condition sine qua non. 2139 __ocr__ Qu’{{importé}} le flacon, pourvu qu’on ait l’ivresse. 2145 __ocr__ avec {{gui}} faire alliance ? 2154 __ocr__ {{sil}} avait su, il n’aurait rien tenté de trop audacieux. 2160 __ocr__ il ne savait rien {{sar}} eux. 2166 __ocr__ elles seront là tôt ou {{lard}}. 2172 __ocr__ mais {{taudis}} qu’elle œuvrait à leur salut, les nuages s’amoncelaient. 2180 __ocr__ ça {{Test}} à leurs yeux. 2188 __ocr__ cette forte {{tète}} n’écoute jamais personne. 2194 __ocr__ c’était {{tin}} marchand vaniteux. 2200 __ocr__ pour {{tan}} propre bien. 2206 __ocr__ à {{tonte}} fin utile 2213 __ocr__ dans tous les cas, {{tues}} foutue. 2214 __ocr__ ses actions tues. 2220 __ocr__ {{vin}} mathématicien hors du commun. 2227 __ocr__ il avait {{ure}} femme élégante et silencieuse 2228 __ocr__ c’est pour {{vine}} amie 2234 __ocr__ avec {{voue}}, je n’ai pas confiance. 2244 __ocr__ votre ami la regarde, {{Vous}} ne l’avez pas achetée 2245 __ocr__ pour accommoder son regard, {{La}} lourde forme demeure 2246 __ocr__ parler de Nicole, {{Le}} sommeil ne vient pas. 2247 __ocr__ a fait de toi, Charles, {{Tu}} étais beau quand 2248 __ocr__ s’habituer à se faire servir, {{Au}} début ça 2249 __ocr__ Tu as tué ce petit garçon, Henri, {{Et}} tu le sais. 2250 __ocr__ d’un fil de plastique transparent, {{Il}} l’agite 2251 __ocr__ sur une glace noire {{Les}} lumières du port 2252 __ocr__ le roulis du bateau {{Le}} faisant heurter 2253 __ocr__ si vous {{La}} désirez 2254 __ocr__ sa main se referme sur {{Je}} livre 2261 __ocr__ regarde dans l’obscurité de {{L’}}entrepôt 2271 __ocr__ des verres luisent sur {{i}} le bureau blanc. 2272 __ocr__ la voix, {{e}} est celle de… 2273 __ocr__ ressemble {{h}} une fenêtre de serre. 2274 __ocr__ Ça a duré 3 h. 2275 __ocr__ c’est alors que je suis fort. 2283 __ocr__ trouve {{l£}} temps 2284 __ocr__ elle s’{{avance*}} sur le seuil 2285 __ocr__ par beaucoup d’argent ? {{{Il}} débouche le Jack Daniels 2297 Ce que tu ne fais {{pas jamais}}. 2312 Au MES, rien de nouveau 2313 {{Ces}} {{cette}} canaille qui nous a donné tant de fil à retordre. 2314 Mon {{il}} est une merveille. 2315 je ne sais {{des}} {{ses}} choses. 2330 {{En}} Avignon 2331 {{En}} Agen 2340 J’{{ai été chez}} le coiffeur. 2348 La mise en {{abîme}}. 2357 être {{à date}} 2358 mettre {{a date}} 2359 {{jusqu’à date}} 2368 ils arrivent {{incessamment sous peu}}. 2376 c’est plus {{pire}} que tout. 2377 il est moins {{pire}} que l’autre. 2378 elles sont aussi {{pires}} que les autres. 2379 ils vont {{de mal en pire}} 2380 {{Au pire aller}}, on s’en passera. 2388 Nous y sommes allés {{pour ne pas qu}}’elle se sente seule. 2395 Je l’aime {{très beaucoup}}. 2404 {{vidéo-protection}} 2415 {{Malgré que}} je sois fou. 2493 il faut {{abolir totalement}} ces pratiques ->> abolir 2494 il faut {{achever complètement}} ce projet ->> achever 2495 {{au jour d’aujourd’hui}} ->> aujourd’hui 2496 {{actuellement en cours}} ->> en cours 2497 ils sont {{actuellement en train}} de manger ->> en train 2498 avoir un grand {{avenir devant soi}} ->> avenir 2499 {{acculé au pied du mur}} ->> acculé 2500 {{Avancer en avant}}, pas le choix ->> Avancer 2501 {{dessiner un dessin}} ->> dessiner 2502 {{joindre ensemble}} ->> joindre|mettre ensemble 2503 {{collaborer ensemble}} ->> collaborer 2504 {{comparer entre eux}} ->> comparer 2505 {{monter en haut}} ->> monter 2506 {{descendre en bas}} ->> descendre 2507 {{enchevêtrer les uns dans les autres}} ->> enchevêtrer 2508 rien ne vaut l’{{entraide mutuelle}} ->> entraide 2509 s’{{entraider mutuellement}} ->> entraider 2510 s’{{entraident les uns les autres}} ->> entraident 2511 {{comme par exemple}} ->> comme|par exemple 2512 {{médias d’informations}} ->> médias 2513 {{lever debout}} ->> lever 2514 {{cirrhose du foie}} ->> cirrhose 2515 {{s’avérer vrai}} ->> s’avérer exact 2516 {{avérées vraies}} ->> avérées 2517 {{bourrasques de vent}} ->> bourrasques 2518 {{contraint malgré lui}} ->> contraint 2519 {{contraindre malgré eux}} ->> contraindre 2520 {{applaudir des deux mains}} ->> applaudir 2521 {{erreurs involontaires}} ->> erreurs 2522 {{hasards imprévus}} ->> hasards 2523 {{méandres sinueux}} ->> méandres 2524 {{hémorragies de sang}} ->> hémorragies 2525 des {{orages électriques}} ->> orages 2526 {{perspectives d’avenir}} ->> perspectives 2527 {{marche à pied}} ->> marche 2528 {{paires de jumelles}} ->> jumelles 2529 {{puis après}} ->> puis|après|ensuite|alors 2530 {{mais pourtant}} ->> mais|cependant|pourtant|toutefois 2531 {{donc par conséquent}} ->> donc|par conséquent|c’est pourquoi 2532 {{car en effet}} ->> car|en effet 2533 {{opportunités à saisir}} ->> opportunités 2534 {{apanages exclusifs}} ->> apanages 2535 {{monopole exclusif}} ->> monopole 2536 {{étapes intermédiaires}} ->> étapes 2537 {{ajouter en plus}} ->> ajouter 2538 la {{panacée universelle}} ->> panacée|remède universel 2539 ce sont leurs {{premiers balbutiements}} ->> balbutiements 2540 la {{première priorité}}, c’est… ->> priorité 2541 {{réserver d’avance}} ->> réserver 2542 Un {{futur projet}} ->> projet 2543 ce sont des {{projets futurs}} ->> projets 2544 {{prototypes expérimentaux}} ->> prototypes 2545 Nous avons {{rénové à neuf}} l’ensemble ->> rénové 2546 Nous voilà {{réunis ensemble}} ->> réunis 2547 {{Recule en arrière}} ->> Recule 2548 {{risques de menaces}} ->> risques 2549 {{secousses sismiques}} ->> secousse tellurique|secousses telluriques|tremblement de terre 2550 {{solidaires les uns des autres}} ->> solidaires 2551 Il {{suffisait simplement}} d’y penser. ->> suffisait 2552 Il la {{talonnait de près}} ->> talonnait 2553 ce {{taux d’alcoolémie}} est très élevé ->> taux d’alcool|alcoolémie 2554 {{tunnels souterrains}} ->> tunnels 2555 {{vieilles hardes}} ->> hardes 2556 {{voire même}} ->> voire|même 2565 {{prédire à l’avance}} ->> prédire 2566 {{pronostiquer d’avance}} ->> pronostiquer 2575 {{Ajourner à une date ultérieure}} ->> Ajourner 2576 {{différer à une date ultérieure}} ->> différer 2577 {{reporter à plus tard}} ->> reporter 2584 Comment lutter contre la cupidité des {{ayant droits}} 2595 Il {{ne n’}}arrive jamais à l’heure. 2596 Ça {{me te }}prend la tête, toutes ces complications vaines. 2597 il {{se m’}}est difficile d’y parvenir. 2598 Ça t’arrive {{de d’}}arriver à l’heure ? 2599 Les écrits de d’Alembert. 2610 {{en t’}}ait donné tant. ->> "t’en " 2611 {{en n’}}{{envoient}} que peu. 2618 malgré l’{{arrête}} qui interdisait le port 2626 Cette {{pèle}} est trop fragile. 2636 {{sa}} devient difficile. 2637 il me tendit {{sa}} {{pèche}}. 2643 Je prends {{sa}}… 2651 cet {{plaît}} est infectée. 2659 {{ce}} {{rappelle}} n’en finit pas. 2667 mon {{rackette}} n’a pas porté les fruits espérés. 2668 Belle qui tient mon vit captif entre tes doigts. 2676 ton {{recèle}} a été dévoilé 2684 la crainte des {{attentas}} fait feu de tout bois. 2692 elle se rendit auxdits {{jardinais}} 2700 auxdites {{scelles}}, il ne prêta pas attention. 2707 les petits esprits de la {{pensait}} religieuse 2710 pour les insulter au sortir du seul troquet dispensateur d’oubli liquide du coin 2711 ce peut être un matériau à part entière pour alimenter discussions et délibérations. 2719 {{de le}} vin ->> du 2720 il n’est pas interdit de le {{pensait}} 2727 de l’{{entra}} 2735 un {{maintient}} difficile. 2742 par {{bloque}} de données 2750 d’une {{habille}} femme 2751 plus d’un ont été traumatisés 2752 plus d’une sont parties aussi vite qu’elles étaient venues 2760 il {{et}} parti. 2768 ils {{son}} du même bois. 2769 Ils {{étai}} partie au {{restaurent}} 2777 Je {{travail}}. 2785 tu {{croix}} que tu sais quelque chose, mais tu ne sais rien. 2788 elles seules peuvent s’en sortir. 2789 elle seule peut y arriver 2790 elle seules les femmes la font craquer 2798 ne {{convaincant}} que les convaincus. 2799 une tension lui {{provocant}} un ulcère 2800 comme des nuages ou des coteaux se reflétant dans l’eau (ligature fl) 2816 Il est très {{cite}}. 2817 très {{suivit}} par ce détective 2818 il était très {{habille}} 2825 J’ai trop {{mangeais}}. 2826 Ce que nous réussissons presque sera considéré comme un échec. 2836 Tout ce qu’on fera chez {{sera}} enregistré. 2844 Toutes les blagues qu’on fera sur {{entreront}} dans l’histoire ! 2852 Ces gens sont si {{prit}} par leur travail qu’ils en oublient de vivre. 2853 Ça ira mieux demain, surtout si émerge une demande forte de la part des consommateurs. 2862 de plus en plus {{gagnait}} par la folie. 2863 avec quel zèle ils remplissent leurs devoirs de citoyens (de plus en plus deviennent enseignant·e·s, infirmier·e·s ou s’engagent dans l’armée, etc.). 2864 il faut de plus en plus aider ces gens. 2967 Cette femme {{à}} été confondue avec une autre. 2968 L’homme {{à}} ouvert la boîte. 2969 Il ne nous reste plus qu’{{à}} {{vérifié}} si votre maquette. 2970 Je veux {{à}} {{mangé}}. 2971 Ne pas hésiter {{à}} {{demandé}} des conseils. 2972 cette femme, dans son délire, {{à}} {{jetez}} son argent à la poubelle. 2973 Ce fâcheux, comme à son habitude, les {{à}} ennuyés à mourir. 2974 Lui l’{{à}} pris par surprise. 2975 Les parties {{a}} nouveau divisées ne se réuniront pas avant longtemps. 2976 elles sont tout {{a}} fait compétentes 2977 c’est grâce {{a}} nous que vous y êtes parvenus 2978 elles se défendront jusqu’{{a}} la mort. 2979 ce qu’elles feront alors {{a coup sûr}}, difficile de le devenir. 2980 elles progressent pas {{a}} pas 2981 elle n’y {{à}} pas droit. 2982 elle risque de tout perdre, {{a}} moins qu’un miracle survienne. 2983 {{tout a coup}}, il n’y eut plus aucune lumière 2984 il y {{à}} des pertes. 2985 ce qui {{à}} pris tant de valeur, c’est… 2986 Ce chien, croyons-nous savoir, {{à le}} maître le plus violent qui soit. 2987 Il ne les leur {{à}} pas imposés. 2988 l’homme, jamais, ne la lui {{à}} imposés. 2989 l’homme, jamais, ne nous l’{{à}} prise. 2990 il me les {{à}} donnés 2991 il me l’{{à}} donné 2992 qui en {{à}} ? 2993 Il l’a fait {{a}} cause de toi. 2994 Il ne m’{{à}} jamais vu. 2995 Que fait-il {{a}} cette conférence ? 2996 Il m’en {{à}} donné. 2997 Il y en {{à}}. 2998 ce que cet homme, dans son garage, {{à}} alors une importance. 2999 Il les y {{à}}. 3000 On {{à}} faim. 3001 Elle en {{à}} pris. 3002 Elle {{à}} froid. 3003 Elle l’en {{à}} averti. 3004 lui, avec ceux-là, nous en {{à}} donnés trois. 3005 un élève qui leur {{à}} fait bien des misères. 3006 cet homme {{à}} faim 3007 Je sais qu’ils sont {{a}} toi. 3008 Celui qui y croit {{à les}} moyens d’y parvenir. 3009 Face {{a}} ces gens, il ne pensait pas pouvoir réussir 3010 On s’y fait, d’une manière ou d’une autre, {{a}} notre corps défendant. 3011 Puisqu’on nous méprise, autant y aller {{a}} reculons. 3012 Ne pas hésiter {{a}} {{demander}} des conseils. 3013 Sébastien {{a}} {{demander}} des conseils. 3014 Personne {{a}} part Tom ne connaît son adresse 3015 Attention {{a}} ne pas la réveiller. 3016 C’est {{à peu prêt}} la même chose. 3017 ils viennent nous attaquer {{a}} tout bout de champ 3018 par rapport {{a}} eux, je me sens parfois dépassé 3019 par rapport {{a}} ces hommes-là, nous manquons d’expérience 3020 Ce que cet homme à {{devient}} aujourd’hui notre problème 3021 Je tenais à le lui faire savoir. 3022 ce que cette personne, dans son esprit trouble et vindicatif, {{à}} aux hommes à dire, nul ne le sait. 3023 il va falloir songer à les leur donner 3024 le coût est estimé à au moins 1000 milliards de dollars 3025 elle à qui nous avons donné notre cœur et pour laquelle nous avons tout tenté pour la faire aimer de nos concitoyens. 3026 jusqu’à parfois se mettre en danger 3034 la réalité m’a {{tuer}} 3043 Ce sont des clichés {{au}} {{dépend}} d’un grand chef. Tout ça pour faire du buzz et exister médiatiquement. 3054 Je me suis trompé. {{Autant}} pour moi. 3055 on va y arriver, {{au temps que faire se peut}}… 3068 {{ça}} patrie, il la détestait 3069 et {{sa}} par deux fois 3070 {{sa}} prend du temps. ->> ça 3071 {{çà}} va ->> ça 3072 {{sa}} va ->> ça 3073 Il trouva de la nourriture {{ça et là}}. ->> çà et là 3074 Elle parle comme {{ça}} mère. ->> sa 3075 C’est comme {{sa}}. 3076 {{sa}} l’ennuierait, ce fils de pute, de dire bonjour ? 3077 il faut s’y prendre comme {{sa}} 3078 on fait {{sa}} lorsqu’on a tout perdu 3079 avec sa presque belle-mère 3080 sa toute nouvelle application de synchronisation de fichiers 3122 il ne {{ce}} compte pas parmi eux 3123 il ne {{ç’}}avançait jamais sans avoir pesé toutes les conséquences 3124 {{Se}} seraient des histoires. 3125 {{se}} seraient des jours heureux. 3126 {{Se}} sont de grands enfants. 3127 {{Se}} sera une fille. 3128 {{ceux}} seraient des jours heureux 3129 Pour {{se}} faire, ils sont prêts à tout. 3130 {{se}} {{ne}} peut être ainsi. 3131 C’est tout {{se}} qu’il y a 3132 Tout {{se}} que je fais 3133 tout {{se}} qu’il entend 3134 {{Ce}} {{promener}} est relaxant. 3135 Il {{ce}} {{sent}} seul 3136 {{se}} {{train}} est en retard 3137 {{ceux}} train arrive trop vite. 3138 {{ceux}} ne doit pas nous faire oublier ce désastre 3139 qui {{ce}} donne en spectacle. 3140 les expatriés éloignés ou ceux habitant ici 3141 les photographies de ceux n’ayant pas dépassé sept sur vingt. 3142 Pensez-vous que ceux ne sachant même pas ce qu’est une VHS peuvent y trouver leur compte ? 3143 la réduction de ma liberté intellectuelle et celle de ceux autour de moi 3159 {{ses}} au-dessus de ses forces. 3160 {{ces}} comme la peste 3161 car {{ses}} d’avance perdu 3162 {{ces}} qu’il y a tant de pertes 3163 {{c’est}} {{délires}} nous ennuient 3164 En 2015, c’est Paris et son agglomération qui… 3174 il va faire un cake aux {{dates}}. 3175 elle a fait de la confiture de {{dates}} 3176 Elles étaient à cette date cultivées à l’air libre. 3177 De fraîche date… 3188 {{dan}} la voiture 3189 ils sont partis {{d’en}} une direction différente 3190 {{dents}} les montagnes au loin. 3210 ils ont peu {{davantage}} à vivre ici. 3211 Ils s’exerceront {{d’avantages}}. 3212 {{d’avantage}} de monde de jour en jour 3213 Viens-tu {{d’avantage}} à la maison 3214 {{d’avantage}} de monde viendra 3215 ils sont {{d’avantages}} perdus que les autres. 3223 Très {{différends}} de nous, ces gens-là ! 3236 {{et bien}} il y aura des pertes 3237 {{et ben}} on n’en sait rien. 3238 nous y songions, et bien au-delà des considérations habituelles. 3239 une image bien plus colorée, et bien plus intense, de la vie. 3240 Toutes ces questions, et bien d’autres, sont vues aujourd’hui dans le paradigme quantitatif de la monnaie, des taux de change flottants et de la monnaie administrée. 3241 et bien manger, c’est important. 3242 il a été vaincu, et bien vaincu. 3251 un homme {{faut}} 3252 c’est {{faut}} 3253 il m’en faut plus. 3254 il faut réussir. 3255 bien sûr, faut y arriver. 3256 il ne faut pas se leurrer. 3257 y faut pas qu’elle l’entende. 3258 faut l’emmener chez le docteur. 3259 Faut Linux, sinon ça marchera jamais. 3265 il va dans l’{{haut delà}} 3273 Mon frère, {{ce}} {{héro}} ! 3284 {{hors}}, nous y coryons malgré tout ce qu’on peut en dire. 3285 {{Hors}} il y a tant à faire depuis que nous sommes arrivés en ces lieux. 3286 Hors nous, personne ne sait ce qui s’est passé là-bas. 3287 Le peuple se sent hors jeu. 3297 nous serions encore {{la}} l’année prochaine 3298 en reprenant le chandail de John {{la}} où elle l’avait abandonné. 3299 Qui serait la ou le plus à même à occuper ce poste selon vous ? 3306 Ce {{fait}}-{{la}} ne peut être ignoré. 3315 je vais {{leurs}} reprendre 3316 je {{leurs}} apprends la programmation 3317 après qu’un des leurs ait été gravement blessé par un tir de grenade 3326 Ils n’étaient guère prêts à ça, {{loins sans faux}}. 3327 Et les intellectuels ? En France comme ailleurs, tous n’ont pas, loin s’en faut, une pleine lucidité sur cette précarité galopante. 3333 120 {{Mins}} de bonheur 3341 ces gens {{on}} {{souvent}} tort. 3342 Je voulais qu’on soit ensemble. 3355 elles sont si {{pales}}. 3356 cette {{pale}} imitation d’un chef-d’œuvre 3395 {{peu}} rarement y arriver. 3396 Il est un {{peut}} comme une forêt 3397 Il {{peut-être}} mortel. 3398 Cela {{peut-être}} mortel. 3399 cela ne se {{peu}}. 3400 des bâtisses {{peu a peu}} abandonnées. 3401 aucun pays – ou très peu alors – n’a réussi à faire ça de façon durable 3402 Mais {{peut}} importe le rang. 3403 homme de {{peut}} de foi, écoute le vent. 3404 Il en vient un {{peut}} tous les jours. 3405 {{peut}} sympathique, cet individu. 3406 il {{peu}} y parvenir 3407 tu ne {{peu}} en savoir plus 3408 {{peut}} {{embarrassés}} par leurs déboires, ils poursuivirent comme si de rien n’était. 3414 la {{plus part}} 3423 {{Pardessus}} les montagnes. 3424 Il passa {{pardessus}} les collines. 3425 Mets ton pardessus ce matin. 3433 Ils ont découvert le {{poteau rose}}. 3446 ils se sont approchés très {{prêts}}. 3447 Je suis si {{prêt}} d’y arriver. 3448 Il est {{près}} à les aider 3449 Elle va regarder ça de plus {{prêt}}. 3463 {{Quant}} est-il du chien ? 3464 {{Quand}} à ma santé, elle est défaillante. 3465 {{Quant}} ils… 3466 {{quant}} je… 3467 {{quant}} nous… 3468 il comprit {{quand}} prenant son parti, il se protégeait aussi. 3469 {{qu’en}} il vient, c’est l’enfer. 3470 il est exact qu’en je ne sais combien de temps il parvint à un résultat inattendu. 3471 être rassuré quant à l’avenir du continent européen 3472 il comprit trop tard qu’en elle naquit alors le doute qui l’éloigna de lui à jamais. 3480 {{qu’elle}} emmerdeuse. 3489 Vous n’êtes pas sans {{ignorer}} que… 3500 il {{c’en}} est vite lassé. 3501 {{S’en}} était vraiment trop ! 3502 Car {{s’en}} était vraiment fini ! 3503 elle {{sang}} était voulu 3512 Ça n’en finit pas, c’est le {{statut quo}}. 3513 Quelle splendide {{statu}}. 3522 Je suis {{sur}} de Patrick. 3535 en {{tant}} de guerre, il faut savoir faire face et ne pas faiblir face à l’adversité. 3536 ils vont {{de tan en tan}} au restaurant 3537 un {{temps}} soit peu perdu dans cette affaire. 3538 après {{temps}} de souffrance, il faut savoir lâcher prise. 3539 il travaille à {{tant}} partiel 3540 en même {{tant}}, on s’en moque, de toutes ces histoires ennuyeuses. 3541 ce qui a commencé en 2011 en tant d’endroits du pourtour méditerranéen 3542 elle est allée en tant de lieux qu’il est difficile de suivre son trajet. 3551 à haute {{voie}} 3552 à {{voie}} haute 3553 de vive {{voie}} 3567 sur la bonne {{voix}} 3568 ces patients sont en {{voix}} de guérison. 3569 il faut ouvrir la {{voix}} aux nouveaux venus. 3570 Je propse que, par {{voix}} de conséquence, nous partions immédiatement. 3571 C’est une {{voix}} interdite. 3587 Elles sont fatiguées, {{voir}} épuisées. 3588 Ce serait pour aider, ainsi que {{voire}} l’avancement du projet. 3589 Elles vont voir rouge en apprenant cet échec. 3590 Voir les enfants jouer ne me rend pas nostalgique. 3591 Il faut voir grand. 3592 Il sait voir grand. 3593 Il sait voir telle ou telle chose avec acuité. 3594 ça reste à voir 3595 Je veux le voir étonné par toutes ces merveilles. 3596 Les start-ups doivent aller vite, voir grand. 3597 de fortes chances de se voir ruiné 3598 Quelle chance tu as eue de voir ruiné ce connard. 3599 l’immobilier a été ces dernières années l’investissement le plus rentable (voir graphique ci-dessous) 3600 elles sont pas mal ainsi, voire élégantes pourrait-on dire. 3601 il y en a peu, voire très peu. 3602 car elles pénètrent dans les poumons voire le système sanguin. 3603 des enfants malades, qui préfèrent souvent voir Dark Vador que des vieux clowns un peu flippants. 3648 ne l’{{oubli}} pas 3649 elle ne la {{croix}} pas 3650 ils me les {{laissés}}. 3651 ne {{pensée}} rien, jamais 3652 n’en {{laissée}} que des miettes 3653 s’y {{intéressé}} 3654 Il ne {{travail}} pas le week-end. 3655 Je m’en {{fou}}. 3656 il m’{{arête}} encore une fois avec une impudence insupportable. 3657 J’y {{travail}}. 3658 ç’{{avé}} été dur. 3659 me {{pronostic}} un cancer dans les trois mois. 3660 t’{{appel}} l’autre gras, puis on y va. 3661 te {{mangé}} 3662 s’y {{accordez}} 3663 s’en {{approché}} 3664 m’y {{attaché}} 3665 je t’en {{parlé}} 3666 M’enfin, c’est absurde 3667 il est normal de ne presque pas payer des gens qui effectuent un travail 3668 j’ai l’impression de ne même pas savoir ce qu’est un « juif français ». 3669 C’que j’comprends, c’est qu’il y a des limites à ce qu’on peut supporter. 3670 la tentation pour certains médias de ne tout simplement pas rémunérer notre travail si celui-ci n’est finalement pas publié. 3681 il y en a autant que {{prévus}}. 3682 elles sont plus nombreuses plus que {{prévues}} 3683 il y a moins de bouffe que {{prévue}} 3684 comme {{annoncés}}, ils sont arrivés 3685 moins loin que {{prévus}} ->> prévu 3686 plus rapide que {{prévues}} ->> prévu 3687 autant d’hommes que {{prévus}} ->> prévu 3688 il y en a moins que {{prévues}} ->> prévu 3689 comme {{convenus}} ->> convenu 3704 {{Tout}} deux sont partis les premiers. 3711 {{Tout}} mes hommes sont venus. 3712 Malgré tout ces hommes sont quand même revenus. 3720 {{Tout}} les hommes sont dingues. 3727 Donne à manger à {{tout}} ceux qui sont là. 3728 Revenus de tout ceux qui sont partis ont perdu la foi. 3735 {{Toute}} celles qui viendront… 3736 et {{toute}} ce barouf ne nous a apporté que des ennuis. 3737 car {{toute}} mon savoir vient d’elle 3751 {{tous}} ces {{idiotes}} 3752 {{toutes}} mes {{bars}} 3775 Tout {{hommes}} 3776 De tous {{âge}} ! 3777 avec toutes {{femme}} ->> femmes 3778 sur toutes {{armure}} ->> armures 3779 Toute {{époux}} doit faire preuve de bienveillance 3780 Il se souvient de toute mon histoire. 3781 Tout les sépare. 3782 les tout débuts du mouvement ouvrier 3783 vos tout débuts furent difficiles 3784 aux tout débuts, il y eut bien des erreurs 3785 comment les inégalités sociales impactent la santé des tout petits 3810 __neg__ On {{a}} pas compris. 3811 __neg__ Il {{part}} pas encore. 3812 __neg__ On {{vous }}a pas compris. 3813 __neg__ On {{en}} a pas. 3814 __neg__ Il {{y}} a jamais d’eau. 3827 ne jamais {{cédé}} 3828 ne rien {{finit}} 3829 ne jamais plus s’y {{frottait}} 3830 ne plus guère y {{pensée}} 3831 ne pas les {{contrariés}} 3832 Ne rien m’en {{dit}} 3833 Ne jamais lui {{donnait}} sa chance. 3834 Il a décidé de ne plus {{mangés}} avec nous. 3835 ne plus {{mangez}} fait maigrir 3836 ne plus {{mangées}} fait maigrir 3837 ne pas {{allé}} 3838 Ne jamais {{mangez}} de viande ! 3839 J’espère ne pas te déranger 3840 Ne pas te le donner, ce serait une insulte. 3841 ne jamais vraiment évoquer le sujet 3842 déterminés à ne pas se laisser récupérer 3843 de ne pas en élire du tout 3844 Mais gare à ne pas non plus trop surestimer la menace 3845 ne jamais beaucoup bosser, c’est sa devise. 3867 Une étude de 2005 publiée dans le Journal 3868 Les cinq variantes de la couverture du magazine Wired d’avril 2016 consacrée à Silicon Valley. 3869 c’est donc la cinquième en 50 ans 3870 l’équipe veut aussi voir dans la lettre le nombre d’or, un symbole d’harmonie, ainsi qu’un 6 retourné. 4434 pourquoi faire compliqué quand on peut faire simple 4435 Pour ceux et celles qui étaient présents à la cérémonie 4436 les pires vilénies suite au mauvais vote du peuple 4437 La numéro 1 mondiale 4438 cette information n’est rien comparé à cette énorme pression 4439 elle n’est de fait assumée par personne 4440 cohabitent sans difficulté musulmans, juifs et mozarabes. 4441 Rien n’a été trop beau pour cette saga aux costumes cousus main 4442 l’adoption est bien entendu à promouvoir 4443 Les retours que j’ai sont très différents et dépendent de la sensibilité de chacun 4444 refuser le voyeurisme teinté de misérabilisme et le mépris de classe en boycottant les émissions racoleuses 4445 en passant par les “séjours humanitaires” clé en main 4446 qui sont en majorité moins attentifs à la qualité de la prestation qu’ils proposent aux clients 4447 Il a une tête de déterré. 4448 Malgré quelques envolées un brin trop solennelles, tout ce que j’ai dit était très sincère. 4449 Je constate également qu’il n’y pas beaucoup d’entente entre eux. 4450 cet appareil supersonique a été conçu pour mener des frappes longue distance 4451 C’est à mes yeux totalement secondaire. 4452 les femmes se révoltèrent alors, elles aussi désespérées par ces injonctions contradictoires. 4453 pouvoir envisager de dîner avec ses enfants à une heure décente plusieurs fois par semaine 4454 Le vecteur position du point P(t) 4455 Le vecteur vitesse d’un point d’un solide 4456 les vecteurs vitesses 4457 Le vecteur accélération 4458 Le vecteur rotation 4459 la construction à l’avenir incertain 4460 Il resta quelques secondes pensif. 4461 Il resta quelques instants immobile. 4462 La foule, un instant subjuguée et silencieuse 4463 Ils furent de nombreuses minutes persuadés du contraire. 4464 Elles avaient plusieurs heures travaillé sans relâche. 4465 Entre autres choses merveilleuses, il fit poser un bassin en airain (Ctesse Ségur) 4466 Et cette envie de coller au plus près à la vision de George Lucas coûte un bras. 4467 une toile bleu ciel 4468 des émotions au moins en partie partagées. 4469 L’expérience utilisateur est importante. 4470 les feuilles vert tendre. 4471 Une soudaine proximité avec nous autres, issus du “petit peuple”. 4505 comme le signe évident d’une politique volontaire 4506 c’était le signe évident d’une politique volontaire 4507 ce que c’est : le signe évident d’une politique volontaire 4523 __redon2__ Quelle {{imposture}}, c’est d’un ennui, c’est une {{imposture}}. 4524 __redon2__ ils sont là côte à côte. 4525 __redon2__ Tu avances petit à petit, et tu réussis. 4526 __redon2__ De loin en loin, elle passe. 4527 __redon2__ Les mêmes causes produisent/produisant les mêmes effets. (répétition) 4546 {{au le}} chien 4547 {{au les}} armoires 4548 qui sont {{au}} l’usage 4549 {{au}} la passion 4556 toute l’importance de l’{{accords}} musical. 4584 c’est une catastrophe, {{le}} {{profits}} a baissé ces deux derniers trimestres 4585 {{Le}} démoralisation. ->> La 4586 {{Le}} Guyane française. ->> La 4587 avec {{le}} {{pile}} 4588 {{le}} {{publique}} 4589 {{Le}} {{pendue}} 4635 ledit {{accords}} ne vaut rien. 4636 {{au}} {{États-Unis}} 4637 {{Un}} {{amie}} 4638 {{Cet}} {{idiote}}. 4639 {{cet}} ballon. ->> ce 4640 {{Ce}} animal. ->> Cet 4641 {{un}} des {{chattes}} 4642 {{une}} des {{chats}} 4643 {{mon}} {{chienne}} 4644 cet {{oliviers}} 4645 ce {{claviers}} 4646 cette bouffe, c’est du {{chiens}} 4669 c’est ennuyeux, la {{parties}} deux est ratée. 4670 {{La}} Cameroun ->> Le 4671 {{La}} mustang est un cheval sauvage. ->> Le 4672 {{La}} tableau. ->> Le 4673 dans la {{parties}} ->> partie 4674 de {{la}} vin ->> le 4675 {{la}} {{véhicule}} 4676 {{La}} {{pris}} 4677 la force de la {{formes}} parfaite 4686 ladite {{passions}} l’avait conduit à sa perte. 4701 un {{slashs}} ->> slash 4702 un {{fromages}}. ->> fromage 4703 Un {{ballons}} ->> ballon 4704 Une {{cinglées}} ->> cinglée 4720 {{une}} des {{chats}} 4721 {{ma}} amour ->> mon 4722 {{ma}} obligé ->> mon 4723 {{ma}} {{parti}} 4724 {{une}} kyste ->> un 4725 {{ma}} armure ->> mon 4726 {{Cette}} {{animal}} mort. 4727 Ce couple va donner à la France sa très importante collection qui rejoindra le musée d’Orsay 4756 {{Certaines}} danse 4757 Certains {{chien}} 4758 {{certains}} des {{nouvelles}} sont à côté de la plaque. 4759 {{certaines}} des hommes 4760 Un problème rapporté par certains est l’incapacité à trouver un partenaire 4779 Tu sais, {{leur}} {{impatiences}} est notoire. 4780 J’en ai assez de {{leur}} {{délires}} 4781 {{Leur}} {{perceptions}} des choses m’exaspère. 4782 dans {{leur}} {{usines}} 4789 Chaque {{chiens}}. ->> chien 4796 {{Quelque}} amis 4819 ils viennent, les {{petit}} 4820 Les {{tiret}} ->> tirets 4821 Les plus {{grand}} hommes. ->> grands 4822 les {{véhicule}} ->> véhicules 4823 Les {{démoralisation}}. ->> démoralisations 4824 dans les {{usine}} ->> usines 4835 {{leurs}} {{action}} 4851 des {{pain}} ->> pains 4852 ces {{détournement}} de fonds et ces vols 4853 Quelques {{homme}}. ->> hommes 4854 {{leur}} {{données}} 4855 plusieurs {{femme}} sont venues. 4856 une personne ou plusieurs ayant décidé de façon déterminée et coordonnée de faire cuire la grenouille 4864 des {{son}} que nous entendons jour et nuit. 4865 j’entends ces {{même}} âneries tous les jours 4876 Je connais nombre d’{{emmerdeur}} et aucun n’est pire que lui. 4884 des centaines de {{bête}} à cornes passèrent devant nous. 4892 une multitude d’{{homme}} ->> hommes 4903 Elle a eu {{quelques}} 300 réponses à sa petite-annonce. 4904 Il commande {{quelques}} trois cents hommes. 4905 {{Quelques}} 120 hommes ->> Quelque 4906 {{Quelques}} deux cents hommes. ->> Quelque 4907 les quelque 2,5 millions d’habitants 4908 les quelque 12 000 stations-service 4920 ce sont trois {{idiot}} pas foutus de trouver leur chemin avec un GPS. 4930 Il a abandonné neuf {{enfant}}. 4938 On peut trouver mille {{travailleur}} d’un claquement de doigts. 4947 00 heure, 01 heure 4948 il a adopté 1 {{chiens}}. 4958 22 {{heure}} 4959 3 {{heure}} 4996 {{Quelle}} homme. ->> Quel 4997 {{Quel}} femme. ->> Quelle 4998 {{Quels}} chanson. ->> Quelle 4999 {{Quelles}} {{tarés}}. 5000 Quelle sale journée… 5001 Quelles drôles de prunes 5034 {{Quel}} sont ces hommes. ->> Quels 5035 {{Quel}} est cette force ? ->> Quelle 5036 {{Quelle}} est mon animal favori ? ->> Quel 5037 {{Quels}} sont ces femmes ? ->> Quelles 5038 {{Quelles}} est cette imbécillité ? ->> Quelle 5039 {{Quelles}} sont ces hommes ? ->> Quels 5040 Il s’agit de définir quelle est notre propre orientation. 5055 {{quelle}} que soit le chien ->> quel 5056 {{Quelles}} que soient ces intérêts ->> Quels 5057 {{Quelle}} que soit le truc. ->> Quel 5058 {{Quelle}} que soient les astuces. ->> Quelles 5071 {{Quels}} que soient ces idiotes ->> Quelles 5072 {{Quel}} que soit mon aversion ->> Quelle 5073 {{Quel}} que soit cette femme ->> Quelle 5074 {{Quels}} que soit la force appliquée. ->> Quel 5075 {{Quel}} que soit la force appliquée. ->> Quelle 5084 ils trouvent ça de plus en plus {{idiots}} ->> idiot 5100 {{Femmes}} {{intelligente}}. 5101 {{Homme}} {{impatients}}. 5117 en homme {{courtoise}} 5118 en {{femme}} {{cultivées}} 5132 à {{grande}} {{enjambées}} 5133 pour {{belle}} {{appartement}} 5147 Ils ont de {{grandes}} {{oreille}} 5148 certains hommes {{petite}} 5149 de {{grands}} {{homme}} 5150 de {{manière}} {{légal}} 5151 de {{petite}} {{homme}} 5152 de {{pousse}} {{actif}} 5153 De {{bon}} {{conseils}} 5154 De {{mauvaises}} {{hommes}} 5155 Ces produits sont de {{belle}} {{qualités}}. 5156 Après être demeurée assise pendant quelque temps, elle se leva 5157 ils choisissent de devenir indépendants 5185 L’amande {{amer}} 5186 l’{{amicale}} {{animal}} 5187 du chien et de l’{{excellente}} {{collier}} qu’il avait autour du cou. 5188 du chien et de l’{{étonnante}} {{collier}} qu’il avait autour du cou. 5214 un exercice pas très {{utiles}}. ->> utile 5215 un homme {{grands}} ->> grand 5216 un homme {{futiles}} ->> futile 5217 Une femme {{laconiques}}. ->> laconique 5218 je me souviens d’un homme {{arrogants}} 5219 C’est pas les quelques vues sur Linux qui vont rattraper un scénario {{bancale}}. 5243 Une grande {{homme}}. 5244 une géologue {{intelligents}} 5245 Et une femme {{déterminées}} 5246 on parle là d’une femme {{inconnu}} 5247 L’or allume le feu d’une cupidité d’une couleur et d’une sorte différentes. 5273 cet outil {{terribles}} qu’il a dans les mains 5274 J’aimerais connaître de quel parti {{gauchistes}} on parle. 5299 il brandissait avec fougue son drapeau {{déchirés}} 5300 comment osez-vous médire de mon héritage {{glorieuse}} 5324 La plus grande {{cinglé}}. 5325 quelle belle {{étourdi}}, cette gamine 5326 Peut-on imaginer de plus {{beaux}} {{enfant}} ? 5327 il imaginait de la pluie {{noir}} tombant sur une terre dévastée. 5354 chaque élément {{terrestres}} 5355 je me souviens de leur verve {{décalé}} 5382 certains claviers {{dégueulasse}} 5383 elle se rappelle de quels rapports {{désastreuses}} il s’agit. 5384 chez certains la revue Limite provoque des crises d’hystérie. 5411 certaines idioties {{stupide}} 5412 je ne sais guère de quelles âneries {{proférés}} on parle. 5441 ces {{beaux}} {{institutions}} 5442 de vos défauts {{terrible}}, je connais presque tout. 5443 Les éléments caractéristiques liés à ses valeurs historique et architecturale 5461 faire table rase des passions {{inutile}} ->> inutiles 5462 à bonne distance des {{chiens}} {{méchante}} 5463 des hommes {{attaquée}} 5464 des femmes {{agressé}} 5465 des hommes très mal {{renseigné}} ->> renseignés 5466 des dépenses non {{nécessaire}} ->> nécessaires 5467 Des règles pas du tout {{claire}}. ->> claires 5468 Des peines à peine {{croyable}}. ->> croyables 5469 Des {{chambres}} plus ou moins fortement {{éclairé}}. 5470 Les couleurs rouge, jaune et verte ne doivent pas être utilisées 5471 des passeports américain, canadien, néerlandais, allemand et britannique. 5484 Grande manifestation {{réprimées}} dans le sang. 5492 les heureux imbéciles {{payé}} au lance-pierre. 5500 un gros connard {{pathétiques}} 5501 le jour venu prises par surprise elles durent s’enfuir. 5510 ces petites sottes {{déjantée}} 5552 La fille de cette belle {{inconnu}} ->> inconnue 5553 Le chien du voisin {{mourante}} ->> mourant 5554 Un chien de ce voisin {{amicale}} ->> amical 5555 Les hommes des mines {{voisin}} ->> voisins 5556 mon amour du chocolat {{immodérée}} ->> immodéré 5557 ton amour de son verbe {{enthousiasmante}} ->> enthousiasmant 5558 Cet homme de mon groupe {{oubliés}} ->> oublié 5559 Lutter contre le chômage de masse avec les armes des travailleurs reste pour nous une priorité. 5567 {{de telles sorte}} 5591 {{comprises}} mes prestations sur place 5592 {{Exceptés}} les petits, tous sont tombes malades. 5593 {{Attendues}} qu’on n’en sait rien, impossible de tirer des conclusions définitives. 5594 Il viendra, {{étant donnée}} son addiction… 5595 {{Vues}} les idioties qu’on entend, normal qu’on perde la tête. 5596 {{Passées}} les premières heures du jour… 5612 Il y a {{vingts}} personnes dans le salon. 5613 {{Quatre-vingt}} femmes sont passées. 5614 On en a reçu quatre-{{vingts}}-dix. 5615 Le gagnant est le numéro quatre-vingt. 5623 par {{trente-neufs}} degrés. 5640 trois {{cent}} marches à gravir. 5641 deux {{cents}} quatre tests lancés à chaque itération du processus nouveau 5642 par {{cents}} idées différentes. 5651 Plus de {{milles}} personnes sont venues. 5652 plus de deux cent quatre-vingt mille personnes 5676 d’un air compassé, il sortit son carnet de {{chèque}}. 5677 Ce collectif d’{{artiste}} est très inventif. 5678 Rends-moi ma collection de {{film}} ! 5679 C’est un malheureux concours de {{circonstance}}. 5680 à la confluence de {{rivière}} 5681 ils constituent un groupe de {{passionné}}. 5682 C’est un putain de troupeau de {{mouton}} ! 5693 Mettre {{à nus}} les hommes. 5698 {{à part égale}} 5703 {{a moindre frais}} 5717 Quel est son chiffre d’{{affaire}} ? 5718 Allez-vous faire {{affaires}} avec ces connards ? 5719 Faire {{affaire}} à Paris. 5726 ils ont ouvert un débit de {{boisson}} à Paris. 5735 L’entretien dure environ une {{demie heure}}. 5736 nous avons rendez-vous dans une heure et {{demi}} 5743 Ces gens qui jettent {{leurs dévolus}} sur n’importe qui, c’est d’une indécence. 5750 Elle est passée par la cage d’{{escaliers}} 5758 que pensez-vous de notre {{intérieure}} ? 5767 Elles sont tellement {{collets montées}} ! 5776 ces saloperies coûtent vraiment {{chères}} ! 5785 ces conneries donneront {{lieux}} à une enquête approfondie. 5792 nous sommes à présent {{en bon terme}} 5799 Elles ne sont plus elles-{{même}}. 5800 Ils ne peuvent s’en prendre qu’à eux-{{même}}. 5807 Elles ne viennent que par {{intermittences}} 5814 On va procéder par {{intervalle}} 5828 ils ont tout simplement perdu {{pieds}} 5829 ils y sont allés à {{pieds}}. 5830 Elles ont accompli l’impossible, et de surcroît {{aux pieds levés}} 5839 Je connais {{pleins}} de gens 5840 Les avocats sont pleins de nutriments. 5847 Elle mord la vie {{à plaine dent}}. 5854 nous ferons des tests autant que {{possibles}}. 5855 nous ferons autant de tests que {{possibles}}, c’est une nécessité. 5864 Il y a {{quelques}} temps que nous nous connaissons. 5865 Je suis en vacances, en {{quelques sortes}}. 5872 Je lance des tests en {{rafale}}. 5881 par {{soucis}} d’équité, chacun aura droit à une part. 5890 des pans entiers de l’univers — pour reprendre l’expression d’Orwell — se sont d’ores et déjà volatilisés 5891 À la pause, ils se sont tous les deux assis à l’arrière, et j’ai vu progressivement leurs corps se rapprocher. 5898 en {{terme}} de communication, c’est une véritable catastrophe 5907 ils lancent des attaques {{tout azimut}}. 5908 une bonne fois pour {{toute}} 5918 Je pars en {{vacance}}. 5919 {{Bonne vacance}} ! 5920 Il nous reste un poste en vacance. 5921 Cette place est en vacance. 5930 ils mangent {{vites}}. 5931 elles sont {{vites}} parties. 5932 elles sont vites. 5939 c’est son point de {{vu}} qui prime. 5940 Son point de {{vus}} prévaudra toujours, faites-vous à cette idée ou dégagez. 5941 de mon point de {{vues}} 5954 un terrain de 3 {{âcres}}. 5963 Il avait ce goût {{acre}} dans la bouche qui ne passait pas. 5978 ils y sont {{accrocs}} depuis toujours 5979 au poker, il semble {{accroc}} 5980 il est {{accroc}} à la cocaïne 5981 elle est {{accroc}} au jeu 5982 Patricia est {{accroc}} à ce mec 5983 Tous {{accrocs}} à Internet. 5984 {{Accroc}} à cette merde depuis toujours. 5995 Je le tenais pour {{acquit}}. 5996 Par {{acquis}} de conscience. 6003 C’est arrivé trois jours d’{{affilé}} 6010 il descendait l’{{allé}} 6022 Avec ses beaux yeux en {{amendes}} nul ne peut lui résister. 6023 Nous avons déconné, nous avons été mis à {{l’amande}}. 6024 Ces gens-là ne feront jamais {{amande honorable}}. 6035 des {{anales}} littéraires 6036 il a bachoté les {{anales}}. 6048 L’{{aire}} du pétrole n’est pas encore terminée. 6049 Ce sera un jour dans l’{{ère}} du temps 6070 sous les {{hospices}} du conseil général de la nation. 6071 sous de terribles {{hospices}} 6072 Elles vont souvent à l’{{auspice}}. 6073 Dans cet {{auspice}}, la nourriture est abominable. 6074 On va l’envoyer dans un grand {{auspice}} pour personnes âgées. 6082 ils sont sacrifiés sur l’{{hôtel}} de la rentabilité 6089 Je pense que nous {{avion}} tort. 6096 C’est là que le {{bas}} blesse. 6103 ils vont {{belle}} et bien par monts et par vaux. 6110 les mouettes sur les {{bites}} d’amarrage. 6118 une raclée en {{bonnes et dues formes}} 6125 Et moi toujours en {{but}} à de nouveaux dangers 6133 {{s’}}est vraiment merdique. 6134 s’est par exemple illustré au combat. 6165 œufs de {{cannes}} 6166 {{canes}} à pêche 6167 {{cane}} de défense 6168 alcool de {{cane}} 6169 appuyé sur sa {{cane}} 6170 bec-de-{{cannes}} 6171 aéroport de {{cannes}} 6172 restaurant à {{cane}} 6181 ils ont fait {{bonne chaire}}. 6193 C’est {{la}} {{champ de l’heur}}. 6194 Il traversa le {{chant}} de betteraves. 6201 Il a le cancer du {{colon}}. 6210 Ils sont {{sensés}} y parvenir. 6211 Elles étaient {{sensés}} m’y conduire 6212 il est {{sensé}} prendre l’avion demain 6219 Ce sont pourtant des gens si {{censés}} 6227 mon {{comte}} bancaire est encore à sec. 6238 Elle a déjà eu tout son {{comptant}} de problèmes. 6239 On paye toujours argent {{content}}. 6248 Elles hurlèrent {{à corps et à cris}}. 6256 Je reste à ses {{cotés}}. 6276 Rien ne vaut une bonne {{cote}} de bœuf. 6277 Elles ont passé une radiographie des {{cottes}}. 6278 Quelle est sa {{côte}} de popularité 6279 il a réussi à percer sa {{cote}} de mailles. 6280 Il a la {{côte}} auprès de ses collègues 6297 J’ai pris un {{cou}} de bâton. 6298 Merci de calculer le {{coup}} de production avant d’établir une facture. 6299 Elle a un {{coût}} si gracile. 6310 Je vais tordre le {{coup}} à toutes ces idées stupides, une par une. 6311 Implacable, elle a rendu {{cout pour cout}} sans se départir de son calme. 6329 au {{court}} de cette journée 6330 les exercices {{en cour}} se déroulent bien. 6331 je vais couper {{cours}} à ces conneries. 6332 il faut donner libre {{cour}} à ses envies. 6333 Nous allons bientôt être à {{cours}} d’argent. 6334 le rendement {{à cours terme}} est excellent. 6335 porter l’affaire en Cour de justice 6348 {{dés}} que nous sommes partis, il a piqué une crise 6349 {{des}} {{les}} premiers symptômes, appelez-moi 6364 il y a une erreur qu’on peut {{desceller}} dans ses analyses. 6365 elle a {{dessellé}} une forte hostilité dans ses propos. 6390 Régler votre {{différent}}. 6391 Notre {{différent}} avec eux perdure. 6392 Un {{différent}} peut toujours se résoudre. 6393 J’en ai marre de leurs {{différents}}. 6394 Il y a des {{différents}} que nul ne saurait résoudre. 6395 Ils sont pas {{différends}} de nous. 6396 J’en veux un différent. 6405 Vous êtes {{entrain}} de vaincre. 6414 Ils s’amusèrent à l’{{envie}} et oublièrent tous leurs soucis. 6415 Je résiste à l’envie de manger du chocolat. 6416 On ne s’intéresse pas à l’école ni à l’âge, mais aux compétences et à l’envie de partager. 6428 Vous nous {{faîtes}} mal. 6429 Comment {{faîtes}} vous ça ? 6430 Elles sont {{faîtes}} comme ça. 6431 Elle est souvent {{faîte}} de cette manière-là. 6438 {{en faite}}, on en voit partout, ça grouille. 6439 Que {{faîtes}}-vous ? Vous {{faîtes}} mal ! 6440 Aujourd’hui, n’en faites pas trop. 6447 j’ai vu un {{flamand}} rose. 6459 C’est une personne de bonne {{fois}}. 6460 Mais il a perdu {{fois}} en l’avenir. 6478 faire une levée de {{fond}}. 6479 à {{fond}} perdu 6480 elle a vendu son {{fond}} de commerce 6481 il a reçu de l’argent d’un {{fond}} d’investissement 6482 les {{fonds}} baptismaux. 6491 Passe-moi la glacière, s’il te plaît. 6492 Autrefois, il y eut plusieurs ères {{glacières}}. 6493 dans la {{glaciaire}} 6501 En mon {{fort intérieur}}, je le crois. 6502 Dans son {{fort intérieur}}, je le crois. 6511 Quel {{sans gène}}, celui-là ! 6512 Il croit que ses {{gênes}} décident de sa santé… 6520 la {{gente}} masculine est grossière et l’a toujours été. 6533 Il a réalisé un documentaire sur la guerre du {{Golf}}. 6534 C’est un bon joueur de {{golfe}}. 6535 Le {{golf}} Persique est presque une mer fermée. 6536 J’ai fait de la voile dans le {{golf}} du Morbihan. 6537 Le {{golf}} d’Aden. 6556 il en sera fait à votre {{grès}} 6557 Il est venu contre son {{grès}}. 6558 Il viendra de bon {{grès}} ou de mauvais {{grès}}. 6559 Errer au {{grès}} des vents. 6560 Errer au {{grès}} du vent. 6561 Il acceptera de {{grès}} ou de force. 6562 nous vaincrons, {{bon grès mal grès}} 6570 il accomplit le {{jeune}} rituel 6583 {{ceux la}} sont des idiots, rien à en tirer. 6584 {{celle la}} ne vaut pas mieux, laisse-la tomber. 6585 Apporte-{{là}} près du feu 6586 cette {{bête}}-{{la}} 6587 il ne {{là}} croit pas. 6604 on {{l’a}} {{prit}} pour une idiote. 6605 il ne {{l’a}} {{connaît}} pas. 6606 elle ne {{l’a}} leur donne pas sans condition. 6607 elle se {{l’a}} {{réserve}} pour elle-même. 6616 ils ont oublié leur {{laisser-passer}}. 6617 il faut en finir avec le {{laissez-aller}}. 6624 {{levée}} de soleil 6633 j’ai {{soulevé}} un lièvre, là ! 6655 qui est le responsable des {{lieues}} ? 6656 ce sont des {{lieus}} mythiques 6657 elle habitait à quelques {{lieux}} d’ici 6658 Cette réunion ayant eu {{lieue}} loin d’ici 6665 On en sait en {{générale}} pas assez. 6673 cette {{marre}} est presque sèche. 6680 j’en ai {{mare}} de tout ça. 6681 en avoir vraiment {{mare}} de ces conneries. 6694 Elle a {{mie}} son plus bel ensemble. 6695 Les éléments {{mi}} en évidence suffisent à le désigner comme coupable. 6696 Ils étaient partis au restaurant après avoir {{mi}} à jour son profil. 6697 elles ont dansé, {{mie}} à jour leur carnet et sont parties. 6704 on en a plus qu’assez, {{n’ait-ce pas}} ? 6717 C’est la {{votre}} ? 6718 {{nôtre}} père est si âgé. 6725 car {{nul part}} ailleurs, on n’en trouve une telle concentration 6738 une économie {{digitale}} ou rien 6739 Dans l’ère du {{digital}}, tout va plus vite. 6747 {{ont}} m’assure qu’il n’y en a pas. 6748 {{Ont}} n’arrive pas à s’en sortir. 6758 {{Ont}} ne sait jamais quoi faire 6759 si {{ont}} donne à ces gens, ça n’en finit plus. 6760 {{Ont}} viens ! 6761 {{Ont}} ne sait pas comment faire. 6762 qui n’ont somme toute que le désir de vivre paisiblement 6771 {{Ont}} lui avait donné du temps 6772 {{Ont}} leur prendra tout 6773 Qu’importe, {{ont}} leur prend tout 6779 n’y {{on}} jamais lieu de telles abominations ! 6785 ces chiens te l’{{on}} {{donné}} 6793 Qui {{on}} {{tant}} de malheurs ! 6794 qui on blâme, ce soir ? 6800 peut-{{ont}} y arriver avec si peu de moyens ? 6808 peut{{ ont}} y arriver ? 6809 les politiques de l’offre ont échoué. 6822 {{Ou}} sont tes affaires ? 6823 au moment {{ou}} elle allait enfin réussir 6824 vers {{ou}} se tourner quand tout va mal ? 6825 pour le cas {{ou}} on serait arrêté dans notre élan. 6840 Je ne mange que du {{pin}} sans gluten. 6841 Il avala son {{pin}} avec gloutonnerie. 6842 Là, ce sont des pommes de {{pain}}. 6850 Ils vont de {{paires}}. 6863 Elle est très {{pale}} ! 6864 Sous une lumière {{pale}}, 6879 Elle prend toujours {{partie}} aux réunions. 6880 Il faut savoir tirer {{partis}} de ces atouts-là. 6881 Tu fais {{parti}} de l’élite, enfin, façon de parler. 6882 Nous sommes tous d’une manière ou d’une autre {{juge et parti}}. 6883 Prendre Damien {{à parti}}. 6890 Il est comme un coq en {{pattes}} là. 6898 Et {{peut}} de gens peuvent en dire autant. 6899 Il est guéri et peut de nouveau travailler. 6908 {{Peut être}} qu’on en saura plus demain. 6909 Ils vont {{peut être}} enfin faire quelque chose de leur misérable existence. 6910 L’un peut être réglé immédiatement 6917 C’est une maison de {{plein pied}}. 6924 il y a {{un}} {{pole}} d’activités pas loin d’ici. 6925 il est parti en pole position. 6926 elle fait de la pole dance. 6936 Ce {{diagnostique}} est absurde. 6937 C’est la valse des {{pronostiques}} contradictoires aujourd’hui. 6944 Ils étaient partis au restaurant après avoir {{pue}} dire un mot. ->> pu 6951 {{comme même}} il y va fort, le saligaud ! 6952 La météo disait qu’il ferait beau temps, mais il pleut {{comme même}}… 6962 {{quelques soient}} les avantages d’un correcteur… 6963 {{quoiqu’il en soit}}, nous ne nous laisserons pas faire, vous pouvez compter sur nous. 6970 Il faut bien aller {{quelle que part}}. 6971 Je les ai oubliés {{quelque pars}}. 6987 {{Quelles que fois}}, on y comprend plus rien. 6988 {{Qu’elle que fois}}, on y comprend plus rien. 6989 Il y va {{quelque fois}} par an. 6996 de {{quoique}} ce soit, je ne veux pas en entendre parler. 7003 Elle y parviendra, {{quoiqu’il}} en coûte. 7011 Vous {{résonnez}} comme un sot. 7012 Nous allons le {{résonner}}. 7019 Elles ont préparé un {{riz}} de veau. 7035 il priait {{sain}} Anselme de le secourir. 7036 Au {{sain}} de l’obscurité, elle se sentait en sécurité. 7037 Sur son {{sain}} 7038 en son {{saint}}. 7039 {{blanc-sein}} 7052 dans la {{sale}} des professeurs 7053 une {{sale}} d’arcade 7054 ils sont tellement {{salles}} 7055 pour le service en salle 7062 Tout est {{sans dessus dessous}}. 7074 cette fosse {{sceptique}} est pleine. 7075 Je suis {{septique}} ! 7082 {{S’en suivit}} une guerre de tous les instants. 7083 {{S’en suivre}}. 7090 Méfiez-vous de cette {{soi-disante}} sorcière. 7091 Méfiez-vous de cette {{soit-disant}} sorcière. 7092 Méfiez-vous de cette {{soi disant}} sorcière. 7109 chez {{soit}}, c’est presque toujours mieux. 7110 ce n’est pas la philosophie en {{soit}} qui est problématique 7111 quel que {{soie}} sa pensée, je refuse d’y accorder de l’attention. 7112 Penser par {{soit même}}… 7113 S’aimer {{soit-même}}, c’est le début d’une grande histoire d’amour. (Oscar Wilde) 7114 Je regrette que l’on en soit encore à des considérations que je croyais dépassées 7115 Quoi qu’il en soit 7132 ne leur {{son}} pas odieux. 7133 Ces chiens me {{son}} odieux. 7134 {{sont}} {{pain}} 7135 en {{sont}} {{absence}} 7136 elles s’en sont mal portées 7137 ils en sont reconnaissants 7163 Je suis {{sure}} qu’il ne va pas tarder à venir 7164 {{sures}} d’elles-mêmes, elles ne s’en laissent pas conter. 7165 {{sur}} de toi et de moi, que peut-il nous arriver, sinon le meilleur. 7166 Il est tellement {{sur}} de la trouver. 7167 ils sont en lieu {{sur}} et introuvables. 7181 une {{tâche}} de chocolat ->> tache 7182 une {{tâche}} vraiment indélébile 7183 en tâche de fond 7184 la tâche de la justice 7185 déléguer des tâches de sécurité publique à des machines autonomes 7186 tirer bénéfice de nouvelles données en fonction de la tâche de départ qui leur a été assignée 7187 Les « pervenches » fonctionnaires seraient alors affectées à d’autres tâches de surveillances, notamment au sein de la nouvelle brigade anti-insécurité. 7201 Demain, il va aller en {{tôle}}. 7202 Tu as fait de la {{tôle}} ? 7203 C’est la {{taule}} galvanisée. 7214 en {{tan}} que meneuse intrépide, elle a toujours fait preuve d’une grande imagination. 7215 il est bien évidemment {{tant}} d’en finir avec ça. 7224 Elle l’a observé par un miroir sans {{teint}}. 7225 Elle a acheté un nouveau fond de {{tain}}. 7235 elles seront à {{tord}} accusées. 7236 ils ont {{tords}}… 7237 ils ont {{tord}}. 7238 ils n’ont pas {{tord}}. 7249 ces araignées {{vénéneuses}}. 7250 ce champignon {{venimeux}}. 7262 en finir avec le {{vert}} qui était dans le fruit. 7263 un immonde {{vert}} de terre 7272 ce {{vieux}} homme 7273 c’est un {{vieux}} imbécile. 7274 Le {{vieux}} homme était parti. ->> vieil 7283 après avoir {{mi}} ses souliers tenir 7284 avoir {{pus}} réussir 7285 ce qu’ils ont {{pue}} 7286 il a {{pues}} partir 7288 de plus en plus {{concerner}} par ce problème 7289 après avoir mis à jour sont {{profile}}. 7290 il s’agit de {{mette}} en évidence. 7306 __mc__ des {{portes-avions}}. 7317 Nous vous donnons rendez-vous {{Mercredi}} le 18. 7331 15 {{Septembre}} ->> septembre 7332 23 {{Messidor}} ->> messidor 7333 ils viendront en {{Mars}}. ->> mars 7356 Nous n’avons reçu aucune décision de l’{{état}} fédéral. 7357 Les {{états}} démocratiques ne sont gouvernés que par des hypocrites et des opportunistes. 7358 C’est une affaire d’{{état}}. 7359 la défense de l’{{état}}. ->> État 7360 C’est une prérogative de l’{{état}}-nation 7374 des {{français}} sont arrivés ->> Français 7375 c’est de conception {{Allemande}} ->> allemande 7376 une référence aux {{israéliens}} 7377 une {{érythréenne}} 7378 et des {{soudanaises}}. 7379 les Îles Britanniques. 7380 Allemands contre Grecs, Grecs contre Allemands 7381 sept Français sur dix 7382 l’océan Indien 7389 des {{parisiens}} en vacances 7402 il ne parle qu’{{Allemand}}. 7403 ta traduction en {{Russe}} est superbe. 7410 C’est le {{moyen age}}, chez ces ploucs. 7431 L’{{église}} orthodoxe. ->> Église 7432 un homme d’{{église}} ->> Église 7433 les sacrements de l’{{église}} ->> Église 7434 Une {{Église}} baroque. ->> église 7435 L’{{Église}} Saint-Paul. ->> église 7436 Un homme d’{{église}}. ->> Église 7447 Ça se passe en Europe du {{nord}}. 7448 J’ai visité toute l’Afrique du {{sud}}. 7449 Dans l’Europe de l’{{ouest}}. 7459 J’en veux 3 {{Mètres}}. 7460 Elle en prendra vingt {{Grammes}}. 7473 à en {{parlé}} sans cesse 7482 Il tentait de {{raisonné}} en homme libre 7483 sa façon de {{nettoyez}} était inefficace. 7490 de nous {{libérez}} de lui 7497 de les {{changeait}} 7504 y {{mangée}} était un supplice 7512 pour {{mangé}} à sa faim, il faudra chasser. 7513 C’est pour {{attaqué}} la journée. 7520 pour nous {{chassez}} de chez lui 7527 sans {{dérogez}} aux règles en vigueur dans cet établissement 7534 Nous {{intéressé}} à la question ne suffit pas à faire de nous des experts. 7535 nous {{ridiculisé}} 7536 vous {{mangé}} 7544 Peuvent-elles s’{{installaient}} ici ? 7545 Peut-il {{chassé}} ces intrus ? 7546 Ne veux-tu pas {{gardé}} ton boulot ? 7554 est-ce que {{rapporté}} ces données nous aidera ? 7555 est-ce que {{priait}} est la solution ? 7556 Est-ce que Pierre Xazzz va bien ? 7557 Qu’est-ce que rapporte réellement Dassault & Co au budget 7564 commence par {{mangé}} le poulet. 7565 enfin la petite finit par {{pleuré}} à chaudes larmes. 7566 sa tournée, elle la finit par Rodez. 7574 cessez d’{{anesthésié}} ces gens ! 7595 ce tableau {{voler}} coûte très cher. 7596 la difficulté {{passer}} t’aidera par la suite 7597 leur compte {{épurer}} servira encore. 7598 Le vieux cocher avait mission 7606 les documents {{scanner}} ne sont pas lisibles. 7607 tes doutes {{remâcher}} deviennent difficiles à vivre. 7616 nous {{épuisants}} à la tâche pour des clopinettes, nous défaillîmes. 7719 tandis que d’autres perçoivent le bon goût de la soupe. 7720 Je me doute bien que vous avez trouvé la réponse. 7721 Nous nous doutons bien qu’il y a une entourloupe derrière cette affaire. 7749 __ocr__ vous serez {{couche}} en terre. 7750 __ocr__ nous serons {{presses}} de monter à bord de ce train-ci. 7751 __ocr__ elle était toujours persuadée que B. serait {{acquitte}} 7752 __ocr__ je reconnais que j’ai pas {{traîne}} 7753 __ocr__ elle est fauchée et a {{emprunte}} de l’argent 7754 __ocr__ Alors il lui est {{remonte}} dessus 7755 __ocr__ quel héros d’avoir {{affronte}} ces salopards de la police 7756 __ocr__ il n’était pas le seul à être {{remonte}} contre eux. 7757 __ocr__ par terre et je suis {{retourne}} sur la tombe. 7758 __ocr__ Après on a {{creuse}} vers le haut. 7759 __ocr__ il a {{affronte}} une bande de voleurs de bétail. 7760 __ocr__ il était sublime. 7761 __ocr__ elle avait envie de s’en sortir enfin. 7762 __ocr__ la longueur de la circonférence étant égale à… 7774 tout ceci ne me rapporte {{guerre}} 7781 je ne m’en soucie {{guerre}} 7788 Il n’y prête {{guerre}} d’attention. 7789 Elle n’en accorde plus {{guerre}}. 7796 ne plus {{guerre}} s’en soucier 7812 c’en est fini d’eux, ils sont comme morts 7813 c’en est assez, ça suffit 7814 tout ça, {{s’en}} est fini. 7815 {{s’en}} est assez de ces foutaises. 7816 c’est tellement idiot, {{s’en}} est dérisoire… 7824 cela ne va pas de {{soit}}. 7834 ces emmerdeurs crient bien trop {{forts}} 7835 ces animaux paraissent forts, mais ils sont faibles. 7836 ils sont forts, ces gars-là. 7837 ils se croient forts. 7838 je les imagine forts et intelligents. 7839 elles les veulent forts et astucieux. 7840 les écarts ont été plus forts en une génération 7849 arrête d’y {{consacré}} autant de temps. 7856 Il s’agit de me {{donnait}} tout ça. 7864 de me le {{facturez}} 7874 Tu fais {{décoloré}} tes cheveux ? 7875 je veux {{changé}} 7876 je ne veux pas {{mangé}} 7877 je sais {{mangé}} 7878 je ne voulais pas {{marché}} 7879 Elles ont voulu {{mangé}} de la viande. 7880 elle fit peu {{mangé}} les enfants 7881 fait pourtant avéré et corroboré par le même sondage. 7889 me faire constamment {{laminé}} au jeu, ça finit par me fâcher. 7897 Je suis fatigué de vouloir {{essayé}} d’y remédier. 7905 Il faut savoir {{arrêté}} les frais. 7906 un certain nombre de savoirs spécialisés 7913 il faut sans cesse {{persévéré}} 7921 Il faudrait l’{{essayé}}. 7928 lui {{mangée}} beaucoup. 7939 je ne me suis jamais {{perdus}} 7940 je me suis donné du temps. 7948 tu t’es finalement {{retrouvés}} en mauvaise posture. 7949 tu ne t’étais pas laissé le temps d’y réfléchir. 7957 le dédale dans lequel il se serait {{perdue}} 7958 il s’était perdu dans la forêt. 7966 elle s’y était {{préparé}}. 7967 elle s’était trouvé un mari. 7975 Nous nous étions {{cru}} au paradis. 7983 ils s’y étaient {{abandonné}} avec ferveur 7991 elles ne s’y étaient pas {{donnée}}. 7992 sans fin elles se sont succédé 8004 s’être {{donner}} le mot. 8005 je me suis {{donnés}} à fond 8006 c’est de ce qui s’est {{passe}}. 8007 Ça s’était toujours {{passe}} comme ça avec elle 8008 elle s’est {{approche}} de la penderie 8009 terrorisant l’animal qui s’était {{cabre}}. 8010 ce qui s’est {{passe}}. 8011 s’y était {{consacrer}} avec enthousiasme. 8012 On s’est rencontrées lorsqu’on travaillait là-bas. 8013 des soins que je m’étais donnés. 8014 Si t’es pas contente, t’achètes pas. 8024 Elle te laisse {{épuisés}} par la tâche. 8025 Ils la laissèrent {{malades}}. 8026 Ils la laissent prendre le train. 8027 Elle te laisse finir le travail. 8028 Je me laisse de quoi finir. 8029 Il te laisse trois jours de délai. 8037 je les laisse {{indifférent}}. 8038 elle nous laissera {{perdu}} dans nos délires. 8039 je les laisse indifférents. 8040 tu nous laisses indifférentes. 8041 ils nous laisseront étourdis. 8042 nous laisserons étourdi cet homme. 8053 j’étais {{perdus}} ->> perdu 8054 j’aurais été {{perdus}} sans toi ->> perdu 8055 je n’étais pas {{perdus}} ->> perdu 8056 Je suis {{contents}}. ->> content 8057 J’ai été {{contents}}. ->> content 8058 Je parais {{contents}}. ->> content 8059 Je dirais que la vie est un peu moins {{cher}} en France. 8060 Je semble {{contents}}. ->> content 8061 J’ai {{mettrai}} du sel. ->> mis 8062 J’ai {{lut}} son journal. ->> lu 8063 je ne suis pas {{petits}} 8064 je parais {{insignifiants}} 8065 Je suis moi aussi complètement {{désespérés}} ->> désespéré 8066 J’y semble être {{perdus}}. 8074 tu n’es pas {{petites}} 8075 tu es {{insignifiants}} 8084 Il semble être {{partis}} pour toujours. ->> parti 8085 Il est {{demander}} à chacun de participer. 8086 Il est {{contents}}. ->> content 8087 Il est {{laisser}} à lui-même 8088 il ne semble pas {{étonnés}} 8089 il paraît {{stupides}} 8098 c’est {{condescendants}}. ->> condescendant 8099 C’est {{finis}}. 8100 C’est donc seules que les deux femmes sont amenées à comparaître 8108 Ç’avait été {{horribles}} 8118 ça semble {{perdus}} 8119 cela paraît {{incroyables}} 8120 Je n’arrêtais pas de me répéter que tout cela était peut-être pure imagination 8130 elle a été {{perdu}} sans toi ->> perdue 8131 Elle semble être totalement {{ruiné}}. ->> ruinée 8132 Elle est complètement {{fol}}. ->> folle 8133 elle n’est pas {{petits}} 8134 Elle est de plus en plus {{belles}}. ->> belle 8143 celle qui paraît {{dingues}} de toi 8153 nous paraissons {{faible}} 8154 Nous paraissons avoir été complètement {{prise}} de panique. ->> prises 8164 ils sont {{parti}}. ->> partis 8165 ils sont {{parties}}. ->> partis 8166 ils restaient {{méfiantes}} ->> méfiants 8167 Ils semblent avoir été {{attaqué}} par des soldats. ->> attaqués 8168 Ils sont, semble-t-il, {{parti}} à la chasse. 8169 Ils sont bel et bien {{mort}}. 8170 Ils sont tout à fait {{désœuvré}}. 8171 ils sont, qu’on le veuille ou non, déjà {{parti}}. 8172 ils sont jour après jour plus {{perdu}} 8173 ils sont très loin d’être {{idiot}}. 8183 elles n’ont tout de même pas été {{attaqué}} ->> attaquées 8184 Elles sont {{affamé}}. ->> affamées 8185 Celles-là sont {{folle}}. 8186 celles qui redeviennent {{méchante}} 8194 j’ai été {{instruis}} par elle 8195 avoir été {{prit}} par surprise 8210 Je ne peux pas être {{méchants}}. 8211 j’aurais vraiment été {{tentés}} 8212 je ne pense pas être {{démasqués}} 8213 Je veux être {{méconnaissables}} 8214 je voudrais bien être dans ses souliers 8223 tu ne crois pas être {{meilleurs}}. 8224 tu ne crois pas avoir été {{découvertes}} 8233 Il peut être {{observée}}. 8234 celui-là pensait être {{perdue}} 8235 celui-là peut être {{perdue}} 8236 il pense avoir été {{volés}} 8237 lui qui ne pensait jamais être {{reconnus}}. 8247 ça ne semble pas avoir été {{conçus}} pour ça. 8257 elle ne croit pas être {{trompé}} 8258 ici, elle ne risque pas d’être {{attaquées}} 8267 celle qui pense être {{découvert}} 8276 nous pensons être {{désiré}} 8277 nous ne devons pas être {{instruit}} 8287 ils croient être {{perdu}} 8297 elles veulent être {{différente}} 8298 Elle peut être {{observées}}. 8299 Elles ne peuvent pas être {{observée}}. 8300 elles doivent être {{fâché}} 8301 elles doivent avoir été {{attaqué}} 8302 elles peuvent avoir été {{trompé}} 8303 elles souhaitent être plus {{considérée}} 8329 la danse est {{fini}}… 8330 Un orage est {{annoncée}}. 8331 Une averse est {{annoncé}}. 8332 Le chien ne sera pas {{oubliés}} 8333 les femmes sont vraiment {{partis}} ->> parties 8334 les hommes ne sont pas tout à fait {{fâché}} ->> fâchés 8335 les enfants ne sont pas {{content}} 8336 les réunions sans cesse reportées sont {{annulés}} 8337 l’avenir de la région était {{suspendue}} 8338 il prétendait que les banques universelles « à la française » s’{{était}} très honorablement comportées 8348 Antoine est {{mariée}}. 8349 Antoine n’est pas {{mariés}}. 8350 Antoine est peut-être {{fatiguée}}. 8351 Éric n’est pas très {{fatiguée}}. 8352 Martine est {{marié}}. 8353 Martine n’est pas {{marié}}. 8354 Martine est très {{intelligent}}. 8355 Martine n’est pas très {{intelligent}}. 8365 {{Découragés}}, je suis parti. 8373 — {{Déçue}}, il s’en est allé. 8381 — {{Déçu}}, elle s’en est allée. 8389 Très vite, ils sont partis 8390 Une fois terminé, ils sont revenus. 8391 Vraiment {{soucieuse}}, ils sont. 8392 Désolé, ils ne viendront pas. 8393 Pire, ils piétinent parfois les droits humains. 8401 Absolument {{heureux}}, elles exultèrent de joie. 8411 Elles se sont {{rendues}} compte 8412 La puissance publique s’en est-elle rendu compte ? 8445 serais-je {{fâchés}} contre vous ? 8446 Est-elle {{arriver}} ? 8447 Sont-elles {{arriver}} ? 8448 Est-il {{arriver}} ? 8449 Sont-ils {{arriver}} ? 8450 Est-elle déjà {{arriver}} ? 8451 Sont-elles tout à fait {{arriver}} ? 8452 Est-il déjà {{arriver}} ? 8453 Es-tu {{arriver}} ? 8454 Sont-ils déjà {{arriver}} ? 8455 Es-tu déjà {{arriver}} ? 8456 Sommes-nous {{arriver}} ? 8457 Sommes-nous déjà {{arriver}} ? 8458 Était-elle {{fatiguer}} ? 8459 Ne sont-elles pas {{aveugle}} 8460 N’est-il pas {{aveugles}} 8461 Sont-ils vraiment {{aveugle}} 8462 Ne sommes-nous pas {{aveugle}} 8463 Est-il question de ceci ou de cela ? 8464 Est-ce former de futurs travailleurs ou bien des citoyens 8487 je me savais {{implacables}} avec eux 8495 quand tu te montres {{infaillibles}} 8505 lequel se veut {{imbattables}} ? 8515 Elle se sait plus {{fortes}} qu’eux tous. 8516 elle se vit {{abandonné}} 8525 à celle qui se révélera {{attentif}} à tous ces problèmes. 8533 nous nous pensions {{invincible}} jusqu’au jour où tout a basculé. 8543 ils se montrent {{exigeantes}} 8553 elles se sentent {{perdu}} 8591 ces hommes le rendent {{dingues}} 8592 Il me considère {{stupides}} 8593 Elle nous trouve {{stupide}} 8594 Je les crois {{capable}} du pire 8595 la voilà {{perdu}} 8596 nous nous crûmes {{perdu}} 8597 Elle me rend {{folles}}. 8598 l’homme se considère {{instruits}} alors qu’il n’est qu’un aveugle qui tâtonne. 8599 Me voilà bien {{avancés}} ! 8600 avec eux, te voilà {{embarqués}} dans une drôle d’histoire… 8601 un accident et nous voilà mal {{barré}}… 8602 Le voilà {{perdue}} dans son délire. 8603 un peu de maquillage et la voilà {{jolis}} comme un cœur. 8604 les voilà pauvrement {{équipé}} pour un tel périple. 8605 une chance pour elle alors qu’il n’a pas choisi 8606 elle se révèle d’ailleurs être une alliée de taille 8624 ils leur avaient {{donnés}} du fil à retordre. 8625 il a {{affronte}} une bande de voleurs de bétail 8626 Ils avaient barre sur lui. 8636 Les femmes lui avait {{conseillées}} de se taire. 8637 le mur avait {{était}} détruit 8646 je les avais {{trompé}} avec mon baratin. 8655 Ces maisons nous avaient {{subjugué}}. 8656 C’est mot pour mot un script qu’on nous a filé. 8665 ils l’avaient {{retrouvés}}. 8674 ces livres m’avaient {{ennuyés}} au-delà du dicible. 8683 des hommes, des femmes, des enfants qui ne leur avaient {{faits}} que du bien. 8693 Il a {{prit}} le train. 8694 Les élèves lui ont {{données}}. 8695 Les élèves lui ont {{donnés}}. 8696 Les élèves lui ont {{donnée}}. 8697 Nous lui avons {{donnée}} un cadeau. 8698 Vous lui avez {{donnés}} un cadeau. 8699 Ils leur ont {{données}} un cadeau. 8700 ils avaient, en ce temps-là, déjà {{perdus}} leurs illusions 8701 Nous l’avons {{mangés}}. 8702 Nous l’avons {{mangées}}. 8703 Ils ne me l’ont pas {{donnés}} 8704 Les élèves m’ont {{écoutés}}. 8705 Les élèves t’ont de temps en temps {{écoutées}}. 8706 Les élèves ne m’ont pas {{écoutés}}. 8707 Les élèves ne m’ont pas {{écoutées}}. 8708 Nous ne t’avons pas {{écoutés}}. 8709 Nous ne t’avons pas {{écoutées}}. 8710 Avoir {{instruite}} notre mère 8711 Après avoir {{baissés}} nos tarifs 8712 Je viendrai, après avoir vraiment {{écoutée}} le prof. 8713 Alexandre aujourd’hui nous a {{quitté}} 8714 Mes joueurs, je les ai fait reposer 8715 Mes joueurs, je les ai fait se reposer 8716 Il nous avait dit que… 8717 Elle avait {{pose}} son tricot ->> posé 8718 Vous l’avez {{trouvez}}. ->> trouvé 8719 Il a {{donner}} sa vie pour elle. ->> donné 8720 Le maire a {{créée}} un risque. 8721 nous avions quelque peu {{tempérés}} leurs ardeurs 8730 m’avoir {{terminer}}. 8731 il m’a {{souffler}} la bonne réponse. 8732 elle t’en a {{parle}}. 8733 c’est vous qui m’avez {{convertit}}. 8747 Les documents qu’ils ont {{acheté}}. 8748 les flacons qu’ils ont réussi à acquérir 8749 ça faisait des années que j’avais délaissé ce lieu 8750 Les électeurs de Donald que l’on avait rencontrés jusque-là boivent l’eau d’une seule fontaine : Fox News et les sites et radios conservateurs. 8761 Le document qu’ils ont de temps en temps {{achetés}}. 8762 L’homme que j’ai {{aidée}}. 8763 L’homme qu’ils ont beaucoup {{aidée}}. 8764 L’homme que nous avons un peu {{aidée}}. 8765 le flacon qu’ils ont réussi à acquérir 8779 La femme que j’ai {{aidé}}. 8780 La femme que j’ai beaucoup {{aidé}}. 8781 La femme que j’ai un peu {{aidé}}. 8782 la danse qu’ils ont réussi à faire 8792 ce que ça a {{donnée}} 8802 Avoir {{marcher}} toute la journée m’a épuisée. 8827 A-t-il {{du}} se résoudre à céder ? 8828 L’échec est {{du}} à une erreur de calcul 8829 L’échec est {{du}} en partie à un manque de préparation. 8830 Tu as reçu ton {{du}} pour ton travail. 8831 J’ai {{du}} lui donner. 8832 J’ai {{du}} leur prendre. 8833 que ça vous plaise ou non, c’est notre {{du}}. 8834 Il a {{du}} leur prendre. 8835 Voici ce qui t’est {{du}}. 8836 Voici ce qui me sera {{du}}. 8837 Voici ce qui vous est {{du}}. 8838 Il veut qu’on lui rende son {{du}}. 8839 Aurait-il {{du}} {{prendre}} son repas plus tôt ? 8840 Avez-vous {{signez}} le contrat ? 8841 Ont-ils {{signer}} le contrat ? 8842 Ai-je déjà {{signez}} le contrat ? 8843 A-t-il déjà {{signer}} le contrat ? 8873 Avais-je {{laissés}} ces notes sur la table ? 8874 l’avait-il {{regardés}} longtemps ? 8875 les avais-tu {{acheté}} là-bas ? 8876 {{A}} vous lire, on ne sait plus que penser de toutes ces histoires 8877 Combien de bêtes n’as-tu pas déjà massacrées 8878 Combien de bêtes as-tu déjà massacrées 8879 les ont-ils {{détecté}} ? 8880 l’a-t-il {{finis}} ? 8881 m’as-tu {{entendus}} ? 8891 Nous {{arriverez}} demain. 8892 Et, nous laissant étonnés d’être encore là sans y avoir rien compris, 8902 Vous {{arrivais}} trop tard. 8912 se {{considérez}} comme un génie… 8913 se {{rencontrerons}} demain grands et petits. 8914 se {{crois}} élu par Dieu… 8915 avec ceux se trouvant sur leur chemin 8946 L’hôtel {{ou}} ils sont allés l’été dernier. 8961 {{Apportes}} ton fric à cet homme. 8962 N’{{abandonnes}} pas si vite. 8963 Castres est une belle ville. 8964 Limoges aussi. 8972 {{Allés}}, on y va ! 8973 — {{Allé}} prendre une cuite. 8988 {{Finit}} ton assiette. 8989 Ne {{pourrit}} pas l’ambiance. 8990 Suffit de s’en servir. 8991 Et ne doit pas être rejeté dans les limbes. 9005 {{Prend}} le chemin de droite. 9006 N’{{attend}} pas qu’elle vienne. 9007 — Pour ma part, répond P., je crois que tout va bien. 9015 {{Vas}} lui mettre une branlée. 9027 {{Soit}} cohérent avec toi-même. 9028 Ne {{soit}} pas con. 9036 {{Ait}} la foi ! 9052 {{prend}}-m’en trois, s’il te plaît. 9053 {{Sert}}-toi d’eux autant que tu le peux, puis casse-toi. 9054 — {{Abandonnes}}. 9055 Ne {{donnes}} pas autant. 9056 N’{{insistes}} pas. 9057 Ne {{finit}} pas ce devoir. 9058 {{Finit}} cette tarte. 9059 Ne {{soit}} pas en retard ! 9060 Ne me {{prend}} pas pour un idiot 9061 Ne l’{{attend}} pas 9062 N’y {{vas}} pas 9063 Ne m’y {{attend}} pas 9064 Ne {{vient}} que lorsque je te le dirai. 9065 Ne l’y {{contraint}} pas 9066 {{Vient}}. 9067 {{Sert}} le plat. 9068 {{Attend}} la correction. 9069 {{Vas}} au diable ! 9070 {{Écartes}} de moi cette coupe. 9080 {{Apportez moi}} ce dictionnaire 9089 {{Donne nous}} du café. 9098 {{chante les}} avec conviction 9107 {{Prends le}} avec toi. 9108 {{Dites leur}} que nous sommes là. 9109 un sujet si extrêmement politique et polémique lui a donné un accès 9110 Les États d’ores et déjà très affaiblis le seraient encore plus 9111 « C’est ainsi », résume la cyptologue (erreur orthographique délibérée sur “cyptologue” pour empêcher certains faux positifs) 9112 Notez le peu de cas qui en est fait en général dans les médias 9121 donne{{-m-en}} encore 9130 {{donne m’en}}, s’il te plaît. 9139 les analyses, {{donne-les moi}} 9148 {{prends-leur en}} 9157 {{apporte-les nous}} 9169 {{allons y}}, ça pue. 9170 {{vas y}}, ce n’est pas dangereux 9171 {{convenez en}}, c’est une belle affaire malgré son prix élevé 9240 Il vient {{a}} la maison. 9241 tu ne donnes rien {{a}} ces hommes. 9242 Nous les donnons {{a}} ces gens. 9243 j’arrive {{a}} la gare 9250 j’ai peur qu’il ne leur {{face}} quelque chose de mal 9259 il est posssible qu’il {{est}} confiance en toi 9260 La révolution est crainte. 9261 Je n’en ai cure. 9262 Notre communauté vous est redevable. 9263 l’humour est affaire de culture 9274 Comment {{pensé}} à ces choses sans perdre l’esprit. 9275 comment {{abandonnez}} 9283 Nous étions en train de {{trouvé}} une solution à ces soucis récurrents. 9284 en train de {{demandées}} 9285 en train de {{mangez}} 9294 elle préférait {{mangée}} seule. 9295 Il venait, comme d’habitude, {{discuté}} avec son ami. 9296 Ces types-là venaient {{mangé}} chez moi tous les dimanches. 9297 ils viennent bien entendu {{attaqué}} le parlement 9298 ils vont par voie de conséquence vraiment {{attaqué}} la banque 9299 elles ont pu {{mangé}} 9300 Cette affaire ne va rien {{arrangé}}. 9308 il devait {{utilisé}} son temps à bon escient. 9309 tu dois {{mangé}} 9317 faut-il {{pensé}} à ces choses-là encore et encore ? 9325 Mieux vaut {{consacré}} son temps à des occupations utiles. 9333 elle parvenait à y {{songez}} souvent 9334 je vais à Rodez. 9342 Ils ont beau {{consacré}} le plus clair de leur temps à ce projet, ça n’avance guère. 9349 pour s’y {{donnait}} le plus souvent. 9368 ils sont {{tromper}} par tous ces hypocrites. 9395 je {{donnerait}} tout pour y parvenir. 9396 Je le lui {{prend}}. 9397 Je l’{{apprend}}. 9398 Je les {{contre-attaques}}. 9399 C’est moi qui {{donnes}} des maux de têtes ! 9400 Je maudis celui d’entre nous qui {{mens}}. 9401 J’y {{vient}}. 9402 J’en {{revient}}. 9403 je {{donner}}. 9404 Je ne leur en {{veut}} pas. 9405 Je ne le lui {{achèterait}} pas. 9406 Je ne l’y {{aie}} pas vu. 9407 Je ne t’{{attend}} pas. 9408 J’{{arrivait}} en retard. 9425 Tu ne {{ment}} jamais. 9426 Tu {{a}} mal ? 9427 Tu ne le lui {{prend}} pas. 9428 Tu ne m’{{attendra}} pas. 9429 toi qui n’y {{connait}} rien, ne nous ennuie pas avec tes théories. 9444 {{Il}} {{accusent}}. 9445 il {{bus}} du vin. 9446 Il {{pris}}. 9447 Il {{rougis}}. 9448 Il {{suivis}}. 9449 Il {{grandis}}. 9450 Il {{bâtis}}. 9451 Il {{bus}}. 9452 Il {{mues}}. 9453 {{il}} ne {{pensent}} à rien. 9454 il n’y {{aurais}} plus rien à attendre de la religion et de la politique. 9466 on {{remué}} beaucoup. 9467 on {{refuses}} tout cela 9468 on ne se {{bougent}} pas suffisamment 9480 Quiconque {{pensez}} s’en sortir se trompait lourdement. 9481 Il voulut punir quiconque s’y {{adonnaient}}. 9482 quiconque issu de la gauche n’a aucune chance. 9495 Ce qui, la plupart du temps, {{donnes}} des maux de tête. 9496 Ce qui {{fâchent}} mes amis. 9497 celui qui {{pensent}} mal de toute chose 9505 chacun {{fais}} comme il peut 9506 quelqu’un {{sauras}} 9507 quelqu’une se {{montrent}} désagréable 9508 n’importe quoi {{peux}} réussir 9509 n’importe qui {{peux}} y arriver. 9510 quelque chose {{sens}} mauvais ici 9511 l’un d’eux {{viendras}} 9512 ce {{dois}} être ennuyeux 9513 ce {{seras}} foutu 9514 mais ça ne vous {{aideras}} en rien 9515 Cela ne t’{{aideras}} pas. 9516 Cela {{dis}}, on ne sait pas comment s’en sortir. 9517 Y avait-il seulement quelqu’un pour vouloir soumettre ses recherches ? 9532 Tout {{reviens}} à ça. 9533 Tout qui {{deviens}} fou. 9534 Le tout nouveau président de la fondation qui héberge Wikipédia 9535 tout discours de sortie nourrit immanquablement la sortie 9536 Tout vous expliquer est difficile. 9537 J’essaie de bien tout vous expliquer. 9546 Lequel {{viendraient}} nous donner des leçons ? 9547 Laquelle choisir ? 9548 Lequel manger ? 9558 tu vois, c’en {{étais}} trop pour elles. 9559 cet homme, perdu dans ses pensées, allait {{c’en}} {{faire}} du souci. 9560 C’en était malsain. 9561 C’en devenait trop. 9576 Elle {{conquis}}. 9577 Elle {{finis}}. 9578 Elle {{pâlis}}. 9579 {{Elles}} {{donne}} des leçons. 9580 {{Elle}} ne nous {{croient}} jamais. 9581 {{elle}} {{sont}} parties. 9582 {{elle}} ne {{sont}} 9583 {{elle}} {{sont}} partis. 9584 elle {{demeures}} 9585 elle {{mangeras}} 9586 elle {{fus}} partie 9593 Mieux {{vaux}} ne rien dire. 9594 Mais là-bas mieux {{valais}} ouvrir sa gueule que se taire. 9603 Personne ne {{peux}} me le dire. 9604 Rien ne {{sers}} de courir 9605 Rien n’{{arrives}} sans raison 9606 Rien, en ce qui le concernait, ne {{pouvais}} le ramener à la raison. 9607 personne n’en {{parlent}} 9608 aucun d’entre nous n’{{as}} donné 9609 aucun ne {{vas}} là-bas 9610 nul ne {{sais}} que faire 9611 nulle n’{{iras}} là-bas 9612 nulle femme ne {{saurais}} le faire 9613 nul homme ne {{sauras}} s’y prendre 9626 un des membres présents au conseil {{demandent}} un vote à bulletin secret 9627 une des femmes de ce conseil ne {{céderaient}} jamais au chantage. 9628 l’un des chants les plus diffusés pendant la Révolution culturelle 9636 manger {{fais}} grossir. 9637 boire immodérément {{nuis}} à la santé 9653 La {{N.S.A.}} {{espionneras}} toujours tout le monde 9654 La suspicion envers les élus {{accroissaient}}… ->> accroissait 9655 Le chien n’{{es}} pas mort. 9656 Ce roman-là de Jean-Paul Sartre {{es}} passionnant. 9657 La Corée {{peux}} gagner. 9658 La Corée ne {{pourras}} pas gagner. 9659 une hausse de 2 % {{satisfais}} tout le monde ->> satisfait 9660 L’homme y {{donnes}} 9661 Le chien y {{viens}} ->> vient 9662 L’homme le {{deviens}} ->> devient 9663 La femme la {{prends}} ->> prend 9664 Le feu nous {{donnes}} chaud. 9665 tout le monde {{prends}} ses aises ->> prend 9666 J’aimerais aussi que mon problème {{sois}} réglé. ->> soit 9667 La proscription de nager {{pourraient}} nous porter préjudice à long terme ->> pourrait 9668 L’hypothétique nouveau président 9669 une majorité de garçons voient mal comment faire 9685 mon chat {{sautes}} 9686 cette fille {{bouffes}} comme mille 9687 cette marchande {{marchandes}} 9688 la marchande {{marchandes}} 9689 la chatte {{finis}} 9690 le chat {{finis}} 9691 une crise {{violent}} 9692 un cri {{violes}} 9728 Caroline, quand l’heure viendra, {{décideras}} de la conduite à tenir. 9729 ceux-là, dans tous les cas de figure et dans tous les coups ratés, {{comprenais}} mal pourquoi on leur en voulait. 9730 Lui, quand il y pensait, en {{arrivai}} à chaque fois à la même conclusion. 9731 Elle, ici et dans tous les cas de figure, {{veux}} toujours en faire plus. 9732 Le total de cette opération, contrairement à ce qu’on pense, {{équivaux}} à au moins trois d’entre eux. 9733 {{j'}}ai signalé que {{j'}}essayais de regrouper les paragraphes. (Tests avec apostrophe droite.) 9750 nous {{donné}} trop de considération 9751 nous vous {{donnerez}} trop de considération 9752 nous qui {{somme}} si savants 9753 nous qui {{mourront}} pour toi. 9766 vous {{donné}} du bonheur 9767 vous lui {{donner}} du temps 9768 vous qui {{avançait}} dans la nuit comme des ombres furtives 9783 les hommes et les femmes, qui sans un bruit, sans une parole amère, {{continuerons}} leur tâche n’en seront pas plus récompensés. 9784 il était dit que cette femme et son frère {{promènerez}} leur chien à cette heure de la journée. 9785 cet homme et cette femme {{pouvez}} y parvenir avec de la persévérance 9786 Comme on lui disait que vous-même aviez déjà consulté le notaire 9787 ce sont des terroristes et ça ne nous arrivera pas à nous, qui n’avons rien à nous reprocher 9788 mes supérieurs et moi-même avons pris la décision de ne pas vendre 9789 Ni lui ni moi n’avions mangé 9790 Mon épouse et moi-même avons toujours dit 9804 {{Ils}} {{vienne}} souvent. 9805 Ils ne m’{{attends}} pas. 9806 {{Ils}} vous le {{donne}}. 9814 Ceux qui {{chante}} toute la journée… 9815 Celles qui {{pense}}. 9824 lesquels {{devienne}} des ennuyeux incomparables. 9825 Mais parmi les millions de causes à défendre, lesquelles choisir ? 9839 {{elles}} {{avance}} rapidement sur ce projet 9840 {{Elles}} n’y {{comprenne}} rien 9841 L’expérience sensible qu’il nous restera bientôt d’elles est à peu près 9849 ces gens-là ils {{on}} {{raison}} plus souvent que la plupart des gens. 9850 Ils soutiennent ceux qui {{on}} {{tant}} de raison d’être en colère. 9858 celles-là {{on}} {{vraiment}} un problème avec la religion. 9859 j’ai, tu as, ils ont, elles {{on}} 9860 Or parmi celles-ci on trouve typiquement d’un côté les structures 9875 la plupart des hommes {{vienne}} 9876 La plupart {{admet}} 9877 beaucoup {{vienne}} 9878 d’aucuns {{pense}} que c’est faux 9879 beaucoup qui ne {{pense}} jamais à rien, mais qui ont quand même des avis sur tout. 9880 beaucoup entre la peste et le choléra. 9888 certains {{prenne}} leur temps 9889 Plusieurs qui {{pense}} que c’est une arnaque se sont quand même trompés. 9903 Les abstentions {{est}} présumée manifester un défaut d’opinion marquée 9904 Les cours de culture générale nous {{apporte}} de l’ouverture d’esprit. 9905 Les hommes ne le lui {{pardonnes}} pas. 9906 Les infirmières à mi-temps ne {{travaille}} pas dans cette aile. 9907 les données, en quantité plus que suffisante, {{indique}} que… 9908 Ses « chiens » {{coure}} sur ma pelouse. 9909 Les hommes comme celui-là {{mange}} comme deux. 9910 les récompenses distribuées à parts égales {{était}}… 9911 Les États-Unis d’Amérique se {{compose}} de 50 états. 9912 Les enfants en {{manges}}. 9913 Les ombres la {{donnes}} 9914 Les grands hommes politiques 9915 les charmantes petites mines de toutes les jeunes filles 9916 Les pauvres petites dames sont folles 9917 Les entrepreneurs ont {{cherchaient}} la reconnaissance sociale 9918 le lien entre les agences de renseignement et ces mêmes entreprises pouvait reposer sur des activités de surveillance à proprement parler. 9930 Des hommes {{arrive}}. 9931 des femmes qui {{conduise}} la marche du monde. 9940 mes filles {{passe}} ce matin 9941 vos filles {{passes}} ce matin 9949 les grands {{danse}} 9950 les filles {{passes}} ce matin 9951 les marchands {{marche}} 9952 les marchands {{plie}} 9953 les marchands {{paye}} 9954 les marchands {{marchande}} 9955 les marchandes {{paie}} 9956 les marchandes {{marchande}} 9957 les chattes {{finis}} 9958 les chattes {{manges}} 9959 les chattes {{danse}} 9967 certains hommes {{marchandes}} sans cesse 9975 certaines femmes {{danse}} beaucoup 9987 Quel que {{sois}} son passe-temps, il y consacre trop de temps. 9988 Quels que {{soient}} le feu utilisé. 9996 {{Quels}} que soit leur problème, ça n’en finit jamais. 9997 {{Quelles}} que soit leur voiture, elle tombe constamment en panne. 10006 Quels que {{soit}} les salopards qui ont fait ça. 10007 Quels que {{sois}} les chaussures que je mets, elles me font mal aux pieds. 10015 {{Quel}} que soient les avantages reçus, ce n’est pas assez. 10016 {{Quelle}} que soient nos problèmes, on en parle toujours trop. 10031 Marc {{arrives}} demain. 10032 Paul ne {{viens}} pas demain. 10033 Marc Aurèle {{étaient}} l’empereur des Romains. (Pas de trait d’union sur Marc Aurèle.) 10034 Arthur D. parvient à… 10035 Les fondateurs pionniers de l’Internet n’avaient pas prévu 10036 les compteurs Geiger ne détectent pas le polonium 10037 Des femmes de l’administration Obama y racontent qu’elles ont constaté qu’il leur arrivait régulièrement de ne pas être invitées 10048 Samantha et Eva {{viennes}} demain. 10049 Samantha et Eva leur {{décrive}} une leçon. 10060 les possibilités qu’{{offrent}} le chien 10061 les possibilités que {{donnent}} le chien. 10062 Où {{vas}} l’homme ? 10063 de la même façon que survivent le swing ou le latin. 10064 en proportion des efforts que requièrent son entretien et son exploitation 10065 une crainte aussi que renforcent son éloignement et le protocole compliqué 10066 à l’époque de Mansur que grandissent la place et le rôle de… 10067 où vivent la majorité des immigrés et des enfants d’immigrés 10075 D’où {{vienne}} les hommes ? 10076 Comment {{danse}} les femmes ? 10083 Qu’est-ce que tu crois que {{deviens}} réellement, immanquablement et subitement cet homme après une telle dérouillée ? 10084 ces sciences, ces religions, ces philosophies ne sont que contes destinés à nous donner l’illusion de la connaissance. 10091 peu importe ce que tu crois du lieu où l’{{abandonnerais}} ce salopard… 10132 {{mangé je}} {{ça}} avec dégoût ? 10133 {{viendrais je}} à la fête ? 10134 {{Seras tu}} là ? 10135 {{prend on}} le temps d’y réfléchir ? 10136 {{vient elle}} souvent ? 10137 {{viennent elles}} souvent ? 10138 {{retrouverons nous}} enfin la tranquilité ? 10139 Mais {{soutiendrez vous}} cette proposition ? 10140 {{Viendront ils}} demain ? 10141 je ne comprenais pas pourquoi c’était elle qui était punie et que personne ne parlait de celui qui avait fait ça. 10149 {{Vas}}-je ->> Vais 10150 {{Prit}}-je ->> Pris 10151 {{prix}}-je le temps d’y parvenir ? Oui. 10159 {{Peut}}-tu ->> Peux 10160 {{peu}}-tu revenir chez moi ? 10170 {{Peux}}-il ->> Peut 10171 {{Attaques}}-t-on ->> Attaque 10172 {{Prends}}-elle ->> Prend 10173 {{Menthe}}-t-elle souvent ? 10174 {{viennent}}-{{il}} demain ? 10175 Le moteur choisi convient-il ? 10183 {{Prendront}}-nous ->> Prendrons 10184 {{Attendront}}-nous le train ->> Attendrons 10192 {{Attaquait}}-vous ->> Attaquiez 10193 Elle a de nombreux rendez-vous ce matin. 10194 êtes-vous là ? 10204 {{attaquant}}-ils ->> attaquent 10205 {{prendrons}}-elles un verre avec moi ? 10218 {{Ait}}-il arrivé à ses fins ? 10219 je n’{{avais}} pas parti avec eux. 10220 Avais-je partie liée avec lui ? 10221 il {{avait}} parti. 10235 J’{{aimerai}} savoir ce dont il retourne. 10236 dans tous les cas j’{{aimerai}} ne rien savoir 10237 Je {{voudrai}} qu’il soit déjà là. 10238 J’aimerai ces cours-là autant que les autres. 10239 J’aimerai la danse et la musique, puisque vous l’exigez. 10250 J’{{aurai}} aimé nous offrir ce magnifique cadeau. 10251 j’{{aurai}} voulu être un artiste. 10252 j’{{aurai}} préféré ne pas avoir à l’entendre. 10253 Quand j’en aurai fini avec eux, vous aurez du mal à les reconnaître. 10254 Quand j’aurai fini ce boulot, je ne sais pas ce que je ferai. 10255 Quand j’aurai soif et faim, je m’arrêterai. 10268 Si Pierre {{avancerait}} sa voiture de quelques mètres, ça nous permettrait de passer. 10269 s’ils ne {{mangeraient}} pas tous les jours, ils seraient moins gros. 10279 dès qu’il le {{voie}} 10280 donnant à entendre qu’il avait l’intention de violer Laura dès qu’il en aurait l’occasion 10291 Il suffit qu’il {{court}} plus 10292 Je veux qu’il {{finit}} son repas. 10293 quoi qu’il en {{conclut}} 10294 Je ne veux pas que tu {{es}} des ennuis 10295 Nul doute qu’elle nourrira à brève échéance la haine de demain à notre égard. 10296 Je ne doute pas qu’ils réussiront leur mission. 10297 Je me doutais bien qu’Apple pourrait marcher 10298 il ne fait aucun doute qu’Amazon le sait. 10299 quoi que nous autres hommes ayons pu faire 10306 à condition qu’il {{finit}} son boulot. 10318 Il {{ait}} parti. 10319 Il en {{conclue}} qu’il a eu raison. 10320 j’en {{aie}} marre 10321 j’{{aie}} faim 10331 Après qu’il {{ait}} allé 10332 Après que Paul {{ait}} mangé son repas. 10333 Après qu’il {{soit}} parti, il plut. 10337 L’homme sur le bateau de Patrick {{viens}} de temps en temps {{mangé}} chez moi. 10338 Ces marchands {{passe}} leur temps à se quereller. 10339 Ils jugeront en toute impartialité de ce cas {{délirante}}. 10340 Ils sont de manière si étonnante et si admirable {{arrivé}} à ce résultat… 10341 Les tests grand public de Jean-Paul {{montre}} des résultats surprenants. 10342 Ils ont à plusieurs reprises {{perdus}} leur sang-froid. 10343 Ces attaques à main armée {{donne}} la chair de poule. 10344 Réfléchir à tête reposée {{prends}} du temps. 10352 Du sable fin grippe les rouages (accord avec ce qui précède). 10353 Du monde noir sortent les envahisseurs (accord avec ce qui suit). 10356 Ça a l’air de t’aller. 10357 Et je m’en sors. 10358 C’est à chacun d’entre nous de suivre le modèle d’Amos. 10359 C’est toi qui voulais y aller. 10360 je ne suis qu’une joueuse en robe de soirée. 10361 Tu ne fais qu’aggraver les choses. 10362 Que veut-il ? Vous parler du boulot. 10363 La question, c’est qui est au courant. 10364 Ce pourrait être la fin. 10365 Tu t’en es tiré. 10366 à l’annonce d’un nouvel impôt – très souvent prétexte à… 10367 la voix mystérieuse de l’eau qui court et chuchote le long du bateau. 10368 Nous agissons au jugé. 10369 les fêtes battent leur plein. 10370 Pourquoi tu me dis tout cela ? 10371 La prochaine fois sera la bonne. 10372 Ainsi soit-il. 10373 Allez le lui dire. 10374 Il y a un siècle, les nouveaux riches étaient décriés par ceux qui avaient hérité leur argent. 10375 Les entrepreneurs ont cherché la reconnaissance sociale en se faisant passer pour des rentiers. 10376 Aujourd’hui, la relation a été inversée : les rentiers et les héritiers se présentent comme entrepreneurs. 10377 Ils prétendent avoir gagné leur revenu qui n’est que prélevé. 10378 Ils s’en sont aperçu. 10379 Elles s’en sont donné les moyens. 10380 T’en fais pas pour ça. 10381 T’es à ça de te faire virer. 10382 On s’en fout de qui c’est. 10383 que c’en était assez, en somme. 10384 Ce à quoi nous avons assité, c’est un déluge de sornettes. 10385 En Dordogne, la nouvelle réplique de la grotte reproduit fidèlement l’originale. 10386 Les candidats se réclamant du général de Gaulle se multiplient. 10387 On voit au passage le degré de connaissance qu’ont les journalistes de la campagne de Trump 10388 une majorité de contestataires s’en sont pris à elle 10389 Qu’a à cacher Patrick ? 10390 Ils les ont fait courir. 10391 Tu les as fait manger. 10392 Les mille et une nuits. 10393 Ceux à qui on refuse de donner une réponse. 10394 ceux qui ont refusé de participer à cette mascarade. 10395 Une lueur parfois çà et là vous parvient. (Brand, Henrik Ibsen) 10396 réunion des dirigeants… qui avaient à cette occasion invité Bill Gates. 10397 Je suis contente d’avoir connu ça. 10398 comprendre ce que “être” signifie. 10399 J’étais sublime. 10400 J’étais prise de vertiges. 10401 La date de dépôt limite des épreuves et des fichiers est fixée au 30 septembre. 10402 qui s’étaient avancés jusqu’au Main 10403 Pose ça là ou je fais un malheur ! 10404 Je me suis senti très mal. 10405 La prise de son était difficile. 10406 Ce changement de ton prit tout le monde par surprise. 10407 Il renonça à faire et à le faire 10408 et, les ayant reçus, elle pensa 10409 l’herbe que la faux a couchée jaunit vite. 10410 Il a juste besoin de comprendre pourquoi ce garçon en est arrivé là et pourquoi il s’en est pris à lui. 10411 Elle prit une pose lascive. 10412 Cela a trait avec l’histoire complexe d’une nation qui a été prise en étau 10415 par le léger tissu de rayonne qui les protégeait en ce moment. 10418 Un moteur à cylindrée fixe 10421 Dans la poussière et les plâtras, 10424 se produire sur scène le 29 mai prochain 10425 ces avantages ne sont somme toute pas assez importants 10426 les différents partis politiques 10427 Certains ont encore du mal à y croire. 10428 Élus, chefs d’entreprise, professionnels de l’éducation, représentants des institutions, nous avons besoin de vous. 10432 J’ai cours à présent. 10433 Les mois d’après avaient été calmes. 10434 Quelque temps après eut lieu la séance de réception 10435 c’est-à-dire aux peuples dispersés suite à la guerre 10436 la violence du coup porté 10437 à vous qui avez faim, 10438 Vous, qui avez faim, 10439 Les chaudes effluves du soleil. 10440 je reçois pour chaque botte quelques cents. 10441 Ils vinrent un à un voter la mort. 10442 Dans mon rêve, j’appelais ça… 10443 J’étais dans une auberge. 10444 les enfants de ces populations apprenaient à parler l’anglais et même à le lire. 10445 Ils sont fous, c’est-à-dire déments 10446 J’y viens. 10447 J’en reviens. 10448 d’une manière un petit peu abusive et très réductrice. 10449 il est du devoir de la société civile d’analyser ces accords 10450 au bas de laquelle est aménagé un imposant portail à arc brisé en pierre de taille. 10451 Buenos Aires 10452 Quel est l’impact de ces problèmes dans ce cas particulier 10453 La partition « C: ». 10454 sur les quelque trois cents naufragés 10455 Ils eussent bien voulu pouvoir 10456 un lot de dés qu’on peut se procurer 10457 la sécurité au niveau de l’escalier empêche quiconque d’accéder à l’étage 10458 elle en avait eus 10459 Combien en as-tu eus ? (Note : les grammairiens ne s’accordent pas sur l’accord du participe passé précédé de “en”.) 10460 Tu reviens quand à Paris ? 10461 Tu restes jusqu’à quand à la maison ? 10462 L’une des pires 10463 une imprimante laser 10464 c’est pure imagination 10465 Bien entendu, elle a très peu de chances de le retrouver 10466 il s’acquitte de sa part 10467 Le cavalier, abusé par notre retraite, avait baissé sa garde 10468 n’y en aurait-il pas plusieurs 10469 je ne sais rien là-dessus, même pas qui s’en était occupé 10470 ne surtout rien amener 10471 Ce qu’ils sont influence leur regard sur moi 10472 Une demande de leur part un minimum justifiée. 10473 Au stator, comme le montre le profil ci-dessus, l’inducteur est tétrapolaire. 10474 Cette hypothèse est tout à fait valable, comme le montre le graphe ci-dessous. 10475 qu’il fut sans peine étouffé dans l’œuf 10476 durant les tout premiers jours 10477 un dîner aux chandelles prévu depuis longtemps 10478 la beauté physique plus que la compétence 10479 sans oser se l’avouer 10480 il se l’imagine 10481 l’encyclopédie naturelle puis la connaissance 10482 Tout est affaire de dosage 10483 il avait trouvé la piste d’une des deux bêtes 10484 la basilique de la Lune débordant de lumière 10485 Me voici. 10486 Si je trouve. 10487 Toi seul seras sauvé avec tout ce qui sera dans l’Arche 10488 La portée d’une variable en JavaScript est comme l’outil 10489 La portée d’une variable est comme l’outil 10490 Il y a en un parmi nous autres 10491 Il avait été juge pendant vingt ans. 10492 Faisons-les tous périr. 10493 épouser une fille de roi pour se faire une alliance 10494 Éric et probablement Bénédict seraient partants. 10495 Il doit toujours être dans les environs de son église. 10496 c’est ce que vous en faites ! 10497 des travaux publics conçus suivant un plan 10498 Bible : 1 Rois 10499 Bible : 1 Corinthiens 10500 Bible : 1 Thessaloniciens 10501 Quelle est la chance d’y parvenir ? 10502 Tout montre cependant que les constructions 10503 jusqu’au ixe siècle 10504 Quelles explications pouvez-vous donner à cela ? 10505 jusqu’à Tarifa et Sidonia 10506 Tout flambe à la fois. 10507 Vivre dans la ouate. 10508 Quel sens a cette affirmation pour nous ? 10509 Avec quelle facilité 10510 Une attraction au moins égale à 10511 le fossé entre les uns et les autres n’était ni large ni profond. 10512 Dès le ixe siècle 10513 la formation d’une peau élastique qui se rétracte 10514 notre père qui es aux cieux 10515 Où que tu sois je te retrouverai 10516 L’équitation de travail est une technique de monte traditionnelle… 10517 Ils ont forme humaine 10518 une altitude de 1000 m environ 10519 le nombre d’or 10520 nous ne nous étions jamais fait prendre 10521 Elle comprend la couche se trouvant sur le plateau. 10522 Je m’imagine que les quelque cinq cents personnes qui… 10523 parmi les quelque 3 millions de personnes 10526 Ceux parvenus là 10527 Des termes peu amènes. 10528 Toute l’équipe d’audit peut consulter la fiche. 10529 Beaucoup a été accompli 10530 Ces données sont soit fournies par…, soit par… 10531 Y a-t-il une question que tu aurais souhaité qu’on te pose ? 10532 Lire, ce n’est pas épeler. 10533 Ce n’est pas manger qui fait grossir. 10534 Je sais ce qu’est aimer. 10535 Je sais ce que n’est pas aimer. 10536 Qu’ont fait les chercheurs ? 10537 Ce travail est colossal, il ne doit jamais être tenu pour achevé. 10538 la succession des événements telle qu’on se la rappelle 10541 Quelles que soient les femmes 10542 Quels que soient les hommes 10543 Quel que soit ce chien 10544 Quelle que soit cette garce 10545 Vous tous qui portez des charges. 10548 et que la toucher portait chance… 10549 On y supplée par un tableau. 10550 que le Verbe de Dieu peut seul conférer 10551 Ça ne vaut pas le coup de rester enfermés. 10552 Ce qui faisait de quelqu’un un homme. 10553 Le secret, mon ami, est de savoir écouter. 10554 Ces substances ont été, du moins amollies au point de conserver l’empreinte. 10555 Cette irrationalité n’est pas si dramatique que semblent le penser les plus rationalistes. 10556 4 SIEMENS 10557 Me Assis n’est pas ici. 10558 Quelle merde … puante. 10559 Pour savoir qui a tort, qui a raison. 10560 Ce matin, j’ai ES et c’est tout. 10561 Les étais posés au sol. 10562 Mais ces petits étais ne suffisaient pas. 10563 Celui qu’il brûle de détruire une bonne fois pour toutes. 10564 Hélas, vous vous en doutez maintenant. 10565 Il n’aurait de cesse de la renverser ou de la contourner. 10566 Sourde à toute parole y compris de la part de ceux qu’elle privilégiait 10567 Pareille solution ne pouvait hélas être réitérée. 10568 Je crois que t’aimeras ça. 10569 Je mangeais. 10570 et encore ça j’ai un peu tendance 10571 Le CE semble cependant prendre… 10572 Je suis déçue de ne pas avoir les moyens de régler ça seule. 10573 Dents de requin… 10574 Les personnes qui sont avec lui voient. 10575 Beaucoup de monde se rassemble. 10576 Comment il l’a appris. 10577 Comment voulez-vous qu’à vingt-deux heures trente un cadavre 10578 Le porteur de la télécommande pas plus que la créatrice ne sont revenus nous donner des ordres. 10579 j’espère que vous aurez le temps de tout lire 10580 Nous avons partie gagnée. 10581 de a à z 10582 de A à Z 10583 Le point S′ est sur la droite. (Il s’agit ici du caractère “prime”.) 10584 le ou les élément(s). 10587 rien de dérangé 10588 Au début on le traite de dérangé 10589 il vient… puis repart 10590 une photo noir et blanc 10591 pour ce faire, il faut partir 10592 une canadienne fourrée de poils de mouton 10593 ils sont en bonne santé physique 10594 elles sont en bonne santé mentale 10595 dans tout ce putain d’univers 10596 la leur n’est pas correcte 10597 qui doivent leur être livrés. 10598 en tout et pour tout ces trois-là 10599 De temps en temps 10600 De loin en loin 10601 allez au 10 avenue Constantin 10602 Ils avancent côte à côte 10603 Un type a l’air de beaucoup apprécier. 10604 Pour le soldat, dépouiller le paysan ou le colonel n’est pas voler. 10605 sous forme de chaleur 10606 avant sa dépose, il sera possible de faire les relevés nécessaires 10609 monarchie de Juillet 10610 révolution d’Octobre 10611 des cheveux blond platine 10612 L’homme qui se tenait devant lui lui présenta une bouteille. 10613 Était-ce cela d’avaler de l’huile ? 10614 Il y avait quelque chose fiché dans la prise. 10615 jusqu’à chez nous 10616 de chez eux à chez moi 10617 Les histoires de chacun apparaissent au fil des conversations. 10618 et bien des hommes y ont succombé 10619 La sortie était droit devant lui. 10620 avec lesquels j’arrive à vaincre 10621 L’erreur fut pour moi seul. 10622 les valeurs limites ne peuvent pas être réglées dans une plage négative. 10623 la pensée que j’ai décidé d’expliquer 10624 les objets que j’ai essayé de faire 10625 la phrase que j’ai essayé de lire 10628 après c’était la restauration… 10629 l’une saisissant la main d’albâtre rigide 10630 certaines saisissant la main d’albâtre rigide 10631 si on descendait on inscrivait sur le carton 10632 Erika est prise par surprise 10633 les lettres que j’ai voulu envoyer 10634 les lettres que j’ai voulu me donner 10635 les lettres que j’ai voulu t’envoyer 10636 si on l’empêchait il devenait 10637 Sa petite amie et lui, tous deux ivres, se sont révélés incapables d’écrire. 10640 m’oblige à toujours vendre 10641 m’oblige à souvent perdre 10644 il croyait qu’elle seule pouvait réussir 10645 un coefficient (C) de révision donné par la formule. 10646 Il eut ordre de s’emparer de tous les insurgés 10647 Annie, qui, entre deux danses, buvait beaucoup 10648 Il ne pouvait s’empêcher, entre deux jurons envers sa sœur 10649 Il devenait nerveux au fur et à mesure qu’il cherchait 10650 Il résista à l’envie qu’il avait de… 10651 elles sont bleu saphir 10652 elles sont gris anthracite 10653 ses plumes noir de jais 10654 La pierre utilisée était gris perle 10655 Une odeur de grillé réveilla la jeune femme 10656 Sous peine de voir l’allégeance de certains changer, il devait 10657 Elle espéra vainement ne rien s’être cassé. 10658 Les ayant vus entrer 10659 sans parti pris 10660 Fiona ou Deirdre parviendront à en apprendre plus 10661 les flots noir d’encre 10662 ses yeux châtaigne 10663 Ils avaient tous deux entendu son cri. 10664 Si Pierre et elle étaient déjà fiancés, ils devraient 10665 Les gens dépourvus de pigmentation étaient 10666 Je n’ai pas très envie de m’étendre sur le sujet 10667 Elle reconnut la peste qui tentait elle ne savait trop quoi. 10668 Un tentacule plus court que les autres l’agrippa. 10669 Il avait de toutes ses forces tenté de la faire échapper au danger. 10670 Il convient 10671 Conf. Alchimie, op. cit. 10672 et tout expliquer 10673 L’or a besoin tout d’abord d’être préparé 10674 ces ombres sont quant à elles habitées. 10675 les sept figures 10678 01 64 21 39 10681 Quelques kilomètres plus à l’ouest. 10682 Nous n’avons plus cours. 10683 Sa manière aigre-douce. 10684 Une interprétation et une application conformes aux exigences du droit communautaire. 10685 Ils font tous deux partie. 10686 Tu travailles pas mal. 10687 Je me savais pas assez malin. 10688 J’étais quelqu’un d’intelligent et de cultivé. 10691 Elle se livre à des interprétations tantôt extensives, tantôt restrictives, de la loi. 10692 Il faudrait encore déterminer le contenu du droit qu’une telle analyse lui confère. 10693 Une telle analyse m’en confère. 10694 Quant à présent… 10695 pour la manger 10696 sans les lire 10697 excepté les manger 10698 vendredi 13 juin 2014 10699 mardi 13 juin 2014 avant J.-C. 10700 mardi 13 juin 2014 av. J.-C. 10701 Quelles garanties leur avez-vous offertes ? 10702 pour les toucher 10703 Le législateur, adoptant malgré tout les dispositions envisagées, 10704 Entendue matériellement, la soustraction ne peut porter que sur un objet mobilier. 10707 500 m en 2 h (option : lettres isolées). 10708 ces créatures hybrides 10709 sur la nécessité d’explorer 10710 en les accompagnant avec des percussions 10713 La première équipe les prévint par radio. 10714 L’une d’entre elle saute haut. 10715 Le désir ardent du pouvoir. 10716 Ni les Anciens ni les Modernes Philosophes n’ont jamais fait autre chose. 10717 Les méchantes Philosophes n’ont jamais fait autre chose. 10718 Les mises perdues d’avance. 10719 Écouter n’est pas opiner. 10720 Je n’ai jamais rien mangé de souillé ni d’impur. 10721 Elles portent toutes des chapeaux. 10722 Un fusil longue portée. 10723 Certaines choses devraient changer. 10724 C’est peine perdue. 10725 Je le quitte énervée par son hypocrisie. 10726 Les manger sera mon bon plaisir. 10727 Mais elle les fait plus petites. 10728 Vient le temps de partir. 10729 C’est ce monsieur qui… 10730 Antonio Banderas. 10731 Les 4 juillet. 10732 Elles se révèlent de feu une fois brisées les barrières. 10733 Une assistance s’est assise par terre, certains restant debout. 10734 Serrer la main de John et de Barbara qui furent étonnés qu’ils se mirent à pleurer. 10735 L’échec est dû à une erreur de calcul. 10736 L’armée est sur le point de partir. 10737 Une partie est due à une erreur de calcul. 10738 La frustre temporalité que connaissent la plupart de mes frères et sœurs. 10741 Mise à jour gratuite. 10742 Les lettres que tu m’as envoyées. 10743 Je n’ai cure de ce que les gens pensent. 10744 Marie est mal à l’aise. 10745 Il vit que le secours inespéré. 10746 En tous sens. 10747 Savez-vous ce qu’auraient pensé vos parents ? 10748 Les pierres sont marron et grises. 10749 4.2.3 Écriture des nombres complexes. 10750 Hilda est comme elle est… 10751 La première fois que j’ai tenté l’expérience. 10752 Glacier du Trient et glacier des Bossons. 10753 Cf. rapport, cf. rapport. 10754 Chap. douze, chap. douze. 10757 J’ai l’impression que tu as compris. 10758 Sa spécificité se situera plutôt dans la façon qu’elle a d’approcher la matière. 10761 La pommade qu’elle a voulu me passer. 10762 Des gens qui ont réservé leur place ne se présenteront pas au jour et à l’heure dits. 10763 La procession reprit sa marche sans qu’il y eût rien de changé dans son cérémonial. 10766 Celui de textes dont nous ne percevons pas la beauté est douloureux… 10767 Elle souriait, comme si le vent et elle se comprenaient fort bien. 10768 Les étagères qui équipent ces chariots sont trop petites pour recevoir certains formats. 10769 Les voyageurs qui attendaient la correspondance furent réunis à une table ronde. 10772 Ce sont Tesla et Westinghouse qui emportent le contrat du gouvernement américain. 10773 Il fait presque nuit. 10774 J’ai fait le boulot tout seul et après j’ai eu la paix pour écrire tout ça. 10775 Le directeur et toute sa bande installés à la tribune d’honneur. 10776 Le paysage dans toutes les directions est somptueux. 10777 Les hommes accompagnant les tentes sont peu nombreux. 10778 Bravo pour l’évadé, bravo aussi pour ceux qui l’escortaient. 10779 On vit mieux son visage : autour de la bouche, quelque chose de crispé. 10780 Les contours de toutes nos vertus sont tracés par l’adversité. 10781 Trop couvrir la tête est mauvais. 10782 Gravir cette montagne est dangereux. 10783 L’agréable fièvre qui l’avait un moment habitée était tombée. 10784 Nous sommes frère et sœur. 10785 Il s’est interrompu et nous avons tous les deux regardé l’homme aux cheveux gris. 10786 Les jeunes officiels formant l’institut allemand de Paris professaient. 10787 De le faire disparaître dans des sacs-poubelle (dictionnaire 5.0.2). 10788 Pierre, Auguste, Cyprien étaient affalés. 10789 Ces lettres-là, Pierre et elle les lisaient ensemble. 10790 Laisser courir, seul dans la nature, l’un de ses jeunes prisonniers nouvellement arrivé. 10791 Le directeur et toute sa bande installés à la tribune d’honneur. 10792 La réminiscence d’une position de privilégié semblable à. 10793 Elle n’a guère affaire avec l’ascèse. 10794 Elle a déclaré cela excellent. 10795 Si faute il y a, ils ont le droit… 10796 Elle signale la fin du vers ou de la strophe. 10797 Alors, il chargea le marin tête baissée. 10798 Certes, mais entre-temps, des gens de toutes les races sont venus chez nous. 10799 Ni l’air ni l’eau ne sortent d’une amphore scellée. 10800 Ni lui ni son mouvement n’avaient d’argent. 10801 La rime et, en général, la règle acquièrent donc aussi cette fonction. 10802 Ce furent les seules nouvelles de moi qui parvinrent. 10803 Par petits groupes, qui ne ralliaient pas toujours le camp mais s’agrégeaient en bandes indépendantes. 10804 Nous avons rencontré une terre plus grande que l’Europe et l’Afrique réunies. 10805 Poétiser est innover, et on n’enseigne pas à innover. 10806 En voyant celui-ci serrer soigneusement le paquet … 10807 Les aérothermes ont une prise d’air neuf réglable. 10808 Où sont Papa et Maman ? 10809 Couper en tout petits morceaux. 10810 Celle ayant le masque le plus long est sélectionnée. 10813 Il cherchait à m’écarter de la scène, quel qu’en soit le moyen. 10816 Une police supportant tous ces caractères n’existe pas. 10817 Un lis blanc. (Dictionnaire 5.0). 10818 De la seizième à la vingt-troisième année, à la vingt-cinquième (Dictionnaire 5.0). 10819 Quoi qu’il en soit. 10820 Ses longues boucles noires comme la nuit sautillaient de droit à gauche. 10821 Une de ces cocottes plus arriviste que les autres me poursuivit un certain temps. 10822 Mlle Agathe et M. Sénèque entrent dans la chambre. 10823 C’est une petite brune, un soupçon replète. 10826 J’hésite un moment, pèse le pour et le contre de chaque option. 10827 S’ils eussent été des diplomates, les négociateurs français se fussent moins étonnés… 10828 Allongé sur le lit funèbre à pieds de lion ou de chacal. 10829 Des collines entières sont couvertes d’anémones d’un rouge ou d’un blanc éclatants. 10830 Ils complétaient cet ameublement d’une simplicité et d’une grâce champêtres. 10831 Il était tout en noir, vêtu, comme tous les jours ou presque, d’une chemise et d’un pantalon noirs. 10832 Il faisait l’objet d’une affection et d’une fierté particulières. 10833 Lorsque je me suis tu, le grand type s’est mis à parler. 10834 Par un de leurs sondages pratiqué sur un autre point de la montagne. 10835 Les périodes diurne et nocturne. 10838 La pile électrique de Volta. 10839 Vous allez y résister. 10840 Les hommes qui attachaient leurs chevaux près des baraquements de la Marine avaient ramené leurs montures. 10841 Vues de près, les huttes… 10842 Vue depuis la jetée et la route du bord de mer, la mosquée… 10845 J’aurais bien envie de vous écrire. 10846 Ce sont mille piliers bleus qui l’entourent désormais, comme une cage mystérieuse. 10847 Pour cet exercice, on utilisera la convention récepteur du dipôle R… 10848 Déjà la seizième année ne nous paraît pas tellement différente de l’enfance. 10849 Marie, poussant le landau, fermait la marche à grands pas précipités. 10850 Une vive couleur rose avait envahi ses joues tout à l’heure si pâles. 10851 Il incarne bien le « Mac » écossais de son nom. 10852 Les camionneurs d’Amérique centrale… 10853 Étranger dans ma société, qui ce soir-là était peu nombreuse. 10854 Tous les hommes étaient aux champs, sauf un qui nous parut peu disert. 10855 L’énergie hydraulique, le solaire, l’éolien, la biomasse sont des énergies renouvelables. 10856 L’amour, l’amitié, la vie sont là. 10857 Ce soir-là se présentèrent deux Tadjiks. 10858 Pour serrer la main de John et de Barbara qui furent si étonnés qu’ils se mirent à pleurer. 10859 Le réverbère et le vélocipède et le télégraphe Morse n’auront plus de mystère. 10860 Mlle Agathe et M. Sénèque entrèrent dans la chambre. 10863 Ce n’est maintenant un secret pour personne que nombre des textes de la Bible. 10866 Croire qu’il n’eût fallu que vous tromper pour obtenir plus d’indulgence ? 10867 Oui, ma chère belle, Dieu qui ne voulait que vous éprouver. 10868 Tout à coup, son air et son ton changèrent sensiblement. 10869 Je vous en conjure, mon indulgente amie, écrivez-moi, vous-même, aussitôt que vous le pourrez. 10870 Je vous prie de croire que tous mes soins vous seront acquis, aussitôt que vous le désirerez. 10871 Mais à présent qu’elle est à Paris, qu’elle se porte bien, et surtout que vous la voyez quelquefois. 10872 Ses parents, tout hérissés d’honneur. 10873 Que pour le moment, je suis on ne peut pas moins disposée à vous accorder vos demandes. 10874 Mais de si grands intérêts méritent bien, ce me semble, d’être avant tout discutés et éclaircis. 10877 Et comment l’ont-ils attrapée ? 10878 les écailles du Poisson scintillaient comme des astres d’or. 10879 Jane ni Michael ne le surent jamais au juste. 10880 Les mains de Michael se refermaient sur le vide. 10881 Mme Holmes et le docteur Simpson sortirent. 10884 Avez-vous honte ? N’avez-vous pas honte ? 10885 Avez-vous un certificat de vaccination ? 10886 Avez-vous des nouvelles ? 10887 N’y aurait-il pas un moyen de lever la consigne ? (1) 10888 N’y aurait-il pas une erreur ? 10889 Par où aurait-elle passé. 10890 Ils sont bien sûr ressortis indemnes de la tragédie. 10891 Dans un anglais impeccable. 10892 Le rendez-vous que nous nous sommes donné. 10893 Le contact avec la structure (cloisons…) doit être évité. 10894 Crier comme un perdu. 10895 Je ne pouvais simplement pas laisser ça arriver. 10896 La DG emploie 295 personnes dont 27 français. 10897 Les as-tu enfermés ? 10898 Il lui dit d’un ton radouci 10899 1/2 journée. 10900 La viande de bœuf saumurée. 10901 Une nouvelle approche des candidatures suivantes qui se veut « basée sur les preuves ». 10902 Des interfaces homme/machine. 10903 L’application de ces modèles illustre… 10904 Une allée sablée. 10905 Vinaigre le plus noblement distillé. 10906 Un homme plus grand que les autres m’a offert… 10907 Une de ces cocottes plus arriviste que les autres me poursuivit un certain temps. 10910 La vérité des faits énoncés… 10911 Voir la déclaration sur l’honneur ci-jointe. 10912 Avec Christine et moi qui tenions nos quarts… 10913 Les observateurs de l’ONU normalement présents… 10914 Il s’est rendu chez l’homme qui devait le payer, pour voir celui-ci s’enfuir par la fenêtre. 10915 Tous les conducteurs d’une voie sont mis en série par leurs connexions aux lames du collecteur. 10916 Les traîtres eaux de la Patagonie australe (dictionnaire 4.10). 10917 Il part reconquérir le cœur de sa bien aimée. 10920 Il lança la pierre droit au but. 10921 Et tout à coup je m’apparais (dictionnaire 4.10). 10922 Des visages couleur caramel. 10925 Tu te crées, Il se crée. 10926 Ils sont un brin surexcités. 10927 Des voyages en car. 10928 Des travailleurs à temps partiel. 10929 Ces don Juan plus rapides que l’éclair. 10930 Des bananes plantain. 10931 Les faits exprimés ci-dessus. 10932 Rien ne se perd, rien ne se crée. 10933 Attendez, fit obligeamment René Char, je vais le calmer. 10934 Ses productions, quelque imparfaites qu’elles puissent être. 10935 La partie nord de la région. (Dictionnaire 4.9) 10936 La partie ouest de la région. (Dictionnaire 4.9) 10937 La partie sud de la région. (Dictionnaire 4.9) 10938 La partie non-fumeur. (Dictionnaire 4.9) 10939 L’empreinte carbone. 10940 De beaux vitraux dont l’un fait allusion à une prophétie. 10941 Écoutez-le ! 10942 Écoutez-moi. Oubliez-moi, épargnez-moi. Épargnez-moi. 10943 Ânonnez-la. 10944 Venez le plus tôt possible. 10945 Toutes les grandeurs électriques d’un circuit sont à la même fréquence. 10946 Deux côtés consécutifs d’un carré sont perpendiculaires. 10947 Je le sais, fit simplement René. 10948 Force nous est de constater… 10949 L’un de ceux-là donne aux pauvres. 10950 Ceux-ci retenus par … 10951 Les vélos avec moteur électrique. 10952 Elles sont de la première et de la deuxième générations. 10953 Des protections antigel. 10956 Attendre longtemps exaspère la plupart des gens. 10957 L’histoire commence il y a longtemps. 10958 Celui-ci étant mort en 1861… 10959 A priori, ces… 10960 Il n’aurait rien tant voulu que de réaliser par son art une émotion aussi poignante… 10961 À Vienne il vit Brahms. 10962 Son aura brillait de tout son être. 10963 Si tu t’es un jour penchée 10964 Elles seraient un jour délaissées : Accord de genre erroné entre jour et délaissées 10965 Dans les bars des marinas (dictionnaire 4.8). 10966 Ils s’en donnent à cœur joie. 10967 Il était encore à moitié endormi. 10968 Les côtes sont dans leur ensemble découpées. 10969 La plus grosse erreur de mes parents aura été de croire 10970 Les licences « Créative Commons »… 10971 Un aspect féodal tempéré par le luxe et le confort modernes. 10972 Ils donnent une somme à un candidat ou une cause particuliers. 10975 Il parle de son « inquiétude passionnée » et de son ‘inspiration tragique ’ (mais son “inspiration”). 10976 Le nez de Cléopâtre, s’il eût été plus court… 10977 Vous avez l’air resplendissantes. 10978 Il s’inquiète pour leur santé. 10979 De quand à quand travailles-tu ? 10980 Écrivent-ils une lettre ? (contournement du bug de Python) 10981 Quelqu’un joue du piano. 10982 Son manque d’expertise lui interdit toute promotion. 10983 Je comptais le lire. 10984 Tous sauf un acceptèrent son plan. 10985 Ils sont légion. 10986 Si vous fussiez venu hier, vous auriez pu le voir. 10987 Des cheveux châtain clair. 10988 Je ne peux pas la manger. 10989 Le canal de Suez. (Dictionnaire 4.7) 10990 Laissez cette boîte là où elle est. 10991 Une chambre avec air conditionné. 10992 Mais, échappa-t-elle… Échappa-t-elle ? 10993 Un rendu 3D. (Dictionnaire 4.7) 10996 Les questions sont centralisées puis relayées… 10997 Le désappointement du devoir contrarié. 10998 Ne voilà-t-il pas ce qu’on appelle un signe des temps ? — (Guy de Maupassant, En rôdant, 1883) 10999 Mes membres se sont déraidis. 11000 Pour qu’ils soient de nouveau complets. 11001 Pourquoi vous eussé-je questionné sans motif ? (Dictionnaire 4.5) 11002 Un débarras (Dictionnaire 4.6) 11003 Je l’ai tout à fait oublié. 11004 La quasi-totalité. 11005 À la diable (sauf si en début de phrase : bug de Python) 11006 À la papa (sauf si en début de phrase : bug de Python) 11007 Les polluants comme celui-ci viennent principalement de la combustion de l’essence. 11008 Évite-nous le problème (contournement du bug Python) 11009 Ces ressources, une fois brûlées, ne seront plus jamais disponibles à l’échelle des temps humains. 11010 Une exposition plein sud du bâtiment. 11011 À la longue qualifié… 11012 Les enfants peuvent être à la fois jeunes et vieux. 11013 Ses yeux bleu clair et protubérants… 11014 J’attendais je ne sais quel miracle. 11015 Elle seule aurait pu le constater puisqu’elle seule en avait le pouvoir. 11016 Un bâtiment basse consommation. 11017 Le gentil monsieur, qui est grand et beau, peut être un parfait imbécile ! 11018 L’armée est en ce moment victorieuse. 11019 Une petite réserve, mise à l’abri, peut être décisive. 11020 Ses père et mère. 11021 Indiquez vos nom et prénom. 11024 Êtes-vous pour ou contre ceci ? (Bug de Python, semble-t-il) 11025 Calculer l’allocation logement. 11026 Petit souvenir pour René Machin. 11027 Au demeurant, ces messieurs … (dictionnaire 4.4) 11028 Se servant très habilement des menées royalistes (dictionnaire 4.4) 11029 Ils sont autre chose que des sauvages incultes. (dictionnaire 4.4) 11030 Les hors-la-loi. (dictionnaire 4.4) 11031 Ils sont face à face. (dictionnaire 4.4) 11032 Ils sont emplis d’orgueil. (dictionnaire 4.4) 11033 Au levant, un jardin… (dictionnaire 4.4) 11034 Ils se saisissent de lui avant de le frapper. 11035 Ils n’utilisent pas du tout les pieds. 11036 Ils ne le lui permettront pas. 11037 Il sort de la salle située à l’extrémité sud. 11038 Est terminé. Samedi prochain, nous recommencerons. 11039 L’est est de ce côté. 11040 C’est raisonner en chef… (ENFIN !!!). 11041 Lancez-nous dans la bataille. 11042 C’était il y a bien longtemps. 11043 Le IIe siècle. 11044 C’est elle qui me l’a dit. 11045 Quelqu’un peut me le dire ? 11046 C’est elle qui … 11047 Ce sont elles qui … 11048 Le nord est de ce côté, le sud est de ce côté. 11049 Les cours particuliers. 11050 Elle portait plusieurs bagues à ses fins doigts. 11051 Il passe en cour martiale. 11052 Dans vingt et un jours. 11053 Le mille marin est une mesure de longueur … 11054 Il regagna sa chambre seul. 11055 Il prenait ses repas seul. 11056 « Venez vous asseoir, Pierre », dit Patrick. 11057 J’ai été camper dans les Alpes. 11058 C’eût été manquer de réalisme que de penser que… 11059 Écrit dans un anglais facile. 11062 L’eau et le feu suffisent pour l’œuvre entière. 11063 Imitez donc la ruse qu’employèrent les Grecs. 11064 Je suis boulanger. 11065 Je ne lui adresse plus la parole. 11066 Il est plus accroché à elle qu’elle à lui. 11067 Vous pouvez vous fier à ce dictionnaire. 11068 Le grec et le latin sont des langues utiles. 11069 L’Europe et le Japon instaurèrent. 11070 Faudrait-il se demander. 11071 Au maintien d’une industrie. 11072 Il est à la fois grand et intelligent. 11073 Une fois retrouvé, on le soumit à la question. 11074 Au revoir mes amis. Au revoir ! 11075 Toutes choses égales par ailleurs. 11076 Elles sont toutes blanches. 11077 Le ou les cas que vous aurez à traiter. 11078 Pierre nous a procuré un argument de poids. 11079 Du 1er mars 2010 relative au respect des droits. 11080 Le 2 mars 2010 relative au respect des droits. 11081 Ce serait attaquer les droits de l’homme que de ne pas… 11082 Ce serait ignorer. 11083 Autour d’elle se sont réunis tous les désirs ignobles. 11086 Le déclin suite à la guerre… 11087 Malgré qu’il en ait. 11088 Les robots sentinelles. 11089 Fermer les yeux arrête le phénomène. 11090 En elle est contenu le feu. 11091 Après les avoir peintes… 11092 Je t’assure qu’à cette date j’aurai l’argent. 11093 L’horloge indique 16:44. 11094 http://www.site.fr 11095 Il joue un rôle clé. 11096 Au-delà d’une concentration seuil… 11097 Les messages vidéo. 11098 Que nous y allions ou pas dépend du temps. 11099 Ce matin j’ai raté le train. 11100 Le quatre juillet. 11101 Elle a l’air malheureuse. 11102 Selon le bulletin météo, il fera beau. 11103 Les avions volèrent. 11106 Les grêles tilleuls de la place. 11107 Je n’arrive pas à mettre la main dessus. 11108 Passés de mains en mains, les poissons étaient jetés sur la table. 11109 À qui mieux mieux… 11110 Nul et non avenu. 11111 Il est leste pour son âge. 11112 Des maxima, des minima. 11113 Vous ferez la visite de la maison jeudi à onze heures. 11116 Le 18 février, le 12 brumaire. 11117 Elle prononça le nom de son auguste protectrice : l’impératrice. 11118 Il était habitué à suivre ses propres pensées. 11119 Recevez mes plus amicales pensées. 11120 Il en était fier ! 11121 Rien n’indiquait si elle l’avait écouté, ou si elle ne songeait à rien. 11122 Je me lève vers les sept heures du matin. 11123 Les canons ne sortaient pas de leur sinistre immobilité. 11124 Si Dieu l’avait voulu, je serais fils de roi. 11125 Je soussigné X déclare que… 11126 Ses propres convictions. 11127 Autres CONTRÔLES 11128 Quant à eux, je les épargne. 11129 Oh çà ! Ah çà ! Çà et là… 11130 À qui mieux mieux… 11131 Il a l’avenir devant lui… 11132 Le son du canon. 11133 Il chante a cappella. 11134 Les décrets ont force de loi. 11135 Les enfants ont recours au suicide. 11136 Ils ont hâte de vous voir. 11137 Il lui a adressé des compliments. 11138 Boîte aux lettres intérieure 11139 Le cinéma tire à hue et à dia (dictionnaire 5.1) 11140 Il a sauté à pieds joints. 11141 Des yeux vert olive. 11142 Nous convenons en particulier ce qui suit. 11143 La bataille de Monte Cassino (dictionnaire 5.1). 11144 Un trois-quarts de rugby. 11145 Les trois-quarts de l’équipe de rugby. 11146 Je me sens chez moi dans ton chez-toi. 11147 Les ayants droit. 11148 Il sera élu en 2010 maire de la ville. 11149 Il nous a montré le chemin. 11150 Il nous a donné du pain. 11151 Napoléon est né en Corse. 11152 L’Écosse peut être très chaude. 11153 Il s’est exprimé dans un français approximatif. 11154 J’ai mille cent timbres. 11155 Soit idiot, soit débile. 11156 Son adorable sœur aînée. 11157 Ce putain de train. 11158 Écouter est opiner. 11159 Elle se rappelle de moi. 11160 Il se rappelle de me parler. 11161 Je me rappelle de moins en moins mon enfance. 11162 La création de nouvelles infractions illustre une prise en charge du sujet par le politique. 11163 Certains y voient la preuve qu’il a finalement été lâché par son soutien. 11164 Te voilà paré. 11165 une des neuf provinces. 11166 une intoxication en cours peut être diagnostiquée 11167 Les bonnes gens 11168 Il est conseiller municipal. 11169 C’est dans la soirée que ces poursuites avaient été entamées. 11170 Pour faire savoir que cette arrestation a été décidée. 11171 Il remit soigneusement le carreau en place… 11172 La galerie s’ouvrit tout à coup sur une caverne… 11173 Il tomba sur une autre patrouille et assassina le mage en premier… 11174 La voix agaçante de la gamine était revenue la hanter… 11175 Allons y jeter un œil. 11176 On a tous des qualités. 11177 Les femmes portent toutes des noms à consonance étrangère. 11178 Une taille 38 imposée aux mannequins. 11179 Ce putain de temps. 11180 Il a fait la une des journaux. 11181 Le numéro un des ventes de Noël. 11182 Le patron du numéro deux allemand a démissionné. 11183 Je soussigné Pierre Dupont déclare avoir pris connaissance des conditions de ce contrat. 11184 J’ai mille cent timbres. 11185 À qui mieux mieux, à qui mieux mieux 11186 L’est est loin, la gare de l’est aussi. 11191 Au voisinage du zéro absolu de température. 11192 La couronne périphérique alterne falaises abruptes et plages. 11193 Henri VIII rencontre François Ier. 11194 à ce jour. 11195 avoir un bel avenir 11196 faire un dessin 11197 par exemple 11198 Une dune. 11199 Une dune de sable blanc. 11200 remède universel 11201 Il regarde l’heure tout le temps. 11202 dépenses excessives 11203 tremblement de terre 11204 On ne veut pas voir la même chose. 11205 Je voudrais ajouter quelque chose de particulièrement important. 11206 La gent féminine. 11207 Il est prêt à tout. 11208 L’étoile se trouve à peu près à 50 années-lumière. 11209 Il s’intéresse de près à l’environnement. 11210 Nous sommes près d’arriver. 11211 Nous ne sommes pas près d’arriver. 11212 J’ai obtenu un prêt de la banque. 11213 vivre l’un près de l’autre. 11214 Tu ne trouves pas ça bizarre. 11215 Ça chauffe 11216 Pourriez-vous répéter ça s’il vous plaît ? 11217 Il mange ça froid. 11218 Il a promis de garder ça secret. 11219 Ça montre que tu n’as pas compris. 11220 Ça c’est un couteau. 11221 Ça n’a pas de sens. 11222 Mais ça oui. 11223 Sa voiture est en panne. 11224 C’est sa préférée. 11225 Il trouva de la nourriture çà et là. 11226 Quant à ma commande, elle n’est pas arrivée. 11227 De quand à quand tu travailles ? 11228 Tu reviens quand à Paris ? 11229 Tu restes jusqu’à quand à la maison ? 11230 Le Notre Père est une prière chrétienne. 11231 Si vous souhaitez en savoir davantage, veuillez me contacter. 11232 Cette offre est accompagnée d’avantages. 11233 Il part bientôt pour Venise. 11234 Il peut être têtu. 11235 Il partira peut-être demain. 11236 Cela peut être vrai. 11237 L’Écosse peut être très chaude. 11238 L’alcool au volant peut être dangereux. 11239 Une intoxication en cours peut être diagnostiquée. 11240 Elle peut être ennuyeuse. 11241 La lettre est à elle peut-être. 11242 C’est elle peut-être. 11243 Peut-être viendra-t-il ? 11244 Est-ce que quelqu’un peut m’aider ? 11245 Je veux m’éloigner autant que faire se peut d’ici. 11246 On peut d’ailleurs le vérifier. 11247 La pale de l’hélice est cassée. 11248 Je joue au golf depuis un an. 11249 Je joue souvent au golf le dimanche. 11250 C’est un bon joueur de golf. 11251 Le golfe Persique est presque une mer fermée. 11252 Le golfe d’Aden est la baie située entre la corne de l’Afrique et la péninsule Arabique. 11253 Le golfe du Lion est une partie de la mer Méditerranée. 11254 Le repaire des pirates. 11255 Ce ris de veau est succulent. 11256 Ce ris d’agneau est succulent. 11257 Le forcement d’un coffre. 11258 Vous avez forcément raison. 11259 Vous n’avez pas forcément raison. 11260 S’exprimer sans forcément parler. 11261 Un gâteau aux amandes. 11262 Face aux amendes à payer 11263 En amende honorable 11264 J’ai été condamné à une forte amende. 11265 J’ai été mis à l’amende. 11266 Un enfant de chœur. 11267 Le chœur philharmonique. 11268 Il a confessé tous ses péchés. 11269 Les péchés capitaux 11270 Manger est mon péché mignon. 11271 Péchés de jeunesse 11272 C’est un des leurs. 11273 Les dés les plus courants. 11274 Dès à présent 11275 J’ai acheté des dés à jouer. 11276 Dès à présent 11277 Plusieurs des caractéristiques. 11278 Dès 1980, le pays était en crise. 11279 Des 2000 participants, seuls 1000 sont venus. 11280 Des 2000 invités, seuls 1000 sont venus. 11281 Dès dix-huit ans. 11282 L’anniversaire des 30 ans de la libération. 11283 Le cap des 35 ans. 11284 Elle approche des cinquante ans. 11285 À l’occasion des vingt ans du groupe. 11286 Le congrès des 20 ans de l’association. 11287 A priori, il devrait arriver à l’heure. 11288 Je ne pouvais pas le croire a priori. 11289 La grève généralisée a paralysé tout le pays. 11290 Fumer a nui à sa santé. 11291 Ce que tu dis a l’air correct. 11292 Puis a jailli un jeune homme. 11293 Il chante a cappella. 11294 Il est pris à partie. 11295 Le nettoyage à sec. 11296 Il a quel âge ? 11297 Prendre quelqu’un à partie. 11298 Lorsqu’il y a proximité d’un restaurant universitaire. 11299 Il a lui aussi décidé de partir. 11300 Tout à fait ! 11301 Il est tombé tout à coup. 11302 Je parlais tout à l’heure avec ma femme. 11303 Il y en a qui dorment. 11304 Fais-moi savoir s’il y a quoi que ce soit que je puisse faire. 11305 Nous étions face à un danger. 11306 Le coiffeur en face a mis la clé sous la porte. 11307 Grâce à toi, j’ai gagné. 11308 Elles sont prêtes à t’écouter. 11309 Le prêt a été refusé. 11310 Tout à coup, j’entendis une explosion. 11311 Il est facile de décider a posteriori. 11312 Il a été aux États-Unis. 11313 Je suis tout à fait d’accord. 11314 Un crayon à pointe fine. 11315 Les familles à revenus modestes 11316 Il n’a pas manqué l’occasion de prendre à partie son prédécesseur. 11317 Une tapette à tapis. 11318 Une maladie à issue fatale. 11319 Où sont mes affaires ? 11320 Manger ou être mangé, c’est la loi de la nature. 11321 Ils ont été ou sont pour l’implantation de la centrale nucléaire. 11322 J’en suis sûr. 11323 Sûr et certain. 11324 Nous nous sentions toujours sûrs de nous. 11325 Tout repose sur de vagues accusations. 11326 Il compte sur d’autres personnes. 11327 Des relations bâties sur l’argent. 11328 Il compte sur d’autres personnes. 11329 Un moratoire a été établi sur de telles pratiques. 11330 Il réussira à coup sûr son examen. 11331 Ce programme se base sur la participation des femmes. 11332 Tout ce que je sais. 11333 Ce sont des histoires. 11334 Ce sont de grands enfants. 11335 Ils se sont tous inscrits. 11336 Ils se sont aimés. 11337 Ils se sont d’ailleurs doté d’un nouvel ordinateur. 11338 Ce sera une fille. 11339 Il se sera d’abord lavé. 11340 Ce sera bien. 11341 Ce phénomène se transforme en phénomène de société. 11342 Ce peuple 11343 Ce faisant, il se rapprochait. 11344 Pour ce faire, vous disposez d’un délai d’une semaine. 11345 C’est ma voiture. 11346 C’est ma préférée. 11347 Le problème c’est qu’apparemment elle n’a pas son mot de passe… 11348 Les Chinoises sont celles qui se marient le plus avec les Sud-Coréens. 11349 Le son dans l’informatique 11350 Son indigne frère 11351 Au son de la voix 11352 Même son de cloche 11353 Eh bien, soit ! 11354 Et bien sûr, il n’est pas venu. 11355 Et bien qu’il commençât en retard, il termina en avance. 11356 Et bien souvent, ça dégénère. 11357 Eh bien, soit ! 11358 Je travaille tard. 11359 Nous n’affirmons rien. 11360 Je compte sur vous mercredi. 11361 Nous non plus 11362 Où vous rendez-vous habituellement ? 11363 La zone géographique dans laquelle je vis 11364 C’est une belle maison. 11365 Cette école est réputée. 11366 C’est dommage de partir si tôt. 11367 Vouloir c’est pouvoir. 11368 C’est non seulement pour lui, mais aussi pour elle. 11369 C’est dimanche qu’il arrive. 11370 Comme c’est romantique. 11371 C’est la fin. 11372 C’est suite à cette victoire qu’il fut élu. 11373 C’est incognito qu’il reporta le prix. 11374 C’est face à la montée en puissance. 11375 Il est interrogé en tant que témoin. 11376 Il faut se rappeler de temps en temps que rien n’est immortel. 11377 On a fini. 11378 Ceux qui ont envie de voir le film 11379 Les décrets ont force de loi. 11380 Les enfants ont recours au suicide. 11381 Les méthodes qui ont cours. 11382 Ils ont hâte de vous voir. 11383 Ils comprennent qu’ils ont affaire à un épisode tragique. 11384 Je suis sceptique. 11385 Une fosse septique. 11386 Je reste sceptique. 11387 En termes de rémunération 11388 L’azurage du linge se fait avec du bleu d’outremer. 11389 Étiez-vous en train de travailler ? 11390 Le voleur fit irruption pendant la nuit. 11391 L’éruption du volcan fut violente. 11392 Il y a une vacance dans notre équipe au travail. 11393 J’ai repris ce fonds de commerce 11394 Un fonds monétaire 11395 Une affaire en cours. 11396 Il fut traduit en cour martiale. 11397 Donner libre cours à l’imagination 11398 En fin de compte. 11399 En ligne de comte. 11400 Tout comte fait. 11401 Elle aime les contes de fées. 11402 Elle aime les contes d’horreur. 11403 Elle aime les contes fantastiques. 11404 Les contes et légendes de Bretagne. 11405 Elle va au marché. 11406 Son visage était décrépit. 11407 Elle semblait décrépite par les années. 11408 Il doit bien être quelque part. 11409 Tu viendras quand même. 11410 Tu viendras quand même ? 11411 Comme même ses meilleurs amis n’étaient pas venus, il était triste. 11412 Mon nom est Robert de Puis. 11413 L’arrivée est imminente. 11414 Des paléontologues éminents. 11415 Une encre sur soie. 11416 Un drap en soie. 11417 Il n’est pas mauvais en soi. 11418 Quoi qu’il en soit. 11419 Un ver à soie. 11420 Parlez à voix basse. 11421 Cette décision ouvre la voie à des élections. 11422 Il y avait une émotion dans sa voix. 11423 Combien y a-t-il d’étoiles dans la Voie Lactée ? 11424 Dans leurs voies respiratoires. 11425 La voie piétonne est fermée. 11426 Par voie de conséquence 11427 Un animal en voie d’extinction. 11428 Les pays en voie de développement 11429 Il a ouvert la voie à la construction de l’Europe. 11430 La tradition ascétique de l’Église. 11431 Cancer dur côlon. 11432 Ils ne sont pas si différents. 11433 Tâche de ne pas faire trop de bruit. 11434 Il a accompli la tâche facilement. 11435 Rome importait de Gaule essentiellement du sel. 11436 Darth Vader est un personnage de Star Wars. 11437 Dark Vador est un personnage de Star Wars. 11438 Darth Vader est un personnage de Star Wars. 11439 Dark Vador est un personnage de Star Wars. 11440 Mariah Carey 11441 Tu es du Morbihan. 11442 Il faut maintenir le statu quo. 11443 Un réveillon avec foie gras et champagne. 11444 Il est venu contre son gré. 11445 Tu peux se déplacer à ton gré. 11446 Une renommée qu’elle doit à la particularité de son grès. 11447 Il viendra bon gré ou mal gré. 11448 Errer au gré des vents. 11449 Errer au gré du vent. 11450 Il acceptera de gré ou de force. 11451 Je vous sais gré d’être là. 11452 Il faut prendre en gré les afflictions que Dieu nous envoie. 11453 Un champignon vénéneux. 11454 Un cobra très venimeux. 11455 Un seau d’eau. 11456 Ton seau est percé. 11457 Le sceau du secret. 11458 Elles sont contre cette idée. 11459 Dans la ville de Contres. 11460 Tu contres son coup de poing. 11461 Quel est votre diagnostic ? 11462 On le diagnostique tôt. 11463 L’équipe m’a demandé mon pronostic pour le match de demain. 11464 Le diagnostic prénatal. 11465 On le diagnostique facilement. 11466 Méthode pour le diagnostic. 11467 Le pronostic du match. 11468 Tu les diagnostiques facilement. 11469 Il débouchera la bouteille. 11470 Ils sont très avares. 11471 L’avar est une langue caucasienne. 11472 Ils sont avares de bonnes paroles. 11473 Un avare amasse de l’argent non pas parce qu’il est prudent mais parce qu’il est avide. 11474 L’avar est une langue caucasienne. 11475 Le CO2 est un gaz à effet de serre. 11476 Son arrivée m’a fait plaisir. 11477 Leurs arrivées m’ont fait plaisir. 11478 L’arrivée du tour de France. 11479 J’ai fait un emprunt à la banque. 11480 Mon empreinte carbone. 11481 Les emprunts à la banque. 11482 Tu auras affaire à moi. 11483 J’ai des courses à faire à cinq heures. 11484 Tu auras affaire à la police. 11485 J’ai des courses à faire à la boutique. 11486 Il a été construit à des fins militaires. 11487 Il rôde sans but. 11488 Les malfaiteurs rôdent autour de la maison. 11489 Ils rôdent en quête de bagarre. 11490 Il faut roder le moteur. 11491 Tristan et Iseult tombèrent amoureux en buvant un philtre. 11492 Il prépara un philtre d’amour. 11493 Il prépara un philtre aphrodisiaque. 11494 Ça sans dire ! 11495 Sa chemise à carreaux détonne avec son pantalon rayé. 11496 Une maison de plain-pied. 11497 Les grenouilles coassent. 11498 Les grenouilles mâles coassent. 11499 Les coassements inquiétants des crapauds. 11500 Les corbeaux croassent. 11501 Les croassements inquiétants des corbeaux. 11502 J’étais à mille lieues d’imaginer que c’était lui. 11503 As-tu lu 20 000 lieues sous les mers ? 11504 Les lieus mordent à notre leurre. 11505 Techniques de traîne pour les lieus jaunes. 11506 Ils pêchent des lieus. 11507 Faire un état des lieux. 11508 Les lieux de prière. 11509 Les lieux historiques. 11510 J’étais quelques fois absent. 11511 Les quelques fois où je l’ai croisé. 11512 Les quelques fois que nous nous sommes rencontrés. 11513 C’est quelquefois pénible de surveiller les enfants. 11514 C’est quelquefois assez pénible de surveiller les enfants. 11515 Noir comme jais. 11516 Le cri du geai. 11517 Il m’a donné un coup de poing. 11518 Les poings serrés. 11519 Il a été libéré sans contrepartie. 11520 Il a été libéré sans contre-partie. 11521 Quelles sont les contreparties ? 11522 Il ne me reste que huit centimes. 11523 Un procès à huis clos. 11524 Elle est enceinte de trois mois. 11525 Elle est enceinte de 3 mois. 11526 Le mois de mai a été froid. 11527 Le mois d’avril a été froid. 11528 Quel âge as-tu ? 11529 Une femme d’âge mûr. 11530 Des acides aminés. 11531 Un acide aminé. 11532 Des dessins animés. 11533 Un dessin animé. 11534 Des jeunes filles. 11535 Il n’est plus très jeune. 11536 L’amanite tue-mouches est toxique. 11537 Les communes de la Haute-Cornouaille. 11538 Le Festival de Cornouaille est un festival annuel se déroulant dans la ville de Quimper. 11539 Tourisme en Cornouaille bretonne. 11540 Tourisme en Cornouailles britannique. 11541 Quelqu’un leur a déjà dit. 11542 Ceci dit. 11543 Ceci dit. 11544 Il s’est confié à la compagne du roi. 11545 Une presqu’île 11546 La réponse est presque exacte. 11547 L’île est encore loin. 11548 Il connait l’histoire de A à Z. 11549 Il a appris ça en un jour. 11550 Il semble que oui. 11551 Le oui l’a emporté. 11552 J’ai suivi la A40. 11553 À la une de la presse. 11554 Là où ça ne va plus. 11555 Le IIe siècle. 11556 Dépose-le au courrier. 11557 Dépose-la au courrier. 11558 Je pense qu’il va bientôt arriver. 11559 Dès le Ier siècle 11560 Les habitants de Ouagadougou. 11561 S’il pleut, je reste ici. 11562 Voilà ce qu’il a dit. 11563 Vous voilà arrivé. 11564 Et voilà ce qu’il a dit. 11565 Elle voila son visage. 11566 Il a soixante et un ans. 11567 J’ai trois cent cinquante timbres. 11568 Deux cent mille étoiles. 11569 J’ai cinq cent soixante-et-un euros. 11570 J’ai mille cent timbres. 11571 J’ai trois cents timbres. 11572 Deux cents milliards d’étoiles. 11573 Nous avons parcouru 10 milles marins. 11574 Convertir des milles aux kilomètres. 11575 Carl Milles était un sculpteur suédois. 11576 Un voyage de mille milles. 11577 Il reste seulement dix milles jusqu’à l’arrivée. 11578 Trois-mille euros. 11579 J’ai 1 enfant. 11580 Cela coûte 2,1 euros. 11581 1 fois. 11582 J’ai quatre enfants. 11583 Il est né le quatre janvier. 11584 On estimait à seize mille les fusils de son armée. 11585 Le patron du numéro deux allemand a démissionné. 11586 Une Peugeot 208 fabriquée en France. 11587 Ils ont tous les trois été tués par balle. 11588 Les trois kanji. 11589 L’intensité des rayons X ayant frappé la pellicule. 11590 J’ai 4 enfants. 11591 Il est né le 4 janvier. 11592 Son adresse est 4 rue de la gare. 11593 Cela coûte 1,25 euro. 11594 Il sera élu en 2010 maire de la ville. 11595 Le pays est découpé en 4 parties. 11596 Une taille 38 imposée aux mannequins. 11597 Il a battu le record avec un temps de 3 min 18 s. 11598 L’année 800 fut considérée comme une renaissance de l’Empire romain d’Occident. 11599 un canard 11600 des oies dodues 11601 au cours de l’année 11602 Les taux d’intérêt domestiques. 11603 Un atlas cher. 11604 Un camion très lourd. 11605 Vous êtes bon fils. 11606 On voyait ses joues devenir rouges. 11607 Des filles un peu pâles. 11608 Même vainqueurs ils sont mécontents. 11609 Une vache laitière 11610 Les premier et deuxième trimestres. 11611 Les montagnes ont l’air belles. 11612 Les pâtes ne sont pas bonnes car trop cuites. 11613 Il est parti aux États-Unis pour étudier. 11614 Une faute. 11615 Ils sont en général jeunes. 11616 Les lois antitrust américaines. 11617 Des roquettes sont même retombées. 11618 Ils sont juste amis. 11619 Parmi les mieux cotés. 11620 Ils sont à la fois grands et minces. 11621 En 1779 débute la première des neuf guerres. 11622 Des erreurs même très graves. 11623 J’ai au moins quelques dollars. 11624 Certaines grenouilles peuvent même être mortelles. 11625 un canard gras 11626 des oies 11627 Des poulets fermiers 11628 Les hérétiques ayant reconnu la foi catholique. 11629 Les voitures verte et rouge. 11630 Des livres audio 11631 L’institut de recherches britannique 11632 Les camions très lourds. 11633 Les atlas chers. 11634 Fils naturel de Richard 11635 Faites attention. 11636 Les préoccupations des travailleurs face à la crise. 11637 Plus de crédits bancaires grâce à des taux d’intérêts bas. 11638 Je suis né le huit janvier. 11639 Deux immeubles juste en face de toi. 11640 Les communications Internet. 11641 Un catalogue des animaux commode à consulter 11642 J’aime jouer aux cartes. 11643 Pauvres du monde 11644 Quarante pour cent des femmes 11645 Vos nom et prénom, s’il vous plaît. 11646 Des fautes. 11647 Les ayants droit. 11648 Nous aurons les résultats dans 4 heures maximum. 11649 Critique des cent jours du président. 11650 Un dispositif moins ambitieux mais applicable. 11651 Ces analyses bidon. 11652 Ces don Juan. 11653 En 1779 débute la première des neuf guerres. 11654 Les véhicules. 11655 Les ondes radio. 11656 Des événements différents ayant lieu en même temps. 11657 Une jolie femme. 11658 Une très jolie femme. 11659 Le français concurrence le latin. 11660 Le rock a donné naissance à des groupes légendaires. 11661 Une répartition des revenus judicieuse. 11662 Ses premiers malaises. 11663 Un geste circulaire. 11664 Force tranquille de la nature 11665 Une bouche un peu grande. 11666 La mort subite 11667 Confus face aux remarques obscures 11668 Un bel homme. 11669 Confus face aux remarques obscures 11670 Elle est tout sauf courtoise. 11671 Il a eu le poste grâce à son anglais. 11672 La Guyane française. 11673 Quelqu’un paye la facture. 11674 Tes menaces ne me font pas du tout peur. 11675 Elle est à nouveau amoureuse. 11676 Le numéro un des ventes de Noël. 11677 Ce putain de temps. 11678 J’ai grand faim. 11679 Il sait au moins lire. 11680 Les neuf circonscriptions des Alpes-Maritimes. 11681 Un souvenir du passé. 11682 Tom surprit Marie. 11683 Je ne peux pas le lire. 11684 Je n’ai pas du tout peur des serpents. 11685 Nous faisons tous partie de la même équipe. 11686 La variété du catalan parlée en Andorre. 11687 Un climat tropical. 11688 Un climat très tropical. 11689 Le papier continue d’être employé. 11690 L’équipe de football anglaise 11691 Les cours impériales 11692 Les dossiers triés par ordre alphabétique. 11693 Les soldats abasourdis par le chaos. 11694 Une bouteille fut apportée. 11695 L’homme présente une amie. 11696 Une réduction des coûts comprise entre 10 et 20 euros. 11698 Des bouteilles non vidées 11699 La détention provisoire illimitée 11700 Une maquette d’avion jolie 11701 Elle a l’air jolie. 11702 Les pâtes ne sont pas bonnes car trop cuites. 11703 Une peine pas si lourde. 11704 Une infime minorité. 11705 L’Inde indépendante. 11706 Voir la déclaration sur l’honneur ci-jointe. 11707 Une mise à jour gratuite. 11708 Une mise à niveau couteuse. 11709 Elle est un petit peu chiante. 11710 <!-- L’étoile à neutrons peut même être remplacée par un trou noir. --> 11711 Une fleur. 11712 Un très grand chien. 11713 Une géologue intelligente. 11714 Un très grand chien. 11715 Elle est grasse, car elle mange beaucoup. 11716 Il faudra que je vive seul. 11717 Sa large et bonne figure. 11718 La porte d’entrée. 11719 Son amie l’abandonne. 11720 Le Cameroun 11721 Toutes nos félicitations. 11722 La justice est une si belle chose. 11723 Telle est la question. 11724 La plus forte progression. 11725 C’est une sale affaire. 11726 Il est torse nu. 11727 La plus grande fait dix centimètres. 11728 Les équations différentielles non linéaires. 11729 Une des multiples affaires. 11730 C’est la fin. 11731 Il a fait la une des journaux. 11732 Le mustang est un cheval sauvage. 11733 Le jaguar est un mammifère. 11734 La Jaguar est une voiture. 11735 L’histoire d’une enfant pas si sage. 11736 La partie ouest de la ville. 11737 L’une des sept unités de base. 11738 une des neuf provinces. 11739 Les bonnes gens. 11740 J’habite 10 avenue Constantin Arnaud. 11741 L’une des pires. 11742 Une forêt tropicale. 11743 Une forêt très grande. 11744 Cette définition reste valable. 11745 Le système de retraites français. 11746 Les cours magistraux 11747 Les lettres triées par ordre alphabétique. 11748 Il aura capté sa confiance. 11749 Il a une force exceptionnelle. 11750 Un centre logistique dédié. 11751 Une fois effectués les changements. 11752 Le carton est à moitié plein. 11753 Un indicateur d’inégalité utilisé par les Nations Unies. 11754 Des documents ou informations tirés de la commission 11755 Une large majorité. 11756 Une étrange expérience. 11757 Les cours étaient en réalité destinés à préparer les élèves. 11758 Une fut soumise anonymement. 11759 Son metteur en scène préféré. 11760 Une mise à jour gratuite. 11761 Les sols en permanence gelés. 11762 Une centaine de personnes est venue. 11763 Il faut beaucoup de sucre. 11764 Le nombre de masse est un terme employé en chimie. 11765 Ils sont au nombre de neuf. 11766 Une centaine d’anarchistes est venue. 11767 Il faut beaucoup d’eau. 11768 Le nombre d’oxydation. 11769 Des créatures marines. 11770 Des yeux vert clair. 11771 Des yeux vert olive. 11772 Ses cheveux étaient noir de jais. 11773 Des yeux vert clair. 11774 Une jupe bleu foncé. 11775 La femme avec laquelle tu parles 11776 La faux avec laquelle on fauche. 11777 Une distance au-delà de laquelle il devient difficile de voir. 11778 Les femmes auxquelles tu parles 11779 Un dans chaque bras. 11780 La femme à laquelle tu parles 11781 L’homme auquel tu parles 11782 L’homme avec lequel tu parles 11783 Les hommes avec lesquels tu parles 11784 Les hommes auxquels tu parles 11785 Les hommes avec lesquels tu parles 11786 Les hommes auxquels tu parles 11787 Ça te gêne si je fume ? 11788 Mon chien 11789 Ton histoire 11790 Mon œuvre 11791 Son ère 11792 Son malaise 11793 Pour ne plus travailler. 11794 J’aimerais changer de travail. 11795 Je l’ai tout à fait oublié. 11796 Puis assigné à résidence. 11797 Je me suis en fait amusé. 11798 Il a refusé de manger avec nous. 11799 Il a refusé d’arriver plus tôt. 11800 Il a décidé de ne plus manger avec nous. 11801 Pour débuter, il faut acheter une grammaire. 11802 J’ai de la peine pour René. 11803 Comment bien étudier 11804 Il m’a sans cesse répété de me taire. 11805 Il est sans doute arrivé. 11806 Je veux te préparer 11807 Luc est quant à lui condamné. 11808 J’étudie des parties d’échecs afin de gagner. 11809 Je luis en parle avant d’annuler le voyage. 11810 Tu sors ce soir. 11811 Je soussigné Pierre Dupont déclare avoir pris connaissance des conditions de ce contrat. 11812 Il ou elle se trouve là. 11813 Il dit la vérité. 11814 Tu ne sors pas ce soir. 11815 Je ne donne rien. 11816 Je ne dis rien. 11817 Il me causa un grand tord. 11818 Tu ne la sors pas ce soir. 11819 On ne la paie pas. 11820 Je ne l’abandonne pas. 11821 Il ne l’est que durant l’élection. 11822 Je suis en retard parce que j’ai raté mon bus. 11823 Le chef du restaurant. 11824 Partir aux USA. 11825 Les montagnes du Jura. 11826 Mes démêlés avec X. 11827 Le son a interféré avec l’image. 11828 Une irradiation avec soit de la lumière ultraviolette, soit des protons. 11829 Le glacier du Trient. 11830 Le glacier des Bossons. 11831 Ils ont des a priori sur nous. 11832 Je vais au marché. 11833 Au sortir de la guerre. 11834 Un orage est annoncé. 11835 Antoine est marié. 11836 Ils sont même restés ici. 11837 Celui-ci est resté. 11838 Il est torse nu. 11839 On est fatigués. 11840 Antoine est peut-être fatigué. 11841 Dominique est peut-être fatiguée. 11842 Dominique est peut-être fatigué. 11843 Ils sont très avares. 11844 Un orage a été annoncé. 11845 Les camions ont été inventés. 11846 Antoine n’est pas marié. 11847 Antoine n’est pas très fatigué. 11848 Mon oncle n’est pas avare de son argent. 11849 Une averse est annoncée. 11850 Martine est mariée. 11851 Gravir cette montagne est dangereux 11852 Martine est très jolie. 11853 L’Autriche est pendant tout le Moyen Âge une des nombreuses principautés. 11854 Cette voiture était suffisamment bon marché. 11855 Cette caméra est dernier cri. 11856 La sortie est droit devant. 11857 Une averse avait été annoncée. 11858 Martine aurait été contente. 11859 Martine aurait été très contente. 11860 Les voitures ont été inventées. 11861 Martine n’est pas mariée. 11862 Martine n’est pas très jolie. 11863 Un orage fut annoncé. 11864 Elle sera contente. 11865 Martine était ennuyeuse. 11866 Lui et son équipage furent perdus en mer. 11867 Tu étais jeune. 11868 Celle-là est folle. 11869 Il est casse-couilles. 11870 On est fatigués. 11871 Tu étais très jeune. 11872 On était tellement fatigués. 11873 Un orage avait été annoncé. 11874 Tu avais été dénoncé. 11875 Tu avais été immédiatement dénoncé. 11876 J’avais été content. 11877 Elle ne sera pas contente. 11878 Martine n’était guère ennuyeuse. 11879 Elle est casse-couilles. 11880 Tu n’étais pas très jeune. 11881 On n’est pas couchés. 11882 Des orages sont annoncés. 11883 Elles sont absentes. 11884 Vous êtes certain. 11885 Le vernis à ongles est inutile. 11886 Courir les magasins est devenu une corvée. 11887 Nous étions fatigués. 11888 Ils sont même allés faire la guerre. 11889 Celles-là sont folles. 11890 Une des réponses est correcte. 11891 Ils sont juste arrivés. 11892 Nous étions trop fatigués. 11893 Ils sont bien sûr ressortis indemnes. 11894 Nous sommes quelque peu occupés. 11895 Ces ordinateurs sont meilleur marché que ceux-là. 11896 Ces ordinateurs sont dernier cri. 11897 Des orages avaient été annoncés. 11898 Ils avaient été dénoncés. 11899 Nous aurions été dénoncés. 11900 Vous auriez été dénoncés. 11901 Vous auriez été dénoncé. 11902 Elles avaient été immédiatement dénoncées. 11903 Elles ne sont pas absentes. 11904 Les mathématiques ne sont pas juste de la mémorisation de formules. 11905 Nous n’étions pas trop fatigués. 11906 Nous ne sommes pas trop fatigués. 11907 Est-elle arrivée ? 11908 Est-elle souriante ? 11909 Est-elle aveugle ? 11910 Sont-elles arrivées ? 11911 Sont-elles souriantes ? 11912 Sont-elles aveugles ? 11913 Est-il arrivé ? 11914 Est-il souriant ? 11915 Est-il aveugle ? 11916 Sont-ils arrivés ? 11917 Sont-ils souriants ? 11918 Sont-ils aveugles ? 11919 Est-elle déjà arrivée ? 11920 Est-elle déjà souriante ? 11921 Est-elle encore aveugle ? 11922 Sont-elles déjà arrivées ? 11923 Sont-elles déjà souriantes ? 11924 Ne sont-elles pas aveugles ? 11925 Est-il déjà arrivé ? 11926 Est-il déjà souriant ? 11927 N’est-il pas aveugle ? 11928 Sont-ils déjà arrivés ? 11929 Sont-ils déjà souriants ? 11930 Ne sont-ils pas aveugles ? 11931 Es-tu arrivée ? 11932 Es-tu arrivé ? 11933 Es-tu aveugle ? 11934 Es-tu déjà arrivée ? 11935 Es-tu déjà arrivé ? 11936 Es-tu presque aveugle ? 11937 Sommes-nous arrivés ? 11938 Sommes-nous arrivées ? 11939 Étions-nous aveugles ? 11940 Sommes-nous déjà arrivés ? 11941 Sommes-nous déjà arrivées ? 11942 Ne sommes-nous pas aveugles ? 11943 Il nous a informés. 11944 Il nous a informées. 11945 Il vous a informé. 11946 Il vous a informés. 11947 Dominique les a renseignés. 11948 Dominique les a renseignées. 11949 Il nous a montré le chemin. 11950 Il nous a donné du pain. 11951 Je suis sûr de l’avoir vu, de mes yeux vu. 11952 Je suis sûr de l’avoir vue, de mes yeux vue. 11953 Je suis sûr de les avoir vus, de mes yeux vus. 11954 Je suis sûr de les avoir vus de mes yeux vus. 11955 Un orage peut être observé. 11956 Il peut être observé. 11957 La peine de mort devrait être abolie. 11958 Toute objection de ce type doit être déférée au président. 11959 Antoine peut être amusant. 11960 Une corrélation peut être observée. 11961 Martine peut être amusante. 11962 Les composants électroniques peuvent être nettoyés. 11963 Un orage peut être observé. 11964 Elle peut être observée. 11965 Martine peut être ennuyeuse. 11966 Lui et son équipage sont perdus en mer. 11967 Des orages peuvent être observés. 11968 Elles peuvent être observées. 11969 Vous pouvez être triste. 11970 Il est arrivé 11971 Il est parti tôt. 11972 L’été est chaud. 11973 L’objectif est de réussir 11974 Partir, c’est mourir un peu. 11975 Il faut être aveugle pour ne pas voir ça. 11976 Il était officier. 11977 Crois-tu que je sois aveugle ? 11978 Les Allemandes sont toutes des délurées. 11979 Tu as été prendre du bois. 11980 La fille là-bas est Marie. 11981 Ce serait attaquer les droits de l’homme. 11982 Il faut soit partir, soit attendre. 11983 Il a signé le contrat 11984 Il a reçu ta lettre 11985 Il a dû manger. 11986 Tu as beau pleurer. 11987 L’unique prix que tu as à payer est de laisser ce monde derrière. 11988 J’ai été chercher du pain. 11989 Avoir hâte d’être dehors. 11990 J’ai toutes ces pommes à porter. 11991 J’ai cela en tête. 11992 Nous avons compris ce qui se passe. 11993 J’ai mangé de la soupe. 11994 L’exposition au bisphénol A entraine des malformations. 11995 Les gros avions causent une forte pollution sonore. 11996 J’ai bien mangé. 11997 Je n’ai pas encore mangé. 11998 Avez-vous signé le contrat ? 11999 Avez-vous déjà signé le contrat ? 12000 Ils avaient voulu cela. 12001 Il est en train de jouer. 12002 Je viendrai demain. 12003 Je viendrai dans trois jours. 12004 Je peux 12005 J’arrive 12006 Je ne travaille pas 12007 J’en ai 12008 Je t’attends 12009 Je ne te veux pas. 12010 Je te le répète. 12011 Je le lui donne. 12012 Je lui en veux. 12013 Je ne t’attends pas. 12014 Je n’y crois pas 12015 Je t’en parle 12016 Je ne vous en parle pas. 12017 Je ne leur en veux pas. 12018 Je ne le lui achète pas. 12019 Je te l’avais donné. 12020 Je ne m’en souviens pas. 12021 Je ne l’y ai pas vu. 12022 Tu travaillais 12023 Si tu suis le sentier. 12024 Tu ne travaillais pas. 12025 Tu m’attendras 12026 Tu ne me rappelles pas 12027 Tu nous le prouves. 12028 Tu lui en parles. 12029 Tu ne m’attendras 12030 Tu t’en souviens 12031 Tu n’y vas pas 12032 Tu ne me le prends pas. 12033 Tu me l’as offert. 12034 Tu ne m’en parles pas 12035 Il travaille 12036 Ce sont des histoires. 12037 Celle adressée à mon ami 12038 À elle reviennent toutes les maisons. 12039 Des polluants comme celui-ci viennent de la combustion. 12040 Je trouve cela passionnant. 12041 Je pensais que vous trouveriez ça intéressant. 12042 Pierre et elle étaient fiancés. 12043 Ça fonctionne. 12044 Et ça fonctionne. 12045 Je ne trouve pas ça intéressant. 12046 Il ne travaille pas 12047 Ça ne fonctionne pas. 12048 Ce ne sont pas des histoires. 12049 Elle se demande. 12050 Il a converti cela en médailles. 12051 Dominique et elle les attendent. 12052 Ça ne fonctionne pas. 12053 Personne ne peut me le dire. 12054 Il ne me veut pas. 12055 Pour cela nous en parlons à notre mère. 12056 Comme il n’avait plus de voiture, il prenait le bus. 12057 Ça t’irait bien. 12058 Ne laisse pas ça t’arrêter. 12059 Cela ne t’aidera pas. 12060 Elle m’en parle 12061 Elle me l’avait donné. 12062 Ça ne t’intéresse pas. 12063 Ceci ne s’étant pas révélé suffisant, il recommença. 12064 Elle ne s’en souvient pas. 12065 Nous perdons 12066 Nous nous sommes perdus. 12067 Nous ne perdons pas. 12068 Nous ne sommes pas perdus. 12069 Nous vous attendons 12070 Nous ne vous attendons pas. 12071 Vous travaillez 12072 Est-ce que ça vous dérange si je fume ? 12073 Vous ne travaillez pas. 12074 Vous nous attendez 12075 Vous ne nous attendez pas. 12076 Ils travaillent. 12077 Ceux-ci fonctionnent. 12078 Ceux enseignés dans cette école 12079 À elles revient la maison. 12080 L’une d’elles est inutile. 12081 Ils ne travaillent pas. 12082 Ceux-ci ne fonctionnent pas. 12083 Ils vous étonneront par leur efficacité. 12084 Ceux-ci ayant été approuvés. 12085 Ils ne nous attendent pas 12086 Ceux-ci l’aident. 12087 Ceux-ci n’ayant pas été approuvés. 12088 Ils ne m’attendent pas. 12089 Ils me l’avaient donné. 12090 Ils ne s’en souviennent pas. 12091 Ne sois pas en retard ! 12092 Ne va plus là ! 12093 Ne sachant pas quoi faire 12094 Ne me prends pas pour un idiot 12095 Ne me présentant pas comme maire 12096 N’apporte pas de cadeaux. 12097 Ne l’attends pas 12098 Ne l’ayant pas trouvé 12099 N’y va pas 12100 Ne m’y attends pas 12101 Ne m’y étant pas rendu compte 12102 Laisse-nous ici. 12103 Veuillez nous réveiller à sept heures. 12104 Dis-lui bonjour. 12105 Veuillez lui dire d’attendre. 12106 Veuillez vous en aller. 12107 Veuillez nous y conduire. 12108 Force nous est de constater… 12109 Donne-m’en un peu. 12110 Trouve-t’en toi-même ! 12111 Veuillez m’en montrer un autre. 12112 Donne-la à ton frère. 12113 Donne la pomme à ton frère. 12114 Veuillez le noter. 12115 Regarde la belle fille. 12116 Regarde-la. 12117 Regarde-la bien. 12118 Allez le voir. 12119 Lis le plus vite possible. 12120 Montez le son. 12121 Monte le son. 12122 Coupez les autres légumes. 12123 Coupez les 3 feuilles. 12124 Coupez les trois feuilles. 12125 Donne-le-moi plus tard. 12126 Donne-en-lui. 12127 Offre-leur-en. 12128 Appuyez-vous-y. 12129 Souvenez-vous-en. 12130 Croyez-vous en Dieu ? 12131 Envoie-les en vacances. 12132 Offre-lui-en. 12133 Prends-moi-en quand tu seras là. 12134 Laisse-moi en dehors de cette affaire. 12135 Envoie-la-nous. 12136 Voulez-vous vous en aller ? 12137 Nous convenons en particulier ce qui suit. 12138 C’est moi qui dis ça. 12139 C’est moi qui te dis ça. 12140 C’est l’animal en moi qui le veut. 12141 C’est moi qui suis allé là-bas. 12142 C’est moi qui dis ça. 12143 Et moi qui pensais qu’il m’aimait. 12144 Il n’y avait qu’elle et moi qui savions. 12145 C’est toi qui penses à ça. 12146 C’est toi qui me prends 12147 C’est l’animal en toi qui le veut. 12148 Était-ce toi qui as laissé la porte ouverte ? 12149 Celles qui travaillent ici 12150 Les gens qui discutent là 12151 C’est le seul de mes amis qui a du talent. 12152 Un drapeau en lambeaux qui continue à flotter au vent. 12153 J’ai un fils qui est en secondaire. 12154 Le grand Tours qui disparaît. 12155 Vous tous qui venez ici. 12156 Celles qui me dérangent 12157 Les gens qui nous dérangent 12158 C’est vous qui vous trompez. 12159 Celle qui travaille ici 12160 La femme qui vient ici 12161 Eux qui jouent ici 12162 Quelques jeux vidéo qui ont marqué les années 80. 12163 Six médecins et un infirmier qui travaillaient à l’hôpital. 12164 Celle qui me dérange 12165 Nous qui travaillons ici 12166 C’est l’enfant en nous qui parle. 12167 Des copains plus vieux que nous qui fumaient. 12168 Nous qui vous aimons 12169 Des copains plus vieux que nous qui me dérangeaient. 12170 Vous qui travaillez ici 12171 Y a-t-il quelqu’un parmi vous qui a un briquet ? 12172 Des copains plus vieux que vous qui fumaient. 12173 Vous qui me dérangez 12174 Des copains plus vieux que vous qui me dérangeaient. 12175 Nous avons mangé des huitres. 12176 Elle est allée en Bretagne et elle a mangé des huitres. 12177 Isabelle a mangé des huitres. 12178 Nous l’avons mangé. 12179 Nous l’avons mangée. 12180 Nous les avons mangés. 12181 Nous les avons mangées. 12182 Il les a pris en train de voler. 12183 Il les a prises en train de voler. 12184 Nous lui avons donné un cadeau. 12185 Nous n’avons pas mangé des huitres. 12186 Isabelle n’a jamais mangé des huitres. 12187 Nous ne t’avons pas écouté. 12188 Nous ne t’avons pas écoutée. 12189 Nous ne les avons pas écoutés. 12190 Nous ne les avons pas écoutées. 12191 Nous ne lui avons rien donné. 12192 J’ai mangé des huitres. 12193 Je suis allée en Bretagne et j’ai mangé des huitres. 12194 Les élèves ont terminé leurs devoirs. 12195 Les élèves t’ont écouté. 12196 Les élèves t’ont écoutée. 12197 Les élèves les ont écoutés. 12198 Les élèves les ont écoutées. 12199 Les élèves lui ont donné. 12200 Les élèves n’ont pas terminé leurs devoirs. 12201 Les élèves ne m’ont pas écouté. 12202 Les élèves ne m’ont pas écoutée. 12203 Les élèves ne les ont pas écoutés. 12204 Les élèves ne les ont pas écoutées. 12205 Les élèves ne lui ont pas écouté. 12206 As-tu eu peur ? 12207 Pourquoi as-tu eu peur ? 12208 En aviez-vous mangés ? 12209 Les documents qu’ils ont achetés. 12210 Les parties de poker qu’il a jouées. 12211 Le sac à main que j’ai acheté. 12212 Une fois que vous avez goûté au plaisir des jeux d’argent. 12213 Les lettres que j’ai voulu envoyer. 12214 Les lettres que j’ai voulu t’envoyer. 12215 Les images qu’elle a envoyées ont montré une structure inattendue. 12216 Les récompenses qu’elle a eues. 12217 Le document qu’ils ont acheté. 12218 Tout cela pour dire qu’on a longtemps été confrontés à ce problème. 12219 C’est dans la soirée que ces poursuites avaient été entamées. 12220 La femme que j’ai aidée. 12221 La femme que j’ai beaucoup aidée. 12222 La femme que j’ai un peu aidée. 12223 J’ai l’impression que tu as compris. 12224 Une fois que tu as goûté au plaisir. 12225 Une meilleure situation que quand il a pris ses fonctions. 12226 L’expert estime que les climatosceptiques ont fait pression. 12227 De la même nature que celles qui ont été saisies. 12228 La lettre que j’ai voulu envoyer. 12229 Certains y voient la preuve qu’il a finalement été lâché par son soutien. 12230 Cette finale qu’il a dominée. 12231 La pommade qu’il a voulu me passer. 12232 La pommade qu’il a voulu m’apporter. 12233 Ne dis à personne que nous avons fait cela. 12234 L’homme que j’ai aidé. 12235 L’homme que j’ai beaucoup aidé. 12236 L’homme que j’ai un peu aidé. 12237 Pour faire savoir que cette arrestation a été décidée. 12238 Cet homme qui est venu. 12239 Cette femme qui est jolie. 12240 Cet homme qui est grand. 12241 Ces femmes qui sont charmantes. 12242 Puis-je rester ? 12243 Que pouvais-je faire ? 12244 Que manges-tu ? 12245 Pourrait-il venir ? 12246 Que mange-t-elle ? 12247 Entre-t-il ? 12248 Quand partirons-nous ? 12249 Attrapez-nous ? 12250 Attrape-nous ? 12251 Que mangez-vous ? 12252 Que pouvaient-ils faire ? 12253 L’enfant lui dit merci. 12254 L’enfant dit merci. 12255 Le père et l’enfant lui disent merci. 12256 Les parents de l’enfant lui disent merci. 12257 Dominique peut venir. 12258 Antonio Banderas est un acteur espagnol. 12259 Mon enfant joue en bas. 12260 Le contexte troublé. 12261 Ma mère étant malade n’est pas venue. 12262 Un bruit sifflant de vapeur. 12263 Un souffle ardent 12264 Au diable toutes ces histoires 12265 Le verbe aimer est facile à conjuguer. 12266 Comment se fait-il que le réveil ait sonné. 12267 Les boissons et la nourriture étaient servis à volonté. 12268 Quel âge ont vos enfants ? 12269 Ni la Terre, ni son orbite ne sont parfaitement circulaires. 12270 Un petit sourire. 12271 Un seul être vous manque. 12272 La Corée peut gagner. 12273 Mon enfant ne peut pas aller à l’école. 12274 Ce matin nous avons froid. 12275 Cette chaise en bois est lourde. 12276 La Corée ne peut pas gagner. 12277 Mon enfant l’étudie. 12278 Le passé n’éclairant pas l’avenir. 12279 Comment se fait-il que le réveil n’ait pas sonné. 12280 les employés et la direction n’aboutirent à aucun résultat. 12281 Ce fut l’entreprise de marketing de la décennie. 12282 Mon enfant ne l’étudie. 12283 Mon enfant ne m’en veut pas. 12284 Les enfants jouent en bas. 12285 Les régions situées au sud sont chaudes. 12286 Ces rues désertes 12287 Nos bagages étant enregistrés 12288 Tout Paris est à la fête. 12289 L’eau des lacs et des rivières est douce. 12290 Lequel des élèves est sorti ? 12291 Les quartiers conquis par l’armée. 12292 Des petites bites. 12293 Des petites zones favorables à la biodiversité. 12294 Du tronc poussent les branches. 12295 Quels changements attendre de la réalité augmentée ? 12296 Les enfants en mangent. 12297 Mon fils ne passera pas. 12298 Les États-Unis se composent de 50 états. 12299 Les camions n’arrivent pas. 12300 Les cuillères en bois commencent à moisir. 12301 Ces choses nous les partageons. 12302 Mon fils n’arrive pas à faire les additions. 12303 Les enfants ne l’attendent pas. 12304 Mes enfants ne m’en veulent pas. 12305 La plupart des femmes rêvent d’un mariage en grande noce. 12306 La plupart des femmes ne rêvent pas d’un mariage en grande noce. 12307 La plupart des autres chaînes. 12308 La plupart des grandes entreprises. 12309 La plupart des spécialistes s’entendent sur ce point. 12310 La plupart des spécialistes ne s’entendent sur ce point. 12311 La plupart du monde parle anglais. 12312 La plupart du monde ne parle pas anglais. 12313 La plupart du monde s’aventure ici. 12314 La plupart du monde ne s’aventure pas ici. 12315 Les guerres sont chères. 12316 L’avion volait à basse altitude. 12317 Quel que soit le problème 12318 Quelle que soit la difficulté 12319 Quelles que soient vos raisons 12320 Quelle que puisse être sa raison 12321 Quelles que puissent être vos raisons 12322 Il est trois heures et demie. 12323 L’entretien dure environ une demi-heure. 12324 La plupart du temps 12325 Il n’a nulle part où aller. 12326 J’ai trop de travail. 12327 Est-ce que tu viens ? 12328 Est-ce qu’ils viennent ? 12329 C’est ce que je dis. 12330 Il est ce que j’appelle un champion. 12331 Discuter est ce qu’elle fait le mieux. 12332 Il vient, n’est-ce pas ? 12333 Puis-je déposer mes affaires ? 12334 Sans doute je ne vais pas. 12335 Si d’aventure on en a. 12336 Tant que je vivrai je n’oublierai pas. 12337 Puis j’ai acheté cela. 12338 Puis je vais t’aider. 12339 Quel genre de musique j’écoute 12340 Que manges-tu ? 12341 Que prend-il ? 12342 Notre point de départ on pouvait le voir d’ici. 12343 Ce prédateur réintroduit il y a 30 ans. 12344 L’auditoire était on ne peut plus ravi. 12345 Que prend-elle ? 12346 C’est elle qui vient. 12347 Anne menait elle aussi sa petite existence. 12348 Que mange-t-il ? 12349 Où va-t-il ? 12350 Quel âge a-t-elle ? 12351 Comme cela elle n’a pas à cuisiner. 12352 Les jours de fête on ne travaille pas. 12353 L’histoire commence il y a longtemps. 12354 La chanteuse a elle aussi annulé son concert. 12355 À Vienne il acheta du chocolat. 12356 Que mangeons-nous ? 12357 Allons nous asseoir ici. 12358 Que mangez-vous ? 12359 Veuillez vous rendre à l’accueil. 12360 Sachez vous éloigner. 12361 Vous pouvez vous asseoir. 12362 Que mangent-ils ? 12363 Ce sont elles qui parlent. 12364 Vont-elles participer ? 12365 Les femmes vont elles aussi participer. 12366 Va-t’en ! 12367 C’est un va-t-en-guerre. 12368 Donne-m’en un peu. 12369 Que faut-il faire ? 12370 Quand arrivera-t-il ? 12371 Quand arrive-t-il ? 12372 Vous convainc-t-il par ses arguments ? 12373 Ne voilà-t-il pas ce qu’on appelle un signe des temps ? 12374 Quand arriveras-tu ? 12375 Quand arriveras-tu ? 12376 Il a écrit l’article à la une aujourd’hui. 12377 Les pays de la CE. 12378 La quarante-quatrième. 12379 Il faisait froid cet hiver-là. 12380 Veux-tu aller là ? 12381 Tout est là. 12382 Ils ne s’en tinrent pas là. 12383 Il sera là l’année prochaine. 12384 Voici mon amie. 12385 C’est sa onzième fille. 12386 Mon vieil ami. 12387 Ils sont comme de vieux ours. 12388 Il marche tous les matins. 12389 Corrige avant tout les erreurs. 12390 Tous les cours d’eau. 12391 Il ignore tout des oiseaux. 12392 Ce qui fait en tout deux personnes. 12393 Ils n’utilisent pas du tout les pieds. 12394 Merci à tous ceux qui sont venus. 12395 Je remercie avant tout ceux qui sont venus. 12396 Toutes ces erreurs qu’il fait 12397 Toute la saison 12398 Ils aiment tous la géographie. 12399 Il sera connu de tous un jour. 12400 C’est pour nous tous une mauvaise nouvelle. 12401 Je souhaite à tous une bonne année. 12402 Ils n’apprécient pas tous la nourriture. 12403 Ils sont tous au travail. 12404 Toutes les années 12405 Elle donne à tous des bouteilles. 12406 Mes amis n’apprécient pas tous la musique. 12407 On a tous des qualités. 12408 Je peux tous les lire. 12409 Ils ont tous une moto. 12410 C’est pour nous tous une mauvaise nouvelle. 12411 Toute la saison 12412 Après tout ma douleur n’est pas si forte. 12413 Je n’aime pas du tout la télévision. 12414 Tout le Canada. 12415 Ce qui fait en tout deux personnes. 12416 Tout cet équipement 12417 Toutes les cours de récréation 12418 Les femmes portent toutes des noms à consonance étrangère. 12419 Elles font toutes du business avec eux. 12420 En tout cas, je vous donnerai des nouvelles. 12421 Et si tu avais gagné 12422 Si tu mourais 12423 Si j’avais gagné 12424 S’ils avaient gagné 12425 Je veux que tu sois prudent. 12426 Je souhaitais que tu fusses présent. 12427 Je souhaite qu’il apprenne le français. 12428 Je ne permets pas que tu sois imprudent. 12429 Je n’exige pas que vous soyez ponctuels. 12430 C’est le seul ami qui me comprenne. 12431 À condition que tu réussisses. 12432 À condition que tu me prennes. 12433 Pourvu que tu réussisses 12434 Il est arrivé après que je fus parti. 12435 Je vous appelle pour que vous me donniez des renseignements. 12436 Bien que tu aies passé l’examen 12437 Je sais bien que tu reviendras. 12438 Je travaille de façon que nous puissions vivre. 12439 Je travaille de façon qu’il puisse vivre. 12440 En admettant qu’il soit allé 12441 Demander jusqu’à ce qu’il réponde. 12442 Demander jusqu’à ce qu’il me réponde. 12443 J’irai si tant est que je puisse. 12444 J’irai si tant est que je le puisse. 12445 Quoique je dise. 12446 Quoique je te dise. 12447 Elle est certaine que vous êtes un espion. 12448 Je n’ai pas compris. 12449 Tu n’as pas compris. 12450 Ne t’inquiète pas. 12451 On n’a pas compris. 12452 Il y a pas mal de choses à faire. 12453 Il a pas moins de 10 voitures. 12454 On ne part pas encore. 12455 On ne vous a pas compris. 12456 Il n’y a pas d’eau. 12457 Il en profita. 12458 C’est tout à fait correct. 12459 Elles sont quasiment à portée de main. 12460 Les filles sont de sortie. 12461 Le voisin d’à côté est pénible. 12462 Le gouvernement a depuis ordonné aux soldats de quitter le pays. 12463 Le canal de Suez. 12464 La pile de Volta. 12465 Ils sont par contre restés à la maison. 12466 Le cinéma tire à hue et à dia. 12467 L’autour attrapa une souris. 12468 Voici venu le temps des vacances. 12469 Le participe passé a tout de suite été vu. 12470 Il est né à Cabana. 12471 Il n’y a personne pour m’aider. 12472 Plusieurs de ces langues vont disparaitre. 12473 J’ai quelques ennuis. 12474 Passé les premières années à l’école, il s’assagit. 12475 Les années sont passées vite. 12476 Le serveur a été mis à jour. 12477 Le serveur a été mis en place. 12478 Les températures sont plus froides que prévu. 12479 La facture est plus élevée que prévu. 12480 Elles y arrivent elles-mêmes. 12481 Vous y arriverez vous-mêmes. 12482 Monsieur, vous y arriverez vous-même. 12483 L’accident a fait au moins trois morts. 12484 Je reçois des mises à jour régulièrement. 12485 C’est très important. 12486 J’ai très faim. 12487 Il est très à l’aise. 12488 Je suis très en retard. 12489 Très, très loin. 12490 Tu aimes beaucoup ? Très ! 12491 Je me sentirais très seul si tu venais à disparaître. 12492 le vieux quartier Très Cloîttres à Grenoble. 12493 Il fait faire très attention. 12494 Il les a fait fuir. 12495 Vous l’avez fait souffrir. 12496 Il ne les a pas fait fuir. 12497 Vous l’avez encore fait souffrir. 12498 Les voitures dernier cri. 12499 Ses derniers cris. 12500 Des points de vue. 12501 crier comme un putois 12502 faire un plongeon 12503 à midi 12504 tuyau d’arrosage 12505 fabrique de chaloupes 12506 sauce froide 12507 fabricant de chaloupes 12508 sauver par le gong 12509 stade de hockey 12510 bois dur 12511 flottage de bois 12512 flotteur de bois 12513 grenouille-taureau 12514 saumon d’eau douce 12515 où l’on peut faire du kayak 12516 sandwich long 12517 chute de neige abondante 12518 ruban à mesurer 12519 pot-au-feu 12520 billet à gratter 12521 marcher sur les pieds 12522 marcher sur 12523 défilé de mode 12524 à part ça 12525 en tout et pour tout 12526 tablette de chocolat 12527 machine à coudre 12528 maison jumelée 12529 intéressé par 12530 poser une question 12531 donner des cours 12532 au dos 12533 construction de logements 12534 quartier résidentiel 12535 motard criminel 12536 pom-pom girl 12537 aide sociale 12538 permis de construire 12539 quelques jours 12540 avis d’imposition 12541 clause dérogative 12542 faire semblant 12543 au-dessous de zéro 12544 ramasser de l’argent 12545 pouvoir gagner 12546 conter fleurette 12547 boîte postale 12548 de part en part 12549 l’aider 12550 les aider 12551 avoir besoin 12552 ce dont j’ai besoin 12553 beau-parleur 12554 ce matin 12555 bleu marine 12556 de prime abord 12557 vidange moteur 12558 ce soir 12559 poseur de briques 12560 tour de bureaux 12561 condition féminine 12562 benne à ordures 12563 sac-poubelle 12564 taxe d’ordures ménagères 12565 quelque part 12566 lutte contre 12567 successeur de 12568 harelde du Nord 12569 lagopède blanc 12570 gélinotte huppée 12571 semi-remorque 12572 nid de moustique 12573 chaque jour 12574 perche soleil 12575 pelle à poussière 12576 à portée de la main 12577 Une loquette d’Amérique 12578 lampe à huile 12579 peinture fraîche 12580 bois tendre 12581 flaque d’eau 12582 apporter des changements 12583 collecte de données 12584 collecte des ordures ménagères 12585 jaseur d’Amérique 12586 taux de succès scolaire 12587 bonnet de bain 12588 à carreaux 12589 dégât des eaux 12590 omble des fontaines 12591 ruban adhésif 12592 omble chevalier 12593 truite de mer 12594 être bon tireur 12595 bébé phoque 12596 chambre d’hôte 12597 réserve de faune 12598 pas de porte 12599 sumac vénéneux 12600 taille-crayon 12601 laisse de mer 12602 se fier à 12603 se vendre au prix de détail 12604 prêter attention à 12605 pommes de terre en purée 12606 tas de neige 12607 bonnet de laine 12608 perche noire 12609 carré-éponge 12610 avoir le sens de l’humour 12611 bâtir des châteaux en Espagne 12612 faire un bras de fer 12613 bras de fer 12614 faire un geste 12615 battre fort 12616 paille de fer 12617 corde à sauter 12618 taille-crayon 12619 tailler un crayon 12620 Le steward de Charlevoix a son charme. 12621 Une répression tous azimuts 12622 De tout temps 12623 À tout prix 12624 De toute façon 12625 de l’après-midi 12626 stylo plume 12627 maïs soufflé 12628 rôti de bœuf 12629 groupe de discussion 12630 prise de courant 12631 il faut dire que 12632 l’échapper belle 12633 s’opposer à 12634 sans objet 12635 grande caravane 12636 en stock 12637 du jeu 12638 livraison par exprès 12639 payable à la livraison 12640 registre des procès-verbaux 12641 attentat à la pudeur 12642 il faut dire que 12643 il faut dire que 12644 manomètre à air 12645 filet d’aiglefin 12646 prendre le parti de 12647 déclinez votre identité 12648 proposer des correctifs 12649 ouvrir la voie 12650 directeur de banque 12651 familier à 12652 de la première à la dernière page 12653 incendie circonscrit 12654 date d’échéance 12655 lait concentré 12656 entrée de service 12657 conduire une machine 12658 publier un communiqué 12659 délivrer un reçu 12660 occasion d’affaires 12661 crayon graphite 12662 appuyer une décision 12663 défrayer [quelqu’un] de ses dépenses 12664 suivre un cours 12665 J’ai pris des passagers en cours de route. 12666 J’ai pris part à ce cours d’informatique. 12667 avoir la situation en mains 12668 abolir des postes 12669 premier conférencier 12670 quart de jour 12671 chiffre prudent 12672 jusqu’à présent 12673 image de marque 12674 entreprise citoyenne 12675 comité mixte 12676 consultations externes 12677 quart de nuit 12678 quart de soir 12679 collecte de sang 12680 compressions budgétaires 12681 au petit matin 12682 suppressions de postes 12683 chef cuisinier 12684 chef de direction 12685 secrétaire de direction 12686 vice-président et directeur exécutif 12687 coupon de réduction 12688 faute d’inattention 12689 parler avec un accent 12690 proposer une candidature 12691 proposition comme candidat 12692 câble de démarrage 12693 Il commença à discuter avec moi. 12694 d’ici [x] minutes 12695 avec lequel je joue 12696 affecter à une tâche 12697 énergie nouvelle 12698 entrée interdite 12699 traiter un problème 12700 Il lui a adressé des compliments. 12701 Il est tiré d’affaire. 12702 Il est sorti d’affaire. 12703 traiter un sujet 12704 se heurter à un obstacle 12705 contrefaire une signature 12706 année scolaire 12707 salaire de base 12708 à l’avance 12709 Passer du temps. 12710 mes sans préjudice de 12711 s’introduire dans un marché 12712 être fourbu 12713 toucher un chèque 12714 s’adapter à la situation 12715 club de forme 12716 ballon sonde 12717 sous aucun prétexte 12718 inspecteur d’assurances 12719 séance de formation 12720 de séance 12721 répondre à des besoins 12722 Je veux la rencontrer et au besoin, lui parler. 12723 répondre à des exigences 12724 boîte à gants 12725 coffre bancaire 12726 enceinte acoustique 12727 droits des personnes 12728 dans la mesure où 12729 en ce qui me concerne 12730 ayant autorité 12731 responsable de la communication 12732 traiter une commande 12733 exécuter une ordonnance 12734 avoir un souvenir tout frais 12735 exécuter une ordonnance 12736 pourvoir un poste 12737 mal juger son coup 12738 prétendre que 12739 chargeuse-pelleteuse 12740 numéro gratuit 12741 revêtement de sol 12742 femme active 12743 vidange moteur 12744 voiture gratuite 12745 billet de faveur 12746 rémunération du capital 12747 assurance contre l’incendie 12748 porte-fenêtre 12749 c’est le moins qu’on puisse dire 12750 monde des affaires 12751 simple détention 12752 piste de vitesse 12753 leçon particulière 12754 porter ses fruits 12755 cuir verni 12756 jardinerie [raison sociale] 12757 poste de vigie 12758 concentré de tomate 12759 palais des foires 12760 centre de découverte 12761 renseignement exclusif 12762 ensemble de jardin 12763 meuble de jardin 12764 piquet de grève 12765 file d’attente 12766 agression à domicile 12767 salle à manger 12768 au minimum 12769 Les femmes participent activement à ce processus. 12770 être en droit de 12771 blessure bénigne 12772 agglomération de Montréal 12773 agglomération de Québec 12774 exclusivité de 12775 Une interview exclusive donnée à la presse. 12776 cuillère à soupe 12777 cuillère à café 12778 baguette de pain 12779 pain complet 12780 panne de courant 12781 insister pour que 12782 atteindre le seuil de rentabilité 12783 invoquer le règlement 12784 arts plastiques 12785 voulant que 12786 c’est la raison pour laquelle 12787 se sentir visé 12788 sûreté supplémentaire 12789 comptoir à salades 12790 combat décisif 12791 pourvoir à un poste 12792 dîner officiel 12793 assiette de viandes froides 12794 jeu de construction 12795 petit boulot 12796 mettre à profit 12797 libre-service de demi-gros 12798 additionnal premium 12799 Ils hésitent face aux montants de la dette. 12800 prime temporaire 12801 mettre en état d’arrestation. 12802 en service. 12803 sous-entrepreneur. 12804 champion en titre. 12805 cas de force majeure. 12806 acte de naissance. 12807 affronter la tempête. 12808 interjeter appel. 12809 se rendre aux urnes. 12810 être diffusé. 12811 organiser un référendum. 12812 en service. 12813 outrage ou tribunal 12814 clauses d’un contrat 12815 circulation dense 12816 abus de confiance. 12817 avis de sinistre 12818 pour autant que je sache 12819 chaîne de montage 12820 chaîne d’assemblage 12821 carnet de banque 12822 client habituel 12823 prix réduit 12824 prix d’entrée 12825 prix courant 12826 descente aux enfers 12827 la cambrure du pied 12828 budget d’exploitation 12829 en retard. 12830 faire une promenade 12831 nuire à un résultat. 12832 entrer en vigueur 12833 prendre de force 12834 déclencher une discussion 12835 prendre part aux discussions 12836 créer une entreprise 12837 Il est parti de cette entreprise. 12838 faire courir une rumeur 12839 être touché par un témoignage 12840 toute l’année 12841 toute la journée 12842 à longueur de semaine. 12843 immeuble résidentiel 12844 conférences téléphoniques 12845 registered mail. 12846 braderie. 12847 soldes après incendie. 12848 pour seulement 12849 collectes de fonds 12850 pendant la saison 12851 siège-social 12852 Ça s’annonce mal. 12853 trous de mémoire 12854 indemnité de congé payé 12855 compte en banque 12856 facture d’électricité 12857 facture de téléphone 12858 billet gratuit 12859 être nerveux 12860 chaîne stéréo 12861 pince étau 12862 déposer une plainte 12863 faire un appel téléphonique 12864 voter une loi 12865 faire un appel 12866 avoir hâte de 12867 laisser découvrir la vérité 12868 pulvériser un record 12869 pour comble d’insulte 12870 aime que 12871 Ils m’apprécient en tant que collègue. 12872 être au sommet de ma forme 12873 être persuadé que 12874 avoir besoin de 12875 être au bout du rouleau 12876 faire des affaires 12877 être chargé 12878 Ils sont pris en charge. 12879 être dans le pétrin 12880 être dans la même situation 12881 laisser fuir de l’information 12882 situation imprévue 12883 pour information 12884 pain de savon 12885 inciter les gens à voter 12886 l’emporter sur 12887 applaudir chaleureusement 12888 broyer du noir 12889 tenir la gauche 12890 tenir la droite 12891 avoir à l’œil 12892 En deux mots 12893 nappe de pétrole 12894 jouer un rôle de second plan 12895 mettre l’accent sur 12896 Un récipient rempli entièrement. 12897 Le moteur fonctionne à 100 % de sa capacité. 12898 Il a la capacité de le faire. 12899 On les juge à leur capacité de résoudre les problèmes. 12900 mettre la main à la pâte 12901 tenter sa chance 12902 détails techniques 12903 avoir de sens 12904 parcs récréatifs 12905 hors d’usage 12906 accord global 12907 lit grand format 12908 lit très grand format 12909 bureau de vote 12910 hors champ 12911 tuyau d’échappement 12912 sans objet 12913 Le Nil est un fleuve d’Afrique. 12914 soins infirmiers 12915 parc de stationnement 12916 en direct 12917 monte-charge 12918 prêt-à-monter 12919 esprit d’entreprise 12920 témoin informatique 12921 stratégie de marque 12922 bon marché 12923 homme de main 12924 séance d’informations 12925 Le monospace. 12926 les coulisses 12927 Les dépassés. 12928 les media de masse 12929 les fauteuils de repos 12930 les hayons 12931 les privilégiés 12932 haute technologie 12933 à plein régime 12934 rouleau impérial 12935 chaudrée de palourdes 12936 nuque longue 12937 pièce à conviction 12938 d’office 12939 chambre d’hôte 12940 fenêtre arquée 12941 fichier de sauvegarde 12942 grand écart 12943 tant pis ! 12944 par tête 12945 prise de courant 12946 allocation journalière 12947 coup de départ 12948 maison sur deux niveaux 12949 obligation spéculative 12950 Steve Jobs, le pionnier de l’ordinateur conçu comme une prison cool, mise au point pour supprimer leur liberté aux idiots, est mort. 12951 manque de crédibilité 12952 film de route 12953 à touches 12954 prix de couvert 12955 café express 12956 rencontre arrangée 12957 cabaret clandestin 12958 mes jalousies 12959 cornichon mariné 12960 en tout cas 12961 abri voiture 12962 sans escale 12963 chaîner stéréo 12964 complexe multisalle 12965 argent comptant 12966 papier-cache adhésif 12967 juste-à-temps 12968 c’est bien dommage 12969 vol nolisé 12970 jeu de guerre 12971 surf des neiges 12972 très sec 12973 planche à roulette 12974 commerce interentreprises 12975 régler la note 12976 poste à poste 12977 golf miniature 12978 capitaux flottants 12979 retour en vogue 12980 concepteur de jeux 12981 société de participation 12982 manche à balai 12983 entreprise conjointe 12984 gaffe de tournage 12985 piratage téléphonique 12986 Le cinéma à domicile est un phénomène nouveau. 12987 Les livres électroniques sont difficiles à lire. 12988 Il fait une séance de rencontres éclair. 12989 Il fait un logiciel gratuit. 12990 Il fait un logiciel publicitaire. 12991 Il fait du référencement abusif. 12992 Il fait du hameçonnage. 12993 Il fait du pollupostage. 12994 plutôt mourir 12995 logiciel malveillant 12996 logiciel harcelant 12997 commerce électronique 12998 bailleur de fonds 12999 dernière commande 13000 en attente. 13001 assurance inconditionnelle. 13002 acier inoxydable. 13003 fermeture à glissière. 13004 briseur de grève. 13005 grand format. 13006 en mer 13007 Usain Bolt est un athlète jamaïcain. 13008 spectacle fastueux. 13009 Il parle de rythme. 13010 Il parle des soldes d’après Noël. 13011 liste de contrôle 13012 p. ex. 13013 vente forcée 13014 voitures de location 13015 location de voitures 13016 en souffrance. 13017 combinaison isolante. 13018 tourniquet d’arrosage. 13019 simple député 13020 sac à restes 13021 tondeuse à cheveux. 13022 bilan de santé 13023 retour en arrière 13024 emballage de six 13025 Le capitaine Haddock est l’ami de Tintin. 13026 dans ce cas, il est certain 13027 et ce, 13028 Par-ci par-là. 13029 eh, 13030 eh bien, 13031 Je l’ai vu ici même hier. 13032 Des impressions recto verso. 13033 La bouteille est aux deux tiers pleine. 13034 Un trois-quarts de rugby. 13035 Les trois-quarts de l’équipe de rugby. 13036 La bouteille est aux trois quarts pleine. 13037 Un trois-quarts de rugby. 13038 S’il te plaît, dessine-moi un mouton. 13039 Il y a un va-et-vient dans cette maison. 13040 Les états-majors ont décidé. 13041 Avez-vous le tout-à-l’égout ? 13042 C’est un va-nu-pieds. 13043 Elle est la vice-présidente. 13044 J’habite au rez-de-chaussée. 13045 Je m’appelle Jean-Marc. 13046 Je m’appelle Pierre-Yves. 13047 Je m’appelle Charles-Édouard. 13048 Je m’appelle Marie-Laure. 13049 Je m’appelle Anne-Sophie. 13050 Mon grand-père a 100 ans. 13051 J’ai ouï-dire qu’il ne viendra pas. 13052 C’est un chef-d’œuvre. 13053 Il habite en Franche-Comté. 13054 Il habite à Clermont-Ferrand. 13055 Le massif du Mont-Blanc. 13056 Le mont Blanc est le point culminant des Alpes. 13057 Un trait d’union. 13058 J’ai la quasi-certitude qu’il ne viendra pas. 13059 Je suis quasi certain qu’il ne viendra pas. 13060 Une fin de non-recevoir. 13061 Non merci. 13062 Je me demande s’il avait ou non conscience que son arme était chargée. 13063 etc. 13064 Un écrivain du XIXe siècle 13065 La 2e à droite 13066 Les 2es. 13067 Les 2des. 13068 Le 2d. 13069 Je me sens chez moi dans ton chez-toi. 13070 Mon ex-femme habite près de chez moi. 13071 La procédure est semi-automatique. 13072 Je pense qu’il ment. 13073 Je m’étais perdu. 13074 La lettre l est mal écrite. 13075 La variable x est constante. 13076 Moody’s a abaissé la note de la dette du Japon. 13077 Le vainqueur du 100 m aurait triché. 13078 Ces deux interactions, respectivement 10-15 m et 10-18 m expliquent les difficultés expérimentales rencontrées. 13079 Il n’arrive jamais à l’heure. 13080 L’histoire. 13081 Un livre d’histoire et géographie. 13082 La vitamine D ou la vitamine C. 13083 Ils ont beaucoup d’enfants. 13084 Un chef-d’œuvre 13085 Va-t’en d’ici. 13086 Ils ont beaucoup d’enfants. 13087 Pressez la touche “c” pour continuer. 13088 J’ai reçu des fleurs pour la Saint-Valentin. 13089 J’ai un chien, un chat, un lapin, etc. 13090 parce que 13091 redoubler une année 13092 Je me rappelle ce moment. 13093 J’ai reçu le rappel de la facture. 13094 Je me rappelle de quelle manière il a dit cela. 13095 Il faut lui rappeler de refaire tout cela. 13096 Il faut lui rappeler de me téléphoner. 13097 Tu te rappelles de moi ? 13098 Elle me rappelle de me rendre à la banque. 13099 Cela me rappelle de loin mon enfance. 13100 Je me rappelle de moins en mois mon enfance. 13101 Je me rappelle de temps en temps mon enfance. 13102 Je vais te rappeler de suite. 13103 Rappelé de Paris auprès de son père. 13104 Je me rappelle Anne. 13105 Je me souviens d’Anne. 13106 Il faut lui rappeler d’envoyer la lettre. 13107 Tu te rappelles d’eux ? 13108 Il rappelle d’ailleurs que ce lieu peut être légendaire. 13109 Je ne me rappelle pas ce moment. 13110 Je me rappelle de quelle manière il a dit cela. 13111 Je dois me rappelle de tout ranger. 13112 Ils se rappellent bien de moi. 13113 Je me rappelle bien Anne. 13114 Je me rappelle toujours d’allumer la lumière. 13115 Ils se rappellent bien d’elle. 13116 T’es-tu décidé ou non ? 13117 T’es-tu décidé ou non ? 13118 Il va chez le coiffeur tous les mois. 13119 Il est arrivé à pied. 13120 Il a sauté à pieds joints. 13121 Il a pied dans ce bassin. 13122 Je n’ai pas pied dans ce bassin. 13123 L’entreprise l’a mis à pied. 13124 Le projet que j’ai mis sur pied est en bonne voie. 13125 Il s’est habillé de pied en cap comme un militaire. 13126 Je l’attends de pied ferme. 13127 Il travaille d’arrache-pied sur ce projet. 13128 Le chiffre d’affaires de l’entreprise. 13129 La défaite s’ensuivit. 13130 la damer 13131 loin de là 13132 favoriser une candidature 13133 aussi mauvais 13134 savoir gré 13135 Le contrat est négocié de gré à gré. 13136 accaparer quelque chose 13137 assieds-toi. 13138 asseyez-vous. 13139 n’être pas sans savoir. 13140 Je ne suis pas sans savoir 13141 J’ai de la fièvre ? 13142 J’ai la fièvre ? 13143 As-tu la fièvre ? 13144 As-tu de la fièvre ? 13145 L’échappée belle d’un coureur cycliste. 13146 à motocyclette. 13147 asseoir. 13148 ne me contredisez pas. 13149 effectif scolaire. 13150 effectif étudiant. 13151 moins mauvais. 13152 à Lac-Beauport. 13153 bran de scie. 13154 à Cap-de-la-Madeleine. 13155 lire dans le journal. 13156 rue passante. 13157 artère passante. 13158 avenue passante. 13159 boulevard passant. 13160 L’ère glaciaire. 13161 tâcher que 13162 À l’aimable attention de 13163 Un cadeau à l’intention de ma femme. 13164 c’est de lui que je parle 13165 Les métaux précieux et l’or en particulier restent des investissements sûrs. 13166 par acquit de conscience. 13167 faire partie de 13168 tirer parti 13169 prendre parti 13170 J’ai pris une partie de l’argent. 13171 Le site a été en partie traduit. 13172 Il s’est transformé en parti politique. 13173 Il arrive en général assez tard. 13174 faire affaire avec 13175 tenir pour acquis 13176 Il est en pleine campagne électorale. 13177 Tant pis si je perds. 13178 Les choses vont de mal en pis. 13179 Finalement, il a gagné. 13180 Au final de cette sonate. 13181 Il a pulvérisé le record. 13182 Ils ont fait exploser le pont. 13183 papillon adhésif 13184 mouchoir de papier 13185 Mars était le dieu de la guerre. 13186 Février est le mois le plus froid. 13187 La monarchie de Juillet. 13188 Cette année, juin a été chaud. 13189 Juin est le sixième mois. 13190 Je suis né le 30 mars 1960. 13191 La planète Mars est rouge. 13192 Dans la mythologie romaine, Mars est le dieu de la guerre. 13193 Je viendrai lundi. 13194 Lundi est le premier jour de la semaine. 13195 Je parle anglais, mais je ne suis pas Anglais. 13196 Il est surpris d’apprendre que le Japonais est incapable de le comprendre. 13197 Les Bretons parlent aux Français. 13198 Napoléon est né en Corse. 13199 Je travaille en anglais avec des Anglais. 13200 Je travaille en anglais avec des Anglaises. 13201 Même les Français ont un français qui est loin d’être parfait. 13202 Écrit dans un anglais facile 13203 Le numéro un français a gagné à Roland-Garros aujourd’hui. 13204 Il s’est exprimé dans un français approximatif. 13205 Une leçon de français. 13206 J’ai appris un peu de français ici et là. 13207 Une invasion de troupes soviétiques. 13208 Le clocher de l’église 13209 En fonction de l’état quantique de l’électron. 13210 Oui… 13211 Vous vous parlez. 13212 Il est capable de te faire faire des choses surprenantes. 13213 En en demandant deux 13214 C’est donnant donnant 13215 L’est est de ce côté. 13216 Les poules du couvent couvent. 13217 Un film un peu olé olé. 13218 Je suis allé à Bora Bora. 13219 Les chiens aboient à qui mieux mieux. 13220 De l’orge perlé. 13221 De l’orge mondé. 13222 Il vous faut un laissez-passer. 13223 Le courant est d’un demi-nœud. 13224 Un signal de 3,5 Hz. 13225 L’appareil a consommé 5 kW·h. 13226 L’appareil a consommé 5 kWh. 13227 Une température de 3 kelvins. 13228 Un courant de 10 ampères. 13229 Un courant de dix ampères. 13230 Il a remporté la médaille Fields. 13231 Jeudi 28 août 2014. 13232 Dimanche 14 septembre 2014. 13233 Le dimanche 19 juil 2015. 13234 Le dimanche 19 juillet 2015. 13235 Jeudi 28/08/2014. 13236 Jeudi 2014/08/28. 13237 Jeudi 28-08-2014. 13238 Il est né le 31 octobre. 13239 Il est né le 30 septembre. 13240 Il est né le 31/10/1969. 13241 Il est né le 31-8-69. 13242 Il est né le 31-aout-1969. 13243 Il est né le 28 février. 13244 Il est né le 28-02-1969. 13245 Le 29 février 2000. 13246 Le 29/février/2000. 13247 Le 29/02/2000. 13248 Le 29/2/2000. 13249 Le 29 février 2004. 13250 Le 29 février 2008. 13251 Le 29 février 2012. 13252 Le 29 février 2016. 13253 Le 29 février 2020. 13254 Le 29-février-2004 13264 Le Horla — Guy de Maupassant 13266 J’aime ce pays, et j’aime y vivre parce que j’y ai mes racines, ces profondes et délicates racines, qui attachent un homme à la terre où sont nés et morts ses aïeux, qui l’attachent à ce qu’on pense et à ce qu’on mange, aux usages comme aux nourritures, aux locutions locales, aux intonations des paysans, aux odeurs du sol, des villages et de l’air lui-même. 13267 J’aime ma maison où j’ai grandi. 13268 De mes fenêtres, je vois la Seine qui coule, le long de mon jardin, derrière la route, presque chez moi, la grande et large Seine, qui va de Rouen au Havre, couverte de bateaux qui passent. 13269 À gauche, là-bas, Rouen, la vaste ville aux toits bleus, sous le peuple pointu des clochers gothiques. 13270 Ils sont innombrables, frêles ou larges, dominés par la flèche de fonte de la cathédrale, et pleins de cloches qui sonnent dans l’air bleu des belles matinées, jetant jusqu’à moi leur doux et lointain bourdonnement de fer, leur chant d’airain que la brise m’apporte, tantôt plus fort et tantôt plus affaibli, suivant qu’elle s’éveille ou s’assoupit. 13271 Comme il faisait bon ce matin ! 13272 Vers onze heures, un long convoi de navires, traînés par un remorqueur, gros comme une mouche, et qui râlait de peine en vomissant une fumée épaisse, défila devant ma grille. 13273 Après deux goëlettes anglaises, dont le pavillon rouge ondoyait sur le ciel, venait un superbe trois-mats brésilien, tout blanc, admirablement propre et luisant. 13274 Je le saluai, je ne sais pourquoi, tant ce navire me fit plaisir à voir. 13275 12 mai. — J’ai un peu de fièvre depuis quelques jours ; je me sens souffrant, ou plutôt je me sens triste. 13276 D’où viennent ces influences mystérieuses qui changent en découragement notre bonheur et notre confiance en détresse. 13277 On dirait que l’air, l’air invisible est plein d’inconnaissables Puissances, dont nous subissons les voisinages mystérieux. 13278 Je m’éveille plein de gaîté, avec des envies de chanter dans la gorge. — Pourquoi ? — Je descends le long de l’eau ; et soudain, après une courte promenade, je rentre désolé, comme si quelque malheur m’attendait chez moi. — Pourquoi ? — Est-ce un frisson de froid qui, frôlant ma peau, a ébranlé mes nerfs et assombri mon âme ? 13279 Est-ce la forme des nuages, ou la couleur du jour, la couleur des choses, si variable, qui, passant par mes yeux, a troublé ma pensée ? Sait-on ? 13280 Tout ce qui nous entoure, tout ce que nous voyons sans le regarder, tout ce que nous frôlons sans le connaître, tout ce que nous touchons sans le palper, tout ce que nous rencontrons sans le distinguer, a sur nous, sur nos organes et, par eux, sur nos idées, sur notre cœur lui-même, des effets rapides, surprenants et inexplicables ? 13281 Comme il est profond, ce mystère de l’Invisible ! 13282 Nous ne le pouvons sonder avec nos sens misérables, avec nos yeux qui ne savent apercevoir ni le trop petit, ni le trop grand, ni le trop près, ni le trop loin, ni les habitants d’une étoile, ni les habitants d’une goutte d’eau… avec nos oreilles qui nous trompent, car elles nous transmettent les vibrations de l’air en notes sonores. 13283 Elles sont des fées qui font ce miracle de changer en bruit ce mouvement et par cette métamorphose donnent naissance à la musique, qui rend chantante l’agitation muette de la nature… avec notre odorat, plus faible que celui du chien… avec notre goût, qui peut à peine discerner l’âge d’un vin ! 13284 Ah ! si nous avions d’autres organes qui accompliraient en notre faveur d’autres miracles, que de choses nous pourrions découvrir encore autour de nous ! 13285 16 mai. — Je suis malade, décidément ! Je me portais si bien le mois dernier ! 13286 J’ai la fièvre, une fièvre atroce, ou plutôt un énervement fiévreux, qui rend mon âme aussi souffrante que mon corps. 13287 J’ai sans cesse cette sensation affreuse d’un danger menaçant, cette appréhension d’un malheur qui vient ou de la mort qui approche, ce pressentiment qui est sans doute l’atteinte d’un mal encore inconnu, germant dans le sang et dans la chair. 13288 18 mai. — Je viens d’aller consulter mon médecin, car je ne pouvais plus dormir. Il m’a trouvé le pouls rapide, l’œil dilaté, les nerfs vibrants, mais sans aucun symptôme alarmant. 13289 Je dois me soumettre aux douches et boire du bromure de potassium. 13290 25 mai. — Aucun changement ! Mon état, vraiment, est bizarre. À mesure qu’approche le soir, une inquiétude incompréhensible m’envahit, comme si la nuit cachait pour moi une menace terrible. 13291 Je dîne vite, puis j’essaie de lire ; mais je ne comprends pas les mots ; je distingue à peine les lettres. 13292 Je marche alors dans mon salon de long en large, sous l’oppression d’une crainte confuse et irrésistible, la crainte du sommeil et la crainte du lit. 13293 Vers dix heures, je monte dans ma chambre. À peine entré, je donne deux tours de clef, et je pousse les verrous ; j’ai peur… de quoi ?… 13294 Je ne redoutais rien jusqu’ici… j’ouvre mes armoires, je regarde sous mon lit ; j’écoute… j’écoute… quoi ?… 13295 Est-ce étrange qu’un simple malaise, un trouble de la circulation peut-être, l’irritation d’un filet nerveux, un peu de congestion, une toute petite perturbation dans le fonctionnement si imparfait et si délicat de notre machine vivante, puisse faire un mélancolique du plus joyeux des hommes, et un poltron du plus brave ? 13296 Puis, je me couche, et j’attends le sommeil comme on attendrait le bourreau. 13297 Je l’attends avec l’épouvante de sa venue ; et mon cœur bat, et mes jambes frémissent ; et tout mon corps tressaille dans la chaleur des draps, jusqu’au moment où je tombe tout à coup dans le repos, comme on tomberait pour s’y noyer, dans un gouffre d’eau stagnante. 13298 Je ne le sens pas venir, comme autrefois, ce sommeil perfide, caché près de moi, qui me guette, qui va me saisir par la tête, me fermer les yeux, m’anéantir. 13299 Je dors — longtemps — deux ou trois heures — puis un rêve — non — un cauchemar m’étreint. 13300 Je sens bien que je suis couché et que je dors… je le sens et je le sais… et je sens aussi que quelqu’un s’approche de moi, me regarde, me palpe, monte sur mon lit, s’agenouille sur ma poitrine, me prend le cou entre ses mains et serre… serre… de toute sa force pour m’étrangler. 13301 Moi, je me débats, lié par cette impuissance atroce, qui nous paralyse dans les songes ; je veux crier, — je ne peux pas ; — je veux remuer, — je ne peux pas ; — j’essaye, avec des efforts affreux, en haletant, de me tourner, de rejeter cet être qui m’écrase et qui m’étouffe, — je ne peux pas ! 13302 Et soudain, je m’éveille, affolé, couvert de sueur. J’allume une bougie. Je suis seul. 13303 Après cette crise, qui se renouvelle toutes les nuits, je dors enfin, avec calme, jusqu’à l’aurore. 13304 2 juin. — Mon état s’est encore aggravé. Qu’ai-je donc ? Le bromure n’y fait rien ; les douches n’y font rien. 13305 Tantôt, pour fatiguer mon corps, si las pourtant, j’allai faire un tour dans la forêt de Roumare. 13306 Je crus d’abord que l’air frais, léger et doux, plein d’odeur d’herbes et de feuilles, me versait aux veines un sang nouveau, au cœur une énergie nouvelle. 13307 Je pris une grande avenue de chasse, puis je tournai vers La Bouille, par une allée étroite, entre deux armées d’arbres démesurément hauts qui mettaient un toit vert, épais, presque noir, entre le ciel et moi. 13308 Un frisson me saisit soudain, non pas un frisson de froid, mais un étrange frisson d’angoisse. 13309 Je hâtai le pas, inquiet d’être seul dans ce bois, apeuré sans raison, stupidement, par la profonde solitude. Tout à coup, il me sembla que j’étais suivi, qu’on marchait sur mes talons, tout près, à me toucher. 13310 Je me retournai brusquement. J’étais seul. 13311 Je ne vis derrière moi que la droite et large allée, vide, haute, redoutablement vide ; et de l’autre côté elle s’étendait aussi à perte de vue, toute pareille, effrayante. 13312 Je fermai les yeux. Pourquoi ? Et je me mis à tourner sur un talon, très vite, comme une toupie. Je faillis tomber ; je rouvris les yeux ; les arbres dansaient ; la terre flottait ; je dus m’asseoir. 13313 Puis, ah ! je ne savais plus par où j’étais venu ! Bizarre idée ! Bizarre ! Bizarre idée ! Je ne savais plus du tout. 13314 Je partis par le côté qui se trouvait à ma droite, et je revins dans l’avenue qui m’avait amené au milieu de la forêt. 13315 3 juin. — La nuit a été horrible. Je vais m’absenter pendant quelques semaines. Un petit voyage, sans doute, me remettra. 13316 2 juillet. — Je rentre. Je suis guéri. J’ai fait d’ailleurs une excursion charmante. J’ai visité le mont Saint-Michel que je ne connaissais pas. 13317 Quelle vision, quand on arrive, comme moi, à Avranches, vers la fin du jour ! La ville est sur une colline ; et on me conduisit dans le jardin public, au bout de la cité. Je poussai un cri d’étonnement. 13318 Une baie démesurée s’étendait devant moi, à perte de vue, entre deux côtes écartées se perdant au loin dans les brumes ; et au milieu de cette immense baie jaune, sous un ciel d’or et de clarté, s’élevait sombre et pointu un mont étrange, au milieu des sables. Le soleil venait de disparaître, et sur l’horizon encore flamboyant se dessinait le profil de ce fantastique rocher qui porte sur son sommet un fantastique monument. 13319 Dès l’aurore, j’allai vers lui. La mer était basse, comme la veille au soir, et je regardais se dresser devant moi, à mesure que j’approchais d’elle, la surprenante abbaye. 13320 Après plusieurs heures de marche, j’atteignis l’énorme bloc de pierres qui porte la petite cité dominée par la grande église. Ayant gravi la rue étroite et rapide, j’entrai dans la plus admirable demeure gothique construite pour Dieu sur la terre, vaste comme une ville, pleine de salles basses écrasées sous des voûtes et de hautes galeries que soutiennent de frêles colonnes. 13321 J’entrai dans ce gigantesque bijou de granit, aussi léger qu’une dentelle, couvert de tours, de sveltes clochetons, où montent des escaliers tordus, et qui lancent dans le ciel bleu des jours, dans le ciel noir des nuits, leurs têtes bizarres hérissées de chimères, de diables, de bêtes fantastiques, de fleurs monstrueuses, et reliés l’un à l’autre par de fines arches ouvragées. 13322 Quand je fus sur le sommet, je dis au moine qui m’accompagnait : « Mon père, comme vous devez être bien ici ! » 13323 Il répondit : « Il y a beaucoup de vent, Monsieur » ; et nous nous mîmes à causer en regardant monter la mer, qui courait sur le sable et le couvrait d’une cuirasse d’acier. 13324 Et le moine me conta des histoires, toutes les vieilles histoires de ce lieu, des légendes, toujours des légendes. 13325 Une d’elles me frappa beaucoup. Les gens du pays, ceux du mont, prétendent qu’on entend parler la nuit dans les sables, puis qu’on entend bêler deux chèvres, l’une avec une voix forte, l’autre avec une voix faible. Les incrédules affirment que ce sont les cris des oiseaux de mer, qui ressemblent tantôt à des bêlements, et tantôt à des plaintes humaines ; mais les pêcheurs attardés jurent avoir rencontré rôdant sur les dunes, entre deux marées, autour de la petite ville jetée ainsi loin du monde, un vieux berger, dont on ne voit jamais la tête couverte de son manteau, et qui conduit, en marchant devant eux, un bouc à figure d’homme et une chèvre à figure de femme, tous deux avec de longs cheveux blancs et parlant sans cesse, se querellant dans une langue inconnue, puis cessant soudain de crier pour bêler de toute leur force. 13326 Je dis au moine : « Y croyez-vous ? » 13327 Il murmura : « Je ne sais pas. » 13328 Je repris : « S’il existait sur la terre d’autres êtres que nous, comment ne les connaîtrions-nous point depuis longtemps : comment ne les auriez-vous pas vus, vous ? comment ne les aurais-je pas vus, moi ? » 13329 Il répondit : « Est-ce que nous voyons la cent-millième partie de ce qui existe ? Tenez, voici le vent, qui est la plus grande force de la nature, qui renverse les hommes, abat les édifices, déracine les arbres, soulève la mer en montagnes d’eau, détruit les falaises, et jette aux brisants les grands navires, le vent qui tue, qui siffle, qui gémit, qui mugit, — l’avez-vous vu, et pouvez-vous le voir ? Il existe, pourtant. » 13330 Je me tus devant ce simple raisonnement. Cet homme était un sage ou peut-être un sot. Je ne l’aurais pu affirmer au juste ; mais je me tus. Ce qu’il disait là, je l’avais pensé souvent. 13331 3 juillet. — J’ai mal dormi ; certes, il y a ici une influence fiévreuse, car mon cocher souffre du même mal que moi. En rentrant hier, j’avais remarqué sa pâleur singulière. Je lui demandai : 13332 — Qu’est-ce que vous avez, Jean ? 13333 — J’ai que je ne peux plus me reposer, Monsieur, ce sont mes nuits qui mangent mes jours. Depuis le départ de Monsieur, cela me tient comme un sort. 13334 Les autres domestiques vont bien cependant, mais j’ai grand peur d’être repris, moi. 13335 4 juillet. — Décidément, je suis repris. Mes cauchemars anciens reviennent. 13336 Cette nuit, j’ai senti quelqu’un accroupi sur moi, et qui, sa bouche sur la mienne, buvait ma vie entre mes lèvres. Oui, il la puisait dans ma gorge, comme aurait fait une sangsue. 13337 Puis il s’est levé, repu, et moi je me suis réveillé, tellement meurtri, brisé, anéanti, que je ne pouvais plus remuer. Si cela continue encore quelques jours, je repartirai certainement. 13338 5 juillet. — Ai-je perdu la raison ? Ce qui s’est passé, ce que j’ai vu la nuit dernière est tellement étrange, que ma tête s’égare quand j’y songe ! 13339 Comme je le fais maintenant chaque soir j’avais fermé ma porte à clef ; puis, ayant soif, je bus un demi-verre d’eau, et je remarquai par hasard que ma carafe était pleine jusqu’au bouchon de cristal. 13340 Je me couchai ensuite et je tombai dans un de mes sommeils épouvantables, dont je fus tiré au bout de deux heures environ par une secousse plus affreuse encore. 13341 Figurez-vous un homme qui dort, qu’on assassine, et qui se réveille avec un couteau dans le poumon, et qui râle, couvert de sang, et qui ne peut plus respirer, et qui va mourir, et qui ne comprend pas — voilà. 13342 Ayant enfin reconquis ma raison, j’eus soif de nouveau ; j’allumai une bougie et j’allai vers la table où était posée ma carafe. Je la soulevai en la penchant sur mon verre ; rien ne coula. — Elle était vide ! Elle était vide complètement ! 13343 D’abord, je n’y compris rien ; puis, tout à coup, je ressentis une émotion si terrible, que je dus m’asseoir, ou plutôt, que je tombai sur une chaise ! puis, je me redressai d’un saut pour regarder autour de moi ! puis je me rassis, éperdu d’étonnement et de peur, devant le cristal transparent ! 13344 Je le contemplais avec des yeux fixes, cherchant à deviner. Mes mains tremblaient ! On avait donc bu cette eau ? Qui ? Moi ? moi, sans doute ? Ce ne pouvait être que moi ? 13345 Alors, j’étais somnambule, je vivais, sans le savoir, de cette double vie mystérieuse qui fait douter s’il y a deux êtres en nous, ou si un être étranger, inconnaissable et invisible, anime, par moments, quand notre âme est engourdie, notre corps captif qui obéit à cet autre, comme à nous-mêmes, plus qu’à nous-mêmes. 13346 Ah ! qui comprendra mon angoisse abominable ? 13347 Qui comprendra l’émotion d’un homme, sain d’esprit, bien éveillé, plein de raison et qui regarde épouvanté, à travers le verre d’une carafe, un peu d’eau disparue pendant qu’il a dormi ! 13348 Et je restai là jusqu’au jour, sans oser regagner mon lit. 13349 6 juillet. — Je deviens fou. On a encore bu toute ma carafe cette nuit ; — ou plutôt, je l’ai bue ! 13350 Mais, est-ce moi ? Est-ce moi ? Qui serait-ce ? Qui ? Oh ! mon Dieu ! Je deviens fou ? Qui me sauvera ? 13351 10 juillet. — Je viens de faire des épreuves surprenantes. 13352 Décidément, je suis fou ! Et pourtant ! 13353 Le 6 juillet, avant de me coucher, j’ai placé sur ma table du vin, du lait, de l’eau, du pain et des fraises. 13354 On a bu — j’ai bu — toute l’eau, et un peu de lait. On n’a touché ni au vin, ni au pain, ni aux fraises. 13355 Le 7 juillet, j’ai renouvelé la même épreuve, qui a donné le même résultat. 13356 Le 8 juillet, j’ai supprimé l’eau et le lait. On n’a touché à rien. 13357 Le 9 juillet enfin, j’ai remis sur ma table l’eau et le lait seulement, en ayant soin d’envelopper les carafes en des linges de mousseline blanche et de ficeler les bouchons. 13358 Puis, j’ai frotté mes lèvres, ma barbe, mes mains avec de la mine de plomb, et je me suis couché. 13359 L’invincible sommeil m’a saisi, suivi bientôt de l’atroce réveil. Je n’avais point remué ; mes draps eux-mêmes ne portaient pas de taches. 13360 Je m’élançai vers ma table. Les linges enfermant les bouteilles étaient demeurés immaculés. 13361 Je déliai les cordons, en palpitant de crainte. On avait bu toute l’eau ! on avait bu tout le lait ! Ah ! mon Dieu !… 13362 Je vais partir tout à l’heure pour Paris. 13363 12 juillet. — Paris. J’avais donc perdu la tête les jours derniers ! 13364 J’ai dû être le jouet de mon imagination énervée, à moins que je ne sois vraiment somnambule, ou que j’aie subi une de ces influences constatées, mais inexplicables jusqu’ici, qu’on appelle suggestions. 13365 En tout cas, mon affolement touchait à la démence, et vingt-quatre heures de Paris ont suffi pour me remettre d’aplomb. 13366 Hier, après des courses et des visites, qui m’ont fait passer dans l’âme de l’air nouveau et vivifiant, j’ai fini ma soirée au Théâtre-Français. 13367 On y jouait une pièce d’Alexandre Dumas fils ; et cet esprit alerte et puissant a achevé de me guérir. Certes, la solitude est dangereuse pour les intelligences qui travaillent. 13368 Il nous faut, autour de nous, des hommes qui pensent et qui parlent. Quand nous sommes seuls longtemps, nous peuplons le vide de fantômes. 13369 Je suis rentré à l’hôtel très gai, par les boulevards. Au coudoiement de la foule, je songeais, non sans ironie, à mes terreurs, à mes suppositions de l’autre semaine, car j’ai cru, oui, j’ai cru qu’un être invisible habitait sous mon toit. 13370 Comme notre tête est faible et s’effare, et s’égare vite, dès qu’un petit fait incompréhensible nous frappe ! 13371 Au lieu de conclure par ces simples mots : « Je ne comprends pas parce que la cause m’échappe », nous imaginons aussitôt des mystères effrayants et des puissances surnaturelles. 13372 14 juillet. — Fête de la République. Je me suis promené par les rues. Les pétards et les drapeaux m’amusaient comme un enfant. 13373 C’est pourtant fort bête d’être joyeux, à date fixe, par décret du gouvernement. Le peuple est un troupeau imbécile, tantôt stupidement patient et tantôt férocement révolté. 13374 On lui dit : « Amuse-toi. » Il s’amuse. On lui dit : « Va te battre avec le voisin. » Il va se battre. On lui dit : « Vote pour l’Empereur. » Il vote pour l’Empereur. 13375 Puis, on lui dit : « Vote pour la République. » Et il vote pour la République. 13376 Ceux qui le dirigent sont aussi sots ; mais au lieu d’obéir à des hommes, ils obéissent à des principes, lesquels ne peuvent être que niais, stériles et faux, par cela même qu’ils sont des principes, c’est-à-dire des idées réputées certaines et immuables, en ce monde où l’on n’est sûr de rien, puisque la lumière est une illusion, puisque le bruit est une illusion. 13377 16 juillet. — J’ai vu hier des choses qui m’ont beaucoup troublé. 13378 Je dînais chez ma cousine, Mme Sablé, dont le mari commande le 76e chasseurs à Limoges. 13379 Je me trouvais chez elle avec deux jeunes femmes, dont l’une a épousé un médecin, le docteur Parent, qui s’occupe beaucoup des maladies nerveuses et des manifestations extraordinaires auxquelles donnent lieu en ce moment les expériences sur l’hypnotisme et la suggestion. 13380 Il nous raconta longtemps les résultats prodigieux obtenus par des savants anglais et par les médecins de l’école de Nancy. 13381 Les faits qu’il avança me parurent tellement bizarres, que je me déclarai tout à fait incrédule. 13382 « Nous sommes, affirmait-il, sur le point de découvrir un des plus importants secrets de la nature, je veux dire, un de ses plus importants secrets sur cette terre ; car elle en a certes d’autrement importants, là-bas, dans les étoiles. 13383 Depuis que l’homme pense, depuis qu’il sait dire et écrire sa pensée, il se sent frôlé par un mystère impénétrable pour ses sens grossiers et imparfaits, et il tâche de suppléer, par l’effort de son intelligence, à l’impuissance de ses organes. 13384 Quand cette intelligence demeurait encore à l’état rudimentaire, cette hantise des phénomènes invisibles a pris des formes banalement effrayantes. 13385 De là sont nées les croyances populaires au surnaturel, les légendes des esprits rôdeurs, des fées, des gnomes, des revenants, je dirai même la légende de Dieu, car nos conceptions de l’ouvrier-créateur, de quelque religion qu’elles nous viennent, sont bien les inventions les plus médiocres, les plus stupides, les plus inacceptables sorties du cerveau apeuré des créatures. 13386 Rien de plus vrai que cette parole de Voltaire : « Dieu a fait l’homme à son image, mais l’homme le lui a bien rendu. » 13387 « Mais, depuis un peu plus d’un siècle, on semble pressentir quelque chose de nouveau. 13388 Mesmer et quelques autres nous ont mis sur une voie inattendue, et nous sommes arrivés vraiment, depuis quatre ou cinq ans surtout, à des résultats surprenants. » 13389 Ma cousine, très incrédule aussi, souriait. Le docteur Parent lui dit : — Voulez-vous que j’essaie de vous endormir, Madame ? 13390 — Oui, je veux bien. 13391 Elle s’assit dans un fauteuil et il commença à la regarder fixement en la fascinant. 13392 Moi, je me sentis soudain un peu troublé, le cœur battant, la gorge serrée. Je voyais les yeux de Mme Sablé s’alourdir, sa bouche se crisper, sa poitrine haleter. 13393 Au bout de dix minutes, elle dormait. 13394 — Mettez-vous derrière elle, dit le médecin. 13395 Et je m’assis derrière elle. Il lui plaça entre les mains une carte de visite en lui disant : « Ceci est un miroir ; que voyez-vous dedans ? » 13396 Elle répondit : 13397 — Je vois mon cousin. 13398 — Que fait-il ? 13399 — Il se tord la moustache. 13400 — Et maintenant ? 13401 — Il tire de sa poche une photographie. 13402 — Quelle est cette photographie ? 13403 — La sienne. 13404 C’était vrai ! Et cette photographie venait de m’être livrée, le soir même, à l’hôtel. 13405 — Comment est-il sur ce portrait ? 13406 — Il se tient debout avec son chapeau à la main. 13407 Donc elle voyait dans cette carte, dans ce carton blanc, comme elle eût vu dans une glace. 13408 Les jeunes femmes, épouvantées, disaient : « Assez ! Assez ! Assez ! » 13409 Mais le docteur ordonna : « Vous vous lèverez demain à huit heures ; puis vous irez trouver à son hôtel votre cousin, et vous le supplierez de vous prêter cinq mille francs que votre mari vous demande et qu’il vous réclamera à son prochain voyage. » 13410 Puis il la réveilla. 13411 En rentrant à l’hôtel, je songeais à cette curieuse séance et des doutes m’assaillirent, non point sur l’absolue, sur l’insoupçonnable bonne foi de ma cousine, que je connaissais comme une sœur, depuis l’enfance, mais sur une supercherie possible du docteur. 13412 Ne dissimulait-il pas dans sa main une glace qu’il montrait à la jeune femme endormie, en même temps que sa carte de visite ? Les prestidigitateurs de profession font des choses autrement singulières. 13413 Je rentrai donc et je me couchai. 13414 Or, ce matin, vers huit heures et demie, je fus réveillé par mon valet de chambre, qui me dit : 13415 — C’est Mme Sablé qui demande à parler à Monsieur tout de suite. 13416 Je m’habillai à la hâte et je la reçus. 13417 Elle s’assit fort troublée, les yeux baissés, et, sans lever son voile, elle me dit : 13418 — Mon cher cousin, j’ai un gros service à vous demander. 13419 — Lequel, ma cousine ? 13420 — Cela me gêne beaucoup de vous le dire, et pourtant, il le faut. J’ai besoin, absolument besoin, de cinq mille francs. 13421 — Allons donc, vous ? 13422 — Oui, moi, ou plutôt mon mari, qui me charge de les trouver. 13423 J’étais tellement stupéfait, que je balbutiais mes réponses. 13425 Mais, en la regardant avec attention, tous mes doutes se dissipèrent. Elle tremblait d’angoisse, tant cette démarche lui était douloureuse, et je compris qu’elle avait la gorge pleine de sanglots. 13426 Je la savais fort riche et je repris : 13427 — Comment ! votre mari n’a pas cinq mille francs à sa disposition ! Voyons, réfléchissez. Êtes-vous sûre qu’il vous a chargée de me les demander ? 13428 Elle hésita quelques secondes comme si elle eût fait un grand effort pour chercher dans son souvenir, puis elle répondit : 13429 — Oui…, oui… j’en suis sûre. 13430 — Il vous a écrit ? 13431 Elle hésita encore, réfléchissant. Je devinai le travail torturant de sa pensée. Elle ne savait pas. Elle savait seulement qu’elle devait m’emprunter cinq mille francs pour son mari. Donc elle osa mentir. 13432 — Oui, il m’a écrit. 13433 — Quand donc ? Vous ne m’avez parlé de rien, hier. 13434 — J’ai reçu sa lettre ce matin. 13435 — Pouvez-vous me la montrer ? 13436 — Non… non… non… elle contenait des choses intimes… trop personnelles… je l’ai… je l’ai brûlée. 13437 — Alors, c’est que votre mari fait des dettes. 13438 Elle hésita encore, puis murmura : 13439 — Je ne sais pas. 13440 Je déclarai brusquement : 13441 — C’est que je ne puis disposer de cinq mille francs en ce moment, ma chère cousine. 13442 Elle poussa une sorte de cri de souffrance. 13443 — Oh ! oh ! je vous en prie, je vous en prie, trouvez-les… 13444 Elle s’exaltait, joignait les mains comme si elle m’eût prié ! J’entendais sa voix changer de ton ; elle pleurait et bégayait, harcelée, dominée par l’ordre irrésistible qu’elle avait reçu. 13445 — Oh ! oh ! je vous en supplie… si vous saviez comme je souffre… il me les faut aujourd’hui. 13446 J’eus pitié d’elle. 13447 — Vous les aurez tantôt, je vous le jure. 13448 Elle s’écria : 13449 — Oh ! merci ! merci ! Que vous êtes bon. 13450 Je repris : — Vous rappelez-vous ce qui s’est passé hier soir chez vous ? 13451 — Oui. 13452 — Vous rappelez-vous que le docteur Parent vous a endormie ? 13453 — Oui. 13454 — Eh ! bien, il vous a ordonné de venir m’emprunter ce matin cinq mille francs, et vous obéissez en ce moment à cette suggestion. 13455 Elle réfléchit quelques secondes et répondit : 13456 — Puisque c’est mon mari qui les demande. 13457 Pendant une heure, j’essayai de la convaincre, mais je n’y pus parvenir. 13458 Quand elle fut partie, je courus chez le docteur. Il allait sortir ; et il m’écouta en souriant. Puis il dit : 13459 — Croyez-vous maintenant ? 13460 — Oui, il le faut bien. 13461 — Allons chez votre parente. 13462 Elle sommeillait déjà sur une chaise longue, accablée de fatigue. 13463 Le médecin lui prit le pouls, la regarda quelque temps, une main levée vers ses yeux qu’elle ferma peu à peu sous l’effort insoutenable de cette puissance magnétique. 13464 Quand elle fut endormie : 13465 — Votre mari n’a plus besoin de cinq mille francs ! Vous allez donc oublier que vous avez prié votre cousin de vous les prêter, et, s’il vous parle de cela, vous ne comprendrez pas. 13466 Puis il la réveilla. Je tirai de ma poche un portefeuille : 13467 — Voici, ma chère cousine, ce que vous m’avez demandé ce matin. 13468 Elle fut tellement surprise que je n’osai pas insister. J’essayai cependant de ranimer sa mémoire, mais elle nia avec force, crut que je me moquais d’elle, et faillit, à la fin, se fâcher. 13469 Voilà ! je viens de rentrer ; et je n’ai pu déjeuner, tant cette expérience m’a bouleversé. 13470 19 juillet. — Beaucoup de personnes à qui j’ai raconté cette aventure se sont moquées de moi. Je ne sais plus que penser. Le sage dit : Peut-être ? 13471 21 juillet. — J’ai été dîner à Bougival, puis j’ai passé la soirée au bal des canotiers. Décidément, tout dépend des lieux et des milieux. 13472 Croire au surnaturel dans l’île de la Grenouillère, serait le comble de la folie… mais au sommet du mont Saint-Michel ?… mais dans les Indes ? 13473 Nous subissons effroyablement l’influence de ce qui nous entoure. Je rentrerai chez moi la semaine prochaine. 13474 30 juillet. — Je suis revenu dans ma maison depuis hier. Tout va bien. 13475 2 août. — Rien de nouveau ; il fait un temps superbe. Je passe mes journées à regarder couler la Seine. 13476 4 août. — Querelles parmi mes domestiques. Ils prétendent qu’on casse les verres, la nuit, dans les armoires. 13477 Le valet de chambre accuse la cuisinière, qui accuse la lingère, qui accuse les deux autres. Quel est le coupable ? Bien fin qui le dirait ! 13478 6 août. — Cette fois, je ne suis pas fou. J’ai vu… j’ai vu… j’ai vu !… Je ne puis plus douter… j’ai vu !… J’ai encore froid jusque dans les ongles… j’ai encore peur jusque dans les moelles… j’ai vu !… 13479 Je me promenais à deux heures, en plein soleil, dans mon parterre de rosiers… dans l’allée des rosiers d’automne qui commencent à fleurir. 13480 Comme je m’arrêtais à regarder un géant des batailles, qui portait trois fleurs magnifiques, je vis, je vis distinctement, tout près de moi, la tige d’une de ces roses se plier, comme si une main invisible l’eût tordue, puis se casser comme si cette main l’eût cueillie ! 13481 Puis la fleur s’éleva, suivant la courbe qu’aurait décrite un bras en la portant vers une bouche, et elle resta suspendue dans l’air transparent, toute seule, immobile, effrayante tache rouge à trois pas de mes yeux. 13482 Éperdu, je me jetai sur elle pour la saisir ! 13483 Je ne trouvai rien ; elle avait disparu. Alors je fus pris d’une colère furieuse contre moi-même ; car il n’est pas permis à un homme raisonnable et sérieux d’avoir de pareilles hallucinations. 13484 Mais était-ce bien une hallucination ? Je me retournai pour chercher la tige, et je la retrouvai immédiatement sur l’arbuste, fraîchement brisée, entre les deux autres roses demeurées à la branche. 13485 Alors, je rentrai chez moi l’âme bouleversée ; car je suis certain, maintenant, certain comme de l’alternance des jours et des nuits, qu’il existe près de moi un être invisible, qui se nourrit de lait et d’eau, qui peut toucher aux choses, les prendre et les changer de place, doué par conséquent d’une nature matérielle, bien qu’imperceptible pour nos sens, et qui habite comme moi, sous mon toit… 13486 7 août. — J’ai dormi tranquille. Il a bu l’eau de ma carafe, mais n’a point troublé mon sommeil. 13487 Je me demande si je suis fou. 13488 En me promenant, tantôt au grand soleil, le long de la rivière, des doutes me sont venus sur ma raison, non point des doutes vagues comme j’en avais jusqu’ici, mais des doutes précis, absolus. 13489 J’ai vu des fous ; j’en ai connu qui restaient intelligents, lucides, clairvoyants même sur toutes les choses de la vie, sauf sur un point. 13490 Ils parlaient de tout avec clarté, avec souplesse, avec profondeur, et soudain leur pensée touchant l’écueil de leur folie, s’y déchirait en pièces, s’éparpillait et sombrait dans cet océan effrayant et furieux, plein de vagues bondissantes, de brouillards, de bourrasques, qu’on nomme « la démence ». 13491 Certes, je me croirais fou, absolument fou, si je n’étais conscient, si je ne connaissais parfaitement mon état, si je ne le sondais en l’analysant avec une complète lucidité. 13492 Je ne serais donc, en somme, qu’un halluciné raisonnant. Un trouble inconnu se serait produit dans mon cerveau, un de ces troubles qu’essayent de noter et de préciser aujourd’hui les physiologistes ; et ce trouble aurait déterminé dans mon esprit, dans l’ordre et la logique de mes idées, une crevasse profonde. 13493 Des phénomènes semblables ont lieu dans le rêve qui nous promène à travers les fantasmagories les plus invraisemblables, sans que nous en soyons surpris, parce que l’appareil vérificateur, parce que le sens du contrôle est endormi ; tandis que la faculté imaginative veille et travaille. 13494 Ne se peut-il pas qu’une des imperceptibles touches du clavier cérébral se trouve paralysée chez moi ? 13495 Des hommes, à la suite d’accidents, perdent la mémoire des noms propres ou des verbes ou des chiffres, ou seulement des dates. 13496 Les localisations de toutes les parcelles de la pensée sont aujourd’hui prouvées. 13497 Or, quoi d’étonnant à ce que ma faculté de contrôler l’irréalité de certaines hallucinations, se trouve engourdie chez moi en ce moment ! 13498 Je songeais à tout cela en suivant le bord de l’eau. Le soleil couvrait de clarté la rivière, faisait la terre délicieuse, emplissait mon regard d’amour pour la vie, pour les hirondelles, dont l’agilité est une joie de mes yeux, pour les herbes de la rive dont le frémissement est un bonheur de mes oreilles. 13499 Peu à peu, cependant un malaise inexplicable me pénétrait. Une force, me semblait-il, une force occulte m’engourdissait, m’arrêtait, m’empêchait d’aller plus loin, me rappelait en arrière. 13500 J’éprouvais ce besoin douloureux de rentrer qui vous oppresse, quand on a laissé au logis un malade aimé, et que le pressentiment vous saisit d’une aggravation de son mal. 13501 Donc, je revins malgré moi, sûr que j’allais trouver, dans ma maison, une mauvaise nouvelle, une lettre ou une dépêche. 13502 Il n’y avait rien ; et je demeurai plus surpris et plus inquiet que si j’avais eu de nouveau quelque vision fantastique. 13503 8 août. — J’ai passé hier une affreuse soirée. 13504 Il ne se manifeste plus, mais je le sens près de moi, m’épiant, me regardant, me pénétrant, me dominant et plus redoutable, en se cachant ainsi, que s’il signalait par des phénomènes surnaturels sa présence invisible et constante. 13505 J’ai dormi, pourtant. 13506 9 août. — Rien, mais j’ai peur. 13507 10 août. — Rien ; qu’arrivera-t-il demain ? 13508 11 août. — Toujours rien ; je ne puis plus rester chez moi avec cette crainte et cette pensée entrées en mon âme ; je vais partir. 13509 12 août, 10 heures du soir. — Tout le jour j’ai voulu m’en aller ; je n’ai pas pu. 13510 J’ai voulu accomplir cet acte de liberté si facile, si simple, — sortir — monter dans ma voiture pour gagner Rouen — je n’ai pas pu. Pourquoi ? 13511 13 août. — Quand on est atteint par certaines maladies, tous les ressorts de l’être physique semblent brisés, toutes les énergies anéanties, tous les muscles relâchés, les os devenus mous comme la chair et la chair liquide comme de l’eau. 13512 J’éprouve cela dans mon être moral d’une façon étrange et désolante. 13513 Je n’ai plus aucune force, aucun courage, aucune domination sur moi, aucun pouvoir même de mettre en mouvement ma volonté. 13514 Je ne peux plus vouloir ; mais quelqu’un veut pour moi ; et j’obéis. 13515 14 août. — Je suis perdu ! Quelqu’un possède mon âme et la gouverne ! quelqu’un ordonne tous mes actes, tous mes mouvements, toutes mes pensées. 13516 Je ne suis plus rien en moi, rien qu’un spectateur esclave et terrifié de toutes les choses que j’accomplis. 13517 Je désire sortir. Je ne peux pas. Il ne veut pas ; et je reste, éperdu, tremblant, dans le fauteuil où il me tient assis. 13518 Je désire seulement me lever, me soulever, afin de me croire encore maître de moi. 13519 Je ne peux pas ! Je suis rivé à mon siège ; et mon siège adhère au sol, de telle sorte qu’aucune force ne nous soulèverait. 13520 Puis, tout d’un coup, il faut, il faut, il faut que j’aille au fond de mon jardin cueillir des fraises et les manger. Et j’y vais. Je cueille des fraises et je les mange ! 13521 Oh ! mon Dieu ! Mon Dieu ! Mon Dieu ! Est-il un Dieu ? S’il en est un, délivrez-moi, sauvez-moi ! secourez-moi ! Pardon ! Pitié ! Grâce ! Sauvez-moi ! Oh ! quelle souffrance ! quelle torture ! quelle horreur ! 13522 15 août. — Certes, voilà comment était possédée et dominée ma pauvre cousine, quand elle est venue m’emprunter cinq mille francs. 13523 Elle subissait un vouloir étranger entré en elle, comme une autre âme, comme une autre âme parasite et dominatrice. Est-ce que le monde va finir ? 13524 Mais celui qui me gouverne, quel est-il, cet invisible ? cet inconnaissable, ce rôdeur d’une race surnaturelle ? 13525 Donc les Invisibles existent ! Alors, comment depuis l’origine du monde ne se sont-ils pas encore manifestés d’une façon précise comme ils le font pour moi ? 13526 Je n’ai jamais rien lu qui ressemble à ce qui s’est passé dans ma demeure. Oh ! si je pouvais la quitter, si je pouvais m’en aller, fuir et ne pas revenir. Je serais sauvé, mais je ne peux pas. 13527 16 août. — J’ai pu m’échapper aujourd’hui pendant deux heures, comme un prisonnier qui trouve ouverte, par hasard, la porte de son cachot. J’ai senti que j’étais libre tout à coup et qu’il était loin. 13528 J’ai ordonné d’atteler bien vite et j’ai gagné Rouen. Oh ! quelle joie de pouvoir dire à un homme qui obéit : « Allez à Rouen ! » 13529 Je me suis fait arrêter devant la bibliothèque et j’ai prié qu’on me prêtât le grand traité du docteur Hermann Herestauss sur les habitants inconnus du monde antique et moderne. 13530 Puis, au moment de remonter dans mon coupé, j’ai voulu dire : « À la gare ! » et j’ai crié, — je n’ai pas dit, j’ai crié — d’une voix si forte que les passants se sont retournés : « À la maison », et je suis tombé, affolé d’angoisse, sur le coussin de ma voiture. Il m’avait retrouvé et repris. 13531 17 août. — Ah ! Quelle nuit ! quelle nuit ! Et pourtant il me semble que je devrais me réjouir. Jusqu’à une heure du matin, j’ai lu ! 13532 Hermann Herestauss, docteur en philosophie et en théogonie, a écrit l’histoire et les manifestations de tous les êtres invisibles rôdant autour de l’homme ou rêvés par lui. 13533 Il décrit leurs origines, leur domaine, leur puissance. Mais aucun d’eux ne ressemble à celui qui me hante. 13534 On dirait que l’homme, depuis qu’il pense, a pressenti et redouté un être nouveau, plus fort que lui, son successeur en ce monde, et que, le sentant proche et ne pouvant prévoir la nature de ce maître, il a créé, dans sa terreur, tout le peuple fantastique des êtres occultes, fantômes vagues nés de la peur. 13535 Donc, ayant lu jusqu’à une heure du matin, j’ai été m’asseoir ensuite auprès de ma fenêtre ouverte pour rafraîchir mon front et ma pensée au vent calme de l’obscurité. 13536 Il faisait bon, il faisait tiède ! Comme j’aurais aimé cette nuit-là autrefois ! 13537 Pas de lune. Les étoiles avaient au fond du ciel noir des scintillements frémissants. Qui habite ces mondes ? Quelles formes, quels vivants, quels animaux, quelles plantes sont là-bas ? 13538 Ceux qui pensent dans ces univers lointains, que savent-ils plus que nous ? Que peuvent-ils plus que nous ? Que voient-ils que nous ne connaissons point ? 13539 Un d’eux, un jour ou l’autre, traversant l’espace, n’apparaîtra-t-il pas sur notre terre pour la conquérir, comme les Normands jadis traversaient la mer pour asservir des peuples plus faibles ? 13540 Nous sommes si infirmes, si désarmés, si ignorants, si petits, nous autres, sur ce grain de boue qui tourne délayé dans une goutte d’eau. 13541 Je m’assoupis en rêvant ainsi au vent frais du soir. 13542 Or, ayant dormi environ quarante minutes, je rouvris les yeux sans faire un mouvement, réveillé par je ne sais quelle émotion confuse et bizarre. 13543 Je ne vis rien d’abord, puis, tout à coup, il me sembla qu’une page du livre resté ouvert sur ma table venait de tourner toute seule. Aucun souffle d’air n’était entré par ma fenêtre. 13544 Je fus surpris et j’attendis. Au bout de quatre minutes environ, je vis, je vis, oui, je vis de mes yeux une autre page se soulever et se rabattre sur la précédente, comme si un doigt l’eût feuilletée. 13545 Mon fauteuil était vide, semblait vide ; mais je compris qu’il était là, lui, assis à ma place, et qu’il lisait. 13546 D’un bond furieux, d’un bond de bête révoltée, qui va éventrer son dompteur, je traversai ma chambre pour le saisir, pour l’étreindre, pour le tuer !… 13547 Mais mon siège, avant que je l’eusse atteint, se renversa comme si on eût fui devant moi… ma table oscilla, ma lampe tomba et s’éteignit, et ma fenêtre se ferma comme si un malfaiteur surpris se fût élancé dans la nuit, en prenant à pleines mains les battants. 13548 Donc, il s’était sauvé ; il avait eu peur, peur de moi, lui ! 13549 Alors… alors… demain… ou après… ou un jour quelconque… je pourrai donc le tenir sous mes poings, et l’écraser contre le sol ! 13550 Est-ce que les chiens, quelquefois, ne mordent point et n’étranglent pas leurs maîtres ? 13551 18 août. — J’ai songé toute la journée. Oh ! oui, je vais lui obéir, suivre ses impulsions, accomplir toutes ses volontés, me faire humble, soumis, lâche. Il est le plus fort. Mais une heure viendra… 13552 19 août. — Je sais… je sais… je sais tout ! 13553 Je viens de lire ceci dans la Revue du Monde scientifique : « Une nouvelle assez curieuse nous arrive de Rio de Janeiro. Une folie, une épidémie de folie, comparable aux démences contagieuses qui atteignirent les peuples d’Europe au Moyen Âge, sévit en ce moment dans la province de San-Paulo. 13554 Les habitants éperdus quittent leurs maisons, désertent leurs villages, abandonnent leurs cultures, se disant poursuivis, possédés, gouvernés comme un bétail humain par des êtres invisibles bien que tangibles, des sortes de vampires qui se nourrissent de leur vie, pendant leur sommeil, et qui boivent en outre de l’eau et du lait sans paraître toucher à aucun autre aliment. 13556 Ah ! Ah ! je me rappelle, je me rappelle le beau trois-mâts brésilien qui passa sous mes fenêtres en remontant la Seine, le 8 mai dernier ! 13557 Je le trouvai si joli, si blanc, si gai ! L’Être était dessus, venant de là-bas, où sa race est née ! Et il m’a vu ! Il a vu ma demeure blanche aussi ; et il a sauté du navire sur la rive. Oh ! mon Dieu ! 13558 À présent, je sais, je devine. Le règne de l’homme est fini. 13559 Il est venu, Celui que redoutaient les premières terreurs des peuples naïfs, Celui qu’exorcisaient les prêtres inquiets, que les sorciers évoquaient par les nuits sombres, sans le voir apparaître encore, à qui les pressentiments des maîtres passagers du monde prêtèrent toutes les formes monstrueuses ou gracieuses des gnomes, des esprits, des génies, des fées, des farfadets. 13560 Après les grossières conceptions de l’épouvante primitive, des hommes plus perspicaces l’ont pressenti plus clairement. 13561 Mesmer l’avait deviné, et les médecins, depuis dix ans déjà, ont découvert, d’une façon précise, la nature de sa puissance avant qu’il l’eût exercée lui-même. 13562 Ils ont joué avec cette arme du Seigneur nouveau, la domination d’un mystérieux vouloir sur l’âme humaine devenue esclave. Ils ont appelé cela magnétisme, hypnotisme, suggestion… que sais-je ? 13563 Je les ai vus s’amuser comme des enfants imprudents avec cette horrible puissance ! 13564 Malheur à nous ! Malheur à l’homme ! Il est venu, le… le… comment se nomme-t-il… le… il me semble qu’il me crie son nom, et je ne l’entends pas… le… oui… il le crie… 13565 J’écoute… je ne peux pas… répète… le… Horla… J’ai entendu… le Horla… c’est lui… le Horla… il est venu !… 13566 Ah ! le vautour a mangé la colombe, le loup a mangé le mouton ; le lion a dévoré le buffle aux cornes aiguës ; l’homme a tué le lion avec la flèche, avec le glaive, avec la poudre ; mais le Horla va faire de l’homme ce que nous avons fait du cheval et du bœuf : sa chose, son serviteur et sa nourriture, par la seule puissance de sa volonté. Malheur à nous ! 13567 Pourtant, l’animal, quelquefois, se révolte et tue celui qui l’a dompté… moi aussi je veux… je pourrai… mais il faut le connaître, le toucher, le voir ! 13568 Les savants disent que l’œil de la bête, différent du nôtre, ne distingue point comme le nôtre… Et mon œil à moi ne peut distinguer le nouveau venu qui m’opprime. 13569 Pourquoi ? Oh ! je me rappelle à présent les paroles du moine du mont Saint-Michel : « Est-ce que nous voyons la cent-millième partie de ce qui existe ? Tenez, voici le vent qui est la plus grande force de la nature, qui renverse les hommes, abat les édifices, déracine les arbres, soulève la mer en montagnes d’eau, détruit les falaises et jette aux brisants les grands navires, le vent qui tue, qui siffle, qui gémit, qui mugit, l’avez-vous vu et pouvez-vous le voir : il existe pourtant ! » 13570 Et je songeais encore : mon œil est si faible, si imparfait, qu’il ne distingue même point les corps durs, s’ils sont transparents comme le verre !… 13571 Qu’une glace sans tain barre mon chemin, il me jette dessus comme l’oiseau entré dans une chambre se casse la tête aux vitres. Mille choses en outre le trompent et l’égarent ? 13572 Quoi d’étonnant, alors, à ce qu’il ne sache point apercevoir un corps nouveau que la lumière traverse. 13573 Un être nouveau ! pourquoi pas ? Il devait venir assurément ! pourquoi serions-nous les derniers ! Nous ne le distinguons point, ainsi que tous les autres créés avant nous ? 13574 C’est que sa nature est plus parfaite, son corps plus fin et plus fini que le nôtre, que le nôtre si faible, si maladroitement conçu, encombré d’organes toujours fatigués, toujours forcés comme des ressorts trop complexes, que le nôtre, qui vit comme une plante et comme une bête, en se nourrissant péniblement d’air, d’herbe et de viande, machine animale en proie aux maladies, aux déformations, aux putréfactions, poussive, mal réglée, naïve et bizarre, ingénieusement mal faite, œuvre grossière et délicate, ébauche d’être qui pourrait devenir intelligent et superbe. 13575 Nous sommes quelques-uns, si peu sur ce monde, depuis l’huître jusqu’à l’homme. Pourquoi pas un de plus, une fois accomplie la période qui sépare les apparitions successives de toutes les espèces diverses ? 13576 Pourquoi pas un de plus ? Pourquoi pas aussi d’autres arbres aux fleurs immenses, éclatantes et parfumant des régions entières ? 13577 Pourquoi pas d’autres éléments que le feu, l’air, la terre et l’eau ? — Ils sont quatre, rien que quatre, ces pères nourriciers des êtres ! 13578 Quelle pitié ! Pourquoi ne sont-ils pas quarante, quatre cents, quatre mille ! 13579 Comme tout est pauvre, mesquin, misérable ! avarement donné, sèchement inventé, lourdement fait ! Ah ! l’éléphant, l’hippopotame, que de grâce ! Le chameau, que d’élégance ! 13580 Mais direz-vous, le papillon ! une fleur qui vole ! J’en rêve un qui serait grand comme cent univers, avec des ailes dont je ne puis même exprimer la forme, la beauté, la couleur et le mouvement. Mais je le vois… il va d’étoile en étoile, les rafraîchissant et les embaumant au souffle harmonieux et léger de sa course !… Et les peuples de là-haut le regardent passer, extasiés et ravis !… 13581 Qu’ai-je donc ? C’est lui, lui, le Horla, qui me hante, qui me fait penser ces folies ! Il est en moi, il devient mon âme ; je le tuerai ! 13582 19 août. — Je le tuerai. Je l’ai vu ! je me suis assis hier soir, à ma table ; et je fis semblant d’écrire avec une grande attention. Je savais bien qu’il viendrait rôder autour de moi, tout près, si près que je pourrais peut-être le toucher, le saisir ? 13583 Et alors !… alors, j’aurais la force des désespérés ; j’aurais mes mains, mes genoux, ma poitrine, mon front, mes dents pour l’étrangler, l’écraser, le mordre, le déchirer. 13584 Et je le guettais avec tous mes organes surexcités. 13585 J’avais allumé mes deux lampes et les huit bougies de ma cheminée, comme si j’eusse pu, dans cette clarté, le découvrir. 13586 En face de moi, mon lit, un vieux lit de chêne à colonnes ; à droite, ma cheminée ; à gauche, ma porte fermée avec soin, après l’avoir laissée longtemps ouverte, afin de l’attirer ; derrière moi, une très haute armoire à glace, qui me servait chaque jour pour me raser, pour m’habiller, et où j’avais coutume de me regarder, de la tête aux pieds, chaque fois que je passais devant. 13587 Donc, je faisais semblant d’écrire, pour le tromper, car il m’épiait lui aussi ; et soudain, je sentis, je fus certain qu’il lisait par-dessus mon épaule, qu’il était là, frôlant mon oreille. 13588 Je me dressai, les mains tendues, en me tournant si vite que je faillis tomber. 13589 Eh ! bien ?… on y voyait comme en plein jour, et je ne me vis pas dans ma glace !… Elle était vide, claire, profonde, pleine de lumière ! Mon image n’était pas dedans… et j’étais en face, moi ! 13590 Je voyais le grand verre limpide du haut en bas. Et je regardais cela avec des yeux affolés ; et je n’osais plus avancer, je n’osais plus faire un mouvement, sentant bien pourtant qu’il était là, mais qu’il m’échapperait encore, lui dont le corps imperceptible avait dévoré mon reflet. 13591 Comme j’eus peur ! Puis voilà que tout à coup je commençai à m’apercevoir dans une brume, au fond du miroir, dans une brume comme à travers une nappe d’eau ; et il me semblait que cette eau glissait de gauche à droite, lentement, rendant plus précise mon image, de seconde en seconde. C’était comme la fin d’une éclipse. 13592 Ce qui me cachait ne paraissait point posséder de contours nettement arrêtés, mais une sorte de transparence opaque, s’éclaircissant peu à peu. 13593 Je pus enfin me distinguer complètement, ainsi que je le fais chaque jour en me regardant. 13594 Je l’avais vu ! L’épouvante m’en est restée, qui me fait encore frissonner. 13595 20 août. — Le tuer, comment ? puisque je ne peux l’atteindre ? Le poison ? mais il me verrait le mêler à l’eau ; et nos poisons, d’ailleurs, auraient-ils un effet sur son corps imperceptible ? 13596 Non… non… sans aucun doute… Alors ?… alors ?… 13597 21 août. — J’ai fait venir un serrurier de Rouen, et lui ai commandé pour ma chambre des persiennes de fer, comme en ont, à Paris, certains hôtels particuliers, au rez-de-chaussée, par crainte des voleurs. 13598 Il me fera, en outre, une porte pareille. Je me suis donné pour un poltron, mais je m’en moque !… 13599 10 septembre. — Rouen, hôtel continental. C’est fait… c’est fait… mais est-il mort ? J’ai l’âme bouleversée de ce que j’ai vu. 13600 Hier donc, le serrurier ayant posé ma persienne et ma porte de fer, j’ai laissé tout ouvert jusqu’à minuit, bien qu’il commençât à faire froid. 13601 Tout à coup, j’ai senti qu’il était là, et une joie, une joie folle m’a saisi. 13602 Je me suis levé lentement, et j’ai marché à droite, à gauche, longtemps pour qu’il ne devinât rien ; puis j’ai ôté mes bottines et mis mes savates avec négligence ; puis j’ai fermé ma persienne de fer, et revenant à pas tranquilles vers la porte, j’ai fermé la porte aussi à double tour. 13603 Retournant alors vers la fenêtre, je la fixai par un cadenas, dont je mis la clef dans ma poche. 13604 Tout à coup, je compris qu’il s’agitait autour de moi, qu’il avait peur à son tour, qu’il m’ordonnait de lui ouvrir. 13605 Je faillis céder ; je ne cédai pas, mais m’adossant à la porte, je l’entre-bâillai, tout juste assez pour passer, moi, à reculons ; et comme je suis très grand ma tête touchait au linteau. 13606 J’étais sûr qu’il n’avait pu s’échapper et je l’enfermai, tout seul, tout seul ! Quelle joie ! Je le tenais ! 13607 Alors, je descendis, en courant ; je pris dans mon salon, sous ma chambre, mes deux lampes et je renversai toute l’huile sur le tapis, sur les meubles, partout ; puis j’y mis le feu, et je me sauvai, après avoir bien refermé, à double tour, la grande porte d’entrée. 13608 Et j’allai me cacher au fond de mon jardin, dans un massif de lauriers. Comme ce fut long ! comme ce fut long ! 13610 Je regardais ma maison, et j’attendais. Comme ce fut long ! 13611 Je croyais déjà que le feu s’était éteint tout seul, ou qu’il l’avait éteint, Lui, quand une des fenêtres d’en bas creva sous la poussée de l’incendie, et une flamme, une grande flamme rouge et jaune, longue, molle, caressante, monta le long du mur blanc et le baisa jusqu’au toit. 13612 Une lueur courut dans les arbres, dans les branches, dans les feuilles, et un frisson, un frisson de peur aussi ! 13613 Les oiseaux se réveillaient ; un chien se mit à hurler ; il me sembla que le jour se levait ! 13614 Deux autres fenêtres éclatèrent aussitôt, et je vis que tout le bas de ma demeure n’était plus qu’un effrayant brasier. 13615 Mais un cri, un cri horrible, suraigu, déchirant, un cri de femme passa dans la nuit, et deux mansardes s’ouvrirent ! 13616 J’avais oublié mes domestiques ! Je vis leurs faces affolées, et leurs bras qui s’agitaient !… 13617 Alors, éperdu d’horreur, je me mis à courir vers le village en hurlant : « Au secours ! au secours ! au feu ! au feu ! » Je rencontrai des gens qui s’en venaient déjà et je retournai avec eux, pour voir ! 13618 La maison, maintenant, n’était plus qu’un bûcher horrible et magnifique, un bûcher monstrueux, éclairant toute la terre, un bûcher où brûlaient des hommes, et où il brûlait aussi, Lui, Lui, mon prisonnier, l’Être nouveau, le nouveau maître, le Horla ! 13619 Soudain le toit tout entier s’engloutit entre les murs, et un volcan de flammes jaillit jusqu’au ciel. 13620 Par toutes les fenêtres ouvertes sur la fournaise, je voyais la cuve de feu, et je pensais qu’il était là, dans ce four, mort… 13621 — Mort ? Peut-être ?… Son corps ? son corps que le jour traversait n’était-il pas indestructible par les moyens qui tuent les nôtres ? 13622 S’il n’était pas mort ?… seul peut-être le temps a prise sur l’Être Invisible et Redoutable. 13623 Pourquoi ce corps transparent, ce corps inconnaissable, ce corps d’Esprit, s’il devait craindre, lui aussi, les maux, les blessures, les infirmités, la destruction prématurée ? 13624 La destruction prématurée ? toute l’épouvante humaine vient d’elle ! 13625 Après l’homme le Horla. — Après celui qui peut mourir tous les jours, à toutes les heures, à toutes les minutes, par tous les accidents, est venu celui qui ne doit mourir qu’à son jour, à son heure, à sa minute, parce qu’il a touché la limite de son existence ! 13626 Non… non… sans aucun doute, sans aucun doute… il n’est pas mort… Alors… alors… il va donc falloir que je me tue, moi !… 13634 DOUBLE ASSASSINAT DANS LA RUE MORGUE — Edgar Poe 13635 Quelle chanson chantaient les sirènes ? quel nom Achille avait-il pris, quand il se cachait parmi les femmes ? – Questions embarrassantes, il est vrai, mais qui ne sont pas situées au-delà de toute conjecture. 13636 Sir Thomas Browne. 13638 Nous ne les apprécions que par leurs résultats. Ce que nous en savons, entre autres choses, c’est qu’elles sont pour celui qui les possède à un degré extraordinaire une source de jouissances des plus vives. 13639 De même que l’homme fort se réjouit dans son aptitude physique, se complaît dans les exercices qui provoquent les muscles à l’action, de même l’analyse prend sa gloire dans cette activité spirituelle dont la fonction est de débrouiller. 13640 Il tire du plaisir même des plus triviales occasions qui mettent ses talents en jeu. 13641 Il raffole des énigmes, des rébus, des hiéroglyphes ; il déploie dans chacune des solutions une puissance de perspicacité qui, dans l’opinion vulgaire, prend un caractère surnaturel. 13642 Les résultats, habilement déduits par l’âme même et l’essence de sa méthode, ont réellement tout l’air d’une intuition. 13643 Cette faculté de résolution tire peut-être une grande force de l’étude des mathématiques, et particulièrement de la très-haute branche de cette science, qui, fort improprement et simplement en raison de ses opérations rétrogrades, a été nommée l’analyse, comme si elle était l’analyse par excellence. 13644 Car, en somme, tout calcul n’est pas en soi une analyse. Un joueur d’échecs, par exemple, fait fort bien l’un sans l’autre. 13645 Il suit de là que le jeu d’échecs, dans ses effets sur la nature spirituelle, est fort mal apprécié. 13646 Je ne veux pas écrire ici un traité de l’analyse, mais simplement mettre en tête d’un récit passablement singulier, quelques observations jetées tout à fait à l’abandon et qui lui serviront de préface. 13647 Je prends donc cette occasion de proclamer que la haute puissance de la réflexion est bien plus activement et plus profitablement exploitée par le modeste jeu de dames que par toute la laborieuse futilité des échecs. 13648 Dans ce dernier jeu, où les pièces sont douées de mouvements divers et bizarres, et représentent des valeurs diverses et variées, la complexité est prise – erreur fort commune – pour de la profondeur. 13649 L’attention y est puissamment mise en jeu. Si elle se relâche d’un instant, on commet une erreur, d’où il résulte une perte ou une défaite. 13650 Comme les mouvements possibles sont, non-seulement variés, mais inégaux en puissance, les chances de pareilles erreurs sont très-multipliées ; et dans neuf cas sur dix, c’est le joueur le plus attentif qui gagne et non pas le plus habile. 13651 Dans les dames, au contraire, où le mouvement est simple dans son espèce et ne subit que peu de variations, les probabilités d’inadvertance sont beaucoup moindres, et l’attention n’étant pas absolument et entièrement accaparée, tous les avantages remportés par chacun des joueurs ne peuvent être remportés que par une perspicacité supérieure. 13652 Pour laisser là ces abstractions, supposons un jeu de dames où la totalité des pièces soit réduite à quatre dames, et où naturellement il n’y ait pas lieu de s’attendre à des étourderies. 13653 Il est évident qu’ici la victoire ne peut être décidée, – les deux parties étant absolument égales, – que par une tactique habile, résultat de quelque puissant effort de l’intellect. 13654 Privé des ressources ordinaires, l’analyste entre dans l’esprit de son adversaire, s’identifie avec lui, et souvent découvre d’un seul coup d’œil l’unique moyen – un moyen quelquefois absurdement simple – de l’attirer dans une faute ou de le précipiter dans un faux calcul. 13655 On a longtemps cité le whist pour son action sur la faculté du calcul ; et on a connu des hommes d’une haute intelligence qui semblaient y prendre un plaisir incompréhensible et dédaigner les échecs comme un jeu frivole. 13656 En effet, il n’y a aucun jeu analogue qui fasse plus travailler la faculté de l’analyse. 13657 Le meilleur joueur d’échecs de la chrétienté ne peut guère être autre chose que le meilleur joueur d’échecs ; mais la force au whist implique la puissance de réussir dans toutes les spéculations bien autrement importantes où l’esprit lutte avec l’esprit. 13658 Quand je dis la force, j’entends cette perfection dans le jeu qui comprend l’intelligence de tous les cas dont on peut légitimement faire son profit. 13659 Ils sont non-seulement divers, mais complexes, et se dérobent souvent dans des profondeurs de la pensée absolument inaccessibles à une intelligence ordinaire. 13660 Observer attentivement, c’est se rappeler distinctement ; et, à ce point de vue, le joueur d’échecs capable d’une attention très-intense jouera fort bien au whist, puisque les règles de Hoyle, basées elles-mêmes sur le simple mécanisme du jeu, sont facilement et généralement intelligibles. 13661 Aussi, avoir une mémoire fidèle et procéder d’après le livre sont des points qui constituent pour le vulgaire le summum du bien jouer. 13662 Mais c’est dans les cas situés au-delà de la règle que le talent de l’analyste se manifeste ; il fait en silence une foule d’observations et de déductions. 13663 Ses partenaires en font peut-être autant ; et la différence d’étendue dans les renseignements ainsi acquis ne gît pas tant dans la validité de la déduction que dans la qualité de l’observation. 13664 L’important, le principal est de savoir ce qu’il faut observer. 13665 Notre joueur ne se confine pas dans son jeu, et, bien que ce jeu soit l’objet actuel de son attention, il ne rejette pas pour cela les déductions qui naissent d’objets étrangers au jeu. 13666 Il examine la physionomie de son partenaire, il la compare soigneusement avec celle de chacun de ses adversaires. 13667 Il considère la manière dont chaque partenaire distribue ses cartes ; il compte souvent, grâce aux regards que laissent échapper les joueurs satisfaits, les atouts et les honneurs, un à un. 13668 Il note chaque mouvement de la physionomie, à mesure que le jeu marche, et recueille un capital de pensées dans les expressions variées de certitude, de surprise, de triomphe ou de mauvaise humeur. 13669 À la manière de ramasser une levée, il devine si la même personne en peut faire une autre dans la suite. 13670 Il reconnaît ce qui est joué par feinte à l’air dont c’est jeté sur la table. 13671 Une parole accidentelle, involontaire, une carte qui tombe, ou qu’on retourne par hasard, qu’on ramasse avec anxiété ou avec insouciance ; le compte des levées et l’ordre dans lequel elles sont rangées ; l’embarras, l’hésitation, la vivacité, la trépidation, – tout est pour lui symptôme, diagnostic, tout rend compte à cette perception, – intuitive en apparence, – du véritable état des choses. 13672 Quand les deux ou trois premiers tours ont été faits, il possède à fond le jeu qui est dans chaque main, et peut dès lors jouer ses cartes en parfaite connaissance de cause, comme si tous les autres joueurs avaient retourné les leurs. 13673 La faculté d’analyse ne doit pas être confondue avec la simple ingéniosité ; car, pendant que l’analyste est nécessairement ingénieux, il arrive souvent que l’homme ingénieux est absolument incapable d’analyse. 13674 La faculté de combinaison, ou constructivité, par laquelle se manifeste généralement cette ingéniosité, et à laquelle les phrénologues – ils ont tort, selon moi, – assignent un organe à part, – en supposant qu’elle soit une faculté primordiale, a paru dans des êtres dont l’intelligence était limitrophe de l’idiotie, assez souvent pour attirer l’attention générale des écrivains psychologistes. 13675 Entre l’ingéniosité et l’aptitude analytique, il y a une différence beaucoup plus grande qu’entre l’imaginative et l’imagination, mais d’un caractère rigoureusement analogue. 13676 En somme, on verra que l’homme ingénieux est toujours plein d’imaginative, et que l’homme vraiment imaginatif n’est jamais autre chose qu’un analyste. 13677 Le récit qui suit sera pour le lecteur un commentaire lumineux des propositions que je viens d’avancer. 13679 Ce jeune gentleman appartenait à une excellente famille, une famille illustre même ; mais, par une série d’événements malencontreux, il se trouva réduit à une telle pauvreté, que l’énergie de son caractère y succomba, et qu’il cessa de se pousser dans le monde et de s’occuper du rétablissement de sa fortune. 13680 Grâce à la courtoisie de ses créanciers, il resta en possession d’un petit reliquat de son patrimoine ; et, sur la rente qu’il en tirait, il trouva moyen, par une économie rigoureuse, de subvenir aux nécessités de la vie, sans s’inquiéter autrement des superfluités. 13681 Les livres étaient véritablement son seul luxe, et à Paris on se les procure facilement. 13682 Notre première connaissance se fit dans un obscur cabinet de lecture de la rue Montmartre, par ce fait fortuit que nous étions tous deux à la recherche d’un même livre, fort remarquable et fort rare ; cette coïncidence nous rapprocha. Nous nous vîmes toujours de plus en plus. 13683 Je fus profondément intéressé par sa petite histoire de famille, qu’il me raconta minutieusement avec cette candeur et cet abandon, – ce sans-façon du moi, – qui est le propre de tout Français quand il parle de ses propres affaires. 13684 Je fus aussi fort étonné de la prodigieuse étendue de ses lectures, et par-dessus tout je me sentis l’âme prise par l’étrange chaleur et la vitale fraîcheur de son imagination. 13685 Cherchant dans Paris certains objets qui faisaient mon unique étude, je vis que la société d’un pareil homme serait pour moi un trésor inappréciable, et dès lors je me livrai franchement à lui. 13686 Nous décidâmes enfin que nous vivrions ensemble tout le temps de mon séjour dans cette ville ; et, comme mes affaires étaient un peu moins embarrassées que les siennes, je me chargeai de louer et de meubler, dans un style approprié à la mélancolie fantasque de nos deux caractères, une maisonnette antique et bizarre que des superstitions dont nous ne daignâmes pas nous enquérir avaient fait déserter, – tombant presque en ruine, et située dans une partie reculée et solitaire du faubourg Saint-Germain. 13687 Si la routine de notre vie dans ce lieu avait été connue du monde, nous eussions passé pour deux fous, – peut-être pour des fous d’un genre inoffensif. Notre réclusion était complète ; nous ne recevions aucune visite. 13688 Le lieu de notre retraite était resté un secret – soigneusement gardé – pour mes anciens camarades ; il y avait plusieurs années que Dupin avait cessé de voir du monde et de se répandre dans Paris. Nous ne vivions qu’entre nous. 13689 Mon ami avait une bizarrerie d’humeur, – car comment définir cela ? – c’était d’aimer la nuit pour l’amour de la nuit ; la nuit était sa passion ; et je tombai moi-même tranquillement dans cette bizarrerie, comme dans toutes les autres qui lui étaient propres, me laissant aller au courant de toutes ses étranges originalités avec un parfait abandon. 13690 La noire divinité ne pouvait pas toujours demeurer avec nous ; mais nous en faisions la contrefaçon. 13691 Au premier point du jour, nous fermions tous les lourds volets de notre masure, nous allumions une couple de bougies fortement parfumées, qui ne jetaient que des rayons très-faibles et très-pâles. 13692 Au sein de cette débile clarté, nous livrions chacun notre âme à ses rêves, nous lisions, nous écrivions, ou nous causions, jusqu’à ce que la pendule nous avertît du retour de la véritable obscurité. 13693 Alors, nous nous échappions à travers les rues, bras dessus bras dessous, continuant la conversation du jour, rôdant au hasard jusqu’à une heure très-avancée, et cherchant à travers les lumières désordonnées et les ténèbres de la populeuse cité ces innombrables excitations spirituelles que l’étude paisible ne peut pas donner. 13694 Dans ces circonstances, je ne pouvais m’empêcher de remarquer et d’admirer, – quoique la riche idéalité dont il était doué eût dû m’y préparer, – une aptitude analytique particulière chez Dupin. 13695 Il semblait prendre un délice âcre à l’exercer, – peut-être même à l’étaler, – et avouait sans façon tout le plaisir qu’il en tirait. 13696 Il me disait à moi, avec un petit rire tout épanoui, que bien des hommes avaient pour lui une fenêtre ouverte à l’endroit de leur cœur, et d’habitude il accompagnait une pareille assertion de preuves immédiates et des plus surprenantes, tirées d’une connaissance profonde de ma propre personne. 13697 Dans ces moments-là, ses manières étaient glaciales et distraites ; ses yeux regardaient dans le vide, et sa voix, – une riche voix de ténor, habituellement, – montait jusqu’à la voix de tête ; c’eût été de la pétulance, sans l’absolue délibération de son parler et la parfaite certitude de son accentuation. 13698 Je l’observais dans ses allures, et je rêvais souvent à la vieille philosophie de l’âme double, – je m’amusais à l’idée d’un Dupin double, – un Dupin créateur et un Dupin analyste. 13699 Qu’on ne s’imagine pas, d’après ce que je viens de dire, que je vais dévoiler un grand mystère ou écrire un roman. 13700 Ce que j’ai remarqué dans ce singulier Français était simplement le résultat d’une intelligence surexcitée, – malade peut-être. 13701 Mais un exemple donnera une meilleure idée de la nature de ses observations à l’époque dont il s’agit. 13702 Une nuit, nous flânions dans une longue rue sale, avoisinant le Palais-Royal. 13703 Nous étions plongés chacun dans nos propres pensées, en apparence du moins, et, depuis près d’un quart d’heure, nous n’avions pas soufflé une syllabe. Tout à coup Dupin lâcha ces paroles : 13704 — C’est un bien petit garçon, en vérité ; et il serait mieux à sa place au théâtre des Variétés. 13705 — Cela ne fait pas l’ombre d’un doute, répliquai-je sans y penser et sans remarquer d’abord, tant j’étais absorbé, la singulière façon dont l’interrupteur adaptait sa parole à ma propre rêverie. 13706 Une minute après, je revins à moi, et mon étonnement fut profond. 13707 — Dupin, dis-je très-gravement, voilà qui passe mon intelligence. Je vous avoue, sans ambages, que j’en suis stupéfié et que j’en peux à peine croire mes sens. 13708 Comment a-t-il pu se faire que vous ayez deviné que je pensais à… ? 13709 Mais je m’arrêtai pour m’assurer indubitablement qu’il avait réellement deviné à qui je pensais. 13710 — À Chantilly ? dit-il ; pourquoi vous interrompre ? Vous faisiez en vous-même la remarque que sa petite taille le rendait impropre à la tragédie. 13711 C’était précisément ce qui faisait le sujet de mes réflexions. 13712 Chantilly était un ex-savetier de la rue Saint-Denis qui avait la rage du théâtre, et avait abordé le rôle de Xerxès dans la tragédie de Crébillon ; ses prétentions étaient dérisoires : on en faisait des gorges chaudes. 13713 — Dites-moi, pour l’amour de Dieu ! la méthode – si méthode il y a – à l’aide de laquelle vous avez pu pénétrer mon âme, dans le cas actuel ! 13714 En réalité, j’étais encore plus étonné que je n’aurais voulu le confesser. 13715 — C’est le fruitier, répliqua mon ami, qui vous a amené à cette conclusion que le raccommodeur de semelles n’était pas de taille à jouer Xerxès et tous les rôles de ce genre. 13716 — Le fruitier ! vous m’étonnez ! je ne connais de fruitier d’aucune espèce. 13717 — L’homme qui s’est jeté contre vous, quand nous sommes entrés dans la rue, il y a peut-être un quart d’heure. 13718 Je me rappelai alors qu’en effet un fruitier, portant sur sa tête un grand panier de pommes, m’avait presque jeté par terre par maladresse, comme nous passions de la rue C… dans l’artère principale où nous étions alors. 13719 Mais quel rapport cela avait-il avec Chantilly ? Il m’était impossible de m’en rendre compte. 13720 Il n’y avait pas un atome de charlatanerie dans mon ami Dupin. 13721 — Je vais vous expliquer cela, dit-il, et, pour que vous puissiez comprendre tout très-clairement, nous allons d’abord reprendre la série de vos réflexions, depuis le moment dont je vous parle jusqu’à la rencontre du fruitier en question. 13722 Les anneaux principaux de la chaîne se suivent ainsi : Chantilly, Orion, le docteur Nichols, Épicure, la stéréotomie, les pavés, le fruitier. 13723 Il est peu de personnes qui ne se soient amusées, à un moment quelconque de leur vie, à remonter le cours de leurs idées et à rechercher par quels chemins leur esprit était arrivé à de certaines conclusions. 13724 Souvent cette occupation est pleine d’intérêt, et celui qui l’essaye pour la première fois est étonné de l’incohérence et de la distance, immense en apparence, entre le point de départ et le point d’arrivée. 13725 Qu’on juge donc de mon étonnement quand j’entendis mon Français parler comme il avait fait, et que je fus contraint de reconnaître qu’il avait dit la pure vérité. 13726 Il continua : 13727 — Nous causions de chevaux – si ma mémoire ne me trompe pas – juste avant de quitter la rue C… Ce fut notre dernier thème de conversation. 13728 Comme nous passions dans cette rue-ci, un fruitier, avec un gros panier sur la tête, passa précipitamment devant nous, vous jeta sur un tas de pavés amoncelés dans un endroit où la voie est en réparation. 13729 Vous avez mis le pied sur une des pierres branlantes ; vous avez glissé, vous vous êtes légèrement foulé la cheville ; vous avez paru vexé, grognon ; vous avez marmotté quelques paroles ; vous vous êtes retourné pour regarder le tas, puis vous avez continué votre chemin en silence. 13730 Je n’étais pas absolument attentif à tout ce que vous faisiez ; mais, pour moi, l’observation est devenue, de vieille date, une espèce de nécessité. 13731 » Vos yeux sont restés attachés sur le sol, – surveillant avec une espèce d’irritation les trous et les ornières du pavé (de façon que je voyais bien que vous pensiez toujours aux pierres), jusqu’à ce que nous eussions atteint le petit passage qu’on nomme le passage Lamartine[1], où l’on vient de faire l’essai du pavé de bois, un système de blocs unis et solidement assemblés. 13732 Ici votre physionomie s’est éclaircie, j’ai vu vos lèvres remuer, et j’ai deviné, à n’en pas douter, que vous vous murmuriez le mot stéréotomie, un terme appliqué fort prétentieusement à ce genre de pavage. 13733 Je savais que vous ne pouviez pas dire stéréotomie sans être induit à penser aux atomes, et de là aux théories d’Épicure ; et, comme dans la discussion que nous eûmes, il n’y a pas longtemps, à ce sujet, je vous avais fait remarquer que les vagues conjectures de l’illustre Grec avaient été confirmées singulièrement, sans que personne y prît garde, par les dernières théories sur les nébuleuses et les récentes découvertes cosmogoniques, je sentis que vous ne pourriez pas empêcher vos yeux de se tourner vers la grande nébuleuse d’Orion ; je m’y attendais certainement. 13734 Vous n’y avez pas manqué, et je fus alors certain d’avoir strictement emboîté le pas de votre rêverie. 13735 Or, dans cette amère boutade sur Chantilly, qui a paru hier dans le Musée, l’écrivain satirique, en faisant des allusions désobligeantes au changement de nom du savetier quand il a chaussé le cothurne, citait un vers latin dont nous avons souvent causé. Je veux parler du vers : 13736 Perdidit antiquum littera prima sonum. 13737 Je vous avais dit qu’il avait trait à Orion, qui s’écrivait primitivement Urion ; et, à cause d’une certaine acrimonie mêlée à cette discussion, j’étais sûr que vous ne l’aviez pas oubliée. 13738 Il était clair, dès lors, que vous ne pouviez pas manquer d’associer les deux idées d’Orion et de Chantilly. Cette association d’idées, je la vis au style du sourire qui traversa vos lèvres. 13739 Vous pensiez à l’immolation du pauvre savetier. Jusque-là, vous aviez marché courbé en deux, mais alors je vous vis vous redresser de toute votre hauteur. 13740 J’étais bien sûr que vous pensiez à la pauvre petite taille de Chantilly. 13741 C’est dans ce moment que j’interrompis vos réflexions pour vous faire remarquer que c’était un pauvre petit avorton que ce Chantilly, et qu’il serait bien mieux à sa place au théâtre des Variétés. 13742 Peu de temps après cet entretien, nous parcourions l’édition du soir de la Gazette des tribunaux, quand les paragraphes suivants attirèrent notre attention : 13744 Après quelques retards causés par des efforts infructueux pour se faire ouvrir à l’amiable, la grande porte fut forcée avec une pince, et huit ou dix voisins entrèrent, accompagnés de deux gendarmes. 13745 » Cependant, les cris avaient cessé ; mais, au moment où tout ce monde arrivait pêle-mêle au premier étage, on distingua deux fortes voix, peut-être plus, qui semblaient se disputer violemment et venir de la partie supérieure de la maison. 13746 Quand on arriva au second palier, ces bruits avaient également cessé, et tout était parfaitement tranquille. 13747 Les voisins se répandirent de chambre en chambre. 13748 Arrivés à une vaste pièce située sur le derrière, au quatrième étage, et dont on força la porte qui était fermée, avec la clef en dedans, ils se trouvèrent en face d’un spectacle qui frappa tous les assistants d’une terreur non moins grande que leur étonnement. 13749 » La chambre était dans le plus étrange désordre ; les meubles brisés et éparpillés dans tous les sens. 13750 Il n’y avait qu’un lit, les matelas en avaient été arrachés et jetés au milieu du parquet. 13751 Sur une chaise, on trouva un rasoir mouillé de sang ; dans l’âtre, trois longues et fortes boucles de cheveux gris, qui semblaient avoir été violemment arrachées avec leurs racines. 13752 Sur le parquet gisaient quatre napoléons, une boucle d’oreille ornée d’une topaze, trois grandes cuillers d’argent, trois plus petites en métal d’Alger, et deux sacs contenant environ quatre mille francs en or. 13753 Dans un coin, les tiroirs d’une commode étaient ouverts et avaient sans doute été mis au pillage, bien qu’on y ait trouvé plusieurs articles intacts. 13754 Un petit coffret de fer fut trouvé sous la literie (non pas sous le bois de lit) ; il était ouvert, avec la clef dans la serrure. 13755 Il ne contenait que quelques vieilles lettres et d’autres papiers sans importance. 13756 » On ne trouva aucune trace de madame l’Espanaye ; mais on remarqua une quantité extraordinaire de suie dans le foyer ; on fit une recherche dans la cheminée, et – chose horrible à dire ! – on en tira le corps de la demoiselle, la tête en bas, qui avait été introduit de force et poussé par l’étroite ouverture jusqu’à une distance assez considérable. 13757 Le corps était tout chaud. En l’examinant, on découvrit de nombreuses excoriations, occasionnées sans doute par la violence avec laquelle il y avait été fourré et qu’il avait fallu employer pour le dégager. 13758 La figure portait quelques fortes égratignures, et la gorge était stigmatisée par des meurtrissures noires et de profondes traces d’ongles, comme si la mort avait eu lieu par strangulation. 13759 » Après un examen minutieux de chaque partie de la maison, qui n’amena aucune découverte nouvelle, les voisins s’introduisirent dans une petite cour pavée, située sur le derrière du bâtiment. 13760 Là gisait le cadavre de la vieille dame, avec la gorge si parfaitement coupée, que, quand on essaya de le relever, la tête se détacha du tronc. 13761 Le corps, aussi bien que la tête, était terriblement mutilé, et celui-ci à ce point qu’il gardait à peine une apparence humaine. 13762 » Toute cette affaire resta un horrible mystère, et jusqu’à présent on n’a pas encore découvert, que nous sachions, le moindre fil conducteur. » 13763 Le numéro suivant portait ces détails additionnels : 13764 « Le drame de la rue Morgue. – Bon nombre d’individus ont été interrogés relativement à ce terrible et extraordinaire événement, mais rien n’a transpiré qui puisse jeter quelque jour sur l’affaire. 13765 Nous donnons ci-dessous les dépositions obtenues : 13766 » Pauline Dubourg, blanchisseuse, dépose qu’elle a connu les deux victimes pendant trois ans, et qu’elle a blanchi pour elles pendant tout ce temps. 13767 La vieille dame et sa fille semblaient en bonne intelligence, – très-affectueuses l’une envers l’autre. C’étaient de bonnes payes. 13768 Elle ne peut rien dire relativement à leur genre de vie et à leurs moyens d’existence. 13769 Elle croit que madame l’Espanaye disait la bonne aventure pour vivre. Cette dame passait pour avoir de l’argent de côté. 13770 Elle n’a jamais rencontré personne dans la maison, quand elle venait rapporter ou prendre le linge. 13771 Elle est sûre que ces dames n’avaient aucun domestique à leur service. Il lui a semblé qu’il n’y avait de meubles dans aucune partie de la maison, excepté au quatrième étage. 13772 » Pierre Moreau, marchand de tabac, dépose qu’il fournissait habituellement madame l’Espanaye, et lui vendait de petites quantités de tabac, quelquefois en poudre. 13773 Il est né dans le quartier et y a toujours demeuré. 13774 La défunte et sa fille occupaient depuis plus de six ans la maison où l’on a trouvé leurs cadavres. 13775 Primitivement elle était habitée par un bijoutier, qui sous-louait les appartements supérieurs à différentes personnes. 13776 La maison appartenait à madame l’Espanaye. Elle s’était montrée très-mécontente de son locataire, qui endommageait les lieux ; elle était venue habiter sa propre maison, refusant d’en louer une seule partie. 13777 La bonne dame était en enfance. Le témoin a vu la fille cinq ou six fois dans l’intervalle de ces six années. 13778 Elles menaient toutes deux une vie excessivement retirée ; elles passaient pour avoir de quoi. Il a entendu dire chez les voisins que madame l’Espanaye disait la bonne aventure ; il ne le croit pas. 13779 Il n’a jamais vu personne franchir la porte, excepté la vieille dame et sa fille, un commissionnaire une ou deux fois, et un médecin huit ou dix. 13780 » Plusieurs autres personnes du voisinage déposent dans le même sens. 13781 On ne cite personne comme ayant fréquenté la maison. On ne sait pas si la dame et sa fille avaient des parents vivants. Les volets des fenêtres de face s’ouvraient rarement. 13782 Ceux de derrière étaient toujours fermés, excepté aux fenêtres de la grande arrière-pièce du quatrième étage. La maison était une assez bonne maison, pas trop vieille. 13783 » Isidore Muset, gendarme, dépose qu’il a été mis en réquisition, vers trois heures du matin, et qu’il a trouvé à la grande porte vingt ou trente personnes qui s’efforçaient de pénétrer dans la maison. 13784 Il l’a forcée avec une baïonnette et non pas avec une pince. 13785 Il n’a pas eu grand’peine à l’ouvrir, parce qu’elle était à deux battants et n’était verrouillée ni par en haut, ni par en bas. 13786 Les cris ont continué jusqu’à ce que la porte fût enfoncée, puis ils ont soudainement cessé. 13787 On eût dit les cris d’une ou de plusieurs personnes en proie aux plus vives douleurs ; des cris très-hauts, très-prolongés, – non pas des cris brefs, ni précipités. 13788 Le témoin a grimpé l’escalier. 13789 En arrivant au premier palier, il a entendu deux voix qui se discutaient très-haut et très-aigrement ; – l’une, une voix rude, l’autre beaucoup plus aiguë, une voix très-singulière. 13790 Il a distingué quelques mots de la première, c’était celle d’un Français. Il est certain que ce n’est pas une voix de femme. 13792 Il n’a pu deviner ce qu’elle disait, mais il présume qu’elle parlait espagnol. 13793 Ce témoin rend compte de l’état de la chambre et des cadavres dans les mêmes termes que nous l’avons fait hier. 13794 » Henri Duval, un voisin, et orfèvre de son état, dépose qu’il faisait partie du groupe de ceux qui sont entrés les premiers dans la maison. Confirme généralement le témoignage de Muset. 13795 Aussitôt qu’ils se sont introduits dans la maison, ils ont refermé la porte pour barrer le passage à la foule qui s’amassait considérablement, malgré l’heure plus que matinale. 13796 La voix aiguë, à en croire le témoin, était une voix d’Italien. À coup sûr, ce n’était pas une voix française. 13797 Il ne sait pas au juste si c’était une voix de femme ; cependant, cela pourrait bien être. 13798 Le témoin n’est pas familiarisé avec la langue italienne ; il n’a pu distinguer les paroles, mais il est convaincu d’après l’intonation que l’individu qui parlait était un Italien. 13799 Le témoin a connu madame l’Espanaye et sa fille. 13800 Il a fréquemment causé avec elles. Il est certain que la voix aiguë n’était celle d’aucune des victimes. 13801 » Odenheimer, restaurateur. Ce témoin s’est offert de lui-même. Il ne parle pas français, et on l’a interrogé par le canal d’un interprète. 13802 Il est né à Amsterdam. Il passait devant la maison au moment des cris. Ils ont duré quelques minutes, dix minutes peut-être. C’étaient des cris prolongés, très-hauts, très-effrayants, – des cris navrants. 13803 Odenheimer est un de ceux qui ont pénétré dans la maison. Il confirme le témoignage précédent, à l’exception d’un seul point. 13804 Il est sûr que la voix aiguë était celle d’un homme, – d’un Français. Il n’a pu distinguer les mots articulés. 13805 On parlait haut et vite, – d’un ton inégal, – et qui exprimait la crainte aussi bien que la colère. 13806 La voix était âpre, plutôt âpre qu’aiguë. Il ne peut appeler cela précisément une voix aiguë. La grosse voix dit à plusieurs reprises : Sacré, – diable, – et une fois : Mon Dieu ! 13807 » Jules Mignaud, banquier, de la maison Mignaud et fils, rue Deloraine. Il est l’aîné des Mignaud. Madame l’Espanaye avait quelque fortune. 13808 Il lui avait ouvert un compte dans sa maison, huit ans auparavant, au printemps. 13809 Elle a souvent déposé chez lui de petites sommes d’argent. Il ne lui a rien délivré jusqu’au troisième jour avant sa mort, où elle est venue lui demander en personne une somme de quatre mille francs. Cette somme lui a été payée en or, et un commis a été chargé de la lui porter chez elle. 13810 » Adolphe Lebon, commis chez Mignaud et fils, dépose que, le jour en question, vers midi, il a accompagné madame l’Espanaye à son logis, avec les quatre mille francs, en deux sacs. 13811 Quand la porte s’ouvrit, mademoiselle l’Espanaye parut, et lui prit des mains l’un des deux sacs, pendant que la vieille dame le déchargeait de l’autre. 13812 Il les salua et partit. Il n’a vu personne dans la rue en ce moment. C’est une rue borgne, très-solitaire. 13813 » William Bird, tailleur, dépose qu’il est un de ceux qui se sont introduits dans la maison. Il est Anglais. Il a vécu deux ans à Paris. Il est un des premiers qui ont monté l’escalier. 13814 Il a entendu les voix qui se disputaient. La voix rude était celle d’un Français. Il a pu distinguer quelques mots, mais il ne se les rappelle pas. Il a entendu distinctement sacré et mon Dieu. 13815 C’était en ce moment un bruit comme de plusieurs personnes qui se battent, – le tapage d’une lutte et d’objets qu’on brise. La voix aiguë était très-forte, plus forte que la voix rude. 13816 Il est sûr que ce n’était pas une voix d’Anglais. Elle lui sembla une voix d’Allemand ; peut-être bien une voix de femme. Le témoin ne sait pas l’allemand. 13817 » Quatre des témoins ci-dessus mentionnés ont été assignés de nouveau, et ont déposé que la porte de la chambre où fut trouvé le corps de mademoiselle l’Espanaye était fermée en dedans quand ils y arrivèrent. 13818 Tout était parfaitement silencieux ; ni gémissements, ni bruits d’aucune espèce. Après avoir forcé la porte, ils ne virent personne. 13819 » Les fenêtres, dans la chambre de derrière et dans celle de face, étaient fermées et solidement assujetties en dedans. Une porte de communication était fermée, mais pas à clef. 13820 La porte qui conduit de la chambre du devant au corridor était fermée à clef, et la clef en dedans ; une petite pièce sur le devant de la maison, au quatrième étage, à l’entrée du corridor, ouverte, et la porte entre-bâillée ; cette pièce, encombrée de vieux bois de lit, de malles, etc. 13821 On a soigneusement dérangé et visité tous ces objets. 13822 Il n’y a pas un pouce d’une partie quelconque de la maison qui n’ait été soigneusement visité. On a fait pénétrer des ramoneurs dans les cheminées. La maison est à quatre étages avec des mansardes. 13823 Une trappe qui donne sur le toit était condamnée et solidement fermée avec des clous ; elle ne semblait pas avoir été ouverte depuis des années. 13824 Les témoins varient sur la durée du temps écoulé entre le moment où l’on a entendu les voix qui se disputaient et celui où l’on a forcé la porte de la chambre. 13825 Quelques-uns l’évaluent trop court, deux ou trois minutes, – d’autres, cinq minutes. La porte ne fut ouverte qu’à grand’peine. 13826 » Alfonso Garcio, entrepreneur des pompes funèbres, dépose qu’il demeure rue Morgue. 13827 Il est né en Espagne. Il est un de ceux qui ont pénétré dans la maison. Il n’a pas monté l’escalier. Il a les nerfs très-délicats, et redoute les conséquences d’une violente agitation nerveuse. 13828 Il a entendu les voix qui se disputaient. La grosse voix était celle d’un Français. 13829 Il n’a pu distinguer ce qu’elle disait. La voix aiguë était celle d’un Anglais, il en est bien sûr. Le témoin ne sait pas l’anglais, mais il juge d’après l’intonation. 13830 » Alberto Montani, confiseur, dépose qu’il fut des premiers qui montèrent l’escalier. Il a entendu les voix en question. 13831 La voix rauque était celle d’un Français. Il a distingué quelques mots. L’individu qui parlait semblait faire des remontrances. 13832 Il n’a pas pu deviner ce que disait la voix aiguë. Elle parlait vite et par saccades. Il l’a prise pour la voix d’un Russe. 13833 Il confirme en général les témoignages précédents. Il est Italien ; il avoue qu’il n’a jamais causé avec un Russe. 13834 » Quelques témoins, rappelés, certifient que les cheminées dans toutes les chambres, au quatrième étage, sont trop étroites pour livrer passage à un être humain. 13835 Quand ils ont parlé de ramonage, ils voulaient parler de ces brosses en forme de cylindres dont on se sert pour nettoyer les cheminées. 13836 On a fait passer ces brosses du haut au bas dans tous les tuyaux de la maison. Il n’y a sur le derrière aucun passage qui ait pu favoriser la fuite d’un assassin, pendant que les témoins montaient l’escalier. 13837 Le corps de mademoiselle l’Espanaye était si solidement engagé dans la cheminée, qu’il a fallu, pour le retirer, que quatre ou cinq des témoins réunissent leurs forces. 13838 » Paul Dumas, médecin, dépose qu’il a été appelé au point du jour pour examiner les cadavres. Ils gisaient tous les deux sur le fond de sangle du lit dans la chambre où avait été trouvée mademoiselle l’Espanaye. 13839 Le corps de la jeune dame était fortement meurtri et excorié. Ces particularités s’expliquent suffisamment par le fait de son introduction dans la cheminée. 13840 La gorge était singulièrement écorchée. Il y avait, juste au-dessous du menton, plusieurs égratignures profondes, avec une rangée de taches livides, résultant évidemment de la pression des doigts. 13841 La face était affreusement décolorée, et les globes des yeux sortaient de la tête. La langue était coupée à moitié. 13842 Une large meurtrissure se manifestait au creux de l’estomac, produite, selon toute apparence, par la pression d’un genou. 13843 Dans l’opinion de M. Dumas, mademoiselle l’Espanaye avait été étranglée par un ou par plusieurs individus inconnus. 13844 » Le corps de la mère était horriblement mutilé. Tous les os de la jambe et du bras gauche plus ou moins fracassés ; le tibia gauche brisé en esquilles, ainsi que les côtes du même côté. 13845 Tout le corps affreusement meurtri et décoloré. 13846 Il était impossible de dire comment de pareils coups avaient été portés. 13847 Une lourde massue de bois ou une large pince de fer, une arme grosse, pesante et contondante aurait pu produire de pareils résultats, et encore, maniée par les mains d’un homme excessivement robuste. 13848 Avec n’importe quelle arme, aucune femme n’aurait pu frapper de tels coups. La tête de la défunte, quand le témoin la vit, était entièrement séparée du tronc, et, comme le reste, singulièrement broyée. 13849 La gorge évidemment avait été tranchée avec un instrument très-affilé, très-probablement un rasoir. 13850 » Alexandre Étienne, chirurgien, a été appelé en même temps que M. Dumas pour visiter les cadavres ; il confirme le témoignage et l’opinion de M. Dumas. 13851 » Quoique plusieurs autres personnes aient été interrogées, on n’a pu obtenir aucun autre renseignement d’une valeur quelconque. 13852 Jamais assassinat si mystérieux, si embrouillé, n’a été commis à Paris, si toutefois il y a eu assassinat. 13853 » La police est absolument déroutée, – cas fort usité dans les affaires de cette nature. Il est vraiment impossible de retrouver le fil de cette affaire. » 13854 L’édition du soir constatait qu’il régnait une agitation permanente dans le quartier Saint-Roch ; que les lieux avaient été l’objet d’un second examen, que les témoins avaient été interrogés de nouveau, mais tout cela sans résultat. 13855 Cependant, un post-scriptum annonçait qu’Adolphe Lebon, le commis de la maison de banque, avait été arrêté et incarcéré, bien que rien dans les faits déjà connus ne parût suffisant pour l’incriminer. 13856 Dupin semblait s’intéresser singulièrement à la marche de cette affaire, autant, du moins, que j’en pouvais juger par ses manières, car il ne faisait aucun commentaire. 13857 Ce fut seulement après que le journal eut annoncé l’emprisonnement de Lebon qu’il me demanda quelle opinion j’avais relativement à ce double meurtre. 13858 Je ne pus que lui confesser que j’étais comme tout Paris, et que je le considérais comme un mystère insoluble. Je ne voyais aucun moyen d’attraper la trace du meurtrier. 13859 — Nous ne devons pas juger des moyens possibles, dit Dupin, par une instruction embryonnaire. 13860 La police parisienne, si vantée pour sa pénétration, est très-rusée, rien de plus. Elle procède sans méthode, elle n’a pas d’autre méthode que celle du moment. 13861 On fait ici un grand étalage de mesures, mais il arrive souvent qu’elles sont si intempestives et si mal appropriées au but, qu’elles font penser à M. Jourdain, qui demandait sa robe de chambre – pour mieux entendre la musique. 13862 Les résultats obtenus sont quelquefois surprenants, mais ils sont, pour la plus grande partie, simplement dus à la diligence et à l’activité. Dans le cas où ces facultés sont insuffisantes, les plans ratent. 13863 Vidocq, par exemple, était bon pour deviner ; c’était un homme de patience ; mais sa pensée n’étant pas suffisamment éduquée, il faisait continuellement fausse route, par l’ardeur même de ses investigations. 13864 Il diminuait la force de sa vision en regardant l’objet de trop près. 13865 Il pouvait peut-être voir un ou deux points avec une netteté singulière, mais, par le fait même de son procédé, il perdait l’aspect de l’affaire prise dans son ensemble. 13866 Cela peut s’appeler le moyen d’être trop profond. 13867 La vérité n’est pas toujours dans un puits. En somme, quant à ce qui regarde les notions qui nous intéressent de plus près, je crois qu’elle est invariablement à la surface. 13868 Nous la cherchons dans la profondeur de la vallée : c’est au sommet des montagnes que nous la découvrirons. 13869 » On trouve dans la contemplation des corps célestes des exemples et des échantillons excellents de ce genre d’erreur. 13870 Jetez sur une étoile un rapide coup d’œil, regardez-la obliquement, en tournant vers elle la partie latérale de la rétine (beaucoup plus sensible à une lumière faible que la partie centrale), et vous verrez l’étoile distinctement ; vous aurez l’appréciation la plus juste de son éclat, éclat qui s’obscurcit à proportion que vous dirigez votre point de vue en plein sur elle. 13871 » Dans le dernier cas, il tombe sur l’œil un plus grand nombre de rayons ; mais, dans le premier, il y a une réceptibilité plus complète, une susceptibilité beaucoup plus vive. 13872 Une profondeur outrée affaiblit la pensée et la rend perplexe ; et il est possible de faire disparaître Vénus elle-même du firmament par une attention trop soutenue, trop concentrée, trop directe. 13873 » Quant à cet assassinat, faisons nous-mêmes un examen avant de nous former une opinion. 13874 Une enquête nous procurera de l’amusement (je trouvai cette expression bizarre, appliquée au cas en question, mais je ne dis mot) ; et, en outre, Lebon m’a rendu un service pour lequel je ne veux pas me montrer ingrat. 13875 Nous irons sur les lieux, nous les examinerons de nos propres yeux. Je connais G…, le préfet de police, et nous obtiendrons sans peine l’autorisation nécessaire. 13876 L’autorisation fut accordée, et nous allâmes tout droit à la rue Morgue. C’est un de ces misérables passages qui relient la rue Richelieu à la rue Saint-Roch. 13877 C’était dans l’après-midi, et il était déjà tard quand nous y arrivâmes, car ce quartier est situé à une grande distance de celui que nous habitions. 13878 Nous trouvâmes bien vite la maison, car il y avait une multitude de gens qui contemplaient de l’autre côté de la rue les volets fermés, avec une curiosité badaude. 13879 C’était une maison comme toutes les maisons de Paris, avec une porte cochère, et sur l’un des côtés une niche vitrée avec un carreau mobile, représentant la loge du concierge. 13880 Avant d’entrer, nous remontâmes la rue, nous tournâmes dans une allée, et nous passâmes ainsi sur les derrières de la maison. 13881 Dupin, pendant ce temps, examinait tous les alentours, aussi bien que la maison, avec une attention minutieuse dont je ne pouvais pas deviner l’objet. 13882 Nous revînmes sur nos pas vers la façade de la maison ; nous sonnâmes, nous montrâmes notre pouvoir, et les agents nous permirent d’entrer. 13883 Nous montâmes jusqu’à la chambre où on avait trouvé le corps de mademoiselle l’Espanaye, et où gisaient encore les deux cadavres. 13884 Le désordre de la chambre avait été respecté, comme cela se pratique en pareil cas. Je ne vis rien de plus que ce qu’avait constaté la Gazette des tribunaux. 13885 Dupin analysait minutieusement toutes choses, sans en excepter les corps des victimes. 13886 Nous passâmes ensuite dans les autres chambres, et nous descendîmes dans les cours, toujours accompagnés par un gendarme. Cet examen dura fort longtemps, et il était nuit quand nous quittâmes la maison. 13887 En retournant chez nous, mon camarade s’arrêta quelques minutes dans les bureaux d’un journal quotidien. 13888 J’ai dit que mon ami avait toute sorte de bizarreries, et que je les ménageais (car ce mot n’a pas d’équivalent en anglais). 13889 Il entrait maintenant dans sa fantaisie de se refuser à toute conversation relativement à l’assassinat, jusqu’au lendemain à midi. 13890 Ce fut alors qu’il me demanda brusquement si j’avais remarqué quelque chose de particulier sur le théâtre du crime. 13891 Il y eut dans sa manière de prononcer le mot particulier un accent qui me donna le frisson sans que je susse pourquoi. 13892 — Non, rien de particulier, dis-je, rien autre, du moins, que ce que nous avons lu tous deux dans le journal. 13893 — La Gazette, reprit-il, n’a pas, je le crains, pénétré l’horreur insolite de l’affaire. Mais laissons là les opinions niaises de ce papier. 13894 Il me semble que le mystère est considéré comme insoluble, par la raison même qui devrait le faire regarder comme facile à résoudre, – je veux parler du caractère excessif sous lequel il apparaît. 13895 Les gens de police sont confondus par l’absence apparente de motifs légitimant, non le meurtre en lui-même, mais l’atrocité du meurtre. 13896 Ils sont embarrassés aussi par l’impossibilité apparente de concilier les voix qui se disputaient avec ce fait qu’on n’a trouvé en haut de l’escalier d’autre personne que mademoiselle l’Espanaye, assassinée, et qu’il n’y avait aucun moyen de sortir sans être vu des gens qui montaient l’escalier. 13897 L’étrange désordre de la chambre, – le corps fourré, la tête en bas, dans la cheminée, – l’effrayante mutilation du corps de la vieille dame, – ces considérations, jointes à celles que j’ai mentionnées et à d’autres dont je n’ai pas besoin de parler, ont suffi pour paralyser l’action des agents du ministère et pour dérouter complètement leur perspicacité si vantée. 13898 Ils ont commis la très-grosse et très-commune faute de confondre l’extraordinaire avec l’abstrus. 13899 Mais c’est justement en suivant ces déviations du cours ordinaire de la nature que la raison trouvera son chemin, si la chose est possible, et marchera vers la vérité. 13900 Dans les investigations du genre de celle qui nous occupe, il ne faut pas tant se demander comment les choses se sont passées, qu’étudier en quoi elles se distinguent de tout ce qui est arrivé jusqu’à présent. 13901 Bref, la facilité avec laquelle j’arriverai, – ou je suis déjà arrivé, – à la solution du mystère, est en raison directe de son insolubilité apparente aux yeux de la police. 13902 Je fixai mon homme avec un étonnement muet. 13903 — J’attends maintenant, continua-t-il en jetant un regard sur la porte de notre chambre, j’attends un individu qui, bien qu’il ne soit peut-être pas l’auteur de cette boucherie, doit se trouver en partie impliqué dans sa perpétration. 13904 Il est probable qu’il est innocent de la partie atroce du crime. J’espère ne pas me tromper dans cette hypothèse ; car c’est sur cette hypothèse que je fonde l’espérance de déchiffrer l’énigme entière. 13905 J’attends l’homme ici, – dans cette chambre, – d’une minute à l’autre. 13906 Il est vrai qu’il peut fort bien ne pas venir, mais il y a quelques probabilités pour qu’il vienne. S’il vient, il sera nécessaire de le garder. 13907 Voici des pistolets, et nous savons tous deux à quoi ils servent quand l’occasion l’exige. 13908 Je pris les pistolets, sans trop savoir ce que je faisais, pouvant à peine en croire mes oreilles, – pendant que Dupin continuait, à peu près comme dans un monologue. 13909 J’ai déjà parlé de ses manières distraites dans ces moments-là. 13910 Son discours s’adressait à moi ; mais sa voix, quoique montée à un diapason fort ordinaire, avait cette intonation que l’on prend d’habitude en parlant à quelqu’un placé à une grande distance. 13911 Ses yeux, d’une expression vague, ne regardaient que le mur. 13912 — Les voix qui se disputaient, disait-il, les voix entendues par les gens qui montaient l’escalier n’étaient pas celles de ces malheureuses femmes, – cela est plus que prouvé par l’évidence. 13913 Cela nous débarrasse pleinement de la question de savoir si la vieille dame aurait assassiné sa fille et se serait ensuite suicidée. 13914 » Je ne parle de ce cas que par amour de la méthode ; car la force de madame l’Espanaye eût été absolument insuffisante pour introduire le corps de sa fille dans la cheminée, de la façon où on l’a découvert ; et la nature des blessures trouvées sur sa propre personne exclut entièrement l’idée de suicide. 13915 Le meurtre a donc été commis par des tiers, et les voix de ces tiers sont celles qu’on a entendues se quereller. 13916 » Permettez-moi maintenant d’appeler votre attention, – non pas sur les dépositions relatives à ces voix, – mais sur ce qu’il y a de particulier dans ces dépositions. 13917 Y avez-vous remarqué quelque chose de particulier ? 13918 — Je remarquai que, pendant que tous les témoins s’accordaient à considérer la grosse voix comme étant celle d’un Français, il y avait un grand désaccord relativement à la voix aiguë, ou, comme l’avait définie un seul individu, à la voix âpre. 13919 — Cela constitue l’évidence, dit Dupin, mais non la particularité de l’évidence. Vous n’avez rien observé de distinctif ; – cependant il y avait quelque chose à observer. 13920 Les témoins, remarquez-le bien, sont d’accord sur la grosse voix ; là-dessus, il y a unanimité. 13921 Mais relativement à la voix aiguë, il y a une particularité, – elle ne consiste pas dans leur désaccord, – mais en ceci que, quand un Italien, un Anglais, un Espagnol, un Hollandais, essayent de la décrire, chacun en parle comme d’une voix d’étranger, chacun est sûr que ce n’était pas la voix d’un de ses compatriotes. 13922 » Chacun la compare, non pas à la voix d’un individu dont la langue lui serait familière, mais justement au contraire. 13923 Le Français présume que c’était une voix d’Espagnol, et il aurait pu distinguer quelques mots s’il était familiarisé avec l’espagnol. 13924 Le Hollandais affirme que c’était la voix d’un Français ; mais il est établi que le témoin, ne sachant pas le français, a été interrogé par le canal d’un interprète. 13925 L’Anglais pense que c’était la voix d’un Allemand, et il n’entend pas l’allemand. 13926 L’Espagnol est positivement sûr que c’était la voix d’un Anglais, mais il en juge uniquement par l’intonation, car il n’a aucune connaissance de l’anglais. 13927 L’Italien croit à une voix de Russe, mais il n’a jamais causé avec une personne native de Russie. 13928 Un autre Français, cependant, diffère du premier, et il est certain que c’était une voix d’Italien ; mais, n’ayant pas la connaissance de cette langue, il fait comme l’Espagnol, il tire sa certitude de l’intonation. 13929 Or, cette voix était donc bien insolite et bien étrange, qu’on ne pût obtenir à son égard que de pareils témoignages ? 13930 Une voix dans les intonations de laquelle des citoyens des cinq grandes parties de l’Europe n’ont rien pu reconnaître qui leur fût familier ! 13931 Vous me direz que c’était peut-être la voix d’un Asiatique ou d’un Africain. 13932 Les Africains et les Asiatiques n’abondent pas à Paris ; mais, sans nier la possibilité du cas, j’appellerai simplement votre attention sur trois points. 13933 » Un témoin dépeint la voix ainsi : plutôt âpre qu’aiguë. Deux autres en parlent comme d’une voix brève et saccadée. Ces témoins n’ont distingué aucune parole, – aucun son ressemblant à des paroles. 13934 » Je ne sais pas, continua Dupin, quelle impression j’ai pu faire sur votre entendement ; mais je n’hésite pas à affirmer qu’on peut tirer des déductions légitimes de cette partie même des dépositions, – la partie relative aux deux voix, – la grosse voix et la voix aiguë – très-suffisantes en elles-mêmes pour créer un soupçon qui indiquerait la route dans toute investigation ultérieure du mystère. 13935 » J’ai dit : déductions légitimes, mais cette expression ne rend pas complètement ma pensée. 13936 Je voulais faire entendre que ces déductions sont les seules convenables, et que ce soupçon en surgit inévitablement comme le seul résultat possible. 13937 Cependant, de quelle nature est ce soupçon, je ne vous le dirai pas immédiatement. 13938 Je désire simplement vous démontrer que ce soupçon était plus que suffisant pour donner un caractère décidé, une tendance positive à l’enquête que je voulais faire dans la chambre. 13939 » Maintenant, transportons-nous en imagination dans cette chambre. Quel sera le premier objet de notre recherche ? Les moyens d’évasion employés par les meurtriers. 13940 Nous pouvons affirmer, – n’est-ce pas, – que nous ne croyons ni l’un ni l’autre aux événements surnaturels ? 13941 Mesdames l’Espanaye n’ont pas été assassinées par les esprits. Les auteurs du meurtre étaient des êtres matériels, et ils ont fui matériellement. 13942 » Or, comment ? Heureusement, il n’y a qu’une manière de raisonner sur ce point, et cette manière nous conduira à une conclusion positive. 13943 Examinons donc un à un les moyens possibles d’évasion. 13944 Il est clair que les assassins étaient dans la chambre où l’on a trouvé mademoiselle l’Espanaye, ou au moins dans la chambre adjacente quand la foule a monté l’escalier. 13945 Ce n’est donc que dans ces deux chambres que nous avons à chercher des issues. 13946 La police a levé les parquets, ouvert les plafonds, sondé la maçonnerie des murs. Aucune issue secrète n’a pu échapper à sa perspicacité. 13947 Mais je ne me suis pas fié à ses yeux, et j’ai examiné avec les miens ; il n’y a réellement pas d’issue secrète. 13948 Les deux portes qui conduisent des chambres dans le corridor étaient solidement fermées et les clefs en dedans. Voyons les cheminées. 13949 Celles-ci, qui sont d’une largeur ordinaire jusqu’à une distance de huit ou dix pieds au-dessus du foyer, ne livreraient pas au-delà un passage suffisant à un gros chat. 13950 » L’impossibilité de la fuite, du moins par les voies ci-dessus indiquées, étant donc absolument établie, nous en sommes réduits aux fenêtres. 13951 Personne n’a pu fuir par celles de la chambre du devant sans être vu par la foule du dehors. Il a donc fallu que les meurtriers s’échappassent par celles de la chambre de derrière. 13952 » Maintenant, amenés, comme nous le sommes, à cette conclusion par des déductions aussi irréfragables, nous n’avons pas le droit, en tant que raisonneurs, de la rejeter en raison de son apparente impossibilité. 13953 Il ne nous reste donc qu’à démontrer que cette impossibilité apparente n’existe pas en réalité. 13954 » Il y a deux fenêtres dans la chambre. L’une des deux n’est pas obstruée par l’ameublement, et est restée entièrement visible. 13955 La partie inférieure de l’autre est cachée par le chevet du lit, qui est fort massif et qui est poussé tout contre. 13956 On a constaté que la première était solidement assujettie en dedans. Elle a résisté aux efforts les plus violents de ceux qui ont essayé de la lever. 13957 On avait percé dans son châssis, à gauche, un grand trou avec une vrille, et on y trouva un gros clou enfoncé presque jusqu’à la tête. 13958 En examinant l’autre fenêtre, on y a trouvé fiché un clou semblable ; et un vigoureux effort pour lever le châssis n’a pas eu plus de succès que de l’autre côté. 13959 La police était dès lors pleinement convaincue qu’aucune fuite n’avait pu s’effectuer par ce chemin. Il fut donc considéré comme superflu de retirer les clous et d’ouvrir les fenêtres. 13960 » Mon examen fut un peu plus minutieux, et cela par la raison que je vous ai donnée tout à l’heure. C’était le cas, je le savais, où il fallait démontrer que l’impossibilité n’était qu’apparente. 13961 » Je continuai à raisonner ainsi, – à posteriori. – Les meurtriers s’étaient évadés par l’une de ces fenêtres. 13962 Cela étant, ils ne pouvaient pas avoir réassujetti les châssis en dedans, comme on les a trouvés ; considération qui, par son évidence, a borné les recherches de la police dans ce sens-là. 13963 Cependant, ces châssis étaient bien fermés. 13964 Il faut donc qu’ils puissent se fermer d’eux-mêmes. Il n’y avait pas moyen d’échapper à cette conclusion. 13965 J’allai droit à la fenêtre non bouchée, je retirai le clou avec quelque difficulté, et j’essayai de lever le châssis. 13966 Il a résisté à tous mes efforts, comme je m’y attendais. 13967 Il y avait donc, j’en étais sûr maintenant, un ressort caché ; et ce fait, corroborant mon idée, me convainquit au moins de la justesse de mes prémisses, quelque mystérieuses que m’apparussent toujours les circonstances relatives aux clous. 13968 Un examen minutieux me fit bientôt découvrir le ressort secret. Je le poussai, et, satisfait de ma découverte, je m’abstins de lever le châssis. 13969 » Je remis alors le clou en place et l’examinai attentivement. Une personne passant par la fenêtre pouvait l’avoir refermée, et le ressort aurait fait son office ; mais le clou n’aurait pas été replacé. 13970 Cette conclusion était nette et rétrécissait encore le champ de mes investigations. Il fallait que les assassins se fussent enfuis par l’autre fenêtre. 13971 En supposant donc que les ressorts des deux croisées fussent semblables, comme il était probable, il fallait cependant trouver une différence dans les clous, ou au moins dans la manière dont ils avaient été fixés. 13972 Je montai sur le fond de sangle du lit, et je regardai minutieusement l’autre fenêtre par-dessus le chevet du lit. 13973 Je passai ma main derrière, je découvris aisément le ressort, et je le fis jouer ; – il était, comme je l’avais deviné, identique au premier. 13974 Alors, j’examinai le clou. Il était aussi gros que l’autre, et fixé de la même manière, enfoncé presque jusqu’à la tête. 13975 » Vous direz que j’étais embarrassé ; mais, si vous avez une pareille pensée, c’est que vous vous êtes mépris sur la nature de mes inductions. 13976 Pour me servir d’un terme de jeu, je n’avais pas commis une seule faute ; je n’avais pas perdu la piste un seul instant ; il n’y avait pas une lacune d’un anneau à la chaîne. 13977 J’avais suivi le secret jusque dans sa dernière phase, et cette phase, c’était le clou. 13978 Il ressemblait, dis-je, sous tous les rapports, à son voisin de l’autre fenêtre ; mais ce fait, quelque concluant qu’il fût en apparence, devenait absolument nul, en face de cette considération dominante, à savoir que là, à ce clou, finissait le fil conducteur. 13979 Il faut, me dis-je, qu’il y ait dans ce clou quelque chose de défectueux. 13980 Je le touchai, et la tête, avec un petit morceau de la tige, un quart de pouce environ, me resta dans les doigts. 13981 Le reste de la tige était dans le trou, où elle s’était cassée. 13982 Cette fracture était fort ancienne, car les bords étaient incrustés de rouille, et elle avait été opérée par un coup de marteau, qui avait enfoncé en partie la tête du clou dans le fond du châssis. 13983 Je rajustai soigneusement la tête avec le morceau qui la continuait, et le tout figura un clou intact ; la fissure était inappréciable. 13984 Je pressai le ressort, je levai doucement la croisée de quelques pouces ; la tête du clou vint avec elle, sans bouger de son trou. 13985 Je refermai la croisée, et le clou offrit de nouveau le semblant d’un clou complet. 13986 » Jusqu’ici l’énigme était débrouillée. L’assassin avait fui par la fenêtre qui touchait au lit. 13987 Qu’elle fût retombée d’elle-même après la fuite ou qu’elle eût été fermée par une main humaine, elle était retenue par le ressort, et la police avait attribué cette résistance au clou ; aussi toute enquête ultérieure avait été jugée superflue. 13988 » La question, maintenant, était celle du mode de descente. Sur ce point, j’avais satisfait mon esprit dans notre promenade autour du bâtiment. 13989 À cinq pieds et demi environ de la fenêtre en question court une chaîne de paratonnerre. De cette chaîne, il eût été impossible à n’importe qui d’atteindre la fenêtre, à plus forte raison, d’entrer. 13990 » Toutefois, j’ai remarqué que les volets du quatrième étage étaient du genre particulier que les menuisiers parisiens appellent ferrades, genre de volets fort peu usité aujourd’hui, mais qu’on rencontre fréquemment dans de vieilles maisons de Lyon et de Bordeaux. 13991 Ils sont faits comme une porte ordinaire (porte simple, et non pas à double battant), à l’exception que la partie inférieure est façonnée à jour et treillissée, ce qui donne aux mains une excellente prise. 13992 » Dans le cas en question, ces volets sont larges de trois bons pieds et demi. 13993 Quand nous les avons examinés du derrière de la maison, ils étaient tous les deux ouverts à moitié, c’est-à-dire qu’ils faisaient angle droit avec le mur. 13994 Il est présumable que la police a examiné comme moi les derrières du bâtiment ; mais, en regardant ces ferrades dans le sens de leur largeur (comme elle les a vues inévitablement), elle n’a sans doute pas pris garde à cette largeur même, ou du moins elle n’y a pas attaché l’importance nécessaire. 13995 En somme, les agents, quand il a été démontré pour eux que la fuite n’avait pu s’effectuer de ce côté, ne leur ont appliqué qu’un examen succinct. 13996 » Toutefois, il était évident pour moi que le volet appartenant à la fenêtre située au chevet du lit, si on le supposait rabattu contre le mur, se trouverait à deux pieds de la chaîne du paratonnerre. 13997 Il était clair aussi que, par l’effort d’une énergie et d’un courage insolites, on pouvait, à l’aide de la chaîne, avoir opéré une invasion par la fenêtre. 13998 Arrivé à cette distance de deux pieds et demi (je suppose maintenant le volet complètement ouvert), un voleur aurait pu trouver dans le treillage une prise solide. 13999 Il aurait pu dès lors, en lâchant la chaîne, en assurant bien ses pieds contre le mur et en s’élançant vivement, tomber dans la chambre, et attirer violemment le volet avec lui de manière à le fermer, – en supposant, toutefois, la fenêtre ouverte en ce moment-là. 14000 » Remarquez bien, je vous prie, que j’ai parlé d’une énergie très-peu commune, nécessaire pour réussir dans une entreprise aussi difficile, aussi hasardeuse. 14001 Mon but est de vous prouver d’abord que la chose a pu se faire, – en second lieu et principalement, d’attirer votre attention sur le caractère très-extraordinaire, presque surnaturel, de l’agilité nécessaire pour l’accomplir. 14002 » Vous direz sans doute, en vous servant de la langue judiciaire, que, pour donner ma preuve à fortiori, je devrais plutôt sous-évaluer l’énergie nécessaire dans ce cas que réclamer son exacte estimation. 14003 C’est peut-être la pratique des tribunaux, mais cela ne rentre pas dans les us de la raison. Mon objet final, c’est la vérité. 14004 Mon but actuel, c’est de vous induire à rapprocher cette énergie tout à fait insolite de cette voix si particulière, de cette voix aiguë (ou âpre), de cette voix saccadée, dont la nationalité n’a pu être constatée par l’accord de deux témoins, et dans laquelle personne n’a saisi de mots articulés, de syllabisation. 14005 À ces mots, une conception vague et embryonnaire de la pensée de Dupin passa dans mon esprit. 14006 Il me semblait être sur la limite de la compréhension sans pouvoir comprendre ; comme les gens qui sont quelquefois sur le bord du souvenir, et qui cependant ne parviennent pas à se rappeler. 14007 Mon ami continua son argumentation : 14008 — Vous voyez, dit-il, que j’ai transporté la question du mode de sortie au mode d’entrée. 14009 Il était dans mon plan de démontrer qu’elles se sont effectuées de la même manière et sur le même point. Retournons maintenant dans l’intérieur de la chambre. Examinons toutes les particularités. 14010 Les tiroirs de la commode, dit-on, ont été mis au pillage, et cependant on y a trouvé plusieurs articles de toilette intacts. 14011 Cette conclusion est absurde ; c’est une simple conjecture, – une conjecture passablement niaise, et rien de plus. 14012 Comment pouvons-nous savoir que les articles trouvés dans les tiroirs ne représentent pas tout ce que les tiroirs contenaient ? 14013 Madame l’Espanaye et sa fille menaient une vie excessivement retirée, ne voyaient pas le monde, sortaient rarement, avaient donc peu d’occasions de changer de toilette. 14014 Ceux qu’on a trouvés étaient au moins d’aussi bonne qualité qu’aucun de ceux que possédaient vraisemblablement ces dames. 14015 Et, si un voleur en avait pris quelques-uns, pourquoi n’aurait-il pas pris les meilleurs, – pourquoi ne les aurait-il pas tous pris ? 14016 Bref, pourquoi aurait-il abandonné les quatre mille francs en or pour s’empêtrer d’un paquet de linge ? 14017 L’or a été abandonné. La presque totalité de la somme désignée par le banquier Mignaud a été trouvée sur le parquet, dans les sacs. 14018 Je tiens donc à écarter de votre pensée l’idée saugrenue d’un intérêt, idée engendrée dans le cerveau de la police par les dépositions qui parlent d’argent délivré à la porte même de la maison. 14019 Des coïncidences dix fois plus remarquables que celle-ci (la livraison de l’argent et le meurtre commis trois jours après sur le propriétaire) se présentent dans chaque heure de notre vie sans attirer notre attention, même une minute. 14020 En général, les coïncidences sont de grosses pierres d’achoppement dans la route de ces pauvres penseurs mal éduqués qui ne savent pas le premier mot de la théorie des probabilités, théorie à laquelle le savoir humain doit ses plus glorieuses conquêtes et ses plus belles découvertes. 14021 Dans le cas présent, si l’or avait disparu, le fait qu’il avait été délivré trois jours auparavant créerait quelque chose de plus qu’une coïncidence. 14022 Cela corroborerait l’idée d’intérêt. 14023 Mais, dans les circonstances réelles où nous sommes placés, si nous supposons que l’or a été le mobile de l’attaque, il nous faut supposer ce criminel assez indécis et assez idiot pour oublier à la fois son or et le mobile qui l’a fait agir. 14024 » Mettez donc bien dans votre esprit les points sur lesquels j’ai attiré votre attention, – cette voix particulière, cette agilité sans pareille, et cette absence frappante d’intérêt dans un meurtre aussi singulièrement atroce que celui-ci. – Maintenant, examinons la boucherie en elle-même. 14025 Voilà une femme étranglée par la force des mains, et introduite dans une cheminée, la tête en bas. Des assassins ordinaires n’emploient pas de pareils procédés pour tuer. 14026 Encore moins cachent-ils ainsi les cadavres de leurs victimes. Dans cette façon de fourrer le corps dans la cheminée, vous admettrez qu’il y a quelque chose d’excessif et de bizarre, – quelque chose d’absolument inconciliable avec tout ce que nous connaissons en général des actions humaines, même en supposant que les auteurs fussent les plus pervertis des hommes. 14027 Songez aussi quelle force prodigieuse il a fallu pour pousser ce corps dans une pareille ouverture, et l’y pousser si puissamment, que les efforts réunis de plusieurs personnes furent à peine suffisants pour l’en retirer. 14028 » Portons maintenant notre attention sur d’autres indices de cette vigueur merveilleuse. Dans le foyer, on a trouvé des mèches de cheveux, – des mèches très-épaisses de cheveux gris. 14029 Ils ont été arrachés avec leurs racines. Vous savez quelle puissante force il faut pour arracher seulement de la tête vingt ou trente cheveux à la fois. Vous avez vu les mèches en question aussi bien que moi. 14030 À leurs racines grumelées – affreux spectacle ! – adhéraient des fragments de cuir chevelu, – preuve certaine de la prodigieuse puissance qu’il a fallu déployer pour déraciner peut-être cinq cent mille cheveux d’un seul coup. 14031 » Non-seulement le cou de la vieille dame était coupé, mais la tête absolument séparée du corps ; l’instrument était un simple rasoir. 14032 Je vous prie de remarquer cette férocité bestiale. 14033 Je ne parle pas des meurtrissures du corps de madame l’Espanaye ; M. Dumas et son honorable confrère, M. Étienne, ont affirmé qu’elles avaient été produites par un instrument contondant ; et en cela ces messieurs furent tout à fait dans le vrai. 14034 L’instrument contondant a été évidemment le pavé de la cour sur laquelle la victime est tombée de la fenêtre qui donne sur le lit. 14035 Cette idée, quelque simple qu’elle apparaisse maintenant, a échappé à la police par la même raison qui l’a empêchée de remarquer la largeur des volets ; parce que, grâce à la circonstance des clous, sa perception était hermétiquement bouchée à l’idée que les fenêtres eussent jamais pu être ouvertes. 14036 » Si maintenant, – subsidiairement, – vous avez convenablement réfléchi au désordre bizarre de la chambre, nous sommes allés assez avant pour combiner les idées d’une agilité merveilleuse, d’une férocité bestiale, d’une boucherie sans motif, d’une grotesquerie dans l’horrible absolument étrangère à l’humanité, et d’une voix dont l’accent est inconnu à l’oreille d’hommes de plusieurs nations, d’une voix dénuée de toute syllabisation distincte et intelligible. 14037 Or, pour vous, qu’en ressort-il ? Quelle impression ai-je faite sur votre imagination ? 14038 Je sentis un frisson courir dans ma chair quand Dupin me fit cette question. 14039 — Un fou, dis-je, aura commis ce meurtre, – quelque maniaque furieux échappé à une maison de santé du voisinage. 14040 — Pas trop mal, répliqua-t-il, votre idée est presque applicable. 14041 Mais les voix des fous, même dans leurs plus sauvages paroxysmes, ne se sont jamais accordées avec ce qu’on dit de cette singulière voix entendue dans l’escalier. 14042 Les fous font partie d’une nation quelconque, et leur langage, pour incohérent qu’il soit dans les paroles, est toujours syllabifié. 14043 En outre, le cheveu d’un fou ne ressemble pas à celui que je tiens maintenant dans ma main. J’ai dégagé cette petite touffe des doigts rigides et crispés de madame l’Espanaye. Dites-moi ce que vous en pensez. 14044 — Dupin ! dis-je, complètement bouleversé, ces cheveux sont bien extraordinaires, – ce ne sont pas là des cheveux humains ! 14045 — Je n’ai pas affirmé qu’ils fussent tels, dit-il ; mais, avant de nous décider sur ce point, je désire que vous jetiez un coup d’œil sur le petit dessin que j’ai tracé sur ce bout de papier. C’est un fac-similé qui représente ce que certaines dépositions définissent les meurtrissures noirâtres et les profondes marques d’ongles trouvées sur le cou de mademoiselle l’Espanaye, et que MM. Dumas et Étienne appellent une série de taches livides, évidemment causées par l’impression des doigts. 14046 — Vous voyez, continua mon ami en déployant le papier sur la table, que ce dessin donne l’idée d’une poigne solide et ferme. 14047 Il n’y a pas d’apparence que les doigts aient glissé. 14048 Chaque doigt a gardé, peut-être jusqu’à la mort de la victime, la terrible prise qu’il s’était faite, et dans laquelle il s’est moulé. 14049 Essayez maintenant de placer tous vos doigts, en même temps, chacun dans la marque analogue que vous voyez. 14050 J’essayai, mais inutilement. 14051 — Il est possible, dit Dupin, que nous ne fassions pas cette expérience d’une manière décisive. Le papier est déployé sur une surface plane, et la gorge humaine est cylindrique. 14052 Voici un rouleau de bois dont la circonférence est à peu près celle d’un cou. Étalez le dessin tout autour, et recommencez l’expérience. 14053 J’obéis ; mais la difficulté fut encore plus évidente que la première fois. 14054 — Ceci, dis-je, n’est pas la trace d’une main humaine. 14055 — Maintenant, dit Dupin, lisez ce passage de Cuvier. 14056 C’était l’histoire minutieuse, anatomique et descriptive, du grand orang-outang fauve des îles de l’Inde orientale. 14057 Tout le monde connaît suffisamment la gigantesque stature, la force et l’agilité prodigieuses, la férocité sauvage et les facultés d’imitation de ce mammifère. Je compris d’un seul coup tout l’horrible du meurtre. 14058 — La description des doigts, dis-je, quand j’eus fini la lecture, s’accorde parfaitement avec le dessin. 14059 Je vois qu’aucun animal, – excepté un orang-outang, et de l’espèce en question, – n’aurait pu faire des marques telles que celles que vous avez dessinées. 14060 Cette touffe de poils fauves est aussi d’un caractère identique à celui de l’animal de Cuvier. 14061 Mais je ne me rends pas facilement compte des détails de cet effroyable mystère. D’ailleurs, on a entendu deux voix se disputer, et l’une d’elles était incontestablement la voix d’un Français. 14062 — C’est vrai ; et vous vous rappellerez une expression attribuée presque unanimement à cette voix, – l’expression Mon Dieu ! 14063 Ces mots, dans les circonstances présentes, ont été caractérisés par l’un des témoins (Montani, le confiseur) comme exprimant un reproche et une remontrance. 14064 C’est donc sur ces deux mots que j’ai fondé l’espérance de débrouiller complètement l’énigme. Un Français a eu connaissance du meurtre. 14065 Il est possible, – il est même plus que probable qu’il est innocent de toute participation à cette sanglante affaire. 14066 L’orang-outang a pu lui échapper. Il est possible qu’il ait suivi sa trace jusqu’à la chambre, mais que, dans les circonstances terribles qui ont suivi, il n’ait pu s’emparer de lui. 14067 L’animal est encore libre. Je ne poursuivrai pas ces conjectures, je n’ai pas le droit d’appeler ces idées d’un autre nom, puisque les ombres de réflexions qui leur servent de base sont d’une profondeur à peine suffisante pour être appréciées par ma propre raison, et que je ne prétendrais pas qu’elles fussent appréciables pour une autre intelligence. 14068 Nous les nommerons donc des conjectures, et nous ne les prendrons que pour telles. 14069 Si le Français en question est, comme je le suppose, innocent de cette atrocité, cette annonce que j’ai laissée hier au soir, pendant que nous retournions au logis, dans les bureaux du journal le Monde (feuille consacrée aux intérêts maritimes, et très-recherchée par les marins), l’amènera chez nous. 14070 Il me tendit un papier, et je lus : 14071 Avis. – On a trouvé dans le bois de Boulogne, le matin du… courant (c’était le matin de l’assassinat), de fort bonne heure, un énorme orang-outang fauve de l’espèce de Bornéo. 14072 Le propriétaire (qu’on sait être un marin appartenant à l’équipage d’un navire maltais) peut retrouver l’animal, après en avoir donné un signalement satisfaisant et remboursé quelques frais à la personne qui s’en est emparée et qui l’a gardé. 14074 — Comment avez-vous pu, demandai-je à Dupin, savoir que l’homme était un marin, et qu’il appartenait à un navire maltais ? 14075 — Je ne le sais pas, dit-il, je n’en suis pas sûr. 14076 Voici toutefois un petit morceau de ruban qui, si j’en juge par sa forme et son aspect graisseux, a évidemment servi à nouer les cheveux en une de ces longues queues qui rendent les marins si fiers et si farauds. 14077 En outre, ce nœud est un de ceux que peu de personnes savent faire, excepté les marins, et il est particulier aux Maltais. 14078 J’ai ramassé le ruban au bas de la chaîne du paratonnerre. Il est impossible qu’il ait appartenu à l’une des deux victimes. 14079 Après tout, si je me suis trompé en induisant de ce ruban que le Français est marin appartenant à un navire maltais, je n’aurai fait de mal à personne avec mon annonce. 14080 Si je suis dans l’erreur, il supposera simplement que j’ai été fourvoyé par quelque circonstance dont il ne prendra pas la peine de s’enquérir. 14081 Mais, si je suis dans le vrai, il y a un grand point de gagné. Le Français, qui a connaissance du meurtre, bien qu’il en soit innocent, hésitera naturellement à répondre à l’annonce, – à réclamer son orang-outang. 14082 Il raisonnera ainsi : « Je suis innocent ; je suis pauvre ; mon orang-outang est d’un grand prix ; – c’est presque une fortune dans une situation comme la mienne ; – pourquoi le perdrais-je par quelques niaises appréhensions de danger ? Le voilà, il est sous ma main. 14083 On l’a trouvé dans le bois de Boulogne, – à une grande distance du théâtre du meurtre. 14084 Soupçonnera-t-on jamais qu’une bête brute ait pu faire le coup ? La police est dépistée, – elle n’a pu retrouver le plus petit fil conducteur. 14085 Quand même on serait sur la piste de l’animal, il serait impossible de me prouver que j’aie eu connaissance de ce meurtre, ou de m’incriminer en raison de cette connaissance. 14086 Enfin, et avant tout, je suis connu. Le rédacteur de l’annonce me désigne comme le propriétaire de la bête. 14087 Mais je ne sais pas jusqu’à quel point s’étend sa certitude. 14088 Si j’évite de réclamer une propriété d’une aussi grosse valeur, qui est connue pour m’appartenir, je puis attirer sur l’animal un dangereux soupçon. 14089 Ce serait de ma part une mauvaise politique d’appeler l’attention sur moi ou sur la bête. 14090 Je répondrai décidément à l’avis du journal, je reprendrai mon orang-outang, et je l’enfermerai solidement jusqu’à ce que cette affaire soit oubliée. » 14091 En ce moment, nous entendîmes un pas qui montait l’escalier. 14092 — Apprêtez-vous, dit Dupin, prenez vos pistolets, mais ne vous en servez pas, – ne les montrez pas avant un signal de moi. 14093 On avait laissé ouverte la porte cochère, et le visiteur était entré sans sonner et avait gravi plusieurs marches de l’escalier. Mais on eût dit maintenant qu’il hésitait. 14094 Nous l’entendions redescendre. Dupin se dirigea vivement vers la porte, quand nous l’entendîmes qui remontait. 14095 Cette fois, il ne battit pas en retraite, mais s’avança délibérément et frappa à la porte de notre chambre. 14096 — Entrez, dit Dupin d’une voix gaie et cordiale. 14097 Un homme se présenta. C’était évidemment un marin, – un grand, robuste et musculeux individu, avec une expression d’audace de tous les diables qui n’était pas du tout déplaisante. 14098 Sa figure, fortement hâlée, était plus qu’à moitié cachée par les favoris et les moustaches. 14099 Il portait un gros bâton de chêne, mais ne semblait pas autrement armé. 14100 Il nous salua gauchement, et nous souhaita le bonsoir avec un accent français qui, bien que légèrement bâtardé de suisse, rappelait suffisamment une origine parisienne. 14101 — Asseyez-vous, mon ami, dit Dupin ; je suppose que vous venez pour votre orang-outang. 14102 Sur ma parole, je vous l’envie presque ; il est remarquablement beau et c’est sans doute une bête d’un grand prix. Quel âge lui donnez-vous bien ? 14103 Le matelot aspira longuement, de l’air d’un homme qui se trouve soulagé d’un poids intolérable, et répliqua d’une voix assurée : 14104 — Je ne saurais trop vous dire ; cependant, il ne peut guère avoir plus de quatre ou cinq ans. Est-ce que vous l’avez ici ? 14105 — Oh ! non ; nous n’avions pas de lieu commode pour l’enfermer. Il est dans une écurie de manège près d’ici, rue Dubourg. 14106 Vous pourrez l’avoir demain matin. Ainsi vous êtes en mesure de prouver votre droit de propriété ? 14107 — Oui, monsieur, certainement. 14108 — Je serais vraiment peiné de m’en séparer, – dit Dupin. 14109 — Je n’entends pas, dit l’homme, que vous ayez pris tant de peine pour rien ; je n’y ai pas compté. Je payerai volontiers une récompense à la personne qui a retrouvé l’animal, une récompense raisonnable s’entend. 14110 — Fort bien, répliqua mon ami, tout cela est fort juste, en vérité. Voyons, – que donneriez-vous bien ? Ah ! je vais vous le dire. 14111 Voici quelle sera ma récompense : vous me raconterez tout ce que vous savez relativement aux assassinats de la rue Morgue. 14112 Dupin prononça ces derniers mots d’une voix très-basse et fort tranquillement. 14113 Il se dirigea vers la porte avec la même placidité, la ferma, et mit la clef dans sa poche. Il tira alors un pistolet de son sein, et le posa sans le moindre émoi sur la table. 14114 La figure du marin devint pourpre, comme s’il en était aux agonies d’une suffocation. 14115 Il se dressa sur ses pieds et saisit son bâton ; mais, une seconde après, il se laissa retomber sur son siège, tremblant violemment et la mort sur le visage. 14116 Il ne pouvait articuler une parole. Je le plaignais du plus profond de mon cœur. 14117 — Mon ami, dit Dupin d’une voix pleine de bonté, vous vous alarmez sans motif, – je vous assure. Nous ne voulons vous faire aucun mal. 14118 Sur mon honneur de galant homme et de Français, nous n’avons aucun mauvais dessein contre vous. 14119 Je sais parfaitement que vous êtes innocent des horreurs de la rue Morgue. Cependant, cela ne veut pas dire que vous n’y soyez pas quelque peu impliqué. 14120 Le peu que je vous ai dit doit vous prouver que j’ai eu sur cette affaire des moyens d’information dont vous ne vous seriez jamais douté. 14121 Maintenant, la chose est claire pour nous. Vous n’avez rien fait que vous ayez pu éviter, – rien, à coup sûr, qui vous rende coupable. Vous auriez pu voler impunément ; vous n’avez même pas été coupable de vol. 14122 Vous n’avez rien à cacher ; vous n’avez aucune raison de cacher quoi que ce soit. D’un autre côté, vous êtes contraint par tous les principes de l’honneur à confesser tout ce que vous savez. 14123 Un homme innocent est actuellement en prison, accusé du crime dont vous pouvez indiquer l’auteur. 14124 Pendant que Dupin prononçait ces mots, le matelot avait recouvré, en grande partie, sa présence d’esprit ; mais toute sa première hardiesse avait disparu. 14125 — Que Dieu me soit en aide ! dit-il après une petite pause, – je vous dirai tout ce que je sais sur cette affaire ; mais je n’espère pas que vous en croyiez la moitié, – je serais vraiment un sot, si je l’espérais ! 14126 Cependant, je suis innocent, et je dirai tout ce que j’ai sur le cœur, quand même il m’en coûterait la vie. 14127 Voici en substance ce qu’il nous raconta : il avait fait dernièrement un voyage dans l’archipel indien. 14128 Une bande de matelots, dont il faisait partie, débarqua à Bornéo et pénétra dans l’intérieur pour y faire une excursion d’amateurs. 14129 Lui et un de ses camarades avaient pris l’orang-outang. Ce camarade mourut, et l’animal devint donc sa propriété exclusive, à lui. 14130 Après bien des embarras causés par l’indomptable férocité du captif pendant la traversée, il réussit à la longue à le loger sûrement dans sa propre demeure à Paris, et, pour ne pas attirer sur lui-même l’insupportable curiosité des voisins, il avait soigneusement enfermé l’animal, jusqu’à ce qu’il l’eût guéri d’une blessure au pied qu’il s’était faite à bord avec une esquille. 14131 Son projet, finalement, était de le vendre. 14132 Comme il revenait, une nuit, ou plutôt un matin, – le matin du meurtre, – d’une petite orgie de matelots, il trouva la bête installée dans sa chambre à coucher ; elle s’était échappée du cabinet voisin, où il la croyait solidement enfermée. 14133 Un rasoir à la main et toute barbouillée de savon, elle était assise devant un miroir, et essayait de se raser, comme sans doute elle l’avait vu faire à son maître en l’épiant par le trou de la serrure. 14134 Terrifié en voyant une arme si dangereuse dans les mains d’un animal aussi féroce, parfaitement capable de s’en servir, l’homme, pendant quelques instants, n’avait su quel parti prendre. 14135 D’habitude, il avait dompté l’animal, même dans ses accès les plus furieux, par des coups de fouet, et il voulut y recourir cette fois encore. 14136 Mais, en voyant le fouet, l’orang-outang bondit à travers la porte de la chambre, dégringola par les escaliers, et, profitant d’une fenêtre ouverte par malheur, il se jeta dans la rue. 14137 Le Français, désespéré, poursuivit le singe ; celui-ci, tenant toujours son rasoir d’une main, s’arrêtait de temps en temps, se retournait, et faisait des grimaces à l’homme qui le poursuivait, jusqu’à ce qu’il se vît près d’être atteint, puis il reprenait sa course. Cette chasse dura ainsi un bon bout de temps. 14138 Les rues étaient profondément tranquilles, et il pouvait être trois heures du matin. 14139 En traversant un passage derrière la rue Morgue, l’attention du fugitif fut attirée par une lumière qui partait de la fenêtre de madame l’Espanaye, au quatrième étage de sa maison. 14140 Il se précipita vers le mur, il aperçut la chaîne du paratonnerre, y grimpa avec une inconcevable agilité, saisit le volet, qui était complètement rabattu contre le mur, et, en s’appuyant dessus, il s’élança droit sur le chevet du lit. 14141 Toute cette gymnastique ne dura pas une minute. Le volet avait été repoussé contre le mur par le bond que l’orang-outang avait fait en se jetant dans la chambre. 14142 Cependant, le matelot était à la fois joyeux et inquiet. 14143 Il avait donc bonne espérance de ressaisir l’animal, qui pouvait difficilement s’échapper de la trappe où il s’était aventuré, et d’où on pouvait lui barrer la fuite. 14144 D’un autre côté il y avait lieu d’être fort inquiet de ce qu’il pouvait faire dans la maison. Cette dernière réflexion incita l’homme à se remettre à la poursuite de son fugitif. 14145 Il n’est pas difficile pour un marin de grimper à une chaîne de paratonnerre ; mais, quand il fut arrivé à la hauteur de la fenêtre, située assez loin sur sa gauche, il se trouva fort empêché ; tout ce qu’il put faire de mieux fut de se dresser de manière à jeter un coup d’œil dans l’intérieur de la chambre. 14146 Mais ce qu’il vit lui fit presque lâcher prise dans l’excès de sa terreur. 14147 C’était alors que s’élevaient les horribles cris qui, à travers le silence de la nuit, réveillèrent en sursaut les habitants de la rue Morgue. 14148 Madame l’Espanaye et sa fille, vêtus de leurs toilettes de nuit, étaient sans doute occupées à ranger quelques papiers dans le coffret de fer dont il a été fait mention, et qui avait été traîné au milieu de la chambre. 14149 Il était ouvert, et tout son contenu était éparpillé sur le parquet. 14150 Les victimes avaient sans doute le dos tourné à la fenêtre ; et, à en juger par le temps qui s’écoula entre l’invasion de la bête et les premiers cris, il est probable qu’elles ne l’aperçurent pas tout de suite. 14151 Le claquement du volet a pu être vraisemblablement attribué au vent. 14152 Quand le matelot regarda dans la chambre, le terrible animal avait empoigné madame l’Espanaye par ses cheveux qui étaient épars et qu’elle peignait, et il agitait le rasoir autour de sa figure, en imitant les gestes d’un barbier. 14153 La fille était par terre, immobile ; elle s’était évanouie. 14154 Les cris et les efforts de la vieille dame, pendant lesquels les cheveux lui furent arrachés de la tête, eurent pour effet de changer en fureur les dispositions probablement pacifiques de l’orang-outang. 14155 D’un coup rapide de son bras musculeux, il sépara presque la tête du corps. La vue du sang transforma sa fureur en frénésie. Il grinçait des dents, il lançait du feu par les yeux. 14156 Il se jeta sur le corps de la jeune personne, il lui ensevelit ses griffes dans la gorge, et les y laissa jusqu’à ce qu’elle fût morte. 14157 Ses yeux égarés et sauvages tombèrent en ce moment sur le chevet du lit, au-dessus duquel il put apercevoir la face de son maître, paralysée par l’horreur. 14158 La furie de la bête, qui sans aucun doute se souvenait du terrible fouet, se changea immédiatement en frayeur. 14159 Sachant bien qu’elle avait mérité un châtiment, elle semblait vouloir cacher les traces sanglantes de son action, et bondissait à travers la chambre dans un accès d’agitation nerveuse, bousculant et brisant les meubles à chacun de ses mouvements, et arrachant les matelas du lit. 14160 Finalement, elle s’empara du corps de la fille, et le poussa dans la cheminée, dans la posture où elle fut trouvée, puis de celui de la vieille dame qu’elle précipita la tête la première à travers la fenêtre. 14161 Comme le singe s’approchait de la fenêtre avec son fardeau tout mutilé, le matelot épouvanté se baissa, et, se laissant couler le long de la chaîne sans précautions, il s’enfuit tout d’un trait jusque chez lui, redoutant les conséquences de cette atroce boucherie, et, dans sa terreur, abandonnant volontiers tout souci de la destinée de son orang-outang. 14162 Les voix entendues par les gens de l’escalier étaient ses exclamations d’horreur et d’effroi mêlées aux glapissements diaboliques de la bête. 14163 Je n’ai presque rien à ajouter. L’orang-outang s’était sans doute échappé de la chambre par la chaîne du paratonnerre, juste avant que la porte fût enfoncée. 14164 En passant par la fenêtre, il l’avait évidemment refermée. Il fut rattrapé plus tard par le propriétaire lui-même, qui le vendit pour un bon prix au Jardin des plantes. 14165 Lebon fut immédiatement relâché, après que nous eûmes raconté toutes les circonstances de l’affaire, assaisonnées de quelques commentaires de Dupin, dans le cabinet même du préfet de police. 14166 Ce fonctionnaire, quelque bien disposé qu’il fût envers mon ami, ne pouvait pas absolument déguiser sa mauvaise humeur en voyant l’affaire prendre cette tournure, et se laissa aller à un ou deux sarcasmes sur la manie des personnes qui se mêlaient de ses fonctions. 14167 — Laissez-le parler, dit Dupin, qui n’avait pas jugé à propos de répliquer. Laissez-le jaser, cela allégera sa conscience. Je suis content de l’avoir battu sur son propre terrain. 14168 Néanmoins, qu’il n’ait pas pu débrouiller ce mystère, il n’y a nullement lieu de s’en étonner, et cela est moins singulier qu’il ne le croit ; car, en vérité, notre ami le préfet est un peu trop fin pour être profond. Sa science n’a pas de base. 14169 Elle est tout en tête et n’a pas de corps, comme les portraits de la déesse Laverna, – ou, si vous aimez mieux, tout en tête et en épaules, comme une morue. 14170 Mais, après tout, c’est un brave homme. Je l’adore particulièrement pour un merveilleux genre de cant auquel il doit sa réputation de génie. 14171 Je veux parler de sa manie de nier ce qui est, et d’expliquer ce qui n’est pas[2]. 14177 Aux dieux, suivant les lois, rends de justes hommages ; 14178 Respecte le serment, les héros et les sages ; 14179 Honore tes parents, tes rois, tes bienfaiteurs ; 14180 Choisi parmi tes amis les hommes les meilleurs. 14181 Sois obligeant et doux, sois facile en affaires. 14182 Ne hais pas ton ami pour des fautes légères ; 14183 Sers de tout ton pouvoir la cause du bon droit ; 14184 Qui fait tout ce qu’il peut fait toujours ce qu’il doit. 14185 Mais sache réprimer comme un maître sévère, 14186 L’appétit, le sommeil, Vénus et la colère. 14187 Ne forfais à l’honneur ni de près ni de loin, 14188 Et seul, sois pour toi-même un rigoureux témoin. 14189 Sois juste en action et non pas en paroles ; 14190 Ne donne pas au mal de prétextes frivoles. 14191 Le sort nous enrichit, il peut nous appauvrir ; 14192 Mais, faibles ou puissants, nous devons tous mourir. 14193 À ta part de douleurs ne sois point réfractaire ; 14194 Accepte le remède utile et salutaire, 14195 Et sache que toujours les hommes vertueux, 14196 Des mortels affligés sont les moins malheureux. 14197 Aux injustes propos que ton cœur se résigne ; 14198 Laisse parler le monde et suis toujours ta ligne. 14199 Mais surtout ne fais rien par l’exemple emporté, 14200 Qui soit sans rectitude et sans utilité. 14201 Fais marcher devant toi le conseil qui t’éclaire, 14202 Pour que l’absurdité ne vienne pas derrière. 14203 La sottise est toujours le plus grand des malheurs, 14204 Et l’homme sans conseil répond de ses erreurs. 14205 N’agis point sans savoir, sois zélé pour apprendre : 14206 Prête à l’étude un temps que le bonheur doit rendre. 14207 Ne sois pas négligent du soin de ta santé ; 14208 Mais prends le nécessaire avec sobriété. 14209 Tout ce qui ne peut nuire est permis dans la vie : 14210 Sois élégant et pur sans exciter l’envie. 14211 Fuis et la négligence et le faste insolent : 14212 Le luxe le plus simple est le plus excellent. 14213 N’agis point sans songer à ce que tu vas faire, 14214 Et réfléchis, le soir, sur ta journée entière. 14215 Qu’ai-je fait ? qu’ai-je ouï ? que dois-je regretter ? 14216 Vers la vertu divine ainsi tu peux monter. 14217 Je t’en prends à témoin, Tétractys, ineffable, 14218 Des formes et du temps fontaine inépuisable ; 14219 Et toi qui sais prier, quand les dieux sont pour toi, 14220 Achève leur ouvrage et travaille avec foi. 14221 Tu parviendras bientôt et sans peine à connaître 14222 D’où procède, où s’arrête, où retourne ton être ; 14223 Sans crainte et sans désirs tu sauras les secrets 14224 Que la nature voile aux mortels indiscrets. 14225 Tu fouleras aux pieds cette faiblesse humaine 14226 Qu’au hasard et sans but la fatalité mène. 14227 Tu sauras qui conduit l’avenir incertain, 14228 Et quel démon caché tient les fils du destin. 14229 Tu monteras alors sur le char de lumière, 14230 Esprit victorieux et roi de la matière. 14231 Tu comprendras de Dieu le règne paternel, 14232 Et tu pourras t’asseoir dans un calme éternel. 14236 LES VERS DORÉS ATTRIBUÉS À PYTHAGORE 14237 TRADUITS PAR M. P.-C. LÉVESQUE 14238 de l’Académie des Inscriptions et Belles-Lettres 14239 I. Révère les dieux immortels. C’est ton premier devoir. Honore-les comme il est ordonné par la loi. 14240 II. Respecte le serment. Vénère aussi les héros, dignes de tant d’admiration, et les demeures terrestres ; rends-leur le culte qui leur est dû. 14241 III. Respecte ton père et ta mère, et tes proches parents. 14242 IV. Choisis pour ton ami l’homme que tu connais le plus vertueux. Ne résiste point à la douceur de ses conseils, et suis ses utiles exemples. 14243 V. Crains de te brouiller avec ton ami pour une faute légère. 14244 VI. Si tu peux faire le bien, tu le dois : la puissance est ici voisine de la nécessité. Tels sont les préceptes que tu dois suivre. 14245 VII. Prends l’habitude de commander à la gourmandise, au sommeil, à la luxure, à la colère. 14246 VIII. Ne fais rien de honteux en présence des autres ni dans le secret. Que ta première loi soit de te respecter toi-même. 14247 IX. Que l’équité préside à toutes tes actions, qu’elle accompagne toutes tes paroles. 14248 X. Que la raison te conduise jusque dans les moindres choses. 14249 XI. Souviens-toi bien que tous les hommes sont destinés à la mort. 14250 XII. La fortune se plaît à changer : elle se laisse posséder, elle s’échappe. Éprouves-tu quelques-uns de ces revers que les destins font éprouver aux mortels ? sache les supporter avec patience ; ne t’indigne pas contre le sort. Il est permis de chercher à réparer un malheur ; mais sois bien persuadé que la fortune n’envoie pas aux mortels vertueux des maux au-dessus de leurs forces. 14251 XIII. Il se tient parmi les hommes de bons discours et de mauvais propos. Ne te laisse pas effrayer par de vaines paroles : qu’elles ne te détournent pas des projets honnêtes que tu as formés. 14252 XIV. Tu te vois attaqué par le mensonge ? prends patience, supporte ce mal avec douceur. 14253 XV. Observe bien ce qui reste à te prescrire ; que personne par ses actions, par ses discours, ne puisse t’engager à rien dire, à rien faire qui doive te nuire un jour. 14254 XVI. Consulte-toi bien avant d’agir ; crains, par trop de précipitation, d’avoir à rougir de ta folie. Dire et faire des sottises est le partage d’un sot. 14255 XVII. Ne commence rien dont tu puisses te repentir dans la suite. Garde-toi d’entreprendre ce que tu ne sais pas faire, et commence par t’instruire de ce que tu dois savoir. C’est ainsi que tu mèneras une vie délicieuse. 14256 XVIII. Ne néglige pas ta santé : donne à ton corps, mais avec modération, le boire, le manger, l’exercice. La mesure que je te prescris est celle que tu ne saurais passer sans te nuire. 14257 XIX. Que ta table soit saine, que le luxe en soit banni. 14258 XX. Évite de rien faire qui puisse t’attirer l’envie. 14259 XXI. Ne cherche point à briller par des dépenses déplacées, comme si tu ignorais ce qui est convenable et beau. Ne te pique pas non plus d’une épargne excessive. Rien n’est préférable à la juste mesure qu’il faut observer en toutes choses. 14260 XXII. N’entame point un projet qui doive tourner contre toi-même : réfléchis avant d’entreprendre. 14261 XXIII. N’abandonne pas tes yeux aux douceurs du sommeil avant d’avoir examiné par trois fois les actions de ta journée. Quelle faute ai-je commise ? Qu’ai-je fait ? À quel devoir ai-je manqué ? Commence par la première de tes actions, et parcours ainsi toutes les autres. Reproche-toi ce que tu as fait de mal ; jouis de ce que tu as fait de bien. 14262 XXIV. Médite sur les préceptes que je viens de te donner, travaille à les mettre en pratique, apprends à les aimer. Ils te conduiront sur les traces de la divine vertu ; j’en jure par celui qui a transmis dans nos âmes le sacré quaternaire[1] source de la nature éternelle. 14263 XXV. Avant de rien commencer, adresse tes vœux aux immortels qui seuls peuvent consommer ton ouvrage. C’est en suivant ces pratiques que tu parviendras à connaître par quelle concorde les dieux sont liés aux mortels, quels sont les passages de tous les êtres, et quelle puissance les domine. Tu connaîtras, comme il est juste, que la nature est, en tout, semblable à elle-même. Alors tu cesseras d’espérer ce que tu espérais en vain, et rien ne te sera caché. 14264 XXVI. Tu connaîtras que les hommes sont eux-mêmes les artisans de leurs malheurs. Infortunés ! ils ne savent pas voir les biens qui sont sous leurs yeux ; leurs oreilles se ferment à la vérité qui leur parle. Combien peu connaissent les vrais remèdes de leurs maux ! C’est donc ainsi que la destinée blesse l’entendement des humains ! Semblables à des cylindres fragiles, ils roulent çà et là, se heurtant sans cesse, et se brisant les uns contre les autres. 14265 XXVII. La triste discorde, née avec eux, les accompagne toujours et les blesse, sans se laisser apercevoir. Il ne faut pas lutter contre elle, mais la fuir en cédant. 14266 XXVIII. Ô Jupiter, père de tous les humains, tu pourrais les délivrer des maux qui les accablent, leur faire connaître qui est le génie funeste auquel ils s’abandonnent. 14267 XXIX. Mortel, prends une juste confiance ; c’est des dieux mêmes que les humains tirent leur origine. La sainte nature leur découvre tous ses secrets les plus cachés. Si elle daigne te les communiquer, il ne te sera pas difficile de remplir mes préceptes. Cherche des remèdes aux maux que tu endures : ton âme recouvrera bientôt la santé. 14268 XXX. Mais abstiens-toi des aliments que je t’ai défendus. Apprends à discerner ce qui est nécessaire dans la purification et la délivrance de l’âme. Examine tout ; donne à ta raison la première place et, content de te laisser conduire, abandonne-lui les rênes. 14269 XXXI. Ainsi, quand tu auras quitté les dépouilles mortelles, tu monteras dans l’air libre ; tu deviendras un dieu immortel et la mort n’aura plus d’empire sur toi. 14270 Fin des vers dorés de Pythagore 14271 Note : Chez les Pythagoriciens, la monade ou l’unité représente Dieu-même, parce qu’elle n’est engendrée par aucun nombre, qu’elle les engendre tous, qu’elle est simple et sans aucune composition. La dyade, ou le nombre deux, est l’image de la nature créée, parce qu’elle est le premier produit de l’unité, parce qu’elle est inspirée, parce qu’ayant des parties elle peut se décomposer et se défendre. La monade et la dyade réunies forment le ternaire, et représentent l’immensité de tout ce qui existe, l’être immuable et la matière altérable et changeante. J’ignore par quelle propriété le quaternaire, le nombre quatre, est encore un emblème de la divinité. 14278 Épître du Feu Philosophique 14279 Lettre concernant la pierre dite philosophale 14280 Jean Pontanus 14281 in Theatrum Chimicum, 1614, t. III 14282 « Nous affirmons, au contraire, — et l’on peut avoir foi en notre sincérité, — qu’il sera impossible d’obtenir le moindre succès dans l’Œuvre si l’on a pas une connaissance parfaite de ce qu’est le Vase des Philosophes ni de quelle manière il faut le fabriquer. Pontanus avoue qu’avant de connaître ce vaisseau secret il avait recommencé, sans succès, plus de deux cents fois le même travail, quoiqu’il besognât sur les matières propres et convenables, et selon la méthode régulière. L’artiste doit faire lui-même son vaisseau ; c’est une maxime de l’art. N’entreprenez rien, en conséquence, tant que vous n’aurez pas reçu toute la lumière sur cette coquille de l’œuf qualifiée secretum secretorum chez les maîtres du Moyen Âge. » 14283 — Fulcanelli, Le Mystère des Cathédrales, p. 204-205 14284 Moi, Jean Pontanus, qui suis allé en plusieurs régions et royaumes afin de connaître certainement ce que c’est que la Pierre des Philosophes, après avoir parcouru tous les côtés du monde, je n’ai trouvé que des faux Philosophes et des trompeurs. 14285 Néanmoins, étudiant toujours dans les livres des Sages, et mes doutes s’augmentant, j’ai trouvé la vérité ; mais nonobstant que j’eusse la connaissance de la matière, j’ai erré deux cents fois avant que de trouver l’opération et pratique de cette vraie matière. 14286 Premièrement, j’ai commencé mes opérations par les putréfactions du Corps de cette matière, pendant neuf mois, et je n’ai rien trouvé. 14287 Je l’ai mise au bain-marie pendant quelque temps, et j’ai semblablement erré. Je l’ai tenue et posée dans un feu de calcination pendant trois mois, et j’ai mal opéré. 14288 Tous les genres et manières de distillations et sublimations, comme disent ou semblent dire les Philosophes — tel Geber, Archélaüs et presque tous les autres — je les ai tentés et essayés, et n’ai pareillement rien trouvé. 14289 Enfin, j’ai tâché de parvenir et parfaire le sujet de tout l’Art d’Alchimie, de toutes les manières imaginables, qui se font par le fumier, le bain, les cendres, et par mille autres genres de feux, dont les Philosophes font mention dans leurs livres ; mais je n’ai rien découvert de bon. 14290 C’est pourquoi, je me mis pendant trois ans continuels à étudier les livres des Philosophes, entre autres le seul Hermès, les brèves paroles duquel comprennent tout le magistère de la Pierre ; quoiqu’il parle assez obscurément des choses supérieures et inférieures, du Ciel et de la Terre. 14291 Toute notre application et notre soin, donc, ne doit être qu’à la connaissance de la vraie pratique, dans le premier, le second, et le troisième œuvre. 14292 Ce n’est point le feu de bain, de fumier, ni de cendres, ni aucun de tous les autres feux que nous chantent les Philosophes, et nous décrivent dans leurs livres. 14293 Qu’est-ce donc que ce feu qui parfait et achève tout l’œuvre, depuis le commencement jusqu’à la fin ? 14294 Certainement tous les Philosophes l’ont caché ; mais, pour moi, touché d’un mouvement de pitié, je le veux déclarer avec l’entier accomplissement de tout l’œuvre. 14295 La Pierre des Philosophes est unique, et une, mais cachée et enveloppée en la multiplicité de différents noms, et avant que tu la puisses connaître, tu te donneras bien de la peine ; difficilement la trouveras-tu de ton propre génie. 14296 Elle est aqueuse, aérienne, ignée, terrestre, flegmatique, colérique, sanguineuse et mélancolique. Elle est un soufre et pareillement Argent vif. 14297 Elle a plusieurs superfluités, qui, je t’assure par Dieu vivant, se convertissent en vraie et unique Essence, moyennant notre feu. 14298 Et celui qui sépare quelque chose du sujet — croyant cela nécessaire, — ne connaît assurément rien à la Philosophie. 14299 Car le superflu, le sale, l’immonde, le vilain, le bourbeux, et, généralement toute la substance du sujet, se parfait en corps spirituel fixe, par le moyen de notre feu. Ce que les Sages n’ont jamais révélé, et, fait que peu de gens parviennent à cet Art ; s’imaginant que quelque chose de sale et de vilain doit être séparé. 14300 Maintenant il faut faire paraître, et tirer dehors les propriétés de notre feu ; s’il convient à notre matière selon la manière dont j’ai parlé, c’est-à-dire s’il est transmué avec la matière. 14301 Ce feu ne brûle point la matière, il ne sépare rien de la matière, ne divise ni n’écarte les parties pures des impures, ainsi que disent tous les Philosophes, mais convertit tout le sujet en pureté. 14302 Il ne sublime pas comme Geber fait les sublimations, et Arnaud pareillement, et tous les autres qui ont parlé des sublimations et distillations. Il se fait et parfait en peu de temps. 14303 Ce feu est minéral, égal et continuel, il ne s’évapore point, si ce n’est qu’il soit trop excité ; il participe du soufre, il est pris et provient d’ailleurs que de la matière. 14304 Il rompt, dissout, et congèle toutes choses, et semblablement congèle et calcine ; il est difficile à trouver par l’industrie et par l’Art. 14305 Ce feu est l’abrégé et le raccourci de tout l’œuvre, sans prendre autre chose, du moins peu, et ce même feu s’introduit et est de médiocre ignition ; parce qu’avec ce petit feu tout l’œuvre est parfait, et sont faites, ensemble, toutes les requises et dues sublimations. 14306 Ceux qui liront Geber et tous les autres Philosophes, quand ils vivraient cent millions d’années, ne le sauront comprendre ; car ce feu ne se peut découvrir que par la seule et profonde méditation de la pensée, ensuite on le comprendra dans les livres, et non autrement. 14307 L’erreur en cet Art, ne consiste qu’en l’acquisition de ce feu, qui convertit la matière en la Pierre des Philosophes. 14308 Étudie-toi donc à ce feu, parce que si moi-même je l’eus premièrement trouvé, je n’eus pas erré deux cents fois sur la propre matière. 14309 À cause de quoi je ne m’étonne plus si tant de gens ne peuvent parvenir à l’accomplissement de l’œuvre. 14310 Ils errent, ont erré et erreront toujours, en ce que les Philosophes n’ont mis leur propre agent qu’en une chose, qu’Artéphius a nommée, mais il n’a parlé que pour lui. 14311 Si ce n’est que j’ai lu Artéphius, que je l’ai entendu et compris, jamais je ne serais parvenu à l’accomplissement de l’œuvre. 14312 Voici quelle est cette pratique : il faut prendre la matière avec toute diligence, la broyer physiquement et la mettre dans le feu, c’est-à-dire dans le fourneau ; mais il faut aussi connaître le degré et la proportion du feu. 14313 À savoir, il faut que le feu externe excite tant seulement la matière ; et, en peu de temps, ce feu, sans y mettre les mains en aucune manière, accomplira assurément tout l’œuvre. 14314 Parce qu’il putréfie, corrompt, engendre et parfera tout l’ouvrage, faisant paraître les trois principales couleurs, la noire, la blanche, la rouge. 14315 Et moyennant notre feu, la médecine se multipliera si elle est conjointe à la matière crue, non seulement en quantité mais aussi en vertu. 14316 Recherche donc de toutes les forces de ton esprit ce feu, et tu parviendras au but que tu t’es proposé ; car c’est lui qui fait tout l’œuvre, et il est la clef de tous les Philosophes, laquelle ils n’ont jamais révélée dans leurs livres. 14317 Si tu penses bien profondément aux propriétés du feu ci-dessus, tu la connaîtras, mais non autrement. 14318 Donc, touché d’un mouvement de pitié, j’ai écrit ceci ; mais, et afin que je me satisfasse, le feu n’est point transmué avec la matière, comme je l’ai dit ci-dessus. 14319 J’ai bien voulu le dire et en avertir les prudents de ces choses, pour qu’ils ne dépensent pas inutilement leur argent, mais qu’ils sachent auparavant ce qu’ils doivent chercher, et, par ce moyen, parviendront à la vérité de l’Art ; non pas autrement. À Dieu. |
Added tests/fr/horla.res.txt version [036f6beeea].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 | Guy de Maupassant Le Horla (1887) °°°°° Le Horla, P. Ollendorff, 1895 [trente-cinquième édition] (pp. 3-68). °°°°° °°°°°°°°°° 8 mai. – Quelle journée admirable ! J’ai passé toute la matinée étendu sur ^^^^^^ * 64:70 # 3514s : Accord de genre erroné : « matinée » est féminin, « étendu » est masculin. > Suggestions : étendue l’herbe, devant ma maison, sous l’énorme platane qui la couvre, l’abrite et l’ombrage tout entière. J’aime ce pays, et j’aime y vivre parce que j’y ai mes racines, ces profondes et délicates racines, qui attachent un homme à la terre où sont nés et morts ses aïeux, qui l’attachent à ce qu’on pense et à ce qu’on mange, aux usages comme aux nourritures, aux locutions locales, aux intonations des paysans, aux odeurs du sol, des villages et de l’air lui-même. J’aime ma maison où j’ai grandi. De mes fenêtres, je vois la Seine qui coule, le long de mon jardin, derrière la route, presque chez moi, la grande et large Seine, qui va de Rouen au Havre, couverte de bateaux qui passent. À gauche, là-bas, Rouen, la vaste ville aux toits bleus, sous le peuple pointu des clochers gothiques. Ils sont innombrables, frêles ou larges, dominés par la flèche de fonte de la cathédrale, et pleins de cloches qui sonnent dans l’air bleu des belles matinées, jetant jusqu’à moi leur doux et lointain bourdonnement de fer, leur chant d’airain que la brise m’apporte, tantôt plus fort et tantôt plus affaibli, suivant qu’elle s’éveille ou s’assoupit. Comme il faisait bon ce matin ! Vers onze heures, un long convoi de navires, traînés par un remorqueur, gros comme une mouche, et qui râlait de peine en vomissant une fumée épaisse, défila devant ma grille. Après deux goëlettes anglaises, dont le pavillon rouge ondoyait sur le ciel, °°°°°°°°° venait un superbe trois-mats brésilien, tout blanc, admirablement propre et luisant. Je le saluai, je ne sais pourquoi, tant ce navire me fit plaisir à voir. 12 mai. – J’ai un peu de fièvre depuis quelques jours ; je me sens souffrant, ou plutôt je me sens triste. D’où viennent ces influences mystérieuses qui changent en découragement notre bonheur et notre confiance en détresse. On dirait que l’air, l’air invisible est plein d’inconnaissables Puissances, dont nous subissons les voisinages mystérieux. Je m’éveille plein de gaîté, avec des envies de chanter dans la gorge. – Pourquoi ? – Je descends le long de l’eau ; et soudain, après une courte promenade, je rentre désolé, comme si quelque malheur m’attendait chez moi. – Pourquoi ? – Est-ce un frisson de froid qui, frôlant ma peau, a ébranlé mes nerfs et assombri mon âme ? Est-ce la forme des nuages, ou la couleur du jour, la couleur des choses, si variable, qui, passant par mes yeux, a troublé ma pensée ? Sait-on ? Tout ce qui nous entoure, tout ce que nous voyons sans le regarder, tout ce que nous frôlons sans le connaître, tout ce que nous touchons sans le palper, tout ce que nous rencontrons sans le distinguer, a sur nous, sur nos organes et, par eux, sur nos idées, sur notre cœur lui-même, des effets rapides, surprenants et inexplicables ? Comme il est profond, ce mystère de l’Invisible ! Nous ne le pouvons sonder avec nos sens misérables, avec nos yeux qui ne savent apercevoir ni le trop petit, ni le trop grand, ni le trop près, ni le trop loin, ni les habitants d’une étoile, ni les habitants d’une goutte d’eau… avec nos oreilles qui nous trompent, car elles nous transmettent les vibrations de l’air en notes sonores. Elles sont des fées qui font ce miracle de changer en bruit ce mouvement et par cette métamorphose donnent naissance à la musique, qui rend chantante l’agitation muette de la nature… avec notre odorat, plus faible que celui du chien… avec notre goût, qui peut à peine discerner l’âge d’un vin ! Ah ! si nous avions d’autres organes qui accompliraient en notre faveur d’autres miracles, que de choses nous pourrions découvrir encore autour de nous ! 16 mai. – Je suis malade, décidément ! Je me portais si bien le mois dernier ! J’ai la fièvre, une fièvre atroce, ou plutôt un énervement fiévreux, qui rend mon âme aussi souffrante que mon corps. J’ai sans cesse cette sensation affreuse d’un danger menaçant, cette appréhension d’un malheur qui vient ou de la mort qui approche, ce pressentiment qui est sans doute l’atteinte d’un mal encore inconnu, germant dans le sang et dans la chair. 18 mai. – Je viens d’aller consulter mon médecin, car je ne pouvais plus dormir. Il m’a trouvé le pouls rapide, l’œil dilaté, les nerfs vibrants, mais sans aucun symptôme alarmant. Je dois me soumettre aux douches et boire du bromure de potassium. 25 mai. – Aucun changement ! Mon état, vraiment, est bizarre. À mesure qu’approche le soir, une inquiétude incompréhensible m’envahit, comme si la nuit cachait pour moi une menace terrible. Je dîne vite, puis j’essaie de lire ; mais je ne comprends pas les mots ; je distingue à peine les lettres. Je marche alors dans mon salon de long en large, sous l’oppression d’une crainte confuse et irrésistible, la crainte du sommeil et la crainte du lit. Vers dix heures, je monte dans ma chambre. À peine entré, je donne deux tours de clef, et je pousse les verrous ; j’ai peur… de quoi ?… Je ne redoutais rien jusqu’ici… j’ouvre mes armoires, je regarde sous mon lit ; j’écoute… j’écoute… quoi ?… Est-ce étrange qu’un simple malaise, un trouble de la circulation peut-être, l’irritation d’un filet nerveux, un peu de congestion, une toute petite perturbation dans le fonctionnement si imparfait et si délicat de notre machine vivante, puisse faire un mélancolique du plus joyeux des hommes, et un poltron du plus brave ? Puis, je me couche, et j’attends le sommeil comme on attendrait le bourreau. Je l’attends avec l’épouvante de sa venue ; et mon cœur bat, et mes jambes frémissent ; et tout mon corps tressaille dans la chaleur des draps, jusqu’au moment où je tombe tout à coup dans le repos, comme on tomberait pour s’y noyer, dans un gouffre d’eau stagnante. Je ne le sens pas venir, comme autrefois, ce sommeil perfide, caché près de moi, qui me guette, qui va me saisir par la tête, me fermer les yeux, m’anéantir. Je dors – longtemps – deux ou trois heures – puis un rêve – non – un cauchemar m’étreint. Je sens bien que je suis couché et que je dors,… je le sens et je le ^^ * 136:138 # 377p : Typographie : pas de virgule avant les points de suspension. > Suggestions : … sais… et je sens aussi que quelqu’un s’approche de moi, me regarde, me palpe, monte sur mon lit, s’agenouille sur ma poitrine, me prend le cou entre ses mains et serre… serre… de toute sa force pour m’étrangler. Moi, je me débats, lié par cette impuissance atroce, qui nous paralyse dans les songes ; je veux crier, – je ne peux pas ; – je veux remuer, – je ne peux pas ; – j’essaye, avec des efforts affreux, en haletant, de me tourner, de rejeter cet être qui m’écrase et qui m’étouffe, – je ne peux pas ! Et soudain, je m’éveille, affolé, couvert de sueur. J’allume une bougie. Je suis seul. Après cette crise, qui se renouvelle toutes les nuits, je dors enfin, avec calme, jusqu’à l’aurore. 2 juin. – Mon état s’est encore aggravé. Qu’ai-je donc ? Le bromure n’y fait rien ; les douches n’y font rien. Tantôt, pour fatiguer mon corps, si las pourtant, j’allai faire un tour dans la forêt de Roumare. Je crus d’abord que °°°°°°° l’air frais, léger et doux, plein d’odeur d’herbes et de feuilles, me versait aux veines un sang nouveau, au cœur une énergie nouvelle. Je pris une grande avenue de chasse, puis je tournai vers La Bouille, par une allée étroite, entre deux armées d’arbres démesurément hauts qui mettaient un toit vert, épais, presque noir, entre le ciel et moi. Un frisson me saisit soudain, non pas un frisson de froid, mais un étrange frisson d’angoisse. Je hâtai le pas, inquiet d’être seul dans ce bois, apeuré sans raison, stupidement, par la profonde solitude. Tout à coup, il me sembla que j’étais suivi, qu’on marchait sur mes talons, tout près, à me toucher. Je me retournai brusquement. J’étais seul. Je ne vis derrière moi que la droite et large allée, vide, haute, redoutablement vide ; et de l’autre côté elle s’étendait aussi à perte de vue, toute pareille, effrayante. Je fermai les yeux. Pourquoi ? Et je me mis à tourner sur un talon, très vite, comme une toupie. Je faillis tomber ; je rouvris les yeux ; les arbres dansaient ; la terre flottait ; je dus m’asseoir. Puis, ah ! je ne savais plus par où j’étais venu ! Bizarre idée ! Bizarre ! Bizarre idée ! Je ne savais plus du tout. Je partis par le côté qui se trouvait à ma droite, et je revins dans l’avenue qui m’avait amené au milieu de la forêt. 3 juin. – La nuit a été horrible. Je vais m’absenter pendant quelques semaines. Un petit voyage, sans doute, me remettra. 2 juillet. – Je rentre. Je suis guéri. J’ai fait d’ailleurs une excursion charmante. J’ai visité le mont Saint-Michel que je ne connaissais pas. Quelle vision, quand on arrive, comme moi, à Avranches, vers la fin du jour ! °°°°°°°°° La ville est sur une colline ; et on me conduisit dans le jardin public, au bout de la cité. Je poussai un cri d’étonnement. Une baie démesurée s’étendait devant moi, à perte de vue, entre deux côtes écartées se perdant au loin dans les brumes ; et au milieu de cette immense baie jaune, sous un ciel d’or et de clarté, s’élevait sombre et pointu un mont étrange, au milieu des sables. Le soleil venait de disparaître, et sur l’horizon encore flamboyant se dessinait le profil de ce fantastique rocher qui porte sur son sommet un fantastique monument. Dès l’aurore, j’allai vers lui. La mer était basse, comme la veille au soir, et je regardais se dresser devant moi, à mesure que j’approchais d’elle, la surprenante abbaye. Après plusieurs heures de marche, j’atteignis l’énorme bloc de pierres qui porte la petite cité dominée par la grande église. Ayant gravi la rue étroite et rapide, j’entrai dans la plus admirable demeure gothique construite pour Dieu sur la terre, vaste comme une ville, pleine de salles basses écrasées sous des voûtes et de hautes galeries que soutiennent de frêles colonnes. J’entrai dans ce gigantesque bijou de granit, aussi léger qu’une dentelle, couvert de tours, de sveltes clochetons, où montent des escaliers tordus, et qui lancent dans le ciel bleu des jours, dans le ciel noir des nuits, leurs têtes bizarres hérissées de chimères, de diables, de bêtes fantastiques, de fleurs monstrueuses, et reliés l’un à l’autre par de fines arches ouvragées. Quand je fus sur le sommet, je dis au moine qui m’accompagnait : « Mon père, comme vous devez être bien ici ! » Il répondit : « Il y a beaucoup de vent, Monsieur » ; et nous nous mîmes à causer en regardant monter la mer, qui courait sur le sable et le couvrait d’une cuirasse d’acier. Et le moine me conta des histoires, toutes les vieilles histoires de ce lieu, des légendes, toujours des légendes. Une d’elles me frappa beaucoup. Les gens du pays, ceux du mont, prétendent qu’on entend parler la nuit dans les sables, puis qu’on entend bêler deux chèvres, l’une avec une voix forte, l’autre avec une voix faible. Les incrédules affirment que ce sont les cris des oiseaux de mer, qui ressemblent tantôt à des bêlements, et tantôt à des plaintes humaines ; mais les pêcheurs attardés jurent avoir rencontré rôdant sur les dunes, entre deux marées, autour de la petite ville jetée ainsi loin du monde, un vieux berger, dont on ne voit jamais la tête couverte de son manteau, et qui conduit, en marchant devant eux, un bouc à figure d’homme et une chèvre à figure de femme, tous deux avec de longs cheveux blancs et parlant sans cesse, se querellant dans une langue inconnue, puis cessant soudain de crier pour bêler de toute leur force. Je dis au moine : « Y croyez-vous ? » Il murmura : « Je ne sais pas. » Je repris : « S’il existait sur la terre d’autres êtres que nous, comment ne les connaîtrions-nous point depuis longtemps : comment ne les auriez-vous pas vus, vous ? comment ne les aurais-je pas vus, moi ? » Il répondit : « Est-ce que nous voyons la cent-millième partie de ce qui existe ? Tenez, voici le vent, qui est la plus grande force de la nature, qui renverse les hommes, abat les édifices, déracine les arbres, soulève la mer en montagnes d’eau, détruit les falaises, et jette aux brisants les grands navires, le vent qui tue, qui siffle, qui gémit, qui mugit, – l’avez-vous vu, et pouvez-vous le voir ? Il existe, pourtant. » Je me tus devant ce simple raisonnement. Cet homme était un sage ou peut-être un sot. Je ne l’aurais pu affirmer au juste ; mais je me tus. Ce qu’il disait là, je l’avais pensé souvent. 3 juillet. – J’ai mal dormi ; certes, il y a ici une influence fiévreuse, car mon cocher souffre du même mal que moi. En rentrant hier, j’avais remarqué sa pâleur singulière. Je lui demandai : — Qu’est-ce que vous avez, Jean ? — J’ai que je ne peux plus me reposer, Monsieur, ce sont mes nuits qui mangent mes jours. Depuis le départ de Monsieur, cela me tient comme un sort. Les autres domestiques vont bien cependant, mais j’ai grand peur d’être repris, moi. 4 juillet. – Décidément, je suis repris. Mes cauchemars anciens reviennent. Cette nuit, j’ai senti quelqu’un accroupi sur moi, et qui, sa bouche sur la mienne, buvait ma vie entre mes lèvres. Oui, il la puisait dans ma gorge, comme aurait fait une sangsue. Puis il s’est levé, repu, et moi je me suis réveillé, tellement meurtri, brisé, anéanti, que je ne pouvais plus remuer. Si cela continue encore quelques jours, je repartirai certainement. 5 juillet. – Ai-je perdu la raison ? Ce qui s’est passé, ce que j’ai vu la nuit dernière est tellement étrange, que ma tête s’égare quand j’y songe ! Comme je le fais maintenant chaque soir j’avais fermé ma porte à clef ; puis, ayant soif, je bus un demi-verre d’eau, et je remarquai par hasard que ma carafe était pleine jusqu’au bouchon de cristal. Je me couchai ensuite et je tombai dans un de mes sommeils épouvantables, dont je fus tiré au bout de deux heures environ par une secousse plus affreuse encore. Figurez-vous un homme qui dort, qu’on assassine, et qui se réveille avec un couteau dans le poumon, et qui râle, couvert de sang, et qui ne peut plus respirer, et qui va mourir, et qui ne comprend pas – voilà. Ayant enfin reconquis ma raison, j’eus soif de nouveau ; j’allumai une bougie et j’allai vers la table où était posée ma carafe. Je la soulevai en la penchant sur mon verre ; rien ne coula. – Elle était vide ! Elle était vide complètement ! D’abord, je n’y compris rien ; puis, tout à coup, je ressentis une émotion si terrible, que je dus m’asseoir, ou plutôt, que je tombai sur une chaise ! puis, je me redressai d’un saut pour regarder autour de moi ! puis je me rassis, éperdu d’étonnement et de peur, devant le cristal transparent ! Je le contemplais avec des yeux fixes, cherchant à deviner. Mes mains tremblaient ! On avait donc bu cette eau ? Qui ? Moi ? moi, sans doute ? Ce ne pouvait être que moi ? Alors, j’étais somnambule, je vivais, sans le savoir, de cette double vie mystérieuse qui fait douter s’il y a deux êtres en nous, ou si un être étranger, inconnaissable et invisible, anime, par moments, quand notre âme est engourdie, notre corps captif qui obéit à cet autre, comme à nous-mêmes, plus qu’à nous-mêmes. Ah ! qui comprendra mon angoisse abominable ? Qui comprendra l’émotion d’un homme, sain d’esprit, bien éveillé, plein de raison et qui regarde épouvanté, à travers le verre d’une carafe, un peu d’eau disparue pendant qu’il a dormi ! Et je restai là jusqu’au jour, sans oser regagner mon lit. 6 juillet. – Je deviens fou. On a encore bu toute ma carafe cette nuit ; – ou plutôt, je l’ai bue ! Mais, est-ce moi ? Est-ce moi ? Qui serait-ce ? Qui ? Oh ! mon Dieu ! Je deviens fou ? Qui me sauvera ? 10 juillet. – Je viens de faire des épreuves surprenantes. Décidément, je suis fou ! Et pourtant ! Le 6 juillet, avant de me coucher, j’ai placé sur ma table du vin, du lait, de l’eau, du pain et des fraises. On a bu – j’ai bu – toute l’eau, et un peu de lait. On n’a touché ni au vin, ni au pain, ni aux fraises. Le 7 juillet, j’ai renouvelé la même épreuve, qui a donné le même résultat. Le 8 juillet, j’ai supprimé l’eau et le lait. On n’a touché à rien. Le 9 juillet enfin, j’ai remis sur ma table l’eau et le lait seulement, en ayant soin d’envelopper les carafes en des linges de mousseline blanche et de ficeler les bouchons. Puis, j’ai frotté mes lèvres, ma barbe, mes mains avec de la mine de plomb, et je me suis couché. L’invincible sommeil m’a saisi, suivi bientôt de l’atroce réveil. Je n’avais point remué ; mes draps eux-mêmes ne portaient pas de taches. Je m’élançai vers ma table. Les linges enfermant les bouteilles étaient demeurés immaculés. Je déliai les cordons, en palpitant de crainte. On avait bu toute l’eau ! on avait bu tout le lait ! Ah ! mon Dieu !… Je vais partir tout à l’heure pour Paris. 12 juillet. – Paris. J’avais donc perdu la tête les jours derniers ! J’ai dû être le jouet de mon imagination énervée, à moins que je ne sois vraiment somnambule, ou que j’aie subi une de ces influences constatées, mais inexplicables jusqu’ici, qu’on appelle suggestions. En tout cas, mon affolement touchait à la démence, et vingt-quatre heures de Paris ont suffi pour me remettre d’aplomb. Hier, après des courses et des visites, qui m’ont fait passer dans l’âme de l’air nouveau et vivifiant, j’ai fini ma soirée au Théâtre-Français. On y jouait une pièce d’Alexandre Dumas fils ; et cet esprit alerte et puissant a achevé de me guérir. Certes, la solitude est dangereuse pour les intelligences qui travaillent. Il nous faut, autour de nous, des hommes qui pensent et qui parlent. Quand nous sommes seuls longtemps, nous peuplons le vide de fantômes. Je suis rentré à l’hôtel très gai, par les boulevards. Au coudoiement de la foule, je songeais, non sans ironie, à mes terreurs, à mes suppositions de l’autre semaine, car j’ai cru, oui, j’ai cru qu’un être invisible habitait sous mon toit. Comme notre tête est faible et s’effare, et s’égare vite, dès qu’un petit fait incompréhensible nous frappe ! Au lieu de conclure par ces simples mots : « Je ne comprends pas parce que la cause m’échappe », nous imaginons aussitôt des mystères effrayants et des puissances surnaturelles. 14 juillet. – Fête de la République. Je me suis promené par les rues. Les pétards et les drapeaux m’amusaient comme un enfant. C’est pourtant fort bête d’être joyeux, à date fixe, par décret du gouvernement. Le peuple est un troupeau imbécile, tantôt stupidement patient et tantôt férocement révolté. On lui dit : « Amuse-toi. » Il s’amuse. On lui dit : « Va te battre avec le voisin. » Il va se battre. On lui dit : « Vote pour l’Empereur. » Il vote pour l’Empereur. Puis, on lui dit : « Vote pour la République. » Et il vote pour la République. Ceux qui le dirigent sont aussi sots ; mais au lieu d’obéir à des hommes, ils obéissent à des principes, lesquels ne peuvent être que niais, stériles et faux, par cela même qu’ils sont des principes, c’est-à-dire des idées réputées certaines et immuables, en ce monde où l’on n’est sûr de rien, puisque la lumière est une illusion, puisque le bruit est une illusion. 16 juillet. – J’ai vu hier des choses qui m’ont beaucoup troublé. Je dînais chez ma cousine, Mme Sablé, dont le mari commande le 76e chasseurs à Limoges. Je me trouvais chez elle avec deux jeunes femmes, dont l’une a épousé un médecin, le docteur Parent, qui s’occupe beaucoup des maladies nerveuses et des manifestations extraordinaires auxquelles donnent lieu en ce moment les expériences sur l’hypnotisme et la suggestion. Il nous raconta longtemps les résultats prodigieux obtenus par des savants anglais et par les médecins de l’école de Nancy. Les faits qu’il avança me parurent tellement bizarres, que je me déclarai tout à fait incrédule. « Nous sommes, affirmait-il, sur le point de découvrir un des plus importants secrets de la nature, je veux dire, un de ses plus importants secrets sur cette terre ; car elle en a certes d’autrement importants, là-bas, dans les étoiles. Depuis que l’homme pense, depuis qu’il sait dire et écrire sa pensée, il se sent frôlé par un mystère impénétrable pour ses sens grossiers et imparfaits, et il tâche de suppléer, par l’effort de son intelligence, à l’impuissance de ses organes. Quand cette intelligence demeurait encore à l’état rudimentaire, cette hantise des phénomènes invisibles a pris des formes banalement effrayantes. De là sont nées les croyances populaires au surnaturel, les légendes des esprits rôdeurs, des fées, des gnomes, des revenants, je dirai même la légende de Dieu, car nos conceptions de l’ouvrier-créateur, de quelque religion qu’elles nous viennent, sont bien les inventions les plus médiocres, les plus stupides, les plus inacceptables sorties du cerveau apeuré des créatures. Rien de plus vrai que cette parole de Voltaire : « Dieu a fait l’homme à son image, mais l’homme le lui a bien rendu. » « Mais, depuis un peu plus d’un siècle, on semble pressentir quelque chose de nouveau. Mesmer et quelques autres nous ont mis sur une voie inattendue, et °°°°°° nous sommes arrivés vraiment, depuis quatre ou cinq ans surtout, à des résultats surprenants. » Ma cousine, très incrédule aussi, souriait. Le docteur Parent lui dit : – Voulez-vous que j’essaie de vous endormir, Madame ? — Oui, je veux bien. Elle s’assit dans un fauteuil et il commença à la regarder fixement en la fascinant. Moi, je me sentis soudain un peu troublé, le cœur battant, la gorge serrée. Je voyais les yeux de Mme Sablé s’alourdir, sa bouche se crisper, sa poitrine haleter. Au bout de dix minutes, elle dormait. — Mettez-vous derrière elle, dit le médecin. Et je m’assis derrière elle. Il lui plaça entre les mains une carte de visite en lui disant : « Ceci est un miroir ; que voyez-vous dedans ? » Elle répondit : — Je vois mon cousin. — Que fait-il ? — Il se tord la moustache. — Et maintenant ? — Il tire de sa poche une photographie. — Quelle est cette photographie ? — La sienne. C’était vrai ! Et cette photographie venait de m’être livrée, le soir même, à l’hôtel. — Comment est-il sur ce portrait ? — Il se tient debout avec son chapeau à la main. Donc elle voyait dans cette carte, dans ce carton blanc, comme elle eût vu dans une glace. Les jeunes femmes, épouvantées, disaient : « Assez ! Assez ! Assez ! » Mais le docteur ordonna : « Vous vous lèverez demain à huit heures ; puis vous irez trouver à son hôtel votre cousin, et vous le supplierez de vous prêter cinq mille francs que votre mari vous demande et qu’il vous réclamera à son prochain voyage. » Puis il la réveilla. En rentrant à l’hôtel, je songeais à cette curieuse séance et des doutes m’assaillirent, non point sur l’absolue, sur l’insoupçonnable bonne foi de ma cousine, que je connaissais comme une sœur, depuis l’enfance, mais sur une supercherie possible du docteur. Ne dissimulait-il pas dans sa main une glace qu’il montrait à la jeune femme endormie, en même temps que sa carte de visite ? Les prestidigitateurs de profession font des choses autrement singulières. Je rentrai donc et je me couchai. Or, ce matin, vers huit heures et demie, je fus réveillé par mon valet de chambre, qui me dit : — C’est Mme Sablé qui demande à parler à Monsieur tout de suite. Je m’habillai à la hâte et je la reçus. Elle s’assit fort troublée, les yeux baissés, et, sans lever son voile, elle me dit : — Mon cher cousin, j’ai un gros service à vous demander. — Lequel, ma cousine ? — Cela me gêne beaucoup de vous le dire, et pourtant, il le faut. J’ai besoin, absolument besoin, de cinq mille francs. — Allons donc, vous ? — Oui, moi, ou plutôt mon mari, qui me charge de les trouver. J’étais tellement stupéfait, que je balbutiais mes réponses. Je me demandais si vraiment elle ne s’était pas moquée de moi avec le docteur Parent, si ce n’était pas là une simple farce préparée d’avance et fort bien jouée. ^^^^^^^^^^^^^^^^^ * 185:202 # 1518s : Pléonasme. > Suggestions : préparée Mais, en la regardant avec attention, tous mes doutes se dissipèrent. Elle tremblait d’angoisse, tant cette démarche lui était douloureuse, et je compris qu’elle avait la gorge pleine de sanglots. Je la savais fort riche et je repris : — Comment ! votre mari n’a pas cinq mille francs à sa disposition ! Voyons, réfléchissez. Êtes-vous sûre qu’il vous a chargée de me les demander ? Elle hésita quelques secondes comme si elle eût fait un grand effort pour chercher dans son souvenir, puis elle répondit : — Oui…, oui… j’en suis sûre. — Il vous a écrit ? Elle hésita encore, réfléchissant. Je devinai le travail torturant de sa pensée. Elle ne savait pas. Elle savait seulement qu’elle devait m’emprunter cinq mille francs pour son mari. Donc elle osa mentir. — Oui, il m’a écrit. — Quand donc ? Vous ne m’avez parlé de rien, hier. — J’ai reçu sa lettre ce matin. — Pouvez-vous me la montrer ? — Non… non… non… elle contenait des choses intimes… trop personnelles… je l’ai… je l’ai brûlée. — Alors, c’est que votre mari fait des dettes. Elle hésita encore, puis murmura : — Je ne sais pas. Je déclarai brusquement : — C’est que je ne puis disposer de cinq mille francs en ce moment, ma chère cousine. Elle poussa une sorte de cri de souffrance. — Oh ! oh ! je vous en prie, je vous en prie, trouvez-les… Elle s’exaltait, joignait les mains comme si elle m’eût prié ! J’entendais sa voix changer de ton ; elle pleurait et bégayait, harcelée, dominée par l’ordre irrésistible qu’elle avait reçu. — Oh ! oh ! je vous en supplie… si vous saviez comme je souffre… il me les faut aujourd’hui. J’eus pitié d’elle. — Vous les aurez tantôt, je vous le jure. Elle s’écria : — Oh ! merci ! merci ! Que vous êtes bon. Je repris : – Vous rappelez-vous ce qui s’est passé hier soir chez vous ? — Oui. — Vous rappelez-vous que le docteur Parent vous a endormie ? — Oui. — Eh ! bien, il vous a ordonné de venir m’emprunter ce matin cinq mille francs, et vous obéissez en ce moment à cette suggestion. Elle réfléchit quelques secondes et répondit : — Puisque c’est mon mari qui les demande. Pendant une heure, j’essayai de la convaincre, mais je n’y pus parvenir. Quand elle fut partie, je courus chez le docteur. Il allait sortir ; et il m’écouta en souriant. Puis il dit : — Croyez-vous maintenant ? — Oui, il le faut bien. — Allons chez votre parente. Elle sommeillait déjà sur une chaise longue, accablée de fatigue. Le médecin lui prit le pouls, la regarda quelque temps, une main levée vers ses yeux qu’elle ferma peu à peu sous l’effort insoutenable de cette puissance magnétique. Quand elle fut endormie : — Votre mari n’a plus besoin de cinq mille francs ! Vous allez donc oublier que vous avez prié votre cousin de vous les prêter, et, s’il vous parle de cela, vous ne comprendrez pas. Puis il la réveilla. Je tirai de ma poche un portefeuille : — Voici, ma chère cousine, ce que vous m’avez demandé ce matin. Elle fut tellement surprise que je n’osai pas insister. J’essayai cependant de ranimer sa mémoire, mais elle nia avec force, crut que je me moquais d’elle, et faillit, à la fin, se fâcher. · · · · · · · · · · · · · · · · · · · · · · · · Voilà ! je viens de rentrer ; et je n’ai pu déjeuner, tant cette expérience m’a bouleversé. 19 juillet. – Beaucoup de personnes à qui j’ai raconté cette aventure se sont moquées de moi. Je ne sais plus que penser. Le sage dit : Peut-être ? 21 juillet. – J’ai été dîner à Bougival, puis j’ai passé la soirée au bal des °°°°°°°° canotiers. Décidément, tout dépend des lieux et des milieux. Croire au surnaturel dans l’île de la Grenouillère, serait le comble de la folie… mais au sommet du mont Saint-Michel ?… mais dans les Indes ? Nous subissons effroyablement l’influence de ce qui nous entoure. Je rentrerai chez moi la semaine prochaine. 30 juillet. – Je suis revenu dans ma maison depuis hier. Tout va bien. 2 août. – Rien de nouveau ; il fait un temps superbe. Je passe mes journées à regarder couler la Seine. 4 août. – Querelles parmi mes domestiques. Ils prétendent qu’on casse les verres, la nuit, dans les armoires. Le valet de chambre accuse la cuisinière, qui accuse la lingère, qui accuse les deux autres. Quel est le coupable ? Bien fin qui le dirait ! 6 août. – Cette fois, je ne suis pas fou. J’ai vu… j’ai vu… j’ai vu !… Je ne puis plus douter… j’ai vu !… J’ai encore froid jusque dans les ongles… j’ai encore peur jusque dans les moelles… j’ai vu !… Je me promenais à deux heures, en plein soleil, dans mon parterre de rosiers… dans l’allée des rosiers d’automne qui commencent à fleurir. Comme je m’arrêtais à regarder un géant des batailles, qui portait trois fleurs magnifiques, je vis, je vis distinctement, tout près de moi, la tige d’une de ces roses se plier, comme si une main invisible l’eût tordue, puis se casser comme si cette main l’eût cueillie ! Puis la fleur s’éleva, suivant la courbe qu’aurait décrite un bras en la portant vers une bouche, et elle resta suspendue dans l’air transparent, toute seule, immobile, effrayante tache rouge à trois pas de mes yeux. Éperdu, je me jetai sur elle pour la saisir ! Je ne trouvai rien ; elle avait disparu. Alors je fus pris d’une colère furieuse contre moi-même ; car il n’est pas permis à un homme raisonnable et sérieux d’avoir de pareilles hallucinations. Mais était-ce bien une hallucination ? Je me retournai pour chercher la tige, et je la retrouvai immédiatement sur l’arbuste, fraîchement brisée, entre les deux autres roses demeurées à la branche. Alors, je rentrai chez moi l’âme bouleversée ; car je suis certain, maintenant, certain comme de l’alternance des jours et des nuits, qu’il existe près de moi un être invisible, qui se nourrit de lait et d’eau, qui peut toucher aux choses, les prendre et les changer de place, doué par conséquent d’une nature matérielle, bien qu’imperceptible pour nos sens, et qui habite comme moi, sous mon toit… 7 août. – J’ai dormi tranquille. Il a bu l’eau de ma carafe, mais n’a point troublé mon sommeil. Je me demande si je suis fou. En me promenant, tantôt au grand soleil, le long de la rivière, des doutes me sont venus sur ma raison, non point des doutes vagues comme j’en avais jusqu’ici, mais des doutes précis, absolus. J’ai vu des fous ; j’en ai connu qui restaient intelligents, lucides, clairvoyants même sur toutes les choses de la vie, sauf sur un point. Ils parlaient de tout avec clarté, avec souplesse, avec profondeur, et soudain leur pensée touchant l’écueil de leur folie, s’y déchirait en pièces, s’éparpillait et sombrait dans cet océan effrayant et furieux, plein de vagues bondissantes, de brouillards, de bourrasques, qu’on nomme « la démence ». Certes, je me croirais fou, absolument fou, si je n’étais conscient, si je ne connaissais parfaitement mon état, si je ne le sondais en l’analysant avec une complète lucidité. Je ne serais donc, en somme, qu’un halluciné raisonnant. Un trouble inconnu se serait produit dans mon cerveau, un de ces troubles qu’essayent de noter et de préciser aujourd’hui les physiologistes ; et ce trouble aurait déterminé dans mon esprit, dans l’ordre et la logique de mes idées, une crevasse profonde. Des phénomènes semblables ont lieu dans le rêve qui nous promène à travers les fantasmagories les plus invraisemblables, sans que nous en soyons surpris, parce que l’appareil vérificateur, parce que le sens du contrôle est endormi ; tandis que la faculté imaginative veille et travaille. Ne se peut-il pas qu’une des imperceptibles touches du clavier cérébral se trouve paralysée chez moi ? Des hommes, à la suite d’accidents, perdent la mémoire des noms propres ou des verbes ou des chiffres, ou seulement des dates. Les localisations de toutes les parcelles de la pensée sont aujourd’hui prouvées. Or, quoi d’étonnant à ce que ma faculté de contrôler l’irréalité de certaines hallucinations, se trouve engourdie chez moi en ce moment ! Je songeais à tout cela en suivant le bord de l’eau. Le soleil couvrait de clarté la rivière, faisait la terre délicieuse, emplissait mon regard d’amour pour la vie, pour les hirondelles, dont l’agilité est une joie de mes yeux, pour les herbes de la rive dont le frémissement est un bonheur de mes oreilles. Peu à peu, cependant un malaise inexplicable me pénétrait. Une force, me semblait-il, une force occulte m’engourdissait, m’arrêtait, m’empêchait d’aller plus loin, me rappelait en arrière. J’éprouvais ce besoin douloureux de rentrer qui vous oppresse, quand on a laissé au logis un malade aimé, et que le pressentiment vous saisit d’une aggravation de son mal. Donc, je revins malgré moi, sûr que j’allais trouver, dans ma maison, une mauvaise nouvelle, une lettre ou une dépêche. Il n’y avait rien ; et je demeurai plus surpris et plus inquiet que si j’avais eu de nouveau quelque vision fantastique. 8 août. – J’ai passé hier une affreuse soirée. Il ne se manifeste plus, mais je le sens près de moi, m’épiant, me regardant, me pénétrant, me dominant et plus redoutable, en se cachant ainsi, que s’il signalait par des phénomènes surnaturels sa présence invisible et constante. J’ai dormi, pourtant. 9 août. – Rien, mais j’ai peur. 10 août. – Rien ; qu’arrivera-t-il demain ? 11 août. – Toujours rien ; je ne puis plus rester chez moi avec cette crainte et cette pensée entrées en mon âme ; je vais partir. 12 août, 10 heures du soir. – Tout le jour j’ai voulu m’en aller ; je n’ai pas pu. J’ai voulu accomplir cet acte de liberté si facile, si simple, – sortir – monter dans ma voiture pour gagner Rouen – je n’ai pas pu. Pourquoi ? 13 août. – Quand on est atteint par certaines maladies, tous les ressorts de l’être physique semblent brisés, toutes les énergies anéanties, tous les muscles relâchés, les os devenus mous comme la chair et la chair liquide comme de l’eau. J’éprouve cela dans mon être moral d’une façon étrange et désolante. Je n’ai plus aucune force, aucun courage, aucune domination sur moi, aucun pouvoir même de mettre en mouvement ma volonté. Je ne peux plus vouloir ; mais quelqu’un veut pour moi ; et j’obéis. 14 août. – Je suis perdu ! Quelqu’un possède mon âme et la gouverne ! quelqu’un ordonne tous mes actes, tous mes mouvements, toutes mes pensées. Je ne suis plus rien en moi, rien qu’un spectateur esclave et terrifié de toutes les choses que j’accomplis. Je désire sortir. Je ne peux pas. Il ne veut pas ; et je reste, éperdu, tremblant, dans le fauteuil où il me tient assis. Je désire seulement me lever, me soulever, afin de me croire encore maître de moi. Je ne peux pas ! Je suis rivé à mon siège ; et mon siège adhère au sol, de telle sorte qu’aucune force ne nous soulèverait. Puis, tout d’un coup, il faut, il faut, il faut que j’aille au fond de mon jardin cueillir des fraises et les manger. Et j’y vais. Je cueille des fraises et je les mange ! Oh ! mon Dieu ! Mon Dieu ! Mon Dieu ! Est-il un Dieu ? S’il en est un, délivrez-moi, sauvez-moi ! secourez-moi ! Pardon ! Pitié ! Grâce ! Sauvez-moi ! Oh ! quelle souffrance ! quelle torture ! quelle horreur ! 15 août. – Certes, voilà comment était possédée et dominée ma pauvre cousine, quand elle est venue m’emprunter cinq mille francs. Elle subissait un vouloir étranger entré en elle, comme une autre âme, comme une autre âme parasite et dominatrice. Est-ce que le monde va finir ? Mais celui qui me gouverne, quel est-il, cet invisible ? cet inconnaissable, ce rôdeur d’une race surnaturelle ? Donc les Invisibles existent ! Alors, comment depuis l’origine du monde ne se sont-ils pas encore manifestés d’une façon précise comme ils le font pour moi ? Je n’ai jamais rien lu qui ressemble à ce qui s’est passé dans ma demeure. Oh ! si je pouvais la quitter, si je pouvais m’en aller, fuir et ne pas revenir. Je serais sauvé, mais je ne peux pas. 16 août. – J’ai pu m’échapper aujourd’hui pendant deux heures, comme un prisonnier qui trouve ouverte, par hasard, la porte de son cachot. J’ai senti que j’étais libre tout à coup et qu’il était loin. J’ai ordonné d’atteler bien vite et j’ai gagné Rouen. Oh ! quelle joie de pouvoir dire à un homme qui obéit : « Allez à Rouen ! » Je me suis fait arrêter devant la bibliothèque et j’ai prié qu’on me prêtât le grand traité du docteur Hermann Herestauss sur les habitants inconnus du monde °°°°°°°°°° antique et moderne. Puis, au moment de remonter dans mon coupé, j’ai voulu dire : « À la gare ! » et j’ai crié, – je n’ai pas dit, j’ai crié – d’une voix si forte que les passants se sont retournés : « À la maison », et je suis tombé, affolé d’angoisse, sur le coussin de ma voiture. Il m’avait retrouvé et repris. 17 août. – Ah ! Quelle nuit ! quelle nuit ! Et pourtant il me semble que je devrais me réjouir. Jusqu’à une heure du matin, j’ai lu ! Hermann Herestauss, °°°°°°°°°° docteur en philosophie et en théogonie, a écrit l’histoire et les manifestations de tous les êtres invisibles rôdant autour de l’homme ou rêvés par lui. Il décrit leurs origines, leur domaine, leur puissance. Mais aucun d’eux ne ressemble à celui qui me hante. On dirait que l’homme, depuis qu’il pense, a pressenti et redouté un être nouveau, plus fort que lui, son successeur en ce monde, et que, le sentant proche et ne pouvant prévoir la nature de ce maître, il a créé, dans sa terreur, tout le peuple fantastique des êtres occultes, fantômes vagues nés de la peur. Donc, ayant lu jusqu’à une heure du matin, j’ai été m’asseoir ensuite auprès de ma fenêtre ouverte pour rafraîchir mon front et ma pensée au vent calme de l’obscurité. Il faisait bon, il faisait tiède ! Comme j’aurais aimé cette nuit-là autrefois ! Pas de lune. Les étoiles avaient au fond du ciel noir des scintillements frémissants. Qui habite ces mondes ? Quelles formes, quels vivants, quels animaux, quelles plantes sont là-bas ? Ceux qui pensent dans ces univers lointains, que savent-ils plus que nous ? Que peuvent-ils plus que nous ? Que voient-ils que nous ne connaissons point ? Un d’eux, un jour ou l’autre, traversant l’espace, n’apparaîtra-t-il pas sur notre terre pour la conquérir, comme les Normands jadis traversaient la mer pour asservir des peuples plus faibles ? Nous sommes si infirmes, si désarmés, si ignorants, si petits, nous autres, sur ce grain de boue qui tourne délayé dans une goutte d’eau. Je m’assoupis en rêvant ainsi au vent frais du soir. Or, ayant dormi environ quarante minutes, je rouvris les yeux sans faire un mouvement, réveillé par je ne sais quelle émotion confuse et bizarre. Je ne vis rien d’abord, puis, tout à coup, il me sembla qu’une page du livre resté ouvert sur ma table venait de tourner toute seule. Aucun souffle d’air n’était entré par ma fenêtre. Je fus surpris et j’attendis. Au bout de quatre minutes environ, je vis, je vis, oui, je vis de mes yeux une autre page se soulever et se rabattre sur la précédente, comme si un doigt l’eût feuilletée. Mon fauteuil était vide, semblait vide ; mais je compris qu’il était là, lui, assis à ma place, et qu’il lisait. D’un bond furieux, d’un bond de bête révoltée, qui va éventrer son dompteur, je traversai ma chambre pour le saisir, pour l’étreindre, pour le tuer !… Mais mon siège, avant que je l’eusse atteint, se renversa comme si on eût fui devant moi… ma table oscilla, ma lampe tomba et s’éteignit, et ma fenêtre se ferma comme si un malfaiteur surpris se fût élancé dans la nuit, en prenant à pleines mains les battants. Donc, il s’était sauvé ; il avait eu peur, peur de moi, lui ! Alors,… alors… demain… ou après,… ou un jour quelconque,… je pourrai donc le ^^ ^^ ^^ * 5:7 # 377p : Typographie : pas de virgule avant les points de suspension. > Suggestions : … * 31:33 # 377p : Typographie : pas de virgule avant les points de suspension. > Suggestions : … * 55:57 # 377p : Typographie : pas de virgule avant les points de suspension. > Suggestions : … tenir sous mes poings, et l’écraser contre le sol ! Est-ce que les chiens, quelquefois, ne mordent point et n’étranglent pas leurs maîtres ? 18 août. – J’ai songé toute la journée. Oh ! oui, je vais lui obéir, suivre ses impulsions, accomplir toutes ses volontés, me faire humble, soumis, lâche. Il est le plus fort. Mais une heure viendra… 19 août. – Je sais… je sais… je sais tout ! Je viens de lire ceci dans la Revue du Monde scientifique : « Une nouvelle assez curieuse nous arrive de Rio de Janeiro. Une folie, une épidémie de folie, comparable aux démences contagieuses qui atteignirent les peuples d’Europe au moyen âge, sévit en ce moment dans la ^^^^^^^^^ * 277:286 # 5069s : Le « Moyen Âge ». > Suggestions : Moyen Âge province de San-Paulo. Les habitants éperdus quittent leurs maisons, désertent leurs villages, abandonnent leurs cultures, se disant poursuivis, possédés, gouvernés comme un bétail humain par des êtres invisibles bien que tangibles, des sortes de vampires qui se nourrissent de leur vie, pendant leur sommeil, et qui boivent en outre de l’eau et du lait sans paraître toucher à aucun autre aliment. « M. le professeur Don Pedro Henriquez, accompagné de plusieurs savants °°°°°°°°° médecins, est parti pour la province de San-Paulo, afin d’étudier sur place les origines et les manifestations de cette surprenante folie, et de proposer à l’Empereur les mesures qui lui paraîtront le plus propres à rappeler à la ^^^^^^^ * 278:285 # 3142s : Accord de nombre erroné : « propres » devrait être au singulier. > Suggestions : propre raison ces populations en délire. » Ah ! Ah ! je me rappelle, je me rappelle le beau trois-mâts brésilien qui passa sous mes fenêtres en remontant la Seine, le 8 mai dernier ! Je le trouvai si joli, si blanc, si gai ! L’Être était dessus, venant de là-bas, où sa race est née ! Et il m’a vu ! Il a vu ma demeure blanche aussi ; et il a sauté du navire sur la rive. Oh ! mon Dieu ! À présent, je sais, je devine. Le règne de l’homme est fini. Il est venu, Celui que redoutaient les premières terreurs des peuples naïfs, Celui qu’exorcisaient les prêtres inquiets, que les sorciers évoquaient par les nuits sombres, sans le voir apparaître encore, à qui les pressentiments des maîtres passagers du monde prêtèrent toutes les formes monstrueuses ou gracieuses des gnomes, des esprits, des génies, des fées, des farfadets. Après les grossières conceptions de l’épouvante primitive, des hommes plus perspicaces l’ont pressenti plus clairement. Mesmer l’avait deviné, et les °°°°°° médecins, depuis dix ans déjà, ont découvert, d’une façon précise, la nature de sa puissance avant qu’il l’eût exercée lui-même. Ils ont joué avec cette arme du Seigneur nouveau, la domination d’un mystérieux vouloir sur l’âme humaine devenue esclave. Ils ont appelé cela magnétisme, hypnotisme, suggestion… que sais-je ? Je les ai vus s’amuser comme des enfants imprudents avec cette horrible puissance ! Malheur à nous ! Malheur à l’homme ! Il est venu, le… le… comment se nomme-t-il… le… il me semble qu’il me crie son nom, et je ne l’entends pas… le… oui… il le crie… J’écoute… je ne peux pas… répète… le… Horla… J’ai entendu… le Horla… c’est lui… le Horla… il est venu !… °°°°° °°°°° °°°°° Ah ! le vautour a mangé la colombe, le loup a mangé le mouton ; le lion a dévoré le buffle aux cornes aiguës ; l’homme a tué le lion avec la flèche, avec le glaive, avec la poudre ; mais le Horla va faire de l’homme ce que nous avons °°°°° fait du cheval et du bœuf : sa chose, son serviteur et sa nourriture, par la seule puissance de sa volonté. Malheur à nous ! Pourtant, l’animal, quelquefois, se révolte et tue celui qui l’a dompté… moi aussi je veux… je pourrai… mais il faut le connaître, le toucher, le voir ! Les savants disent que l’œil de la bête, différent du nôtre, ne distingue point comme le nôtre… Et mon œil à moi ne peut distinguer le nouveau venu qui m’opprime. Pourquoi ? Oh ! je me rappelle à présent les paroles du moine du mont Saint-Michel : « Est-ce que nous voyons la cent-millième partie de ce qui existe ? Tenez, voici le vent qui est la plus grande force de la nature, qui renverse les hommes, abat les édifices, déracine les arbres, soulève la mer en montagnes d’eau, détruit les falaises et jette aux brisants les grands navires, le vent qui tue, qui siffle, qui gémit, qui mugit, l’avez-vous vu et pouvez-vous le voir : il existe pourtant ! » Et je songeais encore : mon œil est si faible, si imparfait, qu’il ne distingue même point les corps durs, s’ils sont transparents comme le verre !… Qu’une glace sans tain barre mon chemin, il me jette dessus comme l’oiseau entré dans une chambre se casse la tête aux vitres. Mille choses en outre le trompent et l’égarent ? Quoi d’étonnant, alors, à ce qu’il ne sache point apercevoir un corps nouveau que la lumière traverse. Un être nouveau ! pourquoi pas ? Il devait venir assurément ! pourquoi serions-nous les derniers ! Nous ne le distinguons point, ainsi que tous les autres créés avant nous ? C’est que sa nature est plus parfaite, son corps plus fin et plus fini que le nôtre, que le nôtre si faible, si maladroitement conçu, encombré d’organes toujours fatigués, toujours forcés comme des ressorts trop complexes, que le nôtre, qui vit comme une plante et comme une bête, en se nourrissant péniblement d’air, d’herbe et de viande, machine animale en proie aux maladies, aux déformations, aux putréfactions, poussive, mal réglée, naïve et bizarre, ingénieusement mal faite, œuvre grossière et délicate, ébauche d’être qui pourrait devenir intelligent et superbe. Nous sommes quelques-uns, si peu sur ce monde, depuis l’huître jusqu’à l’homme. Pourquoi pas un de plus, une fois accomplie la période qui sépare les apparitions successives de toutes les espèces diverses ? Pourquoi pas un de plus ? Pourquoi pas aussi d’autres arbres aux fleurs immenses, éclatantes et parfumant des régions entières ? Pourquoi pas d’autres éléments que le feu, l’air, la terre et l’eau ? – Ils sont quatre, rien que quatre, ces pères nourriciers des êtres ! Quelle pitié ! Pourquoi ne sont-ils pas quarante, quatre cents, quatre mille ! Comme tout est pauvre, mesquin, misérable ! avarement donné, sèchement inventé, lourdement fait ! Ah ! l’éléphant, l’hippopotame, que de grâce ! Le chameau que d’élégance ! Mais direz-vous, le papillon ! une fleur qui vole ! J’en rêve un qui serait grand comme cent univers, avec des ailes dont je ne puis même exprimer la forme, la beauté, la couleur et le mouvement. Mais je le vois… il va d’étoile en étoile, les rafraîchissant et les embaumant au souffle harmonieux et léger de sa course !… Et les peuples de là-haut le regardent passer, extasiés et ravis !… · · · · · · · · · · · · · · · · · · · · · · · · Qu’ai-je donc ? C’est lui, lui, le Horla, qui me hante, qui me fait penser ces °°°°° folies ! Il est en moi, il devient mon âme ; je le tuerai ! 19 août. – Je le tuerai. Je l’ai vu ! je me suis assis hier soir, à ma table ; et je fis semblant d’écrire avec une grande attention. Je savais bien qu’il viendrait rôder autour de moi, tout près, si près que je pourrais peut-être le toucher, le saisir ? Et alors !… alors, j’aurais la force des désespérés ; j’aurais mes mains, mes genoux, ma poitrine, mon front, mes dents pour l’étrangler, l’écraser, le mordre, le déchirer. Et je le guettais avec tous mes organes surexcités. J’avais allumé mes deux lampes et les huit bougies de ma cheminée, comme si j’eusse pu, dans cette clarté, le découvrir. En face de moi, mon lit, un vieux lit de chêne à colonnes ; à droite, ma cheminée ; à gauche, ma porte fermée avec soin, après l’avoir laissée longtemps ouverte, afin de l’attirer ; derrière moi, une très haute armoire à glace, qui me servait chaque jour pour me raser, pour m’habiller, et où j’avais coutume de me regarder, de la tête aux pieds, chaque fois que je passais devant. Donc, je faisais semblant d’écrire, pour le tromper, car il m’épiait lui aussi ; et soudain, je sentis, je fus certain qu’il lisait par-dessus mon épaule, qu’il était là, frôlant mon oreille. Je me dressai, les mains tendues, en me tournant si vite que je faillis tomber. Eh ! bien ?… on y voyait comme en plein jour, et je ne me vis pas dans ma glace !… Elle était vide, claire, profonde, pleine de lumière ! Mon image n’était pas dedans… et j’étais en face, moi ! Je voyais le grand verre limpide du haut en bas. Et je regardais cela avec des yeux affolés ; et je n’osais plus avancer, je n’osais plus faire un mouvement, sentant bien pourtant qu’il était là, mais qu’il m’échapperait encore, lui dont le corps imperceptible avait dévoré mon reflet. Comme j’eus peur ! Puis voilà que tout à coup je commençai à m’apercevoir dans une brume, au fond du miroir, dans une brume comme à travers une nappe d’eau ; et il me semblait que cette eau glissait de gauche à droite, lentement, rendant plus précise mon image, de seconde en seconde. C’était comme la fin d’une éclipse. Ce qui me cachait ne paraissait point posséder de contours nettement arrêtés, mais une sorte de transparence opaque, s’éclaircissant peu à peu. Je pus enfin me distinguer complètement, ainsi que je le fais chaque jour en me regardant. Je l’avais vu ! L’épouvante m’en est restée, qui me fait encore frissonner. 20 août. – Le tuer, comment ? puisque je ne peux l’atteindre ? Le poison ? mais il me verrait le mêler à l’eau ; et nos poisons, d’ailleurs, auraient-ils un effet sur son corps imperceptible ? Non… non… sans aucun doute… Alors ?… alors ?… 21 août. – J’ai fait venir un serrurier de Rouen, et lui ai commandé pour ma chambre des persiennes de fer, comme en ont, à Paris, certains hôtels particuliers, au rez-de-chaussée, par crainte des voleurs. Il me fera, en outre, une porte pareille. Je me suis donné pour un poltron, mais je m’en moque !… · · · · · · · · · · · · · · · · · · · · · · · · 10 septembre. – Rouen, hôtel continental. C’est fait… c’est fait… mais est-il mort ? J’ai l’âme bouleversée de ce que j’ai vu. Hier donc, le serrurier ayant posé ma persienne et ma porte de fer, j’ai laissé tout ouvert jusqu’à minuit, bien qu’il commençât à faire froid. Tout à coup, j’ai senti qu’il était là, et une joie, une joie folle m’a saisi. Je me suis levé lentement, et j’ai marché à droite, à gauche, longtemps pour qu’il ne devinât rien ; puis j’ai ôté mes bottines et mis mes savates avec négligence ; puis j’ai fermé ma persienne de fer, et revenant à pas tranquilles vers la porte, j’ai fermé la porte aussi à double tour. Retournant alors vers la fenêtre, je la fixai par un cadenas, dont je mis la clef dans ma poche. Tout à coup, je compris qu’il s’agitait autour de moi, qu’il avait peur à son tour, qu’il m’ordonnait de lui ouvrir. Je faillis céder ; je ne cédai pas, mais m’adossant à la porte, je l’entre-bâillai, tout juste assez pour passer, moi, à reculons ; et comme je suis très grand ma tête touchait au linteau. J’étais sûr qu’il n’avait pu s’échapper et je l’enfermai, tout seul, tout seul ! Quelle joie ! Je le tenais ! Alors, je descendis, en courant ; je pris dans mon salon, sous ma chambre, mes deux lampes et je renversai toute l’huile sur le tapis, sur les meubles, partout ; puis j’y mis le feu, et je me sauvai, après avoir bien refermé, à double tour, la grande porte d’entrée. Et j’allai me cacher au fond de mon jardin, dans un massif de lauriers. Comme ce fut long ! comme ce fut long ! Tout était noir, muet, immobile ; pas un souffle d’air, pas une étoile, des montagnes de nuages qu’on ne voyait point, mais qui pesaient sur mon âme si lourds, si lourds. ^^^^^^ * 264:270 # 3554s : Accord de nombre erroné avec « âme » : « lourds » devrait être au singulier. > Suggestions : lourd Je regardais ma maison, et j’attendais. Comme ce fut long ! Je croyais déjà que le feu s’était éteint tout seul, ou qu’il l’avait éteint, Lui, quand une des fenêtres d’en bas creva sous la poussée de l’incendie, et une flamme, une grande flamme rouge et jaune, longue, molle, caressante, monta le long du mur blanc et le baisa jusqu’au toit. Une lueur courut dans les arbres, dans les branches, dans les feuilles, et un frisson, un frisson de peur aussi ! Les oiseaux se réveillaient ; un chien se mit à hurler ; il me sembla que le jour se levait ! Deux autres fenêtres éclatèrent aussitôt, et je vis que tout le bas de ma demeure n’était plus qu’un effrayant brasier. Mais un cri, un cri horrible, suraigu, déchirant, un cri de femme passa dans la nuit, et deux mansardes s’ouvrirent ! J’avais oublié mes domestiques ! Je vis leurs faces affolées, et leurs bras qui s’agitaient !… Alors, éperdu d’horreur, je me mis à courir vers le village en hurlant : « Au secours ! au secours ! au feu ! au feu ! » Je rencontrai des gens qui s’en venaient déjà et je retournai avec eux, pour voir ! La maison, maintenant, n’était plus qu’un bûcher horrible et magnifique, un bûcher monstrueux, éclairant toute la terre, un bûcher où brûlaient des hommes, et où il brûlait aussi, Lui, Lui, mon prisonnier, l’Être nouveau, le nouveau maître, le Horla ! °°°°° Soudain le toit tout entier s’engloutit entre les murs, et un volcan de flammes jaillit jusqu’au ciel. Par toutes les fenêtres ouvertes sur la fournaise, je voyais la cuve de feu, et je pensais qu’il était là, dans ce four, mort… — Mort ? Peut-être ?… Son corps ? son corps que le jour traversait n’était-il pas indestructible par les moyens qui tuent les nôtres ? S’il n’était pas mort ?… seul peut-être le temps a prise sur l’Être Invisible et Redoutable. Pourquoi ce corps transparent, ce corps inconnaissable, ce corps d’Esprit, s’il devait craindre, lui aussi, les maux, les blessures, les infirmités, la destruction prématurée ? La destruction prématurée ? toute l’épouvante humaine vient d’elle ! Après l’homme le Horla. – Après celui qui peut mourir tous les jours, à toutes les °°°°° heures, à toutes les minutes, par tous les accidents, est venu celui qui ne doit mourir qu’à son jour, à son heure, à sa minute, parce qu’il a touché la limite de son existence ! Non… non… sans aucun doute, sans aucun doute… il n’est pas mort… Alors… alors… il va donc falloir que je me tue, moi !… |
Added tests/fr/horla.txt version [4cbaa54e8b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 | Guy de Maupassant Le Horla (1887) Le Horla, P. Ollendorff, 1895 [trente-cinquième édition] (pp. 3-68). 8 mai. – Quelle journée admirable ! J’ai passé toute la matinée étendu sur l’herbe, devant ma maison, sous l’énorme platane qui la couvre, l’abrite et l’ombrage tout entière. J’aime ce pays, et j’aime y vivre parce que j’y ai mes racines, ces profondes et délicates racines, qui attachent un homme à la terre où sont nés et morts ses aïeux, qui l’attachent à ce qu’on pense et à ce qu’on mange, aux usages comme aux nourritures, aux locutions locales, aux intonations des paysans, aux odeurs du sol, des villages et de l’air lui-même. J’aime ma maison où j’ai grandi. De mes fenêtres, je vois la Seine qui coule, le long de mon jardin, derrière la route, presque chez moi, la grande et large Seine, qui va de Rouen au Havre, couverte de bateaux qui passent. À gauche, là-bas, Rouen, la vaste ville aux toits bleus, sous le peuple pointu des clochers gothiques. Ils sont innombrables, frêles ou larges, dominés par la flèche de fonte de la cathédrale, et pleins de cloches qui sonnent dans l’air bleu des belles matinées, jetant jusqu’à moi leur doux et lointain bourdonnement de fer, leur chant d’airain que la brise m’apporte, tantôt plus fort et tantôt plus affaibli, suivant qu’elle s’éveille ou s’assoupit. Comme il faisait bon ce matin ! Vers onze heures, un long convoi de navires, traînés par un remorqueur, gros comme une mouche, et qui râlait de peine en vomissant une fumée épaisse, défila devant ma grille. Après deux goëlettes anglaises, dont le pavillon rouge ondoyait sur le ciel, venait un superbe trois-mats brésilien, tout blanc, admirablement propre et luisant. Je le saluai, je ne sais pourquoi, tant ce navire me fit plaisir à voir. 12 mai. – J’ai un peu de fièvre depuis quelques jours ; je me sens souffrant, ou plutôt je me sens triste. D’où viennent ces influences mystérieuses qui changent en découragement notre bonheur et notre confiance en détresse. On dirait que l’air, l’air invisible est plein d’inconnaissables Puissances, dont nous subissons les voisinages mystérieux. Je m’éveille plein de gaîté, avec des envies de chanter dans la gorge. – Pourquoi ? – Je descends le long de l’eau ; et soudain, après une courte promenade, je rentre désolé, comme si quelque malheur m’attendait chez moi. – Pourquoi ? – Est-ce un frisson de froid qui, frôlant ma peau, a ébranlé mes nerfs et assombri mon âme ? Est-ce la forme des nuages, ou la couleur du jour, la couleur des choses, si variable, qui, passant par mes yeux, a troublé ma pensée ? Sait-on ? Tout ce qui nous entoure, tout ce que nous voyons sans le regarder, tout ce que nous frôlons sans le connaître, tout ce que nous touchons sans le palper, tout ce que nous rencontrons sans le distinguer, a sur nous, sur nos organes et, par eux, sur nos idées, sur notre cœur lui-même, des effets rapides, surprenants et inexplicables ? Comme il est profond, ce mystère de l’Invisible ! Nous ne le pouvons sonder avec nos sens misérables, avec nos yeux qui ne savent apercevoir ni le trop petit, ni le trop grand, ni le trop près, ni le trop loin, ni les habitants d’une étoile, ni les habitants d’une goutte d’eau… avec nos oreilles qui nous trompent, car elles nous transmettent les vibrations de l’air en notes sonores. Elles sont des fées qui font ce miracle de changer en bruit ce mouvement et par cette métamorphose donnent naissance à la musique, qui rend chantante l’agitation muette de la nature… avec notre odorat, plus faible que celui du chien… avec notre goût, qui peut à peine discerner l’âge d’un vin ! Ah ! si nous avions d’autres organes qui accompliraient en notre faveur d’autres miracles, que de choses nous pourrions découvrir encore autour de nous ! 16 mai. – Je suis malade, décidément ! Je me portais si bien le mois dernier ! J’ai la fièvre, une fièvre atroce, ou plutôt un énervement fiévreux, qui rend mon âme aussi souffrante que mon corps. J’ai sans cesse cette sensation affreuse d’un danger menaçant, cette appréhension d’un malheur qui vient ou de la mort qui approche, ce pressentiment qui est sans doute l’atteinte d’un mal encore inconnu, germant dans le sang et dans la chair. 18 mai. – Je viens d’aller consulter mon médecin, car je ne pouvais plus dormir. Il m’a trouvé le pouls rapide, l’œil dilaté, les nerfs vibrants, mais sans aucun symptôme alarmant. Je dois me soumettre aux douches et boire du bromure de potassium. 25 mai. – Aucun changement ! Mon état, vraiment, est bizarre. À mesure qu’approche le soir, une inquiétude incompréhensible m’envahit, comme si la nuit cachait pour moi une menace terrible. Je dîne vite, puis j’essaie de lire ; mais je ne comprends pas les mots ; je distingue à peine les lettres. Je marche alors dans mon salon de long en large, sous l’oppression d’une crainte confuse et irrésistible, la crainte du sommeil et la crainte du lit. Vers dix heures, je monte dans ma chambre. À peine entré, je donne deux tours de clef, et je pousse les verrous ; j’ai peur… de quoi ?… Je ne redoutais rien jusqu’ici… j’ouvre mes armoires, je regarde sous mon lit ; j’écoute… j’écoute… quoi ?… Est-ce étrange qu’un simple malaise, un trouble de la circulation peut-être, l’irritation d’un filet nerveux, un peu de congestion, une toute petite perturbation dans le fonctionnement si imparfait et si délicat de notre machine vivante, puisse faire un mélancolique du plus joyeux des hommes, et un poltron du plus brave ? Puis, je me couche, et j’attends le sommeil comme on attendrait le bourreau. Je l’attends avec l’épouvante de sa venue ; et mon cœur bat, et mes jambes frémissent ; et tout mon corps tressaille dans la chaleur des draps, jusqu’au moment où je tombe tout à coup dans le repos, comme on tomberait pour s’y noyer, dans un gouffre d’eau stagnante. Je ne le sens pas venir, comme autrefois, ce sommeil perfide, caché près de moi, qui me guette, qui va me saisir par la tête, me fermer les yeux, m’anéantir. Je dors – longtemps – deux ou trois heures – puis un rêve – non – un cauchemar m’étreint. Je sens bien que je suis couché et que je dors,… je le sens et je le sais… et je sens aussi que quelqu’un s’approche de moi, me regarde, me palpe, monte sur mon lit, s’agenouille sur ma poitrine, me prend le cou entre ses mains et serre… serre… de toute sa force pour m’étrangler. Moi, je me débats, lié par cette impuissance atroce, qui nous paralyse dans les songes ; je veux crier, – je ne peux pas ; – je veux remuer, – je ne peux pas ; – j’essaye, avec des efforts affreux, en haletant, de me tourner, de rejeter cet être qui m’écrase et qui m’étouffe, – je ne peux pas ! Et soudain, je m’éveille, affolé, couvert de sueur. J’allume une bougie. Je suis seul. Après cette crise, qui se renouvelle toutes les nuits, je dors enfin, avec calme, jusqu’à l’aurore. 2 juin. – Mon état s’est encore aggravé. Qu’ai-je donc ? Le bromure n’y fait rien ; les douches n’y font rien. Tantôt, pour fatiguer mon corps, si las pourtant, j’allai faire un tour dans la forêt de Roumare. Je crus d’abord que l’air frais, léger et doux, plein d’odeur d’herbes et de feuilles, me versait aux veines un sang nouveau, au cœur une énergie nouvelle. Je pris une grande avenue de chasse, puis je tournai vers La Bouille, par une allée étroite, entre deux armées d’arbres démesurément hauts qui mettaient un toit vert, épais, presque noir, entre le ciel et moi. Un frisson me saisit soudain, non pas un frisson de froid, mais un étrange frisson d’angoisse. Je hâtai le pas, inquiet d’être seul dans ce bois, apeuré sans raison, stupidement, par la profonde solitude. Tout à coup, il me sembla que j’étais suivi, qu’on marchait sur mes talons, tout près, à me toucher. Je me retournai brusquement. J’étais seul. Je ne vis derrière moi que la droite et large allée, vide, haute, redoutablement vide ; et de l’autre côté elle s’étendait aussi à perte de vue, toute pareille, effrayante. Je fermai les yeux. Pourquoi ? Et je me mis à tourner sur un talon, très vite, comme une toupie. Je faillis tomber ; je rouvris les yeux ; les arbres dansaient ; la terre flottait ; je dus m’asseoir. Puis, ah ! je ne savais plus par où j’étais venu ! Bizarre idée ! Bizarre ! Bizarre idée ! Je ne savais plus du tout. Je partis par le côté qui se trouvait à ma droite, et je revins dans l’avenue qui m’avait amené au milieu de la forêt. 3 juin. – La nuit a été horrible. Je vais m’absenter pendant quelques semaines. Un petit voyage, sans doute, me remettra. 2 juillet. – Je rentre. Je suis guéri. J’ai fait d’ailleurs une excursion charmante. J’ai visité le mont Saint-Michel que je ne connaissais pas. Quelle vision, quand on arrive, comme moi, à Avranches, vers la fin du jour ! La ville est sur une colline ; et on me conduisit dans le jardin public, au bout de la cité. Je poussai un cri d’étonnement. Une baie démesurée s’étendait devant moi, à perte de vue, entre deux côtes écartées se perdant au loin dans les brumes ; et au milieu de cette immense baie jaune, sous un ciel d’or et de clarté, s’élevait sombre et pointu un mont étrange, au milieu des sables. Le soleil venait de disparaître, et sur l’horizon encore flamboyant se dessinait le profil de ce fantastique rocher qui porte sur son sommet un fantastique monument. Dès l’aurore, j’allai vers lui. La mer était basse, comme la veille au soir, et je regardais se dresser devant moi, à mesure que j’approchais d’elle, la surprenante abbaye. Après plusieurs heures de marche, j’atteignis l’énorme bloc de pierres qui porte la petite cité dominée par la grande église. Ayant gravi la rue étroite et rapide, j’entrai dans la plus admirable demeure gothique construite pour Dieu sur la terre, vaste comme une ville, pleine de salles basses écrasées sous des voûtes et de hautes galeries que soutiennent de frêles colonnes. J’entrai dans ce gigantesque bijou de granit, aussi léger qu’une dentelle, couvert de tours, de sveltes clochetons, où montent des escaliers tordus, et qui lancent dans le ciel bleu des jours, dans le ciel noir des nuits, leurs têtes bizarres hérissées de chimères, de diables, de bêtes fantastiques, de fleurs monstrueuses, et reliés l’un à l’autre par de fines arches ouvragées. Quand je fus sur le sommet, je dis au moine qui m’accompagnait : « Mon père, comme vous devez être bien ici ! » Il répondit : « Il y a beaucoup de vent, Monsieur » ; et nous nous mîmes à causer en regardant monter la mer, qui courait sur le sable et le couvrait d’une cuirasse d’acier. Et le moine me conta des histoires, toutes les vieilles histoires de ce lieu, des légendes, toujours des légendes. Une d’elles me frappa beaucoup. Les gens du pays, ceux du mont, prétendent qu’on entend parler la nuit dans les sables, puis qu’on entend bêler deux chèvres, l’une avec une voix forte, l’autre avec une voix faible. Les incrédules affirment que ce sont les cris des oiseaux de mer, qui ressemblent tantôt à des bêlements, et tantôt à des plaintes humaines ; mais les pêcheurs attardés jurent avoir rencontré rôdant sur les dunes, entre deux marées, autour de la petite ville jetée ainsi loin du monde, un vieux berger, dont on ne voit jamais la tête couverte de son manteau, et qui conduit, en marchant devant eux, un bouc à figure d’homme et une chèvre à figure de femme, tous deux avec de longs cheveux blancs et parlant sans cesse, se querellant dans une langue inconnue, puis cessant soudain de crier pour bêler de toute leur force. Je dis au moine : « Y croyez-vous ? » Il murmura : « Je ne sais pas. » Je repris : « S’il existait sur la terre d’autres êtres que nous, comment ne les connaîtrions-nous point depuis longtemps : comment ne les auriez-vous pas vus, vous ? comment ne les aurais-je pas vus, moi ? » Il répondit : « Est-ce que nous voyons la cent-millième partie de ce qui existe ? Tenez, voici le vent, qui est la plus grande force de la nature, qui renverse les hommes, abat les édifices, déracine les arbres, soulève la mer en montagnes d’eau, détruit les falaises, et jette aux brisants les grands navires, le vent qui tue, qui siffle, qui gémit, qui mugit, – l’avez-vous vu, et pouvez-vous le voir ? Il existe, pourtant. » Je me tus devant ce simple raisonnement. Cet homme était un sage ou peut-être un sot. Je ne l’aurais pu affirmer au juste ; mais je me tus. Ce qu’il disait là, je l’avais pensé souvent. 3 juillet. – J’ai mal dormi ; certes, il y a ici une influence fiévreuse, car mon cocher souffre du même mal que moi. En rentrant hier, j’avais remarqué sa pâleur singulière. Je lui demandai : — Qu’est-ce que vous avez, Jean ? — J’ai que je ne peux plus me reposer, Monsieur, ce sont mes nuits qui mangent mes jours. Depuis le départ de Monsieur, cela me tient comme un sort. Les autres domestiques vont bien cependant, mais j’ai grand peur d’être repris, moi. 4 juillet. – Décidément, je suis repris. Mes cauchemars anciens reviennent. Cette nuit, j’ai senti quelqu’un accroupi sur moi, et qui, sa bouche sur la mienne, buvait ma vie entre mes lèvres. Oui, il la puisait dans ma gorge, comme aurait fait une sangsue. Puis il s’est levé, repu, et moi je me suis réveillé, tellement meurtri, brisé, anéanti, que je ne pouvais plus remuer. Si cela continue encore quelques jours, je repartirai certainement. 5 juillet. – Ai-je perdu la raison ? Ce qui s’est passé, ce que j’ai vu la nuit dernière est tellement étrange, que ma tête s’égare quand j’y songe ! Comme je le fais maintenant chaque soir j’avais fermé ma porte à clef ; puis, ayant soif, je bus un demi-verre d’eau, et je remarquai par hasard que ma carafe était pleine jusqu’au bouchon de cristal. Je me couchai ensuite et je tombai dans un de mes sommeils épouvantables, dont je fus tiré au bout de deux heures environ par une secousse plus affreuse encore. Figurez-vous un homme qui dort, qu’on assassine, et qui se réveille avec un couteau dans le poumon, et qui râle, couvert de sang, et qui ne peut plus respirer, et qui va mourir, et qui ne comprend pas – voilà. Ayant enfin reconquis ma raison, j’eus soif de nouveau ; j’allumai une bougie et j’allai vers la table où était posée ma carafe. Je la soulevai en la penchant sur mon verre ; rien ne coula. – Elle était vide ! Elle était vide complètement ! D’abord, je n’y compris rien ; puis, tout à coup, je ressentis une émotion si terrible, que je dus m’asseoir, ou plutôt, que je tombai sur une chaise ! puis, je me redressai d’un saut pour regarder autour de moi ! puis je me rassis, éperdu d’étonnement et de peur, devant le cristal transparent ! Je le contemplais avec des yeux fixes, cherchant à deviner. Mes mains tremblaient ! On avait donc bu cette eau ? Qui ? Moi ? moi, sans doute ? Ce ne pouvait être que moi ? Alors, j’étais somnambule, je vivais, sans le savoir, de cette double vie mystérieuse qui fait douter s’il y a deux êtres en nous, ou si un être étranger, inconnaissable et invisible, anime, par moments, quand notre âme est engourdie, notre corps captif qui obéit à cet autre, comme à nous-mêmes, plus qu’à nous-mêmes. Ah ! qui comprendra mon angoisse abominable ? Qui comprendra l’émotion d’un homme, sain d’esprit, bien éveillé, plein de raison et qui regarde épouvanté, à travers le verre d’une carafe, un peu d’eau disparue pendant qu’il a dormi ! Et je restai là jusqu’au jour, sans oser regagner mon lit. 6 juillet. – Je deviens fou. On a encore bu toute ma carafe cette nuit ; – ou plutôt, je l’ai bue ! Mais, est-ce moi ? Est-ce moi ? Qui serait-ce ? Qui ? Oh ! mon Dieu ! Je deviens fou ? Qui me sauvera ? 10 juillet. – Je viens de faire des épreuves surprenantes. Décidément, je suis fou ! Et pourtant ! Le 6 juillet, avant de me coucher, j’ai placé sur ma table du vin, du lait, de l’eau, du pain et des fraises. On a bu – j’ai bu – toute l’eau, et un peu de lait. On n’a touché ni au vin, ni au pain, ni aux fraises. Le 7 juillet, j’ai renouvelé la même épreuve, qui a donné le même résultat. Le 8 juillet, j’ai supprimé l’eau et le lait. On n’a touché à rien. Le 9 juillet enfin, j’ai remis sur ma table l’eau et le lait seulement, en ayant soin d’envelopper les carafes en des linges de mousseline blanche et de ficeler les bouchons. Puis, j’ai frotté mes lèvres, ma barbe, mes mains avec de la mine de plomb, et je me suis couché. L’invincible sommeil m’a saisi, suivi bientôt de l’atroce réveil. Je n’avais point remué ; mes draps eux-mêmes ne portaient pas de taches. Je m’élançai vers ma table. Les linges enfermant les bouteilles étaient demeurés immaculés. Je déliai les cordons, en palpitant de crainte. On avait bu toute l’eau ! on avait bu tout le lait ! Ah ! mon Dieu !… Je vais partir tout à l’heure pour Paris. 12 juillet. – Paris. J’avais donc perdu la tête les jours derniers ! J’ai dû être le jouet de mon imagination énervée, à moins que je ne sois vraiment somnambule, ou que j’aie subi une de ces influences constatées, mais inexplicables jusqu’ici, qu’on appelle suggestions. En tout cas, mon affolement touchait à la démence, et vingt-quatre heures de Paris ont suffi pour me remettre d’aplomb. Hier, après des courses et des visites, qui m’ont fait passer dans l’âme de l’air nouveau et vivifiant, j’ai fini ma soirée au Théâtre-Français. On y jouait une pièce d’Alexandre Dumas fils ; et cet esprit alerte et puissant a achevé de me guérir. Certes, la solitude est dangereuse pour les intelligences qui travaillent. Il nous faut, autour de nous, des hommes qui pensent et qui parlent. Quand nous sommes seuls longtemps, nous peuplons le vide de fantômes. Je suis rentré à l’hôtel très gai, par les boulevards. Au coudoiement de la foule, je songeais, non sans ironie, à mes terreurs, à mes suppositions de l’autre semaine, car j’ai cru, oui, j’ai cru qu’un être invisible habitait sous mon toit. Comme notre tête est faible et s’effare, et s’égare vite, dès qu’un petit fait incompréhensible nous frappe ! Au lieu de conclure par ces simples mots : « Je ne comprends pas parce que la cause m’échappe », nous imaginons aussitôt des mystères effrayants et des puissances surnaturelles. 14 juillet. – Fête de la République. Je me suis promené par les rues. Les pétards et les drapeaux m’amusaient comme un enfant. C’est pourtant fort bête d’être joyeux, à date fixe, par décret du gouvernement. Le peuple est un troupeau imbécile, tantôt stupidement patient et tantôt férocement révolté. On lui dit : « Amuse-toi. » Il s’amuse. On lui dit : « Va te battre avec le voisin. » Il va se battre. On lui dit : « Vote pour l’Empereur. » Il vote pour l’Empereur. Puis, on lui dit : « Vote pour la République. » Et il vote pour la République. Ceux qui le dirigent sont aussi sots ; mais au lieu d’obéir à des hommes, ils obéissent à des principes, lesquels ne peuvent être que niais, stériles et faux, par cela même qu’ils sont des principes, c’est-à-dire des idées réputées certaines et immuables, en ce monde où l’on n’est sûr de rien, puisque la lumière est une illusion, puisque le bruit est une illusion. 16 juillet. – J’ai vu hier des choses qui m’ont beaucoup troublé. Je dînais chez ma cousine, Mme Sablé, dont le mari commande le 76e chasseurs à Limoges. Je me trouvais chez elle avec deux jeunes femmes, dont l’une a épousé un médecin, le docteur Parent, qui s’occupe beaucoup des maladies nerveuses et des manifestations extraordinaires auxquelles donnent lieu en ce moment les expériences sur l’hypnotisme et la suggestion. Il nous raconta longtemps les résultats prodigieux obtenus par des savants anglais et par les médecins de l’école de Nancy. Les faits qu’il avança me parurent tellement bizarres, que je me déclarai tout à fait incrédule. « Nous sommes, affirmait-il, sur le point de découvrir un des plus importants secrets de la nature, je veux dire, un de ses plus importants secrets sur cette terre ; car elle en a certes d’autrement importants, là-bas, dans les étoiles. Depuis que l’homme pense, depuis qu’il sait dire et écrire sa pensée, il se sent frôlé par un mystère impénétrable pour ses sens grossiers et imparfaits, et il tâche de suppléer, par l’effort de son intelligence, à l’impuissance de ses organes. Quand cette intelligence demeurait encore à l’état rudimentaire, cette hantise des phénomènes invisibles a pris des formes banalement effrayantes. De là sont nées les croyances populaires au surnaturel, les légendes des esprits rôdeurs, des fées, des gnomes, des revenants, je dirai même la légende de Dieu, car nos conceptions de l’ouvrier-créateur, de quelque religion qu’elles nous viennent, sont bien les inventions les plus médiocres, les plus stupides, les plus inacceptables sorties du cerveau apeuré des créatures. Rien de plus vrai que cette parole de Voltaire : « Dieu a fait l’homme à son image, mais l’homme le lui a bien rendu. » « Mais, depuis un peu plus d’un siècle, on semble pressentir quelque chose de nouveau. Mesmer et quelques autres nous ont mis sur une voie inattendue, et nous sommes arrivés vraiment, depuis quatre ou cinq ans surtout, à des résultats surprenants. » Ma cousine, très incrédule aussi, souriait. Le docteur Parent lui dit : – Voulez-vous que j’essaie de vous endormir, Madame ? — Oui, je veux bien. Elle s’assit dans un fauteuil et il commença à la regarder fixement en la fascinant. Moi, je me sentis soudain un peu troublé, le cœur battant, la gorge serrée. Je voyais les yeux de Mme Sablé s’alourdir, sa bouche se crisper, sa poitrine haleter. Au bout de dix minutes, elle dormait. — Mettez-vous derrière elle, dit le médecin. Et je m’assis derrière elle. Il lui plaça entre les mains une carte de visite en lui disant : « Ceci est un miroir ; que voyez-vous dedans ? » Elle répondit : — Je vois mon cousin. — Que fait-il ? — Il se tord la moustache. — Et maintenant ? — Il tire de sa poche une photographie. — Quelle est cette photographie ? — La sienne. C’était vrai ! Et cette photographie venait de m’être livrée, le soir même, à l’hôtel. — Comment est-il sur ce portrait ? — Il se tient debout avec son chapeau à la main. Donc elle voyait dans cette carte, dans ce carton blanc, comme elle eût vu dans une glace. Les jeunes femmes, épouvantées, disaient : « Assez ! Assez ! Assez ! » Mais le docteur ordonna : « Vous vous lèverez demain à huit heures ; puis vous irez trouver à son hôtel votre cousin, et vous le supplierez de vous prêter cinq mille francs que votre mari vous demande et qu’il vous réclamera à son prochain voyage. » Puis il la réveilla. En rentrant à l’hôtel, je songeais à cette curieuse séance et des doutes m’assaillirent, non point sur l’absolue, sur l’insoupçonnable bonne foi de ma cousine, que je connaissais comme une sœur, depuis l’enfance, mais sur une supercherie possible du docteur. Ne dissimulait-il pas dans sa main une glace qu’il montrait à la jeune femme endormie, en même temps que sa carte de visite ? Les prestidigitateurs de profession font des choses autrement singulières. Je rentrai donc et je me couchai. Or, ce matin, vers huit heures et demie, je fus réveillé par mon valet de chambre, qui me dit : — C’est Mme Sablé qui demande à parler à Monsieur tout de suite. Je m’habillai à la hâte et je la reçus. Elle s’assit fort troublée, les yeux baissés, et, sans lever son voile, elle me dit : — Mon cher cousin, j’ai un gros service à vous demander. — Lequel, ma cousine ? — Cela me gêne beaucoup de vous le dire, et pourtant, il le faut. J’ai besoin, absolument besoin, de cinq mille francs. — Allons donc, vous ? — Oui, moi, ou plutôt mon mari, qui me charge de les trouver. J’étais tellement stupéfait, que je balbutiais mes réponses. Je me demandais si vraiment elle ne s’était pas moquée de moi avec le docteur Parent, si ce n’était pas là une simple farce préparée d’avance et fort bien jouée. Mais, en la regardant avec attention, tous mes doutes se dissipèrent. Elle tremblait d’angoisse, tant cette démarche lui était douloureuse, et je compris qu’elle avait la gorge pleine de sanglots. Je la savais fort riche et je repris : — Comment ! votre mari n’a pas cinq mille francs à sa disposition ! Voyons, réfléchissez. Êtes-vous sûre qu’il vous a chargée de me les demander ? Elle hésita quelques secondes comme si elle eût fait un grand effort pour chercher dans son souvenir, puis elle répondit : — Oui…, oui… j’en suis sûre. — Il vous a écrit ? Elle hésita encore, réfléchissant. Je devinai le travail torturant de sa pensée. Elle ne savait pas. Elle savait seulement qu’elle devait m’emprunter cinq mille francs pour son mari. Donc elle osa mentir. — Oui, il m’a écrit. — Quand donc ? Vous ne m’avez parlé de rien, hier. — J’ai reçu sa lettre ce matin. — Pouvez-vous me la montrer ? — Non… non… non… elle contenait des choses intimes… trop personnelles… je l’ai… je l’ai brûlée. — Alors, c’est que votre mari fait des dettes. Elle hésita encore, puis murmura : — Je ne sais pas. Je déclarai brusquement : — C’est que je ne puis disposer de cinq mille francs en ce moment, ma chère cousine. Elle poussa une sorte de cri de souffrance. — Oh ! oh ! je vous en prie, je vous en prie, trouvez-les… Elle s’exaltait, joignait les mains comme si elle m’eût prié ! J’entendais sa voix changer de ton ; elle pleurait et bégayait, harcelée, dominée par l’ordre irrésistible qu’elle avait reçu. — Oh ! oh ! je vous en supplie… si vous saviez comme je souffre… il me les faut aujourd’hui. J’eus pitié d’elle. — Vous les aurez tantôt, je vous le jure. Elle s’écria : — Oh ! merci ! merci ! Que vous êtes bon. Je repris : – Vous rappelez-vous ce qui s’est passé hier soir chez vous ? — Oui. — Vous rappelez-vous que le docteur Parent vous a endormie ? — Oui. — Eh ! bien, il vous a ordonné de venir m’emprunter ce matin cinq mille francs, et vous obéissez en ce moment à cette suggestion. Elle réfléchit quelques secondes et répondit : — Puisque c’est mon mari qui les demande. Pendant une heure, j’essayai de la convaincre, mais je n’y pus parvenir. Quand elle fut partie, je courus chez le docteur. Il allait sortir ; et il m’écouta en souriant. Puis il dit : — Croyez-vous maintenant ? — Oui, il le faut bien. — Allons chez votre parente. Elle sommeillait déjà sur une chaise longue, accablée de fatigue. Le médecin lui prit le pouls, la regarda quelque temps, une main levée vers ses yeux qu’elle ferma peu à peu sous l’effort insoutenable de cette puissance magnétique. Quand elle fut endormie : — Votre mari n’a plus besoin de cinq mille francs ! Vous allez donc oublier que vous avez prié votre cousin de vous les prêter, et, s’il vous parle de cela, vous ne comprendrez pas. Puis il la réveilla. Je tirai de ma poche un portefeuille : — Voici, ma chère cousine, ce que vous m’avez demandé ce matin. Elle fut tellement surprise que je n’osai pas insister. J’essayai cependant de ranimer sa mémoire, mais elle nia avec force, crut que je me moquais d’elle, et faillit, à la fin, se fâcher. · · · · · · · · · · · · · · · · · · · · · · · · Voilà ! je viens de rentrer ; et je n’ai pu déjeuner, tant cette expérience m’a bouleversé. 19 juillet. – Beaucoup de personnes à qui j’ai raconté cette aventure se sont moquées de moi. Je ne sais plus que penser. Le sage dit : Peut-être ? 21 juillet. – J’ai été dîner à Bougival, puis j’ai passé la soirée au bal des canotiers. Décidément, tout dépend des lieux et des milieux. Croire au surnaturel dans l’île de la Grenouillère, serait le comble de la folie… mais au sommet du mont Saint-Michel ?… mais dans les Indes ? Nous subissons effroyablement l’influence de ce qui nous entoure. Je rentrerai chez moi la semaine prochaine. 30 juillet. – Je suis revenu dans ma maison depuis hier. Tout va bien. 2 août. – Rien de nouveau ; il fait un temps superbe. Je passe mes journées à regarder couler la Seine. 4 août. – Querelles parmi mes domestiques. Ils prétendent qu’on casse les verres, la nuit, dans les armoires. Le valet de chambre accuse la cuisinière, qui accuse la lingère, qui accuse les deux autres. Quel est le coupable ? Bien fin qui le dirait ! 6 août. – Cette fois, je ne suis pas fou. J’ai vu… j’ai vu… j’ai vu !… Je ne puis plus douter… j’ai vu !… J’ai encore froid jusque dans les ongles… j’ai encore peur jusque dans les moelles… j’ai vu !… Je me promenais à deux heures, en plein soleil, dans mon parterre de rosiers… dans l’allée des rosiers d’automne qui commencent à fleurir. Comme je m’arrêtais à regarder un géant des batailles, qui portait trois fleurs magnifiques, je vis, je vis distinctement, tout près de moi, la tige d’une de ces roses se plier, comme si une main invisible l’eût tordue, puis se casser comme si cette main l’eût cueillie ! Puis la fleur s’éleva, suivant la courbe qu’aurait décrite un bras en la portant vers une bouche, et elle resta suspendue dans l’air transparent, toute seule, immobile, effrayante tache rouge à trois pas de mes yeux. Éperdu, je me jetai sur elle pour la saisir ! Je ne trouvai rien ; elle avait disparu. Alors je fus pris d’une colère furieuse contre moi-même ; car il n’est pas permis à un homme raisonnable et sérieux d’avoir de pareilles hallucinations. Mais était-ce bien une hallucination ? Je me retournai pour chercher la tige, et je la retrouvai immédiatement sur l’arbuste, fraîchement brisée, entre les deux autres roses demeurées à la branche. Alors, je rentrai chez moi l’âme bouleversée ; car je suis certain, maintenant, certain comme de l’alternance des jours et des nuits, qu’il existe près de moi un être invisible, qui se nourrit de lait et d’eau, qui peut toucher aux choses, les prendre et les changer de place, doué par conséquent d’une nature matérielle, bien qu’imperceptible pour nos sens, et qui habite comme moi, sous mon toit… 7 août. – J’ai dormi tranquille. Il a bu l’eau de ma carafe, mais n’a point troublé mon sommeil. Je me demande si je suis fou. En me promenant, tantôt au grand soleil, le long de la rivière, des doutes me sont venus sur ma raison, non point des doutes vagues comme j’en avais jusqu’ici, mais des doutes précis, absolus. J’ai vu des fous ; j’en ai connu qui restaient intelligents, lucides, clairvoyants même sur toutes les choses de la vie, sauf sur un point. Ils parlaient de tout avec clarté, avec souplesse, avec profondeur, et soudain leur pensée touchant l’écueil de leur folie, s’y déchirait en pièces, s’éparpillait et sombrait dans cet océan effrayant et furieux, plein de vagues bondissantes, de brouillards, de bourrasques, qu’on nomme « la démence ». Certes, je me croirais fou, absolument fou, si je n’étais conscient, si je ne connaissais parfaitement mon état, si je ne le sondais en l’analysant avec une complète lucidité. Je ne serais donc, en somme, qu’un halluciné raisonnant. Un trouble inconnu se serait produit dans mon cerveau, un de ces troubles qu’essayent de noter et de préciser aujourd’hui les physiologistes ; et ce trouble aurait déterminé dans mon esprit, dans l’ordre et la logique de mes idées, une crevasse profonde. Des phénomènes semblables ont lieu dans le rêve qui nous promène à travers les fantasmagories les plus invraisemblables, sans que nous en soyons surpris, parce que l’appareil vérificateur, parce que le sens du contrôle est endormi ; tandis que la faculté imaginative veille et travaille. Ne se peut-il pas qu’une des imperceptibles touches du clavier cérébral se trouve paralysée chez moi ? Des hommes, à la suite d’accidents, perdent la mémoire des noms propres ou des verbes ou des chiffres, ou seulement des dates. Les localisations de toutes les parcelles de la pensée sont aujourd’hui prouvées. Or, quoi d’étonnant à ce que ma faculté de contrôler l’irréalité de certaines hallucinations, se trouve engourdie chez moi en ce moment ! Je songeais à tout cela en suivant le bord de l’eau. Le soleil couvrait de clarté la rivière, faisait la terre délicieuse, emplissait mon regard d’amour pour la vie, pour les hirondelles, dont l’agilité est une joie de mes yeux, pour les herbes de la rive dont le frémissement est un bonheur de mes oreilles. Peu à peu, cependant un malaise inexplicable me pénétrait. Une force, me semblait-il, une force occulte m’engourdissait, m’arrêtait, m’empêchait d’aller plus loin, me rappelait en arrière. J’éprouvais ce besoin douloureux de rentrer qui vous oppresse, quand on a laissé au logis un malade aimé, et que le pressentiment vous saisit d’une aggravation de son mal. Donc, je revins malgré moi, sûr que j’allais trouver, dans ma maison, une mauvaise nouvelle, une lettre ou une dépêche. Il n’y avait rien ; et je demeurai plus surpris et plus inquiet que si j’avais eu de nouveau quelque vision fantastique. 8 août. – J’ai passé hier une affreuse soirée. Il ne se manifeste plus, mais je le sens près de moi, m’épiant, me regardant, me pénétrant, me dominant et plus redoutable, en se cachant ainsi, que s’il signalait par des phénomènes surnaturels sa présence invisible et constante. J’ai dormi, pourtant. 9 août. – Rien, mais j’ai peur. 10 août. – Rien ; qu’arrivera-t-il demain ? 11 août. – Toujours rien ; je ne puis plus rester chez moi avec cette crainte et cette pensée entrées en mon âme ; je vais partir. 12 août, 10 heures du soir. – Tout le jour j’ai voulu m’en aller ; je n’ai pas pu. J’ai voulu accomplir cet acte de liberté si facile, si simple, – sortir – monter dans ma voiture pour gagner Rouen – je n’ai pas pu. Pourquoi ? 13 août. – Quand on est atteint par certaines maladies, tous les ressorts de l’être physique semblent brisés, toutes les énergies anéanties, tous les muscles relâchés, les os devenus mous comme la chair et la chair liquide comme de l’eau. J’éprouve cela dans mon être moral d’une façon étrange et désolante. Je n’ai plus aucune force, aucun courage, aucune domination sur moi, aucun pouvoir même de mettre en mouvement ma volonté. Je ne peux plus vouloir ; mais quelqu’un veut pour moi ; et j’obéis. 14 août. – Je suis perdu ! Quelqu’un possède mon âme et la gouverne ! quelqu’un ordonne tous mes actes, tous mes mouvements, toutes mes pensées. Je ne suis plus rien en moi, rien qu’un spectateur esclave et terrifié de toutes les choses que j’accomplis. Je désire sortir. Je ne peux pas. Il ne veut pas ; et je reste, éperdu, tremblant, dans le fauteuil où il me tient assis. Je désire seulement me lever, me soulever, afin de me croire encore maître de moi. Je ne peux pas ! Je suis rivé à mon siège ; et mon siège adhère au sol, de telle sorte qu’aucune force ne nous soulèverait. Puis, tout d’un coup, il faut, il faut, il faut que j’aille au fond de mon jardin cueillir des fraises et les manger. Et j’y vais. Je cueille des fraises et je les mange ! Oh ! mon Dieu ! Mon Dieu ! Mon Dieu ! Est-il un Dieu ? S’il en est un, délivrez-moi, sauvez-moi ! secourez-moi ! Pardon ! Pitié ! Grâce ! Sauvez-moi ! Oh ! quelle souffrance ! quelle torture ! quelle horreur ! 15 août. – Certes, voilà comment était possédée et dominée ma pauvre cousine, quand elle est venue m’emprunter cinq mille francs. Elle subissait un vouloir étranger entré en elle, comme une autre âme, comme une autre âme parasite et dominatrice. Est-ce que le monde va finir ? Mais celui qui me gouverne, quel est-il, cet invisible ? cet inconnaissable, ce rôdeur d’une race surnaturelle ? Donc les Invisibles existent ! Alors, comment depuis l’origine du monde ne se sont-ils pas encore manifestés d’une façon précise comme ils le font pour moi ? Je n’ai jamais rien lu qui ressemble à ce qui s’est passé dans ma demeure. Oh ! si je pouvais la quitter, si je pouvais m’en aller, fuir et ne pas revenir. Je serais sauvé, mais je ne peux pas. 16 août. – J’ai pu m’échapper aujourd’hui pendant deux heures, comme un prisonnier qui trouve ouverte, par hasard, la porte de son cachot. J’ai senti que j’étais libre tout à coup et qu’il était loin. J’ai ordonné d’atteler bien vite et j’ai gagné Rouen. Oh ! quelle joie de pouvoir dire à un homme qui obéit : « Allez à Rouen ! » Je me suis fait arrêter devant la bibliothèque et j’ai prié qu’on me prêtât le grand traité du docteur Hermann Herestauss sur les habitants inconnus du monde antique et moderne. Puis, au moment de remonter dans mon coupé, j’ai voulu dire : « À la gare ! » et j’ai crié, – je n’ai pas dit, j’ai crié – d’une voix si forte que les passants se sont retournés : « À la maison », et je suis tombé, affolé d’angoisse, sur le coussin de ma voiture. Il m’avait retrouvé et repris. 17 août. – Ah ! Quelle nuit ! quelle nuit ! Et pourtant il me semble que je devrais me réjouir. Jusqu’à une heure du matin, j’ai lu ! Hermann Herestauss, docteur en philosophie et en théogonie, a écrit l’histoire et les manifestations de tous les êtres invisibles rôdant autour de l’homme ou rêvés par lui. Il décrit leurs origines, leur domaine, leur puissance. Mais aucun d’eux ne ressemble à celui qui me hante. On dirait que l’homme, depuis qu’il pense, a pressenti et redouté un être nouveau, plus fort que lui, son successeur en ce monde, et que, le sentant proche et ne pouvant prévoir la nature de ce maître, il a créé, dans sa terreur, tout le peuple fantastique des êtres occultes, fantômes vagues nés de la peur. Donc, ayant lu jusqu’à une heure du matin, j’ai été m’asseoir ensuite auprès de ma fenêtre ouverte pour rafraîchir mon front et ma pensée au vent calme de l’obscurité. Il faisait bon, il faisait tiède ! Comme j’aurais aimé cette nuit-là autrefois ! Pas de lune. Les étoiles avaient au fond du ciel noir des scintillements frémissants. Qui habite ces mondes ? Quelles formes, quels vivants, quels animaux, quelles plantes sont là-bas ? Ceux qui pensent dans ces univers lointains, que savent-ils plus que nous ? Que peuvent-ils plus que nous ? Que voient-ils que nous ne connaissons point ? Un d’eux, un jour ou l’autre, traversant l’espace, n’apparaîtra-t-il pas sur notre terre pour la conquérir, comme les Normands jadis traversaient la mer pour asservir des peuples plus faibles ? Nous sommes si infirmes, si désarmés, si ignorants, si petits, nous autres, sur ce grain de boue qui tourne délayé dans une goutte d’eau. Je m’assoupis en rêvant ainsi au vent frais du soir. Or, ayant dormi environ quarante minutes, je rouvris les yeux sans faire un mouvement, réveillé par je ne sais quelle émotion confuse et bizarre. Je ne vis rien d’abord, puis, tout à coup, il me sembla qu’une page du livre resté ouvert sur ma table venait de tourner toute seule. Aucun souffle d’air n’était entré par ma fenêtre. Je fus surpris et j’attendis. Au bout de quatre minutes environ, je vis, je vis, oui, je vis de mes yeux une autre page se soulever et se rabattre sur la précédente, comme si un doigt l’eût feuilletée. Mon fauteuil était vide, semblait vide ; mais je compris qu’il était là, lui, assis à ma place, et qu’il lisait. D’un bond furieux, d’un bond de bête révoltée, qui va éventrer son dompteur, je traversai ma chambre pour le saisir, pour l’étreindre, pour le tuer !… Mais mon siège, avant que je l’eusse atteint, se renversa comme si on eût fui devant moi… ma table oscilla, ma lampe tomba et s’éteignit, et ma fenêtre se ferma comme si un malfaiteur surpris se fût élancé dans la nuit, en prenant à pleines mains les battants. Donc, il s’était sauvé ; il avait eu peur, peur de moi, lui ! Alors,… alors… demain… ou après,… ou un jour quelconque,… je pourrai donc le tenir sous mes poings, et l’écraser contre le sol ! Est-ce que les chiens, quelquefois, ne mordent point et n’étranglent pas leurs maîtres ? 18 août. – J’ai songé toute la journée. Oh ! oui, je vais lui obéir, suivre ses impulsions, accomplir toutes ses volontés, me faire humble, soumis, lâche. Il est le plus fort. Mais une heure viendra… 19 août. – Je sais… je sais… je sais tout ! Je viens de lire ceci dans la Revue du Monde scientifique : « Une nouvelle assez curieuse nous arrive de Rio de Janeiro. Une folie, une épidémie de folie, comparable aux démences contagieuses qui atteignirent les peuples d’Europe au moyen âge, sévit en ce moment dans la province de San-Paulo. Les habitants éperdus quittent leurs maisons, désertent leurs villages, abandonnent leurs cultures, se disant poursuivis, possédés, gouvernés comme un bétail humain par des êtres invisibles bien que tangibles, des sortes de vampires qui se nourrissent de leur vie, pendant leur sommeil, et qui boivent en outre de l’eau et du lait sans paraître toucher à aucun autre aliment. « M. le professeur Don Pedro Henriquez, accompagné de plusieurs savants médecins, est parti pour la province de San-Paulo, afin d’étudier sur place les origines et les manifestations de cette surprenante folie, et de proposer à l’Empereur les mesures qui lui paraîtront le plus propres à rappeler à la raison ces populations en délire. » Ah ! Ah ! je me rappelle, je me rappelle le beau trois-mâts brésilien qui passa sous mes fenêtres en remontant la Seine, le 8 mai dernier ! Je le trouvai si joli, si blanc, si gai ! L’Être était dessus, venant de là-bas, où sa race est née ! Et il m’a vu ! Il a vu ma demeure blanche aussi ; et il a sauté du navire sur la rive. Oh ! mon Dieu ! À présent, je sais, je devine. Le règne de l’homme est fini. Il est venu, Celui que redoutaient les premières terreurs des peuples naïfs, Celui qu’exorcisaient les prêtres inquiets, que les sorciers évoquaient par les nuits sombres, sans le voir apparaître encore, à qui les pressentiments des maîtres passagers du monde prêtèrent toutes les formes monstrueuses ou gracieuses des gnomes, des esprits, des génies, des fées, des farfadets. Après les grossières conceptions de l’épouvante primitive, des hommes plus perspicaces l’ont pressenti plus clairement. Mesmer l’avait deviné, et les médecins, depuis dix ans déjà, ont découvert, d’une façon précise, la nature de sa puissance avant qu’il l’eût exercée lui-même. Ils ont joué avec cette arme du Seigneur nouveau, la domination d’un mystérieux vouloir sur l’âme humaine devenue esclave. Ils ont appelé cela magnétisme, hypnotisme, suggestion… que sais-je ? Je les ai vus s’amuser comme des enfants imprudents avec cette horrible puissance ! Malheur à nous ! Malheur à l’homme ! Il est venu, le… le… comment se nomme-t-il… le… il me semble qu’il me crie son nom, et je ne l’entends pas… le… oui… il le crie… J’écoute… je ne peux pas… répète… le… Horla… J’ai entendu… le Horla… c’est lui… le Horla… il est venu !… Ah ! le vautour a mangé la colombe, le loup a mangé le mouton ; le lion a dévoré le buffle aux cornes aiguës ; l’homme a tué le lion avec la flèche, avec le glaive, avec la poudre ; mais le Horla va faire de l’homme ce que nous avons fait du cheval et du bœuf : sa chose, son serviteur et sa nourriture, par la seule puissance de sa volonté. Malheur à nous ! Pourtant, l’animal, quelquefois, se révolte et tue celui qui l’a dompté… moi aussi je veux… je pourrai… mais il faut le connaître, le toucher, le voir ! Les savants disent que l’œil de la bête, différent du nôtre, ne distingue point comme le nôtre… Et mon œil à moi ne peut distinguer le nouveau venu qui m’opprime. Pourquoi ? Oh ! je me rappelle à présent les paroles du moine du mont Saint-Michel : « Est-ce que nous voyons la cent-millième partie de ce qui existe ? Tenez, voici le vent qui est la plus grande force de la nature, qui renverse les hommes, abat les édifices, déracine les arbres, soulève la mer en montagnes d’eau, détruit les falaises et jette aux brisants les grands navires, le vent qui tue, qui siffle, qui gémit, qui mugit, l’avez-vous vu et pouvez-vous le voir : il existe pourtant ! » Et je songeais encore : mon œil est si faible, si imparfait, qu’il ne distingue même point les corps durs, s’ils sont transparents comme le verre !… Qu’une glace sans tain barre mon chemin, il me jette dessus comme l’oiseau entré dans une chambre se casse la tête aux vitres. Mille choses en outre le trompent et l’égarent ? Quoi d’étonnant, alors, à ce qu’il ne sache point apercevoir un corps nouveau que la lumière traverse. Un être nouveau ! pourquoi pas ? Il devait venir assurément ! pourquoi serions-nous les derniers ! Nous ne le distinguons point, ainsi que tous les autres créés avant nous ? C’est que sa nature est plus parfaite, son corps plus fin et plus fini que le nôtre, que le nôtre si faible, si maladroitement conçu, encombré d’organes toujours fatigués, toujours forcés comme des ressorts trop complexes, que le nôtre, qui vit comme une plante et comme une bête, en se nourrissant péniblement d’air, d’herbe et de viande, machine animale en proie aux maladies, aux déformations, aux putréfactions, poussive, mal réglée, naïve et bizarre, ingénieusement mal faite, œuvre grossière et délicate, ébauche d’être qui pourrait devenir intelligent et superbe. Nous sommes quelques-uns, si peu sur ce monde, depuis l’huître jusqu’à l’homme. Pourquoi pas un de plus, une fois accomplie la période qui sépare les apparitions successives de toutes les espèces diverses ? Pourquoi pas un de plus ? Pourquoi pas aussi d’autres arbres aux fleurs immenses, éclatantes et parfumant des régions entières ? Pourquoi pas d’autres éléments que le feu, l’air, la terre et l’eau ? – Ils sont quatre, rien que quatre, ces pères nourriciers des êtres ! Quelle pitié ! Pourquoi ne sont-ils pas quarante, quatre cents, quatre mille ! Comme tout est pauvre, mesquin, misérable ! avarement donné, sèchement inventé, lourdement fait ! Ah ! l’éléphant, l’hippopotame, que de grâce ! Le chameau que d’élégance ! Mais direz-vous, le papillon ! une fleur qui vole ! J’en rêve un qui serait grand comme cent univers, avec des ailes dont je ne puis même exprimer la forme, la beauté, la couleur et le mouvement. Mais je le vois… il va d’étoile en étoile, les rafraîchissant et les embaumant au souffle harmonieux et léger de sa course !… Et les peuples de là-haut le regardent passer, extasiés et ravis !… · · · · · · · · · · · · · · · · · · · · · · · · Qu’ai-je donc ? C’est lui, lui, le Horla, qui me hante, qui me fait penser ces folies ! Il est en moi, il devient mon âme ; je le tuerai ! 19 août. – Je le tuerai. Je l’ai vu ! je me suis assis hier soir, à ma table ; et je fis semblant d’écrire avec une grande attention. Je savais bien qu’il viendrait rôder autour de moi, tout près, si près que je pourrais peut-être le toucher, le saisir ? Et alors !… alors, j’aurais la force des désespérés ; j’aurais mes mains, mes genoux, ma poitrine, mon front, mes dents pour l’étrangler, l’écraser, le mordre, le déchirer. Et je le guettais avec tous mes organes surexcités. J’avais allumé mes deux lampes et les huit bougies de ma cheminée, comme si j’eusse pu, dans cette clarté, le découvrir. En face de moi, mon lit, un vieux lit de chêne à colonnes ; à droite, ma cheminée ; à gauche, ma porte fermée avec soin, après l’avoir laissée longtemps ouverte, afin de l’attirer ; derrière moi, une très haute armoire à glace, qui me servait chaque jour pour me raser, pour m’habiller, et où j’avais coutume de me regarder, de la tête aux pieds, chaque fois que je passais devant. Donc, je faisais semblant d’écrire, pour le tromper, car il m’épiait lui aussi ; et soudain, je sentis, je fus certain qu’il lisait par-dessus mon épaule, qu’il était là, frôlant mon oreille. Je me dressai, les mains tendues, en me tournant si vite que je faillis tomber. Eh ! bien ?… on y voyait comme en plein jour, et je ne me vis pas dans ma glace !… Elle était vide, claire, profonde, pleine de lumière ! Mon image n’était pas dedans… et j’étais en face, moi ! Je voyais le grand verre limpide du haut en bas. Et je regardais cela avec des yeux affolés ; et je n’osais plus avancer, je n’osais plus faire un mouvement, sentant bien pourtant qu’il était là, mais qu’il m’échapperait encore, lui dont le corps imperceptible avait dévoré mon reflet. Comme j’eus peur ! Puis voilà que tout à coup je commençai à m’apercevoir dans une brume, au fond du miroir, dans une brume comme à travers une nappe d’eau ; et il me semblait que cette eau glissait de gauche à droite, lentement, rendant plus précise mon image, de seconde en seconde. C’était comme la fin d’une éclipse. Ce qui me cachait ne paraissait point posséder de contours nettement arrêtés, mais une sorte de transparence opaque, s’éclaircissant peu à peu. Je pus enfin me distinguer complètement, ainsi que je le fais chaque jour en me regardant. Je l’avais vu ! L’épouvante m’en est restée, qui me fait encore frissonner. 20 août. – Le tuer, comment ? puisque je ne peux l’atteindre ? Le poison ? mais il me verrait le mêler à l’eau ; et nos poisons, d’ailleurs, auraient-ils un effet sur son corps imperceptible ? Non… non… sans aucun doute… Alors ?… alors ?… 21 août. – J’ai fait venir un serrurier de Rouen, et lui ai commandé pour ma chambre des persiennes de fer, comme en ont, à Paris, certains hôtels particuliers, au rez-de-chaussée, par crainte des voleurs. Il me fera, en outre, une porte pareille. Je me suis donné pour un poltron, mais je m’en moque !… · · · · · · · · · · · · · · · · · · · · · · · · 10 septembre. – Rouen, hôtel continental. C’est fait… c’est fait… mais est-il mort ? J’ai l’âme bouleversée de ce que j’ai vu. Hier donc, le serrurier ayant posé ma persienne et ma porte de fer, j’ai laissé tout ouvert jusqu’à minuit, bien qu’il commençât à faire froid. Tout à coup, j’ai senti qu’il était là, et une joie, une joie folle m’a saisi. Je me suis levé lentement, et j’ai marché à droite, à gauche, longtemps pour qu’il ne devinât rien ; puis j’ai ôté mes bottines et mis mes savates avec négligence ; puis j’ai fermé ma persienne de fer, et revenant à pas tranquilles vers la porte, j’ai fermé la porte aussi à double tour. Retournant alors vers la fenêtre, je la fixai par un cadenas, dont je mis la clef dans ma poche. Tout à coup, je compris qu’il s’agitait autour de moi, qu’il avait peur à son tour, qu’il m’ordonnait de lui ouvrir. Je faillis céder ; je ne cédai pas, mais m’adossant à la porte, je l’entre-bâillai, tout juste assez pour passer, moi, à reculons ; et comme je suis très grand ma tête touchait au linteau. J’étais sûr qu’il n’avait pu s’échapper et je l’enfermai, tout seul, tout seul ! Quelle joie ! Je le tenais ! Alors, je descendis, en courant ; je pris dans mon salon, sous ma chambre, mes deux lampes et je renversai toute l’huile sur le tapis, sur les meubles, partout ; puis j’y mis le feu, et je me sauvai, après avoir bien refermé, à double tour, la grande porte d’entrée. Et j’allai me cacher au fond de mon jardin, dans un massif de lauriers. Comme ce fut long ! comme ce fut long ! Tout était noir, muet, immobile ; pas un souffle d’air, pas une étoile, des montagnes de nuages qu’on ne voyait point, mais qui pesaient sur mon âme si lourds, si lourds. Je regardais ma maison, et j’attendais. Comme ce fut long ! Je croyais déjà que le feu s’était éteint tout seul, ou qu’il l’avait éteint, Lui, quand une des fenêtres d’en bas creva sous la poussée de l’incendie, et une flamme, une grande flamme rouge et jaune, longue, molle, caressante, monta le long du mur blanc et le baisa jusqu’au toit. Une lueur courut dans les arbres, dans les branches, dans les feuilles, et un frisson, un frisson de peur aussi ! Les oiseaux se réveillaient ; un chien se mit à hurler ; il me sembla que le jour se levait ! Deux autres fenêtres éclatèrent aussitôt, et je vis que tout le bas de ma demeure n’était plus qu’un effrayant brasier. Mais un cri, un cri horrible, suraigu, déchirant, un cri de femme passa dans la nuit, et deux mansardes s’ouvrirent ! J’avais oublié mes domestiques ! Je vis leurs faces affolées, et leurs bras qui s’agitaient !… Alors, éperdu d’horreur, je me mis à courir vers le village en hurlant : « Au secours ! au secours ! au feu ! au feu ! » Je rencontrai des gens qui s’en venaient déjà et je retournai avec eux, pour voir ! La maison, maintenant, n’était plus qu’un bûcher horrible et magnifique, un bûcher monstrueux, éclairant toute la terre, un bûcher où brûlaient des hommes, et où il brûlait aussi, Lui, Lui, mon prisonnier, l’Être nouveau, le nouveau maître, le Horla ! Soudain le toit tout entier s’engloutit entre les murs, et un volcan de flammes jaillit jusqu’au ciel. Par toutes les fenêtres ouvertes sur la fournaise, je voyais la cuve de feu, et je pensais qu’il était là, dans ce four, mort… — Mort ? Peut-être ?… Son corps ? son corps que le jour traversait n’était-il pas indestructible par les moyens qui tuent les nôtres ? S’il n’était pas mort ?… seul peut-être le temps a prise sur l’Être Invisible et Redoutable. Pourquoi ce corps transparent, ce corps inconnaissable, ce corps d’Esprit, s’il devait craindre, lui aussi, les maux, les blessures, les infirmités, la destruction prématurée ? La destruction prématurée ? toute l’épouvante humaine vient d’elle ! Après l’homme le Horla. – Après celui qui peut mourir tous les jours, à toutes les heures, à toutes les minutes, par tous les accidents, est venu celui qui ne doit mourir qu’à son jour, à son heure, à sa minute, parce qu’il a touché la limite de son existence ! Non… non… sans aucun doute, sans aucun doute… il n’est pas mort… Alors… alors… il va donc falloir que je me tue, moi !… |
Added tests/fr/perf.txt version [db23208f16].
cannot compute difference between binary files
Added tests/fr/perf_memo.txt version [94040e9e26].
> > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # MEMO OF PERFORMANCES # Shorter is better 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 0.4.10.2 4.7797 1.1617 0.8074 0.2343 0.2647 0.2749 0.6367 0.3463 0.5.0a 2015.08.28 4.6203 1.0860 0.7567 0.2213 0.2518 0.2635 0.6089 0.3315 0.5.0b 2015.09.21 4.2869 1.0140 0.6941 0.2061 0.2312 0.2471 0.5667 0.3124 0.5.0b 2015.09.21 17:42 4.307 1.016 0.6984 0.2066 0.2353 0.2479 0.5715 0.3157 0.05686 0.007637 0.5.0b 2015.09.23 22:54 4.47859 1.05899 0.732804 0.214195 0.243011 0.259232 0.598795 0.329411 0.0574977 0.00810443 0.5.0b3 2015.10.11 09:23 4.56807 1.07108 0.745156 0.21713 0.246066 0.263882 0.605003 0.331472 0.0585957 0.00798071 0.5.0b4 2015.10.25 10:36 4.68602 1.1036 0.816759 0.236306 0.263662 0.277191 0.632331 0.355515 0.059987 0.00801248 (py3.4) 0.5.0b4 2015.10.25 10:57 4.21442 0.991038 0.739702 0.212349 0.239072 0.251278 0.575609 0.318801 0.0531821 0.00738796 (py3.5) 0.5.0b6 2016.02.25 22:01 4.67677 1.09785 0.794943 0.225662 0.261311 0.274515 0.633468 0.347967 0.0592074 0.00853299 0.5.0b6 2016.03.03 11:22 4.60471 1.06554 0.774112 0.218736 0.252905 0.263989 0.610623 0.334882 0.0567706 0.00786996 0.5.0b8 2016.04.28 16:46 4.46168 1.07131 0.766851 0.215897 0.24811 0.252945 0.586484 0.318905 0.0538788 0.00748515 0.5.5 2016.05.19 17:57 4.48851 1.06935 0.766362 0.218503 0.250422 0.260964 0.604672 0.333179 0.0563006 0.00855781 0.5.7 2016.06.01 18:08 4.3773 1.04008 0.749191 0.2141 0.236444 0.245076 0.564722 0.307174 0.0540038 0.00705854 (option groups) 0.5.11 2016.10.09 16:14 4.53121 1.08698 0.760695 0.220858 0.242361 0.255862 0.606328 0.334436 0.0573431 0.00760688 0.5.12 2016.10.14 18:58 4.51895 1.0843 0.772805 0.22387 0.249411 0.261593 0.628802 0.339303 0.0570326 0.00805416 0.5.15 2017.01.22 11:44 4.85204 1.16134 0.770762 0.227874 0.244574 0.253305 0.58831 0.319987 0.0603996 0.00694786 0.5.15 2017.01.22 11:47 4.85593 1.15248 0.762924 0.22744 0.243461 0.254609 0.586741 0.317503 0.0588827 0.00701016 (unicode normalisation NFC) 0.5.15 2017.01.31 12:06 4.88227 1.18008 0.782217 0.232617 0.247672 0.257628 0.596903 0.32169 0.0603505 0.00695196 0.5.15 2017.02.05 10:10 4.90222 1.18444 0.786696 0.233413 0.25071 0.260214 0.602112 0.325235 0.0609932 0.00706897 |
Added tests/fr/text1.res.txt version [5f815593f6].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | Lorsqu'il est parti. ^^^^^^^ * 0:7 # 744p / apostrophe_typographique : Apostrophe typographique. > Suggestions : Lorsqu’ Le 15ᵉ du mois de mars . Le XXIᵉ siècle. 3ème tentative ! ° ^^ ^^^^^^^ * 22:24 # 278p / espaces_milieu_ligne : Espace(s) surnuméraire(s) à supprimer. > Suggestions : * 23:25 # 314p / typo_point_entre_deux_espaces : Pas d’espace avant un point. > Suggestions : . * 41:44 # 278p / espaces_milieu_ligne : Espace(s) surnuméraire(s) à supprimer. > Suggestions : * 44:48 # 1002s / typo_ordinaux : Nombre ordinal. > Suggestions : 3ᵉ | 3e Des pas derrière lui ... Très mauvais signe... Mais qui pourrait bien le suivre au beau milieu de ^^^ ^^^ * 21:24 # 590p / typo_points_suspension1 : Typographie : points de suspension. Utilisez le caractère dédié. > Suggestions : … * 43:46 # 590p / typo_points_suspension1 : Typographie : points de suspension. Utilisez le caractère dédié. > Suggestions : … la nuit, dans cette rue étroite dans le fin fond du port ? Et ce alors qu'il vient de réussir le ^^ ^^^ * 154:156 # 677p / nbsp_avant_double_ponctuation : Il manque un espace insécable. > Suggestions : ? * 169:172 # 744p / apostrophe_typographique : Apostrophe typographique. > Suggestions : qu’ coup dont il a rêvé toute sa vie! Qu'il ne lui reste plus qu'à disparaître -avec son butin- sans ^ ^^^ ^^^ * 227:228 # 676p / nbsp_ajout_avant_double_ponctuation : Il manque un espace insécable. > Suggestions : ! * 229:232 # 744p / apostrophe_typographique : Apostrophe typographique. > Suggestions : Qu’ * 253:256 # 744p / apostrophe_typographique : Apostrophe typographique. > Suggestions : qu’ laisser de trace ! Serait-ce l'un de ses nombreux collègues qui a eu la même idée que lui, l'a ^^ ^^ ^^ * 308:310 # 677p / nbsp_avant_double_ponctuation : Il manque un espace insécable. > Suggestions : ! * 321:323 # 744p / apostrophe_typographique : Apostrophe typographique. > Suggestions : l’ * 383:385 # 744p / apostrophe_typographique : Apostrophe typographique. > Suggestions : l’ observé en secret et a attendu cet instant précis pour lui dérober le fruit de son travail ? Ou ^^ ^^ * 441:443 # 278p / espaces_milieu_ligne : Espace(s) surnuméraire(s) à supprimer. > Suggestions : * 478:480 # 677p / nbsp_avant_double_ponctuation : Il manque un espace insécable. > Suggestions : ? bien seraient-ce plutôt les pas de l'un des innombrables gardiens de la paix de Marseille, prêt à ^^ ^^ * 507:509 # 278p / espaces_milieu_ligne : Espace(s) surnuméraire(s) à supprimer. > Suggestions : * 520:522 # 744p / apostrophe_typographique : Apostrophe typographique. > Suggestions : l’ faire claquer d'étincelantes menottes autour de ses poignets ? Son ordre -"Ne bougez plus!"- ^^ ^^ ^ ^^ * 597:599 # 744p / apostrophe_typographique : Apostrophe typographique. > Suggestions : d’ * 643:645 # 677p / nbsp_avant_double_ponctuation : Il manque un espace insécable. > Suggestions : ? * 657:658 # 713p / typo_guillemets_typographiques_doubles_ouvrants : Guillemets typographiques ouvrants. > Suggestions : « | “ * 672:673 # 676p / nbsp_ajout_avant_double_ponctuation : Il manque un espace insécable. > Suggestions : ! * 673:674 # 716p / typo_guillemets_typographiques_doubles_fermants : Guillemets typographiques fermants. > Suggestions : ” | » résonne déjà dans ses oreilles!Se sentant traqué , il se retourne brusquement et aperçoit un étroit ^^^ ^^ * 706:707 # 676p / nbsp_ajout_avant_double_ponctuation : Il manque un espace insécable. > Suggestions : ! * 707:709 # 554p / typo_espace_manquant_après2 : Il manque un espace. > Suggestions : Se * 724:726 # 322p / typo_virgule_entre_deux_espaces : Pas d’espace avant une virgule. > Suggestions : , passage. Sauvé ? En un éclair,il vire à droite et disparaît entre les deux bâtiments, manquant de ^^ ^^ * 790:792 # 278p / espaces_milieu_ligne : Espace(s) surnuméraire(s) à supprimer. > Suggestions : * 791:793 # 677p / nbsp_avant_double_ponctuation : Il manque un espace insécable. > Suggestions : ? * 807:809 # 552p / typo_espace_manquant_après1 : Il manque un espace. > Suggestions : il justesse de trébucher sur la poubelle renversée en plein milieu de la ruelle! ^^^ * 951:952 # 676p / nbsp_ajout_avant_double_ponctuation : Il manque un espace insécable. > Suggestions : ! * 952:954 # 284p / espaces_mélangés : Incohérence : l’espace insécable à côté de l’espace sécable n’a pas d’effet. > Suggestions : | Il tâtonne dans l'obscurité, cherchant ( désespérément )une issue. Tout à coup, son cœur se ^^^ ^^ ^^ ^^^ ^^ * 0:3 # 264p / espaces_début_ligne : Espace(s) en début de ligne à supprimer : utilisez les retraits de paragraphe (ou les tabulations à la rigueur). > Suggestions : * 19:21 # 744p / apostrophe_typographique : Apostrophe typographique. > Suggestions : l’ * 42:44 # 296p / typo_espace_après_signe_ouvrant : Pas d’espace après ce signe. > Suggestions : ( * 57:59 # 278p / espaces_milieu_ligne : Espace(s) surnuméraire(s) à supprimer. > Suggestions : * 58:60 # 297p / typo_espace_avant_signe_fermant : Pas d’espace avant ce signe. > Suggestions : ) * 59:60 # 307p / typo_parenthese_fermante_collée : Il manque un espace après la parenthèse. > Suggestions : ) * 77:79 # 284p / espaces_mélangés : Incohérence : l’espace insécable à côté de l’espace sécable n’a pas d’effet. > Suggestions : | glace : il vient de comprendre que la seule et unique façon de s'échapper de la petite cour ^^ ^^ * 102:104 # 678p / nbsp_avant_deux_points : Il manque un espace insécable. > Suggestions : : * 160:162 # 744p / apostrophe_typographique : Apostrophe typographique. > Suggestions : s’ intérieure au milieu de laquelle il se trouve est... de faire demi-tour et de repasser par le ^^ ^^^ * 221:223 # 278p / espaces_milieu_ligne : Espace(s) surnuméraire(s) à supprimer. > Suggestions : * 222:224 # 284p / espaces_mélangés : Incohérence : l’espace insécable à côté de l’espace sécable n’a pas d’effet. > Suggestions : | * 240:243 # 590p / typo_points_suspension1 : Typographie : points de suspension. Utilisez le caractère dédié. > Suggestions : … passage qu'il vient d'emprunter. Mais ,pendant ce temps, les bruits de pas se rapprochent ^^^ ^^ ^^ * 293:296 # 744p / apostrophe_typographique : Apostrophe typographique. > Suggestions : qu’ * 305:307 # 744p / apostrophe_typographique : Apostrophe typographique. > Suggestions : d’ * 322:324 # 323p / typo_virgule_collée_à_mot_suivant : Pas d’espace avant une virgule. Un espace après. > Suggestions : , inexorablement.Déjà, une sombre silhouette apparaît au coin de la rue. Ses yeux scrutent ^^^^ * 390:394 # 556p / typo_espace_manquant_après3 : Il manque un espace. > Suggestions : Déjà nerveusement l'obscurité, à la recherche du salut. Va-t-il vraiment échouer, maintenant, si près du ^^ * 477:479 # 744p / apostrophe_typographique : Apostrophe typographique. > Suggestions : l’ but, après tant d'efforts et toutes ces années passées à forger son plan ?Il s'adosse au mur contre ^^ ^^^^ ^^ * 580:582 # 744p / apostrophe_typographique : Apostrophe typographique. > Suggestions : d’ * 636:638 # 677p / nbsp_avant_double_ponctuation : Il manque un espace insécable. > Suggestions : ? * 638:640 # 554p / typo_espace_manquant_après2 : Il manque un espace. > Suggestions : Il * 641:643 # 744p / apostrophe_typographique : Apostrophe typographique. > Suggestions : s’ lequel il s'aplatit comme il le peut, dans l'espoir de pouvoir échapper aux regards de son ^^ ^^ * 674:676 # 744p / apostrophe_typographique : Apostrophe typographique. > Suggestions : s’ * 707:709 # 744p / apostrophe_typographique : Apostrophe typographique. > Suggestions : l’ poursuivant. Soudain, il décèle le grincement presque imperceptible d'une porte qui bat tout près ^^ * 823:825 # 744p / apostrophe_typographique : Apostrophe typographique. > Suggestions : d’ de lui au vent nocturne. Serait-il enfin sauvé? Il avance à pas feutrés en direction de la porte.. ^ ^^^^ * 899:900 # 676p / nbsp_ajout_avant_double_ponctuation : Il manque un espace insécable. > Suggestions : ? * 949:951 # 592p / typo_points_suspension3 : Typographie : un ou trois points ? > Suggestions : … | . * 951:953 # 314p / typo_point_entre_deux_espaces : Pas d’espace avant un point. > Suggestions : . . Mais sur quoi va-t-elle s'ouvrir ? ^^^ ^^ ^^ * 953:956 # 278p / espaces_milieu_ligne : Espace(s) surnuméraire(s) à supprimer. > Suggestions : * 980:982 # 744p / apostrophe_typographique : Apostrophe typographique. > Suggestions : s’ * 988:990 # 677p / nbsp_avant_double_ponctuation : Il manque un espace insécable. > Suggestions : ? Lorsqu il vint à la maison qu’elle détestait,[ils ] se disputèrent. ^^^^^^^ ^^ * 0:7 # 773p / typo_apostrophe_manquante : Il manque vraisemblablement une apostrophe. > Suggestions : Lorsqu’ * 49:51 # 297p / typo_espace_avant_signe_fermant : Pas d’espace avant ce signe. > Suggestions : ] |
Added tests/fr/text1.txt version [2d0a9593ec].
> > > > > > > | 1 2 3 4 5 6 7 | Lorsqu'il est parti. Le 15ᵉ du mois de mars . Le XXIᵉ siècle. 3ème tentative ! Des pas derrière lui ... Très mauvais signe... Mais qui pourrait bien le suivre au beau milieu de la nuit, dans cette rue étroite dans le fin fond du port ? Et ce alors qu'il vient de réussir le coup dont il a rêvé toute sa vie! Qu'il ne lui reste plus qu'à disparaître -avec son butin- sans laisser de trace ! Serait-ce l'un de ses nombreux collègues qui a eu la même idée que lui, l'a observé en secret et a attendu cet instant précis pour lui dérober le fruit de son travail ? Ou bien seraient-ce plutôt les pas de l'un des innombrables gardiens de la paix de Marseille, prêt à faire claquer d'étincelantes menottes autour de ses poignets ? Son ordre -"Ne bougez plus!"- résonne déjà dans ses oreilles!Se sentant traqué , il se retourne brusquement et aperçoit un étroit passage. Sauvé ? En un éclair,il vire à droite et disparaît entre les deux bâtiments, manquant de justesse de trébucher sur la poubelle renversée en plein milieu de la ruelle! Tout va bien. Aucune erreur à signaler. Il tâtonne dans l'obscurité, cherchant ( désespérément )une issue. Tout à coup, son cœur se glace : il vient de comprendre que la seule et unique façon de s'échapper de la petite cour intérieure au milieu de laquelle il se trouve est... de faire demi-tour et de repasser par le passage qu'il vient d'emprunter. Mais ,pendant ce temps, les bruits de pas se rapprochent inexorablement.Déjà, une sombre silhouette apparaît au coin de la rue. Ses yeux scrutent nerveusement l'obscurité, à la recherche du salut. Va-t-il vraiment échouer, maintenant, si près du but, après tant d'efforts et toutes ces années passées à forger son plan ?Il s'adosse au mur contre lequel il s'aplatit comme il le peut, dans l'espoir de pouvoir échapper aux regards de son poursuivant. Soudain, il décèle le grincement presque imperceptible d'une porte qui bat tout près de lui au vent nocturne. Serait-il enfin sauvé? Il avance à pas feutrés en direction de la porte.. . Mais sur quoi va-t-elle s'ouvrir ? Lorsqu il vint à la maison qu’elle détestait,[ils ] se disputèrent. Tout va bien. Aucune erreur à signaler. |
Added tests/fr/text2.res.txt version [4c753a53e0].
> > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | { "grammalecte": "0.5.12", "lang": "fr", "data" : [ {"lSpellingErrors": [], "lGrammarErrors": [{"aSuggestions": ["Lorsqu’"], "sType": "apos", "nStartX": 0, "sRuleId": "apostrophe_typographique", "sBefore": "", "nEndX": 7, "nStartY": 1, "sLineId": "523p", "nEndY": 1, "sMessage": "Apostrophe typographique.", "sUnderlined": "Lorsqu'", "sAfter": "il arrivas", "URL": ""}, {"aSuggestions": ["arriva"], "sType": "gv", "nStartX": 10, "sRuleId": "conj_il", "sBefore": "Lorsqu'il ", "nEndX": 17, "nStartY": 1, "sLineId": "7710s", "nEndY": 1, "sMessage": "Conjugaison erronée. Accord avec « il ». Le verbe devrait être à la 3ᵉ personne du singulier.", "sUnderlined": "arrivas", "sAfter": "", "URL": ""}, {"aSuggestions": ["arriva"], "sType": "gv", "nStartX": 10, "sRuleId": "conj_xxxas_sans_sujet", "sBefore": "Lorsqu'il ", "nEndX": 17, "nStartY": 1, "sLineId": "7959s", "nEndY": 1, "sMessage": "Incohérence. Ceci est un verbe à la 2ᵉ personne du singulier. Sujet (“tu” ou “toi qui”) introuvable.", "sUnderlined": "arrivas", "sAfter": "", "URL": ""}]}, {"lSpellingErrors": [], "lGrammarErrors": []}, {"lSpellingErrors": [{"sType": "WORD", "nStartX": 3, "nEndX": 8, "nEndY": 5, "nStartY": 5, "sValue": "Horla"}, {"sType": "WORD", "nStartX": 3, "nEndX": 8, "nEndY": 6, "nStartY": 6, "sValue": "Horla"}, {"sType": "WORD", "nStartX": 13, "nEndX": 23, "nEndY": 6, "nStartY": 6, "sValue": "Ollendorff"}], "lGrammarErrors": []}, {"lSpellingErrors": [], "lGrammarErrors": [{"aSuggestions": ["J’"], "sType": "apos", "nStartX": 37, "sRuleId": "apostrophe_typographique", "sBefore": "8 mai. – Quelle journées admirable ! ", "nEndX": 39, "nStartY": 9, "sLineId": "523p", "nEndY": 9, "sMessage": "Apostrophe typographique.", "sUnderlined": "J'", "sAfter": "ai passés toute la matinée étendu sur l’herbe, devant ma maison, sous l’énorme p", "URL": ""}, {"aSuggestions": ["Quelles"], "sType": "gn", "nStartX": 9, "sRuleId": "gn_quelle_accord", "sBefore": "– ", "nEndX": 15, "nStartY": 9, "sLineId": "3673s", "nEndY": 9, "sMessage": "Accord de nombre erroné : « journées » est au pluriel.", "sUnderlined": "Quelle", "sAfter": " journées admirable ! ", "URL": ""}, {"aSuggestions": ["étendue"], "sType": "gn", "nStartX": 66, "sRuleId": "gn_2m_det_fem_sing", "sBefore": "J'ai passés toute la matinée ", "nEndX": 72, "nStartY": 9, "sLineId": "3990s", "nEndY": 9, "sMessage": "Accord de genre erroné : « matinée » est féminin, « étendu » est masculin.", "sUnderlined": "étendu", "sAfter": " sur l’herbe, devant ma maison, sous l’énorme platane qui la couvre, l’abrite et", "URL": ""}, {"aSuggestions": ["passé"], "sType": "ppas", "nStartX": 42, "sRuleId": "ppas_pronom_avoir", "sBefore": "J'ai ", "nEndX": 48, "nStartY": 9, "sLineId": "7013s", "nEndY": 9, "sMessage": "Ce verbe devrait être un participe passé au masculin singulier.", "sUnderlined": "passés", "sAfter": " toute la matinée étendu sur l’herbe, devant ma maison, sous l’énorme platane qu", "URL": "http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais"}]}, {"lSpellingErrors": [], "lGrammarErrors": [{"aSuggestions": ["aime"], "sType": "gv", "nStartX": 2, "sRuleId": "conj_j", "sBefore": "J’", "nEndX": 7, "nStartY": 17, "sLineId": "7653s", "nEndY": 17, "sMessage": "Conjugaison erronée. Accord avec « je ». Le verbe devrait être à la 1ʳᵉ personne du singulier.", "sUnderlined": "aimes", "sAfter": " ma maison où j’ai grandi. ", "URL": ""}, {"aSuggestions": ["aime"], "sType": "gv", "nStartX": 2, "sRuleId": "conj_xxxes_sans_sujet", "sBefore": "J’", "nEndX": 7, "nStartY": 17, "sLineId": "7953s", "nEndY": 17, "sMessage": "Incohérence. Ceci est un verbe à la 2ᵉ personne du singulier. Sujet (“tu” ou “toi qui”) introuvable.", "sUnderlined": "aimes", "sAfter": " ma maison où j’ai grandi. ", "URL": ""}]}, {"lSpellingErrors": [], "lGrammarErrors": []}, {"lSpellingErrors": [], "lGrammarErrors": []}, {"lSpellingErrors": [], "lGrammarErrors": [{"aSuggestions": ["heures"], "sType": "gn", "nStartX": 10, "sRuleId": "gn_nombre_lettres_accord", "sBefore": "Vers onze ", "nEndX": 15, "nStartY": 30, "sLineId": "3626s", "nEndY": 30, "sMessage": "Accord de nombre erroné avec « onze » : « heure » devrait être au pluriel.", "sUnderlined": "heure", "sAfter": ", un long convoi de navires, traînés par un remorqueur, gros comme une mouche, e", "URL": ""}]}, {"lSpellingErrors": [{"sType": "WORD", "nStartX": 11, "nEndX": 20, "nEndY": 34, "nStartY": 34, "sValue": "goëlettes"}], "lGrammarErrors": [{"aSuggestions": ["saluais"], "sType": "gv", "nStartX": 15, "sRuleId": "conj_je_pronom", "sBefore": "Je le ", "nEndX": 22, "nStartY": 36, "sLineId": "7661s", "nEndY": 36, "sMessage": "Conjugaison erronée. Accord avec « Je ». Le verbe devrait être à la 1ʳᵉ personne du singulier.", "sUnderlined": "saluait", "sAfter": ", je ne sais pourquoi, tant ce navire me fit plaisir à voir.", "URL": ""}]}, {"lSpellingErrors": [], "lGrammarErrors": [{"aSuggestions": ["jours"], "sType": "gn", "nStartX": 76, "sRuleId": "gn_det_pluriel_accord", "sBefore": "– J’ai un peu de fièvre depuis quelques ", "nEndX": 80, "nStartY": 39, "sLineId": "3540s", "nEndY": 39, "sMessage": "Accord de nombre erroné : « jour » devrait être au pluriel.", "sUnderlined": "jour", "sAfter": ", et toi ; ", "URL": ""}]}, {"lSpellingErrors": [], "lGrammarErrors": [{"aSuggestions": ["confiance"], "sType": "gn", "nStartX": 17, "sRuleId": "gn_notre_votre_chaque_accord", "sBefore": "es influences mystérieuses qui changent en découragement notre bonheur et notre ", "nEndX": 27, "nStartY": 43, "sLineId": "3492s", "nEndY": 43, "sMessage": "Accord de nombre erroné : « confiances » devrait être au singulier.", "sUnderlined": "confiances", "sAfter": " en détresse. ", "URL": ""}, {"aSuggestions": ["descends"], "sType": "gv", "nStartX": 25, "sRuleId": "conj_je", "sBefore": "– Je ", "nEndX": 32, "nStartY": 46, "sLineId": "7657s", "nEndY": 46, "sMessage": "Conjugaison erronée. Accord avec « Je ». Le verbe devrait être à la 1ʳᵉ personne du singulier.", "sUnderlined": "descend", "sAfter": " le long de l’eau ; ", "URL": ""}]}, {"lSpellingErrors": [], "lGrammarErrors": [{"aSuggestions": ["Va"], "sType": "imp", "nStartX": 0, "sRuleId": "imp_va", "sBefore": "", "nEndX": 3, "nStartY": 57, "sLineId": "7357s", "nEndY": 57, "sMessage": "S’il s’agit d’un impératif, pas de “s”.", "sUnderlined": "Vas", "sAfter": " en enfer. ", "URL": ""}, {"aSuggestions": ["Va"], "sType": "gv", "nStartX": 0, "sRuleId": "conj_xxxas_sans_sujet", "sBefore": "", "nEndX": 3, "nStartY": 57, "sLineId": "7959s", "nEndY": 57, "sMessage": "Incohérence. Ceci est un verbe à la 2ᵉ personne du singulier. Sujet (“tu” ou “toi qui”) introuvable.", "sUnderlined": "Vas", "sAfter": " en enfer. ", "URL": ""}, {"aSuggestions": ["Va"], "sType": "imp", "nStartX": 0, "sRuleId": "imp_va", "sBefore": "", "nEndX": 3, "nStartY": 58, "sLineId": "7357s", "nEndY": 58, "sMessage": "S’il s’agit d’un impératif, pas de “s”.", "sUnderlined": "Vas", "sAfter": " en enfer.", "URL": ""}, {"aSuggestions": ["Va"], "sType": "gv", "nStartX": 0, "sRuleId": "conj_xxxas_sans_sujet", "sBefore": "", "nEndX": 3, "nStartY": 58, "sLineId": "7959s", "nEndY": 58, "sMessage": "Incohérence. Ceci est un verbe à la 2ᵉ personne du singulier. Sujet (“tu” ou “toi qui”) introuvable.", "sUnderlined": "Vas", "sAfter": " en enfer.", "URL": ""}]} ]} |
Added tests/fr/text2.txt version [e095819509].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | Lorsqu'il arrivas Guy de Maupassant Le Horla (1887) Le Horla, P. Ollendorff, 1895 [trente-cinquième édition] (pp. 3-68). 8 mai. – Quelle journées admirable ! J'ai passés toute la matinée étendu sur l’herbe, devant ma maison, sous l’énorme platane qui la couvre, l’abrite et l’ombrage tout entière. J’aime ce pays, et j’aime y vivre parce que j’y ai mes racines, ces profondes et délicates racines, qui attachent un homme à la terre où sont nés et morts ses aïeux, qui l’attachent à ce qu’on pense et à ce qu’on mange, aux usages comme aux nourritures, aux locutions locales, aux intonations des paysans, aux odeurs du sol, des villages et de l’air lui-même. J’aimes ma maison où j’ai grandi. De mes fenêtres, je vois la Seine qui coule, le long de mon jardin, derrière la route, presque chez moi, la grandes et large Seine, qui va de Rouen au Havre, couverte de bateaux qui passent. À gauche, là-bas, Rouen, la vaste ville aux toits bleus, sous le peuple pointu des clochers gothiques. Ils sont innombrables, frêles ou larges, dominés par la flèche de fonte de la cathédrale, et pleins de cloches qui sonnent dans l’air bleu des belles matinées, jetant jusqu’à moi leur doux et lointain bourdonnement de fer, leur chant d’airain que la brise m’apporte, tantôt plus fort et tantôt plus affaibli, suivant qu’elle s’éveille ou s’assoupit. Comme il faisait bon ce matin ! Vers onze heure, un long convoi de navires, traînés par un remorqueur, gros comme une mouche, et qui râlait de peine en vomissant une fumée épaisse, défila devant ma grille. Après deux goëlettes anglaises, dont le pavillon rouge ondoyait sur le ciel, venait un superbe trois-mats brésilien, tout blanc, admirablement propre et luisant. Je le saluait, je ne sais pourquoi, tant ce navire me fit plaisir à voir. 12 mai et quelques jours plus tard. – J’ai un peu de fièvre depuis quelques jour, et toi ; je me sens souffrant, ou plutôt je me sens triste. D’où viennent ces influences mystérieuses qui changent en découragement notre bonheur et notre confiances en détresse. On dirait que l’air, l’air invisible est plein d’inconnaissables Puissances, dont nous subissons les voisinages mystérieux. Je m’éveille plein de gaîté, avec des envies de chanter dans la gorge. – Pourquoi ? – Je descend le long de l’eau ; et soudain, après une courte promenade, je rentre désolé, comme si quelque malheur m’attendait chez moi. – Pourquoi ? – Es-ce un frisson de froid qui, frôlant ma peau, a ébranlé mes nerfs et assombri mon âme ? Est-ce la forme des nuages, ou la couleur du jour, la couleur des choses, si variable, qui, passant par mes yeux, a troublé ma pensée ? Sait-on ? Tout ce qui nous entoure, tout ce que nous voyons sans le regarder, tout ce que nous frôlons sans le connaître, tout ce que nous touchons sans le palper, tout ce que nous rencontrons sans le distinguer, a sur nous, sur nos organes et, par eux, sur nos idées, sur notre cœur lui-même, des effets rapides, surprenants et inexplicables ? Vas en enfer. Vas en enfer. |
Added tests/fr/text3.res.txt version [aa34293b03].
> > > | 1 2 3 | { "grammalecte": "0.5.12", "lang": "fr", "data" : [ {"lGrammarErrors": [{"nEndX": 7, "sMessage": "Apostrophe typographique.", "sRuleId": "apostrophe_typographique", "sLineId": "523p", "nStartY": 1, "sType": "apos", "URL": "", "aSuggestions": ["Lorsqu’"], "nEndY": 1, "nStartX": 0}], "lSpellingErrors": []} ]} |
Added tests/fr/text3.txt version [b5a437f8ee].
> | 1 | Lorsqu'il est parti. |
Added tests/fr/todo_détections.txt version [65a2d853cd].
> > > > > > > > | 1 2 3 4 5 6 7 8 | # DÉTECTIONS À FAIRE Il faut au préalable avoir définit un protocole. Il y a quatre cents mot dans la phrase. Ma mémoire a aussi été effacé. à condition qu’elle l’est jamais été Vous la voulait Nous le voleront |
Added tests/fr/todo_faux_positifs.txt version [2eb36c3f72].
> > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # TODO: FAUX POSITIFS un délire systématisé de persécution basé sur des interprétations Deirdre, elle aussi légèrement ostracisée, m’interrogea. Soudain, surgit l’un des ouvriers… Ainsi périt l’inconstant. puis repartit. Les créatures de l’enfer que nous avions rencontrées… Étaient-ils vraiment frère et sœur Cela fait des années qu’elle n’a pas donné signe de vie. Et si je te donne son nom, cela t’aiderait, Dworkin ? cet être que personne n’a vu ni senti à part elle Ce qu’ils sont influence leur regard sur moi. Ils sont âgés de 4 et 1 ans. Mille neuf cent quatre-vingt. (dépend du contexte) Le CAPES de mathématiques. La Mustang est une voiture. Il faut se bien connaître soi-même. C’est lui ou moi qui a gagné. Des copains plus vieux que moi qui fumaient. Des copains plus vieux que toi qui fumaient. André Juin était un sculpteur français. La bataille de Monte Cassino révèle le génie militaire du général Juin. |
Added tests/fr_test.py version [d8176c7c6e].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 | #! python3 # coding: UTF-8 import unittest import os import re import time try: import grammalecte.ibdawg as ibdawg import grammalecte.fr as gce import grammalecte.fr.conj as conj import grammalecte.fr.phonet as phonet import grammalecte.fr.mfsp as mfsp from grammalecte.echo import echo except ImportError: import sys sys.path.append(os.path.abspath('.')) sys.path.append(os.path.abspath('..')) import grammalecte.ibdawg as ibdawg import grammalecte.fr as gce import grammalecte.fr.conj as conj import grammalecte.fr.phonet as phonet import grammalecte.fr.mfsp as mfsp from grammalecte.echo import echo def _fuckBackslashUTF8 (s): "fuck that shit" return s.replace("\u2019", "'").replace("\u2013", "–").replace("\u2014", "—") class TestDictionary (unittest.TestCase): @classmethod def setUpClass (cls): cls.oDic = ibdawg.IBDAWG("French.bdic") def test_lookup (self): for sWord in ["branche", "Émilie"]: self.assertTrue(self.oDic.lookup(sWord), sWord) def test_lookup_failed (self): for sWord in ["Branche", "BRANCHE", "BranchE", "BRanche", "BRAnCHE", "émilie"]: self.assertFalse(self.oDic.lookup(sWord), sWord) def test_isvalid (self): for sWord in ["Branche", "branche", "BRANCHE", "Émilie", "ÉMILIE", "aujourd'hui", "aujourd’hui", "Aujourd'hui", "Aujourd’hui"]: self.assertTrue(self.oDic.isValid(sWord), sWord) def test_isvalid_failed (self): for sWord in ["BranchE", "BRanche", "BRAnCHE", "émilie", "éMILIE", "émiLie"]: self.assertFalse(self.oDic.isValid(sWord), sWord) class TestConjugation (unittest.TestCase): @classmethod def setUpClass (cls): pass def test_isverb (self): for sVerb in ["avoir", "être", "aller", "manger", "courir", "venir", "faire", "finir"]: self.assertTrue(conj.isVerb(sVerb), sVerb) for sVerb in ["berk", "a", "va", "contre", "super", "", "à"]: self.assertFalse(conj.isVerb(sVerb), sVerb) def test_hasconj (self): for sVerb, sTense, sWho in [("aller", ":E", ":2s"), ("avoir", ":Is", ":1s"), ("être", ":Ip", ":2p"), ("manger", ":Sp", ":3s"), ("finir", ":K", ":3p"), ("prendre", ":If", ":1p")]: self.assertTrue(conj.hasConj(sVerb, sTense, sWho), sVerb) def test_getconj (self): for sVerb, sTense, sWho, sConj in [("aller", ":E", ":2s", "va"), ("avoir", ":Iq", ":1s", "avais"), ("être", ":Ip", ":2p", "êtes"), ("manger", ":Sp", ":3s", "mange"), ("finir", ":K", ":3p", "finiraient"), ("prendre", ":If", ":1p", "prendrons")]: self.assertEqual(conj.getConj(sVerb, sTense, sWho), sConj, sVerb) class TestPhonet (unittest.TestCase): @classmethod def setUpClass (cls): cls.lSet = [ ["ce", "se"], ["ces", "ses", "sais", "sait"], ["cet", "cette", "sept", "set", "sets"], ["dé", "dés", "dès", "dais", "des"], ["don", "dons", "dont"], ["été", "étais", "était", "étai", "étés", "étaient"], ["faire", "fer", "fers", "ferre", "ferres", "ferrent"], ["fois", "foi", "foie", "foies"], ["la", "là", "las"], ["mes", "mets", "met", "mai", "mais"], ["mon", "mont", "monts"], ["mot", "mots", "maux"], ["moi", "mois"], ["notre", "nôtre", "nôtres"], ["or", "ors", "hors"], ["hou", "houe", "houes", "ou", "où", "houx"], ["peu", "peux", "peut"], ["ses", "ces", "sais", "sait"], ["son", "sons", "sont"], ["tes", "taie", "taies", "thé", "thés"], ["toi", "toit", "toits"], ["ton", "tons", "thon", "thons", "tond", "tonds"], ["voir", "voire"] ] def test_getsimil (self): for aSet in self.lSet: for sWord in aSet: self.assertListEqual(phonet.getSimil(sWord), sorted(aSet)) class TestMasFemSingPlur (unittest.TestCase): @classmethod def setUpClass (cls): cls.lPlural = [ ("travail", ["travaux"]), ("vœu", ["vœux"]), ("gentleman", ["gentlemans", "gentlemen"]) ] def test_getplural (self): for sSing, lPlur in self.lPlural: self.assertListEqual(mfsp.getMiscPlural(sSing), lPlur) class TestGrammarChecking (unittest.TestCase): @classmethod def setUpClass (cls): gce.load() cls._zError = re.compile(r"\{\{.*?\}\}") cls._aRuleTested = set() def test_parse (self): zOption = re.compile("^__([a-zA-Z0-9]+)__ ") bShowUntested = False for sf in [ "gc_test.txt" ]: with self.subTest(msg=sf): with open("./tests/fr/"+sf, "r", encoding="utf-8") as hSrc: for sLine in ( s for s in hSrc if not s.startswith("#") and s.strip() ): sLineNum = sLine[:10].strip() sLine = sLine[10:].strip() sOption = None m = zOption.search(sLine) if m: sLine = sLine[m.end():] sOption = m.group(1) if "->>" in sLine: sErrorText, sExceptedSuggs = self._splitTestLine(sLine) if sExceptedSuggs.startswith('"') and sExceptedSuggs.endswith('"'): sExceptedSuggs = sExceptedSuggs[1:-1] else: sErrorText = sLine.strip() sExceptedSuggs = "" sExpectedErrors = self._getExpectedErrors(sErrorText) sTextToCheck = sErrorText.replace("}}", "").replace("{{", "") sFoundErrors, sListErr, sFoundSuggs = self._getFoundErrors(sTextToCheck, sOption) self.assertEqual(sExpectedErrors, sFoundErrors, \ "\n# Line num: " + sLineNum + \ "\n> to check: " + _fuckBackslashUTF8(sTextToCheck) + \ "\n expected: " + sExpectedErrors + \ "\n found: " + sFoundErrors + \ "\n errors: \n" + sListErr) if sExceptedSuggs: self.assertEqual(sExceptedSuggs, sFoundSuggs, "\n# Line num: " + sLineNum + "\n> to check: " + _fuckBackslashUTF8(sTextToCheck) + "\n errors: \n" + sListErr) bShowUntested = True if bShowUntested: i = 0 for sOpt, sLineId, sRuleId in gce.listRules(): if sLineId not in self._aRuleTested and not re.match("[0-9]+[sp]$", sRuleId): echo(sRuleId, end= ", ") i += 1 if i: echo("\n[{} untested rules]".format(i)) def _splitTestLine (self, sLine): sText, sSugg = sLine.split("->>") return (sText.strip(), sSugg.strip()) def _getFoundErrors (self, sLine, sOption): if sOption: gce.setOption(sOption, True) aErrs = gce.parse(sLine) gce.setOption(sOption, False) else: aErrs = gce.parse(sLine) sRes = " " * len(sLine) sListErr = "" lAllSugg = [] for dErr in aErrs: sRes = sRes[:dErr["nStart"]] + "~" * (dErr["nEnd"] - dErr["nStart"]) + sRes[dErr["nEnd"]:] sListErr += " * {sLineId} / {sRuleId} at {nStart}:{nEnd}\n".format(**dErr) lAllSugg.append("|".join(dErr["aSuggestions"])) self._aRuleTested.add(dErr["sLineId"]) return sRes, sListErr, "|||".join(lAllSugg) def _getExpectedErrors (self, sLine): sRes = " " * len(sLine) for i, m in enumerate(self._zError.finditer(sLine)): nStart = m.start() - (4 * i) nEnd = m.end() - (4 * (i+1)) sRes = sRes[:nStart] + "~" * (nEnd - nStart) + sRes[nEnd:-4] return sRes from contextlib import contextmanager @contextmanager def timeblock (label, hDst): start = time.perf_counter() try: yield finally: end = time.perf_counter() print('{} : {}'.format(label, end - start)) hDst.write("{:<12.6}".format(end-start)) def perf (sVersion): print("\nPerformance tests") gce.load() aErrs = gce.parse("Texte sans importance… utile pour la compilation des règles avant le calcul des perfs.") with open("./tests/fr/perf.txt", "r", encoding="utf-8") as hSrc, \ open("./tests/fr/perf_memo.txt", "a", encoding="utf-8", newline="\n") as hDst: hDst.write("{:<12}{:<20}".format(sVersion, time.strftime("%Y.%m.%d %H:%M"))) for sText in ( s.strip() for s in hSrc if not s.startswith("#") and s.strip() ): with timeblock(sText[:sText.find(".")], hDst): aErrs = gce.parse(sText) hDst.write("\n") def main(): unittest.main() if __name__ == '__main__': main() |