Grammalecte  Check-in [d6f8f5c533]

Overview
Comment:[fx] update: lexicon editor, use verb pattern, + participes passés
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fx
Files: files | file ages | folders
SHA3-256: d6f8f5c533b2cfd79d4fd64ca56abcbb323c1cef72dad1d2f2cd65cf48dc78c1
User & Date: olr on 2018-01-29 19:53:43
Other Links: manifest | tags
Context
2018-01-30
12:38
[fr] pt: faire grand bruit check-in: 28d0121978 user: olr tags: fr, trunk
2018-01-29
19:53
[fx] update: lexicon editor, use verb pattern, + participes passés check-in: d6f8f5c533 user: olr tags: fx, trunk
09:54
[fx] lexicon editor: conjugate a verb according to another verb check-in: d804292a86 user: olr tags: fx, trunk
Changes

Modified gc_lang/fr/modules-js/conj.js from [5b98fc996d] to [4a1c359666].

   191    191           this.sVerb = sVerb;
   192    192           this.sVerbAux = "";
   193    193           this._sRawInfo = conj.getVtyp(sVerbPattern);
   194    194           this.sInfo = this._readableInfo(this._sRawInfo);
   195    195           this._tTags = conj._getTags(sVerbPattern);
   196    196           this._tTagsAux = conj._getTags(this.sVerbAux);
   197    197           this.bProWithEn = (this._sRawInfo[5] === "e");
          198  +        this.cGroup = this._sRawInfo[0];
   198    199           this.dConj = new Map ([
   199    200               [":Y", new Map ([
   200    201                   ["label", "Infinitif"],
   201    202                   [":", sVerb]
   202    203               ])],
   203    204               [":P", new Map ([
   204    205                   ["label", "Participe présent"],

Modified gc_lang/fr/modules/conj.py from [2a47439b95] to [75ccfbe917].

   160    160           self.sVerb = sVerb
   161    161           self.sVerbAux = ""
   162    162           self._sRawInfo = getVtyp(sVerbPattern)
   163    163           self.sInfo = self._readableInfo()
   164    164           self.bProWithEn = (self._sRawInfo[5] == "e")
   165    165           self._tTags = _getTags(sVerbPattern)
   166    166           self._tTagsAux = _getTags(self.sVerbAux)
   167         -
          167  +        self.cGroup = self._sRawInfo[0];
   168    168           self.dConj = {
   169    169               ":Y": {
   170    170                   "label": "Infinitif",
   171    171                   ":": sVerb,
   172    172               },
   173    173               ":P": {
   174    174                   "label": "Participe présent",

Modified gc_lang/fr/webext/panel/lex_conj_data.js from [0a2c626447] to [465cbcd5b7].

     5      5   // beta stage, unfinished, may be useless or the root for a new way to generate flexions…
     6      6   
     7      7   /*
     8      8       Règles de conjugaison
     9      9   */
    10     10   
    11     11   const oConj = {
           12  +    "V1_ppas": {
           13  +        "var": [
           14  +            [2,     "é",           ":Q:A:1ŝ:m:s/*",     false],
           15  +            [2,     "és",          ":Q:A:m:p/*",        false],
           16  +            [2,     "ée",          ":Q:A:f:s/*",        false],
           17  +            [2,     "ées",         ":Q:A:f:p/*",        false],
           18  +        ],
           19  +        "invar": [
           20  +            [2,     "é",           ":Q:e:i/*",          false],
           21  +        ]
           22  +    },
           23  +
           24  +    "V2_ppas": {
           25  +        "var": [
           26  +            [2,     "i",           ":Q:A:m:s/*",        false],
           27  +            [2,     "is",          ":Q:A:m:p/*",        false],
           28  +            [2,     "ie",          ":Q:A:f:s/*",        false],
           29  +            [2,     "ies",         ":Q:A:f:p/*",        false],
           30  +        ],
           31  +        "invar": [
           32  +            [2,     "i",           ":Q:e:i/*",          false],
           33  +        ]
           34  +    },
           35  +
    12     36       // deuxième groupe (le seul groupe régulier)
    13     37       "V2": [
    14     38           [2,     "ir",           ":Y/*",             false],
    15     39           [2,     "issant",       ":P/*",             false],
    16     40           [2,     "is",           ":Ip:Is:1s:2s/*",   false],
    17     41           [2,     "it",           ":Ip:Is:3s/*",      false],
    18     42           [2,     "issons",       ":Ip:1p/*",         false],

Modified gc_lang/fr/webext/panel/lex_editor.html from [27635ef8a4] to [66c585ccb9].

   161    161                                   <details>
   162    162                                       <div class="container">
   163    163                                           <div class="examples_true">J’ai mangé.<br/>J’ai prié.</div>
   164    164                                           <div class="examples_false">Je suis mangé.<br/>Je suis prié.</div>
   165    165                                       </div>
   166    166                                   </details>
   167    167                               </div>
          168  +
          169  +                            <div class="block">
          170  +                                <h3><input type="checkbox" id="up_partpas" checked /><label for="up_partpas"> participes passés variables</label></h3>
          171  +                                <p>Cette option est ignorée si vous utilisez un verbe modèle.</p>
          172  +                            </div>
   168    173   
   169    174                               <div class="block">
   170    175                                   <h3>Verbe modèle [optionnel]</h3>
   171         -                                <p>Ce n’est pas nécessaire pour la très grande majorité des verbes du 1ᵉʳ groupe et du 2ᵉ groupe. Si les formes fléchies engendrées automatiquement ne vous satisfont pas, vous pouvez indiquer le verbe qui doit servir de modèle pour la conjugaison.</p>
   172         -                                <input type="text" id="conj_rules_like" name="conj_rules_like" maxlength="60" value="" placeholder="verbe modèle" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ-]+$" />
          176  +                                <p>Indiquer un verbe qui doit servir de modèle n’est pas nécessaire pour la très grande majorité des verbes du 1ᵉʳ groupe et du 2ᵉ groupe. Failes-le seulement si les formes fléchies engendrées automatiquement ne vous satisfont pas.</p>
          177  +                                <input type="text" id="verb_pattern" name="verb_pattern" maxlength="60" value="" placeholder="verbe modèle" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ-]+$" />
   173    178                                   <details>
   174    179                                       <p>Il est fortement recommandé d’appliquer les règles d’un verbe du même groupe que celui que vous créez. Mais aucune restriction n’est imposée.</p>
   175         -                                    <p>Classification des groupes :</p>
          180  +                                    <p><b>Classification des groupes :</b></p>
   176    181                                       <ul>
   177         -                                        <li>1ᵉʳ groupe : verbes finissant par -<i>er</i>. Attention : contrairement au préjugé commun, ce groupe est irrégulier. Beaucoup de verbes voient leur racine modifiée dans certaines formes conjuguées :
          182  +                                        <li><b>1ᵉʳ groupe</b> : verbes finissant par -<i>er</i>. Attention : contrairement au préjugé commun, ce groupe est irrégulier. Beaucoup de verbes voient leur racine modifiée dans certaines formes conjuguées :
   178    183                                           <ul>
   179    184                                               <li>ajout ou modification de diacritiques (verbes finissant par -<i>cer</i>, -<i>ecer</i>, -<i>emer</i>, -<i>ener</i>, -<i>eper</i>, -<i>erer</i>, -<i>eser</i>, -<i>ever</i>, -<i>evrer</i>, -<i>eler</i>, -<i>eter</i>, -<i>ébrer</i>, -<i>écer</i>, -<i>écher</i>, -<i>écrer</i>, -<i>éder</i>, -<i>éger</i>, -<i>égler</i>, -<i>égner</i>, -<i>égrer</i>, -<i>éguer</i>, -<i>éler</i>, -<i>émer</i>, -<i>éner</i>, -<i>éper</i>, -<i>équer</i>, -<i>érer</i>, -<i>éser</i>, -<i>éter</i>, -<i>étrer</i>, -<i>évrer</i>, -<i>éyer</i>),</li>
   180    185                                               <li>un ‹e› euphonique est ajouté sur la plupart des verbes finissant par -<i>ger</i>,</li>
   181    186                                               <li>certains verbes finissant par -<i>yer</i> remplacent éventuellement le ‹y› par un ‹i›,</li>
   182    187                                               <li>doublement irrégulier de certaines consonnes (<i>geler</i> ne se conjugue pas comme <i>appeler</i>, <i>acheter</i> ne se conjugue pas comme <i>jeter</i>)</li>
   183    188                                               <li>irrégularités diverses (<i>aller</i>, <i>envoyer</i>, <i>renvoyer</i>)…
   184    189                                           </ul></li>
   185         -                                        <li>2ᵉ groupe : verbes finissant par -<i>ir</i>. Ce groupe est de loin le plus régulier. Mais de nombreux verbes finissant par -<i>ir</i> appartiennent au 3ᵉ groupe.</li>
   186         -                                        <li>3ᵉ groupe. Autres verbes irréguliers.</li>
          190  +                                        <li><b>2ᵉ groupe</b> : verbes finissant par -<i>ir</i>. Ce groupe est de loin le plus régulier. Mais de nombreux verbes finissant par -<i>ir</i> appartiennent au 3ᵉ groupe.</li>
          191  +                                        <li><b>3ᵉ groupe</b>. Autres verbes irréguliers.</li>
   187    192                                           <li>Les verbes <i>être</i> et <i>avoir</i> n’appartiennent à aucun groupe. Il est recommandé de ne pas s’en servir comme modèle.</li>
   188    193                                       </ul>
   189    194                                   </details>
   190    195                               </div>
   191    196                           </div>
   192    197   
   193    198                           <div id="section_adverbe" class="section">

Modified gc_lang/fr/webext/panel/lex_editor.js from [4723ccb4db] to [c815154404].

    30     30   
    31     31   
    32     32   document.getElementById("lexicon_button").addEventListener("click", () => { oPage.showPage("lexicon"); }, false);
    33     33   document.getElementById("add_word_button").addEventListener("click", () => { oPage.showPage("lemma"); }, false);
    34     34   document.getElementById("editor").addEventListener("click", (xEvent) => { oPage.onSelectionClick(xEvent); }, false);
    35     35   document.getElementById("lemma").addEventListener("keyup", () => { oPage.onWrite(); }, false);
    36     36   document.getElementById("lemma2").addEventListener("keyup", () => { oPage.onWrite2(); }, false);
           37  +document.getElementById("verb_pattern").addEventListener("keyup", () => { oFlex.update(); }, false);
    37     38   document.getElementById("flexion").addEventListener("keyup", () => { oFlex.update(); }, false);
    38     39   document.getElementById("tags").addEventListener("keyup", () => { oFlex.update(); }, false);
    39     40   document.getElementById("add_to_lexicon").addEventListener("click", () => { oFlex.addToLexicon(); }, false);
    40     41   
    41     42   
    42     43   
    43     44   /*
................................................................................
   111    112               document.getElementById("up_v_i").checked = false;
   112    113               document.getElementById("up_v_t").checked = false;
   113    114               document.getElementById("up_v_n").checked = false;
   114    115               document.getElementById("up_v_p").checked = false;
   115    116               document.getElementById("up_v_m").checked = false;
   116    117               document.getElementById("up_v_ae").checked = false;
   117    118               document.getElementById("up_v_aa").checked = false;
          119  +            document.getElementById("verb_pattern").value = "";
   118    120               // autre
   119    121               document.getElementById("flexion").value = "";
   120    122               document.getElementById("tags").value = "";
   121    123           }
   122    124           catch (e) {
   123    125               showError(e);
   124    126           }
................................................................................
   141    143               showError(e);
   142    144           }
   143    145       },
   144    146   
   145    147       onWrite: function () {
   146    148           if (document.getElementById("lemma").value.trim() !== "") {
   147    149               this.showEditor();
          150  +            oFlex.update();
   148    151           } else {
   149    152               this.showSection("section_vide");
   150    153               this.hideEditor();
   151    154               this.hideActions();
   152    155           }
   153    156       },
   154    157   
   155    158       onWrite2: function () {
   156    159           if (document.getElementById("lemma2").value.trim() !== "") {
   157    160               this.showWord2();
          161  +            oFlex.update();
   158    162           } else {
   159    163               this.hideWord2();
   160    164           }
   161    165       },
   162    166   
   163    167       showWord2: function () {
   164    168           document.getElementById("word_section2").style.display = "block";
................................................................................
   238    242                                   case "i":
   239    243                                       this.addFlexion(sLemma2, sLemma, sTag2+":i");
   240    244                                       break;
   241    245                               }
   242    246                           }
   243    247                           break;
   244    248                       case "V": {
   245         -                        if (!sLemma.endsWith("er") && !sLemma.endsWith("ir")) {
          249  +                        if (!sLemma.endsWith("er") && !sLemma.endsWith("ir") && !sLemma.endsWith("re")) {
   246    250                               break;
   247    251                           }
   248    252                           sLemma = sLemma.toLowerCase();
   249         -                        let c_g = (sLemma.endsWith("er")) ? "1" : "2";
          253  +                        let cGroup = "";
   250    254                           let c_i = (document.getElementById("up_v_i").checked) ? "i" : "_";
   251    255                           let c_t = (document.getElementById("up_v_t").checked) ? "t" : "_";
   252    256                           let c_n = (document.getElementById("up_v_n").checked) ? "n" : "_";
   253    257                           let c_p = (document.getElementById("up_v_p").checked) ? "p" : "_";
   254    258                           let c_m = (document.getElementById("up_v_m").checked) ? "m" : "_";
   255    259                           let c_ae = (document.getElementById("up_v_ae").checked) ? "e" : "_";
   256    260                           let c_aa = (document.getElementById("up_v_aa").checked) ? "a" : "_";
   257    261                           let sVerbTag = c_i + c_t + c_n + c_p + c_m + c_ae + c_aa;
   258    262                           if (!sVerbTag.endsWith("__") && !sVerbTag.startsWith("____")) {
   259         -                            let sVerbPattern = document.getElementById("conj_rules_like").value.trim();
          263  +                            let sVerbPattern = document.getElementById("verb_pattern").value.trim();
   260    264                               if (sVerbPattern.length == 0) {
          265  +                                if (!sLemma.endsWith("er") && !sLemma.endsWith("ir")) {
          266  +                                    break;
          267  +                                }
   261    268                                   // tables de conjugaison du 1er et du 2e groupe
   262         -                                for (let [nCut, sAdd, sFlexTags, sPattern] of this._getConjRule(sLemma)) {
          269  +                                let cGroup = (sLemma.endsWith("er")) ? "1" : "2";
          270  +                                for (let [nCut, sAdd, sFlexTags, sPattern] of this._getConjRules(sLemma)) {
          271  +                                    if (!sPattern || RegExp(sPattern).test(sLemma)) {
          272  +                                        this.addFlexion(sLemma.slice(0,-nCut)+sAdd, sLemma, ":V" + cGroup + "_" + sVerbTag + sFlexTags);
          273  +                                    }
          274  +                                }
          275  +                                // participes passés
          276  +                                let bPpasVar = (document.getElementById("up_partpas").checked) ? "var" : "invar";
          277  +                                let lPpasRules = (sLemma.endsWith("er")) ? oConj["V1_ppas"][bPpasVar] : oConj["V2_ppas"][bPpasVar];
          278  +                                for (let [nCut, sAdd, sFlexTags, sPattern] of lPpasRules) {
   263    279                                       if (!sPattern || RegExp(sPattern).test(sLemma)) {
   264         -                                        this.addFlexion(sLemma.slice(0,-nCut)+sAdd, sLemma, ":V" + c_g + "_" + sVerbTag + sFlexTags);
          280  +                                        this.addFlexion(sLemma.slice(0,-nCut)+sAdd, sLemma, ":V" + cGroup + "_" + sVerbTag + sFlexTags);
   265    281                                       }
   266    282                                   }
   267    283                               } else {
   268         -                                // utilisation du conjugueur
   269         -                                let oVerb = new Verb(sLemma, sVerbPattern);
   270         -                                for (let [sTag1, dFlex] of oVerb.dConj.entries()) {
   271         -                                    if (sTag1 !== ":Q") {
   272         -                                        for (let [sTag2, sConj] of dFlex.entries()) {
   273         -                                            if (sTag2.startsWith(":") && sConj !== "") {
   274         -                                                this.addFlexion(sConj, sLemma, ":V" + c_g + "_" + sVerbTag + sTag1 + sTag2);
          284  +                                // copie du motif d’un autre verbe : utilisation du conjugueur
          285  +                                if (conj.isVerb(sVerbPattern)) {
          286  +                                    let oVerb = new Verb(sLemma, sVerbPattern);
          287  +                                    for (let [sTag1, dFlex] of oVerb.dConj.entries()) {
          288  +                                        if (sTag1 !== ":Q") {
          289  +                                            for (let [sTag2, sConj] of dFlex.entries()) {
          290  +                                                if (sTag2.startsWith(":") && sConj !== "") {
          291  +                                                    this.addFlexion(sConj, sLemma, ":V" + oVerb.cGroup + "_" + sVerbTag + sTag1 + sTag2);
          292  +                                                }
          293  +                                            }
          294  +                                        } else {
          295  +                                            // participes passés
          296  +                                            if (dFlex.get(":Q3") !== "") {
          297  +                                                if (dFlex.get(":Q2") !== "") {
          298  +                                                    this.addFlexion(dFlex.get(":Q1"), sLemma, ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:m:s/*");
          299  +                                                    this.addFlexion(dFlex.get(":Q2"), sLemma, ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:m:p/*");
          300  +                                                } else {
          301  +                                                    this.addFlexion(dFlex.get(":Q1"), sLemma, ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:m:i/*");
          302  +                                                }
          303  +                                                this.addFlexion(dFlex.get(":Q3"), sLemma, ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:f:s/*");
          304  +                                                this.addFlexion(dFlex.get(":Q4"), sLemma, ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:f:p/*");
          305  +                                            } else {
          306  +                                                this.addFlexion(dFlex.get(":Q1"), sLemma, ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:e:i/*");
   275    307                                               }
   276    308                                           }
   277    309                                       }
   278    310                                   }
   279    311                               }
   280    312                           }
   281    313                           break;
................................................................................
   316    348               this.show();
   317    349           }
   318    350           catch (e) {
   319    351               showError(e);
   320    352           }
   321    353       },
   322    354   
   323         -    _getConjRule: function (sVerb) {
          355  +    _getConjRules: function (sVerb) {
   324    356           if (sVerb.endsWith("ir")) {
   325    357               // deuxième groupe
   326    358               return oConj["V2"];
   327    359           } else if (sVerb.endsWith("er")) {
   328    360               // premier groupe
   329    361               if (sVerb.slice(-5) in oConj["V1"]) {
   330    362                   return oConj["V1"][sVerb.slice(-5)];