3.4.4 Caractères spéciaux
Codage du texte | ||
Unicode | ||
Équivalents ASCII |
[ << Généralités en matière d'entrée et sortie ] | [Racine][Table des matières][Index] | [ Gestion de l'espace >> ] |
[ < Caractères spéciaux ] | [Plus haut: Caractères spéciaux ] | [ Unicode > ] |
Codage du texte
LilyPond utilise le jeu de caractères défini par le consortium Unicode et la norme ISO/CEI 10646. Chaque caractère est identifié par un nom unique et associé à un point de code, ce qui permet dans l’absolu de couvrir tous les langages. Unicode permet de coder tous les caractères utilisés par toutes les langues écrites du monde. LilyPond utilise le codage UTF-8 (UTF pour Unicode Transformation Format) qui permet de représenter les caractères latins sur un octet et les autres sur une longueur allant jusqu’à quatre octets.
L’apparence réelle des caractères est déterminée par les glyphes ou graphèmes tels que définis dans les différentes polices disponibles. Une police, ou une fonte, définit la mise en correspondance d’un sous-ensemble de points de code unicode en glyphes. LilyPond recourt à la bibliothèque Pango pour assurer le rendu des textes multilingues.
LilyPond n’effectue aucune conversion d’encodage que ce soit. Ceci implique donc que tout texte – un titre, des paroles ou même une instruction musicale – comportant des caractères non ASCII soit codé en UTF-8. Le plus sûr moyen de saisir du texte de la sorte consiste à utiliser un éditeur supportant l’unicode et à enregistrer vos fichier en UTF-8. C’est le cas pour la plupart des éditeurs actuels, que ce soit vim, Emacs, jEdit et Gedit. Tous les systèmes Windows postérieurs à NT utilisent Unicode en natif ; même Notepad est capable d’éditer et sauvegarder un fichier en UTF-8 – sans parler de l’excellente alternative qu’est BabelPad.
La compilation d’un fichier LilyPond comportant des caractères non ASCII qui n’aurait pas été enregistré dans l’encodage UTF-8 vous renverra l’erreur
FT_Get_Glyph_Name () erreur : invalid argument
Voici un exemple utilisant du texte en cyrillique, en hébreux et en portugais.
[ << Généralités en matière d'entrée et sortie ] | [Racine][Table des matières][Index] | [ Gestion de l'espace >> ] |
[ < Codage du texte ] | [Plus haut: Caractères spéciaux ] | [ Équivalents ASCII > ] |
Unicode
Lorsque vous avez besoin d’un caractère dont vous connaissez le point de
code mais que votre éditeur ne permet pas de saisir directement, vous
pouvez utiliser les instructions \char ##xhhhh
ou
\char #dddd
au sein d’un bloc \markup
– hhhh
et dddd
correspondant respectivement à la valeur hexadécimale ou
décimale. Même s’il est inutile de saisir les zéros superflus, il est
de bon ton de stipuler les quatre caractères formant la représentation
hexadécimale. Évitez cependant l’encodage UTF-8 d’un point de code
après un \char
; les encodages UTF-8 comprennent un bit
supplémentaire indiquant le nombre d’octets. Une table de
correspondance entre les codes Unicode et le nom des caractères ainsi
que leur code hexadécimal est disponible sur le site du consortium
Unicode, https://www.unicode.org/.
Par exemple, \char ##x03BE
et \char #958
correspondent
tous deux au caractère unicode U+03BE, dénommé « Greek Small Letter
Xi ».
Quel que soit le point de code spécifié de cette manière, il ne vous sera alors pas nécessaire d’enregistrer votre fichier en UTF-8. Vous devrez toutefois disposer d’une fonte contenant ce caractère qui soit accessible à LilyPond.
L’exemple suivant illustre la manière d’insérer un caractère sous sa forme hexadécimale, à la fois dans un repère textuel, dans une articulation, dans des paroles et dans du texte indépendant.
\score { \relative { c''1 \textMark \markup { \char ##x03A8 } c1_\markup { \tiny { \char ##x03B1 " to " \char ##x03C9 } } } \addlyrics { O \markup { \concat { Ph \char ##x0153 be! } } } } \markup { "Copyright 2008--2022" \char ##x00A9 }
Le signe copyright dans le champ de titrage consacré s’inscrit de la manière suivante :
\header { copyright = \markup { \char ##x00A9 "2008" } }
[ << Généralités en matière d'entrée et sortie ] | [Racine][Table des matières][Index] | [ Gestion de l'espace >> ] |
[ < Unicode ] | [Plus haut: Caractères spéciaux ] | [ Contrôle des sorties > ] |
Équivalents ASCII
Dès lors que vous aurez inclus la liste de leur équivalent ASCII, LilyPond reconnaîtra un certain nombre de caractères spéciaux :
\paper { #(include-special-characters) } \markup "&flqq; – &OE;uvre incomplète… &frqq;" \score { \new Staff { \repeat unfold 9 a'4 } \addlyrics { This is al -- so wor -- kin'~in ly -- rics: –_&OE;… } } \markup \column { "The replacement can be disabled:" "– &OE; …" \override #'(replacement-alist . ()) "– &OE; …" }
L’extension de cette liste est possible aussi bien de manière globale :
\paper { #(add-text-replacements! '(("100" . "hundred") ("dpi" . "dots per inch"))) } \markup "A 100 dpi."
qu’en un point particulier de votre source :
\markup \replace #'(("100" . "hundred") ("dpi" . "dots per inch")) "A 100 dpi."
Le remplacement n’affectera pas nécessairement une chaîne ; il peut s’agir d’un markup quelconque. Au niveau de la syntaxe, ceci requiert d’utiliser la syntaxe de quasi-citation de Scheme, à savoir une apostrophe inversée ‘`’ au lieu d’une apostrophe normale ‘'’ pour écrire la liste associative.
\markup \replace #`(("2nd" . ,#{ \markup \concat { 2 \super nd } #})) "2nd time"
Ces alias ne pourront plus, quant à eux, faire l’objet d’un remplacement.
Voir aussi
Manuel de notation : Liste des caractères spéciaux.
Fichiers d’initialisation : ‘ly/text-replacements.ly’.
[ << Généralités en matière d'entrée et sortie ] | [Racine][Table des matières][Index] | [ Gestion de l'espace >> ] |
[ < Unicode ] | [Plus haut: Caractères spéciaux ] | [ Contrôle des sorties > ] |