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
|
// Grammalecte
"use strict";
const helpers = require("resource://grammalecte/helpers.js");
const echo = helpers.echo;
const oData = JSON.parse(helpers.loadFile("resource://grammalecte/fr/mfsp_data.json"));
// list of affix codes
const _lTagMiscPlur = oData.lTagMiscPlur;
const _lTagMasForm = oData.lTagMasForm;
// 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);
function isFemForm (sWord) {
// returns True if sWord exists in _dMasForm
return _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 [];
}
function hasMiscPlural (sWord) {
// returns True if sWord exists in dMiscPlur
return _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 [];
}
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("|");
}
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 + " ##";
}
}
if (typeof(exports) !== 'undefined') {
exports.isFemForm = isFemForm;
exports.getMasForm = getMasForm;
exports.hasMiscPlural = hasMiscPlural;
exports.getMiscPlural = getMiscPlural;
}
|
>
>
>
>
|
<
|
|
>
|
|
|
<
|
<
|
|
>
>
>
>
>
>
>
>
>
|
>
|
>
>
|
>
|
|
|
<
>
|
|
|
>
>
|
|
>
>
|
|
|
|
|
|
|
|
|
>
>
|
|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
|
|
|
>
>
|
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') {
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(),
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);
}
},
isFemForm: function (sWord) {
// returns True if sWord exists in this._dMasForm
return this._dMasForm.has(sWord);
},
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 [];
},
hasMiscPlural: function (sWord) {
// returns True if sWord exists in dMiscPlur
return this._dMiscPlur.has(sWord);
},
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 [];
},
_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("|");
},
_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 = mfsp.isFemForm;
exports.getMasForm = mfsp.getMasForm;
exports.hasMiscPlural = mfsp.hasMiscPlural;
exports.getMiscPlural = mfsp.getMiscPlural;
exports._whatSuffixCode = mfsp._whatSuffixCode;
exports._modifyStringWithSuffixCode = mfsp._modifyStringWithSuffixCode;
}
|