From 4224f67e953b676c16499e931b9bf7b9b9408cbb Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Tue, 14 Mar 2000 15:12:03 +0100 Subject: [PATCH] patch::: 1.3.32.jcn3: jcn3, weetjewat? 1.3.32.jcn3 =========== * Embedded newlines in text items are now allowed. This helps avoiding TeX-hacking in some cases. See input/test/coriolan-margin.ly * Fixed stupid x-y interchange bug for staff-bracket. This fixes placement of staff-brackets. * Fixed bracket/arch-thickness interchange bug, and made bracket a bit thinner. * Fixed slur/bezier-beautiful name mismatch. This should fix the steep slurs that were apparently reintroduced in 1.3.29. --- CHANGES | 15 ++++ VERSION | 2 +- input/test/coriolan-margin.ly | 144 ++++++++++++++++++++++++++++++++ input/test/staff-bracket.ly | 21 +++++ lily/bar-engraver.cc | 6 +- lily/lookup.cc | 59 +++++++++---- lily/slur.cc | 4 +- lily/staff-margin-engraver.cc | 13 +++ ly/params.ly | 15 ++-- mutopia/Coriolan/clarinetti.ly | 4 +- mutopia/Coriolan/coriolan.ly | 9 +- mutopia/Coriolan/corni.ly | 4 +- mutopia/Coriolan/flauto-1.ly | 3 - mutopia/Coriolan/timpani.ly | 2 +- mutopia/Coriolan/trombe.ly | 4 +- mutopia/Coriolan/violoncello.ly | 4 +- ps/lily.ps | 14 ++-- scm/generic-property.scm | 2 +- scm/lily.scm | 9 +- 19 files changed, 283 insertions(+), 51 deletions(-) create mode 100644 input/test/coriolan-margin.ly create mode 100644 input/test/staff-bracket.ly diff --git a/CHANGES b/CHANGES index c17fb87d7d..82ae10ab04 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,18 @@ +1.3.32.jcn3 +=========== + +* Embedded newlines in text items are now allowed. This helps avoiding + TeX-hacking in some cases. See input/test/coriolan-margin.ly + +* Fixed stupid x-y interchange bug for staff-bracket. This fixes + placement of staff-brackets. + +* Fixed bracket/arch-thickness interchange bug, and made bracket a bit + thinner. + +* Fixed slur/bezier-beautiful name mismatch. This should fix the steep + slurs that were apparently reintroduced in 1.3.29. + 1.3.32.jcn2 =========== diff --git a/VERSION b/VERSION index 9c56fc10a7..340fa5797e 100644 --- a/VERSION +++ b/VERSION @@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=3 PATCH_LEVEL=32 -MY_PATCH_LEVEL=jcn2 +MY_PATCH_LEVEL=jcn3 # use the above to send patches: MY_PATCH_LEVEL is always empty for a # released version. diff --git a/input/test/coriolan-margin.ly b/input/test/coriolan-margin.ly new file mode 100644 index 0000000000..842b45bce0 --- /dev/null +++ b/input/test/coriolan-margin.ly @@ -0,0 +1,144 @@ + +\header{ +%% URG +Clarinetti ="\\vbox to0pt{\vss\\hbox to0pt{\\hss2 Clarinetti\\hss}\\hbox to0pt{\\hss (B\\textflat)\\hss}\vss}"; +Cl ="\\vbox to0pt{\vss\\hbox to0pt{\\hss Cl.\\hss}\\hbox to0pt{\\hss (B\\textflat)\\hss}\vss}"; +Corni ="\\vbox to0pt{\vss\\hbox to0pt{\\hss2 Corni\\hss}\\hbox to0pt{\\hss (E\\textflat)\\hss}\vss}"; +Cor ="\\vbox to0pt{\vss\\hbox to0pt{\\hss Cor.\\hss}\\hbox to0pt{\\hss (E\\textflat)\\hss}\vss}"; +Trombe ="\\vbox to0pt{\vss\\hbox to0pt{\\hss2 Trombe\\hss}\\hbox to0pt{\\hss (C)\\hss}\vss}"; +Tbe ="\\vbox to0pt{\vss\\hbox to0pt{\\hss Tbe.\\hss}\\hbox to0pt{\\hss (C)\\hss}\vss}"; +Timpani ="\\vbox to0pt{\vss\\hbox to0pt{\\hss Timpani\\hss}\\hbox to0pt{\\hss (C-G)\\hss}\vss}"; +VioloncelloContrabasso ="\\hss\\vbox to0pt{\vss\\hbox to0pt{\\hss Violoncello\\hss}\\hbox to0pt{\\hss e\\hss}\\hbox to0pt{\\hss Contrabasso\\hss}\vss}"; +VcCb ="\\hss\\vbox to0pt{\vss\\hbox to0pt{\\hss Vc.\\hss}\\hbox to0pt{\\hss Cb.\\hss}\vss}"; +} + +flauti = \notes \relative c' { + \property Staff.instrument = #"2 Flauti" + \property Staff.instr = #"Fl." + c1 \break c + \bar"|."; +} + +oboi = \notes \relative c' { + \property Staff.instrument = #"2 Oboi" + \property Staff.instr = #"Ob." + c1 c +} + +clarinetti = \notes \relative c' { + %%\property Staff.instrument = #"\\mudelaClarinetti " + %%\property Staff.instr = #"\\mudelaCl " + + \property Staff.instrument = #"2 Clarinetti\n(B\\textflat)" + \property Staff.instr = #"Cl.\n(B\\textflat)" + + c1 c +} + +fagotti = \notes \relative c' { + \property Staff.instrument = #"2 Fagotti" + \property Staff.instr = #"Fg." + c1 c +} + +corni = \notes \relative c' { + %%\property Staff.instrument = #"\\mudelaCorni " + %%\property Staff.instr = #"\\mudelaCor " + + \property Staff.instrument = #"2 Corni\n(E\\textflat)" + \property Staff.instr = #"Cor.\n(E\\textflat)" + + c1 c +} + +trombe = \notes \relative c' { + %%\property Staff.instrument = #"\\mudelaTrombe " + %%\property Staff.instr = #"\\mudelaTbe " + + \property Staff.instrument = #"2 Trombe\n(C)" + \property Staff.instr = #"Tbe.\n(C)" + + c1 c +} + +timpani = \notes \relative c' { + %%\property Staff.instrument = #"\\mudelaTimpani " + %%\property Staff.instr = #"Timp." + + \property Staff.instrument = #"Timpani\n(C-G)" + \property Staff.instr = #"Timp." + + c1 c +} + +violino1 = \notes \relative c' { + \property Staff.instrument = #"Violino I" + \property Staff.instr = #"Vl. I" + c1 c +} + +violino2 = \notes \relative c' { + \property Staff.instrument = #"Violino II" + \property Staff.instr = #"Vl. II" + c1 c +} + +viola = \notes \relative c' { + \property Staff.instrument = #"Viola" + \property Staff.instr = #"Vla." + c1 c +} + +violoncello = \notes \relative c' { + %%\property Staff.instrument = #"\\mudelaVioloncelloContrabasso " + %%\property Staff.instr = #"\\mudelaVcCb " + + \property Staff.instrument = #"Violoncello\ne\nContrabasso" + \property Staff.instr = #"Vc.\nCb." + c1 c +} + +\score { + < + \context StaffGroup ="legni" < + \context Staff ="flauti" \flauti + \context Staff ="oboi" \oboi + \context Staff ="clarinetti" \clarinetti + \context Staff ="fagotti" \fagotti + > + \context StaffGroup ="ottoni" < + \context Staff ="corni" \corni + \context Staff ="trombe" \trombe + > + \context StaffGroup ="timpani" < + \context Staff ="timpani" \timpani + > + \context StaffGroup ="archi" < + \context GrandStaff ="violini" < + \context Staff ="violino1" \violino1 + \context Staff ="violino2" \violino2 + > + \context Staff ="viola" \viola + \context Staff ="violoncello" \violoncello + > + > + \header{ + title = "Coriolan"; + subtitle = "Ouverture"; + opus = "Opus 62"; + composer = "Ludwig van Beethoven (1770-1827)"; + enteredby = "JCN"; + copyright = "public domain"; + } + + \paper { + indent=100.0\mm; + linewidth=150.0\mm; + \translator { + \StaffContext + \consists Staff_margin_engraver; + staffMarginHorizontalPadding = #-12 + } + } +} + diff --git a/input/test/staff-bracket.ly b/input/test/staff-bracket.ly new file mode 100644 index 0000000000..b3d5b5807f --- /dev/null +++ b/input/test/staff-bracket.ly @@ -0,0 +1,21 @@ +\score +{ + \context StaffGroup = a < + \context PianoStaff = b < + \context Staff = "c" \notes\relative c'' { b1 } + \context Staff = "d" \notes\relative c'' { b1 } + > + > + + \paper { + indent=100.0\mm; + linewidth=150.0\mm; + \translator + { + \StaffContext + \consists Staff_margin_engraver; + numberOfStaffLines = #1 + + } + } +} diff --git a/lily/bar-engraver.cc b/lily/bar-engraver.cc index a9e1da7957..ccc1183b81 100644 --- a/lily/bar-engraver.cc +++ b/lily/bar-engraver.cc @@ -44,7 +44,11 @@ Bar_engraver::create_bar () #if 0 /* urg. Why did I implement this? And did I implement this so - clumsily? */ + clumsily? + + input/test/just-friends.ly + Maybe a staffgroup of just one staff would be a better solution. + */ SCM prop = get_property ("barAtLineStart"); if (to_boolean (prop)) { diff --git a/lily/lookup.cc b/lily/lookup.cc index 88bd9a753b..2be2e39093 100644 --- a/lily/lookup.cc +++ b/lily/lookup.cc @@ -264,8 +264,11 @@ Lookup::frame (Box b, Real thick) /* - TODO: THIS IS UGLY. Since the user has direct access to TeX - strings, we try some halfbaked attempt to detect TeX trickery. + TODO: THIS IS UGLY. + Since the user has direct access to TeX marcos, + that currently provide the only way to do + font selection, accents etc, + we try some halfbaked attempt to detect this TeX trickery. */ String sanitise_TeX_string (String text) @@ -349,19 +352,42 @@ Lookup::text (String style, String text, Paper_def *paper_l) metric_l = all_fonts_global_p->find_font (style); - if (output_global_ch == "tex") - text = sanitise_TeX_string (text); - else if (output_global_ch == "ps") - text = sanitise_PS_string (text); + int i = text.index_i ("\\n"); + while (i >=0 ) + { + text = text.left_str (i) + "\n" + text.right_str (text.length_i () - i - 2); + i = text.index_i ("\\n"); + } - SCM at = (gh_list (ly_symbol2scm ("text"), - ly_str02scm (text.ch_C()), - SCM_UNDEFINED)); - at = fontify_atom (metric_l,at); - return Molecule ( metric_l->text_dimension (text), - at); + Array lines = String_convert::split_arr (text, '\n'); + + Molecule mol; + + Real kern = paper_l->get_var ("line_kern"); + + for (i = 0; i< lines.size (); i++) + { + /* + Huh? This way we'll still see \foo sequences in ps output. + */ + String str = lines[i]; + if (output_global_ch == "tex") + str = sanitise_TeX_string (str); + else if (output_global_ch == "ps") + str = sanitise_PS_string (str); + + SCM line = (gh_list (ly_symbol2scm ("text"), + ly_str02scm (str.ch_C ()), + SCM_UNDEFINED)); + line = fontify_atom (metric_l, line); + mol.add_at_edge (Y_AXIS, DOWN, + Molecule (metric_l->text_dimension (str), line), + kern); + } + + return mol; } @@ -445,11 +471,12 @@ Lookup::staff_bracket (Real height, Paper_def* paper_l) gh_double2scm (paper_l->get_var("bracket_thick")), SCM_UNDEFINED)); - Box b ( Interval (-height/2,height/2), Interval (0,4 PT)); - Molecule m (b, at); + Real staff_space = paper_l->get_var ("interline"); + Box b (Interval (0, 1.5 * staff_space), Interval (-height/2,height/2)); + Molecule mol (b, at); - m.translate_axis (- 4. / 3. * m.dim_[X_AXIS].length (), X_AXIS); - return m; + mol.translate_axis (- mol.dim_[X_AXIS].length () / 2, X_AXIS); + return mol; } diff --git a/lily/slur.cc b/lily/slur.cc index 679ece65b5..916cc54e25 100644 --- a/lily/slur.cc +++ b/lily/slur.cc @@ -121,8 +121,8 @@ Slur_bezier_bow::minimise_enclosed_area (Paper_def* paper_l, Real default_height) { Real length = curve_.control_[3][X_AXIS]; - Real bbc = paper_l->get_var ("bezier_beautiful"); - Real beautiful = length * default_height / bbc; + Real sb = paper_l->get_var ("slur_beautiful"); + Real beautiful = length * default_height * sb; DEBUG_OUT << to_str ("Beautiful: %f\n", beautiful); DEBUG_OUT << to_str ("Length: %f\n", length); diff --git a/lily/staff-margin-engraver.cc b/lily/staff-margin-engraver.cc index d581d51352..8aecb00f3a 100644 --- a/lily/staff-margin-engraver.cc +++ b/lily/staff-margin-engraver.cc @@ -11,6 +11,7 @@ #include "timing-translator.hh" #include "text-item.hh" #include "side-position-interface.hh" +#include "staff-symbol-referencer.hh" ADD_THIS_TRANSLATOR (Staff_margin_engraver); @@ -58,6 +59,18 @@ Staff_margin_engraver::acknowledge_element (Score_element_info inf) */ Interval iv(text_p_->extent (Y_AXIS)); text_p_->translate_axis (- iv.center (), Y_AXIS); + + Real staff_space = Staff_symbol_referencer_interface (text_p_).staff_space (); + SCM s = get_property ("staffMarginHorizontalPadding"); + if (gh_number_p (s)) + { + text_p_->translate_axis (gh_scm2double (s) * staff_space, X_AXIS); + } + s = get_property ("staffMarginVerticalPadding"); + if (gh_number_p (s)) + { + text_p_->translate_axis (gh_scm2double (s) * staff_space, Y_AXIS); + } } } diff --git a/ly/params.ly b/ly/params.ly index d02f17dd97..0f3052930e 100644 --- a/ly/params.ly +++ b/ly/params.ly @@ -64,6 +64,9 @@ slur_ratio = 1.0 / 3.0; slur_thickness = 1.2 * \stafflinethickness; +slur_force_blowfit = 0.5; +slur_beautiful = 0.5; + %{ Horizontal space between centre of notehead and slur. @@ -75,9 +78,6 @@ slur_y_free = 0.75 * \staffspace; slur_x_minimum = 1.5 * \staffspace; -bezier_asymmetry = 1.0; -bezier_beautiful = 2.0; - % The constants that define the valid areas for the middle control points % Used in de_uglyfy. Bit empirical. bezier_control1 = 1.5; @@ -91,9 +91,6 @@ bezier_pct_out_max = 0.8; bezier_pct_in_max = 1.2; bezier_area_steps = 1.0; -slur_force_blowfit = 0.5; -slur_beautiful = 0.5; - %{ Tie parameters @@ -126,6 +123,8 @@ method. gourlay_maxmeasures = 10.; +line_kern = \staffspace; + %{ Ross. page 151 lists these values, but we think that thick lines and kernings are too thick. @@ -143,9 +142,9 @@ barthick_thick = 6.0* \stafflinethickness; barthick_thin = 1.6*\stafflinethickness; barthick_score = 1.6*\stafflinethickness; -bracket_arch_thick = \staffspace / 3.0; +bracket_arch_thick = \staffspace / 4.0; bracket_width = 2.0 * \staffspace; -bracket_thick = 2.0 * \stafflinethickness; +bracket_thick = \staffspace / 4.0; bracket_arch_height = 1.5 * \staffspace; bracket_arch_width = \bracket_arch_height; bracket_arch_angle = 50.0; diff --git a/mutopia/Coriolan/clarinetti.ly b/mutopia/Coriolan/clarinetti.ly index b6beb3d4b7..06535c7893 100644 --- a/mutopia/Coriolan/clarinetti.ly +++ b/mutopia/Coriolan/clarinetti.ly @@ -16,8 +16,8 @@ copyright = "public domain"; $clarinetti_staff = \context Staff = clarinetti < \property Staff.midiInstrument = #"clarinet" - \property Staff.instrument = #"2 Clarinetti (B\\textflat)" - \property Staff.instr = #"Cl. (B\\textflat)" + \property Staff.instrument = #"2 Clarinetti\n(B\\textflat)" + \property Staff.instr = #"Cl.\n(B\\textflat)" % urg: can't; only My_midi_lexer: () parses pitch? %\property Staff.transposing = "bes" \property Staff.transposing = #-2 diff --git a/mutopia/Coriolan/coriolan.ly b/mutopia/Coriolan/coriolan.ly index 3c2043625c..9273d71dab 100644 --- a/mutopia/Coriolan/coriolan.ly +++ b/mutopia/Coriolan/coriolan.ly @@ -70,12 +70,19 @@ archi = \context StaffGroup = archi_group < \score{ < - %%? \property Score . textStyle = "italic" \legni \ottoni \$timpani_g \archi > + \header{ + title = "Coriolan"; + subtitle = "Ouverture"; + opus = "Opus 62"; + composer = "Ludwig van Beethoven (1770-1827)"; + enteredby = "JCN"; + copyright = "public domain"; + } \include "coriolan-paper.ly" \include "coriolan-midi.ly" } diff --git a/mutopia/Coriolan/corni.ly b/mutopia/Coriolan/corni.ly index 7db4bc7308..165fb0af94 100644 --- a/mutopia/Coriolan/corni.ly +++ b/mutopia/Coriolan/corni.ly @@ -16,8 +16,8 @@ copyright = "public domain"; $corni_staff = \context Staff = corni < \property Staff.midiInstrument = #"french horn" - \property Staff.instrument = #"2 Corni (E\\textflat)" - \property Staff.instr = #"Cor. (E\\textflat)" + \property Staff.instrument = #"2 Corni\n(E\\textflat)" + \property Staff.instr = #"Cor.\n(E\\textflat)" % urg: can't; only My_midi_lexer: () parses pitch? %\property Staff.transposing = "es" \property Staff.transposing = #3 diff --git a/mutopia/Coriolan/flauto-1.ly b/mutopia/Coriolan/flauto-1.ly index 7168dfece5..484f5e1337 100644 --- a/mutopia/Coriolan/flauto-1.ly +++ b/mutopia/Coriolan/flauto-1.ly @@ -10,9 +10,6 @@ copyright = "public domain"; \version "1.3.4"; flauto1 = \notes \relative c { - % do silly bar request to fix Staff_margin_engraver - \bar ".|"; - R1 *2 | c'''4-.\ff r r2 | R1 *3 | diff --git a/mutopia/Coriolan/timpani.ly b/mutopia/Coriolan/timpani.ly index 03d9158132..d000a5c929 100644 --- a/mutopia/Coriolan/timpani.ly +++ b/mutopia/Coriolan/timpani.ly @@ -147,7 +147,7 @@ timpani = \notes \relative c { $timpani_staff = \context Staff = timpani < \property Staff.midiInstrument = #"timpani" - \property Staff.instrument = #"2 Timpani (C-G)" + \property Staff.instrument = #"2 Timpani\n(C-G)" \property Staff.instr = #"Timp." \clef "bass"; \notes< diff --git a/mutopia/Coriolan/trombe.ly b/mutopia/Coriolan/trombe.ly index 64ce71f818..1d6d6f2f77 100644 --- a/mutopia/Coriolan/trombe.ly +++ b/mutopia/Coriolan/trombe.ly @@ -16,8 +16,8 @@ copyright = "public domain"; $trombe_staff = \context Staff = trombe < \property Staff.midiInstrument = #"trumpet" - \property Staff.instrument = #"2 Trombe (C)" - \property Staff.instr = #"Tbe." + \property Staff.instrument = #"2 Trombe\n(C)" + \property Staff.instr = #"Tbe.\n(C)" %\notes \context Voice=trombe < \notes \context Staff=trombe < % \global diff --git a/mutopia/Coriolan/violoncello.ly b/mutopia/Coriolan/violoncello.ly index 7bf17458f0..27f80fbbc8 100644 --- a/mutopia/Coriolan/violoncello.ly +++ b/mutopia/Coriolan/violoncello.ly @@ -19,7 +19,7 @@ violoncello = \notes \relative c { c'1\ff ~ | c | f,4-. r r2 | - \property Staff.instr = #"Vc. \\& Cb." + \property Staff.instr = #"Vc.\nCb." r1 | c'1\ff ~ | c | @@ -486,7 +486,7 @@ violoncello = \notes \relative c { $violoncello_staff = \context Staff = violoncello < \property Staff.midiInstrument = #"cello" - \property Staff.instrument = #"Violoncello" + \property Staff.instrument = #"Violoncello\ne\nContrabasso" \property Staff.instr = #"Vc." \clef "bass"; \notes \context Voice=one< diff --git a/ps/lily.ps b/ps/lily.ps index 72da29ec20..0926c8fc5a 100644 --- a/ps/lily.ps +++ b/ps/lily.ps @@ -159,7 +159,7 @@ %6 0 0 %5a - arch_thick arch_height add half_height bracket_thick sub arch_width add + bracket_thick arch_height add half_height arch_thick sub arch_width add arch_angle arch_height -0.15 mul bracket_traject %5b 1 half_height @@ -167,17 +167,17 @@ %5c 0 half_height %4a - arch_thick half_height bracket_thick sub + bracket_thick half_height arch_thick sub 0 arch_height 0.4 mul bracket_traject %4b - arch_thick arch_height add half_height bracket_thick sub arch_width add + bracket_thick arch_height add half_height arch_thick sub arch_width add arch_angle arch_height -0.25 mul bracket_traject %4c - arch_thick arch_height add half_height bracket_thick sub arch_width add + bracket_thick arch_height add half_height arch_thick sub arch_width add %3 - arch_thick half_height bracket_thick sub + bracket_thick half_height arch_thick sub %2 - arch_thick 0 + bracket_thick 0 %1 0 0 } bind def @@ -205,7 +205,7 @@ /arch_width exch def /arch_angle exch def % - bracket_height 2 div arch_thick add /half_height exch def + bracket_height 2 div bracket_thick add /half_height exch def % urg: the only Level-2 PS, check effect in print % true setstrokeadjust 1 setlinecap diff --git a/scm/generic-property.scm b/scm/generic-property.scm index 7ddd22dff2..b105f31233 100644 --- a/scm/generic-property.scm +++ b/scm/generic-property.scm @@ -148,7 +148,7 @@ (list 'tupletBracketVisibility symbol-or-boolean? 'tuplet-bracket-visibility) )) ) - + (define generic-voice-properties (list generic-stem-properties diff --git a/scm/lily.scm b/scm/lily.scm index 841ecade60..4fb33ee1f1 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -328,6 +328,7 @@ ; fixed in 1.3.4 ;(ly-gulp-file "lily.ps") + ;; URG: now we can't use scm output without Lily (regexp-substitute/global #f "\n" (ly-gulp-file "lily.ps") 'pre " %\n" 'post) "}" "\\input lilyponddefs \\turnOnPostScript")) @@ -581,6 +582,7 @@ (define (header-end) (string-append + ;; URG: now we can't use scm output without Lily (ly-gulp-file "lilyponddefs.ps") " {exch pop //systemdict /run get exec} " (ly-gulp-file "lily.ps") @@ -908,10 +910,13 @@ (close port) content)) +;; urg: Use when standalone, do: +;; (define (ly-gulp-file name) (scm-gulp-file name)) (define (scm-gulp-file name) (set! %load-path - (cons (string-append - (getenv 'LILYPONDPREFIX) "/ps") %load-path)) + (cons (string-append (getenv 'LILYPONDPREFIX) "/ly") + (cons (string-append (getenv 'LILYPONDPREFIX) "/ps") + %load-path))) (let ((path (%search-load-path name))) (if path (gulp-file path) -- 2.39.5