Grammalecte  Changes On Branch 81f981bab265eb51

Changes In Branch webext2_fix Excluding Merge-Ins

This is equivalent to a diff from b844f2ba25 to 81f981bab2

2017-08-09
06:46
[core][js] merge webext2_fix: better init, mimetype for JSON loading, comments for JSHint check-in: 2591cec595 user: olr tags: core, webext2
2017-08-08
19:43
[fr][licence] GPL 3 seulement Closed-Leaf check-in: 81f981bab2 user: olr tags: fr, webext2_fix
19:11
[core] add inline config for JSHint assuming es6 synthax and some global check-in: b89dc82bc4 user: IllusionPerdu tags: webext2_fix
17:51
[fx] merge webext2 check-in: 5a4cc905e2 user: IllusionPerdu tags: fx, webext2_fix
17:44
[core][js] use typeof(require) instead of typeof(exports) check-in: b844f2ba25 user: olr tags: core, webext2
17:25
[fx] conjugueur: panneau et onglet check-in: 1f91810c3d user: olr tags: fx, webext2
16:49
[core][fr] change typeof(exports) before the require block check-in: 6c8ee6edcf user: IllusionPerdu tags: core, webext2_fix

Modified gc_core/js/helpers.js from [8fee48eb89] to [7c62a39694].

1
2


3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
10
11


+
+








// HELPERS
/*jslint esversion: 6*/
/*global console,require,exports,XMLHttpRequest*/

"use strict";

// In Firefox, there is no console.log in PromiseWorker, but there is worker.log.
// In Thunderbird, you can’t access to console directly. So it’s required to pass a log function.
let funcOutput = null;

54
55
56
57
58
59
60

61
62
63
64
65
66
67
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70







+







            } else {
                // JS bullshit again… necessary for Thunderbird
                let { Cc, Ci } = require("chrome");
                xRequest = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance();
                xRequest.QueryInterface(Ci.nsIXMLHttpRequest);
            }
            xRequest.open('GET', spf, false); // 3rd arg is false for synchronous, sync is acceptable in workers
            xRequest.overrideMimeType('text/json');
            xRequest.send();
            return xRequest.responseText;
        }
        catch (e) {
            this.logerror(e);
            return null;
        }

Modified gc_core/js/ibdawg.js from [cdddd20c84] to [4cc6e3ad82].

1


2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
9
10

+
+







//// IBDAWG
/*jslint esversion: 6*/
/*global console,require,exports*/

"use strict";


if (typeof(require) !== 'undefined') {
    var str_transform = require("resource://grammalecte/str_transform.js");
    var helpers = require("resource://grammalecte/helpers.js");

Modified gc_core/js/jsex_map.js from [ca76af0666] to [3dc39be41a].

1
2

3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
10


+








// Map
/*jslint esversion: 6*/

if (Map.prototype.grammalecte === undefined) {
    Map.prototype.gl_shallowCopy = function () {
        let oNewMap = new Map();
        for (let [key, val] of this.entries()) {
            oNewMap.set(key, val);
        }

Modified gc_core/js/jsex_regex.js from [8feeee694f] to [0c1a934c00].

1
2

3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
10


+








// regex
/*jslint esversion: 6*/

if (RegExp.prototype.grammalecte === undefined) {
    RegExp.prototype.gl_exec2 = function (sText, aGroupsPos, aNegLookBefore=null) {
        let m;
        while ((m = this.exec(sText)) !== null) {
            // we have to iterate over sText here too
            // because first match doesn’t imply it’s a valid match according to negative lookbefore assertions,

Modified gc_core/js/jsex_string.js from [86533aa4da] to [34840fe9fe].

1
2

3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
10


+








// String
/*jslint esversion: 6*/

if (String.prototype.grammalecte === undefined) {
    String.prototype.gl_count = function (sSearch, bOverlapping) {
        // http://jsperf.com/string-ocurrence-split-vs-match/8
        if (sSearch.length <= 0) {
            return this.length + 1;
        }

Modified gc_core/js/lang_core/gc_engine.js from [46602d3f85] to [a71cf52ea3].

1


2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
9
10

+
+







// Grammar checker engine
/*jslint esversion: 6*/
/*global console,require,exports*/

"use strict";

${string}
${regex}
${map}

Modified gc_core/js/lang_core/gc_options.js from [ba36100a98] to [f47ea826e5].

1


2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
9
10

+
+







// Options for Grammalecte
/*jslint esversion: 6*/
/*global exports*/

${map}


var gc_options = {
    getOptions: function (sContext="JavaScript") {
        if (this.dOpt.hasOwnProperty(sContext)) {

Modified gc_core/js/lang_core/gc_rules.js from [02fc1d6f94] to [cdb121423e].

1



2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
9
10
11

+
+
+







// Grammar checker rules
/*jslint esversion: 6*/
/*global exports*/

"use strict";

${string}
${regex}

var gc_rules = {
    lParagraphRules: ${paragraph_rules_JS},

Modified gc_core/js/str_transform.js from [3f33d76266] to [6745507121].

1

2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
9

+







//// STRING TRANSFORMATION
/*jslint esversion: 6*/

// Note: 48 is the ASCII code for "0"

var str_transform = {
    getStemFromSuffixCode: function (sFlex, sSfxCode) {
        // Suffix only
        if (sSfxCode == "0") {

Modified gc_core/js/tests.js from [abe05a3485] to [4504bb3576].

1


2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
9
10

+
+







// JavaScript
/*jslint esversion: 6*/
/*global console,require,exports*/

"use strict";


if (typeof(require) !== 'undefined') {
    var helpers = require("resource://grammalecte/helpers.js");
}

Modified gc_core/js/text.js from [2699625d4c] to [2f8045c94f].

1


2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
9
10

+
+







// JavaScript
/*jslint esversion: 6*/
/*global require,exports*/

"use strict";


if (typeof(require) !== 'undefined') {
    var helpers = require("resource://grammalecte/helpers.js");
}

Modified gc_core/js/tokenizer.js from [c0e5d0e035] to [81088a0177].

1
2


3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
10
11


+
+







// JavaScript
// Very simple tokenizer
/*jslint esversion: 6*/
/*global require,exports*/

"use strict";


if (typeof(require) !== 'undefined') {
    var helpers = require("resource://grammalecte/helpers.js");
}

Modified gc_lang/fr/modules-js/conj.js from [abb72eabf4] to [8ec76490ac].

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
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


+
+





+
+
+
+







+







+







// Grammalecte - Conjugueur
// License: GPL 3
/*jslint esversion: 6*/
/*global console,require,exports,self,browser*/

"use strict";

${map}


if (typeof(require) !== 'undefined') {
    var helpers = require("resource://grammalecte/helpers.js");
}

var conj = {
    _lVtyp: [],
    _lTags: [],
    _dPatternConj: {},
    _dVerb: {},

    isInit: false,
    init: function (sJSONData) {
        try {
            let _oData = JSON.parse(sJSONData);
            this._lVtyp = _oData.lVtyp;
            this._lTags = _oData.lTags;
            this._dPatternConj = _oData.dPatternConj;
            this._dVerb = _oData.dVerb;
            this.isInit = true;
        }
        catch (e) {
            console.error(e);
        }
    },

    _zStartVoy: new RegExp("^[aeéiouœê]"),
474
475
476
477
478
479
480
481

482
483
484

485
486
487
488

489
490
491
492
493


494
495
496
497
498
499
500
482
483
484
485
486
487
488

489
490
491

492
493

494

495
496
497
498
499
500
501
502
503
504
505
506
507
508
509







-
+


-
+

-

-
+





+
+







        }
        return (this.dConj.get(":PQ").get(":Q4")) ? this.dConj.get(":PQ").get(":Q4") : this.dConj.get(":PQ").get(":Q1");
    }
}


// Initialization
if (typeof(browser) !== 'undefined') {
if (!conj.isInit && typeof(browser) !== 'undefined') {
    // WebExtension (but not in Worker)
    conj.init(helpers.loadFile(browser.extension.getURL("grammalecte/fr/conj_data.json")));
} else if (typeof(require) !== 'undefined') {
} else if (!conj.isInit && typeof(require) !== 'undefined') {
    // Add-on SDK and Thunderbird
    let helpers = require("resource://grammalecte/helpers.js");
    conj.init(helpers.loadFile("resource://grammalecte/fr/conj_data.json"));
} else if (typeof(self) !== 'undefined' && typeof(self.port) !== 'undefined' && typeof(self.port.on) !== "undefined") {
} else if ( !conj.isInit && typeof(self) !== 'undefined' && typeof(self.port) !== 'undefined' && typeof(self.port.on) !== "undefined") {
    // used within Firefox content script (conjugation panel).
    // can’t load JSON from here, so we do it in ui.js and send it here.
    self.port.on("provideConjData", function (sJSONData) {
        conj.init(sJSONData);
    });    
} else if (conj.isInit){
    console.log("Module conj déjà initialisé");
} else {
    console.log("Module conj non initialisé");
}


if (typeof(exports) !== 'undefined') {
    exports._lVtyp = conj._lVtyp;

Modified gc_lang/fr/modules-js/cregex.js from [7faa9e5e5e] to [97d67d03aa].

1

2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
9

+







//// Grammalecte - Compiled regular expressions
/*jslint esversion: 6*/


var cregex = {
    ///// Lemme
    _zLemma: new RegExp(">([a-zà-öø-ÿ0-9Ā-ʯ][a-zà-öø-ÿ0-9Ā-ʯ-]+)"),

    ///// Masculin / féminin / singulier / pluriel

Modified gc_lang/fr/modules-js/gce_analyseur.js from [0ad6fe5843] to [e2613ddcd2].

1

2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
9

+







//// GRAMMAR CHECKING ENGINE PLUGIN: Parsing functions for French language
/*jslint esversion: 6*/

function rewriteSubject (s1, s2) {
    // s1 is supposed to be prn/patr/npr (M[12P])
    if (s2 == "lui") {
        return "ils";
    }
    if (s2 == "moi") {

Modified gc_lang/fr/modules-js/gce_date_verif.js from [de4d3b5e04] to [f30dbe242e].

1

2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
9

+







//// GRAMMAR CHECKING ENGINE PLUGIN
/*jslint esversion: 6*/

// Check date validity

// WARNING: when creating a Date, month must be between 0 and 11


const _lDay = ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"];

Modified gc_lang/fr/modules-js/gce_suggestions.js from [b1d136482e] to [0d3c06e52f].

1


2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
9
10

+
+







//// GRAMMAR CHECKING ENGINE PLUGIN: Suggestion mechanisms
/*jslint esversion: 6*/
/*global require*/

if (typeof(require) !== 'undefined') {
    var conj = require("resource://grammalecte/fr/conj.js");
    var mfsp = require("resource://grammalecte/fr/mfsp.js");
    var phonet = require("resource://grammalecte/fr/phonet.js");
}

Modified gc_lang/fr/modules-js/lexicographe.js from [9672629a43] to [fd0872dfca].

1
2


3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
10
11


+
+







// Grammalecte - Lexicographe
// License: MPL 2
/*jslint esversion: 6*/
/*global require,exports*/

"use strict";

${string}
${map}


Modified gc_lang/fr/modules-js/mfsp.js from [5ce8b4f9f6] to [9f60b851a7].

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
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

+
+


















+







+







// Grammalecte
/*jslint esversion: 6*/
/*global console,require,exports,browser*/

"use strict";


if (typeof(require) !== 'undefined') {
    var helpers = require("resource://grammalecte/helpers.js");
}


var mfsp = {
    // list of affix codes
    _lTagMiscPlur: [],
    _lTagMasForm: [],
    // dictionary of words with uncommon plurals (-x, -ux, english, latin and italian plurals) and tags to generate them
    _dMiscPlur: new Map(),
    // dictionary of feminine forms and tags to generate masculine forms (singular and plural)
    _dMasForm: new Map(),

    isInit: false,
    init: function (sJSONData) {
        try {
            let _oData = JSON.parse(sJSONData);
            this._lTagMiscPlur = _oData.lTagMiscPlur;
            this._lTagMasForm = _oData.lTagMasForm;
            this._dMiscPlur = helpers.objectToMap(_oData.dMiscPlur);
            this._dMasForm = helpers.objectToMap(_oData.dMasForm);
            this.isInit = true;
        }
        catch (e) {
            console.error(e);
        }
    },

    isFemForm: function (sWord) {
96
97
98
99
100
101
102
103

104
105
106

107
108


109
110
111
112
113
114
115
100
101
102
103
104
105
106

107
108
109

110
111
112
113
114
115
116
117
118
119
120
121







-
+


-
+


+
+







            return "## erreur, code : " + sSfx + " ##";
        }
    }
};


// Initialization
if (typeof(browser) !== 'undefined') {
if (!mfsp.isInit && typeof(browser) !== 'undefined') {
    // WebExtension
    mfsp.init(helpers.loadFile(browser.extension.getURL("grammalecte/fr/mfsp_data.json")));
} else if (typeof(require) !== 'undefined') {
} else if (!mfsp.isInit && typeof(require) !== 'undefined') {
    // Add-on SDK and Thunderbird
    mfsp.init(helpers.loadFile("resource://grammalecte/fr/mfsp_data.json"));
} else if (mfsp.isInit){
    console.log("Module mfsp déjà initialisé");
} else {
    console.log("Module mfsp non initialisé");
}


if (typeof(exports) !== 'undefined') {
    exports._lTagMiscPlur = mfsp._lTagMiscPlur;

Modified gc_lang/fr/modules-js/phonet.js from [742b1a34db] to [e6268821db].

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
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

+











+






+







// Grammalecte - Suggestion phonétique
/*jslint esversion: 6*/

if (typeof(require) !== 'undefined') {
    var helpers = require("resource://grammalecte/helpers.js");
}


var phonet = {
    _dWord: new Map(),
    _lSet: [],
    _dMorph: new Map(),

    isInit: false,
    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);
            this.isInit = true;
        }
        catch (e) {
            console.error(e);
        }
    },

    hasSimil: function (sWord, sPattern=null) {
77
78
79
80
81
82
83
84

85
86
87

88
89


90
91
92
93
94
95
96
80
81
82
83
84
85
86

87
88
89

90
91
92
93
94
95
96
97
98
99
100
101







-
+


-
+


+
+







        }
        return aSelect;
    }
};


// Initialization
if (typeof(browser) !== 'undefined') {
if (!phonet.isInit && typeof(browser) !== 'undefined') {
    // WebExtension
    phonet.init(helpers.loadFile(browser.extension.getURL("grammalecte/fr/phonet_data.json")));
} else if (typeof(require) !== 'undefined') {
} else if (!phonet.isInit && typeof(require) !== 'undefined') {
    // Add-on SDK and Thunderbird
    phonet.init(helpers.loadFile("resource://grammalecte/fr/phonet_data.json"));
} else if (phonet.isInit){
    console.log("Module phonet déjà initialisé");
} else {
    console.log("Module phonet non initialisé");
}


if (typeof(exports) !== 'undefined') {
    exports._dWord = phonet._dWord;

Modified gc_lang/fr/modules-js/textformatter.js from [c6e77daf98] to [1785f80db7].

1


2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
9
10

+
+







// Grammalecte - text formatter
/*jslint esversion: 6*/
/*global exports*/

"use strict";

${map}


// Latin letters: http://unicode-table.com/fr/