Ci-dessous, quelques fonctions permettant de manipuler du code Lilypond en php.
function lily_extract_notes($chaine){
$chaine=trim(htmlentities ($chaine, ENT_COMPAT, "UTF-8"));
$lily=array("0","1","2","3","4","5","6","7","8","9",'{', '}', '[', ']', '(', ')', '!', "'", "," ,'«', '#', '»', '.', '-+', '˜', '|', '*', 'r', '/', '<', '>', 'ˆ', '^', '=');
$chaine=trim(str_replace($lily,"",$chaine));
$chaine=preg_replace('/\s\s+/', ' ', $chaine);
$tableau = explode(" ",$chaine);
$chaineformat = "";
for( $i = 0 ; $i < count($tableau) ; $i++ ) {
$lg_mot=strlen($tableau[$i]);
if ($lg_mot==1 || substr($tableau[$i],1,3)=="is" || substr($tableau[$i],1,3)=="es" && $tableau[$i]!="s")
$chaineformat = $chaineformat." ".$tableau[$i];
}
$chaineformat=trim($chaineformat);
return $chaineformat;
}
function lily_notes_from_file($file){
$tabfich=file($file);
$notes="";
for( $i = 0 ; $i < count($tabfich) ; $i++ )
{
$tabfich[$i] = trim($tabfich[$i]);
if (substr($tabfich[$i],0,1)!="%" && substr($tabfich[$i],0,8)!='\version' && substr($tabfich[$i],0,9)!='\relative' && substr($tabfich[$i],0,5)!='\auto' && substr($tabfich[$i],0,5)!='\clef' && substr($tabfich[$i],0,4)!='\key' && substr($tabfich[$i],0,5)!='\time' && substr($tabfich[$i],0,6)!='\tempo' && substr($tabfich[$i],0,4)!='\bar')
$notes = $notes.lily_extract_notes($tabfich[$i])." ";
}
return $notes;
}
sib | mib | lab | reb | réb | solb | dob | fab | do | re | ré | mi | fa | sol | la | si | # | ut |
bes | ees | aes | des | des | ges | ces | fes | c | d | d | e | f | g | a | b | is | c |
function lily_notes_traduce($notes) {
$ponctu=array(',', '-', '.', '{', '}');
$latin=array('sib', 'mib', 'lab', 'reb', 'réb', 'réb', 'solb', 'dob', 'fab', 'do', 're', 'ré', 'ré', 'mi', 'fa', 'sol', 'la', 'si', '#', 'ut');
$anglais=array('bes', 'ees', 'aes', 'des', 'des', 'des', 'ges', 'ces', 'fes', 'c', 'd', 'd', 'd', 'e', 'f', 'g', 'a', 'b', 'is', 'c');
$notes=strtolower($notes);
$notes=trim(str_replace($ponctu,' ',$notes));
$notes=trim(str_replace($latin,$anglais,$notes));
$notes=preg_replace('/\s\s+/', ' ', $notes);
return $notes;
}
c | cis/des | d | dis/ees | e | eis/f | fis/ges | g | gis/aes | a | ais/bes | b |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
function lily_notes_to_num($chaine){
$gamme_table =array(
'c' => 0, 'cis' => 1, 'des' => 1, 'd' => 2, 'dis' => 3, 'ees' => 3, 'e' => 4, 'fes' => 4, 'eis' => 5, 'f' => 5, 'fis' => 6, 'ges' => 6, 'g' => 7, 'gis' => 8, 'aes' => 8, 'a' => 9, 'ais' => 10, 'bes' => 10, 'b' => 11, 'ces' => 11, 'bis' => 0 );
$notes_num="";
$notes_tabl = explode(" ",$chaine);
for( $i = 0 ; $i < count($notes_tabl) ; $i++ )
$notes_num=$notes_num.$gamme_table[$notes_tabl[$i]]." ";
return $notes_num;
function lily_num_transpose($chaine,$n){
$notes_transpose ="";
$notes_tabl = explode(" ",trim($chaine));
for( $i = 0 ; $i < count($notes_tabl) ; $i++ ) {
$note_nouvelle=$notes_tabl[$i]+$n;
while( $note_nouvelle > 11 )
$note_nouvelle = $note_nouvelle-11;
$notes_transpose = $notes_transpose." ".$note_nouvelle;
}
return $notes_transpose;
}
//La fonction :
function colorlily($chaine){
$chaine=trim(htmlentities ($chaine, ENT_COMPAT, "UTF-8"));
$lily = array(
"0","1","2","3","4","5","6","7","8","9",
'\break', '\relative', '\repeat', '\alternative', '\partial', '\key', '\tempo', '\time', '\version', '\override', '\markup', '\score', '\new', '\include', '\header', '\midi', '\layout', '\context', '\remove',
'\bar', '\clef', '\major', '\minor', '\autoBeamOff','\autoBeamOn','\bigger','\small','\smaller','\teeny','\upbow', '\downbow', '\grace', '\aftergrace', '\acciacatura', '\appoggiatura', '\fermata',
'{', '}', '[', ']', "'", ',' ,'«', '»'
);
$html = array(
'<span class="lily_num">0</span>','<span class="lily_num">1</span>','<span class="lily_num">2</span>','<span class="lily_num">3</span>','<span class="lily_num">4</span>','<span class="lily_num">5</span>','<span class="lily_num">6</span>','<span class="lily_num">7</span>','<span class="lily_num">8</span>','<span class="lily_num">9</span>',
'<span class="lily_kwd1">\break</span>', '<span class="lily_kwd1">\relative</span>', '<span class="lily_kwd1">\repeat</span>', '<span class="lily_kwd1">\alternative</span>', '<span class="lily_kwd1">\partial</span>', '<span class="lily_kwd1">\key</span>', '<span class="lily_kwd1">\tempo</span>', '<span class="lily_kwd1">\time</span>', '<span class="lily_kwd1">\version</span>', '<span class="lily_kwd1">\override</span>', '<span class="lily_kwd1">\markup</span>', '<span class="lily_kwd1">\score</span>', '<span class="lily_kwd1">\new</span>', '<span class="lily_kwd1">\include</span>', '<span class="lily_kwd1">\header</span>', '<span class="lily_kwd1">\midi</span>', '<span class="lily_kwd1">\layout</span>', '<span class="lily_kwd1">\context</span>', '<span class="lily_kwd1">\remove</span>',
'<span class="lily_kwd3">\bar</span>', '<span class="lily_kwd3">\clef</span>', '<span class="lily_kwd3">\major</span>', '<span class="lily_kwd3">\minor</span>', '<span class="lily_kwd3">\autoBeamOff</span>','<span class="lily_kwd3">\autoBeamOn</span>','<span class="lily_kwd3">\bigger</span>','<span class="lily_kwd3">\small</span>','<span class="lily_kwd3">\smaller</span>','<span class="lily_kwd3">\teeny</span>','<span class="lily_kwd3">\upbow</span>', '<span class="lily_kwd3">\downbow</span>', '<span class="lily_kwd3">\grace</span>', '<span class="lily_kwd3">\aftergrace</span>', '<span class="lily_kwd3">\acciacatura</span>', '<span class="lily_kwd3">\appoggiatura</span>', '<span class="lily_kwd3">\fermata</span>',
'<span class="lily_markup">{</span>', '<span class="lily_markup">}</span>', '<span class="lily_markup">[</span>', '<span class="lily_markup">]</span>', "<span class=\"lily_markup\">'</span>", '<span class="lily_markup">,</span>', '<span class="lily_markup">«</span>', '<span class="lily_markup">»</span>'
);
$chaine = trim(str_replace($lily,$html,$chaine));
return $chaine;
}
// Utilisation de la fonction : on affiche le contenu du fichier dont l'adresse est $fichier (à définir)
$tabfich = file($fichier);
$indent = "";
echo '
<div class="lilypondcode">
<code>
';
for ( $i = 0 ; $i < count($tabfich) ; $i++ )
{
$ligne = trim($tabfich[$i]);
if (substr($ligne,0,1)=="%")
echo '
<span class="lily_comment">'.$ligne.'<br />
';
else {
echo $indent.colorlily($ligne).'<br />
';
if (substr_count ($ligne, "{")>=1)
$indent = $indent." ";
if (substr_count ($ligne, "}")>=1)
$indent = substr($indent,0,-18);
}
}
echo '
</code>
</div>
<br />';
/*== Lilypond == */
.lilypondcode {background:#e1e1e1;padding:5px;border:1px solid #cccccc;-moz-border -radius:5px 5px 5px 5px;color:#000000;}
.lily_comment {color:#8B7765;} /*peach puff4*/
.lily_kwd1 {color:#191970;font-weight:bold;} /*midnight blue*/
.lily_kwd3 {color:#FF8247;font-weight:bold;} /*siena1*/
.lily_function {color:#191970;} /*midnight blue*/
.lily_lit1 {color:#8B2252;} /*violetred4*/
.lily_num {color:#8B2323;} /*broun4*/
.lily_markup {color:#9c9cfe;font-weight:bold;} /*mauve*/
Vous êtes ici : Projet POIESIS/CERPOAR » Matériel & méthode » Outils php