From: Jan Nieuwenhuizen Date: Wed, 1 Nov 2006 10:09:25 +0000 (+0100) Subject: Merge branch 'master' of git+ssh://repo.or.cz/srv/git/lilypond X-Git-Tag: release/2.10.0-2~35 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=f1be8fc9c6ff873ed9074dfb27fc898a8b001306;hp=dff1bf440f7d4cb71808a86240602e38bf148a86;p=lilypond.git Merge branch 'master' of git+ssh://repo.or.cz/srv/git/lilypond --- diff --git a/.gitignore b/.gitignore index 6a3858d251..d188512881 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ tags .gdbinit ?.ly *.midi +\#* diff --git a/ChangeLog b/ChangeLog index 59af023c93..d54fc65cfd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,9 @@ 2006-10-30 Jan Nieuwenhuizen - * Hand-force git changes to commit. Where is my changelog? + * python/convertrules.py (conv): Part 2 fixes vertical extent. + + * input/test/vertical-extent.ly: Fix and elaborate on vertical + staff extent. (Thanks Mats) 2006-10-29 Han-Wen Nienhuys diff --git a/Documentation/user/GNUmakefile b/Documentation/user/GNUmakefile index d58ce5c1bc..bab2506309 100644 --- a/Documentation/user/GNUmakefile +++ b/Documentation/user/GNUmakefile @@ -195,13 +195,7 @@ $(outdir)/%.png: %.png convert -geometry 50x50% $< $@ $(outdir)/%.png: %.eps - convert $< $@ - -$(outdir)/%.eps: %.png - convert $< $@ - -$(outdir)/%.eps: %.eps - cp $< $@ + gs -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -q -sOutputFile=$@ -sDEVICE=png16m -dEPSCrop -dNOPAUSE -f $< -c quit $(outdir)/%.pdf: %.png convert $< $@ diff --git a/buildscripts/git-update-changelog.py b/buildscripts/git-update-changelog.py index fb6e01a5ae..23390b1127 100644 --- a/buildscripts/git-update-changelog.py +++ b/buildscripts/git-update-changelog.py @@ -9,6 +9,7 @@ import optparse def read_pipe (x): print 'pipe', x return os.popen (x).read () + def system (x): print x return os.system (x) @@ -45,6 +46,9 @@ class Commit: return files + def has_patch (self): + return self.touched_files () <> [] + def apply (self, add_del_files): def note_add_file (x): add_del_files.append (('add', x.group (1))) @@ -80,9 +84,17 @@ def parse_commit_log (log): c = Commit (locals ()) return c -def parse_add_changes (from_commit): - - log = read_pipe ('git log %(from_commit)s..' % locals ()) +def parse_add_changes (from_commit, max_count=0): + opt = '' + rest = '..' + if max_count: + + # fixme. + assert max_count == 1 + opt = '--max-count=%d' % max_count + rest = '' + + log = read_pipe ('git log %(opt)s %(from_commit)s%(rest)s' % locals ()) log = log[len ('commit '):] log = log.strip () @@ -131,14 +143,21 @@ Run this file from the CVS directory, with --git-dir log = open ('ChangeLog').read () - if not options.start: - print 'Must set start committish.' - sys.exit (1) - if options.gitdir: os.environ['GIT_DIR'] = options.gitdir - - commits = parse_add_changes (options.start) + + + if not args: + if not options.start: + print 'Must set start committish.' + sys.exit (1) + + commits = parse_add_changes (options.start) + else: + commits = [] + for a in args: + commits += parse_add_changes (a, max_count=1) + if not commits: return @@ -150,9 +169,18 @@ Run this file from the CVS directory, with --git-dir log = log[len (first):] file_adddel = [] - final_log = '' - for c in commits: + collated_log = '' + collated_message = '' + + while commits: + c = commits[0] + commits = commits[1:] + + if not c.has_patch (): + print 'patchless commit (merge?)' + continue + print 'patch ', c.committish try: c.apply (file_adddel) @@ -168,23 +196,23 @@ Run this file from the CVS directory, with --git-dir new_log += header (last_commit) - new_log = changelog_body (c) + new_log + collated_log = changelog_body (c) + collated_log last_commit = c -# FIXME: correct fix? -# final_log += self.message + '\n' - final_log += log - + collated_message += c.message + '\n' + + for (op, f) in file_adddel: if op == 'del': system ('cvs remove %(f)s' % locals ()) if op == 'add': system ('cvs add %(f)s' % locals ()) - new_log = header (last_commit) + new_log + '\n' + if last_commit: + collated_log = header (last_commit) + collated_log + '\n' - log = new_log + log + log = collated_log + log try: os.unlink ('ChangeLog~') @@ -194,8 +222,14 @@ Run this file from the CVS directory, with --git-dir os.rename ('ChangeLog', 'ChangeLog~') open ('ChangeLog', 'w').write (log) - open ('.msg','w').write (final_log) - print 'cvs commit -F .msg ' + open ('.msg','w').write (collated_message) + print '\nCommit message\n**\n%s\n**\n' % collated_message + print '\nRun:\n\n\tcvs commit -F .msg\n\n' + + + if commits: + print 'Commits left to do:' + print ' '.join ([c.committish for c in commits]) main () diff --git a/input/regression/tie-semi-single.ly b/input/regression/tie-semi-single.ly new file mode 100644 index 0000000000..ccd1c4a9e1 --- /dev/null +++ b/input/regression/tie-semi-single.ly @@ -0,0 +1,30 @@ + +\header { + + + texidoc = "Like normal ties, single semities (LaissezVibrerTie or +RepeatTie) get their direction from the stem direction, and may be +tweaked with @code{#'direction}." + + +} +\version "2.9.27" +\layout{ragged-right=##t} + +{ + r4 + c'\laissezVibrer\repeatTie + \stemUp + b'\laissezVibrer\repeatTie + r + + \stemDown + b'\laissezVibrer\repeatTie + r + c''\laissezVibrer\repeatTie + r + + \override LaissezVibrerTie #'direction = #DOWN + \override RepeatTie #'direction = #DOWN + c''\laissezVibrer_"override"\repeatTie +} diff --git a/input/test/vertical-extent.ly b/input/test/vertical-extent.ly index 1d8aa9d366..16d8850ced 100644 --- a/input/test/vertical-extent.ly +++ b/input/test/vertical-extent.ly @@ -5,8 +5,8 @@ \header { texidoc = " Vertical extents may increased by setting @code{\override VerticalAxisGroup #'minimum-Y-extent}, -@code{extraVerticalExtent}, and @code{verticalExtent}. In this example, -@code{verticalExtent} is increased. +@code{extra-Y-extent}, and @code{Y-extent}. In this example, +@code{Y-extent} is increased. " } \score { diff --git a/lily/include/tie-configuration.hh b/lily/include/tie-configuration.hh index 0594de6eaf..cd3bfe3998 100644 --- a/lily/include/tie-configuration.hh +++ b/lily/include/tie-configuration.hh @@ -44,6 +44,7 @@ public: Bezier get_transformed_bezier (Tie_details const &) const; Bezier get_untransformed_bezier (Tie_details const &) const; Real height (Tie_details const&) const; + int column_span_length () const; static int compare (Tie_configuration const &a, Tie_configuration const &b); diff --git a/lily/include/tie-formatting-problem.hh b/lily/include/tie-formatting-problem.hh index 08b823fc83..5d46129fe5 100644 --- a/lily/include/tie-formatting-problem.hh +++ b/lily/include/tie-formatting-problem.hh @@ -37,6 +37,7 @@ struct Tie_specification Tie_specification (); int column_span () const; + void get_tie_manual_settings (Grob *); }; struct Tie_configuration_variation diff --git a/lily/semi-tie.cc b/lily/semi-tie.cc index 854dd0302e..c5a514b535 100644 --- a/lily/semi-tie.cc +++ b/lily/semi-tie.cc @@ -34,6 +34,8 @@ SCM Semi_tie::calc_control_points (SCM smob) { Grob *me = unsmob_grob (smob); + (void) me->get_property ("direction"); + if (Semi_tie_column::has_interface (me->get_parent (Y_AXIS))) { me->get_parent (Y_AXIS)->get_property ("positioning-done"); @@ -47,24 +49,6 @@ Semi_tie::calc_control_points (SCM smob) return SCM_UNSPECIFIED; } -MAKE_SCHEME_CALLBACK(Semi_tie, calc_direction, 1) -SCM -Semi_tie::calc_direction (SCM smob) -{ - Grob *me = unsmob_grob (smob); - if (Semi_tie_column::has_interface (me->get_parent (Y_AXIS))) - { - me->get_parent (Y_AXIS)->get_property("positioning-done"); - } - else - { - programming_error ("lv tie without Semi_tie_column"); - set_grob_direction (me, UP); - } - - return SCM_UNSPECIFIED; -} - int Semi_tie::get_position (Grob *me) { diff --git a/lily/tie-configuration.cc b/lily/tie-configuration.cc index 438d22e2c7..2e15eb72eb 100644 --- a/lily/tie-configuration.cc +++ b/lily/tie-configuration.cc @@ -74,6 +74,12 @@ Tie_configuration::get_untransformed_bezier (Tie_details const &details) const details.ratio_); } +int +Tie_configuration::column_span_length () const +{ + return column_ranks_[RIGHT] - column_ranks_[LEFT]; +} + Real Tie_configuration::distance (Tie_configuration const &a, Tie_configuration const &b) diff --git a/lily/tie-formatting-problem.cc b/lily/tie-formatting-problem.cc index 8adc406227..d22d54bb6a 100644 --- a/lily/tie-formatting-problem.cc +++ b/lily/tie-formatting-problem.cc @@ -288,20 +288,10 @@ Tie_formatting_problem::from_ties (vector const &ties) for (vsize i = 0; i < ties.size (); i++) { Tie_specification spec; + + spec.get_tie_manual_settings (ties[i]); - if (scm_is_number (ties[i]->get_property_data ("direction"))) - { - spec.manual_dir_ = to_dir (ties[i]->get_property ("direction")); - spec.has_manual_dir_ = true; - } - - spec.position_ = Tie::get_position (ties[i]); - if (scm_is_number (ties[i]->get_property ("staff-position"))) - { - spec.manual_position_ = scm_to_double (ties[i]->get_property ("staff-position")); - spec.has_manual_position_ = true; - spec.position_ = int (my_round (spec.manual_position_)); - } + do { @@ -315,19 +305,19 @@ Tie_formatting_problem::from_ties (vector const &ties) } void -Tie_formatting_problem::from_semi_ties (vector const &lv_ties, Direction head_dir) +Tie_formatting_problem::from_semi_ties (vector const &semi_ties, Direction head_dir) { - if (lv_ties.empty ()) + if (semi_ties.empty ()) return; - details_.from_grob (lv_ties[0]); + details_.from_grob (semi_ties[0]); vector heads; int column_rank = -1; - for (vsize i = 0; i < lv_ties.size (); i++) + for (vsize i = 0; i < semi_ties.size (); i++) { Tie_specification spec; - Item *head = unsmob_item (lv_ties[i]->get_object ("note-head")); + Item *head = unsmob_item (semi_ties[i]->get_object ("note-head")); if (!head) programming_error ("LV tie without head?!"); @@ -336,8 +326,9 @@ Tie_formatting_problem::from_semi_ties (vector const &lv_ties, Direction { spec.position_ = int (Staff_symbol_referencer::get_position (head)); } - + spec.get_tie_manual_settings (semi_ties[i]); + spec.note_head_drul_[head_dir] = head; column_rank = dynamic_cast (head)->get_column ()->get_rank (); spec.column_ranks_ = Drul_array (column_rank, column_rank); @@ -345,9 +336,9 @@ Tie_formatting_problem::from_semi_ties (vector const &lv_ties, Direction specifications_.push_back (spec); } - x_refpoint_ = lv_ties [0]; - for (vsize i = 0; i < lv_ties.size (); i++) - x_refpoint_ = lv_ties[i]->common_refpoint (x_refpoint_, X_AXIS); + x_refpoint_ = semi_ties [0]; + for (vsize i = 0; i < semi_ties.size (); i++) + x_refpoint_ = semi_ties[i]->common_refpoint (x_refpoint_, X_AXIS); for (vsize i = 0; i < heads.size (); i++) x_refpoint_ = heads[i]->common_refpoint (x_refpoint_, X_AXIS); @@ -494,20 +485,29 @@ Tie_formatting_problem::generate_configuration (int pos, Direction dir, conf->attachment_x_.widen ( - details_.x_gap_); - Direction d = LEFT; - do + if (conf->column_span_length ()) { - Real y = conf->position_ * details_.staff_space_ * 0.5 + conf->delta_y_; - if (get_stem_extent (conf->column_ranks_[d], d, X_AXIS).is_empty () - || !get_stem_extent (conf->column_ranks_[d], d, Y_AXIS).contains (y)) - continue; + /* + avoid the stems that we attach to as well. We don't do this + for semities (span length = 0) - conf->attachment_x_[d] = - d * min (d * conf->attachment_x_[d], - d * (get_stem_extent (conf->column_ranks_[d], d, X_AXIS)[-d] - d * details_.stem_gap_)); - } - while (flip (&d) != LEFT); - + It would be better to check D against HEAD-DIRECTION if + applicable. + */ + Direction d = LEFT; + do + { + Real y = conf->position_ * details_.staff_space_ * 0.5 + conf->delta_y_; + if (get_stem_extent (conf->column_ranks_[d], d, X_AXIS).is_empty () + || !get_stem_extent (conf->column_ranks_[d], d, Y_AXIS).contains (y)) + continue; + + conf->attachment_x_[d] = + d * min (d * conf->attachment_x_[d], + d * (get_stem_extent (conf->column_ranks_[d], d, X_AXIS)[-d] - d * details_.stem_gap_)); + } + while (flip (&d) != LEFT); + } return conf; } @@ -709,6 +709,25 @@ Tie_specification::Tie_specification () column_ranks_[LEFT] = 0; } + +void +Tie_specification::get_tie_manual_settings (Grob *tie) +{ + if (scm_is_number (tie->get_property_data ("direction"))) + { + manual_dir_ = to_dir (tie->get_property ("direction")); + has_manual_dir_ = true; + } + + position_ = Tie::get_position (tie); + if (scm_is_number (tie->get_property ("staff-position"))) + { + manual_position_ = scm_to_double (tie->get_property ("staff-position")); + has_manual_position_ = true; + position_ = int (my_round (manual_position_)); + } +} + int Tie_specification::column_span () const { @@ -901,9 +920,16 @@ Tie_formatting_problem::set_ties_config_standard_directions (Ties_configuration { if (tie_configs->empty ()) return ; - + if (!tie_configs->at (0).dir_) - tie_configs->at (0).dir_ = DOWN; + { + if (tie_configs->size () == 1) + tie_configs->at (0).dir_ = Direction (sign (tie_configs->at (0).position_)); + + if (!tie_configs->at (0).dir_) + tie_configs->at (0).dir_ = DOWN; + } + if (!tie_configs->back ().dir_) tie_configs->back ().dir_ = UP; diff --git a/lily/tie.cc b/lily/tie.cc index 2cad6b302f..264bc9172a 100644 --- a/lily/tie.cc +++ b/lily/tie.cc @@ -26,6 +26,7 @@ #include "tie-configuration.hh" #include "tie-formatting-problem.hh" #include "warn.hh" +#include "semi-tie-column.hh" bool @@ -44,6 +45,15 @@ Tie::set_head (Grob *me, Direction d, Grob *h) Grob * Tie::head (Grob *me, Direction d) { + if (is_direction (me->get_property ("head-direction"))) + { + Direction hd = to_dir (me->get_property ("head-direction")); + + return (hd == d) + ? unsmob_grob (me->get_object ("note-head")) + : 0; + } + Item *it = dynamic_cast (me)->get_bound (d); if (Note_head::has_interface (it)) return it; @@ -135,7 +145,8 @@ Tie::calc_direction (SCM smob) { Grob *me = unsmob_grob (smob); Grob *yparent = me->get_parent (Y_AXIS); - if (Tie_column::has_interface (yparent) + if ((Tie_column::has_interface (yparent) + || Semi_tie_column::has_interface (yparent)) && unsmob_grob_array (yparent->get_object ("ties")) && unsmob_grob_array (yparent->get_object ("ties"))->size () > 1) { diff --git a/mf/GNUmakefile b/mf/GNUmakefile index 8a60b49630..0956ee36ef 100644 --- a/mf/GNUmakefile +++ b/mf/GNUmakefile @@ -60,10 +60,10 @@ $(outdir)/aybabtu.otf-gtable: $(BRACES:%=$(outdir)/feta-braces-%.otf-gtable) # -$(outdir)/emmentaler-%.otf $(outdir)/emmentaler-%.svg: $(outdir)/emmentaler-%.pe $(outdir)/feta%.pfa $(outdir)/feta-alphabet%.pfa $(outdir)/parmesan%.pfa +$(outdir)/emmentaler-%.otf $(outdir)/emmentaler-%.svg: $(outdir)/emmentaler-%.pe $(outdir)/feta%.pfa $(outdir)/feta-alphabet%.pfa $(outdir)/parmesan%.pfa $(outdir)/feta%.otf-table $(outdir)/feta%.otf-gtable cd $(outdir) && $(FONTFORGE) -script $(notdir $(basename ,$@).pe) -$(outdir)/aybabtu.otf $(outdir)/aybabtu.svg: $(outdir)/aybabtu.pe $(foreach s,$(BRACES),$(outdir)/feta-braces-$(s).pfa) +$(outdir)/aybabtu.otf $(outdir)/aybabtu.svg: $(outdir)/aybabtu.pe $(foreach s,$(BRACES),$(outdir)/feta-braces-$(s).pfa) $(outdir)/aybabtu.otf-table $(outdir)/aybabtu.otf-gtable cd $(outdir) && $(FONTFORGE) -script aybabtu.pe -rm -f $(outdir)/*.scale.{pfa,afm} @@ -140,23 +140,11 @@ default: $(ALL_GEN_FILES) $(outdir)/emmentaler-20.otf tree-regen tree-regen: ${MAKE} -C $(top-build-dir) link-mf-tree -debian-mirror=http://ftp.us.debian.org -debian-package =lilypond_$(TOPLEVEL_VERSION)-1_i386.deb -$(outdir)/$(debian-package): - wget --passive-ftp -P $(outdir) $(debian-mirror)/debian/pool/main/l/lilypond/$(debian-package) - -redhat-package=lilypond-$(TOPLEVEL_VERSION)-1.i386.rpm -$(outdir)/$(redhat-package): - wget --passive-ftp -P $(outdir) http://lilypond.org/download/binaries/Fedora-4/$(redhat-package) - ## ## todo: this also depends on .tfm, FIXME. $(outdir)/%.lisp $(outdir)/%.otf-gtable $(outdir)/%.enc $(outdir)/%.tex $(outdir)/%.dep: $(outdir)/%.log $(outdir)/%.tfm $(PYTHON) $(buildscript-dir)/mf-to-table.py --global-lisp=$(outdir)/$(