Grammalecte  Diff

Differences From Artifact [10eeed75ab]:

To Artifact [20c78b7fa1]:


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
__<s>/typo(typo_guillemets_fermants_inverses)__  [  ]”(?=\w) <<- ->> " “"                           # Mettez des guillemets ouvrants plutôt que fermants.
__<s>/typo(typo_guillemets_ouvrants_inverses1)__ \w([«“][  ]) @@1 <<- -1>> " »|”"                   # Mettez des guillemets fermants plutôt qu’ouvrants.
__<s>/typo(typo_guillemets_ouvrants_inverses2)__ ([«“])[  ]*$ @@0 <<- -1>> " »|”"                   # Mettez des guillemets fermants plutôt qu’ouvrants.
__<s>/typo(typo_guillemets_ouvrants_inverses3)__ \w([  ][«“])[  ]*[!?,:;.…] @@1 <<- -1>> " »|”"     # Mettez des guillemets fermants plutôt qu’ouvrants.

TEST: « Le grand homme{{«}}
TEST: « La grande femme{{ «}} !
TEST: Eux et leurs{{ ”}}amis sont finis !
TEST: Vos amis{{“ }}et vous êtes finis !


# Cohérence des guillemets
__<s>/typo(typo_cohérence_guillemets1)__
    («)[^»“]+?(”)  @@0,$
    <<- not before(r"\w$") -1>> “                                                                   # Guillemet ouvrant différent du guillemet fermant (”).
    <<- not after(r"^\w") -2>> " »"                                                                 # Guillemet fermant différent du guillemet ouvrant («).
__<s>/typo(typo_cohérence_guillemets2)__
    (“)[^”«]+?(»)  @@0,$
    <<- not before(r"\w$") -1>> "« "                                                                # Guillemet ouvrant différent du guillemet fermant (»).
    <<- not after(r"^\w") -2>> ”                                                                    # Guillemet fermant différent du guillemet ouvrant (“).
__<s>/typo(typo_cohérence_guillemets3)__
    (“)[^”’“«]+?(’)(?!\w)  @@0,$
    <<- not before(r"\w$") -1>> "‘"                                                                 # Guillemet ouvrant différent du guillemet fermant (’).
    <<- -2>> ”                                                                                      # Guillemet fermant différent du guillemet ouvrant (“).
__<s>/typo(typo_cohérence_guillemets4)__
    (‘)[^’“«]+?(”)  @@0,$
    <<- not before(r"\w$") -1>> "“"                                                                 # Guillemet ouvrant différent du guillemet fermant (”).
    <<- not after(r"^\w") -2>> ’                                                                    # Guillemet fermant différent du guillemet ouvrant (‘).


TEST: C’est {{«}}stupide{{”}}.
TEST: Quel {{“}}emmerdeur{{»}}, ce gars-là.
TEST: Tu sais, {{‘}}ton ami{{”}} est venu.
TEST: Oui, je vois, mais c’est quand même un {{“}}salopard{{’}}.
TEST: « Je suis là.
TEST: — Oui, nous t’avons vu arriver. »
TEST: « J’en suis “malade”. »


# Tout contrôle des espaces doit se faire avant ce point.
# À partir d’ici, toute règle est susceptible de supprimer des caractères et les remplacer par des espaces ou des chaînes de longueur égale.




!!!
!!!
!!! Processeur: efface les ponctuations gênantes (URL, sigles, abréviations, IP, heures, etc.)      
!!!
!!!







|
|


<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<

|
<
<
<
<
<
<
<
|
|


|
>







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
__<s>/typo(typo_guillemets_fermants_inverses)__  [  ]”(?=\w) <<- ->> " “"                           # Mettez des guillemets ouvrants plutôt que fermants.
__<s>/typo(typo_guillemets_ouvrants_inverses1)__ \w([«“][  ]) @@1 <<- -1>> " »|”"                   # Mettez des guillemets fermants plutôt qu’ouvrants.
__<s>/typo(typo_guillemets_ouvrants_inverses2)__ ([«“])[  ]*$ @@0 <<- -1>> " »|”"                   # Mettez des guillemets fermants plutôt qu’ouvrants.
__<s>/typo(typo_guillemets_ouvrants_inverses3)__ \w([  ][«“])[  ]*[!?,:;.…] @@1 <<- -1>> " »|”"     # Mettez des guillemets fermants plutôt qu’ouvrants.

TEST: « Le grand homme{{«}}
TEST: « La grande femme{{ «}} !
TEST: Eux et leurs{{ ”}}amis{{”}} sont finis !
TEST: Vos {{“}}amis{{“ }}et vous êtes finis !




















#







#
# NOTE
# Tout contrôle des espaces doit se faire avant ce point.
# À partir d’ici, toute règle est susceptible de supprimer des caractères et les remplacer par des espaces ou des chaînes de longueur égale.
#
#


!!!
!!!
!!! Processeur: efface les ponctuations gênantes (URL, sigles, abréviations, IP, heures, etc.)      
!!!
!!!
561
562
563
564
565
566
567



568






































569
570



571
572
573
574
575
576
577
578
579
__<i]/latex(p_latex1)__     \\[a-z]+ <<- ~>> *
__<i>/latex(p_latex2)__     \\[,;/\\] <<- ~>> *
__<s>/latex(p_latex3)__     \{(?:abstract|align|cases|center|description|enumerate|equation|figure|flush(?:left|right)|gather|minipage|multline|quot(?:ation|e)|SaveVerbatim|table|tabular|thebibliography|[vV]erbatim|verse|wrapfigure)\} <<- ~>> *


!!
!!



!!!! Typographie, virgules, espaces insécables, unités de mesure…                                   






































!!
!!




### Écritures épicènes (attention aux modifs: brainfuck d’intensité non négligeable)
# La désambiguïsation est faite lors de la deuxième passe

__[i](typo_écriture_épicène_tous_toutes)__
    tous?[.(/·–—-]te[.)/·–—-]?s
    <<- option("typo") ->> tous et toutes|toutes et tous                                            # Écriture épicène dystypographique et imprononçable.
    <<- ~>> =normalizeInclusiveWriting(\0)








>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>


>
>
>

|







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
__<i]/latex(p_latex1)__     \\[a-z]+ <<- ~>> *
__<i>/latex(p_latex2)__     \\[,;/\\] <<- ~>> *
__<s>/latex(p_latex3)__     \{(?:abstract|align|cases|center|description|enumerate|equation|figure|flush(?:left|right)|gather|minipage|multline|quot(?:ation|e)|SaveVerbatim|table|tabular|thebibliography|[vV]erbatim|verse|wrapfigure)\} <<- ~>> *


!!
!!
!!!! Cohérence des guillemets                                                                        
!!
!!

__<s>/typo(typo_cohérence_guillemets1)__
    («)[^»“]+?(”)  @@0,$
    <<- not before(r"\w$") -1>> “                                                                   # Guillemet ouvrant différent du guillemet fermant (”).
    <<- not after(r"^\w") -2>> " »"                                                                 # Guillemet fermant différent du guillemet ouvrant («).
__<s>/typo(typo_cohérence_guillemets2)__
    (“)[^”«]+?(»)  @@0,$
    <<- not before(r"\w$") -1>> "« "                                                                # Guillemet ouvrant différent du guillemet fermant (»).
    <<- not after(r"^\w") -2>> ”                                                                    # Guillemet fermant différent du guillemet ouvrant (“).
__<s>/typo(typo_cohérence_guillemets3)__
    (“)[^”’“«]+?(’)(?!\w)  @@0,$
    <<- not before(r"\w$") -1>> "‘"                                                                 # Guillemet ouvrant différent du guillemet fermant (’).
    <<- -2>> ”                                                                                      # Guillemet fermant différent du guillemet ouvrant (“).
__<s>/typo(typo_cohérence_guillemets4)__
    (‘)[^’“«]+?(”)  @@0,$
    <<- not before(r"\w$") -1>> "“"                                                                 # Guillemet ouvrant différent du guillemet fermant (”).
    <<- not after(r"^\w") -2>> ’                                                                    # Guillemet fermant différent du guillemet ouvrant (‘).

TEST: C’est {{«}}stupide{{”}}.
TEST: Quel {{“}}emmerdeur{{»}}, ce gars-là.
TEST: Tu sais, {{‘}}ton ami{{”}} est venu.
TEST: Oui, je vois, mais c’est quand même un {{“}}salopard{{’}}.
TEST: « Je suis là.
TEST: — Oui, nous t’avons vu arriver. »
TEST: « J’en suis “malade”. »


__[i]/typo(typo_guillemets_ouvrants_non_fermés)__
    (“)\w[^”"»]+$  @@0
    <<- -1>> _                                                                                      # Guillemets fermants introuvables dans la suite du paragraphe.
__[i]/typo(typo_guillemets_fermants_non_ouverts)__
    ^[^“„«"]+\w(”)  @@$
    <<- -1>> _                                                                                      # Guillemets ouvrants introuvables dans ce paragraphe.

TEST: C’était mon affaire{{”}}.
TEST: C’est {{“}}compliqué.



!!
!!
!!!! Écritures épicènes dystypographiques                                                           
!!
!!

# (attention aux modifs: brainfuck d’intensité non négligeable)
# La désambiguïsation est faite lors de la deuxième passe

__[i](typo_écriture_épicène_tous_toutes)__
    tous?[.(/·–—-]te[.)/·–—-]?s
    <<- option("typo") ->> tous et toutes|toutes et tous                                            # Écriture épicène dystypographique et imprononçable.
    <<- ~>> =normalizeInclusiveWriting(\0)

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
    <<- option("typo") and (\1 == "un" or \1 == "Un") ->> un ou une|une ou un                       # Écriture épicène imprononçable. Préférez écrire lisiblement.
    <<- __else__ and option("typo") and not \0.endswith("·e") ->> \1·e                              # Écriture épicène. Utilisez un point médian.
    <<- ~>> \1-e

TEST: je suis {{déconsidéré.e}} par ma hiérarchie.
TEST: il faut en parler à l’{{auteur(e)}} et à son agent.








# Majuscules après un point
__[s]/maj(majuscule_après_point)__
    ({w_2})[.] ([a-zéàèî]\w*)  @@0,$
    <<- not re.search("(?i)^(?:etc|[A-Z]|chap|cf|fig|hab|litt|circ|coll|r[eé]f|étym|suppl|bibl|bibliogr|cit|op|vol|déc|nov|oct|janv|juil|avr|sept)$", \1)
    and morph(\1, ":", False) and morph(\2, ":", False)
    -2>> =\2.capitalize()                                                                           # Après un point, une majuscule est généralement requise.

TEST: Je suis là. {{viens}}.                                              ->> Viens
TEST: Ils sont devenus idiots. {{c}}’est peine perdue.

__[s]/maj(majuscule_en_début_phrase)__
    ^ *([a-zéèâàô][\w-]+)  @@$
    <<- after("\w\w[.] +\w+") -1>> =\1.capitalize()                                                 # Majuscule en début de phrase, sauf éventuellement lors d’une énumération.

TEST: {{je}} suis disponible quand tu veux. Mais pas aujourd’hui.








## virgules manquantes
__[i>/virg(virgule_manquante_avant_etc)__   {w_1}( etc[.])  @@$ <<- -1>> , etc.                     # Avant « etc. », il faut mettre une virgule.
__[i>/virg(virgule_manquante_avant_car)__
    ({w_1})( car)(?= (?:j[e’]|tu|ils?|nous|vous|elles?|on|les?|la|ces?|des?|cette|[mts](?:on|a))\b)  @@0,$
    <<- not morph(\1, ":[DR]", False) -2>> , car
    # Si « car » est la conjonction de coordination, une virgule est peut-être souhaitable.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=3447
__[i>/virg(virgule_manquante_avant_mais)__
    {w_1}( mais)(?= (?:j[e’]|tu|ils?|elles?|on|ces?|des?|cette|[mts](?:on|a))\b)  @@$
    <<- -1>> , mais
    # Si « mais » est la conjonction de coordination, une virgule est souhaitable si elle introduit une nouvelle proposition.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=3445

TEST: Un chien, un chat{{ etc.}}                                          ->> , etc.
TEST: Je suis fatigué{{ car}} ils ont joué toute la nuit.                 ->> , car
TEST: Je suis fatigué{{ mais}} il a joué toute la nuit.                   ->> , mais


#__virg__  , ({w_1})
#   <<- morphex(\1, ":[123][sp]", ":(?:N|E|A|W|G|M[12])") and not before(",")
#   ->> =0[1:]    # Un verbe ne doit pas être séparé du sujet, sauf éventuellement par une incise. (Et ce verbe n’est pas non plus un impératif.) [Sac à bugs]
__<s>/virg(virgule_point_fin_dialogue)__    ([.] » )[a-zéà]  @@0 <<- -1>> " », | » "
    # Ou il faut une virgule (exemple : « Je viens », dit-il). Ou le point est superflu. Ou il faut une majuscule sur le mot suivant.
__<s>/virg(virgule_fin_dialogue)__          (, »,? )[a-zéà]  @@0 <<- -1>> " », | » "                # Virgule mal placée ou superflue.


TEST: « Ça suffit{{. » }}dit-elle.
TEST: « J’en ai plus qu’assez{{, » }}dis-je.
TEST: {{Julien}} donne-moi le sel.
TEST: dès son premier rendez-vous au centre
TEST: Depuis combien de temps fumez-vous ?








>
>
>
>
>
>

















>
>
>
>
>
>

















|
<
<
|
|
|
>







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
    <<- option("typo") and (\1 == "un" or \1 == "Un") ->> un ou une|une ou un                       # Écriture épicène imprononçable. Préférez écrire lisiblement.
    <<- __else__ and option("typo") and not \0.endswith("·e") ->> \1·e                              # Écriture épicène. Utilisez un point médian.
    <<- ~>> \1-e

TEST: je suis {{déconsidéré.e}} par ma hiérarchie.
TEST: il faut en parler à l’{{auteur(e)}} et à son agent.


!!
!!
!!!! Majuscules manquantes                                                                          
!!
!!

# Majuscules après un point
__[s]/maj(majuscule_après_point)__
    ({w_2})[.] ([a-zéàèî]\w*)  @@0,$
    <<- not re.search("(?i)^(?:etc|[A-Z]|chap|cf|fig|hab|litt|circ|coll|r[eé]f|étym|suppl|bibl|bibliogr|cit|op|vol|déc|nov|oct|janv|juil|avr|sept)$", \1)
    and morph(\1, ":", False) and morph(\2, ":", False)
    -2>> =\2.capitalize()                                                                           # Après un point, une majuscule est généralement requise.

TEST: Je suis là. {{viens}}.                                              ->> Viens
TEST: Ils sont devenus idiots. {{c}}’est peine perdue.

__[s]/maj(majuscule_en_début_phrase)__
    ^ *([a-zéèâàô][\w-]+)  @@$
    <<- after("\w\w[.] +\w+") -1>> =\1.capitalize()                                                 # Majuscule en début de phrase, sauf éventuellement lors d’une énumération.

TEST: {{je}} suis disponible quand tu veux. Mais pas aujourd’hui.


!!
!!
!!!! Typographie, virgules, espaces insécables, unités de mesure…                                   
!!
!!

## virgules manquantes
__[i>/virg(virgule_manquante_avant_etc)__   {w_1}( etc[.])  @@$ <<- -1>> , etc.                     # Avant « etc. », il faut mettre une virgule.
__[i>/virg(virgule_manquante_avant_car)__
    ({w_1})( car)(?= (?:j[e’]|tu|ils?|nous|vous|elles?|on|les?|la|ces?|des?|cette|[mts](?:on|a))\b)  @@0,$
    <<- not morph(\1, ":[DR]", False) -2>> , car
    # Si « car » est la conjonction de coordination, une virgule est peut-être souhaitable.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=3447
__[i>/virg(virgule_manquante_avant_mais)__
    {w_1}( mais)(?= (?:j[e’]|tu|ils?|elles?|on|ces?|des?|cette|[mts](?:on|a))\b)  @@$
    <<- -1>> , mais
    # Si « mais » est la conjonction de coordination, une virgule est souhaitable si elle introduit une nouvelle proposition.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=3445

TEST: Un chien, un chat{{ etc.}}                                          ->> , etc.
TEST: Je suis fatigué{{ car}} ils ont joué toute la nuit.                 ->> , car
TEST: Je suis fatigué{{ mais}} il a joué toute la nuit.                   ->> , mais





__<s>/virg(virgule_point_fin_dialogue)__
    ([.] » )[a-zéà]  @@0 <<- -1>> " », | » "             # Ou il faut une virgule (exemple : « Je viens », dit-il). Ou le point est superflu. Ou il faut une majuscule sur le mot suivant.
__<s>/virg(virgule_fin_dialogue)__
    (, »,? )[a-zéà]  @@0 <<- -1>> " », | » "                                            # Virgule mal placée ou superflue.

TEST: « Ça suffit{{. » }}dit-elle.
TEST: « J’en ai plus qu’assez{{, » }}dis-je.
TEST: {{Julien}} donne-moi le sel.
TEST: dès son premier rendez-vous au centre
TEST: Depuis combien de temps fumez-vous ?

1078
1079
1080
1081
1082
1083
1084

1085
1086
1087
1088
1089
1090
1091
    ({w_4})[  ,.;!?:].*[  ](\1)  @@0,$
    <<- not morph(\1, ":(?:G|V0)|>(?:t(?:antôt|emps|rès)|loin|souvent|parfois|quelquefois|côte|petit|même) ", False) and not \1[0].isupper()
    -2>> _                                                      # Dans ce paragraphe, répétition de « \1 » (à gauche).
    <<- __also__ -1>> _                                         # Dans ce paragraphe, répétition de « \1 » (à droite).

TEST: __redon1__ Tu es son {{avenir}}. Et lui aussi est ton {{avenir}}.
TEST: __redon1__ Car parfois il y en a. Mais parfois il n’y en a pas.



!!!
!!!
!!! Processeur: Dernier nettoyage avant coupure du paragraphe en phrases                            
!!!
!!!







>







1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
    ({w_4})[  ,.;!?:].*[  ](\1)  @@0,$
    <<- not morph(\1, ":(?:G|V0)|>(?:t(?:antôt|emps|rès)|loin|souvent|parfois|quelquefois|côte|petit|même) ", False) and not \1[0].isupper()
    -2>> _                                                      # Dans ce paragraphe, répétition de « \1 » (à gauche).
    <<- __also__ -1>> _                                         # Dans ce paragraphe, répétition de « \1 » (à droite).

TEST: __redon1__ Tu es son {{avenir}}. Et lui aussi est ton {{avenir}}.
TEST: __redon1__ Car parfois il y en a. Mais parfois il n’y en a pas.



!!!
!!!
!!! Processeur: Dernier nettoyage avant coupure du paragraphe en phrases                            
!!!
!!!