]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 1.4.3 release/1.4.3
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 13 Jun 2001 15:39:22 +0000 (17:39 +0200)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 13 Jun 2001 15:39:22 +0000 (17:39 +0200)
==========

* Windows: bugfix for tex-wrappers, added tex wrapper for dvips.
LilyPond (read: ly2dvi) should now work right out of the box.

Amazing; it seems that ly2dvi won't generate PK files without this
dvips wrapper.  We had over 200 downloads of setup.exe, yet only one
`call for help'.  Did all the others give up, or did none of them
bother to share their fix/file a bug report?  Urg.

* Included mktexnam.patch (again?).

* Documentation fix (Mark Hindley).

* Debian patch and bashism fix (Anthony).

* Bugfix: local-install should depend on $(INSTALLATION_FILES).  This fixes
./configure; make install in buildscripts/ (Michael Vanier).

* Removed les-nereides from short-examples, as it is tweaked a lot,
contrary to what the webpage claims (didn't know that).

1.4.2.

27 files changed:
CHANGES
Documentation/user/ly2dvi.itexi
Documentation/windows/latex-wrapper.sh [deleted file]
INSTALL.txt
VERSION
debian/lilypond1.3.copyright
input/test/manual-volta.ly
lily/grob.cc
lily/hyphen-spanner.cc
lily/include/grob.hh
lily/item.cc
lily/main.cc
lily/multi-measure-rest.cc
lily/percent-repeat-engraver.cc
lily/stanza-number-engraver.cc
lily/tie.cc
lily/voice-devnull-engraver.cc
lilypond-font-lock.el
make/out/lilypond.lsm
make/out/lilypond.redhat.spec
make/out/lilypond.suse.spec
scm/grob-description.scm
scm/grob-property-description.scm
scripts/abc2ly.py
scripts/lilypond-book.py
scripts/ly2dvi.py
tex/titledefs.tex

diff --git a/CHANGES b/CHANGES
index bdb011f50e3c1af9fc676b4a6741a0a3fefe734e..af019b8376e81d2f342822705e2fd9ae151ad7a4 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,8 +1,6 @@
 1.4.2.jcn4
 ==========
 
-* Bugfix: ledger lines on easy-notation note heads.
-
 * Windows: bugfix for tex-wrappers, added tex wrapper for dvips.
 LilyPond (read: ly2dvi) should now work right out of the box.
 
@@ -11,9 +9,6 @@ dvips wrapper.  We had over 200 downloads of setup.exe, yet only one
 `call for help'.  Did all the others give up, or did none of them
 bother to share their fix/file a bug report?  Urg.
 
-1.4.2.jcn1
-==========
-
 * Included mktexnam.patch (again?).
 
 * Documentation fix (Mark Hindley).
@@ -26,6 +21,32 @@ bother to share their fix/file a bug report?  Urg.
 * Removed les-nereides from short-examples, as it is tweaked a lot,
 contrary to what the webpage claims (didn't know that).
 
+1.4.2.mb1
+==========
+
+* ly2dvi, titledefs.tex: Typeset copyright notice at the bottom of the
+first page. Make separate page styles for first and last page.
+
+* Bugfix: Default RehearsalMark font-family changed to roman (only
+affects Scheme text markups).
+
+1.4.2.hwn1
+==========
+
+* Added support for Q: statement to abc2ly. (Laura Conrad)
+
+* Tie shape bugfix (Mark Hindley).
+
+* Bugfix: lilypond-book LatexPaper.__setattr__()
+
+* Bugfix: make Hyphen_spanner::brew_molecule() more robust.
+
+* Don't use stdin when no argument specified.
+
+* Naming smobs -> grobs 
+
+* Bugfix: ledger lines on easy-notation note heads.
+
 1.4.2
 =====
 
index 10753f365c262cc6271c7f9970a4a6c856134019..c1ee6242fae386a2314987d33fd7ab3a5a649f06 100644 (file)
@@ -78,8 +78,11 @@ generate titling:
 @item head
     A text to print in the header of all pages. It is not called
 @code{header}, because @code{\header} is a reserved word in LilyPond.
+@item copyright
+    A text to print in the footer of the first page. Default is to 
+    print the standard footer also on the first page.
 @item footer
-    A text to print in the footer of all pages
+    A text to print in the footer of all but the last page.
 @item tagline
     Line to print at the bottom of last page. The default text is ``Lily
 was here, @var{version-number}''.
diff --git a/Documentation/windows/latex-wrapper.sh b/Documentation/windows/latex-wrapper.sh
deleted file mode 100644 (file)
index e69de29..0000000
index 3366d09d1119698f53ef06c9050bc93fdb84e576..e0d285563e0791bf40ed6ec82a898f169fb18e36 100644 (file)
@@ -74,8 +74,7 @@ released.
    * Debian GNU/Linux
      (ftp://ftp.debian.org/debian/pool/main/l/lilypond/)
 
-   * Windows Stable (http://home.austin.rr.com/jbr/jeff/lilypond/)
-     Windows Testing (http://www.lilypond.org/gnu-windows/)
+   * Windows Testing (http://www.lilypond.org/gnu-windows/)
 
 
 Upgrading
@@ -93,10 +92,10 @@ Upgrading
      xdelta (ftp://ftp.xcf.berkeley.edu/pub/xdelta/).   This is much
      safer than using patches, and is the recommended way.
 
-     The following command produces `lilypond-1.4.1.tar.gz' from
-     `lilypond-1.4.0.tar.gz' identical (up to compression dates) to the
-     .1 on the FTP site.
-            xdelta patch lilypond-1.4.0-1.4.1.xd lilypond-1.4.0.tar.gz
+     The following command produces `lilypond-1.4.3.tar.gz' from
+     `lilypond-1.4.2.tar.gz' identical (up to compression dates) to the
+     .3 on the FTP site.
+            xdelta patch lilypond-1.4.2-1.4.3.xd lilypond-1.4.2.tar.gz
 
 Requirements
 ============
@@ -357,7 +356,7 @@ Debian GNU/Linux
    A Debian package is also available.  You may install it easily by
 running `apt-get' as root:
 
-       apt-get install lilypond
+       apt-get install lilypond lilypond-doc
 
    Debian's TeX installation is a bit short on memory, you may want to
 increase it like this:
@@ -385,7 +384,7 @@ environment variables if you do not want to or cannot modify
 
    * http://people.debian.org/~foka/lilypond/
      (http://people.debian.org/~foka/lilypond/) for latest
-     semi-unofficial build of LilyPond 1.3.121 for Debian 2.2 (potato)
+     semi-unofficial build of LilyPond 1.4.2 for Debian 2.2 (potato)
      users.  The official stable Debian 2.2 is stuck with the old
      LilyPond-1.3.24.  Since LilyPond-1.4 has been released, the older
      lilypond1.3 Debian package is now obsolete.
@@ -399,15 +398,18 @@ the .deb by doing, for example:
        $ su - root
        # dpkg --purge lilypond lilypond1.3
        # exit
-       $ tar xzf lilypond-1.4.1.tar.gz
-       $ cd lilypond-1.4.1
-       $ dch -p -v 1.4.1-0.local.1 "Local build."
-       $ debuild
+       $ tar xzf lilypond-1.4.3.tar.gz
+       $ cd lilypond-1.4.3
+       $ dch -p -v 1.4.3-0.local.1 "Local build."
+       $ debuild -B
        $ su - root
-       # dpkg -i ../lilypond_1.4.1*.deb
+       # dpkg -i ../lilypond_1.4.3*.deb
        # exit
        $
 
+   Use command `debuild' instead of `debuild -B' if you have a very
+fast machine and want to build the HTML, PS and DVI documentation too.
+
    For compilation on a Debian GNU/Linux system you need these packages,
 in addition to the those needed for running:
 
diff --git a/VERSION b/VERSION
index 092f4484dfd14db3454f2cceeb40e0b7d8756914..db44d17c8bb6fd94bddce3ebcce9f8a7e2cca698 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,8 +1,8 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=4
-PATCH_LEVEL=2
-MY_PATCH_LEVEL=jcn5
+PATCH_LEVEL=3
+MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
index 29e3390e68270d9542a2486fa446822d1d1df38b..0366d2af74d2609e74f24638e965374604d38c5d 100644 (file)
@@ -3,6 +3,27 @@ This is a dummy package to aid the transition from the old
 It was created by Anthony Fok <foka@debian.org>
 Mon, 16 Apr 2001 22:17:10 -0600
 
+Copyright:
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License with
+  the Debian GNU/Linux distribution in file /usr/share/common-licenses/GPL;
+  if not, write to the Free Software Foundation, Inc., 59 Temple Place,
+  Suite 330, Boston, MA  02111-1307  USA
+This is a dummy package to aid the transition from the old
+"lilypond1.3" package to the newer "lilypond" package.
+It was created by Anthony Fok <foka@debian.org>
+Mon, 16 Apr 2001 22:17:10 -0600
+
 Copyright:
 
   This program is free software; you can redistribute it and/or modify
index ecb3ad4186cb71515a2ae8f01f54b23c3dd86ab0..7f9042daca0d67008b2425d5d7efaf276c7aad11 100644 (file)
@@ -2,10 +2,18 @@
 
 
 \score { \notes {
- c4
+% First a normal looking repeat:
+ c2 c
+    \property Score.repeatCommands = #'((volta "1."))
+ c c
+    \property Score.repeatCommands = #'((volta #f) end-repeat (volta "2."))
+ c c
+    \property Score.repeatCommands = #'((volta #f))
+% Then a more strange one:
+ c c
     \property Score.repeatCommands = #'((volta "93") end-repeat)
- c4 c4
+ c c
     \property Score.repeatCommands = #'((volta #f))
- c4 c4
+ c c
 }
 }
index db504faa814e9d4a371417d63ad2eae0e79bde4c..f6c84bc079e0df7650fc0a1d45e2e76f282e1aff 100644 (file)
@@ -347,7 +347,7 @@ Grob::add_dependency (Grob*e)
       representing the break direction. Do not modify SRC.
 */
 SCM
-Grob::handle_broken_smobs (SCM src, SCM criterion)
+Grob::handle_broken_grobs (SCM src, SCM criterion)
 {
  again:
   Grob *sc = unsmob_grob (src);
@@ -393,7 +393,7 @@ Grob::handle_broken_smobs (SCM src, SCM criterion)
       /*
        UGH! breaks on circular lists.
       */
-      SCM newcar = handle_broken_smobs (oldcar, criterion);
+      SCM newcar = handle_broken_grobs (oldcar, criterion);
       SCM oldcdr = gh_cdr (src);
       
       if (newcar == SCM_UNDEFINED
@@ -402,7 +402,7 @@ Grob::handle_broken_smobs (SCM src, SCM criterion)
          /*
            This is tail-recursion, ie. 
            
-           return handle_broken_smobs (cdr, criterion);
+           return handle_broken_grobs (cdr, criterion);
 
            We don't want to rely on the compiler to do this.  Without
            tail-recursion, this easily crashes with a stack overflow.  */
@@ -410,7 +410,7 @@ Grob::handle_broken_smobs (SCM src, SCM criterion)
          goto again;
        }
 
-      SCM newcdr = handle_broken_smobs (oldcdr, criterion);
+      SCM newcdr = handle_broken_grobs (oldcdr, criterion);
       return gh_cons (newcar, newcdr);
     }
   else
@@ -433,7 +433,7 @@ Grob::handle_broken_dependencies ()
          Grob * sc = s->broken_into_l_arr_[i];
          Line_of_score * l = sc->line_l ();
          sc->mutable_property_alist_ =
-           handle_broken_smobs (mutable_property_alist_,
+           handle_broken_grobs (mutable_property_alist_,
                                 l ? l->self_scm () : SCM_UNDEFINED);
        }
     }
@@ -444,12 +444,12 @@ Grob::handle_broken_dependencies ()
   if (line && common_refpoint (line, X_AXIS) && common_refpoint (line, Y_AXIS))
     {
       mutable_property_alist_
-       = handle_broken_smobs (mutable_property_alist_,
+       = handle_broken_grobs (mutable_property_alist_,
                               line ? line->self_scm () : SCM_UNDEFINED);
     }
   else if (dynamic_cast <Line_of_score*> (this))
     {
-      mutable_property_alist_ = handle_broken_smobs (mutable_property_alist_,
+      mutable_property_alist_ = handle_broken_grobs (mutable_property_alist_,
                                            SCM_UNDEFINED);
     }
   else
index 1a35efaaed73a4fd3be307bf0458e754657f40eb..c222091ef45a55af3243c9f72c7e16b54b1e6c4f 100644 (file)
@@ -58,8 +58,12 @@ Hyphen_spanner::brew_molecule (SCM smob)
     {
       bounds[LEFT] -=  gh_scm2double (space);
     }
-  Real w  = bounds.length ();
 
+  /*
+    we should probably do something more intelligent when bounds is
+    empty, but at least this doesn't crash.
+  */      
+  Real w  = bounds.empty_b () ? 0 : bounds.length ();
   
   /* for length, use a geometric mean of the available space and some minimum
    */
@@ -93,9 +97,8 @@ Hyphen_spanner::brew_molecule (SCM smob)
     }
   Box b (Interval (-l/2,l/2), Interval (h,h+th));
   Molecule mol (Lookup::filledbox (b));
-  mol.translate_axis (bounds.center ()
-                     -sp->relative_coordinate (common, X_AXIS),
-                     X_AXIS);
+  Real ct = bounds.empty_b () ? 0 : bounds.center () ;
+  mol.translate_axis (ct -sp->relative_coordinate (common, X_AXIS), X_AXIS);
   return mol.smobbed_copy ();
 }
   
index dc95ba514311b805fad570ffea75c3bf1ead75b7..2de2b88fc2e11e073f8cb9bac96d50e3c5262e59 100644 (file)
@@ -96,7 +96,7 @@ public:
      #funcptr# is the function to call to update this element.
    */
   void calculate_dependencies (int final, int busy, SCM funcname);
-  static SCM handle_broken_smobs (SCM, SCM criterion);
+  static SCM handle_broken_grobs(SCM, SCM criterion);
 
   virtual void do_break_processing ();
   virtual Grob *find_broken_piece (Line_of_score*) const;
index 6eeaf775031891d37060fd7aea09ff0cbc6ecbbb..52f647f732f1bf40f7cda60fe34187193d4cf9ef 100644 (file)
@@ -143,7 +143,7 @@ Item::handle_prebroken_dependencies ()
   if (original_l_)
     {
       mutable_property_alist_
-       = handle_broken_smobs (original_l_->mutable_property_alist_,
+       = handle_broken_grobs(original_l_->mutable_property_alist_,
                               gh_int2scm (break_status_dir ()));
     }
   
index 703655df754a453718218a72649f450fe7233b86..85a447ed203096798cc12bd9993e60b5c0077adf 100644 (file)
@@ -332,20 +332,22 @@ main_prog (int, char**)
   gh_eval_str ((char *)init_scheme_code_string.ch_C());
   
   int p=0;
-  const char *arg ;
-  while ((arg = oparser_p_static->get_next_arg ()) || p == 0)
+  const char *arg  = oparser_p_static->get_next_arg ();
+
+  if (!arg)
+    usage ();
+  else
+    do 
     {
-      String infile;
-      
-      if (arg)
-       infile = arg;
-      else
-       infile = "-";
-       
-      // What/when was this supposed to do?
-      // It looks like it reset the outname_str_global for every new
-      // file, but only if user didn't specify a outname?  Huh?
-      // if (outname_str_global == "")
+      String infile (arg);
+       
+      /* What/when was this supposed to do?
+       It looks like it reset the outname_str_global for every new
+       file, but only if user didn't specify a outname?  Huh?
+
+       // if (outname_str_global == "")
+
+      */
       {
        Midi_def::reset_score_count ();
        Paper_def::reset_score_count ();
@@ -381,8 +383,11 @@ main_prog (int, char**)
       output_name_global = save_output_name_global;
       
       p++;
-    }
+
+      oparser_p_static->get_next_arg ();      
+    } while ((arg  = oparser_p_static->get_next_arg ()));
   delete oparser_p_static;
+  oparser_p_static = 0;
   exit (exit_status_global);
 }
 
index 890c0d1562901f24928140aea8ccd0361ce30ce0..9870a13a883dcfc7bf28ec01b1419c42e6616114 100644 (file)
@@ -42,8 +42,6 @@ Multi_measure_rest::percent (SCM smob)
   Grob *me = unsmob_grob (smob);
   Spanner *sp = dynamic_cast<Spanner*> (me);
   
-  Font_metric *musfont = Font_interface::get_default_font (me);
-                       
   Molecule r = Percent_repeat_item_interface::x_percent (me, 1,  0.75, 1.6);
 
   // ugh copy & paste.
index 994288da6406d9f4def48db2467390392af9e4c0..cd11b6a89d5d4d1be779272f699c8a44870dfaee 100644 (file)
@@ -65,7 +65,6 @@ protected:
 protected:
   virtual void finalize ();
   virtual bool try_music (Music*);
-  virtual void acknowledge_grob (Grob_info);
   virtual void stop_translation_timestep ();
   virtual void start_translation_timestep ();
   virtual void process_music ();
@@ -220,11 +219,6 @@ Percent_repeat_engraver::typeset_perc ()
 }
 
 
-void
-Percent_repeat_engraver::acknowledge_grob (Grob_info info)
-{
-
-}
 
 
 void
index db88dad85db10cae87686a0d2cc3c87dde5b1daa..5d4b0a5e0109cc1aecdf241d69d867a3f5f43342 100644 (file)
@@ -46,8 +46,11 @@ Stanza_number_engraver::acknowledge_grob (Grob_info i)
       
       if (now_mom () > Moment (0))
        s = get_property ("stz");
-  
+
+
+      // TODO
       if (gh_string_p (s))
+       
 
        /*
          if (i.elem_l_->has_interface (symbol ("lyric-syllable-interface")))
index 6e605ea07fc2ff045930f787955806267054418f..ae2be9fc11b8d24b5eab461d4f4d401084df96b3 100644 (file)
@@ -185,28 +185,16 @@ Tie::get_control_points (SCM smob)
 
   Bezier b  = slur_shape (width, h_inf, r_0);
   
-  Offset leave_dir = b.control_[1] - b.control_[0];
-
-  Grob *hed =head (me, headdir);
-  Real dx = (hed->extent (hed, X_AXIS).length () + x_gap_f)/2.0;
-  Real max_gap = leave_dir[Y_AXIS] * dx / leave_dir[X_AXIS];
-
   /*
-    for small ties (t small) we want to start in the Y-center (so dy = 0), for
-    large ties, the tie should appear to come from the center of the
-    head, so dy = max_gap
-
-    maybe use a different formula?
+    I think this better, particularly for small ties. It always allows the user to move ties if
+    they seem in the wrong place
 
     TODO: what if 2 heads have different size.
 
-    TODO: for small ties, it is better to start over the heads
-    iso. next to the heads. 
   */
-  Real t = (width / staff_space - 5.0);        // ugh.
-  Real dy = t > 0 ? max_gap * sqr (t / (1 + t)) : 0.0;
 
-  Real ypos = Tie::position_f (me) * staff_space/2 + dir * dy;
+  Real ypos = Tie::position_f (me) * staff_space/2
+    + dir * gh_scm2double (me->get_grob_property ("y-offset"));;
 
   /*
     Make sure we don't start on a dots
index 94859cf81946dec02d8765cc7b4831a846a5f6ea..7a8d460f99c933b672028507c5e23e1c414faa7f 100644 (file)
@@ -58,7 +58,7 @@ Voice_devnull_engraver::try_music (Music *m)
            }
        }
       /* Ugh.  Should eat other requests, script etc. too. */  
-      else if (Tie_req *t = dynamic_cast<Tie_req*> (m))
+      else if (dynamic_cast<Tie_req*> (m))
        return true;
     }
   return false;
index 04553830ba648d78c54d52a080be87ee4f0c9348..ee0b3c7553977a8881aa86cddd8d16e84802766e 100644 (file)
@@ -38,7 +38,7 @@
 "override" "set" "revert" "partial" "paper" "penalty" "property" "pt"
 "relative" "remove" "repeat" "addlyrics" "partcombine" "score"
 "script" "stylesheet" "skip" "textscript" "tempo" "translator"
-"transpose" "type" 
+"transpose" "type" "unset" 
                      ))
        (kwregex (mapconcat (lambda (x) (concat "\\\\" x))  keywords "\\|")))
 
index e3b47930d0381d7d51c28cb18b2f6d13be9b0262..bdfd4d266ea46a171b639faf54790a1e7d9c2599 100644 (file)
@@ -1,15 +1,15 @@
 Begin3
 Title: LilyPond
-Version: 1.4.2
-Entered-date: 28MAY01
+Version: 1.4.3
+Entered-date: 13JUN01
 Description: @BLURB@
 Keywords: music notation typesetting midi fonts engraving
 Author: hanwen@cs.uu.nl (Han-Wen Nienhuys)
        janneke@gnu.org (Jan Nieuwenhuizen)
 Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
 Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
-       1000k lilypond-1.4.2.tar.gz 
+       1000k lilypond-1.4.3.tar.gz 
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       1000k lilypond-1.4.2.tar.gz 
+       1000k lilypond-1.4.3.tar.gz 
 Copying-policy: GPL
 End
index f257358cb292cb7b777fff6b21fed2eb641f99ba..a49a8b001146b59d7dc0bf2e3b1bbeef7f6f349b 100644 (file)
@@ -1,11 +1,11 @@
 %define info yes
 
 Name: lilypond
-Version: 1.4.2
+Version: 1.4.3
 Release: 1
 License: GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.4.2.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.4.3.tar.gz
 Summary: Create and print music notation 
 URL: http://www.cs.uu.nl/~hanwen/lilypond
 BuildRoot: /tmp/lilypond-install
index f2d26441cfe9691a359b42424ab6a3d8f0a950cb..4cca83ccca55d6f5c1fdd02ad089c99e6b823499 100644 (file)
 
 Distribution: SuSE Linux 7.0 (i386)
 Name: lilypond
-Version: 1.4.2
+Version: 1.4.3
 Release: 2
 Copyright:    GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.4.2.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.4.3.tar.gz
 # music notation software for.. ?
 Summary: A program for printing sheet music.
 URL: http://www.lilypond.org/
index 78e498658ded2795436dc88ea54c88c43d51cbca..9d19e537d0023c0cff1927bc06a8a1cee314e72b 100644 (file)
 
                (direction . 1)
                (breakable . #t)
-               (font-family . number)
+               (font-family . roman)
                (font-shape . upright)
                (font-relative-size . 1)
                (visibility-lambda . ,end-of-line-invisible)
                (details . ((ratio . 0.333) (height-limit . 1.0)))
                (thickness . 1.2)
                (x-gap . 0.2)
+               (y-offset . 0.6)
                (minimum-length  . 2.5)
                (meta . ,(grob-description "Tie" tie-interface ))
        ))
index ef4cec6bebb0481e33752813afa373bf28a357c7..023a24668bec61e656d9803b0b77174dfc44a2b3 100644 (file)
@@ -362,4 +362,5 @@ function of type (beam multiplicity dy staff-line-thickness) -> real.  Default v
 (grob-property-description 'word-space number? "elongate left by this much (FIXME: cumbersome semantics).")
 (grob-property-description 'x-gap number? "horizontal gap between notehead and tie.")
 (grob-property-description 'y-free number? "minimal vertical gap between slur and noteheads or stems.")
+(grob-property-description 'y-offset number? "extra vertical offset for ties away from the center line.")
 (grob-property-description 'y number? "set by beam: position of left edge.")
index c76574eba30b58233fbdf401139c634eca83d966..b4295e933f597fa6db6b0a7ca854b1c298d1b074 100644 (file)
@@ -87,7 +87,7 @@ names = ["One", "Two", "Three"]
 DIGITS='0123456789'
 alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ"  
 HSPACE=' \t'
-
+midi_specs = ''
        
 def check_clef(s):
       if not s:
@@ -205,6 +205,23 @@ def dump_voices (outf):
                                outf.write("}")
                outf.write ("\n}")
 
+def try_parse_q(a):
+       global midi_specs
+       #assume that Q takes the form "Q:1/4=120"
+       #There are other possibilities, but they are deprecated
+       if string.count(a, '/') == 1:
+               array=string.split(a,'/')
+               numerator=array[0]
+               if numerator != 1:
+                       sys.stderr.write("abc2ly: Warning, unable to translate a Q specification with a numerator of %s: %s\n" % (numerator, a))
+               array2=string.split(array[1],'=')
+               denominator=array2[0]
+               perminute=array2[1]
+               duration=str(string.atof(denominator)/string.atoi(numerator))
+               midi_specs=string.join(["\\tempo", duration, "=", perminute])
+       else:
+               sys.stderr.write("abc2ly: Warning, unable to parse Q specification: %s\n" % a)
+        
 def dump_score (outf):
        outf.write (r"""\score{
         \notes <
@@ -243,7 +260,7 @@ def dump_score (outf):
                outf.write ("\t\t\\StaffContext\n")
 #              outf.write ("\t\t\\consists Staff_margin_engraver\n")
                outf.write ("\t    }\n")
-       outf.write ("\t}\n\t\\midi {}\n}\n")
+       outf.write ("\t}\n\t\\midi {%s}\n}\n" % midi_specs)
 
 
 
@@ -631,7 +648,8 @@ def try_parse_header_line (ln, state):
                        lyrics_append(a)
                if g == 'w':    # vocals
                        slyrics_append (a)
-
+               if g == 'Q':    #tempo
+                       try_parse_q (a)
                return ''
        return ln
 
index 8b560e8959eb26ad81dc7f3c8c87c0996023752b..a9e53567ec1ddfae05e063388c750aca8cbd4f96 100644 (file)
@@ -192,7 +192,7 @@ class LatexPaper:
        def __setattr__(self, name, value):
                if type(value) == type("") and \
                   dimension_conversion_dict.has_key (value[-2:]):
-                       f = dimension_conversion_dict[dim]
+                       f = dimension_conversion_dict[value[-2:]]
                        self.__dict__[name] = f(float(value[:-2]))
                else:
                        self.__dict__[name] = value
index 16d769ccb395b059c2121c70b01e14679a4dd827..5ac6d69667a601007bb24da29345591c73fe3f6c 100644 (file)
@@ -533,49 +533,23 @@ lily output file in TFILES after that, and return the Latex file constructed.  '
        s = s + r'''
 \usepackage[latin1]{inputenc}
 \input{titledefs}
-\makeatletter
-\renewcommand{\@oddfoot}{\parbox{\textwidth}{\mbox{}\thefooter}}%
-\renewcommand{\@evenfoot}{\parbox{\textwidth}{\mbox{}\thefooter}}%
 '''
        
        if extra['pagenumber'] and extra['pagenumber'][-1] and extra['pagenumber'][-1] != 'no':
-               s = s + r'''
-\renewcommand{\@evenhead}{\hbox to\textwidth{\textbf{\thepage}\hfill{\small\theheader}}}
-\renewcommand{\@oddhead}{\hbox to \textwidth{{\small\theheader}\hfill\textbf{\thepage}}}
-'''
+               s = s + '\\pagestyle{plain}\n'
        else:
                s = s + '\\pagestyle{empty}\n'
 
-       s = s + '\\makeatother\n'
        s = s + '\\begin{document}\n'
-
+       s = s + '\\thispagestyle{firstpage}\n'
 
        first = 1
        for t in tfiles:
                s = s + one_latex_definition (t, first)
                first = 0
 
-       s = s + r'''
-%% I do not see why we want to clobber the footer here
-%% \vfill\hfill\parbox{\textwidth}{\mbox{}\makelilypondtagline}
-%% Well, maybe you don't submit music to mutopia?
-%% I would not object to this kind of change, but I don't know how
-%% to get the last mutopia tagline right (ie: no footer on last page)
-%% Please check that mutopia footers and endfooter are OK before changing
-%% this again. -- jcn
-% the \mbox{} helps latex if people do stupid things in tagline
-\makeatletter
-\if@twoside
-  \ifodd\thepage
-   \renewcommand{\@oddfoot}{\parbox{\textwidth}{\mbox{}\makelilypondtagline}}%
-  \else
-   \renewcommand{\@evenfoot}{\parbox{\textwidth}{\mbox{}\makelilypondtagline}}%
-  \fi
- \else
-  \renewcommand{\@thefoot}{\parbox{\textwidth}{\mbox{}\makelilypondtagline}}%
-\fi
-\makeatother
-'''
+
+       s = s + '\\thispagestyle{lastpage}\n'
        s = s + '\\end{document}'
 
        return s
index c41cb0b7386df53e76867a792234b0a0782243f5..fd680ff7e47c0eb8420d93633ab35549f0467d8c 100644 (file)
 % these names can't be changed: they're uses in mutopia headers
 \def\theheader
 {
-  \ifx\lilypondhead\undefined\else%
+  \ifx\lilypondhead\undefined\relax\else%
     \lilypondhead\fi
 }
 \def\thefooter
 {
-  \ifx\lilypondfooter\undefined\else%
+  \ifx\lilypondfooter\undefined\relax\else%
     \lilypondfooter\fi
 }
 \def\makelilypondtagline
 {
-  \ifx\lilypondtagline\undefined\else\lilypondtagline\fi
+  \ifx\undefined\lilypondtagline\relax\else\lilypondtagline\fi
 }
+\def\thecopyright
+{
+  \ifx\lilypondcopyright\undefined\thefooter\else%
+    \lilypondcopyright\fi
+}
+%
+% Moved header and footer definitions here from the ly2dvi script.
+% Separate page styles for first, last and ordinary (plain) pages.
+\makeatletter
+\renewcommand{\ps@plain}{
+  \renewcommand{\@oddfoot}{\parbox{\textwidth}{\mbox{}\thefooter}}%
+  \renewcommand{\@evenfoot}{\@oddfoot}%
+  \renewcommand{\@evenhead}{\hbox to\textwidth{\textbf{\thepage}\hfill{\small\theheader}}}
+  \renewcommand{\@oddhead}{\hbox to
+  \textwidth{{\small\theheader}\hfill\textbf{\thepage}}}}
+\newcommand{\ps@firstpage}{
+  \renewcommand{\@oddfoot}{\parbox{\textwidth}{\mbox{}\thecopyright}}%
+  \renewcommand{\@evenfoot}{\@oddfoot}}
+\newcommand{\ps@lastpage}{
+  \renewcommand{\@oddfoot}{\parbox{\textwidth}{\mbox{}\makelilypondtagline}}%
+  \renewcommand{\@evenfoot}{\@oddfoot}}
+\makeatother
 \endinput