Grammalecte  Check-in [19e588f821]

Overview
Comment:[fx] lexicon editor: update (new draft)
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | fx | multid
Files: files | file ages | folders
SHA3-256: 19e588f82167596daa0b4aee28a2a0ae649903deea893ac0004c37475951dfc8
User & Date: olr on 2018-03-09 08:26:20
Other Links: branch diff | manifest | tags
Context
2018-03-09
17:27
[fx] lexicon editor: code clarification + ui ongoing work check-in: 6ac2cd76c8 user: olr tags: fx, multid
08:26
[fx] lexicon editor: update (new draft) check-in: 19e588f821 user: olr tags: fx, multid
2018-03-07
17:32
merge trunk check-in: a693df4168 user: olr tags: multid
Changes

Modified gc_lang/fr/webext/panel/lex_editor.css from [307d727b83] to [953a945a5b].

23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
..
67
68
69
70
71
72
73




74
75
76
77
78
79
80
..
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
...
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
    background: hsl(0, 0%, 100%) url(../img/lines.png);
    font: normal 16px "Trebuchet MS", "Fira Sans", "Liberation Sans", sans-serif;
    color: #505050;
}


.inbox {
    width: 600px;
    margin: 20px auto 10px auto;
    padding: 10px 30px 30px 30px;
    background: hsl(0, 0%, 100%);
    border: 2px solid #F0F0F0;
    border-radius: 20px;
}

................................................................................
    cursor: pointer;
}


#add_word_page {
    display: none;
}





#editor {
    display: none;
}

#categories {
    display: flex;
................................................................................
    background-color: hsl(0, 0%, 90%);
}

.separator {
    border-left: 1px solid hsl(210, 0%, 90%);
}

#section_vide {
    padding: 50px;
    font-size: 24px;
    text-align: center;
    background-color: hsl(0, 20%, 90%);
    color: hsl(0, 20%, 50%);
    border-radius: 5px;
}
.section {
    display: none;
    padding: 10px;
}

.container {
    display: flex;
................................................................................
    color: hsl(0, 0%, 20%);
}
input[placeholder] {
    color: hsl(0, 0%, 50%);
}


#actions {
    display: none;
    padding: 10px;
}

#results {
    padding: 10px;
    background-color: hsl(210, 10%, 90%);
    border-radius: 3px;







|







 







>
>
>
>







 







<
<
<
<
<
<
<
<







 







|
<







23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
..
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
..
98
99
100
101
102
103
104








105
106
107
108
109
110
111
...
164
165
166
167
168
169
170
171

172
173
174
175
176
177
178
    background: hsl(0, 0%, 100%) url(../img/lines.png);
    font: normal 16px "Trebuchet MS", "Fira Sans", "Liberation Sans", sans-serif;
    color: #505050;
}


.inbox {
    width: 900px;
    margin: 20px auto 10px auto;
    padding: 10px 30px 30px 30px;
    background: hsl(0, 0%, 100%);
    border: 2px solid #F0F0F0;
    border-radius: 20px;
}

................................................................................
    cursor: pointer;
}


#add_word_page {
    display: none;
}

.columns {
    display: flex;
}

#editor {
    display: none;
}

#categories {
    display: flex;
................................................................................
    background-color: hsl(0, 0%, 90%);
}

.separator {
    border-left: 1px solid hsl(210, 0%, 90%);
}









.section {
    display: none;
    padding: 10px;
}

.container {
    display: flex;
................................................................................
    color: hsl(0, 0%, 20%);
}
input[placeholder] {
    color: hsl(0, 0%, 50%);
}


#generated_words {

    padding: 10px;
}

#results {
    padding: 10px;
    background-color: hsl(210, 10%, 90%);
    border-radius: 3px;

Modified gc_lang/fr/webext/panel/lex_editor.html from [81ed66a201] to [46fac93928].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20


21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
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
<!DOCTYPE HTML>
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="lex_editor.css" />
        <title>Grammalecte · Éditeur lexical</title>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    </head>
    
    <body>

        <div class="inbox">

            <h1>Éditeur lexical</h1>

            <div id="buttons" class="container">
                <div id="lexicon_button" class="main_button">Lexique</div>
                <div id="add_word_button" class="main_button">Ajout</div>
            </div>

            <div id="add_word_page">


                <h2>Nouveau mot (lemme)</h2>
                <input type="text" id="lemma" name="lemma" maxlength="60" value="" placeholder="votre mot" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ._-]+$" autofocus />

                <div id="editor">

                    <div id="categories">
                        <div class="category" id="select_nom" data-tag="N">Nom, adjectif</div>
                        <div class="category" id="select_verbe" data-tag="V">Verbe</div>
                        <div class="category" id="select_adverbe" data-tag="W">Adverbe</div>
                        <div class="category separator" id="select_prenom" data-tag="M1">Prénom</div>
                        <div class="category" id="select_patronyme" data-tag="M2">Patronyme</div>
                        <div class="category" id="select_nom_propre" data-tag="MP">Nom propre</div>
                        <div class="category separator" id="select_autre" data-tag="X">Autre</div>
                    </div>


                    <div id="sections">

                        <div id="section_vide">
                            Sélectionnez une catégorie.
                        </div>

                        <div id="section_nom" class="section">
                            <h2>Nom, adjectif</h2>
                            <p class="typeline">
                                <input type="radio" id="up_type_nom" name="POS" value=":N" /> <label class="widelabel" for="up_type_nom">Nom</label>
                                <input type="radio" id="up_type_adj" name="POS" value=":A" /> <label class="widelabel" for="up_type_adj">Adjectif</label>
                                <input type="radio" id="up_type_nomadj" name="POS" value=":N:A" /> <label class="widelabel" for="up_type_nomadj">Nom &amp; adjectif</label>
                            </p>
                            <div class="container">
                                <div class="block">
                                    <h3>Genre</h3>
                                    <p><input type="radio" id="up_nom_genre_e" name="genre" value=":e" /><label for="up_nom_genre_e"> épicène</label></p>
                                    <p><input type="radio" id="up_nom_genre_m" name="genre" value=":m" /><label for="up_nom_genre_m"> masculin</label></p>
                                    <p><input type="radio" id="up_nom_genre_f" name="genre" value=":f" /><label for="up_nom_genre_f"> féminin</label></p>
                                </div>
                                <div class="block">
                                    <h3>Pluriel</h3>
                                    <p><input type="radio" id="up_nom_pluriel_s" name="pluriel" value="s" /><label for="up_nom_pluriel_s"> pluriel en ·s</label></p>
                                    <p><input type="radio" id="up_nom_pluriel_x" name="pluriel" value="x" /><label for="up_nom_pluriel_x"> pluriel en ·x</label></p>
                                    <p><input type="radio" id="up_nom_pluriel_i" name="pluriel" value="i" /><label for="up_nom_pluriel_i"> invariable</label></p>
                                </div>
                            </div>

                            <h2>[optionnel] Autre forme (masculine, féminine, variante, etc.)</h2>
                            <input type="text" id="lemma2" name="lemma2" maxlength="60" value="" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ._-]+$" placeholder="votre mot" />
                            <div id="word_section2">
                                <p class="typeline">
                                    <input type="radio" id="up_type_nom2" name="POS2" value=":N" /> <label class="widelabel" for="up_type_nom2">Nom</label>
                                    <input type="radio" id="up_type_adj2" name="POS2" value=":A" /> <label class="widelabel" for="up_type_adj2">Adjectif</label>
                                    <input type="radio" id="up_type_nomadj2" name="POS2" value=":N:A" /> <label class="widelabel" for="up_type_nomadj2">Nom &amp; adjectif</label>
                                </p>
                                <div class="container">
                                    <div class="block">
                                        <h3>Genre</h3>
                                        <p><input type="radio" id="up_nom2_genre_e" name="genre2" value=":e" /><label for="up_nom2_genre_e"> épicène</label></p>
                                        <p><input type="radio" id="up_nom2_genre_m" name="genre2" value=":m" /><label for="up_nom2_genre_m"> masculin</label></p>
                                        <p><input type="radio" id="up_nom2_genre_f" name="genre2" value=":f" /><label for="up_nom2_genre_f"> féminin</label></p>
                                    </div>
                                    <div class="block">
                                        <h3>Pluriel</h3>
                                        <p><input type="radio" id="up_nom2_pluriel_s" name="pluriel2" value="s" /><label for="up_nom2_pluriel_s"> pluriel en ·s</label></p>
                                        <p><input type="radio" id="up_nom2_pluriel_x" name="pluriel2" value="x" /><label for="up_nom2_pluriel_x"> pluriel en ·x</label></p>
                                        <p><input type="radio" id="up_nom2_pluriel_i" name="pluriel2" value="i" /><label for="up_nom2_pluriel_i"> invariable</label></p>
                                    </div>
                                </div>
                            </div>
                        </div>

                        <div id="section_verbe" class="section">
                            <h2>Verbe</h2>
                            <div class="block">
                                <h3><input type="checkbox" id="up_v_i" value="i" /><label for="up_v_i"> intransitif</label></h3>
                                <div class="description">Cochez cette case si ce verbe peut s’utiliser sans complément d’objet.</div>
                                <details>
                                    <div class="container">
                                        <div class="examples_true">Je dors.<br/>Tu pars.<br/>Elle pense.<br/>Nous écrivons.<br/>Vous manifestez.<br/>Ils viennent.</div>
                                        <div class="examples_false">J’appartiens à ce groupe…</div>
                                    </div>
                                </details>
                            </div>
                            <div class="block">
                                <h3><input type="checkbox" id="up_v_t" value="t" /><label for="up_v_t"> transitif direct</label></h3>
                                <div class="description">Cochez cette case si ce verbe peut s’utiliser avec un complément d’objet direct (COD).</div>
                                <details>
                                    <div class="container">
                                        <div class="examples_true">Je mange <i>une pomme</i>.<br/>Tu donnes <i>une bonne impression</i>.<br/>Elle écrit <i>un livre</i>.<br/>Nous fabriquons <i>une œuvre</i>.</div>
                                        <div class="examples_false">Je pars.<br/>J’appartiens à…</div>
                                    </div>
                                </details>
                            </div>
                            <div class="block">
                                <h3><input type="checkbox" id="up_v_n" value="n" /><label for="up_v_n"> transitif indirect</label></h3>
                                <div class="description">Cochez cette case, si ce verbe peut s’utiliser avec un complément d’objet indirect (COI). Attention à ne pas confondre avec un complément circonstanciel de temps, de lieu ou de manière.</div>
                                <details>
                                    <div class="container">
                                        <div class="examples_true">Je donne un cadeau <i>à sa femme</i>.<br/>Elle appartient <i>à ce groupe</i>.</div>
                                        <div class="examples_false"></div>
                                    </div>
                                </details>
                            </div>
                            <div class="block">
                                <h3><input type="checkbox" id="up_v_p" value="p" /><label for="up_v_p"> pronominal</label></h3>
                                <div class="description">Cochez cette case si ce verbe peut s’utiliser pronominalement.</div>
                                <details>
                                    <div class="container">
                                        <div class="examples_true">Je me suis trompé.<br/>Tu t’es étonné toi-même.<br/>Elle s’est souvenu de ses études.<br/>Nous nous sommes égarés.<br/>Vous vous êtes retrouvées.<br/>Ils se sont rappelé leur enfance.</div>
                                        <div class="examples_false">Je me suis venu.<br/>tu t’es arrivé.<br/>elle s’est marché.<br/>nous nous sommes courus.<br/>vous vous êtes acculés.<br/>Elles se sont capitulées.</div>
                                    </div>
                                </details>
                            </div>
                            <div class="block">
                                <h3><input type="checkbox" id="up_v_m" value="m" /><label for="up_v_m"> impersonnel</label></h3>
                                <div class="description">Cochez cette case si ce verbe ne peut s’utiliser à la première personne, mais uniquement à la troisième personne du singulier ou du pluriel.</div>
                                <details>
                                    <div class="container">
                                        <div class="examples_true">Il pleut.</div>
                                        <div class="examples_false">Je pleus.</div>
                                    </div>
                                </details>
                            </div>
                            <div class="block">
                                <h3><input type="checkbox" id="up_v_ae" value="e" /><label for="up_v_ae"> passé composé avec l’auxiliaire “être”</label></h3>
                                <div class="description">Cochez cette case si ce verbe s’emploie au passé composé avec l’auxilaire “être”.</div>
                                <details>
                                    <div class="container">
                                        <div class="examples_true">Je suis venu.<br/>Je suis parti.</div>
                                        <div class="examples_false">J’ai venu.<br/>J’ai parti.</div>
                                    </div>
                                </details>
                            </div>
                            <div class="block">
                                <h3><input type="checkbox" id="up_v_aa" value="a" /><label for="up_v_aa"> passé composé avec l’auxiliaire “avoir”</label></h3>
                                <div class="description">Cochez cette case si ce verbe s’emploie au passé composé avec l’auxilaire “avoir”.</div>
                                <details>
                                    <div class="container">
                                        <div class="examples_true">J’ai mangé.<br/>J’ai prié.</div>
                                        <div class="examples_false">Je suis mangé.<br/>Je suis prié.</div>
                                    </div>
                                </details>
                            </div>

                            <div class="block">
                                <h3><input type="checkbox" id="up_partpas" checked /><label for="up_partpas"> participes passés variables</label></h3>
                                <p>Cette option est ignorée si vous utilisez un verbe modèle.</p>
                            </div>

                            <div class="block">
                                <h3>Verbe modèle [optionnel]</h3>
                                <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>
                                <input type="text" id="verb_pattern" name="verb_pattern" maxlength="60" value="" placeholder="verbe modèle" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ-]+$" />
                                <details>
                                    <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>
                                    <p><b>Classification des groupes :</b></p>
                                    <ul>

                                        <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 :
                                        <ul>
                                            <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>
                                            <li>un ‹e› euphonique est ajouté sur la plupart des verbes finissant par -<i>ger</i>,</li>
                                            <li>certains verbes finissant par -<i>yer</i> remplacent éventuellement le ‹y› par un ‹i›,</li>
                                            <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>
                                            <li>irrégularités diverses (<i>aller</i>, <i>envoyer</i>, <i>renvoyer</i>)…
                                        </ul></li>

                                        <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>
                                        <li><b>3ᵉ groupe</b>. Autres verbes irréguliers.</li>
                                        <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>
                                    </ul>
                                </details>
                            </div>
                        </div>

                        <div id="section_adverbe" class="section">
                            <h2>Adverbe</h2>
                            <p>Les adverbes sont invariables en genre et en nombre.</p>
                        </div>

                        <div id="section_prenom" class="section">
                            <h2>Prénom</h2>
                            <div class="container">
                                <div class="block">
                                    <h3>Genre</h3>
                                    <p><input type="radio" id="up_prenom_genre_e" name="genre_m1" value=":e" /><label for="up_prenom_genre_e"> épicène</label></p>
                                    <p><input type="radio" id="up_prenom_genre_m" name="genre_m1" value=":m" /><label for="up_prenom_genre_m"> masculin</label></p>
                                    <p><input type="radio" id="up_prenom_genre_f" name="genre_m1" value=":f" /><label for="up_prenom_genre_f"> féminin</label></p>
                                </div>
                                <div class="block">
                                    <h3>Pluriel</h3>
                                    <p>Les prénoms sont invariables en nombre.</p>
                                </div>
                            </div>
                        </div>

                        <div id="section_patronyme" class="section">
                            <h2>Patronyme</h2>
                            <div class="container">
                                <div class="block">
                                    <h3>Genre</h3>
                                    <p><input type="radio" id="up_patronyme_genre_e" name="genre_m2" value=":e" /><label for="up_patronyme_genre_e"> épicène</label></p>
                                    <p><input type="radio" id="up_patronyme_genre_m" name="genre_m2" value=":m" /><label for="up_patronyme_genre_m"> masculin</label></p>
                                    <p><input type="radio" id="up_patronyme_genre_f" name="genre_m2" value=":f" /><label for="up_patronyme_genre_f"> féminin</label></p>
                                </div>
                                <div class="block">
                                    <h3>Pluriel</h3>
                                    <p>Les noms de famille sont invariables en nombre.</p>
                                </div>
                            </div>
                        </div>

                        <div id="section_nom_propre" class="section">
                            <h2>Nom propre</h2>
                            <div class="container">
                                <div class="block">
                                    <h3>Genre</h3>
                                    <p><input type="radio" id="up_nom_propre_genre_e" name="genre_mp" value=":e" /><label for="up_nom_propre_genre_e"> épicène</label></p>
                                    <p><input type="radio" id="up_nom_propre_genre_m" name="genre_mp" value=":m" /><label for="up_nom_propre_genre_m"> masculin</label></p>
                                    <p><input type="radio" id="up_nom_propre_genre_f" name="genre_mp" value=":f" /><label for="up_nom_propre_genre_f"> féminin</label></p>
                                </div>
                                <div class="block">
                                    <h3>Pluriel</h3>
                                    <p>Les noms propres sont invariables en nombre.</p>
                                </div>
                            </div>
                        </div>

                        <div id="section_autre" class="section">
                            <h2>Autre</h2>
                            <p>Indiquez les étiquettes grammaticales que vous voulez appliquer au mot. À utiliser seulement si vous savez ce que vous faites.</p>
                            <h3>Flexion</h3>
                            <p><input type="text" id="flexion" name="flexion" maxlength="20" value="" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ._-]+$" placeholder="flexion" /></p>
                            <h3>Étiquettes</h3>
                            <p><input type="text" id="tags" name="tags" maxlength="20" value="" pattern="^:[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ:._-]+$" placeholder="étiquettes" /></p>
                        </div>
                    </div>
                </div>

                
                <div id="actions">
                    <h2>Mots générés</h2>
                    <h3>Forme fléchie (lemme), étiquettes</h3>
                    <pre id="results">
                        
                    </pre>
                    
                    <div id="buttonline">
                        <div id="add_to_lexicon">Ajouter au dictionnaire</div>
                    </div>

                </div>
            </div>



            <div id="lexicon_page">
                


                <h2>Votre lexique</h2>

                <div class="button_block">
                    <div id="save_button" class="fright">
                        Enregistrer
                    </div>
                    <h3>Lexique</h3>
                    <p>Nombre d’entrées ajoutées : <span id="num_added_entries">0</span>.</p>
                    <p>Nombre d’entrées supprimées : <span id="num_deleted_entries">0</span>.</p>
                    <p>Nombre d’entrées : <span id="num_entries">0</span>.</p>
                    <p><progress id="build_progress" value="0"></p>
                    <div id="export_button" class="fright">
                        Exporter
                    </div>
                    <div id="import_button" class="fright">
                        Importer
                    </div>
                    <h3>Dictionnaire enregistré</h3>
                    <p>Dernière sauvegarde : <span id="save_date">néant</span>.</p>
                    <p>Nombre d’entrées : <span id="num_entries_saved">0</span>.</p>
                </div>

                


                <p id="no_elem_line">Aucun élément.</p>
                <p><progress id="display_progress" value="0"></p>

                <table id="table">
                    
                </table>
            </div>
        </div>






        <script src="../grammalecte/graphspell/helpers.js"></script>
        <script src="../grammalecte/graphspell/str_transform.js"></script>
        <script src="../grammalecte/graphspell/dawg.js"></script>
        <script src="../grammalecte/graphspell/ibdawg.js"></script>
        <script src="../grammalecte/fr/conj.js"></script>
        <script src="../grammalecte/fr/conj_generator.js"></script>
        <script src="lex_editor.js"></script>
    </body>
    
</html>


|
|
|
|
|
|
|

|

|

|
|
|
|

|
>
>
|
|

|

|
|
|
|
|
|
|
|
|


|

<
<
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|

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

|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
>
|
<
>

>
|
|
>
>
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
>
|
|
<
|
|
|
|


>

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40




41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
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
<!DOCTYPE HTML>
<html>
  <head>
    <link rel="stylesheet" type="text/css" href="lex_editor.css" />
    <title>Grammalecte · Éditeur lexical</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  </head>
  
  <body>

    <div class="inbox">

      <h1>Éditeur lexical</h1>

      <div id="buttons" class="container">
        <div id="lexicon_button" class="main_button">Lexique</div>
        <div id="add_word_button" class="main_button">Ajout</div>
      </div>

      <div id="add_word_page">
        <div class="columns">
          <div id="new_word_generator">
            <h2>Nouveau mot (lemme)</h2>
            <input type="text" id="lemma" name="lemma" maxlength="60" value="" placeholder="votre mot" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ._-]+$" autofocus />

            <div id="editor">

              <div id="categories">
                <div class="category" id="select_nom" data-tag="N">Nom, adjectif</div>
                <div class="category" id="select_verbe" data-tag="V">Verbe</div>
                <div class="category" id="select_adverbe" data-tag="W">Adverbe</div>
                <div class="category separator" id="select_prenom" data-tag="M1">Prénom</div>
                <div class="category" id="select_patronyme" data-tag="M2">Patronyme</div>
                <div class="category" id="select_nom_propre" data-tag="MP">Nom propre</div>
                <div class="category separator" id="select_autre" data-tag="X">Autre</div>
              </div>


              <div id="sections">





                <div id="section_nom" class="section">
                  <h2>Nom, adjectif</h2>
                  <p class="typeline">
                    <input type="radio" id="up_type_nom" name="POS" value=":N" /> <label class="widelabel" for="up_type_nom">Nom</label>
                    <input type="radio" id="up_type_adj" name="POS" value=":A" /> <label class="widelabel" for="up_type_adj">Adjectif</label>
                    <input type="radio" id="up_type_nomadj" name="POS" value=":N:A" /> <label class="widelabel" for="up_type_nomadj">Nom &amp; adjectif</label>
                  </p>
                  <div class="container">
                    <div class="block">
                      <h3>Genre</h3>
                      <p><input type="radio" id="up_nom_genre_e" name="genre" value=":e" /><label for="up_nom_genre_e"> épicène</label></p>
                      <p><input type="radio" id="up_nom_genre_m" name="genre" value=":m" /><label for="up_nom_genre_m"> masculin</label></p>
                      <p><input type="radio" id="up_nom_genre_f" name="genre" value=":f" /><label for="up_nom_genre_f"> féminin</label></p>
                    </div>
                    <div class="block">
                      <h3>Pluriel</h3>
                      <p><input type="radio" id="up_nom_pluriel_s" name="pluriel" value="s" /><label for="up_nom_pluriel_s"> pluriel en ·s</label></p>
                      <p><input type="radio" id="up_nom_pluriel_x" name="pluriel" value="x" /><label for="up_nom_pluriel_x"> pluriel en ·x</label></p>
                      <p><input type="radio" id="up_nom_pluriel_i" name="pluriel" value="i" /><label for="up_nom_pluriel_i"> invariable</label></p>
                    </div>
                  </div>

                  <h2>[optionnel] Autre forme (masculine, féminine, variante, etc.)</h2>
                  <input type="text" id="lemma2" name="lemma2" maxlength="60" value="" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ._-]+$" placeholder="votre mot" />
                  <div id="word_section2">
                    <p class="typeline">
                      <input type="radio" id="up_type_nom2" name="POS2" value=":N" /> <label class="widelabel" for="up_type_nom2">Nom</label>
                      <input type="radio" id="up_type_adj2" name="POS2" value=":A" /> <label class="widelabel" for="up_type_adj2">Adjectif</label>
                      <input type="radio" id="up_type_nomadj2" name="POS2" value=":N:A" /> <label class="widelabel" for="up_type_nomadj2">Nom &amp; adjectif</label>
                    </p>
                    <div class="container">
                      <div class="block">
                        <h3>Genre</h3>
                        <p><input type="radio" id="up_nom2_genre_e" name="genre2" value=":e" /><label for="up_nom2_genre_e"> épicène</label></p>
                        <p><input type="radio" id="up_nom2_genre_m" name="genre2" value=":m" /><label for="up_nom2_genre_m"> masculin</label></p>
                        <p><input type="radio" id="up_nom2_genre_f" name="genre2" value=":f" /><label for="up_nom2_genre_f"> féminin</label></p>
                      </div>
                      <div class="block">
                        <h3>Pluriel</h3>
                        <p><input type="radio" id="up_nom2_pluriel_s" name="pluriel2" value="s" /><label for="up_nom2_pluriel_s"> pluriel en ·s</label></p>
                        <p><input type="radio" id="up_nom2_pluriel_x" name="pluriel2" value="x" /><label for="up_nom2_pluriel_x"> pluriel en ·x</label></p>
                        <p><input type="radio" id="up_nom2_pluriel_i" name="pluriel2" value="i" /><label for="up_nom2_pluriel_i"> invariable</label></p>
                      </div>
                    </div>
                  </div>
                </div>

                <div id="section_verbe" class="section">
                  <h2>Verbe</h2>
                  <div class="block">
                    <h3><input type="checkbox" id="up_v_i" value="i" /><label for="up_v_i"> intransitif</label></h3>
                    <div class="description">Cochez cette case si ce verbe peut s’utiliser sans complément d’objet.</div>
                    <details>
                      <div class="container">
                        <div class="examples_true">Je dors.<br/>Tu pars.<br/>Elle pense.<br/>Nous écrivons.<br/>Vous manifestez.<br/>Ils viennent.</div>
                        <div class="examples_false">J’appartiens à ce groupe…</div>
                      </div>
                    </details>
                  </div>
                  <div class="block">
                    <h3><input type="checkbox" id="up_v_t" value="t" /><label for="up_v_t"> transitif direct</label></h3>
                    <div class="description">Cochez cette case si ce verbe peut s’utiliser avec un complément d’objet direct (COD).</div>
                    <details>
                      <div class="container">
                        <div class="examples_true">Je mange <i>une pomme</i>.<br/>Tu donnes <i>une bonne impression</i>.<br/>Elle écrit <i>un livre</i>.<br/>Nous fabriquons <i>une œuvre</i>.</div>
                        <div class="examples_false">Je pars.<br/>J’appartiens à…</div>
                      </div>
                    </details>
                  </div>
                  <div class="block">
                    <h3><input type="checkbox" id="up_v_n" value="n" /><label for="up_v_n"> transitif indirect</label></h3>
                    <div class="description">Cochez cette case, si ce verbe peut s’utiliser avec un complément d’objet indirect (COI). Attention à ne pas confondre avec un complément circonstanciel de temps, de lieu ou de manière.</div>
                    <details>
                      <div class="container">
                        <div class="examples_true">Je donne un cadeau <i>à sa femme</i>.<br/>Elle appartient <i>à ce groupe</i>.</div>
                        <div class="examples_false"></div>
                      </div>
                    </details>
                  </div>
                  <div class="block">
                    <h3><input type="checkbox" id="up_v_p" value="p" /><label for="up_v_p"> pronominal</label></h3>
                    <div class="description">Cochez cette case si ce verbe peut s’utiliser pronominalement.</div>
                    <details>
                      <div class="container">
                        <div class="examples_true">Je me suis trompé.<br/>Tu t’es étonné toi-même.<br/>Elle s’est souvenu de ses études.<br/>Nous nous sommes égarés.<br/>Vous vous êtes retrouvées.<br/>Ils se sont rappelé leur enfance.</div>
                        <div class="examples_false">Je me suis venu.<br/>tu t’es arrivé.<br/>elle s’est marché.<br/>nous nous sommes courus.<br/>vous vous êtes acculés.<br/>Elles se sont capitulées.</div>
                      </div>
                    </details>
                  </div>
                  <div class="block">
                    <h3><input type="checkbox" id="up_v_m" value="m" /><label for="up_v_m"> impersonnel</label></h3>
                    <div class="description">Cochez cette case si ce verbe ne peut s’utiliser à la première personne, mais uniquement à la troisième personne du singulier ou du pluriel.</div>
                    <details>
                      <div class="container">
                        <div class="examples_true">Il pleut.</div>
                        <div class="examples_false">Je pleus.</div>
                      </div>
                    </details>
                  </div>
                  <div class="block">
                    <h3><input type="checkbox" id="up_v_ae" value="e" /><label for="up_v_ae"> passé composé avec l’auxiliaire “être”</label></h3>
                    <div class="description">Cochez cette case si ce verbe s’emploie au passé composé avec l’auxilaire “être”.</div>
                    <details>
                      <div class="container">
                        <div class="examples_true">Je suis venu.<br/>Je suis parti.</div>
                        <div class="examples_false">J’ai venu.<br/>J’ai parti.</div>
                      </div>
                    </details>
                  </div>
                  <div class="block">
                    <h3><input type="checkbox" id="up_v_aa" value="a" /><label for="up_v_aa"> passé composé avec l’auxiliaire “avoir”</label></h3>
                    <div class="description">Cochez cette case si ce verbe s’emploie au passé composé avec l’auxilaire “avoir”.</div>
                    <details>
                      <div class="container">
                        <div class="examples_true">J’ai mangé.<br/>J’ai prié.</div>
                        <div class="examples_false">Je suis mangé.<br/>Je suis prié.</div>
                      </div>
                    </details>
                  </div>

                  <div class="block">
                    <h3><input type="checkbox" id="up_partpas" checked /><label for="up_partpas"> participes passés variables</label></h3>
                    <p>Cette option est ignorée si vous utilisez un verbe modèle.</p>
                  </div>

                  <div class="block">
                    <h3>Verbe modèle [optionnel]</h3>
                    <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>
                    <input type="text" id="verb_pattern" name="verb_pattern" maxlength="60" value="" placeholder="verbe modèle" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ-]+$" />
                    <details>
                      <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>
                      <p><b>Classification des groupes :</b></p>
                      <ul>
                        <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 :
                          <ul>
                            <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>
                            <li>un ‹e› euphonique est ajouté sur la plupart des verbes finissant par -<i>ger</i>,</li>
                            <li>certains verbes finissant par -<i>yer</i> remplacent éventuellement le ‹y› par un ‹i›,</li>
                            <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>
                            <li>irrégularités diverses (<i>aller</i>, <i>envoyer</i>, <i>renvoyer</i>)…</li>
                          </ul>
                        </li>
                        <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>
                        <li><b>3ᵉ groupe</b>. Autres verbes irréguliers.</li>
                        <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>
                      </ul>
                    </details>
                  </div>
                </div>

                <div id="section_adverbe" class="section">
                  <h2>Adverbe</h2>
                  <p>Les adverbes sont invariables en genre et en nombre.</p>
                </div>

                <div id="section_prenom" class="section">
                  <h2>Prénom</h2>
                  <div class="container">
                    <div class="block">
                      <h3>Genre</h3>
                      <p><input type="radio" id="up_prenom_genre_e" name="genre_m1" value=":e" /><label for="up_prenom_genre_e"> épicène</label></p>
                      <p><input type="radio" id="up_prenom_genre_m" name="genre_m1" value=":m" /><label for="up_prenom_genre_m"> masculin</label></p>
                      <p><input type="radio" id="up_prenom_genre_f" name="genre_m1" value=":f" /><label for="up_prenom_genre_f"> féminin</label></p>
                    </div>
                    <div class="block">
                      <h3>Pluriel</h3>
                      <p>Les prénoms sont invariables en nombre.</p>
                    </div>
                  </div>
                </div>

                <div id="section_patronyme" class="section">
                  <h2>Patronyme</h2>
                  <div class="container">
                    <div class="block">
                      <h3>Genre</h3>
                      <p><input type="radio" id="up_patronyme_genre_e" name="genre_m2" value=":e" /><label for="up_patronyme_genre_e"> épicène</label></p>
                      <p><input type="radio" id="up_patronyme_genre_m" name="genre_m2" value=":m" /><label for="up_patronyme_genre_m"> masculin</label></p>
                      <p><input type="radio" id="up_patronyme_genre_f" name="genre_m2" value=":f" /><label for="up_patronyme_genre_f"> féminin</label></p>
                    </div>
                    <div class="block">
                      <h3>Pluriel</h3>
                      <p>Les noms de famille sont invariables en nombre.</p>
                    </div>
                  </div>
                </div>

                <div id="section_nom_propre" class="section">
                  <h2>Nom propre</h2>
                  <div class="container">
                    <div class="block">
                      <h3>Genre</h3>
                      <p><input type="radio" id="up_nom_propre_genre_e" name="genre_mp" value=":e" /><label for="up_nom_propre_genre_e"> épicène</label></p>
                      <p><input type="radio" id="up_nom_propre_genre_m" name="genre_mp" value=":m" /><label for="up_nom_propre_genre_m"> masculin</label></p>
                      <p><input type="radio" id="up_nom_propre_genre_f" name="genre_mp" value=":f" /><label for="up_nom_propre_genre_f"> féminin</label></p>
                    </div>
                    <div class="block">
                      <h3>Pluriel</h3>
                      <p>Les noms propres sont invariables en nombre.</p>
                    </div>
                  </div>
                </div>

                <div id="section_autre" class="section">
                  <h2>Autre</h2>
                  <p>Indiquez les étiquettes grammaticales que vous voulez appliquer au mot. À utiliser seulement si vous savez ce que vous faites.</p>
                  <h3>Flexion</h3>
                  <p><input type="text" id="flexion" name="flexion" maxlength="20" value="" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ._-]+$" placeholder="flexion" /></p>
                  <h3>Étiquettes</h3>
                  <p><input type="text" id="tags" name="tags" maxlength="20" value="" pattern="^:[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ:._-]+$" placeholder="étiquettes" /></p>
                </div>
              </div>
            </div>
          </div> <!-- #new_word_generator -->
          
          <div id="generated_words">
            <h2>Mots générés</h2>
            <h3>Flexions, étiquettes</h3>
            <pre id="results">
              
            </pre>
            
            <div id="buttonline">
              <div id="add_to_lexicon">Ajouter au dictionnaire</div>
            </div>
          </div> <!-- #generated_words -->
        </div> <!-- .columns -->

      </div> <!-- #add_word_page -->


      <div id="lexicon_page">
        
        <div class="columns">
          <div>
            <h2>Votre lexique</h2>

            <div class="button_block">
              <div id="save_button" class="fright">
                Enregistrer
              </div>
              <h3>Lexique</h3>
              <p>Nombre d’entrées ajoutées : <span id="num_added_entries">0</span>.</p>
              <p>Nombre d’entrées supprimées : <span id="num_deleted_entries">0</span>.</p>
              <p>Nombre d’entrées : <span id="num_entries">0</span>.</p>
              <p><progress id="build_progress" value="0"></p>
              <div id="export_button" class="fright">
                Exporter
              </div>
              <div id="import_button" class="fright">
                Importer
              </div>
              <h3>Dictionnaire enregistré</h3>
              <p>Dernière sauvegarde : <span id="save_date">néant</span>.</p>
              <p>Nombre d’entrées : <span id="num_entries_saved">0</span>.</p>
            </div>  
          </div>


          <div>
            <p id="no_elem_line">Aucun élément.</p>
            <p><progress id="display_progress" value="0"></p>

            <table id="table">
              
            </table>
          </div>
        </div>

      </div> <!-- #lexicon_page -->

    </div>


    <script src="../grammalecte/graphspell/helpers.js"></script>
    <script src="../grammalecte/graphspell/str_transform.js"></script>
    <script src="../grammalecte/graphspell/dawg.js"></script>
    <script src="../grammalecte/graphspell/ibdawg.js"></script>
    <script src="../grammalecte/fr/conj.js"></script>
    <script src="../grammalecte/fr/conj_generator.js"></script>
    <script src="lex_editor.js"></script>
  </body>
  
</html>

Modified gc_lang/fr/webext/panel/lex_editor.js from [acda1aa76b] to [8d106a1ae2].

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
...
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
...
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
...
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
...
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
...
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
    },

    onWrite: function () {
        if (document.getElementById("lemma").value.trim() !== "") {
            this.showElement("editor");
            oFlexGen.update();
        } else {
            this.showSection("section_vide");
            this.hideElement("editor");
            this.hideElement("actions");
        }
    },

    onWrite2: function () {
        if (document.getElementById("lemma2").value.trim() !== "") {
            this.showElement("word_section2");
            oFlexGen.update();
        } else {
            this.hideElement("word_section2");
        }
    },

    createTableHeader: function () {
        let xRowNode = createNode("tr");
        xRowNode.appendChild(createNode("th", { textContent: "·" }));
        xRowNode.appendChild(createNode("th", { textContent: "#" }));
        xRowNode.appendChild(createNode("th", { textContent: "Forme fléchie" }));
        xRowNode.appendChild(createNode("th", { textContent: "Lemme" }));
        xRowNode.appendChild(createNode("th", { textContent: "Étiquettes" }));
        return xRowNode;
    },

    createRowNode: function (n, sFlexion, sLemma, sTags) {
        let xRowNode = createNode("tr", { id: "row_" + n });
        xRowNode.appendChild(createNode("td", { textContent: "×", className: "delete_entry", title: "Effacer cette entrée" }, { id_entry: n }));
        xRowNode.appendChild(createNode("td", { textContent: n }));
        xRowNode.appendChild(createNode("td", { textContent: sFlexion }));
        xRowNode.appendChild(createNode("td", { textContent: sLemma }));
        xRowNode.appendChild(createNode("td", { textContent: sTags }));
        return xRowNode;
    },

    displayTable: function (lFlex) {
        this.clearTable();
        if (lFlex.length > 0) {
            this.showElement("display_progress");
            let xDisplayProgress = document.getElementById("display_progress");
            let xTable = document.getElementById("table");
            let n = 0;
            xDisplayProgress.max = lFlex.length;
            xDisplayProgress.value = 1;
            this.hideElement("no_elem_line");
            xTable.appendChild(this.createTableHeader());
            for (let [sFlexion, sLemma, sTags] of lFlex) {
                xTable.appendChild(this.createRowNode(n, sFlexion, sLemma, sTags));
                n += 1;
                xDisplayProgress.value += 1;
            }
            xDisplayProgress.value = xDisplayProgress.max;
            this.hideElement("display_progress");
        } else {
            this.showElement("no_elem_line");
        }
        this.updateData();
    },

    clearTable: function () {
        let xTable = document.getElementById("table");
        while (xTable.firstChild) {
            xTable.removeChild(xTable.firstChild);
        }
    },

    onTableClick: function (xEvent) {
        try {
................................................................................
    },

    addEntriesToTable: function (iStart, lFlex) {
        let xTable = document.getElementById("table");
        if (lFlex.length > 0) {
            if (document.getElementById("no_elem_line").style.display !== "none") {
                this.hideElement("no_elem_line");
                xTable.appendChild(this.createTableHeader());
            }
            for (let [sFlexion, sLemma, sTags] of lFlex) {
                xTable.appendChild(this.createRowNode(iStart, sFlexion, sLemma, sTags));
                iStart += 1;
            }
        }
        this.updateData();
    },

    deleteEntry: function (iEntry) {
................................................................................

    cMainTag: "",

    lFlexion: [],

    clear: function () {
        this.lFlexion = [];
        oWidgets.hideElement("actions");
    },

    setMainTag: function (sValue) {
        this.cMainTag = sValue;
    },

    addFlexion: function (sFlexion, sLemma, sTag) {
................................................................................
        }
        return null;
    },

    show: function () {
        let sText = "";
        for (let [sFlexion, sLemma, sTag] of this.lFlexion) {
            sText += sFlexion + " (" + sLemma + ") " + sTag + "\n";
        }
        if (sText) {
            document.getElementById("results").textContent = sText;
            oWidgets.showElement("actions");
        } else {
            oWidgets.hideElement("actions");
        }
    },

    addToLexicon: function () {
        try {
            oLexicon.addFlexions(this.lFlexion);
            document.getElementById("lemma").value = "";
            document.getElementById("lemma").focus();
            oWidgets.showSection("section_vide");
            oWidgets.hideElement("editor");
            oWidgets.hideElement("actions");
            oWidgets.clear();
            oWidgets.showElement("save_button");
            this.clear();
            this.cMainTag = "";
        }
        catch (e) {
            showError(e);
................................................................................
    nEntries: 0,
    nDeletedEntries: 0,
    nAddedEntries: 0,

    set: function (lFlexion) {
        this.lFlexion = lFlexion;
        this.resetModif();
        oWidgets.displayTable(this.lFlexion);
        if (this.lFlexion.length > 0) {
            oWidgets.showElement("export_button");
        } else {
            oWidgets.hideElement("export_button");
        }
    },

................................................................................
    },

    save: function () {
        oWidgets.hideElement("save_button");
        this.lFlexion = this.lFlexion.filter((e) => e !== null);
        oBinaryDict.build(this.lFlexion);
        this.resetModif();
        oWidgets.displayTable(this.lFlexion);
        oWidgets.updateData();
    }
}


const oBinaryDict = {
    







<

<












|









|









|
|








|

|











|
|







 







|


|







 







<







 







|

<
|
<
<
<
<







<

<







 







|







 







|







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
...
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
...
279
280
281
282
283
284
285

286
287
288
289
290
291
292
...
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
...
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
...
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
    },

    onWrite: function () {
        if (document.getElementById("lemma").value.trim() !== "") {
            this.showElement("editor");
            oFlexGen.update();
        } else {

            this.hideElement("editor");

        }
    },

    onWrite2: function () {
        if (document.getElementById("lemma2").value.trim() !== "") {
            this.showElement("word_section2");
            oFlexGen.update();
        } else {
            this.hideElement("word_section2");
        }
    },

    createLexiconHeader: function () {
        let xRowNode = createNode("tr");
        xRowNode.appendChild(createNode("th", { textContent: "·" }));
        xRowNode.appendChild(createNode("th", { textContent: "#" }));
        xRowNode.appendChild(createNode("th", { textContent: "Forme fléchie" }));
        xRowNode.appendChild(createNode("th", { textContent: "Lemme" }));
        xRowNode.appendChild(createNode("th", { textContent: "Étiquettes" }));
        return xRowNode;
    },

    createLexiconRow: function (n, sFlexion, sLemma, sTags) {
        let xRowNode = createNode("tr", { id: "row_" + n });
        xRowNode.appendChild(createNode("td", { textContent: "×", className: "delete_entry", title: "Effacer cette entrée" }, { id_entry: n }));
        xRowNode.appendChild(createNode("td", { textContent: n }));
        xRowNode.appendChild(createNode("td", { textContent: sFlexion }));
        xRowNode.appendChild(createNode("td", { textContent: sLemma }));
        xRowNode.appendChild(createNode("td", { textContent: sTags }));
        return xRowNode;
    },

    fillLexiconTable: function (lFlex) {
        this.clearTable("table");
        if (lFlex.length > 0) {
            this.showElement("display_progress");
            let xDisplayProgress = document.getElementById("display_progress");
            let xTable = document.getElementById("table");
            let n = 0;
            xDisplayProgress.max = lFlex.length;
            xDisplayProgress.value = 1;
            this.hideElement("no_elem_line");
            xTable.appendChild(this.createLexiconHeader());
            for (let [sFlexion, sLemma, sTags] of lFlex) {
                xTable.appendChild(this.createLexiconRow(n, sFlexion, sLemma, sTags));
                n += 1;
                xDisplayProgress.value += 1;
            }
            xDisplayProgress.value = xDisplayProgress.max;
            this.hideElement("display_progress");
        } else {
            this.showElement("no_elem_line");
        }
        this.updateData();
    },

    clearTable: function (sNodeId) {
        let xTable = document.getElementById(sNodeId);
        while (xTable.firstChild) {
            xTable.removeChild(xTable.firstChild);
        }
    },

    onTableClick: function (xEvent) {
        try {
................................................................................
    },

    addEntriesToTable: function (iStart, lFlex) {
        let xTable = document.getElementById("table");
        if (lFlex.length > 0) {
            if (document.getElementById("no_elem_line").style.display !== "none") {
                this.hideElement("no_elem_line");
                xTable.appendChild(this.createLexiconHeader());
            }
            for (let [sFlexion, sLemma, sTags] of lFlex) {
                xTable.appendChild(this.createLexiconRow(iStart, sFlexion, sLemma, sTags));
                iStart += 1;
            }
        }
        this.updateData();
    },

    deleteEntry: function (iEntry) {
................................................................................

    cMainTag: "",

    lFlexion: [],

    clear: function () {
        this.lFlexion = [];

    },

    setMainTag: function (sValue) {
        this.cMainTag = sValue;
    },

    addFlexion: function (sFlexion, sLemma, sTag) {
................................................................................
        }
        return null;
    },

    show: function () {
        let sText = "";
        for (let [sFlexion, sLemma, sTag] of this.lFlexion) {
            sText += sFlexion + "\t" + sTag + "\n";
        }

        document.getElementById("results").textContent = sText;




    },

    addToLexicon: function () {
        try {
            oLexicon.addFlexions(this.lFlexion);
            document.getElementById("lemma").value = "";
            document.getElementById("lemma").focus();

            oWidgets.hideElement("editor");

            oWidgets.clear();
            oWidgets.showElement("save_button");
            this.clear();
            this.cMainTag = "";
        }
        catch (e) {
            showError(e);
................................................................................
    nEntries: 0,
    nDeletedEntries: 0,
    nAddedEntries: 0,

    set: function (lFlexion) {
        this.lFlexion = lFlexion;
        this.resetModif();
        oWidgets.fillLexiconTable(this.lFlexion);
        if (this.lFlexion.length > 0) {
            oWidgets.showElement("export_button");
        } else {
            oWidgets.hideElement("export_button");
        }
    },

................................................................................
    },

    save: function () {
        oWidgets.hideElement("save_button");
        this.lFlexion = this.lFlexion.filter((e) => e !== null);
        oBinaryDict.build(this.lFlexion);
        this.resetModif();
        oWidgets.fillLexiconTable(this.lFlexion);
        oWidgets.updateData();
    }
}


const oBinaryDict = {