Grammalecte  Check-in [81f4f65958]

Overview
Comment:[tb] lexicon editor: import dictionary
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | tb | multid
Files: files | file ages | folders
SHA3-256: 81f4f65958f9e0f09524caa4b2489ed8d4263b19f33d7b78baf12be5bec24e94
User & Date: olr on 2018-03-28 13:15:21
Other Links: branch diff | manifest | tags
Context
2018-03-28
13:34
[tb] lexicon editor: import dictionary (handle errors) check-in: 657ac428bc user: olr tags: tb, multid
13:15
[tb] lexicon editor: import dictionary check-in: 81f4f65958 user: olr tags: tb, multid
10:53
[lo] lexicon editor: import dictionary check-in: 635fcc243b user: olr tags: lo, multid
Changes

Modified gc_lang/fr/tb/content/file_handler.js from [39a972038f] to [6a1367bab5].

40
41
42
43
44
45
46




















47
48
49
50
51
52
53
            return xDecoder.decode(array);
        }
        catch (e) {
            console.error(e);
            return null;
        }
    },





















    saveFile: function (sFilename, sData) {
        if (!this.xDataFolder) {
            this.prepareDataFolder();
        }
        let xEncoder = new TextEncoder();
        let xEncodedRes = xEncoder.encode(sData);







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
            return xDecoder.decode(array);
        }
        catch (e) {
            console.error(e);
            return null;
        }
    },

    loadAs: function (callback) {
        let xFilePicker = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
        xFilePicker.init(window, "Charger fichier", Ci.nsIFilePicker.modeOpen);
        xFilePicker.appendFilters(Ci.nsIFilePicker.filterAll | Ci.nsIFilePicker.filterText);
        xFilePicker.open(async function (nReturnValue) {
            if (nReturnValue == Ci.nsIFilePicker.returnOK || nReturnValue == Ci.nsIFilePicker.returnReplace) {
                console.log(xFilePicker.file.path);
                try {
                    let xDecoder = new TextDecoder();
                    let array = await OS.File.read(xFilePicker.file.path);
                    callback(xDecoder.decode(array));
                }
                catch (e) {
                    console.error(e);
                    callback(null);
                }
            }
        });
    },

    saveFile: function (sFilename, sData) {
        if (!this.xDataFolder) {
            this.prepareDataFolder();
        }
        let xEncoder = new TextEncoder();
        let xEncodedRes = xEncoder.encode(sData);
69
70
71
72
73
74
75
76
77
78
79
        xFilePicker.init(window, "Enregistrer sous", Ci.nsIFilePicker.modeSave);
        xFilePicker.appendFilters(Ci.nsIFilePicker.filterAll | Ci.nsIFilePicker.filterText);
        xFilePicker.open(function (nReturnValue) {
            if (nReturnValue == Ci.nsIFilePicker.returnOK || nReturnValue == Ci.nsIFilePicker.returnReplace) {
                let xEncoder = new TextEncoder();
                let xEncodedRes = xEncoder.encode(sData);
                OS.File.writeAtomic(xFilePicker.file.path, xEncodedRes, {tmpPath: "file.txt.tmp"});
             }
        });
    }
}







|



89
90
91
92
93
94
95
96
97
98
99
        xFilePicker.init(window, "Enregistrer sous", Ci.nsIFilePicker.modeSave);
        xFilePicker.appendFilters(Ci.nsIFilePicker.filterAll | Ci.nsIFilePicker.filterText);
        xFilePicker.open(function (nReturnValue) {
            if (nReturnValue == Ci.nsIFilePicker.returnOK || nReturnValue == Ci.nsIFilePicker.returnReplace) {
                let xEncoder = new TextEncoder();
                let xEncodedRes = xEncoder.encode(sData);
                OS.File.writeAtomic(xFilePicker.file.path, xEncodedRes, {tmpPath: "file.txt.tmp"});
            }
        });
    }
}

Modified gc_lang/fr/tb/content/lex_editor.css from [bcaa37e951] to [f637f1110a].

94
95
96
97
98
99
100



101
102
103
104
105
106
107
*/

#search_table {
    width: 600px;
    height: 650px;
}




description {
    width: 200px;
}

/*
    Informations tab
*/







>
>
>







94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
*/

#search_table {
    width: 600px;
    height: 650px;
}

.bold {
    font-weight: bold;
}
description {
    width: 200px;
}

/*
    Informations tab
*/

Modified gc_lang/fr/tb/content/lex_editor.js from [fada324b17] to [f6cd059092].

417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438

















439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480

const oBinaryDict = {
    
    oIBDAWG: null,

    load: async function () {
        let sJSON = await oFileHandler.loadFile("fr.personal.json");
        if (sJSON != "") {
            let oJSON = JSON.parse(sJSON);
            this.oIBDAWG = new IBDAWG(oJSON);
            let lEntry = [];
            for (let aRes of this.oIBDAWG.select()) {
                lEntry.push(aRes);
            }        
            oLexiconTable.fill(lEntry);
            this.setDictData(this.oIBDAWG.nEntry, this.oIBDAWG.sDate);
            enableElement("export_button");
        } else {
            this.setDictData(0, "[néant]");
            disableElement("export_button");
        }
    },


















    setDictData: function (nEntries, sDate) {
        document.getElementById("dic_num_entries").value = nEntries;
        document.getElementById("dic_save_date").value = sDate;
    },

    listen: function () {
        document.getElementById("delete_button").addEventListener("click", () => { oLexiconTable.deleteSelection(); }, false);
        document.getElementById("save_button").addEventListener("click", () => { this.build(); }, false);
        document.getElementById("export_button").addEventListener("click", () => { this.export(); }, false);
        //document.getElementById("import_button").addEventListener("click", () => { this.import(); }, false);
    },

    build: function () {
        let xProgressNode = document.getElementById("wait_progress");
        let lEntry = oLexiconTable.getEntries();
        if (lEntry.length > 0) {
            let oDAWG = new DAWG(lEntry, "S", "fr", "Français", "Dictionnaire personnel", xProgressNode);
            let oJSON = oDAWG.createBinaryJSON(1);
            oFileHandler.saveFile("fr.personal.json", JSON.stringify(oJSON));
            this.oIBDAWG = new IBDAWG(oJSON);
            this.setDictData(this.oIBDAWG.nEntry, this.oIBDAWG.sDate);
            //browser.runtime.sendMessage({ sCommand: "setDictionary", dParam: {sType: "personal", oDict: oJSON}, dInfo: {} });
            enableElement("export_button");
        } else {
            oFileHandler.deleteFile("fr.personal.json");
            this.setDictData(0, "[néant]");
            disableElement("export_button");
        }
    },

    import: function () {
        console.log("import");
    },

    export: function () {
        let sJSON = JSON.stringify(this.oIBDAWG.getJSON());
        oFileHandler.saveAs(sJSON);
    }
}









|














>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>










|




















<
<
<
<







417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486




487
488
489
490
491
492
493

const oBinaryDict = {
    
    oIBDAWG: null,

    load: async function () {
        let sJSON = await oFileHandler.loadFile("fr.personal.json");
        if (sJSON) {
            let oJSON = JSON.parse(sJSON);
            this.oIBDAWG = new IBDAWG(oJSON);
            let lEntry = [];
            for (let aRes of this.oIBDAWG.select()) {
                lEntry.push(aRes);
            }        
            oLexiconTable.fill(lEntry);
            this.setDictData(this.oIBDAWG.nEntry, this.oIBDAWG.sDate);
            enableElement("export_button");
        } else {
            this.setDictData(0, "[néant]");
            disableElement("export_button");
        }
    },

    import: function () {
        oFileHandler.loadAs(this._import.bind(this));
    },

    _import: function (sJSON) {
        if (sJSON) {
            let oJSON = JSON.parse(sJSON);
            this.oIBDAWG = new IBDAWG(oJSON);
            oFileHandler.saveFile("fr.personal.json", JSON.stringify(oJSON));
            let lEntry = [];
            for (let aRes of this.oIBDAWG.select()) {
                lEntry.push(aRes);
            }        
            oLexiconTable.fill(lEntry);
        }
    },

    setDictData: function (nEntries, sDate) {
        document.getElementById("dic_num_entries").value = nEntries;
        document.getElementById("dic_save_date").value = sDate;
    },

    listen: function () {
        document.getElementById("delete_button").addEventListener("click", () => { oLexiconTable.deleteSelection(); }, false);
        document.getElementById("save_button").addEventListener("click", () => { this.build(); }, false);
        document.getElementById("export_button").addEventListener("click", () => { this.export(); }, false);
        document.getElementById("import_button").addEventListener("click", () => { this.import(); }, false);
    },

    build: function () {
        let xProgressNode = document.getElementById("wait_progress");
        let lEntry = oLexiconTable.getEntries();
        if (lEntry.length > 0) {
            let oDAWG = new DAWG(lEntry, "S", "fr", "Français", "Dictionnaire personnel", xProgressNode);
            let oJSON = oDAWG.createBinaryJSON(1);
            oFileHandler.saveFile("fr.personal.json", JSON.stringify(oJSON));
            this.oIBDAWG = new IBDAWG(oJSON);
            this.setDictData(this.oIBDAWG.nEntry, this.oIBDAWG.sDate);
            //browser.runtime.sendMessage({ sCommand: "setDictionary", dParam: {sType: "personal", oDict: oJSON}, dInfo: {} });
            enableElement("export_button");
        } else {
            oFileHandler.deleteFile("fr.personal.json");
            this.setDictData(0, "[néant]");
            disableElement("export_button");
        }
    },





    export: function () {
        let sJSON = JSON.stringify(this.oIBDAWG.getJSON());
        oFileHandler.saveAs(sJSON);
    }
}


Modified gc_lang/fr/tb/content/lex_editor.xul from [083e5f25e5] to [3c9d57fa8f].

21
22
23
24
25
26
27

28
29
30
31
32
33
34
    <spacer flex="1" />
    <label class="dic_text align_right" value="Enregistré le :" />
    <label id="dic_save_date" class="dic_text" value="[néant]" />
    <spacer flex="1" />
    <label id="dic_num_entries" class="dic_text align_right" value="0" />
    <label class="dic_text" value="entrées" />
    <spacer flex="1" />

    <button id="export_button" label="Exporter" />
  </hbox>

  <tabbox id="tabs" selectedIndex="0">
    <tabs>
      <tab label="&tab.editor.label;"/>
      <tab label="&tab.lexicon.label;"/>







>







21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    <spacer flex="1" />
    <label class="dic_text align_right" value="Enregistré le :" />
    <label id="dic_save_date" class="dic_text" value="[néant]" />
    <spacer flex="1" />
    <label id="dic_num_entries" class="dic_text align_right" value="0" />
    <label class="dic_text" value="entrées" />
    <spacer flex="1" />
    <button id="import_button" label="Importer" />
    <button id="export_button" label="Exporter" />
  </hbox>

  <tabbox id="tabs" selectedIndex="0">
    <tabs>
      <tab label="&tab.editor.label;"/>
      <tab label="&tab.lexicon.label;"/>
272
273
274
275
276
277
278

279


280


281
282
283
284
285
286
287
288
289
290
        </hbox>
      </tabpanel>

      <tabpanel orient="vertical">
        <hbox>
          <vbox>
            <dialogheader title="&dialogheader.info.label;" description="" />

            <description>Les modifications apportées au lexique ne sont enregistrées dans le dictionnaire qu’au moment où vous cliquez sur ‹Enregistrer› dans l’onglet ‹Lexique›.</description>


            <description>Il est inutile de purger votre lexique des doublons éventuels. Les doublons sont automatiquement supprimés lors de la création du dictionnaire.</description>


            <description>Le dictionnaire est compilé comme un graphe de mots sous la forme d’une chaîne binaire dans un fichier JSON. Cette opération peut prendre du temps et consommer beaucoup de mémoire si votre lexique contient plusieurs dizaines de milliers d’entrées.</description>
            <spacer flex="1" />
            <label value="Avertissement :" />
            <description>Il est déconseillé d’utiliser la catégorie ‹Autre› pour générer autre chose que des noms, des adjectifs, des noms propres, des verbes et des adverbes. Il n’y a aucune garantie que les étiquettes pour les autres catégories, notamment les mots grammaticaux, ne changeront pas.</description>
          </vbox>
          <vbox>
            <dialogheader title="Signification des étiquettes" description="" />
            <listbox id="tags_table">
              <!--
              <listhead>







>

>
>

>
>


|







273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
        </hbox>
      </tabpanel>

      <tabpanel orient="vertical">
        <hbox>
          <vbox>
            <dialogheader title="&dialogheader.info.label;" description="" />
            <label class="bold" value="Enregistrement" />
            <description>Les modifications apportées au lexique ne sont enregistrées dans le dictionnaire qu’au moment où vous cliquez sur ‹Enregistrer› dans l’onglet ‹Lexique›.</description>
            <spacer flex="1" />
            <label class="bold" value="Doublons" />
            <description>Il est inutile de purger votre lexique des doublons éventuels. Les doublons sont automatiquement supprimés lors de la création du dictionnaire.</description>
            <spacer flex="1" />
            <label class="bold" value="Compilation du dictionnaire" />
            <description>Le dictionnaire est compilé comme un graphe de mots sous la forme d’une chaîne binaire dans un fichier JSON. Cette opération peut prendre du temps et consommer beaucoup de mémoire si votre lexique contient plusieurs dizaines de milliers d’entrées.</description>
            <spacer flex="1" />
            <label class="bold" value="Avertissement" />
            <description>Il est déconseillé d’utiliser la catégorie ‹Autre› pour générer autre chose que des noms, des adjectifs, des noms propres, des verbes et des adverbes. Il n’y a aucune garantie que les étiquettes pour les autres catégories, notamment les mots grammaticaux, ne changeront pas.</description>
          </vbox>
          <vbox>
            <dialogheader title="Signification des étiquettes" description="" />
            <listbox id="tags_table">
              <!--
              <listhead>