ADDED gc_lang/fr/tb/content/file_handler.js
Index: gc_lang/fr/tb/content/file_handler.js
==================================================================
--- /dev/null
+++ gc_lang/fr/tb/content/file_handler.js
@@ -0,0 +1,79 @@
+// JavaScript
+
+"use strict";
+
+// Assuming that Cc, Ci and Cu are already loaded
+
+const {TextDecoder, TextEncoder, OS} = Components.utils.import("resource://gre/modules/osfile.jsm", {});
+
+
+const oFileHandler = {
+ // https://developer.mozilla.org/fr/docs/Mozilla/JavaScript_code_modules/OSFile.jsm/OS.File_for_the_main_thread
+
+ xDataFolder: null,
+
+ prepareDataFolder: function () {
+ let xDirectoryService = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties);
+ // this is a reference to the profile dir (ProfD) now.
+ let xExtFolder = xDirectoryService.get("ProfD", Ci.nsIFile);
+ xExtFolder.append("grammalecte-data");
+ if (!xExtFolder.exists() || !xExtFolder.isDirectory()) {
+ // read and write permissions to owner and group, read-only for others.
+ xExtFolder.create(Ci.nsIFile.DIRECTORY_TYPE, 774);
+ }
+ this.xDataFolder = xExtFolder;
+ },
+
+ createPathFileName: function (sFilename) {
+ let spfDest = this.xDataFolder.path;
+ spfDest += (/^[A-Z]:/.test(this.xDataFolder.path)) ? "\\" + sFilename : "/" + sFilename;
+ return spfDest;
+ },
+
+ loadFile: async function (sFilename) {
+ if (!this.xDataFolder) {
+ this.prepareDataFolder();
+ }
+ try {
+ let xDecoder = new TextDecoder();
+ let array = await OS.File.read(this.createPathFileName(sFilename));
+ 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);
+ console.log("save dictionary: " + this.createPathFileName(sFilename));
+ OS.File.writeAtomic(this.createPathFileName(sFilename), xEncodedRes);
+ //OS.File.writeAtomic(this.createPathFileName(sFilename), xEncodedRes, {tmpPath: "file.txt.tmp"}); // error with a temporary file (can’t move it)
+ },
+
+ deleteFile: function (sFilename) {
+ if (!this.xDataFolder) {
+ this.prepareDataFolder();
+ }
+ OS.File.remove(this.createPathFileName(sFilename), {ignoreAbsent: true});
+ },
+
+ saveAs: function (sData) {
+ // save anywhere with file picker
+ let xFilePicker = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
+ 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"});
+ }
+ });
+ }
+}
Index: gc_lang/fr/tb/content/lex_editor.js
==================================================================
--- gc_lang/fr/tb/content/lex_editor.js
+++ gc_lang/fr/tb/content/lex_editor.js
@@ -5,12 +5,10 @@
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
const prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.grammarchecker.");
-const {TextDecoder, TextEncoder, OS} = Cu.import("resource://gre/modules/osfile.jsm", {});
-
/*
Common functions
*/
@@ -474,86 +472,14 @@
let sJSON = JSON.stringify(this.oIBDAWG.getJSON());
oFileHandler.saveAs(sJSON);
}
}
-
-const oFileHandler = {
- // https://developer.mozilla.org/fr/docs/Mozilla/JavaScript_code_modules/OSFile.jsm/OS.File_for_the_main_thread
-
- xDataFolder: null,
-
- createDataFolder: function () {
- let xDirectoryService = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties);
- // this is a reference to the profile dir (ProfD) now.
- let xExtFolder = xDirectoryService.get("ProfD", Ci.nsIFile);
- xExtFolder.append("grammalecte-data");
- if (!xExtFolder.exists() || !xExtFolder.isDirectory()) {
- // read and write permissions to owner and group, read-only for others.
- xExtFolder.create(Ci.nsIFile.DIRECTORY_TYPE, 774);
- }
- this.xDataFolder = xExtFolder;
- },
-
- createPathFileName: function (sFilename) {
- let spfDest = this.xDataFolder.path;
- spfDest += (/^[A-Z]:/.test(this.xDataFolder.path)) ? "\\" + sFilename : "/" + sFilename;
- return spfDest;
- },
-
- loadFile: async function (sFilename) {
- if (!this.xDataFolder) {
- this.createDataFolder();
- }
- try {
- let xDecoder = new TextDecoder();
- let array = await OS.File.read(this.createPathFileName(sFilename));
- return xDecoder.decode(array);
- }
- catch (e) {
- console.error(e);
- return "";
- }
- },
-
- saveFile: function (sFilename, sData) {
- if (!this.xDataFolder) {
- this.createDataFolder();
- }
- let xEncoder = new TextEncoder();
- let xEncodedRes = xEncoder.encode(sData);
- console.log("save dictionary: " + this.createPathFileName(sFilename));
- OS.File.writeAtomic(this.createPathFileName(sFilename), xEncodedRes);
- //OS.File.writeAtomic(this.createPathFileName(sFilename), xEncodedRes, {tmpPath: "file.txt.tmp"}); // error with a temporary file (can’t move it)
- },
-
- deleteFile: function (sFilename) {
- if (!this.xDataFolder) {
- this.createDataFolder();
- }
- OS.File.remove(this.createPathFileName(sFilename), {ignoreAbsent: true});
- },
-
- saveAs: function (sData) {
- // save anywhere with file picker
- let xFilePicker = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
- 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"});
- }
- });
- }
-}
-
const oGenWordsTable = new Table("generated_words_table", ["Flexions", "Étiquettes"], [1, 1], "progress_new_words");
const oLexiconTable = new Table("lexicon_table", ["Flexions", "Lemmes", "Étiquettes"], [10, 7, 10], "progress_lexicon", "num_entries");
conj.init(helpers.loadFile("resource://grammalecte/fr/conj_data.json"));
oBinaryDict.load();
oBinaryDict.listen();
oGenerator.listen();
Index: gc_lang/fr/tb/content/lex_editor.xul
==================================================================
--- gc_lang/fr/tb/content/lex_editor.xul
+++ gc_lang/fr/tb/content/lex_editor.xul
@@ -217,8 +217,9 @@
+
Index: gc_lang/fr/tb/content/overlay.js
==================================================================
--- gc_lang/fr/tb/content/overlay.js
+++ gc_lang/fr/tb/content/overlay.js
@@ -47,20 +47,28 @@
loadGC: function () {
if (this.xGCEWorker === null) {
// Grammar checker
echo('Loading Grammalecte');
this.xGCEWorker = new BasePromiseWorker('chrome://promiseworker/content/gce_worker.js');
+ let that = this;
let xPromise = this.xGCEWorker.post('loadGrammarChecker', [prefs.getCharPref("sGCOptions"), "Thunderbird"]);
xPromise.then(
function (aVal) {
echo(aVal);
prefs.setCharPref("sGCOptions", aVal);
+ if (prefs.getBoolPref("bPersonalDictionary")) {
+ let sDicJSON = oFileHandler.loadFile("fr.personal.json");
+ if (sDicJSON) {
+ that.xGCEWorker.post('setDictionary', ["personal", sDicJSON]);
+ }
+ }
},
function (aReason) { echo('Promise rejected - ', aReason); }
).catch(
function (aCaught) { echo('Promise Error - ', aCaught); }
);
+
}
},
fullTests: function () {
echo('Performing tests... Wait...');
let xPromise = this.xGCEWorker.post('fullTests', ['{"nbsp":true, "esp":true, "unit":true, "num":true}']);
Index: gc_lang/fr/tb/content/overlay.xul
==================================================================
--- gc_lang/fr/tb/content/overlay.xul
+++ gc_lang/fr/tb/content/overlay.xul
@@ -6,10 +6,11 @@
+
Index: gc_lang/fr/tb/defaults/preferences/grammarchecker.js
==================================================================
--- gc_lang/fr/tb/defaults/preferences/grammarchecker.js
+++ gc_lang/fr/tb/defaults/preferences/grammarchecker.js
@@ -3,8 +3,8 @@
pref("extensions.grammarchecker.bDictModern", false);
pref("extensions.grammarchecker.bDictClassic", true);
pref("extensions.grammarchecker.bDictReform", false);
pref("extensions.grammarchecker.bDictClassicReform", false);
pref("extensions.grammarchecker.bCheckSignature", true);
-pref("extensions.grammarchecker.oExtendedDictionary", "");
-pref("extensions.grammarchecker.oCommunityDictionary", "");
-pref("extensions.grammarchecker.oPersonalDictionary", "");
+pref("extensions.grammarchecker.bExtendedDictionary", false);
+pref("extensions.grammarchecker.bCommunityDictionary", false);
+pref("extensions.grammarchecker.bPersonalDictionary", true);
Index: gc_lang/fr/tb/worker/gce_worker.js
==================================================================
--- gc_lang/fr/tb/worker/gce_worker.js
+++ gc_lang/fr/tb/worker/gce_worker.js
@@ -75,10 +75,31 @@
catch (e) {
console.log("# Error: " + e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message);
}
}
}
+
+function setDictionary (sTypeDic, sDicJSON) {
+ try {
+ console.log("set dictionary: " + sTypeDic);
+ let oJSON = JSON.parse(sDicJSON);
+ switch (sTypeDic) {
+ case "extended":
+ break;
+ case "community":
+ break;
+ case "personal":
+ oSpellChecker.setPersonalDictionary(oJSON);
+ break;
+ default:
+ console.log("[GCE worker] unknow dictionary type");
+ }
+ }
+ catch (e) {
+ console.error(e);
+ }
+}
function parse (sText, sCountry, bDebug, bContext) {
let aGrammErr = gce.parse(sText, sCountry, bDebug, bContext);
return JSON.stringify(aGrammErr);
}