Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problème d'encodage des templates #62

Closed
paternal opened this issue Sep 5, 2014 · 4 comments
Closed

Problème d'encodage des templates #62

paternal opened this issue Sep 5, 2014 · 4 comments
Assignees
Labels
Milestone

Comments

@paternal
Copy link
Contributor

paternal commented Sep 5, 2014

Et oui, encore…

La gestion des encodage avait été globalement améliorée avec #54 : toutes les chaînes de caractères lues depuis l'extérieur sont converties en utf8, et le cœur du songbook ne manipule que le l'utf8. Ceci était fait avec la fonction open_read(), qui devine l'encodage d'un fichier avant de l'ouvrir.

Le problème avec cette fonction (qui s'appuie sur chardet) est que le fichier default.tex, qui contient un accent (dans l'auteur par défaut en français) est interprété comme étant en codé en ISO-8859-2 (alors que c'est de l'utf8). Résultat : les auteurs deviennent L’ AŠquipe Patacrep.

Dans la mesure où la ligne \usepackage[utf8]{inputenc} apparait dans le premier template, on peut considérer que tous les templates sont en utf8, et les ouvrir comme tels.

En analysant ce bug, je me rend compte que le paquet LaTeX inputenc est chargé avec l'option utf8, ce qui veut dire que nous imposons que tous les fichiers LaTeX (templates, chansons, et autres) sont en utf8. Je ne sais pas si c'est bien.

  • Si c'est bien, il faut :
    • modifier la documentation pour le dire ;
    • s'assurer que le ficher LaTeX créé et compilé le soit en utf8 (je ne sais pas si c'est déjà le cas) ;
    • ouvrir les bons fichiers en utf8.
  • Si ça n'est pas bien, il faut :
    • supprimer l'import de ce paquet ;
    • ajouter une option pour que l'utilisateur choisisse son encodage.

Je pense à ajouter une option encoding aux fichiers.sg, par défaut en utf8, qui définit à la fois avec quel encodage il faut ouvrir les fichiers (sachant que les fichiers que nous fournissons sont toujours ouverts en utf8), quelle option du paquet inputenc charger, et donc quel encodage utiliser pour écrire le fichier LaTeX.

Qu'en pensez vous ?

@paternal paternal added the bug label Sep 5, 2014
@paternal paternal added this to the 4.0 milestone Sep 5, 2014
@Luthaf
Copy link
Contributor

Luthaf commented Sep 5, 2014

Qu'en pensez vous ?

J'en pense que c'est bien, et qu'il faut garder de l'UTF8 partout où c'est possible. J'ai déjà eu ce problème, où les fichiers avec un seul accent ne sont pas reconnus comme étant de l'UTF8.

modifier la documentation pour le dire ;

Ok, c'est à ajouter dans la section sur les templates.

s'assurer que le ficher LaTeX créé et compilé le soit en utf8 (je ne sais pas si c'est déjà le cas) ;

Normalement c'est bon pour la compilation (c'est justement ce que fait le package inputenc), et pour la création je crois. À vérifier.

ouvrir les bons fichiers en utf8.

Là c'est plus compliqué. On peut utiliser une ouverture par défaut de tous les fichiers de templates en UTF8, non ?

Sinon, je suis en train de me dire que la detection des encodages pourrait être une option des fichier .sb. Par défaut on ouvre tous les fichiers en UTF8, et si jamais on se prends une erreur ou si l'utilisateur le demande, on essaye de deviner, avec les problèmes que cela peut impliquer.

@paternal
Copy link
Contributor Author

paternal commented Sep 5, 2014

s'assurer que le ficher LaTeX créé et compilé le soit en utf8 (je ne sais pas si c'est déjà le cas) ;

Normalement c'est bon pour la compilation (c'est justement ce que fait le package inputenc), et pour la création je crois. À vérifier.

Effectivement

J'ai réfléchi un peu plus à tout ça en faisant ma soupe à la courgette.

Pour les fichiers de templates ou les fichiers .sb, qui sont lus par songbook et par personne d'autre, on pourrait imaginer un système comme python : par défaut, on fait comme on peut, mais si la première ligne du fichier est # -*- coding: utf-8 -*- (à adapter pour commencer par un caractère qui correspond à un commentaire dans le format du fichier correspondant), on utilise l'encodage correspondant. C'est une des solutions, et je pense que ce problème est facile.

Le problème plus difficile, c'est les fichiers LaTeX (enfin, .sg et .is). En effet, ils ne sont pas que lus par songbook, mais aussi par LaTeX (avec des \input). Donc si on ne fait rien par défaut, tous les fichiers doivent être dans le même encodage. On pourrait également dire que ces fichiers commencent avec une ligne qui précise l'encodage, et utiliser cette solution (non testé) pour gérer les encodages différents.

Du coup, avec cette solution, les chansons et intersong (songs/**.{sg,is}), les templates (templates/**tex), les fichiers songbook (*.sg) peuvent commencer par une ligne précisant l'encodage. Si ça n'est pas le cas, on essaye de le deviner (solution actuelle).
On peut avoir en plus une option dans les .sb qui définit un encodage, s'il est commun à tous les fichiers utilisés. Ça sera le cas pour patadata.

D'autres idées ? Des contre-indications ?

@Luthaf
Copy link
Contributor

Luthaf commented Sep 5, 2014

Une petite contre-indication : les fichiers JSON ne peuvent pas contenir d'autre chose que des données JSON. Mais on peut supprimer la ligne d'encodage après l'avoir lue, et avant de déchiffrer les données.

Sinon l'idée me paraît plutôt pas mal.

@Luthaf
Copy link
Contributor

Luthaf commented Nov 25, 2014

Partiellement résolu par #69

@Luthaf Luthaf closed this as completed Nov 25, 2014
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants