Index: gc_lang/fr/modules-js/gce_suggestions.js ================================================================== --- gc_lang/fr/modules-js/gce_suggestions.js +++ gc_lang/fr/modules-js/gce_suggestions.js @@ -581,36 +581,38 @@ return "les|la"; } return "la"; } -function formatNumber (sNumber) { +function formatNumber (sNumber, bOnlySimpleFormat=false) { let nLen = sNumber.length; if (nLen < 4 ) { return sNumber; } let sRes = ""; if (!sNumber.includes(",")) { // Nombre entier sRes = _formatNumber(sNumber, 3); - // binaire - if (/^[01]+$/.test(sNumber)) { - sRes += "|" + _formatNumber(sNumber, 4); - } - // numéros de téléphone - if (nLen == 10) { - if (sNumber.startsWith("0")) { - sRes += "|" + _formatNumber(sNumber, 2); // téléphone français - if (sNumber[1] == "4" && (sNumber[2]=="7" || sNumber[2]=="8" || sNumber[2]=="9")) { - sRes += "|" + sNumber.slice(0,4) + " " + sNumber.slice(4,6) + " " + sNumber.slice(6,8) + " " + sNumber.slice(8); // mobile belge - } - sRes += "|" + sNumber.slice(0,3) + " " + sNumber.slice(3,6) + " " + sNumber.slice(6,8) + " " + sNumber.slice(8); // téléphone suisse - } - sRes += "|" + sNumber.slice(0,4) + " " + sNumber.slice(4,7) + "-" + sNumber.slice(7); // téléphone canadien ou américain - } else if (nLen == 9 && sNumber.startsWith("0")) { - sRes += "|" + sNumber.slice(0,3) + " " + sNumber.slice(3,5) + " " + sNumber.slice(5,7) + " " + sNumber.slice(7,9); // fixe belge 1 - sRes += "|" + sNumber.slice(0,2) + " " + sNumber.slice(2,5) + " " + sNumber.slice(5,7) + " " + sNumber.slice(7,9); // fixe belge 2 + if (!bOnlySimpleFormat) { + // binaire + if (/^[01]+$/.test(sNumber)) { + sRes += "|" + _formatNumber(sNumber, 4); + } + // numéros de téléphone + if (nLen == 10) { + if (sNumber.startsWith("0")) { + sRes += "|" + _formatNumber(sNumber, 2); // téléphone français + if (sNumber[1] == "4" && (sNumber[2]=="7" || sNumber[2]=="8" || sNumber[2]=="9")) { + sRes += "|" + sNumber.slice(0,4) + " " + sNumber.slice(4,6) + " " + sNumber.slice(6,8) + " " + sNumber.slice(8); // mobile belge + } + sRes += "|" + sNumber.slice(0,3) + " " + sNumber.slice(3,6) + " " + sNumber.slice(6,8) + " " + sNumber.slice(8); // téléphone suisse + } + sRes += "|" + sNumber.slice(0,4) + " " + sNumber.slice(4,7) + "-" + sNumber.slice(7); // téléphone canadien ou américain + } else if (nLen == 9 && sNumber.startsWith("0")) { + sRes += "|" + sNumber.slice(0,3) + " " + sNumber.slice(3,5) + " " + sNumber.slice(5,7) + " " + sNumber.slice(7,9); // fixe belge 1 + sRes += "|" + sNumber.slice(0,2) + " " + sNumber.slice(2,5) + " " + sNumber.slice(5,7) + " " + sNumber.slice(7,9); // fixe belge 2 + } } } else { // Nombre réel let [sInt, sFloat] = sNumber.split(",", 2); sRes = _formatNumber(sInt, 3) + "," + sFloat; Index: gc_lang/fr/modules/gce_suggestions.py ================================================================== --- gc_lang/fr/modules/gce_suggestions.py +++ gc_lang/fr/modules/gce_suggestions.py @@ -450,33 +450,34 @@ return "la" _zBinary = re.compile("^[01]+$") -def formatNumber (sNumber): +def formatNumber (sNumber, bOnlySimpleFormat=False): "add spaces or hyphens to big numbers" nLen = len(sNumber) if nLen < 4: return sNumber sRes = "" if "," not in sNumber: # nombre entier sRes = _formatNumber(sNumber, 3) - # binaire - if _zBinary.search(sNumber): - sRes += "|" + _formatNumber(sNumber, 4) - # numéros de téléphone - if nLen == 10: - if sNumber.startswith("0"): - sRes += "|" + _formatNumber(sNumber, 2) # téléphone français - if sNumber[1] == "4" and (sNumber[2]=="7" or sNumber[2]=="8" or sNumber[2]=="9"): - sRes += "|" + sNumber[0:4] + " " + sNumber[4:6] + " " + sNumber[6:8] + " " + sNumber[8:] # mobile belge - sRes += "|" + sNumber[0:3] + " " + sNumber[3:6] + " " + sNumber[6:8] + " " + sNumber[8:] # téléphone suisse - sRes += "|" + sNumber[0:4] + " " + sNumber[4:7] + "-" + sNumber[7:] # téléphone canadien ou américain - elif nLen == 9 and sNumber.startswith("0"): - sRes += "|" + sNumber[0:3] + " " + sNumber[3:5] + " " + sNumber[5:7] + " " + sNumber[7:9] # fixe belge 1 - sRes += "|" + sNumber[0:2] + " " + sNumber[2:5] + " " + sNumber[5:7] + " " + sNumber[7:9] # fixe belge 2 + if not bOnlySimpleFormat: + # binaire + if _zBinary.search(sNumber): + sRes += "|" + _formatNumber(sNumber, 4) + # numéros de téléphone + if nLen == 10: + if sNumber.startswith("0"): + sRes += "|" + _formatNumber(sNumber, 2) # téléphone français + if sNumber[1] == "4" and (sNumber[2]=="7" or sNumber[2]=="8" or sNumber[2]=="9"): + sRes += "|" + sNumber[0:4] + " " + sNumber[4:6] + " " + sNumber[6:8] + " " + sNumber[8:] # mobile belge + sRes += "|" + sNumber[0:3] + " " + sNumber[3:6] + " " + sNumber[6:8] + " " + sNumber[8:] # téléphone suisse + sRes += "|" + sNumber[0:4] + " " + sNumber[4:7] + "-" + sNumber[7:] # téléphone canadien ou américain + elif nLen == 9 and sNumber.startswith("0"): + sRes += "|" + sNumber[0:3] + " " + sNumber[3:5] + " " + sNumber[5:7] + " " + sNumber[7:9] # fixe belge 1 + sRes += "|" + sNumber[0:2] + " " + sNumber[2:5] + " " + sNumber[5:7] + " " + sNumber[7:9] # fixe belge 2 else: # Nombre réel sInt, sFloat = sNumber.split(",", 1) sRes = _formatNumber(sInt, 3) + "," + sFloat return sRes Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -1110,23 +1110,23 @@ TEST: {{» }}C’est ce qu’on croit savoir. ->> "» |« " __[s]/unit(unit_nbsp_avant_unités1)__ ((\d+(?:,\d+[⁰¹²³⁴⁵⁶⁷⁸⁹]?|[⁰¹²³⁴⁵⁶⁷⁸⁹]|)) ?)([kcmµn]?(?:[slgJKVΩ]|m[²³]?|Wh?|Hz|dB)|[%‰€$£¥Åℓhj]|min|jours?|semaines|mois|ans?|euros?|heures?|px|MHz|°C|℃)(?![’']) @@0,0,$ - <<- option("num") ->> =formatNumber(\2) + " " + \3 && Avec une unité de mesure, mettez un espace insécable. + <<- option("num") ->> =formatNumber(\2, True) + " " + \3 && Avec une unité de mesure, mettez un espace insécable. <<- __else__ ->> "\2 \3" && Avec une unité de mesure, mettez un espace insécable. __[s]/unit(unit_nbsp_avant_unités2)__ ((\d+(?:,\d+[⁰¹²³⁴⁵⁶⁷⁸⁹]?|[⁰¹²³⁴⁵⁶⁷⁸⁹])) ?)([a-zA-Zµ][a-zA-Z0-9Ωℓ⁰¹²³⁴⁵⁶⁷⁸⁹/·]*) @@0,0,$ <<- morph(\3, ";S", ":[VCR]") or mbUnit(\3) or not spell(\3) >>> - <<- option("num") ->> =formatNumber(\2) + " " + \3 && Si ‹\3› est une unité de mesure, il manque un espace insécable. Si le nombre se rapporte au mot suivant, c’est aussi valable. + <<- option("num") ->> =formatNumber(\2, True) + " " + \3 && Si ‹\3› est une unité de mesure, il manque un espace insécable. Si le nombre se rapporte au mot suivant, c’est aussi valable. <<- __else__ ->> "\2 \3" && Si ‹\3› est une unité de mesure, il manque un espace insécable. Si le nombre se rapporte au mot suivant, c’est aussi valable. __[s]/unit(unit_nbsp_avant_unités3)__ ((\d+) )([a-zA-Zµ][a-zA-Z0-9Ωℓ⁰¹²³⁴⁵⁶⁷⁸⁹/·]*)(?![’']) @@0,0,$ <<- (\2.__len__() > 4 and not spell(\3)) or morph(\3, ";S", ":[VCR]") or mbUnit(\3) >>> - <<- option("num") ->> =formatNumber(\2) + " " + \3 && Si ‹\3› est une unité de mesure, il manque un espace insécable. Si le nombre se rapporte au mot suivant, c’est aussi valable. + <<- option("num") ->> =formatNumber(\2, True) + " " + \3 && Si ‹\3› est une unité de mesure, il manque un espace insécable. Si le nombre se rapporte au mot suivant, c’est aussi valable. <<- __else__ ->> "\2 \3" && Si ‹\3› est une unité de mesure, il manque un espace insécable. Si le nombre se rapporte au mot suivant, c’est aussi valable. TEST: Ça a duré {{3µs}} ->> 3 µs TEST: Ça a duré {{3,5 µs}} ->> 3,5 µs TEST: il y en a {{3 m²}} ->> 3 m² @@ -1138,10 +1138,11 @@ TEST: il en veut {{18kg}} ->> 18 kg TEST: il me le propose pour {{243 gCO2/kWh}} ->> 243 gCO2/kWh TEST: il me le propose pour {{243,4 gCO2/kWh}} ->> 243,4 gCO2/kWh TEST: {{40 MHz}} ->> 40 MHz TEST: {{100 Ah}} ->> 100 Ah +TEST: {{1001 ans}} ->> 1 001 ans TEST: en l’an 2000 Urgondorletroll eut une idée TEST: 1998 s’annonce grandiose. TEST: il y en a 3,43 milliards. TEST: je veux 200 euros. @@ -1305,19 +1306,18 @@ !! __[s]/num(num_grand_nombre_soudé)__ \d\d\d\d+ <<- not before("NF[  -]?(C|E|P|Q|X|Z|EN(?:[  -]ISO|)) *$") >>> - <<- \0.__len__() > 4 ->> =formatNumber(\0) && Formatage des grands nombres. - <<- __else__ - and ((after("^(?:,[0-9]+[⁰¹²³⁴⁵⁶⁷⁸⁹]?|[⁰¹²³⁴⁵⁶⁷⁸⁹])") and not (re.search("^[01]+$", \0) and after("^,[01]+\\b"))) + <<- ((after("^(?:,[0-9]+[⁰¹²³⁴⁵⁶⁷⁸⁹]?|[⁰¹²³⁴⁵⁶⁷⁸⁹])") and not (re.search("^[01]+$", \0) and after("^,[01]+\\b"))) or after("^[   ]*(?:[kcmµn]?(?:[slgJKΩ]|m[²³]?|Wh?|Hz|dB)|[%‰€$£¥Åℓhj]|min|°C|℃)(?![\\w’'])")) - ->> =formatNumber(\0) && Formatage des grands nombres. + ->> =formatNumber(\0, True) && Formatage des grands nombres. + <<- __else__ and \0.__len__() > 4 ->> =formatNumber(\0) && Formatage des grands nombres. __[s]/num(num_nombre_quatre_chiffres)__ (?> =formatNumber(\1) && Formatage des grands nombres. + <<- morph(\2, ";S", ":[VCR]") or mbUnit(\2) -1>> =formatNumber(\1, True) && Formatage des grands nombres. TEST: {{12345}} ->> 12 345 TEST: {{123456}} ->> 123 456 TEST: {{1234567}} ->> 1 234 567 TEST: {{12345678}} ->> 12 345 678 @@ -1326,10 +1326,11 @@ TEST: {{12345678901}} ->> 12 345 678 901 TEST: {{112798931830912839}} ->> 112 798 931 830 912 839 TEST: {{2308393909}} ->> 2 308 393 909|2308 393-909 TEST: {{2024}},9 ->> 2 024 TEST: {{4000}} Å ->> 4 000 +TEST: {{10010}} € ->> 10 010 TEST: {{3240}} µA ->> 3 240 TEST: 1111 0011,01 (binaire) __[s>(num_grand_nombre_avec_points)__ @@ -13228,12 +13229,12 @@ <<- /conf/ --1>> voix && Confusion. Pour évoquer un son humain, animal ou instrumental, écrivez “voix”.|https://fr.wiktionary.org/wiki/voix à [>voie|vois|voit] [basse|haute|basses|hautes] <<- /conf/ -2>> voix && Confusion. Pour évoquer un son humain, animal ou instrumental, écrivez “voix”.|https://fr.wiktionary.org/wiki/voix - [>entendre|>écouter|>déblayer] ?@:[WX]¿ $:D [>voie|vois|voit] - >donner ?@:[WX]¿ [de|d’] la >voie + [>entendre|>écouter] ?@:[WX]¿ $:D [>voie|vois|voit] + [>donner|>redonner] ?@:[WX]¿ [de|d’] la >voie >faire entendre [la|cette|ma|ta|sa|notre|nos|votre|vos|leur+s] [>voie|vois|voit] <<- /conf/ --1>> voix && Confusion. Pour évoquer un son humain, animal ou instrumental, écrivez “voix”.|https://fr.wiktionary.org/wiki/voix >avoir ?@:[WX]¿ [>voie|vois|voit] au chapitre <<- /conf/ --3>> voix && Confusion. Locution “avoir voix au chapitre”.|https://fr.wiktionary.org/wiki/avoir_voix_au_chapitre @@ -13243,11 +13244,11 @@ en ?[si|très|trop]¿ [bonne|mauvaise] [voix|vois|voit] [du|au|le] long [de|d’] la [voix|vois|voit] <<- /conf/ --1>> voie && Confusion. La voix est un son humain, animal ou instrumental. Pour évoquer un chemin, écrivez “voie”.|https://fr.wiktionary.org/wiki/voie [>avancer|>cheminer|>marcher|>courir] ?@:[WX]¿ sur [la|cette|une|quelle] voix - [>emprunter|>indiquer|>montrer|>parcourir] ?@:[WX]¿ [la|cette|une|quelle] voix + [>déblayer|>emprunter|>indiquer|>montrer|>parcourir] ?@:[WX]¿ [la|cette|une|quelle] voix <<- /conf/ --1>> voie && Confusion. La voix est un son humain, animal ou instrumental. Pour évoquer un chemin, écrivez “voie”.|https://fr.wiktionary.org/wiki/voie >ouvrir ?@:[WX]¿ la voix [à|au|aux||,] <<- /conf/ --2>> voie && Confusion. La voix est un son humain, animal ou instrumental. Pour évoquer un chemin, écrivez “voie”.|https://fr.wiktionary.org/wiki/voie @@ -17422,10 +17423,11 @@ >erreur d’ [appréciation|interprétation|orthographe] >escalier [de|d’] secours >escroquerie à l’ assurance >espérance [de|d’] vie >espérance [de|d’] vie en bonne santé + >essence [de|d’] térébenthine >état [de|d’] [âme|conservation|esprit|fait|service|urgence] >état d’ extrême urgence >état [de|d’] l’ art >étoile [de|d’] mer >étoile à neutrons