From: Han-Wen Nienhuys Date: Wed, 24 Mar 2004 13:08:47 +0000 (+0000) Subject: * input/regression/tuplet-gap.ly: new file. X-Git-Tag: release/2.1.35~17 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=50aadb5e51f951a922b818cf93ccb5a5d626101f;p=lilypond.git * input/regression/tuplet-gap.ly: new file. * lily/tuplet-bracket.cc (make_bracket): take gap interval. (print): compute gap length from number size, include italic correction. * scm/define-grobs.scm (all-grob-descriptions): remove gap from tuplet-bracket * scm/paper.scm (set-default-paper-size): new function, to be called at toplevel. (set-paper-size): new function, to be called inside \paper {} (set-default-paper-size): new function, to be called at toplevel. * lily/paper-def.cc (LY_DEFINE): ly:paper-def?: new function. --- diff --git a/ChangeLog b/ChangeLog index 5b9ba6c5d9..b19f54124f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,21 @@ 2004-03-24 Han-Wen Nienhuys + * input/regression/tuplet-gap.ly: new file. + + * lily/tuplet-bracket.cc (make_bracket): take gap interval. + (print): compute gap length from number size, include italic + correction. + + * scm/define-grobs.scm (all-grob-descriptions): remove gap from + tuplet-bracket + + * scm/paper.scm (set-default-paper-size): new function, to be + called at toplevel. + (set-paper-size): new function, to be called inside \paper {} + (set-default-paper-size): new function, to be called at toplevel. + + * lily/paper-def.cc (LY_DEFINE): ly:paper-def?: new function. + * lily/beam-performer.cc (process_music): idem. * lily/slur-performer.cc (process_music): stop melisma for stop event. diff --git a/Documentation/user/changing-defaults.itely b/Documentation/user/changing-defaults.itely index 56168b0dee..0ec0a80c88 100644 --- a/Documentation/user/changing-defaults.itely +++ b/Documentation/user/changing-defaults.itely @@ -1965,13 +1965,14 @@ The predefined command @code{\newpage} also does this. @cindex page size @cindex @code{papersize} -To change the paper size, use the following Scheme code: +To change the paper size, there are two commands, @example + #(set-default-paper-size "a4") \paper@{ #(set-paper-size "a4") @} @end example - +The second one sets the size of the @code{\paper} block that it's in. @refcommands diff --git a/input/regression/tuplet-gap.ly b/input/regression/tuplet-gap.ly new file mode 100644 index 0000000000..e23799f21b --- /dev/null +++ b/input/regression/tuplet-gap.ly @@ -0,0 +1,18 @@ +\header { + + texidoc = "The size of the tuplet bracket gap is adjusted to the + width of the text." + + } + +\paper { + indent = 0.0\mm + raggedright = ##t +} + +\score{ + \notes \relative c'' { + \set tupletNumberFormatFunction = #fraction-tuplet-formatter + \times 17/12 { c8 c4 c8 c8} + } +} diff --git a/input/test/page-breaks.ly b/input/test/page-breaks.ly index ff03bf09e2..2a988bf05a 100644 --- a/input/test/page-breaks.ly +++ b/input/test/page-breaks.ly @@ -17,6 +17,7 @@ piece = "Piece" } + \score { \context Staff \notes \relative c' { %% 16: ideally cramped @@ -24,10 +25,7 @@ \repeat unfold 17 { a b c d \break } } \paper { - %% #(set-paper-size "a6") - linewidth = 80\mm - vsize = 150 \mm - hsize = 105 \mm + #(set-paper-size "a6") #(define page-breaking ly:optimal-page-breaks) } } diff --git a/lily/include/tuplet-bracket.hh b/lily/include/tuplet-bracket.hh index b875a2f2cb..620f6b28cc 100644 --- a/lily/include/tuplet-bracket.hh +++ b/lily/include/tuplet-bracket.hh @@ -33,7 +33,7 @@ public: DECLARE_SCHEME_CALLBACK (before_line_breaking, (SCM )); static Stencil make_bracket (Grob *me, Axis protusion_axis, Offset dz, Drul_array height, - Real gap, Drul_array widen, + Interval gap, Drul_array widen, Drul_array shorten); static Direction get_default_dir (Grob*); }; diff --git a/lily/lily-guile.cc b/lily/lily-guile.cc index 3b2b856402..9562ba7bd5 100644 --- a/lily/lily-guile.cc +++ b/lily/lily-guile.cc @@ -150,9 +150,10 @@ index_set_cell (SCM s, Direction d, SCM v) } LY_DEFINE (ly_warning,"ly:warn", 1, 0, 0, - (SCM str),"Scheme callable function to issue the warning @code{msg}.") + (SCM str), "Scheme callable function to issue the warning @code{msg}.") { SCM_ASSERT_TYPE (gh_string_p (str), str, SCM_ARG1, __FUNCTION__, "string"); + progress_indication ("\n"); warning ("lily-guile: " + ly_scm2string (str)); return SCM_BOOL_T; } diff --git a/lily/ottava-bracket.cc b/lily/ottava-bracket.cc index ef0f02404c..e1e033a9d3 100644 --- a/lily/ottava-bracket.cc +++ b/lily/ottava-bracket.cc @@ -131,11 +131,12 @@ Ottava_bracket::print (SCM smob) edge_height[RIGHT] = 0.0; Stencil b; + Interval empty; if (!bracket_span_points.is_empty () && bracket_span_points.length () > 0.001) b = Tuplet_bracket::make_bracket (me, Y_AXIS, Offset (bracket_span_points.length (), 0), edge_height, - 0.0, + empty, flare, shorten); /* diff --git a/lily/paper-def.cc b/lily/paper-def.cc index 99e371a999..144a944a61 100644 --- a/lily/paper-def.cc +++ b/lily/paper-def.cc @@ -151,3 +151,13 @@ unsmob_paper (SCM x) return dynamic_cast (unsmob_music_output_def (x)); } + +LY_DEFINE (ly_paper_def_p, "ly:paper-def?", + 1, 0,0, (SCM def), + "Is @var{def} a paper definition?") +{ + Paper_def *op = dynamic_cast (unsmob_music_output_def (def)); + + bool pap = op; + return gh_bool2scm (pap); +} diff --git a/lily/piano-pedal-bracket.cc b/lily/piano-pedal-bracket.cc index 74e09979fd..b0d87558e9 100644 --- a/lily/piano-pedal-bracket.cc +++ b/lily/piano-pedal-bracket.cc @@ -84,7 +84,7 @@ Piano_pedal_bracket::print (SCM smob) m = Tuplet_bracket::make_bracket (me, Y_AXIS, Offset (span_points.length (), 0), height, - 0.0, + Interval (), flare, shorten); } m.translate_axis (span_points[LEFT] diff --git a/lily/tuplet-bracket.cc b/lily/tuplet-bracket.cc index 2ef78c968c..b75b602b54 100644 --- a/lily/tuplet-bracket.cc +++ b/lily/tuplet-bracket.cc @@ -169,11 +169,12 @@ Tuplet_bracket::print (SCM smob) SCM number = me->get_property ("text"); Paper_def *pap = me->get_paper (); - if (gh_string_p (number) && number_visibility) + Stencil num; + if (gh_string_p (number) && number_visibility) { SCM properties = Font_interface::text_font_alist_chain (me); SCM snum = Text_item::interpret_markup (pap->self_scm (), properties, number); - Stencil num = *unsmob_stencil (snum); + num = *unsmob_stencil (snum); num.align_to (X_AXIS, CENTER); num.translate_axis (w/2, X_AXIS); num.align_to (Y_AXIS, CENTER); @@ -198,8 +199,10 @@ Tuplet_bracket::print (SCM smob) if (bracket_visibility) { Real ss = Staff_symbol_referencer::staff_space (me); - Real gap = robust_scm2double (me->get_property ("gap"), 1.0) - * ss; + Real gap=0.; + + if (!num.extent (X_AXIS).is_empty ()) + gap = num.extent (X_AXIS).length () + 1.0; SCM fl = me->get_property ("bracket-flare"); SCM eh = me->get_property ("edge-height"); @@ -220,7 +223,12 @@ Tuplet_bracket::print (SCM smob) Stencil brack = make_bracket (me, Y_AXIS, Offset (w, ry - ly), - height, gap, + height, + /* + 0.1 = more space at right due to italics + TODO: use italic correction of font. + */ + Interval (-0.5, 0.5) * gap + 0.1, flare, shorten); mol.add_stencil (brack); } @@ -241,7 +249,7 @@ Tuplet_bracket::make_bracket (Grob *me, // for line properties. Axis protusion_axis, Offset dz, Drul_array height, - Real gap, + Interval gap, Drul_array flare, Drul_array shorten) { @@ -260,14 +268,11 @@ Tuplet_bracket::make_bracket (Grob *me, // for line properties. straight_corners[d] += - d * shorten[d] /length * dz; } while (flip (&d) != LEFT); - /* - UGH: the shortening factor is magic. - */ - gap = gap flare_corners = straight_corners; @@ -537,5 +542,5 @@ Tuplet_bracket::add_column (Grob*me, Item*n) ADD_INTERFACE (Tuplet_bracket,"tuplet-bracket-interface", "A bracket with a number in the middle, used for tuplets.", - "note-columns bracket-flare edge-height shorten-pair padding gap left-position right-position bracket-visibility number-visibility thickness direction"); + "note-columns bracket-flare edge-height shorten-pair padding left-position right-position bracket-visibility number-visibility thickness direction"); diff --git a/ly/declarations-init.ly b/ly/declarations-init.ly index 428c78d248..c2b185f66e 100644 --- a/ly/declarations-init.ly +++ b/ly/declarations-init.ly @@ -51,6 +51,10 @@ melismaEnd = #(make-span-event 'ManualMelismaEvent STOP) pt = #(/ in 72.27) cm = #(* 10 mm) + raggedright = ##f + packed = ##f + #(define $is-paper #t) + #(define font-defaults '((font-encoding . music)) ) @@ -67,7 +71,7 @@ melismaEnd = #(make-span-event 'ManualMelismaEvent STOP) \include "engraver-init.ly" } -#(set-paper-size "a4") +#(set-default-paper-size "a4") %{ @@ -81,7 +85,6 @@ for the format of myfonts, see font.scm %} - paperEleven = \paper { #(paper-set-staff-size (* 11.0 pt)) } diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index e0ff307d61..3f096cb215 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -1184,7 +1184,6 @@ (TupletBracket . ( - (gap . 1.5) (padding . 1.1) (thickness . 1.6) (edge-height . (0.7 . 0.7)) diff --git a/scm/paper.scm b/scm/paper.scm index e97e11bfbb..ae0ca635b5 100644 --- a/scm/paper.scm +++ b/scm/paper.scm @@ -30,8 +30,12 @@ "Set the default staff size, where SZ is thought to be in PT." (let* ((old-mod (current-module)) (pap (eval '$defaultpaper old-mod)) + + + ;; Huh? Why is it necessary to clone object? (new-paper (ly:output-def-clone pap)) (new-scope (ly:output-def-scope new-paper))) + (set-current-module new-scope) (paper-set-staff-size (* sz (eval 'pt new-scope))) (set-current-module old-mod) @@ -54,8 +58,6 @@ (module-define! m 'hsize w) (module-define! m 'vsize h) (module-define! m 'linewidth (- w (* 20 mm))) - (module-define! m 'raggedright #f) - (module-define! m 'packed #f) (module-define! m 'indent (/ w 14)) ;; page layout - what to do with (printer specific!) margin settings? @@ -64,19 +66,36 @@ (module-define! m 'head-sep (* 4 mm)) (module-define! m 'foot-sep (* 4 mm)))) -(define-public (set-paper-size name) + + +(define (internal-set-paper-size module name) (let* ((entry (assoc name paper-alist)) - (pap (eval '$defaultpaper (current-module))) - (new-paper (ly:output-def-clone pap)) - (m (ly:output-def-scope new-paper)) - (mm (eval 'mm m))) + (is-paper? (module-defined? module '$is-paper)) + (mm (eval 'mm module))) - (if (pair? entry) - (begin - (set! entry (eval (cdr entry) m)) - (set-paper-dimensions m (car entry) (cdr entry)) - (module-define! m 'papersize name) - (module-define! m 'papersizename name) - (set-paper-dimensions m (car entry) (cdr entry)) - (module-define! (current-module) '$defaultpaper new-paper)) - (ly:warning (string-append "Unknown papersize: " name))))) + (cond + ((not is-paper?) + (ly:warning "This is not a \\paper {} object:") + (display module)) + ((pair? entry) + (set! entry (eval (cdr entry) module)) + (set-paper-dimensions module (car entry) (cdr entry)) + (module-define! module 'papersize name) + (module-define! module 'papersizename name) + (set-paper-dimensions module (car entry) (cdr entry))) + (else + (ly:warn (string-append "Unknown papersize: " name)))) + + )) + +(define-public (set-default-paper-size name) + (internal-set-paper-size (ly:output-def-scope (eval '$defaultpaper (current-module))) + name)) + +(define-public (set-paper-size name) + (if (module-defined? (current-module) '$is-paper) + (internal-set-paper-size (current-module) name) + + ;;; TODO: should raise (generic) exception with throw, and catch + ;;; that in parse-scm.cc + (ly:warn "Must use #(set-paper-size .. ) within \\paper { ... }"))) diff --git a/scripts/convert-ly.py b/scripts/convert-ly.py index 8a970b4ed2..2a98feb367 100644 --- a/scripts/convert-ly.py +++ b/scripts/convert-ly.py @@ -2031,6 +2031,14 @@ def conv (str): conversions.append (((2,1,33), conv, '''breakAlignOrder -> break-align-orders.''')) +def conv (str): + str = re.sub (r"\(set-paper-size", + "(set-default-paper-size",str) + return str + +conversions.append (((2,1,34), conv, + '''set-paper-size -> set-default-paper-size.''')) + ################################ # END OF CONVERSIONS ################################