label_ponctuer() : espace en trop #4895

Closed
opened 2 years ago by tcharlss · 24 comments
tcharlss commented 2 years ago
Owner

Le filtre label_ponctuer() m'ajoute un espace en trop devant les 2 points :

[(#VAL{Mon champ}|label_ponctuer|var_dump)]
[(#VAL{Mon champ :}|label_ponctuer|var_dump)]

Retour :

string 'Mon champ  :' (length=15)
string 'Mon champ  :' (length=15)
Le filtre [label_ponctuer()](https://git.spip.net/spip/spip/src/branch/master/ecrire/inc/filtres.php#L5494-L5506) m'ajoute un espace en trop devant les 2 points : ``` [(#VAL{Mon champ}|label_ponctuer|var_dump)] [(#VAL{Mon champ :}|label_ponctuer|var_dump)] ``` Retour : ``` string 'Mon champ  :' (length=15) string 'Mon champ  :' (length=15) ```
tcharlss added the
filtres et balises
bug
labels 2 years ago
Owner

Ça vient de Salvatore ?

daee5e6

Ça vient de Salvatore ? daee5e6
b_b added this to the 4.0 milestone 2 years ago
Poster
Owner

Ah, salvatore qui ajouterait des espaces le coquinou ?

En anglais il y a également un espace en trop d'ailleurs, mais ça semble être la trad d'origine dans ce cas : https://trad.spip.net/tradlang_module/spip/tradlang/label_ponctuer-spip-en?id_tradlang=685749&retour=spip.php%3Fpage%3Dtraduction_recherche%26amp%3Brecherche%3D%2540label%2540%26amp%3Blang_string%255B%255D%3Den%26amp%3Bid_tradlang_module%3D74

edit : je viens de corriger du coup

Ah, salvatore qui ajouterait des espaces le coquinou ? En anglais il y a également un espace en trop d'ailleurs, mais ça semble être la trad d'origine dans ce cas : https://trad.spip.net/tradlang_module/spip/tradlang/label_ponctuer-spip-en?id_tradlang=685749&retour=spip.php%3Fpage%3Dtraduction_recherche%26amp%3Brecherche%3D%2540label%2540%26amp%3Blang_string%255B%255D%3Den%26amp%3Bid_tradlang_module%3D74 edit : je viens de corriger du coup
Owner

Careful car j’avais explicitement mis un espace insécable en français (très facile à faire en bépo ) ; attention donc à bien le conserver ; Cependant en anglais tu es sûr que l’espace est nécessaire ?

Wikipedia dit dans https://en.wikipedia.org/wiki/Colon_(punctuation)

Spacing
In print, a thin space was traditionally placed before a colon and a thick space after it. In modern English-language printing, no space is placed before a colon and a single space is placed after it. In French-language typing and printing, the traditional rules are preserved.

Careful car j’avais explicitement mis un espace insécable en français (très facile à faire en bépo ` `) ; attention donc à bien le conserver ; Cependant en anglais tu es sûr que l’espace est nécessaire ? Wikipedia dit dans https://en.wikipedia.org/wiki/Colon_(punctuation) > Spacing > In print, a thin space was traditionally placed before a colon and a thick space after it. In modern English-language printing, no space is placed before a colon and a single space is placed after it. In French-language typing and printing, the traditional rules are preserved.
Poster
Owner

Avant il y avait un espace insécable et un espace, j'ai retiré l'espace en trop mais oublié de laisser l'insécable.

J'ai remis l'insécable du coup.

Avant il y avait [un espace insécable *et* un espace](https://trad.spip.net/spip.php?page=traduction&etape=revision&id_objet=685749&objet=tradlang&id_version=2), j'ai retiré l'espace en trop mais oublié de laisser l'insécable. J'ai [remis](https://trad.spip.net/spip.php?page=traduction&etape=revision&id_objet=685749&objet=tradlang&id_version=4) l'insécable du coup.

Euh... en anglais pas d'espace (pas même insécable) avant les deux points :)
Confirmé par le lien donné par marcimat : "In modern English-language printing, no space is placed before a colon and a single space is placed after it"

Euh... en anglais pas d'espace (pas même insécable) avant les deux points :) Confirmé par le lien donné par marcimat : "In modern English-language printing, no space is placed before a colon and a single space is placed after it"
Poster
Owner

Je crois qu'on est tous d'accord pour dire qu'il ne faut pas d'espace en anglais, mais il reste la question de la non-sécabilité avant les deux points.

Du coup en anglais, à la place de l'espace insécable c'est un word-joiner qu'il faudrait ?

The word joiner does not produce any space and prohibits a line break at its position

Je crois qu'on est tous d'accord pour dire qu'il ne faut pas d'espace en anglais, mais il reste la question de la non-sécabilité avant les deux points. Du coup en anglais, à la place de l'espace insécable c'est un [word-joiner](https://en.wikipedia.org/wiki/Word_joiner) qu'il faudrait ? > The word joiner does not produce any space and prohibits a line break at its position
Owner

Bah non a priori : tu le colles au mot simplement. Les navigateurs ne doivent pas être si cons que ça tout de même. En tout cas dans ce textarea un : collé au mot va à la ligne avec le mot ! Heureusement :)

Bah non a priori : tu le colles au mot simplement. Les navigateurs ne doivent pas être si cons que ça tout de même. En tout cas dans ce textarea un `:` collé au mot va à la ligne avec le mot ! Heureusement :)
Poster
Owner

Heu.. Bah oui, ce que j'avais fait au tout début quoi :p

Bon bref, je re-re-corrige.

Heu.. Bah oui, ce que j'avais fait au tout début quoi :p Bon bref, je re-re-corrige.
Owner

Bah salvatore a remis l’espace… wtf !
https://git.spip.net/spip/spip/commit/3bade1a4

Bah salvatore a remis l’espace… wtf ! https://git.spip.net/spip/spip/commit/3bade1a4
Owner

Dans inc/salvatore.php de trad-lang, la fonction salvatore_nettoyer_chaine_langue execute typographie_fr_dist() sur la chaine de langue entrante.

Et typographie_fr se vautre sur l’espace insécable.

Dans le test suivant : le premier bonjour est avec un espace, le second avec un espace insécable :

$tests = [
    'bonjour :' => 'bonjour :',
    'bonjour :' => 'bonjour :',
];
$typo = charger_fonction('fr', 'typographie');

foreach ($tests as $in => $out) {
    $res = $typo($in);
    dump([
        'in' => $in, 
        'res' => $res, 
        'out' => $out
    ]);
}

Résultat :

^ array:3 [
  "in" => "bonjour :"
  "res" => "bonjour :"
  "out" => "bonjour :"
]

^ array:3 [
  "in" => "bonjour :"
  "res" => "bonjour  :"
  "out" => "bonjour :"
]

On voit que l’espace insécable n’est pas pris en compte par typographie_fr qui ajoute un  

Dans inc/salvatore.php de trad-lang, la fonction `salvatore_nettoyer_chaine_langue` execute `typographie_fr_dist()` sur la chaine de langue entrante. - https://git.spip.net/spip-contrib-extensions/trad-lang/src/branch/master/inc/salvatore.php#L557 - https://git.spip.net/spip/spip/src/branch/master/ecrire/typographie/fr.php#L19 Et typographie_fr se vautre sur l’espace insécable. Dans le test suivant : le premier bonjour est avec un espace, le second avec un espace insécable : ```php $tests = [ 'bonjour :' => 'bonjour :', 'bonjour :' => 'bonjour :', ]; $typo = charger_fonction('fr', 'typographie'); foreach ($tests as $in => $out) { $res = $typo($in); dump([ 'in' => $in, 'res' => $res, 'out' => $out ]); } ``` Résultat : ```php ^ array:3 [▼ "in" => "bonjour :" "res" => "bonjour :" "out" => "bonjour :" ] ^ array:3 [▼ "in" => "bonjour :" "res" => "bonjour  :" "out" => "bonjour :" ] ``` On voit que l’espace insécable n’est pas pris en compte par typographie_fr qui ajoute un ` `
Owner

C’est la ligne 67 de typographie_fr() de textwheel qui fait cela : https://git.spip.net/spip/textwheel/src/branch/master/typographie/fr.php#L67
Le remplacement après est bonjour ~:

Qui correspond à la ligne 52 sur typographie_fr_dist() de spip https://git.spip.net/spip/spip/src/branch/master/ecrire/typographie/fr.php#L52

C’est la ligne 67 de typographie_fr() de textwheel qui fait cela : https://git.spip.net/spip/textwheel/src/branch/master/typographie/fr.php#L67 Le remplacement après est `bonjour ~:` Qui correspond à la ligne 52 sur typographie_fr_dist() de spip https://git.spip.net/spip/spip/src/branch/master/ecrire/typographie/fr.php#L52
Owner

Il y a le remplacement de l’espace insécable (équivalent à  ) par ~ puis par   dans textwheel.

Sauf que moi j’ajoute qui est https://www.fileformat.info/info/unicode/char/202f/index.htm (équivalent à &nnbsp;) et il n’est pas traité de la sorte.

Or wikipédia dit : https://fr.wikipedia.org/wiki/Espace_ins%C3%A9cable

Le code typographique français recommande d'insérer une espace fine insécable devant les signes de ponctuation haute (composés d'un point sous un autre signe) : point-virgule, point d'interrogation et point d'exclamation, ainsi que comme séparateur de milliers, entre un nombre et son unité, et comme séparateur sans valeur facilitant la lecture des numéros de téléphone ou des numéros et codes d'identification, etc. Certains symboles, à l'instar des unités, sont également précédés d'une espace insécable (étroite), comme %, et les symboles monétaires comme € ; d'autres, comme le symbole degré, font figure d'exception et sont accolés.

Le deux-points et les guillemets en chevrons constituent une exception en ce que le code typographique français recommande d'insérer devant le deux-points, ou entre les guillemets et le texte qu'ils renferment, non une espace fine insécable mais une espace insécable (espace-mot insécable).

Voir également : https://fr.wikipedia.org/wiki/Espace_fine_ins%C3%A9cable

Il faudrait donc, si on suit les recommendations :

  • une espace fine insécable (&nnbsp;) avant "!?;", mais
  • une espace insécable ( ) avant ":"
Il y a le remplacement de l’espace insécable (équivalent à ` `) par `~` puis par ` ` dans textwheel. Sauf que moi j’ajoute ` ` qui est https://www.fileformat.info/info/unicode/char/202f/index.htm (équivalent à `&nnbsp;`) et il n’est pas traité de la sorte. Or wikipédia dit : https://fr.wikipedia.org/wiki/Espace_ins%C3%A9cable > Le code typographique français recommande d'insérer une espace fine insécable devant les signes de ponctuation haute (composés d'un point sous un autre signe) : point-virgule, point d'interrogation et point d'exclamation, ainsi que comme séparateur de milliers, entre un nombre et son unité, et comme séparateur sans valeur facilitant la lecture des numéros de téléphone ou des numéros et codes d'identification, etc. Certains symboles, à l'instar des unités, sont également précédés d'une espace insécable (étroite), comme %, et les symboles monétaires comme € ; d'autres, comme le symbole degré, font figure d'exception et sont accolés. > Le deux-points et les guillemets en chevrons constituent une exception en ce que le code typographique français recommande d'insérer devant le deux-points, ou entre les guillemets et le texte qu'ils renferment, non une espace fine insécable mais une espace insécable (espace-mot insécable). Voir également : https://fr.wikipedia.org/wiki/Espace_fine_ins%C3%A9cable Il faudrait donc, si on suit les recommendations : - une espace fine insécable (&nnbsp;) avant "!?;", mais - une espace insécable ( ) avant ":"
Owner

Bon, j’en suis que je suis bien ennuyé avec ça

Notamment je ne comprends pas s’il y a des différences fondamentales entre le core et Textwheel (TW), soit dans le fichiers

L’histoire remonte à https://github.com/Cerdic/textwheel/ qui a modifié le code original pour l’accélérer.

Depuis les 2 ont semble t’il un code qui fait peu ou prou la même chose, mais différent dans l’écriture (celui du core serait donc plus lent que celui de TW).

Je me demande si l’on ne pourrait pas recopier le typographie/fr.php de TW pour le mettre dans le core ?

(ou de l’enlever de textwheel finalement pour éviter d’avoir 2 fois la même chose ? mais TW serait moins «indépendant» du coup ?)

Parce que là, trouver une solution pour les 2 en même temps, c’est pas très pratique.

Bon, j’en suis que je suis bien ennuyé avec ça Notamment je ne comprends pas s’il y a des différences fondamentales entre le core et Textwheel (TW), soit dans le fichiers - ecrire/typographie/fr.php (typographie_fr_dist) https://git.spip.net/spip/spip/src/branch/master/ecrire/typographie/fr.php et - plugins-dist/textwheel/typographie/fr.php (typographie_fr) https://git.spip.net/spip/textwheel/src/branch/master/typographie/fr.php L’histoire remonte à https://github.com/Cerdic/textwheel/ qui a modifié le code original pour l’accélérer. Depuis les 2 ont semble t’il un code qui fait peu ou prou la même chose, mais différent dans l’écriture (celui du core serait donc plus lent que celui de TW). Je me demande si l’on ne pourrait pas recopier le typographie/fr.php de TW pour le mettre dans le core ? (ou de l’enlever de textwheel finalement pour éviter d’avoir 2 fois la même chose ? mais TW serait moins «indépendant» du coup ?) Parce que là, trouver une solution pour les 2 en même temps, c’est pas très pratique.
b_b commented 1 year ago
Owner

mais TW serait moins «indépendant»

Franchement, l'indépendance de TW ne devrait pas nous bloquer là dessus, je ne suis pas certain que son utilisation en tant que lib dans autre chose SPIP ait été "un succès".

> mais TW serait moins «indépendant» Franchement, l'indépendance de TW ne devrait pas nous bloquer là dessus, je ne suis pas certain que son utilisation en tant que lib dans autre chose SPIP ait été "un succès".
Owner

+1 en vrai TW n'est utilisé que dans SPIP : arrêtons les doublons

+1 en vrai TW n'est utilisé *que* dans SPIP : arrêtons les doublons
Eric commented 1 year ago
Owner

+1, je pense que Textwheel n'est utilisé que pour SPIP. Si on peut éviter les doublons allons y. En plus, on a supprimé la dépendance de TW à YAML en 4.0, tout ça me parait plus sain.

+1, je pense que Textwheel n'est utilisé que pour SPIP. Si on peut éviter les doublons allons y. En plus, on a supprimé la dépendance de TW à YAML en 4.0, tout ça me parait plus sain.
Owner

Vous savez que je ne parle que du répertoire typographie/ hein…

Vous savez que je ne parle que du répertoire typographie/ hein…
Eric commented 1 year ago
Owner

Ah oui, en effet...

Ah oui, en effet...
Owner

Je m’égare, mais quelques notes sur d’autres outils typo (chez les autres donc)

Notons que textwheel est référencé dans le readme de Jolitypo (avec d’autres alternatives — avec parmi les remarques que ça utilise des regexp).
JoliTypo est semble t’il le projet le plus propre actuellement.

Je m’égare, mais quelques notes sur d’autres outils typo (chez les autres donc) - https://github.com/jolicode/JoliTypo : https://github.com/jolicode/JoliTypo/blob/master/src/JoliTypo/Fixer/FrenchNoBreakSpace.php (entre autres pour fr_FR) - https://github.com/mundschenk-at/php-typography : https://github.com/mundschenk-at/php-typography/blob/master/src/fixes/node-fixes/class-french-punctuation-spacing-fix.php (entre autres pour fr) - https://github.com/wcactus/typographru : https://github.com/wcactus/typographru/blob/master/src/UnicodeProcessor.php (typo du russe) Notons que textwheel est référencé dans le readme de Jolitypo (avec d’autres alternatives — avec parmi les remarques que ça utilise des regexp). JoliTypo est semble t’il le projet le plus propre actuellement.
Owner

@marcimat si tu penses que c'est aller un peu au-delà par rapport à ici, je suppose que ce ticket déjà existant devrait t'intéresser :p
#3324

Où je t'invite donc à y reporter tes recherches, qui là y seront totalement à leur place. :)

@marcimat si tu penses que c'est aller un peu au-delà par rapport à ici, je suppose que ce ticket déjà existant devrait t'intéresser :p https://git.spip.net/spip/spip/issues/3324 Où je t'invite donc à y reporter tes recherches, qui là y seront totalement à leur place. :)
Owner

Un point sur ce ticket :

  • je n’ai pas trouvé pour corriger le code alambiqué de typographie_fr pour gérer correctement cette histoire d’espace insécable s’il est déjà présent,
  • par ailleurs, SPIP colle un espace insécable au lieu d’un espace fine insécable devant ?, ! ou ;, ce qui n’est pas très pro du coup.

Une hack temporaire serait de commiter 'label_ponctuer' => '@label@ :',, en entité html plutôt qu’en utf-8 : il semblerait que ça fonctionne (typo() n’y touche pas et donc salvatore devrait ne pas y toucher…


Mais plus généralement, c’est la micro-typographie (et son code) de SPIP qui me semble peu intuitive et fausse qui plus est qui me semble à reprendre.

Je vais commenter l’autre ticket à ce propos #3324.

Un point sur ce ticket : - je n’ai pas trouvé pour corriger le code alambiqué de typographie_fr pour gérer correctement cette histoire d’espace insécable s’il est déjà présent, - par ailleurs, SPIP colle un espace insécable au lieu d’un espace fine insécable devant `?`, `!` ou `;`, ce qui n’est pas très pro du coup. Une hack temporaire serait de commiter `'label_ponctuer' => '@label@ :',`, en entité html plutôt qu’en utf-8 : il semblerait que ça fonctionne (typo() n’y touche pas et donc salvatore devrait ne pas y toucher… ---- Mais plus généralement, c’est la micro-typographie (et son code) de SPIP qui me semble peu intuitive et fausse qui plus est qui me semble à reprendre. Je vais commenter l’autre ticket à ce propos #3324.
Owner

https://git.spip.net/spip/spip/commit/908582c24

Donc, il a modifié le   par un espace normal le salvatore…
Allez, on va dire que c’est mieux que 2 espaces :p

https://git.spip.net/spip/spip/commit/908582c24 Donc, il a modifié le ` ` par un espace normal le salvatore… Allez, on va dire que c’est mieux que 2 espaces :p
b_b commented 1 year ago
Owner

Ça m'a l'air d'avoir été intégré, cf https://git.spip.net/spip/spip/commits/branch/master/search?q=4895

Par contre, pas reporté en 4.0...

On peut fermer ?

Ça m'a l'air d'avoir été intégré, cf https://git.spip.net/spip/spip/commits/branch/master/search?q=4895 Par contre, pas reporté en 4.0... On peut fermer ?
Owner

Si si, via un report de tout Salvatore.
Mais le   a été retransformé en espace normal par celui-là même dans la source. Mais bon, c’est mieux déjà.

Si si, via un report de tout Salvatore. Mais le ` ` a été retransformé en espace normal par celui-là même dans la source. Mais bon, c’est mieux déjà.
marcimat closed this issue 1 year ago
Sign in to join this conversation.
No Milestone
No project
No Assignees
6 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.