Bug #29183
lors de la transformation d'un texte en HTML, M. devient "une ligne qui commence par 13"
0%
Description
Parce que quand mail_body est
\nM. Foobar\non a génération de
\n<ol class="upperalpha simple" start="13">\n<li>Foobar</li>\n</ol>\n
Fichiers
Révisions associées
Historique
Mis à jour par Thomas Noël il y a plus de 5 ans
C'est certainement lié à la gestion des http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#enumerated-lists qu'il faudrait sans doute désactiver... mais comment ?
Mis à jour par Frédéric Péters il y a plus de 5 ans
En monkeypatchant l'affaire, pour modifier
enum.sequencepats = {'arabic': '[0-9]+', 'loweralpha': '[a-z]', 'upperalpha': '[A-Z]', 'lowerroman': '[ivxlcdm]+', 'upperroman': '[IVXLCDM]+',}
Pour y avoir plutôt [A-LN-Z], genre.
(mais il y a quantité de niveaux d'indirection dans docutils pour compliquer l'affaire)
Mis à jour par Thomas Noël il y a plus de 5 ans
Je cherche pour l'instant à désactiver complètement le mécanisme qui, à mon sens, n'a aucun intérêt pour nous. Mais je ne trouve pas.
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
enum.sequencepats = {'dsfsdjf': 'oijewroijeoirjewoirj'}
?
Mis à jour par Frédéric Péters il y a plus de 5 ans
Je cherche pour l'instant à désactiver complètement le mécanisme qui, à mon sens, n'a aucun intérêt pour nous. Mais je ne trouve pas.
&
enum.sequencepats = {'dsfsdjf': 'oijewroijeoirjewoirj'} ?
Sauf qu'il y a bien quelque part un workflow qui attend que des listes soient correctement créées.
(et le truc compliqué c'est trouver comment arriver à patcher cette variable au milieu des indirections de docutils).
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
Pour aller au plus simple on pourrait juste dire à Fondettes de mettre un backslash devant le nom de la personne comme indiqué dans la doc1.
1 http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#enumerated-lists
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Fichier 0001-misc-only-let-rst-consider-arabic-sequences-29183.patch 0001-misc-only-let-rst-consider-arabic-sequences-29183.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Patch pour considérer uniquement les séquences utilisant des chiffres arabes.
Mis à jour par Thomas Noël il y a plus de 5 ans
Un test rapide et ça semble pas fonctionner :
@pytest.mark.skipif('docutils is None') def test_email_with_enumeration(emails): pub = create_temporary_pub() pub.cfg['emails'] = {'footer': 'Footer\nText'} mail_body = ''' A. FooAlpha1 B. FooAlpha2 1. Num1 2. Num2 M. Francis Kuntz #. One #. Two ''' send_email('test', mail_body=mail_body, email_rcpt='test@localhost') assert emails.count() == 1 assert emails.emails['test']['msg'].is_multipart() assert emails.emails['test']['msg'].get_content_subtype() == 'alternative' assert emails.emails['test']['msg'].get_payload()[0].get_content_type() == 'text/plain' assert emails.emails['test']['msg'].get_payload()[1].get_content_type() == 'text/html' text = emails.emails['test']['msg'].get_payload()[0].get_payload() html = emails.emails['test']['msg'].get_payload()[1].get_payload() assert '\n A. FooAlpha1\n B. FooAlpha2\n' in text assert '\n M. Francis Kuntz\n' in text assert '"upperalpha simple">\n<li>FooAlpha1</li>\n<li>FooAlpha2</li>' in html assert 'M. Francis Kuntz' in html
donne
> assert 'M. Francis Kuntz' in html E assert 'M. Francis Kuntz' in '<!DOCTYPE html>\n<html xmlns=3D"http://www.w3.org/1999/xhtml">\n<head>\n <meta charset=3D"utf-8">\n</head>\n<body>\n...r: #888; margin-top: 2em;">\n <p>Footer<br />Text</p>\n </div>\n =\n\n =\n\n </div>\n</body>\n</html>\n'
parce html est :
<blockquote> <ol class=3D"upperalpha simple"> <li>FooAlpha1</li> <li>FooAlpha2</li> </ol> <ol class=3D"arabic simple"> <li>Num1</li> <li>Num2</li> </ol> <ol class=3D"upperalpha simple" start=3D"13"> <li>Francis Kuntz</li> <li>One</li> <li>Two</li> </ol> </blockquote> </div>
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Solution proposée à En cours
- Patch proposed changé de Oui à Non
Chez moi ça marchait (évidemment) dans un rapide test, j'ai peut-être zappé des trucs, je vais ajouter ton test (merci) pour assurer ça.
Mis à jour par Frédéric Péters il y a plus de 5 ans
Mais en fait le test sort de la zone attendue,
mail_body = ''' M. Francis Kuntz ''' send_email('test', mail_body=mail_body, email_rcpt='test@localhost') assert emails.count() == 1 assert emails.emails['test']['msg'].is_multipart() assert emails.emails['test']['msg'].get_content_subtype() == 'alternative' assert emails.emails['test']['msg'].get_payload()[0].get_content_type() == 'text/plain' assert emails.emails['test']['msg'].get_payload()[1].get_content_type() == 'text/html' text = emails.emails['test']['msg'].get_payload()[0].get_payload() html = emails.emails['test']['msg'].get_payload()[1].get_payload() assert 'M. Francis Kuntz\n' in text assert 'M. Francis Kuntz' in html
passe.
Là, avec les espaces posés en début de ligne, ça bascule dans le mode "blockquote", avec sans doute d'autres trucs à attraper :/
Mis à jour par Frédéric Péters il y a plus de 5 ans
assert '"upperalpha simple">\n<li>FooAlpha1</li>\n<li>FooAlpha2</li>' in html
Le patch, dans son intention, doit totalement désactiver ce type de liste.
Et #. One
c'est du markdown qui vient s'ajouter dans l'histoire, quel résultat attendu ?
Bref je serais pour que le test vérifie que 1./2. produit bien une liste <ol>, et que le reste n'en produit pas.
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Fichier 0001-misc-only-let-rst-consider-arabic-sequences-29183.patch 0001-misc-only-let-rst-consider-arabic-sequences-29183.patch ajouté
- Statut changé de En cours à Solution proposée
- Patch proposed changé de Non à Oui
Patch qui reprend le test, modifié pour correspondre à ce que j'attends.
Le comportement à l'intérieur des blockquotes n'est pas altéré parce que trop intrusif dans docutils d'aller chercher les NestedStateMachine et traffiquer etc. (si quelqu'un trouve intéressant d'y passer ses vacances, je prendrai bien sûr un patch).
Mis à jour par Thomas Noël il y a plus de 5 ans
Frédéric Péters a écrit :
assert '"upperalpha simple">\n<li>FooAlpha1</li>\n<li>FooAlpha2</li>' in html
Le patch, dans son intention, doit totalement désactiver ce type de liste.
Ouaip, j'avoue que c'est un test que j'ai écrit hier soir en cherchant à gérer juste le "M.".
Et
#. One
c'est du markdown qui vient s'ajouter dans l'histoire, quel résultat attendu ?
Ca marche en fait, dans docutils, de faire un début de liste puis la suite avec « #. ».
Bref je serais pour que le test vérifie que 1./2. produit bien une liste <ol>, et que le reste n'en produit pas.
Yep yep. Mon test était pas exactement pour ton code, sorry.
Mis à jour par Thomas Noël il y a plus de 5 ans
- Statut changé de Solution proposée à Solution validée
Impec, bravo.
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit bb926723c9fd0731416d5ed58f0d7ecb275e2ad5 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Wed Dec 19 09:03:15 2018 +0100 misc: only let rst consider arabic sequences (#29183)
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
misc: only let rst consider arabic sequences (#29183)