From 10e42917df05c426bb66852176b09e470b1e620e Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Thu, 5 Sep 2002 21:16:50 +0000 Subject: [PATCH] 2002-09-05 Juergen Reuter + + * input/test/custos.ly: updated test file to show all available + custos styles + + * lily/custos.cc: small code clean-ups + + * input/test/rests.ly: updated test file to show all available + rest styles + + * mf/feta-eindelijk.mf: bugfix: added missing maxima rest + --- ChangeLog | 12 ++++ input/test/custos.ly | 33 +++++++++-- input/test/rests.ly | 47 +++++++++++---- lily/custos.cc | 138 +++++++++++++++++++++---------------------- mf/feta-eindelijk.mf | 14 +++-- 5 files changed, 153 insertions(+), 91 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9d901202a5..ca6bae3e3f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2002-09-05 Juergen Reuter + + * input/test/custos.ly: updated test file to show all available + custos styles + + * lily/custos.cc: small code clean-ups + + * input/test/rests.ly: updated test file to show all available + rest styles + + * mf/feta-eindelijk.mf: bugfix: added missing maxima rest + 2002-09-05 Rune Zedeler * scm/output-lib.scm (make-molecule-boxer): Fixed and moved from diff --git a/input/test/custos.ly b/input/test/custos.ly index 725996d7fd..770717bbbe 100644 --- a/input/test/custos.ly +++ b/input/test/custos.ly @@ -1,9 +1,34 @@ \version "1.5.68" +\header { + texidoc = "custodes in various styles." +} + +\score { + \notes { + \property Staff.Custos \set #'neutral-position = #4 + \property Staff.Custos \set #'neutral-direction = #-1 + \property Staff.Custos \set #'adjust-if-on-staffline = ##t + + \property Staff.Custos \set #'style = #'hufnagel + c'1^"Custos style = \#'hufnagel" + \break < d'1 a' f''> + \property Staff.Custos \set #'style = #'medicaea + c'1^"Custos style = \#'medicaea" + \break < d'1 a' f''> -\score { \notes { c'1 \break < d'1 f' a'> } -\paper {\translator { \StaffContext -\consists Custos_engraver -}} + \property Staff.Custos \set #'style = #'vaticana + c'1^"Custos style = \#'vaticana" + \break < d'1 a' f''> + \property Staff.Custos \set #'style = #'mensural + c'1^"Custos style = \#'mensural" + \break < d'1 a' f''> + } + \paper { + \translator { + \StaffContext + \consists Custos_engraver + } + } } diff --git a/input/test/rests.ly b/input/test/rests.ly index 1ca7f50251..8b408d46ce 100644 --- a/input/test/rests.ly +++ b/input/test/rests.ly @@ -1,17 +1,40 @@ \version "1.5.68" \header { - texidoc ="mensural style rests." - } + texidoc = "rests in various styles." +} \score { - \context Voice \notes\relative c { - r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128 - \property Staff.Rest \override #'style = #'mensural - \emptyText - r\longa^"restStyle = \"mensural\"" r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128 - - - } - \paper { } - \midi { } + \context Staff \notes\relative c { + \property Staff.Rest \set #'style = #'mensural + r\maxima^"Rest style = \#'mensural" + r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128 + \break + + \property Staff.Rest \set #'style = #'neo_mensural + r\maxima^"Rest style = \#'neo\\_mensural" + r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128 + \break + + \property Staff.Rest \set #'style = #'classical + r\maxima^"Rest style = \#'classical" + r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128 + \break + + \property Staff.Rest \set #'style = #'default + r\maxima^"Rest style = \#'default" + r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128 + \break + } + \paper { + \translator { + \StaffContext + %%%% The following looks good, but produces + %%%% lots of warnings: + % \remove Bar_engraver + } + \translator { + \ScoreContext + \remove Bar_number_engraver + } + } } diff --git a/lily/custos.cc b/lily/custos.cc index a96e509d7f..4def4d6f22 100644 --- a/lily/custos.cc +++ b/lily/custos.cc @@ -8,10 +8,6 @@ /* TODO: - - merge create_ledger_line () and Note_head::create_ledger_line () - - - rewrite create_ledger_line () to support short and thin ledger lines - - do not show if a clef change immediately follows in the next line - decide: do or do not print custos if the next line starts with a rest @@ -35,83 +31,83 @@ SCM Custos::brew_molecule (SCM smob) { Item *me = (Item *)unsmob_grob (smob); - SCM scm_style = me->get_grob_property ("style"); + SCM scm_style = me->get_grob_property ("style"); + String style; if (gh_symbol_p (scm_style)) { - String style = ly_scm2string (scm_symbol_to_string (scm_style)); - - /* - * Shall we use a common custos font character regardless if on - * staffline or not, or shall we use individual font characters - * for both cases? - */ - bool adjust = - to_boolean (me->get_grob_property ("adjust-if-on-staffline")); - - String idx = "custodes-" + style + "-"; - - int neutral_pos; - SCM ntr_pos = me->get_grob_property ("neutral-position"); - if (gh_number_p (ntr_pos)) - neutral_pos = gh_scm2int (ntr_pos); - else - neutral_pos = 0; + style = ly_scm2string (scm_symbol_to_string (scm_style)); + } + else + { + style = "mensural"; + } - Direction neutral_direction = - to_dir (me->get_grob_property ("neutral-direction")); + /* + * Shall we use a common custos font character regardless if on + * staffline or not, or shall we use individual font characters + * for both cases? + */ + bool adjust = + to_boolean (me->get_grob_property ("adjust-if-on-staffline")); + + int neutral_pos; + SCM ntr_pos = me->get_grob_property ("neutral-position"); + if (gh_number_p (ntr_pos)) + neutral_pos = gh_scm2int (ntr_pos); + else + neutral_pos = 0; + + Direction neutral_direction = + to_dir (me->get_grob_property ("neutral-direction")); + + int pos = (int)rint (Staff_symbol_referencer::get_position (me)); + int sz = Staff_symbol_referencer::line_count (me)-1; + + String font_char = "custodes-" + style + "-"; + if (pos < neutral_pos) + font_char += "u"; + else if (pos > neutral_pos) + font_char += "d"; + else if (neutral_direction == UP) + font_char += "u"; + else if (neutral_direction == DOWN) + font_char += "d"; + else // auto direction; not yet supported -> use "d" + font_char += "d"; + + if (adjust) + { + font_char += (((pos ^ sz) & 0x1) == 0) ? "1" : "0"; + } + else + { + font_char += "2"; + } + Molecule molecule + = Font_interface::get_default_font (me)->find_by_name (font_char); + if (molecule.empty_b ()) + { + me->warning (_f ("custos `%s' not found", font_char)); + return SCM_EOL; + } + else + { + // add ledger lines int pos = (int)rint (Staff_symbol_referencer::get_position (me)); - int sz = Staff_symbol_referencer::line_count (me)-1; - - if (pos < neutral_pos) - idx += "u"; - else if (pos > neutral_pos) - idx += "d"; - else if (neutral_direction == UP) - idx += "u"; - else if (neutral_direction == DOWN) - idx += "d"; - else // auto direction; not yet supported -> use "d" - idx += "d"; - - if (adjust) - { - idx += (((pos ^ sz) & 0x1) == 0) ? "1" : "0"; - } - else - { - idx += "2"; - } - - Molecule molecule - = Font_interface::get_default_font (me)->find_by_name (idx); - if (molecule.empty_b ()) - { - String message = "no such custos: `" + idx + "'"; - warning (_ (message.to_str0 ())); - return SCM_EOL; - } - else - { - // add ledger lines - int pos = (int)rint (Staff_symbol_referencer::get_position (me)); - int interspaces = Staff_symbol_referencer::line_count (me)-1; - if (abs (pos) - interspaces > 1) - { - Molecule ledger_lines = - Note_head::brew_ledger_lines (me, pos, interspaces, - molecule.extent (X_AXIS), true); - molecule.add_molecule (ledger_lines); - } - return molecule.smobbed_copy (); + int interspaces = Staff_symbol_referencer::line_count (me)-1; + if (abs (pos) - interspaces > 1) + { + Molecule ledger_lines = + Note_head::brew_ledger_lines (me, pos, interspaces, + molecule.extent (X_AXIS), true); + molecule.add_molecule (ledger_lines); } + return molecule.smobbed_copy (); } - else - return SCM_EOL; } - ADD_INTERFACE (Custos, "custos-interface", "A custos is a staff context symbol that appears at the end of a staff line with monophonic musical contents (i.e. with a single diff --git a/mf/feta-eindelijk.mf b/mf/feta-eindelijk.mf index 4549a17f35..4da3607f7f 100644 --- a/mf/feta-eindelijk.mf +++ b/mf/feta-eindelijk.mf @@ -95,17 +95,23 @@ fet_endchar; define_pixels(breve_rest_y, breve_rest_x, multi_rest_x, multi_beam_height); +fet_beginchar("maxima rest", "-3", "maximarest"); + set_char_box(0, 3 breve_rest_x#, breve_rest_y#, breve_rest_y#); + draw_block ((0,-floor (breve_rest_y)), (breve_rest_x, floor (breve_rest_y))); + addto currentpicture also currentpicture shifted (2 breve_rest_x, 0); +fet_endchar; fet_beginchar("longa rest", "-2", "longarest"); - set_char_box(0, breve_rest_x#, breve_rest_y#, breve_rest_y#); - draw_block ((0,-floor (breve_rest_y)), (breve_rest_x, floor (breve_rest_y))); + set_char_box(0, breve_rest_x#, breve_rest_y#, breve_rest_y#); + draw_block ((0,-floor (breve_rest_y)), (breve_rest_x, floor (breve_rest_y))); fet_endchar; fet_beginchar("breve rest", "-1", "breverest"); - set_char_box(0, breve_rest_x#, 0, breve_rest_y#); - draw_block ((0,0), (breve_rest_x, floor (breve_rest_y))); + set_char_box(0, breve_rest_x#, 0, breve_rest_y#); + draw_block ((0,0), (breve_rest_x, floor (breve_rest_y))); fet_endchar; + tracingvariables := 1; fet_beginchar("Quarter rest","2","quartrest"); -- 2.39.5