Comment: | [build] merge graphspell: graphspell as independant package |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk | build |
Files: | files | file ages | folders |
SHA3-256: |
37ee1a1b0df5bac5802a125828c7a090 |
User & Date: | olr on 2017-12-25 13:19:09 |
Other Links: | manifest | tags |
2017-12-26
| ||
13:54 | [fr] pt: mettre à terre check-in: 8b6bd9b12c user: olr tags: trunk, fr | |
2017-12-25
| ||
13:19 | [build] merge graphspell: graphspell as independant package check-in: 37ee1a1b0d user: olr tags: trunk, build | |
08:56 | [graphspell][js][helpers] echo for JS probably obsolete now (at last!) Closed-Leaf check-in: 186604b4a0 user: olr tags: graphspell | |
2017-12-22
| ||
15:08 | [fr] formateur de texte: tiret en début de paragraphe avant points check-in: d27b7d08ff user: olr tags: trunk, fr | |
Modified gc_core/js/lang_core/gc_engine.js from [a71cf52ea3] to [c5ee3ec605].
1 2 3 4 5 6 7 8 9 10 11 12 | // Grammar checker engine /*jslint esversion: 6*/ /*global console,require,exports*/ "use strict"; ${string} ${regex} ${map} if (typeof(require) !== 'undefined') { | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // Grammar checker engine /*jslint esversion: 6*/ /*global console,require,exports*/ "use strict"; ${string} ${regex} ${map} if (typeof(require) !== 'undefined') { var helpers = require("resource://grammalecte/graphspell/helpers.js"); var gc_options = require("resource://grammalecte/${lang}/gc_options.js"); var gc_rules = require("resource://grammalecte/${lang}/gc_rules.js"); var cregex = require("resource://grammalecte/${lang}/cregex.js"); var text = require("resource://grammalecte/text.js"); var echo = helpers.echo; } else if (typeof(console) !== "undefined") { |
︙ | ︙ | |||
318 319 320 321 322 323 324 | }, //// Initialization load: function (sContext="JavaScript", sPath="") { try { if (typeof(require) !== 'undefined') { | | | 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 | }, //// Initialization load: function (sContext="JavaScript", sPath="") { try { if (typeof(require) !== 'undefined') { var ibdawg = require("resource://grammalecte/graphspell/ibdawg.js"); _oDict = new ibdawg.IBDAWG("${dic_name}.json"); } else { _oDict = new IBDAWG("${dic_name}.json", sPath); } _sAppContext = sContext; _dOptions = gc_options.getOptions(sContext).gl_shallowCopy(); // duplication necessary, to be able to reset to default } |
︙ | ︙ |
Modified gc_core/js/tests.js from [4504bb3576] to [7c35f52f2d].
1 2 3 4 5 6 7 8 | // JavaScript /*jslint esversion: 6*/ /*global console,require,exports*/ "use strict"; if (typeof(require) !== 'undefined') { | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // JavaScript /*jslint esversion: 6*/ /*global console,require,exports*/ "use strict"; if (typeof(require) !== 'undefined') { var helpers = require("resource://grammalecte/graphspell/helpers.js"); } class TestGrammarChecking { constructor (gce, spfTests="") { this.gce = gce; |
︙ | ︙ |
Modified gc_core/js/text.js from [abcdad5f85] to [09e0f281de].
1 2 3 4 5 6 7 8 | // JavaScript /*jslint esversion: 6*/ /*global require,exports*/ "use strict"; if (typeof(require) !== 'undefined') { | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // JavaScript /*jslint esversion: 6*/ /*global require,exports*/ "use strict"; if (typeof(require) !== 'undefined') { var helpers = require("resource://grammalecte/graphspell/helpers.js"); } var text = { getParagraph: function* (sText, sSepParagraph = "\n") { // generator: returns paragraphs of text let iStart = 0; |
︙ | ︙ |
Modified gc_core/py/lang_core/gc_engine.py from [f3dfb392d0] to [e1c3ad1859].
1 2 3 4 5 6 7 8 9 10 | # Grammalecte # Grammar checker engine import re import sys import os import traceback #import unicodedata from itertools import chain | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # Grammalecte # Grammar checker engine import re import sys import os import traceback #import unicodedata from itertools import chain from ..graphspell.ibdawg import IBDAWG from ..graphspell.echo import echo from . import gc_options __all__ = [ "lang", "locales", "pkg", "name", "version", "author", \ "load", "parse", "getDictionary", \ "setOption", "setOptions", "getOptions", "getDefaultOptions", "getOptionsLabels", "resetOptions", "displayOptions", \ "ignoreRule", "resetIgnoreRules", "reactivateRule", "listRules", "displayRules" ] |
︙ | ︙ |
Modified gc_lang/fr/build.py from [d4197caf3b] to [9eae4b1757].
︙ | ︙ | |||
35 36 37 38 39 40 41 | for sOpt in lLineOpt: sHTML += f' <p><input type="checkbox" id="option_{sOpt}" class="gc_option" data-option="{sOpt}"/><label id="option_label_{sOpt}" for="option_{sOpt}" data-l10n-id="option_{sOpt}">{dVars["dOptLabel"][sLang][sOpt][0]}</label></p>\n' sHTML += '</div>\n' return sHTML def createFirefoxExtension (sLang, dVars): | | > | 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 | for sOpt in lLineOpt: sHTML += f' <p><input type="checkbox" id="option_{sOpt}" class="gc_option" data-option="{sOpt}"/><label id="option_label_{sOpt}" for="option_{sOpt}" data-l10n-id="option_{sOpt}">{dVars["dOptLabel"][sLang][sOpt][0]}</label></p>\n' sHTML += '</div>\n' return sHTML def createFirefoxExtension (sLang, dVars): "create extension for Firefox (obsolete)" print("Building extension for Firefox") helpers.createCleanFolder("_build/xpi/"+sLang) dir_util.copy_tree("gc_lang/"+sLang+"/xpi/", "_build/xpi/"+sLang) dir_util.copy_tree("grammalecte-js", "_build/xpi/"+sLang+"/grammalecte") sHTML, dProperties = _createOptionsForFirefox(dVars) dVars['optionsHTML'] = sHTML helpers.copyAndFileTemplate("_build/xpi/"+sLang+"/data/about_panel.html", "_build/xpi/"+sLang+"/data/about_panel.html", dVars) for sLocale in dProperties.keys(): spfLocale = "_build/xpi/"+sLang+"/locale/"+sLocale+".properties" if os.path.exists(spfLocale): helpers.copyAndFileTemplate(spfLocale, spfLocale, dProperties) else: print("Locale file not found: " + spfLocale) with helpers.cd("_build/xpi/"+sLang): os.system("jpm xpi") def _createOptionsForFirefox (dVars): # obsolete sHTML = "" for sSection, lOpt in dVars['lStructOpt']: sHTML += '\n<div id="subsection_' + sSection + '" class="opt_subsection">\n <h2 data-l10n-id="option_'+sSection+'"></h2>\n' for lLineOpt in lOpt: for sOpt in lLineOpt: sHTML += ' <p><input type="checkbox" id="option_'+sOpt+'" /><label id="option_label_'+sOpt+'" for="option_'+sOpt+'" data-l10n-id="option_'+sOpt+'"></label></p>\n' sHTML += '</div>\n' |
︙ | ︙ | |||
79 80 81 82 83 84 85 | spfZip = "_build/" + sExtensionName hZip = zipfile.ZipFile(spfZip, mode='w', compression=zipfile.ZIP_DEFLATED) _copyGrammalecteJSPackageInZipFile(hZip, spLangPack, dVars['dic_name']+".json") for spf in ["LICENSE.txt", "LICENSE.fr.txt"]: hZip.write(spf) dVars = _createOptionsForThunderbird(dVars) helpers.addFolderToZipAndFileFile(hZip, "gc_lang/"+sLang+"/tb", "", dVars, True) | < | 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | spfZip = "_build/" + sExtensionName hZip = zipfile.ZipFile(spfZip, mode='w', compression=zipfile.ZIP_DEFLATED) _copyGrammalecteJSPackageInZipFile(hZip, spLangPack, dVars['dic_name']+".json") for spf in ["LICENSE.txt", "LICENSE.fr.txt"]: hZip.write(spf) dVars = _createOptionsForThunderbird(dVars) helpers.addFolderToZipAndFileFile(hZip, "gc_lang/"+sLang+"/tb", "", dVars, True) spDict = "gc_lang/"+sLang+"/xpi/data/dictionaries" for sp in os.listdir(spDict): if os.path.isdir(spDict+"/"+sp): hZip.write(spDict+"/"+sp+"/"+sp+".dic", "content/dictionaries/"+sp+"/"+sp+".dic") hZip.write(spDict+"/"+sp+"/"+sp+".aff", "content/dictionaries/"+sp+"/"+sp+".aff") hZip.close() helpers.unzip(spfZip, dVars['tb_debug_extension_path']) |
︙ | ︙ | |||
110 111 112 113 114 115 116 117 118 119 | return dVars def _copyGrammalecteJSPackageInZipFile (hZip, spLangPack, sDicName, sAddPath=""): for sf in os.listdir("grammalecte-js"): if not os.path.isdir("grammalecte-js/"+sf): hZip.write("grammalecte-js/"+sf, sAddPath+"grammalecte-js/"+sf) for sf in os.listdir(spLangPack): if not os.path.isdir(spLangPack+"/"+sf): hZip.write(spLangPack+"/"+sf, sAddPath+spLangPack+"/"+sf) | > > > > < | 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | return dVars def _copyGrammalecteJSPackageInZipFile (hZip, spLangPack, sDicName, sAddPath=""): for sf in os.listdir("grammalecte-js"): if not os.path.isdir("grammalecte-js/"+sf): hZip.write("grammalecte-js/"+sf, sAddPath+"grammalecte-js/"+sf) for sf in os.listdir("grammalecte-js/graphspell"): if not os.path.isdir("grammalecte-js/graphspell/"+sf): hZip.write("grammalecte-js/graphspell/"+sf, sAddPath+"grammalecte-js/graphspell/"+sf) hZip.write("grammalecte-js/graphspell/_dictionaries/"+sDicName, sAddPath+"grammalecte-js/graphspell/_dictionaries/"+sDicName) for sf in os.listdir(spLangPack): if not os.path.isdir(spLangPack+"/"+sf): hZip.write(spLangPack+"/"+sf, sAddPath+spLangPack+"/"+sf) |
Modified gc_lang/fr/build_data.py from [6a4fdb333b] to [9a16091a61].
1 2 3 4 5 6 7 8 9 10 11 | #!python3 # FRENCH DATA BUILDER # # by Olivier R. # License: MPL 2 import json import os import itertools | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #!python3 # FRENCH DATA BUILDER # # by Olivier R. # License: MPL 2 import json import os import itertools import graphspell.ibdawg as ibdawg from graphspell.echo import echo from graphspell.str_transform import defineSuffixCode import graphspell.tokenizer as tkz import grammalecte.fr.conj as conj class cd: """Context manager for changing the current working directory""" def __init__ (self, newPath): self.newPath = os.path.expanduser(newPath) |
︙ | ︙ |
Modified gc_lang/fr/modules-js/conj.js from [f88db6e13d] to [8bdb9ef82a].
1 2 3 4 5 6 7 8 9 10 11 | // Grammalecte - Conjugueur // License: GPL 3 /*jslint esversion: 6*/ /*global console,require,exports,self,browser*/ "use strict"; ${map} if (typeof(require) !== 'undefined') { | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // 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/graphspell/helpers.js"); } var conj = { _lVtyp: [], _lTags: [], _dPatternConj: {}, _dVerb: {}, |
︙ | ︙ |
Modified gc_lang/fr/modules-js/lexicographe.js from [7ba6d86b3e] to [be510450a4].
1 2 3 4 5 6 7 8 9 10 11 12 | // Grammalecte - Lexicographe // License: MPL 2 /*jslint esversion: 6*/ /*global require,exports*/ "use strict"; ${string} ${map} if (typeof (require) !== 'undefined') { | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // Grammalecte - Lexicographe // License: MPL 2 /*jslint esversion: 6*/ /*global require,exports*/ "use strict"; ${string} ${map} if (typeof (require) !== 'undefined') { var helpers = require("resource://grammalecte/graphspell/helpers.js"); } const _dTag = new Map([ [':G', "[mot grammatical]"], [':N', " nom,"], [':A', " adjectif,"], [':M1', " prénom,"], |
︙ | ︙ |
Modified gc_lang/fr/modules-js/mfsp.js from [7c56add844] to [9d6124ec70].
1 2 3 4 5 6 7 8 | // Grammalecte /*jslint esversion: 6*/ /*global console,require,exports,browser*/ "use strict"; if (typeof(require) !== 'undefined') { | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // Grammalecte /*jslint esversion: 6*/ /*global console,require,exports,browser*/ "use strict"; if (typeof(require) !== 'undefined') { var helpers = require("resource://grammalecte/graphspell/helpers.js"); } var mfsp = { // list of affix codes _lTagMiscPlur: [], _lTagMasForm: [], |
︙ | ︙ |
Modified gc_lang/fr/modules-js/phonet.js from [18dd011880] to [07bba03053].
1 2 3 4 | // Grammalecte - Suggestion phonétique /*jslint esversion: 6*/ if (typeof(require) !== 'undefined') { | | | 1 2 3 4 5 6 7 8 9 10 11 12 | // Grammalecte - Suggestion phonétique /*jslint esversion: 6*/ if (typeof(require) !== 'undefined') { var helpers = require("resource://grammalecte/graphspell/helpers.js"); } var phonet = { _dWord: new Map(), _lSet: [], _dMorph: new Map(), |
︙ | ︙ |
Modified gc_lang/fr/modules/tests.py from [78ace698ff] to [3069e3edd1].
1 2 3 4 5 6 7 8 9 | #! python3 # coding: UTF-8 import unittest import os import re import time | > | < | | 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 | #! python3 # coding: UTF-8 import unittest import os import re import time from ..graphspell.ibdawg import IBDAWG from ..graphspell.echo import echo from . import gc_engine as gce from . import conj from . import phonet from . import mfsp def _fuckBackslashUTF8 (s): "fuck that shit" return s.replace("\u2019", "'").replace("\u2013", "–").replace("\u2014", "—") class TestDictionary (unittest.TestCase): @classmethod def setUpClass (cls): cls.oDic = IBDAWG("French.bdic") def test_lookup (self): for sWord in ["branche", "Émilie"]: self.assertTrue(self.oDic.lookup(sWord), sWord) def test_lookup_failed (self): for sWord in ["Branche", "BRANCHE", "BranchE", "BRanche", "BRAnCHE", "émilie"]: |
︙ | ︙ |
Modified gc_lang/fr/rules.grx from [25edb1d474] to [36415d04c3].
︙ | ︙ | |||
5622 5623 5624 5625 5626 5627 5628 | <<- morph(\1, ">(?:sembler|para[îi]tre) ") and morphex(\3, ":A", ":G") ~2>> * __[i](loc_suivre_de_près)__ (suiv\w+) +((?:ça +|ce(?:ci|la) +|)de (pr[èé]s?|prêts?)) @@0,$,$ <<- morph(\1, ">suivre ", False) >>> <<- \3 != "près" -3>> près # Confusion : écrivez “près” pour dire “proche de quelque chose”.|https://fr.wiktionary.org/wiki/pr%C3%A8s <<- ~2>> * __[i](loc_tenir_à_distance)__ | | | | 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 | <<- morph(\1, ">(?:sembler|para[îi]tre) ") and morphex(\3, ":A", ":G") ~2>> * __[i](loc_suivre_de_près)__ (suiv\w+) +((?:ça +|ce(?:ci|la) +|)de (pr[èé]s?|prêts?)) @@0,$,$ <<- morph(\1, ">suivre ", False) >>> <<- \3 != "près" -3>> près # Confusion : écrivez “près” pour dire “proche de quelque chose”.|https://fr.wiktionary.org/wiki/pr%C3%A8s <<- ~2>> * __[i](loc_tenir_à_distance)__ (t[eiî]\w+) +(([àa]) distance +(?:respectable +|))d(?:es?|u) @@0,*,w <<- morph(\1, ">tenir ", False) >>> <<- \3 == "a" -3>> à # Confusion : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”. <<- ~2>> * __[i](loc_tenir_compte)__ (t[eiî]\w+) +(co(?:mp?|n)tes?|au courant) @@0,$ <<- morph(\1, ">tenir ", False) >>> <<- morph(\2, ">co[mn]te(?:sse|) ", False) -2>> compte # Confusion. Dans la locution “tenir compte”, écrivez “compte” au singulier.|https://fr.wiktionary.org/wiki/tenir_compte <<- ~2>> * __[i](p_tirer_profit)__ (tir\w+) +(avantage|profit) d(?:es?|u) @@0,w <<- morph(\1, ">tirer ", False) ~2>> * __[i](loc_tourner_court)__ |
︙ | ︙ |
Added gc_lang/fr/tb/worker/gce_worker.js version [245ae8ae9c].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | // JavaScript // Grammar checker engine // PromiseWorker // This code is executed in a separate thread (×20 faster too!!!) // Firefox WTF: it’s impossible to use require as in the main thread here, // so it is required to declare a resource in the file “chrome.manifest”. "use strict"; // copy/paste // https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/PromiseWorker.jsm importScripts("resource://gre/modules/workers/require.js"); let PromiseWorker = require("resource://gre/modules/workers/PromiseWorker.js"); // Instantiate AbstractWorker (see below). let worker = new PromiseWorker.AbstractWorker(); worker.dispatch = function(method, args = []) { // Dispatch a call to method `method` with args `args` return self[method](...args); }; worker.postMessage = function(...args) { // Post a message to the main thread self.postMessage(...args); }; worker.close = function() { // Close the worker self.close(); }; worker.log = function(...args) { // Log (or discard) messages (optional) dump("Worker: " + args.join(" ") + "\n"); }; // Connect it to message port. self.addEventListener("message", msg => worker.handleMessage(msg)); // end of copy/paste // no console here, use “dump” let gce = null; // module: grammar checker engine let text = null; let tkz = null; // module: tokenizer let lxg = null; // module: lexicographer let helpers = null; let oTokenizer = null; let oDict = null; let oLxg = null; function loadGrammarChecker (sGCOptions="", sContext="JavaScript") { if (gce === null) { try { gce = require("resource://grammalecte/fr/gc_engine.js"); helpers = require("resource://grammalecte/graphspell/helpers.js"); text = require("resource://grammalecte/text.js"); tkz = require("resource://grammalecte/graphspell/tokenizer.js"); //lxg = require("resource://grammalecte/fr/lexicographe.js"); oTokenizer = new tkz.Tokenizer("fr"); //helpers.setLogOutput(worker.log); gce.load(sContext); oDict = gce.getDictionary(); if (sGCOptions !== "") { gce.setOptions(helpers.objectToMap(JSON.parse(sGCOptions))); } // we always retrieve options from the gce, for setOptions filters obsolete options return gce.getOptions().gl_toString(); } catch (e) { console.log("# Error: " + e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message); } } } function parse (sText, sCountry, bDebug, bContext) { let aGrammErr = gce.parse(sText, sCountry, bDebug, bContext); return JSON.stringify(aGrammErr); } function parseAndSpellcheck (sText, sCountry, bDebug, bContext) { let aGrammErr = gce.parse(sText, sCountry, bDebug, bContext); let aSpellErr = oTokenizer.getSpellingErrors(sText, oDict); return JSON.stringify({ aGrammErr: aGrammErr, aSpellErr: aSpellErr }); } function getOptions () { return gce.getOptions().gl_toString(); } function getDefaultOptions () { return gce.getDefaultOptions().gl_toString(); } function setOptions (sGCOptions) { gce.setOptions(helpers.objectToMap(JSON.parse(sGCOptions))); return gce.getOptions().gl_toString(); } function setOption (sOptName, bValue) { gce.setOptions(new Map([ [sOptName, bValue] ])); return gce.getOptions().gl_toString(); } function resetOptions () { gce.resetOptions(); return gce.getOptions().gl_toString(); } function fullTests (sGCOptions="") { if (!gce || !oDict) { return "# Error: grammar checker or dictionary not loaded." } let dMemoOptions = gce.getOptions(); if (sGCOptions) { gce.setOptions(helpers.objectToMap(JSON.parse(sGCOptions))); } let tests = require("resource://grammalecte/tests.js"); let oTest = new tests.TestGrammarChecking(gce); let sAllRes = ""; for (let sRes of oTest.testParse()) { console.log(sRes+"\n"); sAllRes += sRes+"\n"; } gce.setOptions(dMemoOptions); return sAllRes; } |
Modified gc_lang/fr/webext/gce_worker.js from [666eb5f433] to [7786f58fad].
︙ | ︙ | |||
28 29 30 31 32 33 34 | "use strict"; //console.log("[Worker] GC Engine Worker [start]"); //console.log(self); | | | | | | | | 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 | "use strict"; //console.log("[Worker] GC Engine Worker [start]"); //console.log(self); importScripts("grammalecte/graphspell/helpers.js"); importScripts("grammalecte/graphspell/str_transform.js"); importScripts("grammalecte/graphspell/char_player.js"); importScripts("grammalecte/graphspell/ibdawg.js"); importScripts("grammalecte/text.js"); importScripts("grammalecte/graphspell/tokenizer.js"); importScripts("grammalecte/fr/conj.js"); importScripts("grammalecte/fr/mfsp.js"); importScripts("grammalecte/fr/phonet.js"); importScripts("grammalecte/fr/cregex.js"); importScripts("grammalecte/fr/gc_options.js"); importScripts("grammalecte/fr/gc_rules.js"); importScripts("grammalecte/fr/gc_engine.js"); importScripts("grammalecte/fr/lexicographe.js"); importScripts("grammalecte/tests.js"); /* Warning. Initialization can’t be completed at startup of the worker, for we need the path of the extension to load data stored in JSON files. This path is retrieved in background.js and passed with the event “init”. */ console.log("[Worker] imports odne"); function createResponse (sActionDone, result, dInfo, bEnd, bError=false) { return { "sActionDone": sActionDone, "result": result, // can be of any type "dInfo": dInfo, "bEnd": bEnd, |
︙ | ︙ | |||
156 157 158 159 160 161 162 | try { if (!bInitDone) { //console.log("[Worker] Loading… Extension path: " + sExtensionPath); conj.init(helpers.loadFile(sExtensionPath + "/grammalecte/fr/conj_data.json")); phonet.init(helpers.loadFile(sExtensionPath + "/grammalecte/fr/phonet_data.json")); mfsp.init(helpers.loadFile(sExtensionPath + "/grammalecte/fr/mfsp_data.json")); //console.log("[Worker] Modules have been initialized…"); | | | 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | try { if (!bInitDone) { //console.log("[Worker] Loading… Extension path: " + sExtensionPath); conj.init(helpers.loadFile(sExtensionPath + "/grammalecte/fr/conj_data.json")); phonet.init(helpers.loadFile(sExtensionPath + "/grammalecte/fr/phonet_data.json")); mfsp.init(helpers.loadFile(sExtensionPath + "/grammalecte/fr/mfsp_data.json")); //console.log("[Worker] Modules have been initialized…"); gc_engine.load(sContext, sExtensionPath+"grammalecte/graphspell/_dictionaries"); oDict = gc_engine.getDictionary(); oTest = new TestGrammarChecking(gc_engine, sExtensionPath+"/grammalecte/fr/tests_data.json"); oTokenizer = new Tokenizer("fr"); oLocution = helpers.loadFile(sExtensionPath + "/grammalecte/fr/locutions_data.json"); oLxg = new Lexicographe(oDict, oTokenizer, oLocution); |
︙ | ︙ |
Modified grammalecte-cli.py from [7a36d16e28] to [07800caa2b].
1 2 3 4 5 6 7 8 9 10 11 | #!/usr/bin/env python3 import sys import os.path import argparse import json import grammalecte.fr as gce import grammalecte.fr.lexicographe as lxg import grammalecte.fr.textformatter as tf import grammalecte.text as txt | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #!/usr/bin/env python3 import sys import os.path import argparse import json import grammalecte.fr as gce import grammalecte.fr.lexicographe as lxg import grammalecte.fr.textformatter as tf import grammalecte.text as txt import grammalecte.graphspell.tokenizer as tkz from grammalecte.graphspell.echo import echo _EXAMPLE = "Quoi ? Racontes ! Racontes-moi ! Bon sangg, parles ! Oui. Il y a des menteur partout. " \ "Je suit sidéré par la brutales arrogance de cette homme-là. Quelle salopard ! Un escrocs de la pire espece. " \ "Quant sera t’il châtiés pour ses mensonge ? Merde ! J’en aie marre." _HELP = """ |
︙ | ︙ |
Modified grammalecte-server.py from [a304d7cf85] to [6dbdf10c60].
︙ | ︙ | |||
10 11 12 13 14 15 16 | from bottle import Bottle, run, request, response, template, static_file import grammalecte.fr as gce import grammalecte.fr.lexicographe as lxg import grammalecte.fr.textformatter as tf import grammalecte.text as txt | | | | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | from bottle import Bottle, run, request, response, template, static_file import grammalecte.fr as gce import grammalecte.fr.lexicographe as lxg import grammalecte.fr.textformatter as tf import grammalecte.text as txt import grammalecte.graphspell.tokenizer as tkz from grammalecte.graphspell.echo import echo HOMEPAGE = """ <!DOCTYPE HTML> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> |
︙ | ︙ |
Name change from gc_core/js/char_player.js to graphspell-js/char_player.js.
︙ | ︙ |
Renamed and modified gc_core/js/helpers.js [b352512c63] to graphspell-js/helpers.js [d6421f5497].
︙ | ︙ | |||
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // 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; var helpers = { setLogOutput: function (func) { funcOutput = func; }, echo: function (obj) { if (funcOutput !== null) { funcOutput(obj); } else { console.log(obj); } return true; }, | > > | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | // 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; var helpers = { setLogOutput: function (func) { // probably obsolete now, as console.log seems to work everywhere (at last!) funcOutput = func; }, echo: function (obj) { // probably obsolete now, as console.log seems to work everywhere (at last!) if (funcOutput !== null) { funcOutput(obj); } else { console.log(obj); } return true; }, |
︙ | ︙ |
Renamed and modified gc_core/js/ibdawg.js [c1be157216] to graphspell-js/ibdawg.js [222e0edc2a].
1 2 3 4 5 6 7 8 | //// IBDAWG /*jslint esversion: 6*/ /*global console,require,exports*/ "use strict"; if (typeof(require) !== 'undefined') { | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | //// IBDAWG /*jslint esversion: 6*/ /*global console,require,exports*/ "use strict"; if (typeof(require) !== 'undefined') { var str_transform = require("resource://grammalecte/graphspell/str_transform.js"); var helpers = require("resource://grammalecte/graphspell/helpers.js"); var char_player = require("resource://grammalecte/graphspell/char_player.js"); } // Don’t remove <string>. Necessary in TB. ${string} ${map} ${set} |
︙ | ︙ | |||
82 83 84 85 86 87 88 | class IBDAWG { // INDEXABLE BINARY DIRECT ACYCLIC WORD GRAPH constructor (sDicName, sPath="") { try { | | | 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | class IBDAWG { // INDEXABLE BINARY DIRECT ACYCLIC WORD GRAPH constructor (sDicName, sPath="") { try { let sURL = (sPath !== "") ? sPath + "/" + sDicName : "resource://grammalecte/graphspell/_dictionaries/"+sDicName; const dict = JSON.parse(helpers.loadFile(sURL)); Object.assign(this, dict); } catch (e) { throw Error("# Error. File not found or not loadable.\n" + e.message + "\n"); } /* |
︙ | ︙ |
Name change from gc_core/js/str_transform.js to graphspell-js/str_transform.js.
︙ | ︙ |
Renamed and modified gc_core/js/tokenizer.js [a34a81c6e5] to graphspell-js/tokenizer.js [d6429837c4].
1 2 3 4 5 6 7 8 9 | // JavaScript // Very simple tokenizer /*jslint esversion: 6*/ /*global require,exports*/ "use strict"; if (typeof(require) !== 'undefined') { | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // JavaScript // Very simple tokenizer /*jslint esversion: 6*/ /*global require,exports*/ "use strict"; if (typeof(require) !== 'undefined') { var helpers = require("resource://grammalecte/graphspell/helpers.js"); } const aTkzPatterns = { // All regexps must start with ^. "default": [ |
︙ | ︙ |
Name change from gc_core/py/char_player.py to graphspell/char_player.py.
︙ | ︙ |
Name change from gc_core/py/dawg.py to graphspell/dawg.py.
︙ | ︙ |
Name change from gc_core/py/echo.py to graphspell/echo.py.
︙ | ︙ |
Name change from gc_core/py/ibdawg.py to graphspell/ibdawg.py.
︙ | ︙ |
Name change from gc_core/py/keyboard_chars_proximity.py to graphspell/keyboard_chars_proximity.py.
︙ | ︙ |
Name change from gc_core/py/progressbar.py to graphspell/progressbar.py.
︙ | ︙ |
Name change from gc_core/py/spellchecker.py to graphspell/spellchecker.py.
︙ | ︙ |
Name change from gc_core/py/str_transform.py to graphspell/str_transform.py.
︙ | ︙ |
Name change from gc_core/py/tokenizer.py to graphspell/tokenizer.py.
︙ | ︙ |
Modified helpers.py from [4468e2a847] to [b55cd82bf9].
1 2 3 4 5 6 7 8 9 10 11 | # Useful tools import os import shutil import zipfile from string import Template class cd: "Context manager for changing the current working directory" | > | 1 2 3 4 5 6 7 8 9 10 11 12 | # Useful tools import os import shutil import errno import zipfile from string import Template class cd: "Context manager for changing the current working directory" |
︙ | ︙ | |||
53 54 55 56 57 58 59 60 61 62 63 64 65 66 | def createCleanFolder (sp): "make an empty folder or erase its content if not empty" if not os.path.exists(sp): os.makedirs(sp, exist_ok=True) else: eraseFolder(sp) def fileFile (spf, dVars): "return file <spf> as a text filed with variables from <dVars>" return Template(open(spf, "r", encoding="utf-8").read()).safe_substitute(dVars) def copyAndFileTemplate (spfSrc, spfDst, dVars): | > > > > > > > > > > | 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | def createCleanFolder (sp): "make an empty folder or erase its content if not empty" if not os.path.exists(sp): os.makedirs(sp, exist_ok=True) else: eraseFolder(sp) def copyFolderContent (spSrc, spDst): try: shutil.copytree(spSrc, spDst) except OSError as e: if e.errno == errno.ENOTDIR: shutil.copy(spSrc, spDst) else: raise def fileFile (spf, dVars): "return file <spf> as a text filed with variables from <dVars>" return Template(open(spf, "r", encoding="utf-8").read()).safe_substitute(dVars) def copyAndFileTemplate (spfSrc, spfDst, dVars): |
︙ | ︙ |
Name change from gc_core/js/jsex_map.js to js_extension/map.js.
︙ | ︙ |
Name change from gc_core/js/jsex_regex.js to js_extension/regex.js.
︙ | ︙ |
Name change from gc_core/js/jsex_set.js to js_extension/set.js.
︙ | ︙ |
Name change from gc_core/js/jsex_string.js to js_extension/string.js.
︙ | ︙ |
Modified lex_build.py from [c786502779] to [57c70320f0].
1 2 3 4 5 6 7 | #!python3 # Lexicon builder import argparse from distutils import dir_util | | | | | | | | | 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 | #!python3 # Lexicon builder import argparse from distutils import dir_util import graphspell.dawg as fsa from graphspell.ibdawg import IBDAWG def build (spfSrc, sLangName, sDicName, bJSON=False, cStemmingMethod="S", nCompressMethod=1): "transform a text lexicon as a binary indexable dictionary" oDAWG = fsa.DAWG(spfSrc, sLangName, cStemmingMethod) dir_util.mkpath("graphspell/_dictionaries") oDAWG.writeInfo("graphspell/_dictionaries/" + sDicName + ".info.txt") oDAWG.createBinary("graphspell/_dictionaries/" + sDicName + ".bdic", int(nCompressMethod)) if bJSON: dir_util.mkpath("graphspell-js/_dictionaries") oDic = IBDAWG(sDicName + ".bdic") oDic.writeAsJSObject("graphspell-js/_dictionaries/" + sDicName + ".json", bBinaryDictAsHexString=True) def main (): xParser = argparse.ArgumentParser() xParser.add_argument("src_lexicon", type=str, help="path and file name of the source lexicon") xParser.add_argument("lang_name", type=str, help="language name") xParser.add_argument("dic_name", type=str, help="dictionary file name (without extension)") |
︙ | ︙ |
Modified make.py from [29a87bfcf1] to [850d6c4ce8].
︙ | ︙ | |||
163 164 165 166 167 168 169 170 171 172 | hZip.writestr("setup.py", helpers.fileFile("gc_lang/fr/setup.py", dVars)) def copyGrammalectePyPackageInZipFile (hZip, spLangPack, sDicName, sAddPath=""): for sf in os.listdir("grammalecte"): if not os.path.isdir("grammalecte/"+sf): hZip.write("grammalecte/"+sf, sAddPath+"grammalecte/"+sf) for sf in os.listdir(spLangPack): if not os.path.isdir(spLangPack+"/"+sf): hZip.write(spLangPack+"/"+sf, sAddPath+spLangPack+"/"+sf) | > > > > < | 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 | hZip.writestr("setup.py", helpers.fileFile("gc_lang/fr/setup.py", dVars)) def copyGrammalectePyPackageInZipFile (hZip, spLangPack, sDicName, sAddPath=""): for sf in os.listdir("grammalecte"): if not os.path.isdir("grammalecte/"+sf): hZip.write("grammalecte/"+sf, sAddPath+"grammalecte/"+sf) for sf in os.listdir("grammalecte/graphspell"): if not os.path.isdir("grammalecte/graphspell/"+sf): hZip.write("grammalecte/graphspell/"+sf, sAddPath+"grammalecte/graphspell/"+sf) hZip.write("grammalecte/graphspell/_dictionaries/"+sDicName, sAddPath+"grammalecte/graphspell/_dictionaries/"+sDicName) for sf in os.listdir(spLangPack): if not os.path.isdir(spLangPack+"/"+sf): hZip.write(spLangPack+"/"+sf, sAddPath+spLangPack+"/"+sf) def create (sLang, xConfig, bInstallOXT, bJavaScript): oNow = datetime.datetime.now() print("============== MAKE GRAMMALECTE [{0}] at {1.hour:>2} h {1.minute:>2} min {1.second:>2} s ==============".format(sLang, oNow)) #### READ CONFIGURATION |
︙ | ︙ | |||
201 202 203 204 205 206 207 208 209 210 211 212 213 214 | for sf in os.listdir(spLang+"/modules"): if re.match(r"gce_\w+[.]py$", sf): sCodePlugins += "\n\n" + open(spLang+'/modules/'+sf, "r", encoding="utf-8").read() print(sf, end=", ") print() dVars["plugins"] = sCodePlugins ## CREATE GRAMMAR CHECKER PACKAGE spLangPack = "grammalecte/"+sLang helpers.createCleanFolder(spLangPack) for sf in os.listdir("gc_core/py/lang_core"): if not os.path.isdir("gc_core/py/lang_core/"+sf): helpers.copyAndFileTemplate("gc_core/py/lang_core/"+sf, spLangPack+"/"+sf, dVars) print("+ Modules: ", end="") | > > > > > > | 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 | for sf in os.listdir(spLang+"/modules"): if re.match(r"gce_\w+[.]py$", sf): sCodePlugins += "\n\n" + open(spLang+'/modules/'+sf, "r", encoding="utf-8").read() print(sf, end=", ") print() dVars["plugins"] = sCodePlugins ## COPY GC_CORE COMMON FILES for sf in os.listdir("gc_core/py"): if not os.path.isdir("gc_core/py/"+sf): helpers.copyAndFileTemplate("gc_core/py/"+sf, "grammalecte/"+sf, dVars) open("grammalecte/WARNING.txt", "w", encoding="utf-8", newline="\n").write(sWarningMessage) ## CREATE GRAMMAR CHECKER PACKAGE spLangPack = "grammalecte/"+sLang helpers.createCleanFolder(spLangPack) for sf in os.listdir("gc_core/py/lang_core"): if not os.path.isdir("gc_core/py/lang_core/"+sf): helpers.copyAndFileTemplate("gc_core/py/lang_core/"+sf, spLangPack+"/"+sf, dVars) print("+ Modules: ", end="") |
︙ | ︙ | |||
246 247 248 249 250 251 252 | dVars["dOptThunderbird"] = json.dumps(list(dVars["dOptThunderbird"].items())) # create folder spLangPack = "grammalecte-js/"+sLang helpers.createCleanFolder(spLangPack) # create files | | < | | 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 | dVars["dOptThunderbird"] = json.dumps(list(dVars["dOptThunderbird"].items())) # create folder spLangPack = "grammalecte-js/"+sLang helpers.createCleanFolder(spLangPack) # create files for sf in os.listdir("js_extension"): dVars[sf[:-3]] = open("js_extension/"+sf, "r", encoding="utf-8").read() for sf in os.listdir("gc_core/js"): if not os.path.isdir("gc_core/js/"+sf) and not sf.startswith("jsex_"): helpers.copyAndFileTemplate("gc_core/js/"+sf, "grammalecte-js/"+sf, dVars) open("grammalecte-js/WARNING.txt", "w", encoding="utf-8", newline="\n").write(sWarningMessage) for sf in os.listdir("gc_core/js/lang_core"): if not os.path.isdir("gc_core/js/lang_core/"+sf) and sf.startswith("gc_"): helpers.copyAndFileTemplate("gc_core/js/lang_core/"+sf, spLangPack+"/"+sf, dVars) |
︙ | ︙ | |||
272 273 274 275 276 277 278 279 280 281 282 283 284 285 | except ImportError: print("# No complementary builder <build.py> in folder gc_lang/"+sLang) else: build_module.build(sLang, dVars, spLangPack) return dVars['version'] def main (): print("Python: " + sys.version) xParser = argparse.ArgumentParser() xParser.add_argument("lang", type=str, nargs='+', help="lang project to generate (name of folder in /lang)") xParser.add_argument("-b", "--build_data", help="launch build_data.py (part 1 and 2)", action="store_true") xParser.add_argument("-bb", "--build_data_before", help="launch build_data.py (only part 1: before dictionary building)", action="store_true") | > > > > > > > > > > > > > > > > > > > > > > > > > | 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 | except ImportError: print("# No complementary builder <build.py> in folder gc_lang/"+sLang) else: build_module.build(sLang, dVars, spLangPack) return dVars['version'] def copyGraphspellCore (bJavaScript=False): helpers.createCleanFolder("grammalecte/graphspell") dir_util.mkpath("grammalecte/graphspell/_dictionaries") for sf in os.listdir("graphspell"): if not os.path.isdir("graphspell/"+sf): file_util.copy_file("graphspell/"+sf, "grammalecte/graphspell") if bJavaScript: helpers.createCleanFolder("grammalecte-js/graphspell") dir_util.mkpath("grammalecte-js/graphspell/_dictionaries") dVars = {} for sf in os.listdir("js_extension"): dVars[sf[:-3]] = open("js_extension/"+sf, "r", encoding="utf-8").read() for sf in os.listdir("graphspell-js"): if not os.path.isdir("graphspell-js/"+sf): file_util.copy_file("graphspell-js/"+sf, "grammalecte-js/graphspell") helpers.copyAndFileTemplate("graphspell-js/"+sf, "grammalecte-js/graphspell/"+sf, dVars) def copyGraphspellDictionary (sDicName, bJavaScript=False): file_util.copy_file("graphspell/_dictionaries/"+sDicName.strip()+".bdic", "grammalecte/graphspell/_dictionaries") file_util.copy_file("graphspell/_dictionaries/"+sDicName.strip()+".info.txt", "grammalecte/graphspell/_dictionaries") if bJavaScript: file_util.copy_file("graphspell-js/_dictionaries/"+sDicName.strip()+".json", "grammalecte-js/graphspell/_dictionaries") def main (): print("Python: " + sys.version) xParser = argparse.ArgumentParser() xParser.add_argument("lang", type=str, nargs='+', help="lang project to generate (name of folder in /lang)") xParser.add_argument("-b", "--build_data", help="launch build_data.py (part 1 and 2)", action="store_true") xParser.add_argument("-bb", "--build_data_before", help="launch build_data.py (only part 1: before dictionary building)", action="store_true") |
︙ | ︙ | |||
297 298 299 300 301 302 303 | if xArgs.build_data: xArgs.build_data_before = True xArgs.build_data_after = True dir_util.mkpath("_build") dir_util.mkpath("grammalecte") | > | > > < < < < < < | > > > > | 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 | if xArgs.build_data: xArgs.build_data_before = True xArgs.build_data_after = True dir_util.mkpath("_build") dir_util.mkpath("grammalecte") if xArgs.javascript: dir_util.mkpath("grammalecte-js") copyGraphspellCore(xArgs.javascript) for sLang in xArgs.lang: if os.path.exists("gc_lang/"+sLang) and os.path.isdir("gc_lang/"+sLang): xConfig = getConfig(sLang) dVars = xConfig._sections['args'] # build data build_data_module = None if xArgs.build_data_before or xArgs.build_data_after: # lang data try: build_data_module = importlib.import_module("gc_lang."+sLang+".build_data") except ImportError: print("# Error. Couldn’t import file build_data.py in folder gc_lang/"+sLang) if build_data_module and xArgs.build_data_before: build_data_module.before('gc_lang/'+sLang, dVars, xArgs.javascript) if xArgs.dict: import lex_build lex_build.build(dVars['lexicon_src'], dVars['lang_name'], dVars['dic_name'], xArgs.javascript, dVars['stemming_method'], int(dVars['fsa_method'])) if build_data_module and xArgs.build_data_after: build_data_module.after('gc_lang/'+sLang, dVars, xArgs.javascript) # copy dictionaries from Graphspell for sDicName in dVars['dic_name'].split(","): copyGraphspellDictionary(sDicName, xArgs.javascript) # make sVersion = create(sLang, xConfig, xArgs.install, xArgs.javascript, ) # tests if xArgs.tests or xArgs.perf or xArgs.perf_memo: print("> Running tests") try: |
︙ | ︙ |
Modified reader.py from [0c60e1da75] to [66f5eb17ae].
1 2 3 4 5 6 7 | #!python3 # Just a file for one-shot scripts import os import sys import re | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #!python3 # Just a file for one-shot scripts import os import sys import re import graphspell.ibdawg as ibdawg oDict = ibdawg.IBDAWG("French.bdic") def readFile (spf): if os.path.isfile(spf): with open(spf, "r", encoding="utf-8") as hSrc: |
︙ | ︙ |