{ Initialize "() { AddToPluginsMenu(_PluginMenuName, 'Run'); }" Run "() { // Convertir texte système / portée // Sélectionne un texte, puis lance le plug-in. Selon le type de texte sélectionné : // - texte système : conversion en texte de portée (Technique, parole, Expression ou symbole d'accord), // placé sur la portée du haut ; // - texte de portée, parole ou symbole d'accord : conversion en texte système // (Tempo, texte système simple ou encadré). // Le texte est recréé dans la même mesure, à la même position rythmique. // Le texte d'origine est supprimé une fois la conversion réussie. partition = Sibelius.ActiveScore; if (not(IsObject(partition))) { Sibelius.MessageBox('Ouvre une partition, sélectionne un texte, puis relance le plug-in.'); return false; } sel = partition.Selection; // 1. Un texte système est-il sélectionné ? texteSysteme = null; nbSysteme = 0; for each SystemTextItem t in sel { nbSysteme = nbSysteme + 1; if (not(IsObject(texteSysteme))) { texteSysteme = t; } } if (nbSysteme > 0) { return ConvertirVersPortee(partition, texteSysteme, nbSysteme); } // 2. Sinon, un objet de portée : texte de portée, parole ou symbole d'accord ? // Priorité au texte de portée, puis à la parole, puis au symbole d'accord. source = null; contenu = ''; nbPortee = 0; for each Text t in sel { nbPortee = nbPortee + 1; if (not(IsObject(source))) { source = t; // Version avec mises en forme (gras, italique, caractères musicaux d'une indication métronomique) contenu = t.TextWithFormattingAsString; } } for each LyricItem p in sel { nbPortee = nbPortee + 1; if (not(IsObject(source))) { source = p; contenu = p.Text; } } for each GuitarFrame a in sel { nbPortee = nbPortee + 1; if (not(IsObject(source))) { source = a; // Nom de l'accord tel qu'on le tape (ex. Cm7, G7/B) contenu = a.ChordNameAsPlainText; } } if (nbPortee > 0) { if (Length(contenu) = 0) { Sibelius.MessageBox('L’objet sélectionné ne contient pas de texte à convertir.'); return false; } return ConvertirVersSysteme(partition, source, contenu, nbPortee); } Sibelius.MessageBox('Sélectionne d’abord un texte système (tempo, indication système…) ou, sur une portée, un texte (technique, expression…), une parole ou un symbole d’accord, puis relance le plug-in.'); return false; }" ConvertirVersPortee "(partition, texteSysteme, nbTrouves) { // Texte système vers texte de portée, sur la portée du haut if (not(Sibelius.ShowDialog(dlgVersPortee, Self))) { return false; } numMesure = texteSysteme.ParentBar.BarNumber; pos = texteSysteme.Position; contenu = texteSysteme.Text; mesureCible = partition.NthStaff(1).NthBar(numMesure); if (not(IsObject(mesureCible))) { Sibelius.MessageBox('Impossible de trouver la mesure correspondante sur la portée du haut.'); return false; } nouveau = null; avertissement = ''; if (EstVrai(CibleAccord)) { // Symbole d'accord : le texte doit être un nom d'accord lisible par Sibelius (C, Dm7, G7/B…) nouveau = mesureCible.AddGuitarFrame(pos, contenu); if (not(IsObject(nouveau))) { Sibelius.MessageBox('Le symbole d’accord n’a pas pu être créé : « ' & contenu & ' » n’est pas un nom d’accord reconnu par Sibelius.'); return false; } if (not(nouveau.Recognized)) { avertissement = 'Sibelius n’a pas reconnu « ' & contenu & ' » comme un accord : le symbole est affiché en rouge, vérifie son orthographe.'; } } else { if (EstVrai(CibleParole)) { // Parole : durée de la note ou du silence présent à cette position, sinon une noire duree = DureeALaPosition(mesureCible, pos); nouveau = mesureCible.AddLyric(pos, duree, contenu, 1, 1); if (not(IsObject(nouveau))) { Sibelius.MessageBox('La parole n’a pas pu être créée.'); return false; } } else { if (EstVrai(CibleExpression)) { styleId = StyleExpression; } else { styleId = StyleTechnique; } nouveau = mesureCible.AddText(pos, contenu, styleId); if (not(IsObject(nouveau))) { Sibelius.MessageBox('Le texte de portée n’a pas pu être créé (style « ' & styleId & ' » introuvable ?).'); return false; } } } // Suppression du texte système d'origine, une fois la conversion réussie texteSysteme.Delete(); CompteRendu(avertissement, nbTrouves, 'Plusieurs textes système étaient sélectionnés : seul le premier a été converti et supprimé.'); return true; }" ConvertirVersSysteme "(partition, source, contenu, nbTrouves) { // Texte de portée, parole ou symbole d'accord vers texte système if (not(Sibelius.ShowDialog(dlgVersSysteme, Self))) { return false; } if (EstVrai(SortieTempo)) { styleId = StyleTempo; styleNom = 'Tempo'; } else { if (EstVrai(SortieEncadre)) { styleId = StyleEncadre; styleNom = 'Boxed system text'; } else { styleId = StyleSimple; styleNom = 'Plain system text'; } } numMesure = source.ParentBar.BarNumber; pos = source.Position; mesureCible = partition.SystemStaff.NthBar(numMesure); if (not(IsObject(mesureCible))) { Sibelius.MessageBox('Impossible de trouver la mesure correspondante dans la portée système.'); return false; } // Création avec l'identifiant du style, puis avec son nom anglais en secours nouveau = mesureCible.AddText(pos, contenu, styleId); if (not(IsObject(nouveau))) { nouveau = mesureCible.AddText(pos, contenu, styleNom); } if (not(IsObject(nouveau))) { Sibelius.MessageBox('Le texte système n’a pas pu être créé : le style « ' & styleNom & ' » n’existe pas dans cette partition.'); return false; } // Suppression de l'objet d'origine, une fois la conversion réussie source.Delete(); CompteRendu('', nbTrouves, 'Plusieurs objets étaient sélectionnés : seul le premier a été converti et supprimé.'); return true; }" CompteRendu "(avertissement, nbTrouves, messagePlusieurs) { // Affiche un message seulement s'il y a quelque chose à signaler msg = avertissement; if (nbTrouves > 1) { if (Length(msg) > 0) { msg = msg & Chr(10) & Chr(10); } msg = msg & messagePlusieurs; } if (Length(msg) > 0) { Sibelius.MessageBox(msg); } }" DureeALaPosition "(mesure, pos) { // Renvoie la durée de la première note ou du premier silence placé à cette position, sinon une noire. for each NoteRest nr in mesure { if (nr.Position = pos) { return nr.Duration; } } return Quarter; }" EstVrai "(v) { // Les contrôles du dialogue renvoient True/False ; les valeurs par défaut sont des chaînes. x = '' & v; if ((x = '1') or (x = 'true') or (x = 'True') or (x = 'TRUE')) { return true; } return false; }" dlgVersPortee "Dialog" { Title "Texte système vers texte de portée" X "261" Y "241" Width "197" Height "139" Controls { Text { Title "Texte système sélectionné. Convertir en :" X "8" Y "8" Width "180" Height "12" RightAlign "0" ID "IDC_TXT_PORTEE" Value Method SetFocus "0" } RadioButton { Title "Texte Technique" X "16" Y "24" Width "170" Height "14" StartGroup "1" ID "IDC_RADIO_TECHNIQUE" Value "CibleTechnique" Method SetFocus "0" } RadioButton { Title "Parole" X "16" Y "40" Width "170" Height "14" StartGroup "0" ID "IDC_RADIO_PAROLE" Value "CibleParole" Method SetFocus "0" } RadioButton { Title "Expression (nuances)" X "16" Y "56" Width "170" Height "14" StartGroup "0" ID "IDC_RADIO_EXPRESSION" Value "CibleExpression" Method SetFocus "0" } RadioButton { Title "Symbole d'accord" X "16" Y "72" Width "170" Height "14" StartGroup "0" ID "IDC_RADIO_ACCORD" Value "CibleAccord" Method SetFocus "0" } Button { Title "Annuler" X "78" Y "96" Width "52" Height "14" DefaultButton "0" ID "IDC_ANNULER_P" Value Method SetFocus "0" EndDialog "0" } Button { Title "OK" X "136" Y "96" Width "52" Height "14" DefaultButton "1" ID "IDC_OK_P" Value Method SetFocus "1" EndDialog "1" } } } dlgVersSysteme "Dialog" { Title "Vers texte système" X "261" Y "249" Width "197" Height "123" Controls { Text { Title "Convertir en texte système :" X "8" Y "8" Width "180" Height "12" RightAlign "0" ID "IDC_TXT_SYSTEME" Value Method SetFocus "0" } RadioButton { Title "Tempo" X "16" Y "24" Width "170" Height "14" StartGroup "1" ID "IDC_RADIO_TEMPO" Value "SortieTempo" Method SetFocus "0" } RadioButton { Title "Texte système simple" X "16" Y "40" Width "170" Height "14" StartGroup "0" ID "IDC_RADIO_SIMPLE" Value "SortieSimple" Method SetFocus "0" } RadioButton { Title "Texte système encadré" X "16" Y "56" Width "170" Height "14" StartGroup "0" ID "IDC_RADIO_ENCADRE" Value "SortieEncadre" Method SetFocus "0" } Button { Title "Annuler" X "78" Y "80" Width "52" Height "14" DefaultButton "0" ID "IDC_ANNULER_S" Value Method SetFocus "0" EndDialog "0" } Button { Title "OK" X "136" Y "80" Width "52" Height "14" DefaultButton "1" ID "IDC_OK_S" Value Method SetFocus "1" EndDialog "1" } } } _PluginMenuName "Convertir texte système / portée" StyleTechnique "text.staff.technique" StyleExpression "text.staff.expression" StyleTempo "text.system.tempo" StyleSimple "text.system.plain" StyleEncadre "text.system.boxed" CibleTechnique "1" CibleParole "0" CibleExpression "0" CibleAccord "0" SortieTempo "1" SortieSimple "0" SortieEncadre "0" }