Index: gc_lang/fr/webext/content_scripts/tf_content.css
==================================================================
--- gc_lang/fr/webext/content_scripts/tf_content.css
+++ gc_lang/fr/webext/content_scripts/tf_content.css
@@ -63,10 +63,12 @@
/*
Actions
*/
#grammalecte_tf_actions {
/*background-color: hsl(120, 10%, 92%);*/
+ display: flex;
+ justify-content: space-between;
padding: 15px 15px 10px 15px;
border-top: 1px solid hsl(210, 10%, 90%);
}
.grammalecte_button {
@@ -83,21 +85,20 @@
#grammalecte_tf_reset {
background-color: hsl(210, 100%, 50%);
color: hsl(210, 0%, 100%);
}
#grammalecte_tf_progressbar {
- width: 250px;
+ width: 400px;
}
#grammalecte_tf_time_res {
- width: 40px;
+ width: 60px;
padding: 5px 10px;
- width: 25px;
}
#grammalecte_tf_apply {
- background-color: hsl(150, 100%, 50%);
+ background-color: hsl(120, 100%, 50%);
color: hsl(150, 0%, 100%);
}
#grammalecte_progressbarbox {
display: inline-block;
padding: 10px 20px;
}
Index: gc_lang/fr/webext/content_scripts/tf_content.js
==================================================================
--- gc_lang/fr/webext/content_scripts/tf_content.js
+++ gc_lang/fr/webext/content_scripts/tf_content.js
@@ -54,11 +54,11 @@
xTypo.appendChild(this._createSimpleOption("o_ts_units", true, "Points médians des unités (N·m, Ω·m…)"));
xTypo.appendChild(this._createSimpleOption("o_ts_spell", true, "Ligatures (cœur…) et diacritiques (ça, État…)"));
xTypo.appendChild(this._createRadioBoxLigatures());
xTypo.appendChild(this._createLigaturesSelection());
let xMisc = this._createFieldset("group_misc", true, "Divers");
- xMisc.appendChild(this._createSimpleOption("o_ordinals_no_exponant", true, "Ordinaux (15e, XXIe…)"));
+ xMisc.appendChild(this._createOrdinalOptions());
xMisc.appendChild(this._createSimpleOption("o_etc", true, "Et cætera, etc."));
xMisc.appendChild(this._createSimpleOption("o_missing_hyphens", true, "Traits d’union manquants"));
xMisc.appendChild(this._createSimpleOption("o_ma_word", true, "Apostrophes manquantes"));
xMisc.appendChild(this._createSingleLetterOptions());
let xStruct = this._createFieldset("group_struct", false, "Restructuration [!]");
@@ -73,14 +73,18 @@
xColumn2.appendChild(xStruct);
xOptions.appendChild(xColumn1);
xOptions.appendChild(xColumn2);
// Actions
let xActions = createNode("div", {id: "grammalecte_tf_actions"});
- xActions.appendChild(createNode("div", {id: "grammalecte_tf_reset", textContent: "Par défaut", className: "grammalecte_button", style: "background-color: hsl(210, 50%, 50%)"}));
+ let xDefaultButton = createNode("div", {id: "grammalecte_tf_reset", textContent: "Par défaut", className: "grammalecte_button", style: "background-color: hsl(210, 50%, 50%)"});
+ xDefaultButton.addEventListener("click", () => { this.reset(); });
+ let xApplyButton = createNode("div", {id: "grammalecte_tf_apply", textContent: "Appliquer", className: "grammalecte_button", style: "background-color: hsl(180, 50%, 50%)"});
+ xApplyButton.addEventListener("click", () => { this.apply(); });
+ xActions.appendChild(xDefaultButton);
xActions.appendChild(createNode("progress", {id: "grammalecte_tf_progressbar"}));
- xActions.appendChild(createNode("span", {id: "grammalecte_tf_time_res"}));
- xActions.appendChild(createNode("div", {id: "grammalecte_tf_apply", textContent: "Appliquer", className: "grammalecte_button", style: "background-color: hsl(180, 50%, 50%)"}));
+ xActions.appendChild(createNode("span", {id: "grammalecte_tf_time_res", textContent: "…"}));
+ xActions.appendChild(xApplyButton);
//xActions.appendChild(createNode("div", {id: "grammalecte_infomsg", textContent: "blabla"}));
// create result
xTFNode.appendChild(xOptions);
xTFNode.appendChild(xActions);
}
@@ -92,21 +96,23 @@
// Common options
_createFieldset (sId, bDefault, sLabel) {
let xFieldset = createNode("fieldset", {id: sId, className: "groupblock"});
let xLegend = document.createElement("legend");
- xLegend.appendChild(createNode("input", {type: "checkbox", id: "o_"+sId, className: "option"}, {default: bDefault}));
+ let xGroupOption = createNode("input", {type: "checkbox", id: "o_"+sId, className: "option"}, {default: bDefault});
+ xGroupOption.addEventListener("click", (xEvent) => { this.switchGroup(xEvent.target.id); });
+ xLegend.appendChild(xGroupOption);
xLegend.appendChild(createNode("label", {htmlFor: "o_"+sId, textContent: sLabel}));
xFieldset.appendChild(xLegend);
return xFieldset;
}
_createSimpleOption (sId, bDefault, sLabel) {
let xLine = createNode("div", {className: "blockopt underline"});
xLine.appendChild(createNode("input", {type: "checkbox", id: sId, className: "option"}, {default: bDefault}));
xLine.appendChild(createNode("label", {htmlFor: sId, textContent: sLabel, className: "opt_lbl largew"}));
- xLine.appendChild(createNode("div", {id: "res_"+sId, className: "grammalecte_tf_result", textContent: "9999"}));
+ xLine.appendChild(createNode("div", {id: "res_"+sId, className: "grammalecte_tf_result", textContent: "·"}));
return xLine;
}
// Hyphens
_createRadioBoxHyphens (sName, sIdEmDash, sIdEnDash, bDefaultEmDash) {
@@ -117,11 +123,11 @@
}
// Ligatures
_createRadioBoxLigatures () {
let xLine = createNode("div", {className: "blockopt underline"});
- xLine.appendChild(createNode("div", {id: "res_"+"o_ts_ligature", className: "grammalecte_tf_result", textContent: "9999"}));
+ xLine.appendChild(createNode("div", {id: "res_"+"o_ts_ligature", className: "grammalecte_tf_result", textContent: "·"}));
xLine.appendChild(this._createInlineCheckboxOption("o_ts_ligature", "Ligatures", true));
xLine.appendChild(this._createInlineRadioOption("liga", "o_ts_ligature_do", "faire", false));
xLine.appendChild(this._createInlineRadioOption("liga", "o_ts_ligature_undo", "défaire", true));
return xLine;
}
@@ -143,10 +149,20 @@
let xLine = createNode("div", {className: "blockopt indent"});
xLine.appendChild(this._createInlineCheckboxOption("o_ma_1letter_lowercase", "lettres isolées (j’ n’ m’ t’ s’ c’ d’ l’)", false));
xLine.appendChild(this._createInlineCheckboxOption("o_ma_1letter_uppercase", "Maj.", false));
return xLine;
}
+
+ // Ordinals
+ _createOrdinalOptions () {
+ let xLine = createNode("div", {className: "blockopt underline"});
+ xLine.appendChild(createNode("div", {id: "res_"+"o_ordinals_no_exponant", className: "grammalecte_tf_result", textContent: "·"}));
+ xLine.appendChild(this._createInlineCheckboxOption("o_ordinals_no_exponant", "Ordinaux (15e, XXIe…)", true));
+ xLine.appendChild(this._createInlineCheckboxOption("o_ordinals_exponant", "e → ᵉ", true));
+ return xLine;
+ }
+
// Inline option block
_createInlineCheckboxOption (sId, sLabel, bDefault) {
let xInlineBlock = createNode("div", {className: "inlineblock"});
xInlineBlock.appendChild(createNode("input", {type: "checkbox", id: sId, className: "option"}, {default: bDefault}));
@@ -169,26 +185,26 @@
if (document.getElementById(sOptName).checked) {
document.getElementById(sOptName.slice(2)).style.opacity = 1;
} else {
document.getElementById(sOptName.slice(2)).style.opacity = 0.3;
}
+ this.resetProgressBar();
}
-
reset () {
this.resetProgressBar();
for (let xNode of document.getElementsByClassName("option")) {
xNode.checked = (xNode.dataset.default === "true");
if (xNode.id.startsWith("o_group_")) {
- switchGroup(xNode.id);
+ this.switchGroup(xNode.id);
}
}
}
resetProgressBar () {
- document.getElementById('progressbar').value = 0;
- document.getElementById('time_res').textContent = "";
+ document.getElementById('grammalecte_tf_progressbar').value = 0;
+ document.getElementById('grammalecte_tf_time_res').textContent = "";
}
setOptions (oOptions) {
for (let sOptName in oOptions) {
//console.log(sOptName + ":" + oOptions[sOptName]);
@@ -210,21 +226,324 @@
oOptions[xNode.id] = xNode.checked;
}
self.port.emit("saveOptions", JSON.stringify(oOptions));
}
-
-}
-
-
-let sTFinnerHTML = ' \
- \
-
\
-
\
-
\
-
\
-
\
- \
- \
-
\
-
\
-';
+ apply () {
+ try {
+ const t0 = Date.now();
+ //window.setCursor("wait"); // change pointer
+ this.resetProgressBar();
+ let sText = this.xTextArea.value;
+ document.getElementById('grammalecte_tf_progressbar').max = 7;
+ let n1 = 0, n2 = 0, n3 = 0, n4 = 0, n5 = 0, n6 = 0, n7 = 0;
+
+ // Restructuration
+ if (document.getElementById("o_group_struct").checked) {
+ if (document.getElementById("o_remove_hyphens_at_end_of_paragraphs").checked) {
+ [sText, n1] = this.removeHyphenAtEndOfParagraphs(sText);
+ document.getElementById('res_o_remove_hyphens_at_end_of_paragraphs').textContent = n1;
+ }
+ if (document.getElementById("o_merge_contiguous_paragraphs").checked) {
+ [sText, n1] = this.mergeContiguousParagraphs(sText);
+ document.getElementById('res_o_merge_contiguous_paragraphs').textContent = n1;
+ }
+ document.getElementById("o_group_struct").checked = false;
+ this.switchGroup("o_group_struct");
+ }
+ document.getElementById('grammalecte_tf_progressbar').value = 1;
+
+ // espaces surnuméraires
+ if (document.getElementById("o_group_ssp").checked) {
+ if (document.getElementById("o_end_of_paragraph").checked) {
+ [sText, n1] = this.formatText(sText, "end_of_paragraph");
+ document.getElementById('res_o_end_of_paragraph').textContent = n1;
+ }
+ if (document.getElementById("o_between_words").checked) {
+ [sText, n1] = this.formatText(sText, "between_words");
+ document.getElementById('res_o_between_words').textContent = n1;
+ }
+ if (document.getElementById("o_start_of_paragraph").checked) {
+ [sText, n1] = this.formatText(sText, "start_of_paragraph");
+ document.getElementById('res_o_start_of_paragraph').textContent = n1;
+ }
+ if (document.getElementById("o_before_punctuation").checked) {
+ [sText, n1] = this.formatText(sText, "before_punctuation");
+ document.getElementById('res_o_before_punctuation').textContent = n1;
+ }
+ if (document.getElementById("o_within_parenthesis").checked) {
+ [sText, n1] = this.formatText(sText, "within_parenthesis");
+ document.getElementById('res_o_within_parenthesis').textContent = n1;
+ }
+ if (document.getElementById("o_within_square_brackets").checked) {
+ [sText, n1] = this.formatText(sText, "within_square_brackets");
+ document.getElementById('res_o_within_square_brackets').textContent = n1;
+ }
+ if (document.getElementById("o_within_quotation_marks").checked) {
+ [sText, n1] = this.formatText(sText, "within_quotation_marks");
+ document.getElementById('res_o_within_quotation_marks').textContent = n1;
+ }
+ document.getElementById("o_group_ssp").checked = false;
+ this.switchGroup("o_group_ssp");
+ }
+ document.getElementById('grammalecte_tf_progressbar').value = 2;
+
+ // espaces typographiques
+ if (document.getElementById("o_group_nbsp").checked) {
+ if (document.getElementById("o_nbsp_before_punctuation").checked) {
+ [sText, n1] = this.formatText(sText, "nbsp_before_punctuation");
+ [sText, n2] = this.formatText(sText, "nbsp_repair");
+ document.getElementById('res_o_nbsp_before_punctuation').textContent = n1 - n2;
+ }
+ if (document.getElementById("o_nbsp_within_quotation_marks").checked) {
+ [sText, n1] = this.formatText(sText, "nbsp_within_quotation_marks");
+ document.getElementById('res_o_nbsp_within_quotation_marks').textContent = n1;
+ }
+ if (document.getElementById("o_nbsp_before_symbol").checked) {
+ [sText, n1] = this.formatText(sText, "nbsp_before_symbol");
+ document.getElementById('res_o_nbsp_before_symbol').textContent = n1;
+ }
+ if (document.getElementById("o_nbsp_within_numbers").checked) {
+ [sText, n1] = this.formatText(sText, "nbsp_within_numbers");
+ document.getElementById('res_o_nbsp_within_numbers').textContent = n1;
+ }
+ if (document.getElementById("o_nbsp_before_units").checked) {
+ [sText, n1] = this.formatText(sText, "nbsp_before_units");
+ document.getElementById('res_o_nbsp_before_units').textContent = n1;
+ }
+ document.getElementById("o_group_nbsp").checked = false;
+ this.switchGroup("o_group_nbsp");
+ }
+ document.getElementById('grammalecte_tf_progressbar').value = 3;
+
+ // espaces manquants
+ if (document.getElementById("o_group_typo").checked) {
+ if (document.getElementById("o_ts_units").checked) {
+ [sText, n1] = this.formatText(sText, "ts_units");
+ document.getElementById('res_o_ts_units').textContent = n1;
+ }
+ }
+ if (document.getElementById("o_group_space").checked) {
+ if (document.getElementById("o_add_space_after_punctuation").checked) {
+ [sText, n1] = this.formatText(sText, "add_space_after_punctuation");
+ [sText, n2] = this.formatText(sText, "add_space_repair");
+ document.getElementById('res_o_add_space_after_punctuation').textContent = n1 - n2;
+ }
+ if (document.getElementById("o_add_space_around_hyphens").checked) {
+ [sText, n1] = this.formatText(sText, "add_space_around_hyphens");
+ document.getElementById('res_o_add_space_around_hyphens').textContent = n1;
+ }
+ document.getElementById("o_group_space").checked = false;
+ this.switchGroup("o_group_space");
+ }
+ document.getElementById('grammalecte_tf_progressbar').value = 4;
+
+ // suppression
+ if (document.getElementById("o_group_delete").checked) {
+ if (document.getElementById("o_erase_non_breaking_hyphens").checked) {
+ [sText, n1] = this.formatText(sText, "erase_non_breaking_hyphens");
+ document.getElementById('res_o_erase_non_breaking_hyphens').textContent = n1;
+ }
+ document.getElementById("o_group_delete").checked = false;
+ this.switchGroup("o_group_delete");
+ }
+ document.getElementById('grammalecte_tf_progressbar').value = 5;
+
+ // signes typographiques
+ if (document.getElementById("o_group_typo").checked) {
+ if (document.getElementById("o_ts_apostrophe").checked) {
+ [sText, n1] = this.formatText(sText, "ts_apostrophe");
+ document.getElementById('res_o_ts_apostrophe').textContent = n1;
+ }
+ if (document.getElementById("o_ts_ellipsis").checked) {
+ [sText, n1] = this.formatText(sText, "ts_ellipsis");
+ document.getElementById('res_o_ts_ellipsis').textContent = n1;
+ }
+ if (document.getElementById("o_ts_dash_start").checked) {
+ if (document.getElementById("o_ts_m_dash_start").checked) {
+ [sText, n1] = this.formatText(sText, "ts_m_dash_start");
+ } else {
+ [sText, n1] = this.formatText(sText, "ts_n_dash_start");
+ }
+ document.getElementById('res_o_ts_dash_start').textContent = n1;
+ }
+ if (document.getElementById("o_ts_dash_middle").checked) {
+ if (document.getElementById("o_ts_m_dash_middle").checked) {
+ [sText, n1] = this.formatText(sText, "ts_m_dash_middle");
+ } else {
+ [sText, n1] = this.formatText(sText, "ts_n_dash_middle");
+ }
+ document.getElementById('res_o_ts_dash_middle').textContent = n1;
+ }
+ if (document.getElementById("o_ts_quotation_marks").checked) {
+ [sText, n1] = this.formatText(sText, "ts_quotation_marks");
+ document.getElementById('res_o_ts_quotation_marks').textContent = n1;
+ }
+ if (document.getElementById("o_ts_spell").checked) {
+ [sText, n1] = this.formatText(sText, "ts_spell");
+ document.getElementById('res_o_ts_spell').textContent = n1;
+ }
+ if (document.getElementById("o_ts_ligature").checked) {
+ // ligatures typographiques : fi, fl, ff, ffi, ffl, ft, st
+ if (document.getElementById("o_ts_ligature_do").checked) {
+ if (document.getElementById("o_ts_ligature_ffi").checked) {
+ [sText, n1] = this.formatText(sText, "ts_ligature_ffi_do");
+ }
+ if (document.getElementById("o_ts_ligature_ffl").checked) {
+ [sText, n2] = this.formatText(sText, "ts_ligature_ffl_do");
+ }
+ if (document.getElementById("o_ts_ligature_fi").checked) {
+ [sText, n3] = this.formatText(sText, "ts_ligature_fi_do");
+ }
+ if (document.getElementById("o_ts_ligature_fl").checked) {
+ [sText, n4] = this.formatText(sText, "ts_ligature_fl_do");
+ }
+ if (document.getElementById("o_ts_ligature_ff").checked) {
+ [sText, n5] = this.formatText(sText, "ts_ligature_ff_do");
+ }
+ if (document.getElementById("o_ts_ligature_ft").checked) {
+ [sText, n6] = this.formatText(sText, "ts_ligature_ft_do");
+ }
+ if (document.getElementById("o_ts_ligature_st").checked) {
+ [sText, n7] = this.formatText(sText, "ts_ligature_st_do");
+ }
+ }
+ if (document.getElementById("o_ts_ligature_undo").checked) {
+ if (document.getElementById("o_ts_ligature_ffi").checked) {
+ [sText, n1] = this.formatText(sText, "ts_ligature_ffi_undo");
+ }
+ if (document.getElementById("o_ts_ligature_ffl").checked) {
+ [sText, n2] = this.formatText(sText, "ts_ligature_ffl_undo");
+ }
+ if (document.getElementById("o_ts_ligature_fi").checked) {
+ [sText, n3] = this.formatText(sText, "ts_ligature_fi_undo");
+ }
+ if (document.getElementById("o_ts_ligature_fl").checked) {
+ [sText, n4] = this.formatText(sText, "ts_ligature_fl_undo");
+ }
+ if (document.getElementById("o_ts_ligature_ff").checked) {
+ [sText, n5] = this.formatText(sText, "ts_ligature_ff_undo");
+ }
+ if (document.getElementById("o_ts_ligature_ft").checked) {
+ [sText, n6] = this.formatText(sText, "ts_ligature_ft_undo");
+ }
+ if (document.getElementById("o_ts_ligature_st").checked) {
+ [sText, n7] = this.formatText(sText, "ts_ligature_st_undo");
+ }
+ }
+ document.getElementById('res_o_ts_ligature').textContent = n1 + n2 + n3 + n4 + n5 + n6 + n7;
+ }
+ document.getElementById("o_group_typo").checked = false;
+ this.switchGroup("o_group_typo");
+ }
+ document.getElementById('grammalecte_tf_progressbar').value = 6;
+
+ // divers
+ if (document.getElementById("o_group_misc").checked) {
+ if (document.getElementById("o_ordinals_no_exponant").checked) {
+ if (document.getElementById("o_ordinals_exponant").checked) {
+ [sText, n1] = this.formatText(sText, "ordinals_exponant");
+ } else {
+ [sText, n1] = this.formatText(sText, "ordinals_no_exponant");
+ }
+ document.getElementById('res_o_ordinals_no_exponant').textContent = n1;
+ }
+ if (document.getElementById("o_etc").checked) {
+ [sText, n1] = this.formatText(sText, "etc");
+ document.getElementById('res_o_etc').textContent = n1;
+ }
+ if (document.getElementById("o_missing_hyphens").checked) {
+ [sText, n1] = this.formatText(sText, "missing_hyphens");
+ document.getElementById('res_o_missing_hyphens').textContent = n1;
+ }
+ if (document.getElementById("o_ma_word").checked) {
+ [sText, n1] = this.formatText(sText, "ma_word");
+ if (document.getElementById("o_ma_1letter_lowercase").checked) {
+ [sText, n1] = this.formatText(sText, "ma_1letter_lowercase");
+ if (document.getElementById("o_ma_1letter_uppercase").checked) {
+ [sText, n1] = this.formatText(sText, "ma_1letter_uppercase");
+ }
+ }
+ document.getElementById('res_o_ma_word').textContent = n1;
+ }
+ document.getElementById("o_group_misc").checked = false;
+ this.switchGroup("o_group_misc");
+ }
+ document.getElementById('grammalecte_tf_progressbar').value = document.getElementById('grammalecte_tf_progressbar').max;
+ // end of processing
+
+ //window.setCursor("auto"); // restore pointer
+
+ const t1 = Date.now();
+ document.getElementById('grammalecte_tf_time_res').textContent = this.getTimeRes((t1-t0)/1000);
+ this.xTextArea.value = sText;
+ }
+ catch (e) {
+ showError(e);
+ }
+ }
+
+ formatText (sText, sOptName) {
+ let nCount = 0;
+ try {
+ if (!oReplTable.hasOwnProperty(sOptName)) {
+ console.log("# Error. TF: there is no option “" + sOptName+ "”.");
+ return [sText, nCount];
+ }
+ for (let [zRgx, sRep] of oReplTable[sOptName]) {
+ nCount += (sText.match(zRgx) || []).length;
+ sText = sText.replace(zRgx, sRep);
+ }
+ }
+ catch (e) {
+ showError(e);
+ }
+ return [sText, nCount];
+ }
+
+ removeHyphenAtEndOfParagraphs (sText) {
+ let nCount = (sText.match(/-[ ]*\n/gm) || []).length;
+ sText = sText.replace(/-[ ]*\n/gm, "");
+ return [sText, nCount];
+ }
+
+ mergeContiguousParagraphs (sText) {
+ let nCount = 0;
+ sText = sText.replace(/^[ ]+$/gm, ""); // clear empty paragraphs
+ let s = "";
+ for (let sParagraph of this.getParagraph(sText)) {
+ if (sParagraph === "") {
+ s += "\n";
+ } else {
+ s += sParagraph + " ";
+ nCount += 1;
+ }
+ }
+ s = s.replace(/ +/gm, " ").replace(/ $/gm, "");
+ return [s, nCount];
+ }
+
+ * getParagraph (sText) {
+ // generator: returns paragraphs of text
+ let iStart = 0;
+ let iEnd = 0;
+ while ((iEnd = sText.indexOf("\n", iStart)) !== -1) {
+ yield sText.slice(iStart, iEnd);
+ iStart = iEnd + 1;
+ }
+ yield sText.slice(iStart);
+ }
+
+ getTimeRes (n) {
+ // returns duration in seconds as string
+ if (n < 10) {
+ return n.toFixed(3).toString() + " s";
+ }
+ if (n < 100) {
+ return n.toFixed(2).toString() + " s";
+ }
+ if (n < 1000) {
+ return n.toFixed(1).toString() + " s";
+ }
+ return n.toFixed().toString() + " s";
+ }
+}
Index: gc_lang/fr/webext/manifest.json
==================================================================
--- gc_lang/fr/webext/manifest.json
+++ gc_lang/fr/webext/manifest.json
@@ -43,10 +43,11 @@
"content_scripts/gc_content.css",
"content_scripts/lxg_content.css"
],
"js": [
"content_scripts/panels_content.js",
+ "grammalecte/fr/textformatter.js",
"content_scripts/tf_content.js",
"content_scripts/gc_content.js",
"content_scripts/lxg_content.js",
"content_scripts/content_modifier.js"
]