Format de saisie
Comme nous l'avons dit plus tôt, le format idéal pour un système de gravure musicale est le contenu : la musique elle-même. Cela pose un énorme problème : comment définir ce qu'est la musique ? Pour résoudre ce problème, nous l'avons inversé. Au lieu de définir ce qu'est la musique, notre programme sert de définition : nous avons écrit un programme capable de produire des partitions, et avons ajusté son format de saisie pour être aussi léger que possible. Lorsque le format ne peut plus être simplifié, nous avons par définition atteint le contenu même.
La syntaxe est également celle de l'interface utilisateur de LilyPond, puisqu'elle peut être facilement tapée au clavier :
c'4 d'8sont un do noire et un ré croche, comme dans cet exemple :
À petite échelle, une telle syntaxe est pratique. À plus grande échelle, une structuration est nécessaire. Sans cela, comment saisir des pièces aussi complexes qu'un opéra ou une symphonie ? La structure est construite selon le même concept que les expressions musicales : c'est en combinant de petits fragments qu'une musique plus complexe peut être représentée. Par exemple :
| c4 |
|
Combinez ceci simultanément avec deux autres notes, en les insérant entre << et >> :
<<c4 d4 e4>> |
|
{ <<c4 d4 e4>> f4 }
|
|
<< { <<c4 d4 e4>> f4 } g2 >>
|
|
De telles structures récursives peuvent être définies formellement et de manière ordonnée avec une grammaire libre de tout contexte. Le code d'analyse de la saisie est également généré depuis cette grammaire. Autrement dit, la définition de la syntaxe de LilyPond est claire et sans ambiguïté.
Ce sont la syntaxe et l'interface qui concernent les utilisateurs. Elles sont sujettes à discussion, puisque relatives aux goûts de chacun. Bien que ces discussions soient intéressantes, elles ne sont pas productives. À l'échelle de LilyPond, l'importance du format de saisie est minime : inventer une syntaxe claire est bien plus facile qu'écrire un code de mise en page décent. Ceci est d'ailleurs illustré par le nombre de lignes de code de ces composants respectifs : l'analyse du texte de saisie et sa représentation pèsent moins de 10% du code.
| Analyse et représentation | Total |
|---|---|
| 6000 lignes en C++ | 61500 lignes en C++ |
Suite : Pour finir, la conclusion.