Skip to content

JS converter to Chordpro#18

Closed
oliverpool wants to merge 26 commits into
masterfrom
chordpro_js
Closed

JS converter to Chordpro#18
oliverpool wants to merge 26 commits into
masterfrom
chordpro_js

Conversation

@oliverpool
Copy link
Copy Markdown

Comme mentionné dans #17, j'ai développé un convertisseur LaTeX > Chordpro en JavaScript.
Le but initial étant de permettre aux utilisateurs du site de convertir leurs chansons depuis le navigateur.

Il s'avère que j'en ai profité pour tester ce convertisseur sur tous les chants de Patadata!
Désormais, tous les chants sont "convertissables" (en théorie il ne reste plus de caractères LaTeX).

J'ai du corrigé des chants qui avaient manifestement des erreurs de syntaxe.

Il reste des décisions à prendre concernant la pérennité de commandes utilisées en LaTeX et qui ne sont pas supportées par ChordPro (je compte ouvrir une autre issue à ce sujet).

Il me reste à faire un système d'enregistrement du fichier converti puis un commit velu...

@oliverpool
Copy link
Copy Markdown
Author

Voici donc patadata converti via JavaScript.

J'ai "corrigé" quelques fichier LaTeX qui faisaient planter mon script (la plupart du temps, des caractères inconsistants).
Les nouveaux fichiers (.sgc) sont tous lisibles par le "ChordPro-editor" (ie j'ai vérifié la cohérence du résultat).

Le script de migration que j'ai développé est très sale, mais si vous insistez, je peux le nettoyer et le mettre en ligne :-)

@oliverpool
Copy link
Copy Markdown
Author

J'ai corrigé mon script pour que plus de notations soient supportées.

Les seule données désormais "perdues" par la transition sont:

  • les commande \if & co (mais le contenu des blocks est préservé)
  • les blocks de tablatures (concerne garfunkel_and_oates\fuck_you.sg & the_calling\wherever_you_will_go.sg)

Tous les chants sont en tous les cas affichables par le parseur ChordPro écrit en JavaScript

@Luthaf
Copy link
Copy Markdown
Contributor

Luthaf commented Aug 19, 2015

Superbe !

les commande \if & co (mais le contenu des blocks est préservé)

C'est dommage de laisser le contenu des blocs tel quel. Il vaudrait mieux supprimer complètement les \if ici.

@oliverpool
Copy link
Copy Markdown
Author

C'est dommage de laisser le contenu des blocs tel quel. Il vaudrait mieux supprimer complètement les \if ici.

Cela risque de faire pas mal de pertes:

  \ifchorded
  \begin{verse*}
    \musicnote{\Intro: {\nolyrics \[Am F Am F]}}
  \end{verse*}
  \fi

Dans ce cas (tiré de bob_dylan\hurricane.sg), mon script gardera le verse* et son contenu.

@Luthaf
Copy link
Copy Markdown
Contributor

Luthaf commented Aug 19, 2015

Cela risque de faire pas mal de pertes

Je parlais de supprimer les if, pas le contenu ! Ici, par exemple, on peut transformer ça sans trop de perte de sens en

\musicnote{\Intro: {\nolyrics \[Am F Am F]}}

@oliverpool
Copy link
Copy Markdown
Author

C'est exactement ce que fait le script.

Je me suis mal exprimé, je considère la situation suivante:

\ifcondition
block
\fi

=> mon script garde seulement la partie block.

Donc en fait on est d'accord :-)

@Luthaf
Copy link
Copy Markdown
Contributor

Luthaf commented Aug 24, 2015

Du coup faut-il que je modifie mon script pour les transformer en b ?
(et que j'en profite pour vérifier l'absence de & dans le reste du fichier)

Oui, je pense que c'est le mieux !

paternal referenced this pull request in patacrep/patacrep Aug 24, 2015
* Preparing for parsing of `{define: FOO}` statements
* Brackets can now contain several space-separated chords (as in `[A/A B#]`).
@paternal
Copy link
Copy Markdown
Contributor

Effectivement. Les accords devraient aussi être analysés dans les accolades. Je m'en occupe.

En fait, j'en suis maintenant moins sûr. Soyons honnête, une mauvaise raison pour cela, c'est que cela me complique pas mal la tâche dans l'analyseur syntaxique. Mais en y réfléchissant, analyser les accords partout, y compris dans les accolades voudrait dire que l'on peut avoir des accords dans un titre, par exemple. Et ça, c'est bizarre…

À votre avis, est-il nécessaire d'analyser les accords dans les accolades ?

Une des erreurs est probablement dûe à la présence de {repeat} dans un guitar_comment.

Même question ici. Une mauvaise raisons qui ne me donne pas vraiment envie d'implémenter cela est que ça complique un peu la tâche. Une bonne raison est que ça me paraît bizarre d'autoriser l'inclusion de directives dans des directives. On a déjà ajouté de nouvelles directives, mais ça, ça ne change pas grand'chose au langage. Par contre, autoriser l'inclusion de directives dans des directives, j'ai peur que ça nous fasse atteindre un nouveau niveau d'incompatibilité avec les autres logiciels manipulant du chordpro.

@Luthaf
Copy link
Copy Markdown
Contributor

Luthaf commented Aug 25, 2015

À votre avis, est-il nécessaire d'analyser les accords dans les accolades ?

Je pense que oui, le cas {guitar_comment: Intro : [Am][E7sus4][C7/6][E7sus4]} me parait être une utilisation légitime.

Par contre, autoriser l'inclusion de directives dans des directives, j'ai peur que ça nous fasse atteindre un nouveau niveau d'incompatibilité avec les autres logiciels manipulant du chordpro.

Ce n'est en effet pas nécessaire, mais je ne pense pas que nous ayons comme objectif d'être compatible avec les autres logiciels à 100%.

@paternal
Copy link
Copy Markdown
Contributor

La nuit porte conseil. Ce qu'on peut faire, c'est remplacer les directives par des blocs, c'est-à-dire remplacer :

{guitar_comment: Intro : [Am][E7sus4][C7/6][E7sus4] {repeat}}

par

{begin_guitar_comment}
Intro : [Am][E7sus4][C7/6][E7sus4] {repeat}
{end_guitar_comment}

Ça a l'avantage de me simplifier la vie pour l'analyse, et de faire clairement la différence entre les commandes dont il faut parser le contenu ({begin_*}FOO{end_*}) et celle dont il ne faut pas parser le contenu ({title: FOO}).

@oliverpool
Copy link
Copy Markdown
Author

Effectivement c'est une solution interessante, qui déplace le problème de compatibilité: au lieu de supporter guitar_comment d'une manière spéciale (elle est déjà utilisée) on implémente un autre balise.

Avec une analyse manuelle, il est sûrement possible de s'en débarasser au profit de bridge ou autre (en laissant au compilateur le soin de ne pas l'inclure, si il y a seulement des accords)

@Luthaf
Copy link
Copy Markdown
Contributor

Luthaf commented Aug 28, 2015

Pour les * et +, est-ce que c'est des erreurs de patadata, ou il faut les autoriser dans les accords ?

On avait oublié de répondre à ça ... Le + n'est pas une erreur, c'est une manière de noter les accords augmentés. * a été utilisé par @oliverpool lorsque deux accords avec le même nom mais un doigté différent apparaissaient dans une chanson (ici)

@oliverpool
Copy link
Copy Markdown
Author

* a été utilisé par @oliverpool lorsque deux accords avec le même nom mais un doigté différent apparaissaient dans une chanson

Il me semble l'avoir vu utilisé ailleurs (et donc bêtement repris l'idée)

paternal pushed a commit to patacrep/patacrep that referenced this pull request Sep 2, 2015
@paternal
Copy link
Copy Markdown
Contributor

paternal commented Sep 2, 2015

C'est bon pour * et + dans les accords.

@oliverpool
Copy link
Copy Markdown
Author

Pour revenir aux comment & guitar_comment, je pense qu'il n'y a que les {repeat: 4} qui peuvent être inclus, non ?
(le reste: partition, echo, transposition)

Soit on les autorise de manière exceptionnelle (ie c'est le seul 'bloc' autorisé), soit on les remplace par autre chose (x4 par exemple) [je suis plus pour la première proposition]

Je suis pour autoriser les accords dans tous les blocs

@paternal
Copy link
Copy Markdown
Contributor

paternal commented Sep 2, 2015

Est-ce que vous savez comment fonctionnent les autres logiciels ? Autorisent-ils les directives et accords dans les directives comment et cie. ?

@Luthaf
Copy link
Copy Markdown
Contributor

Luthaf commented Sep 2, 2015

Pas la moindre idée. Je pense que l'on peut autoriser les accords et interdire les directives, ça me semble être raisonable.

@paternal
Copy link
Copy Markdown
Contributor

paternal commented Sep 2, 2015

Autoriser les commentaires et les accords dans les directives comment ne me semble pas trivial (j'ai déjà essayé). Je viens de faire des tests, et ni Chord4, ni Songsheet Generator, ni Web chord ne permettent de faire ça. Ce sont plutôt des arguments en ma faveur.

Ce qu'on pourrait faire plus simplement, c'est laisser la directive {comment: FOO} telle quelle, sans rendre accords et directives, et ajouter un nouveau bloc {start_of_comment}FOO{end_of_comment}, qui lui rendrait les accords (idem pour guitar_comment). Ça vous convient ?

[HS]Pour info, je suis bientôt papa, et mon congé paternité se terminera mi-septembre, donc j'aurais bientôt bien moins de temps à passer sur patacrep.[/HS]

@Luthaf
Copy link
Copy Markdown
Contributor

Luthaf commented Sep 2, 2015

Ce qu'on pourrait faire plus simplement, c'est laisser la directive {comment: FOO} telle quelle, sans rendre accords et directives, et ajouter un nouveau bloc {start_of_comment}FOO{end_of_comment}, qui lui rendrait les accords (idem pour guitar_comment). Ça vous convient ?

Pourquoi pas !

Pour info, je suis bientôt papa, et mon congé paternité se terminera mi-septembre, donc j'aurais bientôt bien moins de temps à passer sur patacrep.

Félicitations !

@oliverpool
Copy link
Copy Markdown
Author

Ça vous convient ?

Ca me convient aussi!

Pour info, je suis bientôt papa, et mon congé paternité se terminera mi-septembre, donc j'aurais bientôt bien moins de temps à passer sur patacrep.

Herzlichen Glückwunsch!

@oliverpool
Copy link
Copy Markdown
Author

Après réflexion, je pense que c'est trop de travail pour un gain discutable que d'essayer de tout convertir (le seul véritable intérêt serait pour patanet). Je clôture donc cette PR.

@oliverpool oliverpool closed this Jun 9, 2016
This was referenced Jun 9, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants