* 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.
2004-03-24 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ * 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.
@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
--- /dev/null
+\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}
+ }
+}
piece = "Piece"
}
+
\score {
\context Staff \notes \relative c' {
%% 16: ideally cramped
\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)
}
}
DECLARE_SCHEME_CALLBACK (before_line_breaking, (SCM ));
static Stencil make_bracket (Grob *me, Axis protusion_axis,
Offset dz, Drul_array<Real> height,
- Real gap, Drul_array<Real> widen,
+ Interval gap, Drul_array<Real> widen,
Drul_array<Real> shorten);
static Direction get_default_dir (Grob*);
};
}
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;
}
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);
/*
return dynamic_cast<Paper_def*> (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<Paper_def*> (unsmob_music_output_def (def));
+
+ bool pap = op;
+ return gh_bool2scm (pap);
+}
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]
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);
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");
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);
}
Axis protusion_axis,
Offset dz,
Drul_array<Real> height,
- Real gap,
+ Interval gap,
Drul_array<Real> flare,
Drul_array<Real> shorten)
{
straight_corners[d] += - d * shorten[d] /length * dz;
} while (flip (&d) != LEFT);
- /*
- UGH: the shortening factor is magic.
- */
- gap = gap <?
- (0.66 * (straight_corners[RIGHT] - straight_corners[LEFT]).length ());
-
+
+ if (gap.is_empty())
+ gap = Interval (0,0);
do {
- gap_corners[d] = (dz * 0.5) + d * 0.5 * gap / length * dz;
+ gap_corners[d] = (dz * 0.5) + gap[d] / length * dz;
} while (flip (&d) != LEFT);
Drul_array<Offset> flare_corners = straight_corners;
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");
pt = #(/ in 72.27)
cm = #(* 10 mm)
+ raggedright = ##f
+ packed = ##f
+ #(define $is-paper #t)
+
#(define font-defaults
'((font-encoding . music))
)
\include "engraver-init.ly"
}
-#(set-paper-size "a4")
+#(set-default-paper-size "a4")
%{
%}
-
paperEleven = \paper {
#(paper-set-staff-size (* 11.0 pt))
}
(TupletBracket
. (
- (gap . 1.5)
(padding . 1.1)
(thickness . 1.6)
(edge-height . (0.7 . 0.7))
"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)
(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?
(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 { ... }")))
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
################################