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
|
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
|
+
+
+
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
|
// Grammalecte
/*jslint esversion: 6*/
/*global console,require,exports,browser*/
"use strict";
if (typeof(require) !== 'undefined') {
const helpers = require("resource://grammalecte/helpers.js");
var helpers = require("resource://grammalecte/helpers.js");
const echo = helpers.echo;
const oData = JSON.parse(helpers.loadFile("resource://grammalecte/fr/mfsp_data.json"));
}
var mfsp = {
// list of affix codes
const _lTagMiscPlur = oData.lTagMiscPlur;
const _lTagMasForm = oData.lTagMasForm;
// list of affix codes
_lTagMiscPlur: [],
_lTagMasForm: [],
// dictionary of words with uncommon plurals (-x, -ux, english, latin and italian plurals) and tags to generate them
// dictionary of words with uncommon plurals (-x, -ux, english, latin and italian plurals) and tags to generate them
const _dMiscPlur = helpers.objectToMap(oData.dMiscPlur);
// dictionary of feminine forms and tags to generate masculine forms (singular and plural)
const _dMasForm = helpers.objectToMap(oData.dMasForm);
_dMiscPlur: new Map(),
// dictionary of feminine forms and tags to generate masculine forms (singular and plural)
_dMasForm: new Map(),
bInit: 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.bInit = true;
}
catch (e) {
console.error(e);
}
},
function isFemForm (sWord) {
// returns True if sWord exists in _dMasForm
return _dMasForm.has(sWord);
isFemForm: function (sWord) {
// returns True if sWord exists in this._dMasForm
return this._dMasForm.has(sWord);
}
},
function getMasForm (sWord, bPlur) {
// returns masculine form with feminine form
if (_dMasForm.has(sWord)) {
return [ for (sTag of _whatSuffixCodes(sWord, bPlur)) _modifyStringWithSuffixCode(sWord, sTag) ];
}
return [];
}
getMasForm: function (sWord, bPlur) {
// returns masculine form with feminine form
if (this._dMasForm.has(sWord)) {
let aMasForm = [];
for (let sTag of this._whatSuffixCode(sWord, bPlur)){
aMasForm.push( this._modifyStringWithSuffixCode(sWord, sTag) );
}
return aMasForm;
}
return [];
},
function hasMiscPlural (sWord) {
// returns True if sWord exists in dMiscPlur
return _dMiscPlur.has(sWord);
}
hasMiscPlural: function (sWord) {
// returns True if sWord exists in dMiscPlur
return this._dMiscPlur.has(sWord);
},
function getMiscPlural (sWord) {
// returns plural form with singular form
if (_dMiscPlur.has(sWord)) {
return [ for (sTag of _lTagMiscPlur[_dMiscPlur.get(sWord)].split("|")) _modifyStringWithSuffixCode(sWord, sTag) ];
}
return [];
}
getMiscPlural: function (sWord) {
// returns plural form with singular form
if (this._dMiscPlur.has(sWord)) {
let aMiscPlural = [];
for (let sTag of this._lTagMiscPlur[this._dMiscPlur.get(sWord)].split("|")){
aMiscPlural.push( this._modifyStringWithSuffixCode(sWord, sTag) );
}
return aMiscPlural;
}
return [];
},
function _whatSuffixCodes (sWord, bPlur) {
// necessary only for dMasFW
let sSfx = _lTagMasForm[_dMasForm.get(sWord)];
if (sSfx.includes("/")) {
if (bPlur) {
return sSfx.slice(sSfx.indexOf("/")+1).split("|");
}
return sSfx.slice(0, sSfx.indexOf("/")).split("|");
}
return sSfx.split("|");
}
_whatSuffixCode: function (sWord, bPlur) {
// necessary only for dMasFW
let sSfx = this._lTagMasForm[this._dMasForm.get(sWord)];
if (sSfx.includes("/")) {
if (bPlur) {
return sSfx.slice(sSfx.indexOf("/")+1).split("|");
}
return sSfx.slice(0, sSfx.indexOf("/")).split("|");
}
return sSfx.split("|");
},
function _modifyStringWithSuffixCode (sWord, sSfx) {
// returns sWord modified by sSfx
if (!sWord) {
return "";
}
if (sSfx === "0") {
return sWord;
}
try {
if (sSfx[0] !== '0') {
return sWord.slice(0, -(sSfx.charCodeAt(0)-48)) + sSfx.slice(1); // 48 is the ASCII code for "0"
} else {
return sWord + sSfx.slice(1);
}
}
catch (e) {
console.log(e);
return "## erreur, code : " + sSfx + " ##";
}
}
_modifyStringWithSuffixCode: function (sWord, sSfx) {
// returns sWord modified by sSfx
if (!sWord) {
return "";
}
if (sSfx === "0") {
return sWord;
}
try {
if (sSfx[0] !== '0') {
return sWord.slice(0, -(sSfx.charCodeAt(0)-48)) + sSfx.slice(1); // 48 is the ASCII code for "0"
} else {
return sWord + sSfx.slice(1);
}
}
catch (e) {
console.log(e);
return "## erreur, code : " + sSfx + " ##";
}
}
};
// Initialization
if (!mfsp.bInit && typeof(browser) !== 'undefined') {
// WebExtension
mfsp.init(helpers.loadFile(browser.extension.getURL("grammalecte/fr/mfsp_data.json")));
} else if (!mfsp.bInit && typeof(require) !== 'undefined') {
// Add-on SDK and Thunderbird
mfsp.init(helpers.loadFile("resource://grammalecte/fr/mfsp_data.json"));
} else if (mfsp.bInit){
console.log("Module mfsp déjà initialisé");
} else {
console.log("Module mfsp non initialisé");
}
if (typeof(exports) !== 'undefined') {
exports._lTagMiscPlur = mfsp._lTagMiscPlur;
exports._lTagMasForm = mfsp._lTagMasForm;
exports._dMiscPlur = mfsp._dMiscPlur;
exports._dMasForm = mfsp._dMasForm;
exports.init = mfsp.init;
exports.isFemForm = isFemForm;
exports.getMasForm = getMasForm;
exports.hasMiscPlural = hasMiscPlural;
exports.getMiscPlural = getMiscPlural;
exports.isFemForm = mfsp.isFemForm;
exports.getMasForm = mfsp.getMasForm;
exports.hasMiscPlural = mfsp.hasMiscPlural;
exports.getMiscPlural = mfsp.getMiscPlural;
exports._whatSuffixCode = mfsp._whatSuffixCode;
exports._modifyStringWithSuffixCode = mfsp._modifyStringWithSuffixCode;
}
|