Index: gc_lang/fr/modules-js/phonet.js ================================================================== --- gc_lang/fr/modules-js/phonet.js +++ gc_lang/fr/modules-js/phonet.js @@ -1,35 +1,45 @@ // Grammalecte - Suggestion phonétique -if (typeof(exports) !== 'undefined') { +if (typeof(require) !== 'undefined') { var helpers = require("resource://grammalecte/helpers.js"); } -const _oPhonetData = JSON.parse(helpers.loadFile("resource://grammalecte/fr/phonet_data.json")); -const _dPhonetWord = helpers.objectToMap(_oPhonetData.dWord); -const _lPhonetSet = _oPhonetData.lSet; -const _dPhonetMorph = helpers.objectToMap(_oPhonetData.dMorph); +const phonet = { + _dWord: null, + _lSet: null, + _dMorph: null, + init: function (sJSONData) { + try { + let _oData = JSON.parse(sJSONData); + this._dWord = helpers.objectToMap(_oData.dWord); + this._lSet = _oData.lSet; + this._dMorph = helpers.objectToMap(_oData.dMorph); + } + catch (e) { + console.error(e); + } + }, -var phonet = { hasSimil: function (sWord, sPattern=null) { // return True if there is list of words phonetically similar to sWord if (!sWord) { return false; } - if (_dPhonetWord.has(sWord)) { + if (this._dWord.has(sWord)) { if (sPattern) { - return this.getSimil(sWord).some(sSimil => _dPhonetMorph.gl_get(sSimil, []).some(sMorph => sMorph.search(sPattern) >= 0)); + return this.getSimil(sWord).some(sSimil => this._dMorph.gl_get(sSimil, []).some(sMorph => sMorph.search(sPattern) >= 0)); } return true; } if (sWord.slice(0,1).gl_isUpperCase()) { sWord = sWord.toLowerCase(); - if (_dPhonetWord.has(sWord)) { + if (this._dWord.has(sWord)) { if (sPattern) { - return this.getSimil(sWord).some(sSimil => _dPhonetMorph.gl_get(sSimil, []).some(sMorph => sMorph.search(sPattern) >= 0)); + return this.getSimil(sWord).some(sSimil => this._dMorph.gl_get(sSimil, []).some(sMorph => sMorph.search(sPattern) >= 0)); } return true; } } return false; @@ -38,17 +48,17 @@ getSimil: function (sWord) { // return list of words phonetically similar to sWord if (!sWord) { return []; } - if (_dPhonetWord.has(sWord)) { - return _lPhonetSet[_dPhonetWord.get(sWord)]; + if (this._dWord.has(sWord)) { + return this._lSet[this._dWord.get(sWord)]; } if (sWord.slice(0,1).gl_isUpperCase()) { sWord = sWord.toLowerCase(); - if (_dPhonetWord.has(sWord)) { - return _lPhonetSet[_dPhonetWord.get(sWord)]; + if (this._dWord.has(sWord)) { + return this._lSet[this._dWord.get(sWord)]; } } return []; }, @@ -57,21 +67,37 @@ if (!sPattern) { return new Set(this.getSimil(sWord)); } let aSelect = new Set(); for (let sSimil of this.getSimil(sWord)) { - for (let sMorph of _dPhonetMorph.gl_get(sSimil, [])) { + for (let sMorph of this._dMorph.gl_get(sSimil, [])) { if (sMorph.search(sPattern) >= 0) { aSelect.add(sSimil); } } } return aSelect; } } + +// Initialization +if (typeof(browser) !== 'undefined') { + // WebExtension + phonet.init(helpers.loadFile(browser.extension.getURL("grammalecte/fr/phonet_data.json"))); +} else if (typeof(require) !== 'undefined') { + // Add-on SDK and Thunderbird + phonet.init(helpers.loadFile("resource://grammalecte/fr/phonet_data.json")); +} else { + console.log("Error: Impossible d’initialiser le module phonet"); +} + if (typeof(exports) !== 'undefined') { + exports._dWord = phonet._dWord; + exports._lSet = phonet._lSet; + exports._dMorph = phonet._dMorph; + exports.init = phonet.init; exports.hasSimil = phonet.hasSimil; exports.getSimil = phonet.getSimil; exports.selectSimil = phonet.selectSimil; } Index: gc_lang/fr/webext/gce_worker.js ================================================================== --- gc_lang/fr/webext/gce_worker.js +++ gc_lang/fr/webext/gce_worker.js @@ -25,10 +25,13 @@ helpers.echo(conj.getConj("devenir", ":E", ":2s")); helpers.echo(mfsp.getMasForm("emmerdeuse", true)); helpers.echo(mfsp.getMasForm("pointilleuse", false)); + +helpers.echo(phonet.getSimil("est")); + let oTokenizer = null; let oDict = null; let oLxg = null; Index: gc_lang/fr/webext/manifest.json ================================================================== --- gc_lang/fr/webext/manifest.json +++ gc_lang/fr/webext/manifest.json @@ -34,10 +34,11 @@ "grammalecte/helpers.js", "grammalecte/text.js", "grammalecte/tokenizer.js", "grammalecte/fr/conj.js", "grammalecte/fr/mfsp.js", + "grammalecte/fr/phonet.js", "gce_worker.js" ] }, "web_accessible_resources": [ "grammalecte/fr/conj_data.json",