Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -1702,27 +1702,27 @@ !!! Purge de la phrase !! !!! !!! __tag_mots_entre_guillemets__ - « [*WORD|*WORD_ELIDED] » + « [*WORD|*WORDELD] » <<- space_after(\1, 0, 1) and space_after(\2, 0, 1) /2>> eg1mot - « [*WORD|*WORD_ELIDED] [*WORD|*WORD_ELIDED] + « [*WORD|*WORDELD] [*WORD|*WORDELD] <<- space_after(\1, 0, 1) /2:0>> egxmot - [*WORD|*WORD_ELIDED] [*WORD|*WORD_ELIDED] » + [*WORD|*WORDELD] [*WORD|*WORDELD] » <<- space_after(\2, 0, 1) /1:2>> egxmot - [“|”|"] [*WORD|*WORD_ELIDED] [“|”|"] - [‘|'|’|`] [*WORD|*WORD_ELIDED] [‘|'|’|`] + [“|”|"] [*WORD|*WORDELD] [“|”|"] + [‘|'|’|`] [*WORD|*WORDELD] [‘|'|’|`] <<- space_after(\1, 0, 0) and space_after(\2, 0, 0) /2>> eg1mot - ["|“|”] [*WORD|*WORD_ELIDED] *[*WORD|*WORD_ELIDED] + ["|“|”] [*WORD|*WORDELD] *[*WORD|*WORDELD] <<- space_after(\1, 0, 0) /2:0>> egxmot - [*WORD|*WORD_ELIDED] [*WORD|*WORD_ELIDED] ["|“|”] + [*WORD|*WORDELD] [*WORD|*WORDELD] ["|“|”] <<- space_after(\2, 0, 0) /1:2>> egxmot __purge_guillemets__ [«|»|“|”|"|„|`] @@ -3053,28 +3053,28 @@ [le|du|au] groupe ?nominal¿ [“|”|"] $:D @:[NA] ?@:[NA]¿ ?@:[NA]¿ [“|”|"] [le|du|au] groupe ?nominal¿ « $:D @:[NA] ?@:[NA]¿ ?@:[NA]¿ » [le|du|au] groupe ?nominal¿ [‘|'|’|`] $:D @:[NA] ?@:[NA]¿ ?@:[NA]¿ [‘|'|’|`] [le|du|au] groupe ?nominal¿ ‹ $:D @:[NA] ?@:[NA]¿ ?@:[NA]¿ › - [le|du|au] syntagme ?nominal¿ [“|”|"] [*WORD|*WORD_ELIDED] *WORD ?*WORD¿ ?*WORD¿ [“|”|"] - [le|du|au] syntagme ?nominal¿ « [*WORD|*WORD_ELIDED] *WORD ?*WORD¿ ?*WORD¿ » - [le|du|au] syntagme ?nominal¿ [‘|'|’|`] [*WORD|*WORD_ELIDED] *WORD ?*WORD¿ ?*WORD¿ [‘|'|’|`] - [le|du|au] syntagme ?nominal¿ ‹ [*WORD|*WORD_ELIDED] *WORD ?*WORD¿ ?*WORD¿ › - la proposition [“|”|"] [*WORD|*WORD_ELIDED] [*WORD|*WORD_ELIDED] ?[*WORD|*WORD_ELIDED]¿ ?[*WORD|*WORD_ELIDED]¿ ?[*WORD|*WORD_ELIDED]¿ [“|”|"] - la proposition « [*WORD|*WORD_ELIDED] [*WORD|*WORD_ELIDED] ?[*WORD|*WORD_ELIDED]¿ ?[*WORD|*WORD_ELIDED]¿ ?[*WORD|*WORD_ELIDED]¿ » - la proposition [‘|'|’|`] [*WORD|*WORD_ELIDED] [*WORD|*WORD_ELIDED] ?[*WORD|*WORD_ELIDED]¿ ?[*WORD|*WORD_ELIDED]¿ ?[*WORD|*WORD_ELIDED]¿ [‘|'|’|`] - la proposition ‹ [*WORD|*WORD_ELIDED] [*WORD|*WORD_ELIDED] ?[*WORD|*WORD_ELIDED]¿ ?[*WORD|*WORD_ELIDED]¿ ?[*WORD|*WORD_ELIDED]¿ › - [|la] locution ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿ [“|”|"] [*WORD|*WORD_ELIDED] ?,¿ [*WORD|*WORD_ELIDED] ?[*WORD|*WORD_ELIDED]¿ ?[*WORD|*WORD_ELIDED]¿ ?*WORD¿ [“|”|"] - [|la] locution ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿ « [*WORD|*WORD_ELIDED] ?,¿ [*WORD|*WORD_ELIDED] ?[*WORD|*WORD_ELIDED]¿ ?[*WORD|*WORD_ELIDED]¿ ?*WORD¿ » - [|la] locution ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿ [‘|'|’|`] [*WORD|*WORD_ELIDED] ?,¿ [*WORD|*WORD_ELIDED] ?[*WORD|*WORD_ELIDED]¿ ?[*WORD|*WORD_ELIDED]¿ ?*WORD¿ [‘|'|’|`] - [|la] locution ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿ ‹ [*WORD|*WORD_ELIDED] ?,¿ [*WORD|*WORD_ELIDED] ?[*WORD|*WORD_ELIDED]¿ ?[*WORD|*WORD_ELIDED]¿ ?*WORD¿ › + [le|du|au] syntagme ?nominal¿ [“|”|"] [*WORD|*WORDELD] *WORD ?*WORD¿ ?*WORD¿ [“|”|"] + [le|du|au] syntagme ?nominal¿ « [*WORD|*WORDELD] *WORD ?*WORD¿ ?*WORD¿ » + [le|du|au] syntagme ?nominal¿ [‘|'|’|`] [*WORD|*WORDELD] *WORD ?*WORD¿ ?*WORD¿ [‘|'|’|`] + [le|du|au] syntagme ?nominal¿ ‹ [*WORD|*WORDELD] *WORD ?*WORD¿ ?*WORD¿ › + la proposition [“|”|"] [*WORD|*WORDELD] [*WORD|*WORDELD] ?[*WORD|*WORDELD]¿ ?[*WORD|*WORDELD]¿ ?[*WORD|*WORDELD]¿ [“|”|"] + la proposition « [*WORD|*WORDELD] [*WORD|*WORDELD] ?[*WORD|*WORDELD]¿ ?[*WORD|*WORDELD]¿ ?[*WORD|*WORDELD]¿ » + la proposition [‘|'|’|`] [*WORD|*WORDELD] [*WORD|*WORDELD] ?[*WORD|*WORDELD]¿ ?[*WORD|*WORDELD]¿ ?[*WORD|*WORDELD]¿ [‘|'|’|`] + la proposition ‹ [*WORD|*WORDELD] [*WORD|*WORDELD] ?[*WORD|*WORDELD]¿ ?[*WORD|*WORDELD]¿ ?[*WORD|*WORDELD]¿ › + [|la] locution ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿ [“|”|"] [*WORD|*WORDELD] ?,¿ [*WORD|*WORDELD] ?[*WORD|*WORDELD]¿ ?[*WORD|*WORDELD]¿ ?*WORD¿ [“|”|"] + [|la] locution ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿ « [*WORD|*WORDELD] ?,¿ [*WORD|*WORDELD] ?[*WORD|*WORDELD]¿ ?[*WORD|*WORDELD]¿ ?*WORD¿ » + [|la] locution ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿ [‘|'|’|`] [*WORD|*WORDELD] ?,¿ [*WORD|*WORDELD] ?[*WORD|*WORDELD]¿ ?[*WORD|*WORDELD]¿ ?*WORD¿ [‘|'|’|`] + [|la] locution ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿ ‹ [*WORD|*WORDELD] ?,¿ [*WORD|*WORDELD] ?[*WORD|*WORDELD]¿ ?[*WORD|*WORDELD]¿ ?*WORD¿ › <<- ~3:0>> * - [|l’] ancienne locution ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿ [“|”|"] [*WORD|*WORD_ELIDED] ?,¿ [*WORD|*WORD_ELIDED] ?[*WORD|*WORD_ELIDED]¿ ?[*WORD|*WORD_ELIDED]¿ ?*WORD¿ [“|”|"] - [|l’] ancienne locution ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿ « [*WORD|*WORD_ELIDED] ?,¿ [*WORD|*WORD_ELIDED] ?[*WORD|*WORD_ELIDED]¿ ?[*WORD|*WORD_ELIDED]¿ ?*WORD¿ » - [|l’] ancienne locution ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿ [‘|'|’|`] [*WORD|*WORD_ELIDED] ?,¿ [*WORD|*WORD_ELIDED] ?[*WORD|*WORD_ELIDED]¿ ?[*WORD|*WORD_ELIDED]¿ ?*WORD¿ [‘|'|’|`] - [|l’] ancienne locution ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿ ‹ [*WORD|*WORD_ELIDED] ?,¿ [*WORD|*WORD_ELIDED] ?[*WORD|*WORD_ELIDED]¿ ?[*WORD|*WORD_ELIDED]¿ ?*WORD¿ › + [|l’] ancienne locution ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿ [“|”|"] [*WORD|*WORDELD] ?,¿ [*WORD|*WORDELD] ?[*WORD|*WORDELD]¿ ?[*WORD|*WORDELD]¿ ?*WORD¿ [“|”|"] + [|l’] ancienne locution ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿ « [*WORD|*WORDELD] ?,¿ [*WORD|*WORDELD] ?[*WORD|*WORDELD]¿ ?[*WORD|*WORDELD]¿ ?*WORD¿ » + [|l’] ancienne locution ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿ [‘|'|’|`] [*WORD|*WORDELD] ?,¿ [*WORD|*WORDELD] ?[*WORD|*WORDELD]¿ ?[*WORD|*WORDELD]¿ ?*WORD¿ [‘|'|’|`] + [|l’] ancienne locution ?[nominale|adjectivale|adverbiale|verbale|pronominale]¿ ‹ [*WORD|*WORDELD] ?,¿ [*WORD|*WORDELD] ?[*WORD|*WORDELD]¿ ?[*WORD|*WORDELD]¿ ?*WORD¿ › <<- ~4:0>> * [|,] [“|”|"] *WORD [“|”|"] n’ est pas un [terme|mot|nom|adjectif|déterminant|substantif|verbe|adverbe|participe|nombre] [|,] « *WORD » n’ est pas un [terme|mot|nom|adjectif|déterminant|substantif|verbe|adverbe|participe|nombre] @@ -3176,14 +3176,14 @@ [|,] [‘|'|’|`] *SIGN [‘|'|’|`] est [un|le] signe [|,] ‹ *SIGN › est [un|le] signe <<- !3>> <<- !5>> - [|,] >écrire  [“|”|"] ?*WORD_ELIDED¿ *WORD [“|”|"] - [|,] >écrire  « ?*WORD_ELIDED¿ *WORD » - [|,] >écrire  [‘|'|’|`] ?*WORD_ELIDED¿ *WORD [‘|'|’|`] - [|,] >écrire  ‹ ?*WORD_ELIDED¿ *WORD › + [|,] >écrire  [“|”|"] ?*WORDELD¿ *WORD [“|”|"] + [|,] >écrire  « ?*WORDELD¿ *WORD » + [|,] >écrire  [‘|'|’|`] ?*WORDELD¿ *WORD [‘|'|’|`] + [|,] >écrire  ‹ ?*WORDELD¿ *WORD › <<- !-2>> TEST: New York {{étaient}} {{devenue}} la plaque tournante de tous les trafics. TEST: de Bordeaux ou de n’importe où TEST: il n’y a pas faute. @@ -13401,11 +13401,11 @@ *WORD [Janvier|Février|Avril|Mai|Juin|Juillet|Août|Aout|Septembre|Octobre|Novembre|Décembre|Vendémiaire|Brumaire|Frimaire|Nivôse|Pluviôse|Ventôse|Germinal|Floréal|Prairial|Messidor|Thermidor|Fructidor] <<- /maj/ not morph(\1, ":M1") and not \2.isupper() -2:>> =\2.lower() && Pas de majuscule sur les mois.|http://www.academie-francaise.fr/la-langue-francaise/questions-de-langue#42_strong-em-jours-de-la-semaine-pluriel-et-majuscules-em-strong - [*NUM|*WORD_ELIDED] [Janvier|Février|Avril|Mai|Juin|Juillet|Août|Aout|Septembre|Octobre|Novembre|Décembre|Vendémiaire|Brumaire|Frimaire|Nivôse|Pluviôse|Ventôse|Germinal|Floréal|Prairial|Messidor|Thermidor|Fructidor] + [*NUM|*WORDELD] [Janvier|Février|Avril|Mai|Juin|Juillet|Août|Aout|Septembre|Octobre|Novembre|Décembre|Vendémiaire|Brumaire|Frimaire|Nivôse|Pluviôse|Ventôse|Germinal|Floréal|Prairial|Messidor|Thermidor|Fructidor] , [Janvier|Février|Avril|Mai|Juin|Juillet|Août|Aout|Septembre|Octobre|Novembre|Décembre|Vendémiaire|Brumaire|Frimaire|Nivôse|Pluviôse|Ventôse|Germinal|Floréal|Prairial|Messidor|Thermidor|Fructidor] <<- /maj/ not \2.isupper() -2:>> =\2.lower() && Pas de majuscule sur les mois.|http://www.academie-francaise.fr/la-langue-francaise/questions-de-langue#42_strong-em-jours-de-la-semaine-pluriel-et-majuscules-em-strong [1|2|3|4|5|6|7|8|9|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31] Mars Index: gc_lang/fr/webext/content_scripts/panel_lxg.css ================================================================== --- gc_lang/fr/webext/content_scripts/panel_lxg.css +++ gc_lang/fr/webext/content_scripts/panel_lxg.css @@ -131,11 +131,12 @@ div.grammalecte_lxg_token_LOC { background-color: hsla(150, 50%, 30%, 1); } div.grammalecte_lxg_token_WORD, -div.grammalecte_lxg_token_WORD_ELIDED { +div.grammalecte_lxg_token_WORDORD, +div.grammalecte_lxg_token_WORDELD { background-color: hsla(150, 50%, 50%, 1); } div.grammalecte_lxg_token_UNKNOWN_WORD { background-color: hsla(0, 50%, 50%, 1); } Index: graphspell-js/lexgraph_fr.js ================================================================== --- graphspell-js/lexgraph_fr.js +++ graphspell-js/lexgraph_fr.js @@ -481,11 +481,12 @@ oToken["aLabels"] = ["dossier Windows"]; break; case 'WORD_ACRONYM': oToken["aLabels"] = ["sigle ou acronyme"]; break; - case 'WORD_ELIDED': + case 'WORDELD': + case 'WORDORD': case 'WORD': if (oToken.hasOwnProperty("lMorph") && oToken["lMorph"].length > 0) { // with morphology oToken["aLabels"] = []; for (let sMorph of oToken["lMorph"]) { Index: graphspell-js/tokenizer.js ================================================================== --- graphspell-js/tokenizer.js +++ graphspell-js/tokenizer.js @@ -39,13 +39,13 @@ [/^(?:https?:\/\/|www[.]|[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st_-]+[@.][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st_-]{2,}[@.])[a-zA-Z0-9][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st_.\/?&!%=+*"'@$#-]+/, 'LINK'], [/^[#@][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st_-]+/, 'TAG'], [/^<[a-zA-Z]+.*?>|^<\/[a-zA-Z]+ *>/, 'HTML'], [/^\[\/?[a-zA-Z]+\]/, 'PSEUDOHTML'], [/^&\w+;(?:\w+;|)/, 'HTMLENTITY'], - [/^(?:l|d|n|m|t|s|j|c|ç|lorsqu|puisqu|jusqu|quoiqu|qu|presqu|quelqu)['’ʼ‘‛´`′‵՚ꞌꞋ]/i, 'WORD_ELIDED'], + [/^(?:l|d|n|m|t|s|j|c|ç|lorsqu|puisqu|jusqu|quoiqu|qu|presqu|quelqu)['’ʼ‘‛´`′‵՚ꞌꞋ]/i, 'WORDELD'], [/^\d\d?[h:]\d\d(?:[m:]\d\ds?|)\b/, 'HOUR'], - [/^\d+(?:ers?\b|res?\b|è[rm]es?\b|i[èe][mr]es?\b|de?s?\b|nde?s?\b|ès?\b|es?\b|ᵉʳˢ?|ʳᵉˢ?|ᵈᵉ?ˢ?|ⁿᵈᵉ?ˢ?|ᵉˢ?)/, 'WORD_ORDINAL'], + [/^\d+(?:ers?\b|res?\b|è[rm]es?\b|i[èe][mr]es?\b|de?s?\b|nde?s?\b|ès?\b|es?\b|ᵉʳˢ?|ʳᵉˢ?|ᵈᵉ?ˢ?|ⁿᵈᵉ?ˢ?|ᵉˢ?)/, 'WORDORD'], [/^\d+(?:[.,]\d+|)/, 'NUM'], [/^[&%‰€$+±=*/<>⩾⩽#|×¥£§¢¬÷@-]/, 'SIGN'], [/^[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-stᴀ-ᶿ\u0300-\u036fᵉʳˢⁿᵈ]+(?:[’'`-][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-stᴀ-ᶿ\u0300-\u036fᵉʳˢⁿᵈ]+)*/, 'WORD'], [/^_+/, 'UNDERSCORE'], [/^\S/, 'OTHER'], Index: graphspell/lexgraph_fr.py ================================================================== --- graphspell/lexgraph_fr.py +++ graphspell/lexgraph_fr.py @@ -454,19 +454,19 @@ dToken["aLabels"] = ["balise pseudo-HTML"] elif dToken["sType"] == 'HTMLENTITY': dToken["aLabels"] = ["entité caractère XML/HTML"] elif dToken["sType"] == 'HOUR': dToken["aLabels"] = ["heure"] - elif dToken["sType"] == 'WORD_ORDINAL': + elif dToken["sType"] == 'WORDORD': dToken["aLabels"] = ["nombre ordinal"] elif dToken["sType"] == 'FOLDERUNIX': dToken["aLabels"] = ["dossier UNIX (et dérivés)"] elif dToken["sType"] == 'FOLDERWIN': dToken["aLabels"] = ["dossier Windows"] elif dToken["sType"] == 'WORD_ACRONYM': dToken["aLabels"] = ["sigle ou acronyme"] - elif dToken["sType"] == 'WORD' or dToken["sType"] == 'WORD_ELIDED': + elif dToken["sType"] == 'WORD' or dToken["sType"] == 'WORDELD': if "lMorph" in dToken and dToken["lMorph"]: # with morphology dToken["aLabels"] = [] for sMorph in dToken["lMorph"]: dToken["aLabels"].append(readableMorph(sMorph)) Index: graphspell/tokenizer.py ================================================================== --- graphspell/tokenizer.py +++ graphspell/tokenizer.py @@ -33,12 +33,12 @@ r'(?P[A-Z][.][A-Z][.](?:[A-Z][.])*)', r'(?P(?:https?://|www[.]|\w+[@.]\w\w+[@.])\w[\w./?&!%=+*"\'@$#-]+)', r'(?P[#@][\w-]+)', r'(?P<\w+.*?>|)', r'(?P\[/?\w+\])', - r"(?P(?:l|d|n|m|t|s|j|c|ç|lorsqu|puisqu|jusqu|quoiqu|qu|presqu|quelqu)['’ʼ‘‛´`′‵՚ꞌꞋ])", - r'(?P\d+(?:ers?|res?|è[rm]es?|i[èe][mr]es?|de?s?|nde?s?|ès?|es?|ᵉʳˢ?|ʳᵉˢ?|ᵈᵉ?ˢ?|ⁿᵈᵉ?ˢ?|ᵉˢ?)\b)', + r"(?P(?:l|d|n|m|t|s|j|c|ç|lorsqu|puisqu|jusqu|quoiqu|qu|presqu|quelqu)['’ʼ‘‛´`′‵՚ꞌꞋ])", + r'(?P\d+(?:ers?|res?|è[rm]es?|i[èe][mr]es?|de?s?|nde?s?|ès?|es?|ᵉʳˢ?|ʳᵉˢ?|ᵈᵉ?ˢ?|ⁿᵈᵉ?ˢ?|ᵉˢ?)\b)', r'(?P\d\d?[h:]\d\d(?:[m:]\d\ds?|)\b)', r'(?P\d+(?:[.,]\d+|))', r'(?P[&%‰€$+±=*/<>⩾⩽#|×¥£¢§¬÷@-])', r"(?P(?:(?!_)[\w\u0300-\u036f])+(?:[’'`-](?:(?!_)[\w\u0300-\u036f])+)*)", # with combining diacritics r"(?P_+)",