--- /dev/null
+\score{
+ \notes\relative c''{
+ \time 2/4;
+ c()c
+ c~c\break
+ }
+ \paper{
+ linewidth=-1.\mm;
+ slur_x_minimum=40.0*\interline;
+ }
+}
--- /dev/null
+\score{
+ \notes\relative c''{
+ \time 2/4;
+ c~c\break
+ c()c
+ }
+ \paper{
+ linewidth=-1.\mm;
+ tie_x_minimum=40.0*\interline;
+ }
+}
-# intl/Makefile
+# intl/GNUmakefile
depth = ..
-
NAME = intl
-
-# MODULE_CXXFLAGS += -D_REENTRANT
-MAINTARGET = $(LIBRARY)# huh?
-
SED_FILES = $(wildcard *.sed)
# should be set by configure...
EXTRA_DIST_FILES = Makefile.in.dist cat-compat.c.dist ChangeLog libintl.inst $(SED_FILES)
+STEPMAKE_TEMPLATES=c library
+$(outdir)/library.a:
+ @echo "*** To install libintl type 'make lib; make install-lib' ***"
-STEPMAKE_TEMPLATES=c
include $(depth)/make/stepmake.make
-default:
- @echo "to install libintl type 'make lib; make install-lib'"
-
lib: $(LIBRARY)
LIBINTL = $(LIBRARY)
-install-lib: $(LIBINTL)
# localinstall: $(LIBINTL)
+install-lib: $(LIBINTL)
$(INSTALL) -d $(includedir)
# $(INSTALL) libintl.h $(includedir)
$(INSTALL) libintl.inst $(includedir)/libintl.h
ln -s $(LIB_PREFIX)intl$(LIB_SUFFIX).$(VERSION) $(libdir)/$(LIB_PREFIX)intl$(LIB_SUFFIX)
else
$(INSTALL) -d $(libdir)
- echo libintl: $(LIBINTL)
- echo libdir: $(libdir)
- $(INSTALL) $(LIBINTL) $(libdir)
+ $(INSTALL) $(LIBINTL) $(libdir)/$(INSTALL_LIBRARY)
endif
localuninstall:
- rm -f $(inludedir)/libintl.h
+ rm -f $(includedir)/libintl.h
rm -f $(libdir)/libintl.{so*,a}
#ifndef SLUR_HH
#define SLUR_HH
-#include "directional-spanner.hh"
-#include "lily-proto.hh"
-#include "parray.hh"
#include "bow.hh"
+#include "rod.hh"
/**
A #Bow# which tries to drape itself around the stems too.
virtual void do_add_processing ();
virtual void do_pre_processing ();
virtual void do_substitute_dependency (Score_element*, Score_element*);
+ virtual Interval do_width () const;
+ Array<Rod> get_rods () const;
};
#endif // SLUR_HH
*/
Direction stem_xdir_;
+public:
Link_array<Note_head> head_l_arr_;
Link_array<Rest> rest_l_arr_;
-public:
-
/// how many abbrev beam don't reach stem?
int beam_gap_i_;
virtual bool do_try_music (Music*);
virtual void do_process_requests ();
virtual void process_acknowledged ();
+
public:
VIRTUAL_COPY_CONS(Translator);
Tie_engraver();
-
};
#endif /* CTIE_ENGRAVER_HH */
#define TIE_HH
#include "bow.hh"
+#include "rod.hh"
/**
Connect two noteheads.
class Tie : public Bow
{
public:
- Tie ();
- void set_head (Direction, Note_head*head_l);
-
-
- VIRTUAL_COPY_CONS(Score_element);
-
- bool same_pitch_b_;
- Drul_array<Note_head *> head_l_drul_;
+ Tie ();
+ void set_head (Direction, Note_head*head_l);
+
+
+ VIRTUAL_COPY_CONS(Score_element);
+
+ bool same_pitch_b_;
+ Drul_array<Note_head *> head_l_drul_;
protected:
- virtual void do_add_processing ();
- virtual void do_post_processing ();
- virtual void set_default_dir();
- virtual void do_substitute_dependency (Score_element*,Score_element*);
- Array<Offset> get_controls () const;
+ virtual void do_add_processing ();
+ virtual void do_post_processing ();
+ virtual void set_default_dir();
+ virtual void do_substitute_dependency (Score_element*,Score_element*);
+ virtual Interval do_width () const;
+ Array<Rod> get_rods () const;
+
+ Array<Offset> get_controls () const;
};
+
#endif // TIE_HH
Real internote_f = interline_f / 2;
// URG
Real notewidth_f = paper ()->note_width () * 0.8;
- Real slur_min = paper ()->get_var ("slur_x_minimum");
/*
[OSU]: slur and tie placement
dy_f_drul_[u] += dir_ * internote_f;
dy_f_drul_[d] = dy_f_drul_[(Direction)-d];
-
- /*
- urg, this is broken
- but who *is* going to assure that dx >= slur_min?
- */
-#if 0
-
- if (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT] < slur_min)
- {
- // huh? what was this supposed to do?
-// dx_f_drul_[d] -= d * slur_min
-// - (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT]);
- dx_f_drul_[d] = dx_f_drul_[(Direction)-d] + d * slur_min;
- }
-#endif
}
}
while (flip(&d) != LEFT);
Real ratio_f = abs (d_off.y () / d_off.x ());
if (ratio_f > damp_f)
- dy_f_drul_[(Direction)(- dir_ * sign (d_off.y ()))] -=
- dir_ * (damp_f - ratio_f) * d_off.x ();
+ dy_f_drul_[(Direction)(- dir_ * sign (d_off.y ()))] +=
+ dir_ * (ratio_f - damp_f) * d_off.x ();
}
Array<Offset>
return notes;
}
+Interval
+Slur::do_width () const
+{
+ Real min_f = paper ()->get_var ("slur_x_minimum");
+ Interval width_int = Bow::do_width ();
+ return width_int.length () < min_f ? Interval (0, min_f) : width_int;
+}
+
+Array<Rod>
+Slur::get_rods () const
+{
+ Array<Rod> a;
+ Rod r;
+ r.item_l_drul_ = spanned_drul_;
+ r.distance_f_ = do_width ().length ();
+ a.push (r);
+ return a;
+}
*/
if (i && scol_l (i - 1)->breakable_b_)
{
- // fixed: probably should set minimum (rod/spring)?
- cols_[i-1].width_[RIGHT] += interline_f;
+ // one interline minimum at start of bar
+
+ // cols_[i].width_[RIGHT] += interline_f;
+ cols_[i].width_[RIGHT] = cols_[i].width_[RIGHT] >? interline_f;
+
// should adjust dist too?
ideal_arr[i-1] = ideal_arr[i-1] >? (2 * interline_f);
}
*/
if (i + 1 < cols_.size () && scol_l(i+1)->breakable_b_)
{
- // hmm, how bout?
+ // one interline minimum seems ok for last column too?
dist = dist >? interline_f;
+ // set minimum rod
/*
- uhuh, this code looks fine, already?
- someone was junking this last "hinterfleisch" whitespace?!
+ urg: simply *adding* an interline leaves big gaps at
+ end of measure in star-spangled-banner (after lyrics
+ at eom).
- but this seems to be fixed now :-)
- */
- // set minimum rod
- cols_[i].width_[RIGHT] += interline_f;
+ cols_[i].width_[RIGHT] += interline_f; // before
+
+ having a minimum of one interline solves this problem
+ in most (but not all??) cases.
+
+ for music without lyrics (esp. when set very tightly),
+ adding an interline looks good: probably because this
+ hides a bug that allows the last note's "hinterfleish"
+ to be removed (e.g., see wtk1-fugue2: that's ugly now).
+ -- jcn
+ */
+
+ cols_[i].width_[RIGHT] = cols_[i].width_[RIGHT] >? interline_f;
}
// ugh, do we need this?
{
past_notes_pq_.insert (now_heads_[i]);
}
- now_heads_.clear( );
+ now_heads_.clear ();
+
+ Scalar dir (get_property ("tieydirection", 0));
+ Scalar dir2 (get_property ("ydirection", 0));
+
+ Direction tie_dir = CENTER;
+ if (dir.length_i () && dir.isnum_b ())
+ tie_dir = (Direction) sign (int(dir));
+ else if (dir2.length_i () && dir2.isnum_b ())
+ tie_dir = (Direction) sign (int (dir2));
for (int i=0; i< tie_p_arr_.size (); i++)
- {
+ {
+ tie_p_arr_[i]->dir_ = tie_dir;
typeset_element (tie_p_arr_[i]);
}
tie_p_arr_.clear ();
past_notes_pq_.delmin ();
}
-
-
ADD_THIS_TRANSLATOR(Tie_engraver);
// URG: share code with slur!
assert (head_l_drul_[LEFT] || head_l_drul_[RIGHT]);
- Real notewidth = paper ()->note_width ();
+ // URG
+ Real notewidth = paper ()->note_width () * 0.8;
Real interline_f = paper ()->interline_f ();
- Real tie_min = paper ()->get_var ("tie_x_minimum");
/*
[OSU]: slur and tie placement
// tie attached to outer notehead
if (!head_l_drul_[d])
{
-
- /*
- urg, this is broken
- but who *is* going to assure that dx >= tie_min?
- */
-#if 0
- if (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT] < tie_min)
- {
-// dx_f_drul_[d] -= d * tie_min
-// - (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT]);
- dx_f_drul_[d] = dx_f_drul_[(Direction)-d] + d * tie_min;
- }
-#endif
-
dy_f_drul_[d] = dy_f_drul_[(Direction) -d];
}
}
Real ratio_f = abs (d_off.y () / d_off.x ());
if (ratio_f > damp_f)
- dy_f_drul_[(Direction)(- dir_ * sign (d_off.y ()))] -=
- dir_ * (damp_f - ratio_f) * d_off.x ();
+ dy_f_drul_[(Direction)(- dir_ * sign (d_off.y ()))] +=
+ dir_ * (ratio_f - damp_f) * d_off.x ();
}
void
head_l_drul_[RIGHT] = new_l;
}
+Interval
+Tie::do_width () const
+{
+ Real min_f = paper ()->get_var ("tie_x_minimum");
+ Interval width_int = Bow::do_width ();
+ return width_int.length () < min_f ? Interval (0, min_f) : width_int;
+}
+
+Array<Rod>
+Tie::get_rods () const
+{
+ Array<Rod> a;
+ Rod r;
+ r.item_l_drul_ = spanned_drul_;
+ r.distance_f_ = do_width ().length ();
+ a.push (r);
+ return a;
+}
% OSU: suggested gap = ss / 5;
slur_x_gap = \interline / 5.0;
-slur_x_minimum = 2.0 * \interline;
-slur_slope_damping = 0.5;
+slur_x_minimum = 3.0 * \interline;
+
+% slope damping: keep dy/dx < slur_slope_damping
+slur_slope_damping = 0.6;
+
tie_x_minimum = \slur_x_minimum;
tie_x_gap = \slur_x_gap;
-tie_slope_damping = 0.3;
+tie_slope_damping = 0.8;
% ugh: rename to bow (in bezier.cc and fonts.doc too...)
% slur_thickness = 1.8 * \staffline;
slur_thickness = 1.4 * \staffline;
slur_height_limit = \staffheight;
-% mmm, try bit flatter slurs
-% slur_ratio = 1.0 / 3.0;
-slur_ratio = 0.3;
+% slur_ratio = 0.3;
+% try bit flatter slurs
+slur_ratio = 0.25;
slur_clip_ratio = 1.2;
slur_clip_height = 3.0 * \staffheight;
slur_clip_angle = 100.0;
\header {
filename = "wtk1-fugue2.ly";
- title = "Fuga a 3";
+ title = "Fuga II";
+ subtitle = "\\`a 3 voci";
description = "Das Wohltemperierte Clavier I, Fuga II (c-minor)";
opus = "BWV 847-Fuga";
source = "Henle's Urtext";
composer = "Johann Sebastian Bach (1685-1750)";
- enteredby = "HWN, WL";
+ enteredby = "hwn, wl, jcn";
copyright = "Public Domain";
}
f,16 g as4 g16 f e2 |
}
-
bassdux = \type Voice=three \notes \relative c' {
\clef bass;
R1 |
d c g' g,
%%30
\type Staff=bass <
- {\voicethree c2 ~ | c1 ~ | c1 }
- {\voicefour c,2 ~ | c1 ~ | c1 }
+ {\stemup c2 ~ | c1 ~ | c1 }
+ \type Voice=four {\stemdown c,2 ~ | c1 ~ | c1 }
>
}
-#empty
-
-$(configheader): $(depth)/config.h
- cp $< $@
-
$(configheader): $(depth)/config.h
cp $< $@
RANLIB_COMMAND=$(RANLIB) $@ || $(AR) ts $@ || true
# linker:
+# urg, i don't like this name, it's not what you'd expect
LIBRARY = $(outdir)/library.a
-SHAREDLIBRARY=$(outdir)/$(LIB_PREFIX)$(NAME).so
+
+INSTALL_LIBRARY = $(LIB_PREFIX)$(NAME)$(LIB_SUFFIX)
+SHARED_LIBRARY=$(outdir)/$(LIB_PREFIX)$(NAME).so