Index: gc_core/js/text.js
==================================================================
--- gc_core/js/text.js
+++ gc_core/js/text.js
@@ -2,178 +2,179 @@
"use strict";
const helpers = require("resource://grammalecte/helpers.js");
-
-function* getParagraph (sText) {
- // generator: returns paragraphs of text
- let iStart = 0;
- let iEnd = 0;
- sText = sText.replace("\r", "");
- while ((iEnd = sText.indexOf("\n", iStart)) !== -1) {
- yield sText.slice(iStart, iEnd);
- iStart = iEnd + 1;
- }
- yield sText.slice(iStart);
-}
-
-function* wrap (sText, nWidth=80) {
- // generator: returns text line by line
- while (sText) {
- if (sText.length >= nWidth) {
- let nEnd = sText.lastIndexOf(" ", nWidth) + 1;
- if (nEnd > 0) {
- yield sText.slice(0, nEnd);
- sText = sText.slice(nEnd);
- } else {
- yield sText.slice(0, nWidth);
- sText = sText.slice(nWidth);
- }
- } else {
- break;
- }
- }
- yield sText;
-}
-
-function getReadableError (oErr) {
- // Returns an error oErr as a readable error
- try {
- let s = "\n* " + oErr['nStart'] + ":" + oErr['nEnd'] + " # " + oErr['sRuleId']+":\n";
- s += " " + oErr["sMessage"];
- if (oErr["aSuggestions"].length > 0) {
- s += "\n > Suggestions : " + oErr["aSuggestions"].join(" | ");
- }
- if (oErr["URL"] !== "") {
- s += "\n > URL: " + oErr["URL"];
- }
- return s;
- }
- catch (e) {
- helpers.logerror(e);
- return "\n# Error. Data: " + oErr.toString();
- }
-}
-
-function addHtmlEntities (sParagraph) {
- if (sParagraph.includes("&")) {
- sParagraph = sParagraph.replace(/&/g, "&");
- }
- if (sParagraph.includes("<")) {
- sParagraph = sParagraph.replace(//g, ">");
- }
- return sParagraph;
-}
-
-function createHTMLBlock (sParagraph, iParagraph) {
- let sClassName = (sParagraph.includes('' + sParagraph + '
\n'
- + '×
'
- + '
Éditer
'
- + '
Réanalyser
\n';
-}
-
-function tagParagraph (sParagraph, iParagraph, aGrammErr, aSpellErr, bDebug=false) {
- // Returns a text with with underlined errors and messages in tooltip
- try {
- if (aGrammErr.length === 0 && aSpellErr.length === 0) {
- return sParagraph;
- }
- aGrammErr.push(...aSpellErr);
- aGrammErr.sort(function (a, b) {
- if (a["nStart"] < b["nStart"])
- return 1;
- if (a["nStart"] > b["nStart"])
- return -1;
- return 0;
- });
-
- let nErr = aGrammErr.length - 1; // we count errors to give them an identifier
- let nStartLastErr = sParagraph.length;
- for (let oErr of aGrammErr) {
- let sErrId = iParagraph.toString() + "_" + nErr.toString();
- let nStart = oErr["nStart"];
- let nEnd = oErr["nEnd"];
- if (nEnd <= nStartLastErr) {
- oErr["sId"] = sErrId;
- if (oErr['sType'] !== 'WORD') {
- // Grammar Error
- sParagraph = sParagraph.slice(0, nStart)
- + ''
- + sParagraph.slice(nStart, nEnd)
- + ''
- + getGrammarErrorHTML(oErr, bDebug) + ''
- + "" + sParagraph.slice(nEnd);
- } else {
- // Spelling error
- sParagraph = sParagraph.slice(0, nStart)
- + ''
- + sParagraph.slice(nStart, nEnd)
- + ''
- + getSpellingErrorHTML(oErr) + ''
- + "" + sParagraph.slice(nEnd);
- }
- nStartLastErr = nStart;
- }
- nErr -= 1;
- }
- return sParagraph;
- }
- catch (e) {
- helpers.logerror(e);
- return "# Error.";
- }
-}
-
-function getGrammarErrorHTML (oErr, bDebug=false) {
- // Returns an error oErr as a readable error in HTML
- try {
- let sErr = '';
- if (bDebug) {
- sErr += ''
- + ''
- + oErr['nStart'] + ":" + oErr['nEnd'] + ' · #' + oErr['sRuleId'] + " +";
- }
- sErr += oErr["sMessage"];
- sErr += ' IGNORER';
- if (oErr["URL"] !== "") {
- sErr += ' Infos…';
- }
- if (oErr["aSuggestions"].length > 0) {
- sErr += '
Suggestions :
';
- let iSugg = 0;
- for (let sSugg of oErr["aSuggestions"]) {
- sErr += '' + sSugg + ' ';
- iSugg += 1;
- }
- }
- return sErr;
- }
- catch (e) {
- helpers.logerror(e);
- return '# Error. Data: ' + oErr.toString();
- }
-}
-
-function getSpellingErrorHTML (oErr) {
- // Returns an error oErr as a readable error in HTML
- try {
- let sErr = 'Mot inconnu du dictionnaire.';
- sErr += ' IGNORER';
- sErr += '
Suggestions :
';
- return sErr;
- }
- catch (e) {
- helpers.logerror(e);
- return '# Error. Data: ' + oErr.toString();
+const text = {
+ getParagraph: function* (sText) {
+ // generator: returns paragraphs of text
+ let iStart = 0;
+ let iEnd = 0;
+ sText = sText.replace("\r", "");
+ while ((iEnd = sText.indexOf("\n", iStart)) !== -1) {
+ yield sText.slice(iStart, iEnd);
+ iStart = iEnd + 1;
+ }
+ yield sText.slice(iStart);
+ },
+
+ wrap: function* (sText, nWidth=80) {
+ // generator: returns text line by line
+ while (sText) {
+ if (sText.length >= nWidth) {
+ let nEnd = sText.lastIndexOf(" ", nWidth) + 1;
+ if (nEnd > 0) {
+ yield sText.slice(0, nEnd);
+ sText = sText.slice(nEnd);
+ } else {
+ yield sText.slice(0, nWidth);
+ sText = sText.slice(nWidth);
+ }
+ } else {
+ break;
+ }
+ }
+ yield sText;
+ },
+
+ getReadableError: function (oErr) {
+ // Returns an error oErr as a readable error
+ try {
+ let s = "\n* " + oErr['nStart'] + ":" + oErr['nEnd'] + " # " + oErr['sRuleId']+":\n";
+ s += " " + oErr["sMessage"];
+ if (oErr["aSuggestions"].length > 0) {
+ s += "\n > Suggestions : " + oErr["aSuggestions"].join(" | ");
+ }
+ if (oErr["URL"] !== "") {
+ s += "\n > URL: " + oErr["URL"];
+ }
+ return s;
+ }
+ catch (e) {
+ helpers.logerror(e);
+ return "\n# Error. Data: " + oErr.toString();
+ }
+ },
+
+ addHtmlEntities: function (sParagraph) {
+ if (sParagraph.includes("&")) {
+ sParagraph = sParagraph.replace(/&/g, "&");
+ }
+ if (sParagraph.includes("<")) {
+ sParagraph = sParagraph.replace(//g, ">");
+ }
+ return sParagraph;
+ },
+
+ createHTMLBlock: function (sParagraph, iParagraph) {
+ let sClassName = (sParagraph.includes('' + sParagraph + '\n'
+ + '×
'
+ + '
Éditer
'
+ + '
Réanalyser
\n';
+ },
+
+ tagParagraph: function (sParagraph, iParagraph, aGrammErr, aSpellErr, bDebug=false) {
+ // Returns a text with with underlined errors and messages in tooltip
+ try {
+ if (aGrammErr.length === 0 && aSpellErr.length === 0) {
+ return sParagraph;
+ }
+ aGrammErr.push(...aSpellErr);
+ aGrammErr.sort(function (a, b) {
+ if (a["nStart"] < b["nStart"])
+ return 1;
+ if (a["nStart"] > b["nStart"])
+ return -1;
+ return 0;
+ });
+
+ let nErr = aGrammErr.length - 1; // we count errors to give them an identifier
+ let nStartLastErr = sParagraph.length;
+ for (let oErr of aGrammErr) {
+ let sErrId = iParagraph.toString() + "_" + nErr.toString();
+ let nStart = oErr["nStart"];
+ let nEnd = oErr["nEnd"];
+ if (nEnd <= nStartLastErr) {
+ oErr["sId"] = sErrId;
+ if (oErr['sType'] !== 'WORD') {
+ // Grammar Error
+ sParagraph = sParagraph.slice(0, nStart)
+ + ''
+ + sParagraph.slice(nStart, nEnd)
+ + ''
+ + this._getGrammarErrorHTML(oErr, bDebug) + ''
+ + "" + sParagraph.slice(nEnd);
+ } else {
+ // Spelling error
+ sParagraph = sParagraph.slice(0, nStart)
+ + ''
+ + sParagraph.slice(nStart, nEnd)
+ + ''
+ + this._getSpellingErrorHTML(oErr) + ''
+ + "" + sParagraph.slice(nEnd);
+ }
+ nStartLastErr = nStart;
+ }
+ nErr -= 1;
+ }
+ return sParagraph;
+ }
+ catch (e) {
+ helpers.logerror(e);
+ return "# Error.";
+ }
+ },
+
+ _getGrammarErrorHTML: function (oErr, bDebug=false) {
+ // Returns an error oErr as a readable error in HTML
+ try {
+ let sErr = '';
+ if (bDebug) {
+ sErr += ''
+ + ''
+ + oErr['nStart'] + ":" + oErr['nEnd'] + ' · #' + oErr['sRuleId'] + " +";
+ }
+ sErr += oErr["sMessage"];
+ sErr += ' IGNORER';
+ if (oErr["URL"] !== "") {
+ sErr += ' Infos…';
+ }
+ if (oErr["aSuggestions"].length > 0) {
+ sErr += '
Suggestions :
';
+ let iSugg = 0;
+ for (let sSugg of oErr["aSuggestions"]) {
+ sErr += '' + sSugg + ' ';
+ iSugg += 1;
+ }
+ }
+ return sErr;
+ }
+ catch (e) {
+ helpers.logerror(e);
+ return '# Error. Data: ' + oErr.toString();
+ }
+ },
+
+ _getSpellingErrorHTML: function (oErr) {
+ // Returns an error oErr as a readable error in HTML
+ try {
+ let sErr = 'Mot inconnu du dictionnaire.';
+ sErr += ' IGNORER';
+ sErr += '
Suggestions :
';
+ return sErr;
+ }
+ catch (e) {
+ helpers.logerror(e);
+ return '# Error. Data: ' + oErr.toString();
+ }
}
}
if (typeof(exports) !== 'undefined') {
- exports.getParagraph = getParagraph;
- exports.addHtmlEntities = addHtmlEntities;
- exports.createHTMLBlock = createHTMLBlock;
- exports.tagParagraph = tagParagraph;
- exports.getReadableError = getReadableError;
+ exports.getParagraph = text.getParagraph;
+ exports.addHtmlEntities = text.addHtmlEntities;
+ exports.createHTMLBlock = text.createHTMLBlock;
+ exports.tagParagraph = text.tagParagraph;
+ exports.getReadableError = text.getReadableError;
}