]> git.donarmstrong.com Git - lilypond.git/commitdiff
patch::: 1.0.16.mb1: Re: LilyPond 1.0.16
authorMats Bengtsson <mats.bengtsson@s3.kth.se>
Sat, 17 Oct 1998 21:32:40 +0000 (23:32 +0200)
committerMats Bengtsson <mats.bengtsson@s3.kth.se>
Sat, 17 Oct 1998 21:32:40 +0000 (23:32 +0200)
pl 16.mb1
- bf: No unnecessary warnings about time signatures
- \major and \minor affects how all subsequent key signatures
  are interpreted.
- Parser support for cautionary accidentals, i.e. accidentals
  within parantheses. Syntax: cis? The main part of the
  implementation is still missing.

---
Generated by (address unknown) using package-diff 0.62,
>From = lilypond-1.0.16, To = lilypond-1.0.16.mb1

usage

    cd lilypond-source-dir; patch -E -p1 < lilypond-1.0.16.mb1.diff

Patches do not contain automatically generated files
or (urg) empty directories,
i.e., you should rerun autoconf, configure
and possibly make outdirs.

--state
1.0.16
1.0.16.mb1
++state

25 files changed:
Documentation/tex/refman.yo
Documentation/tex/tutorial.yo
NEWS
TODO
VERSION
init/property.ly
input/test/keys.ly
input/test/time.fly
lily/include/lookup.hh
lily/include/musical-request.hh
lily/include/ps-lookup.hh
lily/include/ps-lookup.hh.orig [new file with mode: 0644]
lily/include/tex-lookup.hh
lily/include/tex-lookup.hh.orig [new file with mode: 0644]
lily/key-engraver.cc
lily/local-key-engraver.cc
lily/lookup.cc
lily/lookup.cc.orig [new file with mode: 0644]
lily/musical-request.cc
lily/parser.yy
lily/parser.yy.orig [new file with mode: 0644]
lily/ps-lookup.cc
lily/tex-lookup.cc
make/STATE-VECTOR
mutopia/gallina.ly

index ae08ad2d24ae9172ea474776291a992b5d82c753..5331fe1269343f1f613730223f2db51eed6fb697 100644 (file)
@@ -952,7 +952,10 @@ file(.ly) extension must be given, and the filename must be quoted.
 (An unquoted string will not work here.)
 
 dit(code(\key) var(pitch)code(;)) Change key signature to that of
-var(pitch)-major.
+var(pitch)-major. The predefined identifiers code(\major) and
+code(\minor) decide if all subsequent code(\key) commands are given in
+major or minor, respectively.
+  
 
 dit(code(\keysignature) var(pitchseq)code(;))
 Specify an arbitrary key signature.  The pitches from var(pitch) will
@@ -1296,7 +1299,10 @@ dit(code(defaultBarType)) Sets the default type of bar line.  See
 code(\bar) keyword.
 
 
-
+dit(code(keymodality)) The number of semitones that should be added to
+the pitch given in the subsequent code(\key) commands to get the
+corresponding major key, e.g. minor keys are specified by
+code(keymodality=3). Is set by code(\major) and code(\minor).
 
 dit(code(keyoctaviation)) If set to 1, then keys are the same in all
 octaves.  If set to 0 then the key signature for different octaves can
@@ -1323,16 +1329,16 @@ default) if you do not want key signatures printed.
 dit(code(timeSignatureStyle)) Changes the default two-digit layout
    for time signatures. The following values are recognized:
    description(
-      dit(code(C)): 4/4 and 2/2 are typeset as C and struck C,
+      dit(code(C)) 4/4 and 2/2 are typeset as C and struck C,
       respectively. All other time signatures are written with two digits.
-      dit(code(old)): 2/2, 3/2, 3/4, 4/4, 6/4 and 9/4 are typeset with
+      dit(code(old)) 2/2, 3/2, 3/4, 4/4, 6/4 and 9/4 are typeset with
       old-style mensuration marks. All other time signatures are 
       written with two digits.
-      dit(code(1)): All time signatures are typeset with a single
+      dit(code(1)) All time signatures are typeset with a single
       digit, e.g. 3/2 is written as 3.
       dit(code(C2/2), code(C4/4), code(old2/2), code(old3/2),
       code(old3/4), code(old4/4), code(old6/4) or
-      code(old9/4)): Tells Lilypond to use a specific symbol as time
+      code(old9/4)) Tells Lilypond to use a specific symbol as time
       signature.
    )
 The different time signature characters are shown below with
@@ -1439,6 +1445,10 @@ code(castingalgorithm).  Is equal to 1.0.
 dit(code(\infinity)) Used for setting the Score.beamslopedamping
 property.  Is actually equal to 10000.  
 dit(code(\left)) Used for setting textalignment property.  Is equal to -1.
+dit(code(\major)) All subsequent code(\key) commands are interpreted
+as major keys.
+dit(code(\minor)) All subsequent code(\key) commands are interpreted
+as minor keys.
 dit(code(\mf)) Print mezzoforte symbol on preceeding note. 
 dit(code(\mp)) Print mezzopiano symbol on preceeding note. 
 dit(code(\nobreak)) Prevent a line break in music by using a large
index 02bdaaf9a340b4405bbb9fc30cb9dc88af1c32d9..2ab084682989c4d656e948d4e0ff374c4023134b 100644 (file)
@@ -697,9 +697,11 @@ dit(code(\clef) var(clefname)) This command sets the current clef for notation,
     \clef "alto"; c'4    
   )
 dit(code(\key) var(pitch)) This command changes the current key signature.  The
-  key signature is printed at the start of every line.  The argument
-  is the name of the corresponding major key.  The key of C-minor can 
-  thus be specified as `code(\key es)'.
+  key signature is printed at the start of every line. The identifiers
+  code(\major) and code(\minor) can be used to decide if all the 
+  subsequent code(\key) commands are major or minor, respectively. 
+  The default is major keys. The key of C-minor can 
+  thus be specified as `code(\key es)' or `code(\minor \key c)'.
   
 dit(code(\keysignature) var(pitchlist))
 
diff --git a/NEWS b/NEWS
index 2dd704fb089073bc1d5c94463dc46a34f7e7663c..53ffde5b77ae9fc29c7771cac800d17e17358435 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,17 @@
-pl 16.jcn1
+--- ../lilypond-1.0.16/NEWS    Wed Oct 14 15:44:20 1998
+++ b/NEWS      Sat Oct 17 22:49:37 1998
+@@ -1,3 +1,11 @@
+pl 16.mb1
+       - bf: No unnecessary warnings about time signatures
+       - \major and \minor affects how all subsequent key signatures
+         are interpreted.
+       - Parser support for cautionary accidentals, i.e. accidentals 
+         within parantheses. Syntax: cis? The main part of the 
+         implementation is still missing.
+
+ pl 16
+       - read property ydirection and tieYDirection for tie direction.
+       - bf: slur over rest.pl 16.jcn1
        - dashed-slur through scheme
 
 pl 15.jcn4
diff --git a/TODO b/TODO
index 79b6623e1a3c665c19efa4c5c2adbdfd60f97224..d6bef869f2f9f0bc8e79073f731b7a8abb7ab705 100644 (file)
--- a/TODO
+++ b/TODO
@@ -531,7 +531,6 @@ PROJECTS
 
        * Keys:
        - merge key{item} & localkey{item}?
-       - Major/Minor
        - spacing, national styles?
 
        * Support for TAB
diff --git a/VERSION b/VERSION
index b9c75efb2e220741e46b58769edaf4468b1157c9..414f826013c5a5bf3c8f535cb192cee2bdee1b8e 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=0
 PATCH_LEVEL=16
-MY_PATCH_LEVEL=jcn1
+MY_PATCH_LEVEL=mb1
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
index 4ab97b920fdd1b5f975e37a11e8859b9cb83da14..5722c69cc0f222b875bf8f6762a49dcf1b6efa4e 100644 (file)
@@ -48,6 +48,11 @@ beamquantisation     2       quantise avoide wedge2) \beampostraditional
 keyoctaviation 0       Key signature only for specified octave \specialkey
 keyoctaviation 1       Key signature for all octaves   \normalkey
 
+keymodality            0       Major key               \major
+keymodality            3       Minor key               \minor
+keymodality            n       modality n half tones from the major key
+
+
 timeSignatureStyle     C       Use C and stroked C for 4/4,2/2
 timeSignatureStyle     old     Use old style mensuration marks
 timeSignatureStyle     1       Use single number
@@ -271,3 +276,10 @@ specialkey = {
        \property Staff.keyoctaviation = 0
 }
 
+major = {
+       \property Staff.keymodality = 0
+}
+
+minor = {
+       \property Staff.keymodality = 3
+}
index 211c7c1e20b1cf9cb0abf6c3e70437f052a23f7e..e4bc5c932136d3814a6c3f8d356d817bf934bea2 100644 (file)
@@ -6,8 +6,8 @@ test key itemv breaking
 \score {
   \notes
   {
-    \key bes; c1 \key c;  c1
+    \key bes; c1 \minor \key c;  c1
     \break
-    \key bes; c1 \key d;\break c1
+    \major \key bes; c1 \key d;\break c1
   }
 }
index 3908c4cf641ad7fffcdec22a55304d5a64058362..03076b7ef04f2779383bfdb1869f06673dd87359 100644 (file)
@@ -1,3 +1,5 @@
+\version "1.0.7";
+
 \property Staff.timeSignatureStyle = "C"
 \time 1/1;
 c''1^"timeSignatureStyle = \"C\"" |
index 493b1b735e16e4064562c7a79ad56afe6f342756..ab761ac955940f58a89986db84edc735d0e0efe7 100644 (file)
@@ -31,8 +31,8 @@ public:
   
   Atom accidental (int) const;
   void add (String, Symtable*);
-  virtual Atom afm_find (String s) const = 0;
-  Atom afm_find (String, String) const;
+  virtual Atom afm_find (String s, bool warn=true) const = 0;
+  Atom afm_find (String, String, bool warn=true) const;
   virtual Atom* atom_p (String, int, Box) const = 0;
   Atom ball (int) const;
   Atom bar (String, Real height) const;
index 2f3c3f599c57f2f6ca630fc0df26fb60b30adb7c..e03a3e86463a06045473b00ae83de5feef526801 100644 (file)
@@ -129,6 +129,8 @@ public:
     
   /// force/supress printing of accidental.
   bool forceacc_b_;
+  /// Cautionary, i.e. parenthesized accidental.
+  bool cautionary_b_;
   Note_req();
   bool do_equal_b (Request*) const;
   Rhythmic_req* access_Rhythmic_req () { return Rhythmic_req::access_Rhythmic_req (); }
index 0b6481be6dd0c44a9edeae484d9918f98f90956b..99a14a9fa0aaa52414c7ab4d6ea0b000edf8724a 100644 (file)
@@ -19,7 +19,7 @@ public:
   Ps_lookup (Symtables const& s);
   virtual ~Ps_lookup ();
 
-  virtual Atom afm_find (String s) const;
+  virtual Atom afm_find (String s, bool warn=false) const;
   virtual Atom* atom_p (String, int, Box) const;
   virtual String character_str (int i) const;
   virtual Atom hairpin (Real width, bool decresc, bool continued) const;
diff --git a/lily/include/ps-lookup.hh.orig b/lily/include/ps-lookup.hh.orig
new file mode 100644 (file)
index 0000000..0b6481b
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+  tex-lookup.hh -- declare Tex_lookup
+
+  source file of the GNU LilyPond music typesetter
+
+  (c)  1997--1998 Jan Nieuwenhuizen <janneke@gnu.org>
+*/
+
+#ifndef PS_LOOKUP_HH
+#define PS_LOOKUP_HH
+
+#include "lookup.hh"
+
+class Ps_lookup : public Lookup
+{
+public:
+  Ps_lookup ();
+  Ps_lookup (Lookup const& s);
+  Ps_lookup (Symtables const& s);
+  virtual ~Ps_lookup ();
+
+  virtual Atom afm_find (String s) const;
+  virtual Atom* atom_p (String, int, Box) const;
+  virtual String character_str (int i) const;
+  virtual Atom hairpin (Real width, bool decresc, bool continued) const;
+  virtual Lookup* lookup_p (Lookup const&) const;
+  virtual Lookup* lookup_p (Symtables const&) const;
+  virtual Paper_outputter* paper_outputter_p (Paper_stream*, Paper_def*, Scope*, String) const;
+  virtual Paper_stream* paper_stream_p () const;
+  virtual Atom plet (Real dy , Real dx, Direction dir) const;
+  virtual Atom ps_beam (Real slope, Real width, Real thick) const;
+  virtual Atom slur (Array<Offset> controls) const;
+  virtual Atom stem (Real y1, Real y2) const;
+  virtual Atom text (String style, String text) const;
+  virtual String unknown_str () const;
+  virtual Atom vbracket (Real &y) const;
+};
+
+#endif // PS_LOOKUP_HH
index 2341c4484c74bbcb0bc306f240cedb7f62d94f1f..5f812088aff978b24c202bb890de6189d7c755e1 100644 (file)
@@ -20,7 +20,7 @@ public:
   Tex_lookup (Symtables const& s);
   virtual ~Tex_lookup();
 
-  virtual Atom afm_find (String s) const;
+  virtual Atom afm_find (String s, bool warn=false) const;
   virtual String character_str (int i) const;
   virtual Atom* atom_p (String, int, Box) const;
   Atom embed (Atom a) const;
diff --git a/lily/include/tex-lookup.hh.orig b/lily/include/tex-lookup.hh.orig
new file mode 100644 (file)
index 0000000..2341c44
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+  tex-lookup.hh -- declare Tex_lookup
+
+  source file of the GNU LilyPond music typesetter
+
+  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  Jan Nieuwenhuizen <janneke@gnu.org>
+*/
+
+#ifndef TEX_LOOKUP_HH
+#define TEX_LOOKUP_HH
+
+#include "ps-lookup.hh"
+
+class Tex_lookup : public Ps_lookup
+{
+public:
+  Tex_lookup ();
+  Tex_lookup (Lookup const& s);
+  Tex_lookup (Symtables const& s);
+  virtual ~Tex_lookup();
+
+  virtual Atom afm_find (String s) const;
+  virtual String character_str (int i) const;
+  virtual Atom* atom_p (String, int, Box) const;
+  Atom embed (Atom a) const;
+  virtual Atom hairpin (Real width, bool decresc, bool continued) const;
+  virtual Lookup* lookup_p (Lookup const&) const;
+  virtual Lookup* lookup_p (Symtables const&) const;
+  virtual Paper_outputter* paper_outputter_p (Paper_stream*, Paper_def*, Scope*, String) const;
+  virtual Paper_stream* paper_stream_p () const;
+  virtual Atom plet (Real dy , Real dx, Direction dir) const;
+  virtual String print_dimen (Real) const;
+  virtual Atom ps_beam (Real slope, Real width, Real thick) const;
+  virtual Atom slur (Array<Offset> controls) const;
+  virtual Atom stem (Real y1, Real y2) const;
+  virtual Atom text (String style, String text) const;
+  virtual String unknown_str () const;
+  virtual Atom vbracket (Real &y) const;
+};
+
+#endif // TEX_LOOKUP_HH
index be1cedace102c5db5adfb3fe1463144eff362fa4..e06bb1d63d5454c48745c3954f93c7480fe0d903 100644 (file)
@@ -95,6 +95,7 @@ Key_engraver::do_pre_move_processing ()
 void
 Key_engraver::read_req (Key_change_req const * r)
 {
+  int modality=0;
   old_accidental_idx_arr_ = accidental_idx_arr_;
   key_.clear ();
   Scalar prop = get_property ("keyoctaviation");
@@ -102,6 +103,11 @@ Key_engraver::read_req (Key_change_req const * r)
     {
       key_.multi_octave_b_ = ! prop.to_bool ();
     }
+  prop = get_property ("keymodality");
+  if (prop.isnum_b ())
+    {
+      modality=(int)prop;
+    }
   
   accidental_idx_arr_.clear ();
 
@@ -116,8 +122,7 @@ Key_engraver::read_req (Key_change_req const * r)
       else
        {
          p = r->pitch_arr_[0].semitone_pitch ();
-         if (r->minor_b ())
-           p += 3;
+         p += modality;
        }
       /* Solve the equation 7*no_of_acc mod 12 = p, -6 <= no_of_acc <= 5 */
       int no_of_acc = (7*p) % 12;
index c6a3a0718946faf0113bf6daa1869bd7fa7f19ee..a74b27d79e1736a39a5bc5caf5cb6138220cb69d 100644 (file)
@@ -67,6 +67,12 @@ Local_key_engraver::process_acknowledged ()
              key_item_p_ = new Local_key_item;
              announce_element (Score_element_info (key_item_p_, 0));         
            }
+         ///////// TODO: Handle cautionary accidentals
+         if (note_l->cautionary_b_)
+           {
+             warning (_("cautionary accidentals are not yet supported"));
+           }
+
          key_item_p_->add (note_l->pitch_);
          key_item_p_->add_support (support_l);
          local_key_.set (note_l->pitch_);
index 7f67472b141f8cde8201cfe75a1c47997c5430f7..07e7e63ca4ddeb5578e2cb1e30f83d78514a5b9e 100644 (file)
@@ -66,7 +66,7 @@ Lookup::add (String s, Symtable*p)
 }
 
 Atom
-Lookup::afm_find (String s, String str) const
+Lookup::afm_find (String s, String str, bool warn) const
 {
   if (!afm_p_)
     {
@@ -75,7 +75,7 @@ Lookup::afm_find (String s, String str) const
       *mlog << "]" << flush ;
       DOUT << this->afm_p_->str ();
     }
-  Adobe_font_char_metric m = afm_p_->find_char (s);
+  Adobe_font_char_metric m = afm_p_->find_char (s, warn);
 
   Atom a;
   if (m.code () < 0)
@@ -282,11 +282,11 @@ Atom
 Lookup::special_time_signature (String s, Array<Scalar> arr) const
 {
   String symbolname = "timesig-"+s+"%/%";
-  Atom a (afm_find (substitute_args (symbolname, arr)));
+  Atom a (afm_find (substitute_args (symbolname, arr), false));
   if (!a.empty ()) 
     return a;
   // Try if the full name was given
-  a = afm_find ("timesig-"+s);
+  a = afm_find ("timesig-"+s, false);
   if (!a.empty ()) 
     return a;
   // Resort to default layout with numbers
diff --git a/lily/lookup.cc.orig b/lily/lookup.cc.orig
new file mode 100644 (file)
index 0000000..7f67472
--- /dev/null
@@ -0,0 +1,422 @@
+/*
+  lookup.cc -- implement simple Lookup methods.
+
+  source file of the GNU LilyPond music typesetter
+
+  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+  Jan Nieuwenhuizen <janneke@gnu.org>
+
+  TODO
+      Read spacing info from AFMs
+      Glissando
+*/
+
+#include "lookup.hh"
+#include "debug.hh"
+#include "dimensions.hh"
+#include "symtable.hh"
+#include "scalar.hh"
+#include "paper-def.hh"
+#include "string-convert.hh"
+#include "main.hh"
+#include "lily-guile.hh"
+
+Lookup::Lookup ()
+{
+  paper_l_ = 0;
+  symtables_p_ = new Symtables;
+  afm_p_ =0;
+}
+
+Lookup::Lookup (Lookup const& s)
+{
+  font_ = s.font_;
+  font_path_ = s.font_path_;
+  paper_l_ = s.paper_l_;
+  symtables_p_ = new Symtables (*s.symtables_p_);
+  afm_p_ = 0;
+}
+
+Lookup::Lookup (Symtables const& s)
+{
+  font_ = s.font_;
+  font_path_ = s.font_path_;
+  paper_l_ = 0;
+  symtables_p_ = new Symtables (s);
+  afm_p_ = 0;
+}
+
+Lookup::~Lookup ()
+{
+  delete afm_p_;
+  delete symtables_p_;
+}
+
+Atom
+Lookup::accidental (int j) const
+{
+  return afm_find (String ("accidentals") + String ("-") + to_str (j));
+}
+
+void
+Lookup::add (String s, Symtable*p)
+{
+  symtables_p_->add (s, p);
+}
+
+Atom
+Lookup::afm_find (String s, String str) const
+{
+  if (!afm_p_)
+    {
+      *mlog << "[" << font_path_;
+      ( (Lookup*)this)->afm_p_ = new Adobe_font_metric (read_afm (font_path_));
+      *mlog << "]" << flush ;
+      DOUT << this->afm_p_->str ();
+    }
+  Adobe_font_char_metric m = afm_p_->find_char (s);
+
+  Atom a;
+  if (m.code () < 0)
+    return a;
+  
+  a.dim_ = m.B_;
+  a.dim_[X_AXIS] *= 1 / 1000.0;
+  a.dim_[Y_AXIS] *= 1 / 1000.0;
+  a.str_ = String_convert::form_str (str.ch_C (), m.code ());
+  a.font_ = font_;
+  return a;
+}
+
+Atom
+Lookup::ball (int j) const
+{
+  if (j > 2)
+    j = 2;
+
+  return afm_find (String ("balls") + String ("-") + to_str (j));
+}
+
+Atom
+Lookup::bar (String str, Real h) const
+{
+  Array<String> a;
+  a.push (print_dimen (h));
+  Atom s = (*symtables_p_) ("bars")->lookup (str);
+  s.str_ = substitute_args (s.str_, a);
+  s.dim_.y () = Interval (-h/2, h/2);
+  s.font_ = font_;
+  return s;
+}
+
+String
+Lookup::base_output_str () const
+{
+  assert (paper_l_);
+  String str = paper_l_->get_default_output ();
+
+  if (str.empty_b ())
+    {
+      str = default_outname_base_global;
+      int def = paper_l_->get_next_default_count ();
+      if (def)
+       str += "-" + to_str (def);
+    }
+  return str;
+}
+
+Atom 
+Lookup::beam (Real slope, Real width, Real thick) const
+{
+  Atom a (ps_beam (slope, width, thick));
+  Real height = slope * width; 
+  Real min_y = (0 <? height) - thick/2;
+  Real max_y = (0 >? height) + thick/2;
+  
+  a.dim_[X_AXIS] = Interval (0, width);
+  a.dim_[Y_AXIS] = Interval (min_y, max_y);
+  return a;
+}
+
+String
+Lookup::character_str (int i) const
+{
+  return to_str (i);
+}
+
+Atom
+Lookup::clef (String st) const
+{
+  return afm_find (String ("clefs") + String ("-") + st);
+}
+
+Atom
+Lookup::dashed_slur (Array<Offset> controls, Real thick, Real dash) const
+{
+  assert (controls.size () == 8);
+
+  Real dx = controls[3].x () - controls[0].x ();
+  Real dy = controls[3].y () - controls[0].y ();
+
+  Atom a;
+  a.font_ = font_;
+  a.dim_[X_AXIS] = Interval (0, dx);
+  a.dim_[Y_AXIS] = Interval (0 <? dy,  0 >? dy);
+
+#ifndef HAVE_LIBGUILE
+
+  String ps;
+  for (int i = 1; i < 4; i++)
+    ps += String_convert::double_str (controls[i].x ()) + " "
+      + String_convert::double_str (controls[i].y ()) + " ";
+
+  ps += String_convert::double_str (controls[0].x ()) + " "
+    + String_convert::double_str (controls[0].y ()) + " ";
+
+  ps += String_convert::double_str (thick) + " ";
+  Real on = dash > 1? thick * dash - thick : 0;
+  Real off = 2 * thick;
+  ps += "[" + String_convert::double_str (on) + " ";
+  ps += String_convert::double_str (off) + "] ";
+  ps += String_convert::int_str (0) + " ";
+  ps += "draw_dashed_slur ";
+
+  a.str_ = ps;
+
+#else // HAVE_LIBGUILE
+
+  // (lambda (o) (dashed-slur o '((0.1 0.2) (1.1 1.2) (2.1 2.2) (3.1 3.2))))
+  a.lambda_ = 
+    gh_append (gh_lambda_o (), 
+    gh_list1 (gh_append (gh_func_o ("dashed-slur"),
+    gh_cons (gh_double2scm (thick), gh_cons (gh_double2scm (dash),
+    gh_list1 (gh_list2 (gh_quote (),
+    gh_cons (gh_list2 (gh_double2scm (controls[0].x ()), gh_double2scm (controls[0].y ())),
+    gh_cons (gh_list2 (gh_double2scm (controls[1].x ()), gh_double2scm (controls[1].y ())),
+    gh_cons (gh_list2 (gh_double2scm (controls[2].x ()), gh_double2scm (controls[2].y ())),
+    gh_cons (gh_list2 (gh_double2scm (controls[3].x ()), gh_double2scm (controls[3].y ())),
+    SCM_EOL)))))))))));
+
+#endif // HAVE_LIBGUILE
+
+  return a;
+}
+
+Atom
+Lookup::dots () const
+{
+  return afm_find (String ("dots") + String ("-") + String ("dot"));
+}
+
+Atom
+Lookup::dynamic (String st) const
+{
+  return (*symtables_p_) ("dynamics")->lookup (st);
+}
+
+Atom
+Lookup::fill (Box b) const
+{
+  Atom a;
+  a.dim_ = b;
+  return a;
+}
+
+Atom
+Lookup::flag (int j, Direction d) const
+{
+  char c = (d == UP) ? 'u' : 'd';
+  return afm_find (String ("flags") + String ("-") + to_str (c) + to_str (j));
+}
+
+void
+Lookup::print () const
+{
+#ifndef NPRINT
+  DOUT << "Lookup {\n";
+  symtables_p_->print ();
+  DOUT << "}\n";
+#endif
+}
+
+String
+Lookup::print_dimen (Real r) const
+{
+  String s = to_str (r, "%.3f");
+  if (s.index_i ("NaN") != -1)
+    {
+      warning (_ ("NaN"));
+      s = "0.0";
+    }
+  return s;
+}
+
+Atom
+Lookup::rest (int j, bool o) const
+{
+   return afm_find (String ("rests")
+                   + String ("-") + to_str (j) + (o ? "o" : ""));
+}
+
+Atom
+Lookup::rule_symbol (Real height, Real width) const
+{
+  Atom bs= (*symtables_p_) ("param")->lookup ("rule");
+  Array<String> args;
+  args.push (print_dimen (height));
+  args.push (print_dimen (width));
+  bs.str_ = substitute_args (bs.str_, args);
+  bs.dim_.x () = Interval (0, width);
+  bs.dim_.y () = Interval (0, height);
+  return bs;
+}
+
+Atom
+Lookup::script (String str) const
+{
+  return afm_find (String ("scripts") + String ("-") + str);
+}
+
+Atom
+Lookup::special_time_signature (String s, Array<Scalar> arr) const
+{
+  String symbolname = "timesig-"+s+"%/%";
+  Atom a (afm_find (substitute_args (symbolname, arr)));
+  if (!a.empty ()) 
+    return a;
+  // Try if the full name was given
+  a = afm_find ("timesig-"+s);
+  if (!a.empty ()) 
+    return a;
+  // Resort to default layout with numbers
+  return time_signature (arr);
+}
+
+static void
+substitute_arg (String& r, String arg)
+{
+  int p = r.index_i ('%');
+  if (p < 0)
+       return ;
+
+  r = r.left_str (p) + arg + r.right_str (r.length_i () - p - 1);
+}
+
+String
+Lookup::substitute_args (String source, Array<String> args) const
+{
+  String str (source);
+  for (int i = 0 ; i < args.size (); i++)
+    substitute_arg (str, args[i]);
+  return str;
+}
+
+String
+Lookup::substitute_args (String source, Array<Scalar> args) const
+{
+  Array<String> sv;
+  for (int i = 0 ; i < args.size (); i++)
+    sv.push (args[i]);
+  return substitute_args (source, sv);
+}
+
+Atom
+Lookup::stem (Real y1, Real y2, String str) const
+{
+  if (y1 > y2)
+    {
+      Real t = y1;
+      y1 = y2;
+      y2 = t;
+    }
+  Atom s;
+
+  s.dim_.x () = Interval (0,0);
+  s.dim_.y () = Interval (y1,y2);
+
+  Array<String> a;
+
+  Real stem_width = paper_l_->get_var ("stemthickness");
+  a.push (print_dimen (-stem_width /2));
+  a.push (print_dimen (stem_width));
+  a.push (print_dimen (y2));
+  a.push (print_dimen (-y1));
+
+  s.str_ = substitute_args (str, a);
+  s.font_ = font_;
+  return s;
+}
+
+Atom
+Lookup::streepje (int type) const
+{
+  if (type > 2)
+    type = 2;
+
+  return  afm_find ("balls" + String ("-") +to_str (type) + "l");
+}
+
+Atom
+Lookup::text (String style, String text) const
+{
+  Array<String> a;
+
+  a.push (text);
+  Atom s =  (*symtables_p_) ("style")->lookup (style);
+  s.str_ = substitute_args (s.str_,a);
+  s.font_ = font_;
+
+  return s;
+}
+
+Atom
+Lookup::time_signature (Array<Scalar> a) const
+{
+  Atom s ((*symtables_p_) ("param")->lookup ("time_signature"));
+  s.str_ = substitute_args (s.str_, a);
+
+  return s;
+}
+
+/*
+  should be handled via Tex_ code and Lookup::bar ()
+ */
+Atom
+Lookup::vbrace (Real &y) const
+{
+  Atom brace = (*symtables_p_) ("param")->lookup ( "brace");
+  Interval ydims = brace.dim_[Y_AXIS];
+  Real min_y = ydims[LEFT];
+  Real max_y = ydims[RIGHT];
+  Real step = 1.0 PT;
+  if (y < min_y)
+    {
+      warning (_ ("piano brace") 
+       + " " + _ ("too small") +  " (" + print_dimen (y) + ")");
+      y = min_y;
+    }
+  if (y > max_y)
+    {
+      warning (_ ("piano brace")
+       + " " + _ ("too big") + " (" + print_dimen (y) + ")");
+      y = max_y;
+    }
+
+  
+  int idx = int (rint ( (y- min_y)/step)) + 1;
+  
+  {
+    Array<String> a;
+    a.push (character_str (idx));
+    brace.str_ = substitute_args (brace.str_,a);
+    brace.dim_[Y_AXIS] = Interval (-y/2,y/2);
+  }
+
+  brace.font_ = font_;
+
+  return brace;
+}
+
+
index 3ee6004add9f0e2d330c6cf08213de3d38037da7..dd7da312df0ae8b6cfbdcb009b9ac408ec749a80 100644 (file)
@@ -184,6 +184,7 @@ Note_req::do_equal_b (Request*r) const
 
 Note_req::Note_req ()
 {
+  cautionary_b_ = false;
   forceacc_b_ = false;
 }
 
@@ -194,7 +195,11 @@ Note_req::do_print () const
 {
 #ifndef NPRINT
   Melodic_req::do_print ();
-  if (forceacc_b_)
+  if (cautionary_b_)
+    {
+       DOUT << " force cautionary accidental\n";
+    }
+  else if (forceacc_b_)
     {
        DOUT << " force accidental\n";
     }
index c73b8b812bf7819623c1ed5b2fd08609a476685f..1c254c822725d2114e465f6bd0b01afad8faa150 100644 (file)
@@ -1031,6 +1031,10 @@ steno_notepitch:
        | steno_notepitch  '!'          {
                $$->forceacc_b_ = ! $$->forceacc_b_;
        }
+       | steno_notepitch  '?'          {
+               $$->forceacc_b_ = ! $$->forceacc_b_;
+               $$->cautionary_b_ = ! $$->cautionary_b_;
+       }
        ;
 
 
diff --git a/lily/parser.yy.orig b/lily/parser.yy.orig
new file mode 100644 (file)
index 0000000..c73b8b8
--- /dev/null
@@ -0,0 +1,1504 @@
+%{ // -*-Fundamental-*-
+
+/*
+  parser.yy -- Bison/C++ parser for mudela
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+           Jan Nieuwenhuizen <janneke@gnu.org>
+*/
+
+#include <iostream.h>
+#include "lily-guile.hh"
+#include "notename-table.hh"
+#include "scalar.hh"
+#include "translation-property.hh"
+#include "script-def.hh"
+#include "symtable.hh"
+#include "lookup.hh"
+#include "ps-lookup.hh"
+#include "tex-lookup.hh"
+#include "misc.hh"
+#include "my-lily-lexer.hh"
+#include "paper-def.hh"
+#include "midi-def.hh"
+#include "main.hh"
+#include "file-path.hh"
+#include "keyword.hh"
+#include "debug.hh"
+#include "parseconstruct.hh"
+#include "dimensions.hh"
+#include "identifier.hh"
+#include "command-request.hh"
+#include "musical-request.hh"
+#include "my-lily-parser.hh"
+#include "text-def.hh"
+#include "translator-group.hh"
+#include "score.hh"
+#include "music-list.hh"
+#include "duration-convert.hh"
+#include "change-translator.hh"
+#include "file-results.hh"
+#include "mudela-version.hh"
+#include "scope.hh"
+#include "relative-music.hh"
+#include "transposed-music.hh"
+#include "compressed-music.hh"
+
+// mmm
+Mudela_version oldest_version ("1.0.7");
+Mudela_version version ("1.0.8");
+
+
+// needed for bison.simple's malloc() and free()
+#include <malloc.h>
+
+int const GUESS_PLET = 5;
+int guess_plet_a[GUESS_PLET] =
+{ 
+  1,
+  3,
+  2,
+  3,
+  4
+};
+
+struct Assignment {
+       String *name_p_;
+       Identifier *id_p_;
+       ~Assignment () {
+               delete name_p_;
+               delete id_p_;
+       }
+       Assignment () {
+               name_p_ = 0;
+               id_p_ =0;
+       }
+       Assignment (Assignment const&s)
+       {
+               name_p_ = new String (*s.name_p_);
+               id_p_ = s.id_p_->clone ();
+       }
+};
+
+Paper_def* current_paper = 0;
+
+#ifndef NDEBUG
+#define YYDEBUG 1
+#endif
+
+#define YYERROR_VERBOSE 1
+
+#define YYPARSE_PARAM my_lily_parser_l
+#define YYLEX_PARAM my_lily_parser_l
+#define THIS ((My_lily_parser *) my_lily_parser_l)
+
+#define yyerror THIS->parser_error
+#define ARRAY_SIZE(a,s)   if (a.size () != s) THIS->parser_error (_f("expecting %d arguments", s))
+
+
+%}
+
+
+%union {
+    Array<Interval>* intarr;
+    Array<Musical_pitch> *pitch_arr;
+    Array<String> * strvec;
+    Array<int> *intvec;
+    Box *box;
+    Simultaneous_music *chord;
+    Duration *duration;
+    Identifier *id;
+    Translator* trans;
+    Music *music;
+    Music_list *music_list;
+    Score *score;
+    Scope *scope;
+    Interval *interval;
+    Musical_req* musreq;
+    Music_output_def * outputdef;
+    Musical_pitch * pitch;
+    Midi_def* midi;
+    Moment *moment;
+    Note_req *notereq;
+    Notename_table *notenametab;
+    Paper_def *paper;
+    Real real;
+    Request * request;
+    General_script_def * script;
+    Scalar *scalar;
+    String *string;
+    Atom * symbol;
+    Symtable * symtable;
+    Symtables* symtables;
+    Text_def * textdef;
+    Tempo_req *tempo;
+    char c;
+    const char *consstr;
+    int i;
+    int pair[2];
+    int ii[10];
+}
+%{
+
+int
+yylex (YYSTYPE *s,  void * v_l)
+{
+       My_lily_parser   *pars_l = (My_lily_parser*) v_l;
+       My_lily_lexer * lex_l = pars_l->lexer_p_;
+
+       lex_l->lexval_l = (void*) s;
+       return lex_l->yylex ();
+}
+
+
+%}
+
+%pure_parser
+
+/* tokens which are not keywords */
+
+%token ABSDYNAMIC
+%token ACCEPTS
+%token BAR
+%token BEAMPLET
+%token CADENZA
+%token CLEF
+%token CM_T
+%token CONSISTS
+%token DURATION
+%token END
+%token FONT
+%token GROUPING
+%token HEADER
+%token IN_T
+%token KEY
+%token KEYSIGNATURE
+%token LYRICS
+%token MAEBTELP
+%token MARK
+%token MEASURES
+%token MIDI
+%token MM_T
+%token MUSIC
+%token MUSICAL_PITCH
+%token NAME
+%token NOTENAMES
+%token NOTES
+%token OCTAVE
+%token OUTPUT
+%token PAPER
+%token PARTIAL
+%token PENALTY
+%token PLET
+%token PROPERTY
+%token PT_T
+%token RELATIVE
+%token REMOVE
+%token SCHEME /* token vs typedef;  can't be named SCM */
+%token SCORE
+%token SCRIPT
+%token SHAPE
+%token SKIP
+%token SPANDYNAMIC
+%token SYMBOLTABLES
+%token TABLE
+%token TELP
+%token TEMPO
+%token TIME_T
+%token TIMES
+%token TRANSLATOR
+%token TRANSPOSE
+%token TYPE
+%token VERSION
+
+/* escaped */
+%token E_EXCLAMATION E_SMALLER E_BIGGER E_CHAR
+
+%type <i>      dots
+%token <i>     DIGIT
+%token <pitch> NOTENAME_PITCH
+%token <id>    DURATION_IDENTIFIER
+%token <id>    IDENTIFIER
+%token <id>    NOTENAME_TABLE_IDENTIFIER
+%token <id>    MUSIC_IDENTIFIER
+%token <id>    POST_REQUEST_IDENTIFIER
+%token <id>    SCRIPT_IDENTIFIER
+%token <id>    COMMAND_IDENTIFIER
+%token <id>    REAL_IDENTIFIER
+%token <id>    STRING_IDENTIFIER
+%token <id>    TRANS_IDENTIFIER
+%token <id>    INT_IDENTIFIER
+%token <id>    SCORE_IDENTIFIER
+%token <id>    MIDI_IDENTIFIER
+%token <id>    PAPER_IDENTIFIER
+%token <id>    REQUEST_IDENTIFIER
+%token <real>  REAL
+%token <string>        DURATION RESTNAME
+%token <string>        STRING
+%token <i>     UNSIGNED
+
+
+%type <outputdef> output_def
+%type <scope>  mudela_header mudela_header_body
+%type <box>    box
+%type <i>      open_request_parens close_request_parens
+%type <i>      open_abbrev_parens
+%type <i>      open_plet_parens close_plet_parens
+%type <i>      sub_quotes sup_quotes
+%type <music>  simple_element  request_chord command_element Simple_music  Composite_music
+%type <i>      abbrev_type
+%type <i>      int unsigned
+%type <i>      script_dir
+%type <id>     identifier_init simple_identifier_init block_identifier
+%type <duration> steno_duration notemode_duration
+%type <duration> entered_notemode_duration explicit_duration
+%type <interval>       dinterval
+%type <intvec> intastint_list int_list
+%type <symtables>      symtables symtables_body
+
+%type <pitch>   explicit_musical_pitch steno_musical_pitch musical_pitch absolute_musical_pitch
+%type <notereq>        steno_notepitch
+%type <pitch_arr>      pitch_list
+%type <midi>   midi_block midi_body
+%type <duration>       duration_length
+
+%type <scalar>  scalar
+%type <music>  Music  relative_music Sequential_music Simultaneous_music
+%type <music>  property_def translator_change
+%type <music_list> Music_list
+%type <paper>  paper_block paper_def_body
+%type <real>   real_expression real dimension
+%type <request> abbrev_command_req
+%type <request>        post_request structured_post_request
+%type <pair>   plet_fraction
+%type <request> command_req verbose_command_req
+%type <request>        script_req  dynamic_req
+%type <string> string
+%type <score>  score_block score_body
+%type <intarr> shape_array
+%type <script> script_definition script_body mudela_script gen_script_def
+%type <textdef> text_def finger
+%type <string> script_abbreviation
+%type <symbol> symboldef
+%type <symtable>       symtable symtable_body
+%type <trans>  translator_spec translator_spec_body
+%type <tempo>  tempo_request
+%type <notenametab> notenames_body notenames_block
+%expect 3
+
+
+%left '-' '+'
+%left '*' '/'
+%left UNARY_MINUS
+
+%%
+
+mudela:        /* empty */
+       | mudela toplevel_expression {}
+       | mudela assignment { }
+       | mudela error
+       | mudela check_version { }
+       ;
+
+toplevel_expression:
+       notenames_block                 {
+               THIS->lexer_p_->set_notename_table ($1);
+       }
+       | mudela_header {
+               delete header_global_p;
+               header_global_p = $1;
+       }
+       | score_block {
+               score_global_array.push ($1);
+       }
+       | paper_block {
+               Identifier * id = new
+                       Paper_def_identifier ($1, PAPER_IDENTIFIER);
+               THIS->lexer_p_->set_identifier ("$defaultpaper", id)
+       }
+       | midi_block {
+               Identifier * id = new
+                       Midi_def_identifier ($1, MIDI_IDENTIFIER);
+               THIS->lexer_p_->set_identifier ("$defaultmidi", id)
+       }
+       | embedded_scm { 
+       }
+       ;
+
+embedded_scm:
+       SCHEME STRING ';' {
+       #ifdef HAVE_LIBGUILE
+               gh_eval_str ($2->ch_C ());
+       #endif
+               delete $2;
+       };
+
+check_version:
+       VERSION STRING ';'              {
+               Mudela_version ver (*$2);
+               if (!((ver >= oldest_version) && (ver <= version))) {
+                       if (THIS->ignore_version_b_) {
+                               THIS->here_input ().error (_f ("incorrect mudela version: %s (%s, %s)", ver.str (), oldest_version.str (), version.str ()));
+                       } else {
+                               THIS->fatal_error_i_ = 1;
+                               THIS->parser_error (_f ("incorrect mudela version: %s (%s, %s)", ver.str (), oldest_version.str (), version.str ()));
+                       }
+               }
+       }
+       ;
+
+
+notenames_block:
+       NOTENAMES '{' notenames_body '}'  {  $$ = $3; }
+       ;
+
+
+
+notenames_body:
+       /**/    {
+               $$ = new Notename_table;
+       }
+       | NOTENAME_TABLE_IDENTIFIER     {
+               $$ = $1-> access_Notename_table(true);
+       }
+       | notenames_body STRING '=' explicit_musical_pitch {
+               (*$$)[*$2] = *$4;
+
+               delete $4;
+               delete $2;
+       }
+       ;
+
+mudela_header_body:
+       {
+               $$ = new Scope;
+               THIS->lexer_p_-> scope_l_arr_.push ($$);
+       }
+       | mudela_header_body assignment ';' { 
+
+       }
+       ;
+
+mudela_header:
+       HEADER '{' mudela_header_body '}'       {
+               $$ = $3;
+               THIS->lexer_p_-> scope_l_arr_.pop ();           
+       }
+       ;
+
+
+/*
+       DECLARATIONS
+*/
+assignment:
+       STRING {
+               THIS->remember_spot ();
+       }
+       /* cont */ '=' identifier_init  {
+           THIS->lexer_p_->set_identifier (*$1, $4);
+           $4->init_b_ = THIS->init_parse_b_;
+           $4->set_spot (THIS->pop_spot ());
+       }
+       ;
+
+
+simple_identifier_init: identifier_init
+       ;
+
+identifier_init:
+       block_identifier
+       ;
+
+block_identifier:
+       score_block {
+               $$ = new Score_identifier ($1, SCORE_IDENTIFIER);
+
+       }
+       | notenames_block {
+               $$ = new Notename_table_identifier ($1, NOTENAME_TABLE_IDENTIFIER);
+       }
+       | paper_block {
+               $$ = new Paper_def_identifier ($1, PAPER_IDENTIFIER);
+       }
+       | midi_block {
+               $$ = new Midi_def_identifier ($1, MIDI_IDENTIFIER);
+
+       }
+       | symtables {
+               $$ = new Symtables_identifier ($1, IDENTIFIER);
+       }
+       | translator_spec {
+               $$ = new Translator_identifier ($1, TRANS_IDENTIFIER);
+       }
+       | Music  {
+               $$ = new Music_identifier ($1, MUSIC_IDENTIFIER);
+       }
+
+       | post_request {
+               $$ = new Request_identifier ($1, POST_REQUEST_IDENTIFIER);
+       }
+       | explicit_duration {
+               $$ = new Duration_identifier ($1, DURATION_IDENTIFIER);
+       }
+       | real {
+               $$ = new Real_identifier (new Real ($1), REAL_IDENTIFIER);
+       }
+       | string {
+               $$ = new String_identifier ($1, STRING_IDENTIFIER);
+       }
+       | int   {
+               $$ = new int_identifier (new int ($1), INT_IDENTIFIER);
+       }
+       | script_definition {
+               $$ = new General_script_def_identifier ($1, SCRIPT_IDENTIFIER);
+
+       }
+       ;
+
+translator_spec:
+       TRANSLATOR '{' translator_spec_body '}'
+               { $$ = $3; }
+       ;
+
+translator_spec_body:
+       TRANS_IDENTIFIER        {
+               $$ = $1->access_Translator (true);
+               $$-> set_spot (THIS->here_input ());
+       }
+       | TYPE STRING ';'       {
+               Translator* t = get_translator_l (*$2);
+               Translator_group * tg = t->access_Translator_group ();
+
+               if (!tg)
+                       THIS->parser_error (_("Need a translator group for a context"));
+               
+               t = t->clone ();
+               t->set_spot (THIS->here_input ());
+               $$ = t;
+               delete $2;
+       }
+       | translator_spec_body STRING '=' simple_identifier_init ';'    { 
+               Identifier* id = $4;
+               String_identifier *s = id->access_String_identifier ();
+               Real_identifier *r= id->access_Real_identifier ();
+               int_identifier *i = id->access_int_identifier ();
+       
+               String str;
+               if (s) str = *s->access_String (false); 
+               if (i) str = to_str (*i->access_int (false));
+               if (r) str = to_str (*r->access_Real (false));
+               if (!s && !i && !r)
+                       THIS->parser_error (_("Wrong type for property value"));
+
+               delete $4;
+               $$->set_property (*$2, str);
+       }
+       | translator_spec_body NAME STRING ';' {
+               $$->type_str_ = *$3;
+               delete $3;
+       }
+       | translator_spec_body CONSISTS STRING ';' {
+               $$->access_Translator_group ()-> set_element (*$3, true);
+               delete $3;
+       }
+       | translator_spec_body ACCEPTS STRING ';' {
+               $$->access_Translator_group ()-> set_acceptor (*$3, true);
+               delete $3;
+       }
+       | translator_spec_body REMOVE STRING ';' {
+               $$->access_Translator_group ()-> set_element (*$3, false);
+               delete $3;
+       }
+       ;
+
+/*
+       SCORE
+*/
+score_block:
+       SCORE { THIS->remember_spot ();
+               THIS->error_level_i_ =0;
+       }
+       /*cont*/ '{' score_body '}'     {
+               $$ = $4;
+               $$->set_spot (THIS->pop_spot ());
+               if (!$$->def_p_arr_.size ())
+                       $$->add_output (THIS->default_paper_p ());
+
+               /* handle error levels. */
+               $$->errorlevel_i_ = THIS->error_level_i_;
+               THIS->error_level_i_ = 0;
+       }
+       ;
+
+score_body:            {
+               $$ = new Score;
+       }
+       | SCORE_IDENTIFIER {
+               $$ = $1->access_Score (true);
+       }
+       | score_body mudela_header      {
+               $$->header_p_ = $2;
+       }
+       | score_body Music      {
+               if ($$->music_p_)
+                       $2->warning (_ ("More than one music block"));  
+               $$->music_p_ = $2;
+       }
+       | score_body output_def {
+               $$->add_output ($2);
+       }
+       | score_body error {
+
+       }
+       ;
+
+output_def:
+       paper_block {
+               $$ = $1;
+       }
+       |  midi_block           {
+               $$= $1;
+       }
+       ;
+
+intastint_list:
+       /* */   { $$ =new Array<int>; }
+       | intastint_list int '*' int    {
+               $$->push ($2); $$->push ($4);
+       }
+       | intastint_list int    {
+               $$->push ($2); $$->push (1);
+       }
+       ;       
+
+
+/*
+       PAPER
+*/
+paper_block:
+       PAPER '{' paper_def_body '}'    { 
+               $$ = $3;
+               THIS-> lexer_p_->scope_l_arr_.pop ();
+       }
+       ;
+
+optional_semicolon:
+       /* empty */
+       | ';'
+       ;
+
+paper_def_body:
+       /* empty */                     {
+               Paper_def *p = THIS->default_paper_p ();
+               THIS-> lexer_p_-> scope_l_arr_.push (p->scope_p_);
+               $$ = p;
+       }
+       | PAPER_IDENTIFIER optional_semicolon   {
+               Paper_def *p = $1->access_Paper_def (true);
+               THIS->lexer_p_->scope_l_arr_.push (p->scope_p_);
+               $$ = p;
+       }
+       | paper_def_body int '=' symtables              { // ugh, what a syntax
+               Lookup * l = global_lookup_l->lookup_p (*$4);
+               $$->set_lookup ($2, l);
+       }
+       | paper_def_body assignment ';' {
+
+       }
+       | paper_def_body translator_spec {
+               $$->assign_translator ($2);
+       }
+       | paper_def_body SHAPE '=' shape_array ';' {
+               $$->shape_int_a_ = *$4;
+               delete $4;
+       }
+       | paper_def_body error {
+
+       }
+       ;
+
+
+real:
+       real_expression         { $$ = $1; }
+       ;
+
+
+dimension:
+       REAL CM_T       {
+               $$ = $1 CM;
+       }
+       | REAL PT_T     {
+               $$ = $1 PT;
+       }
+       | REAL IN_T     {
+               $$ = $1 INCH;
+       }
+       | REAL MM_T     {
+               $$ = $1 MM;
+       }
+       ;
+
+real_expression:
+       REAL            {
+               $$ = $1;
+       }
+       | dimension
+       | REAL_IDENTIFIER               {
+               $$= *$1->access_Real (false);
+       }
+       | '-'  real_expression %prec UNARY_MINUS {
+               $$ = -$2;
+       }
+       | real_expression '*' real_expression {
+               $$ = $1 * $3;
+       }
+       | real_expression '/' real_expression {
+               $$ = $1 / $3;
+       }
+       | real_expression '+' real_expression {
+               $$ = $1  + $3;
+       }
+       | real_expression '-' real_expression {
+               $$ = $1 - $3;
+       }
+       | '(' real_expression ')'       {
+               $$ = $2;
+       }
+       ;
+               
+
+shape_array:
+       /* empty */ {
+               $$ = new Array<Interval>;
+       }
+       | shape_array real real {
+               $$->push(Interval($2, $2 + $3));
+       };
+
+/*
+       MIDI
+*/
+midi_block:
+       MIDI
+
+       '{' midi_body '}'       { $$ = $3; }
+       ;
+
+midi_body: /* empty */                 {
+               $$ = THIS->default_midi_p ();
+       }
+       | MIDI_IDENTIFIER       {
+               $$ = $1-> access_Midi_def (true);
+       }
+       | midi_body translator_spec     {
+               $$-> assign_translator ($2);
+       }
+       | midi_body tempo_request ';' {
+               $$->set_tempo ($2->dur_.length (), $2->metronome_i_);
+               delete $2;
+       }
+       | midi_body error {
+
+       }
+       ;
+
+tempo_request:
+       TEMPO entered_notemode_duration '=' unsigned    {
+               $$ = new Tempo_req;
+               $$->dur_ = *$2;
+               delete $2;
+               $$-> metronome_i_ = $4;
+       }
+       ;
+
+Music_list: /* empty */ {
+               $$ = new Music_list;
+       }
+       | Music_list Music {
+               $$->add_music ($2);
+       }
+       | Music_list error {
+       }
+       ;
+
+
+Music:
+       Simple_music
+       | Composite_music
+       ;
+
+Sequential_music: '{' Music_list '}'           {
+               $$ = new Sequential_music ($2);
+       }
+       ;
+
+Simultaneous_music: '<' Music_list '>' {
+               $$ = new Simultaneous_music ($2);
+       }
+       ;
+
+Simple_music:
+       request_chord           { $$ = $1; }
+       | MUSIC_IDENTIFIER { $$ = $1->access_Music (true); }
+       | property_def
+       | translator_change
+       ;
+
+
+Composite_music:
+       TYPE STRING Music       {
+               $$ = $3;
+               $$->translator_type_str_ = *$2;
+               delete $2;
+       }
+       | TYPE STRING '=' STRING Music {
+               $$ = $5;
+               $$->translator_type_str_ = *$2;
+               $$->translator_id_str_ = *$4;
+               delete $2;
+               delete $4;
+       }
+       | TIMES int '/' int Music       {
+               $$ = new Compressed_music ($2, $4, $5);
+
+       }
+       | Simultaneous_music            { $$ = $1; }
+       | Sequential_music              { $$ = $1; }
+       | TRANSPOSE musical_pitch Music {
+               $$ = new Transposed_music ($3, *$2);
+               delete $2;
+       }
+       | NOTES
+               { THIS->lexer_p_->push_note_state (); }
+       Music
+               { $$ = $3;
+                 THIS->lexer_p_->pop_state ();
+               }
+
+       | LYRICS
+               { THIS->lexer_p_->push_lyric_state (); }
+       Music
+               {
+                 $$ = $3;
+                 THIS->lexer_p_->pop_state ();
+               }
+       | relative_music        { $$ = $1; }
+       ;
+
+relative_music:
+       RELATIVE absolute_musical_pitch Music {
+               $$ = new Relative_octave_music ($3, *$2);
+               delete $2;
+       }
+       ;
+
+translator_change:
+       TRANSLATOR STRING '=' STRING  {
+               Change_translator * t = new Change_translator;
+               t-> change_to_type_str_ = *$2;
+               t-> change_to_id_str_ = *$4;
+
+               $$ = t;
+               $$->set_spot (THIS->here_input ());
+               delete $2;
+               delete $4;
+       }
+       ;
+
+property_def:
+       PROPERTY STRING '.' STRING '=' scalar   {
+               Translation_property *t = new Translation_property;
+               t-> translator_type_str_ = *$2;
+               t-> var_str_ = *$4;
+               t-> value_ = *$6;
+               $$ = t;
+               $$->set_spot (THIS->here_input ());
+               delete $2;
+               delete $4;
+               delete $6;
+       }
+       ;
+
+scalar:
+       STRING          { $$ = new Scalar (*$1); delete $1; }
+       | int           { $$ = new Scalar ($1); }
+       ;
+
+
+request_chord:
+       pre_requests simple_element post_requests       {
+               THIS->add_requests ((Simultaneous_music*)$2);//ugh
+               $$ = $2;
+       }
+       | command_element
+       ;
+
+command_element:
+       command_req {
+               $$ = new Request_chord;
+               $$-> set_spot (THIS->here_input ());
+               $1-> set_spot (THIS->here_input ());
+               ((Simultaneous_music*)$$) ->add_music ($1);//ugh
+       }
+       ;
+
+command_req:
+       abbrev_command_req
+       | verbose_command_req ';'       { $$ = $1; }
+       ;
+
+abbrev_command_req:
+       '|'                             {
+               $$ = new Barcheck_req;
+       }
+       | COMMAND_IDENTIFIER    {
+               $$ = $1->access_Request (true);
+       }
+/*
+       | '['           {
+               $$ = new Beam_req;
+               $$->spantype = Span_req::START;
+       }
+       | ']'           {
+               $$ = new Beam_req;
+               $$->spantype = Span_req::STOP;
+       }
+*/
+       ;
+
+
+verbose_command_req:
+       BAR STRING                      {
+               $$ = new Bar_req (*$2);
+               delete $2;
+       }
+       | MARK STRING {
+               $$ = new Mark_req (*$2);
+               delete $2;
+       }
+       | MARK unsigned {
+               $$ = new Mark_req (to_str ($2));
+       }
+       | TIME_T unsigned '/' unsigned  {
+               Time_signature_change_req *m = new Time_signature_change_req;
+               m->beats_i_ = $2;
+               m->one_beat_i_=$4;
+               $$ = m;
+       }
+       | PENALTY '=' int       {
+               Break_req * b = new Break_req;
+               b->penalty_i_ = $3;
+               b-> set_spot (THIS->here_input ());
+               $$ = b;
+       }
+       | SKIP duration_length {
+               Skip_req * skip_p = new Skip_req;
+               skip_p->duration_ = *$2;
+               delete $2;
+               $$ = skip_p;
+       }
+       | tempo_request {
+               $$ = $1;
+       }
+       | CADENZA unsigned      {
+               $$ = new Cadenza_req ($2);
+       }
+       | PARTIAL duration_length       {
+               $$ = new Partial_measure_req ($2->length ());
+               delete $2;
+       }
+       | CLEF STRING {
+               $$ = new Clef_change_req (*$2);
+               delete $2;
+       }
+       | KEY NOTENAME_PITCH    {
+               Key_change_req *key_p= new Key_change_req;
+               key_p->pitch_arr_.push(*$2);
+               key_p->ordinary_key_b_ = true;
+               $$ = key_p;
+               delete $2;
+       }
+       | KEYSIGNATURE pitch_list       {
+               Key_change_req *key_p= new Key_change_req;
+               key_p->pitch_arr_ = *$2;
+               key_p->ordinary_key_b_ = false;
+               $$ = key_p;
+               delete $2;
+       }
+       | GROUPING intastint_list {
+               $$ = get_grouping_req (*$2); delete $2;
+       }
+       ;
+
+post_requests:
+       {
+               /* something silly happened.  Junk this stuff*/
+               if (!THIS->post_reqs.empty ())
+               {
+                       warning ("Junking post-requests");
+                       THIS->post_reqs.clear ();
+               }
+       }
+       | post_requests structured_post_request {
+               $2->set_spot (THIS->here_input ());
+               THIS->post_reqs.push ($2);
+       }
+       | post_requests close_request_parens    {
+               Array<Request*>& r = *THIS->get_parens_request ($2);
+               for (int i = 0; i < r.size (); i++ )
+                       r[i]->set_spot (THIS->here_input ());
+               THIS->post_reqs.concat (r);
+               delete &r;
+       }
+       ;
+
+structured_post_request:
+       script_req
+       | post_request
+       ;
+
+post_request:
+       POST_REQUEST_IDENTIFIER {
+               $$ = (Request*)$1->access_Request (true);
+       }
+       | dynamic_req {
+               $$ = $1;
+       }
+       | abbrev_type   {
+               Abbreviation_req* a = new Abbreviation_req;
+               a->type_i_ = $1;
+               $$ = a;
+       }
+       ;
+
+sup_quotes:
+       '\'' {
+               $$ = 1;
+       }
+       | sup_quotes '\'' {
+               $$ ++;
+       }
+       ;
+sub_quotes:
+       ',' {
+               $$ = 1;
+       }
+       | sub_quotes ',' {
+               $$ ++ ;
+       }
+       ;
+
+steno_musical_pitch:
+       NOTENAME_PITCH  {
+               $$ = $1;
+       }
+       | NOTENAME_PITCH sup_quotes     {
+               $$ = $1;
+               $$->octave_i_ +=  $2;
+       }
+       | NOTENAME_PITCH sub_quotes      {
+               $$ = $1;
+               $$->octave_i_ += - $2;
+       }
+       ;
+
+explicit_musical_pitch:
+       MUSICAL_PITCH '{' int_list '}'  {/* ugh */
+               Array<int> &a = *$3;
+               ARRAY_SIZE(a,3);
+               $$ = new Musical_pitch;
+               $$->octave_i_ = a[0];
+               $$->notename_i_ = a[1];
+               $$->accidental_i_ = a[2];
+               delete &a;
+       }
+       ;
+
+musical_pitch:
+       steno_musical_pitch
+       | explicit_musical_pitch
+       ;
+
+steno_notepitch:
+       musical_pitch   {
+               $$ = new Note_req;
+               
+               $$->pitch_ = *$1;
+               delete $1;
+       }
+       | steno_notepitch  '!'          {
+               $$->forceacc_b_ = ! $$->forceacc_b_;
+       }
+       ;
+
+
+explicit_duration:
+       DURATION '{' int_list '}'       {
+               $$ = new Duration;
+               Array<int> &a = *$3;
+               ARRAY_SIZE(a,2);
+                       
+               $$-> durlog_i_ = a[0];
+               $$-> dots_i_ = a[1];
+
+               delete &a;              
+       }
+       ;
+
+dynamic_req:
+       ABSDYNAMIC '{' unsigned '}'     {
+               Absolute_dynamic_req *ad_p = new Absolute_dynamic_req;
+               ad_p ->loudness_ = (Dynamic_req::Loudness)$3;
+               $$ =ad_p;
+       }
+       | SPANDYNAMIC '{' int int '}' {
+               Span_dynamic_req * sp_p = new Span_dynamic_req;
+               sp_p->spantype = (Span_req::Spantype)$4;
+               sp_p-> dynamic_dir_  = (Direction)$3;
+               $$ = sp_p;
+       }
+       ;
+
+plet_fraction:
+       unsigned '/' unsigned {
+               $$[0] = $1;
+               $$[1] = $3;
+       }
+       |
+       '/' unsigned {
+               int num = $2 >? 1;
+               $$[0] = guess_plet_a[(num <? GUESS_PLET) - 1];
+               $$[1] = num;
+       }
+       ;
+
+close_plet_parens:
+       ']' plet_fraction {
+               $$ = MAEBTELP;
+               THIS->plet_.type_i_ = $2[1];
+               THIS->plet_.iso_i_ = $2[0];
+               THIS->default_duration_.plet_ = THIS->plet_;
+       }
+       | TELP {
+               $$ = TELP;
+               THIS->plet_.type_i_ = 1;
+               THIS->plet_.iso_i_ = 1;
+               THIS->default_duration_.plet_ = THIS->plet_;
+       }
+       | TELP plet_fraction {
+               $$ = TELP;
+               THIS->plet_.type_i_ = $2[1];
+               THIS->plet_.iso_i_ = $2[0];
+               THIS->default_duration_.plet_ = THIS->plet_;
+       }
+       ;
+
+close_request_parens:
+       '~'     {
+               $$ = '~';
+       }
+       | '('   {
+               $$='(';
+       }
+       | ']'   {
+               $$ = ']';
+       }
+       | E_SMALLER {
+               $$ = '<';
+       }
+       | E_BIGGER {
+               $$ = '>';
+       }
+       | close_plet_parens
+       ;
+
+open_abbrev_parens:
+       '[' ':' unsigned {
+               $$ = '[';
+               if (!Duration::duration_type_b ($3))
+                       THIS->parser_error (_f ("not a duration: %d", $3));
+               else if ($3 < 8)
+                       THIS->parser_error (_ ("can't abbreviate"));
+               else
+                       THIS->set_abbrev_beam ($3);
+       }
+       ;
+
+open_plet_parens:
+       '[' plet_fraction {
+               $$ = BEAMPLET;
+               THIS->plet_.type_i_ = $2[1];
+               THIS->plet_.iso_i_ = $2[0];
+               THIS->default_duration_.plet_ = THIS->plet_;
+       }
+       | PLET plet_fraction {
+               $$ = PLET;
+               THIS->plet_.type_i_ = $2[1];
+               THIS->plet_.iso_i_ = $2[0];
+               THIS->default_duration_.plet_ = THIS->plet_;
+       }
+       ;
+
+open_request_parens:
+       E_EXCLAMATION   {
+               $$ = '!';
+       }
+       | ')'   {
+               $$=')';
+       }
+       | '['   {
+               $$='[';
+       }
+       | open_abbrev_parens
+       | open_plet_parens
+       ;
+
+
+
+script_definition:
+       SCRIPT '{' script_body '}'      { $$ = $3; }
+       ;
+
+script_body:
+       STRING int int int int int              {
+               Script_def *s = new Script_def;
+               s->set_from_input (*$1,$2, $3,$4,$5, $6);
+               $$  = s;
+               delete $1;
+       }
+       ;
+
+script_req:
+       script_dir gen_script_def       {
+               Musical_script_req *m = new Musical_script_req;
+               $$ = m;
+               m->scriptdef_p_ = $2;
+               m->set_spot (THIS->here_input ());
+               if (!m->dir_)
+                 m->dir_  = (Direction)$1;
+       }
+       ;
+
+gen_script_def:
+       text_def        { 
+               $$ = $1;
+               ((Text_def*) $$)->align_dir_ = LEFT; /* UGH */
+       }
+       | mudela_script { 
+               $$ = $1;
+               $$-> set_spot (THIS->here_input ());
+       }
+       | finger {
+               $$ = $1;
+               ((Text_def*)$$)->align_dir_ = RIGHT; /* UGH */
+       }
+       ;
+
+text_def:
+       string {
+               Text_def *t  = new Text_def;
+               $$ = t;
+               t->text_str_ = *$1;
+               delete $1;
+               $$->set_spot (THIS->here_input ());
+       }
+       ;
+
+finger:
+        DIGIT {
+               Text_def* t  = new Text_def;
+               $$ = t;
+               t->text_str_ = to_str ($1);
+               t->style_str_ = "finger";
+               $$->set_spot (THIS->here_input ());
+       }
+       ;
+
+script_abbreviation:
+       '^'             { $$ = get_scriptdef ('^'); }
+       | '+'           { $$ = get_scriptdef ('+'); }
+       | '-'           { $$ = get_scriptdef ('-'); }
+       | '|'           { $$ = get_scriptdef ('|'); }
+       | 'o'           { $$ = get_scriptdef ('o'); }
+       | '>'           { $$ = get_scriptdef ('>'); }
+       | '.'           {
+               $$ = get_scriptdef ('.');
+       }
+       ;
+
+mudela_script:
+       SCRIPT_IDENTIFIER               { $$ = $1->access_General_script_def (true); }
+       | script_definition             { $$ = $1; }
+       | script_abbreviation           {
+               $$ = THIS->lexer_p_->lookup_identifier (*$1)->access_General_script_def (true);
+               delete $1;
+       }
+       ;
+
+script_dir:
+       '_'     { $$ = -1; }
+       | '^'   { $$ = 1; }
+       | '-'   { $$ = 0; }
+       ;
+
+pre_requests:
+       {
+       }
+       | pre_requests open_request_parens {
+               Array<Request*>& r = *THIS->get_parens_request ($2);
+               for (int i = 0; i < r.size (); i++ )
+                       r[i]->set_spot (THIS->here_input ());
+               THIS->pre_reqs.concat (r);
+               delete &r;
+       }
+       ;
+
+absolute_musical_pitch:
+       steno_musical_pitch     {
+               $$ = $1;
+       }
+       ;
+
+duration_length:
+       steno_duration {
+               $$ = $1;
+       }
+       ;
+
+dots:
+       '.'             { $$ = 1; }
+       | dots '.'      { $$ ++; }
+       ;
+
+entered_notemode_duration:
+       /* */           {
+               $$ = new Duration (THIS->default_duration_);
+       }
+       | dots          {
+               $$ = new Duration (THIS->default_duration_);
+               $$->dots_i_  = $1;
+       }
+       | steno_duration        {
+               THIS->set_last_duration ($1);
+       }
+       ;
+
+notemode_duration:
+       entered_notemode_duration {
+               $$ = $1;
+       }
+       ;
+
+steno_duration:
+       unsigned                {
+               $$ = new Duration;
+               if (!Duration::duration_type_b ($1))
+                       THIS->parser_error (_f ("not a duration: %d", $1));
+               else {
+                       $$->durlog_i_ = Duration_convert::i2_type ($1);
+                       $$->set_plet (THIS->plet_.iso_i_, THIS->plet_.type_i_);
+                    }
+       }
+       | DURATION_IDENTIFIER   {
+               $$ = $1->access_Duration (true);
+       }
+       | steno_duration '.'    {
+               $$->dots_i_ ++;
+       }
+       | steno_duration '*' unsigned  {
+               $$->plet_.iso_i_ *= $3;
+       }
+       | steno_duration '/' unsigned {
+               $$->plet_.type_i_ *= $3;
+       }
+       ;
+
+
+abbrev_type: 
+       ':'     {
+               $$ =0;
+       }
+       | ':' unsigned {
+               if (!Duration::duration_type_b ($2))
+                       THIS->parser_error (_f ("not a duration: %d", $2));
+               else if ($2 < 8)
+                       THIS->parser_error (_ ("can't abbreviate"));
+               $$ = $2;
+       }
+       ;
+
+
+
+simple_element:
+       steno_notepitch notemode_duration  {
+               if (!THIS->lexer_p_->note_state_b ())
+                       THIS->parser_error (_ ("have to be in Note mode for notes"));
+               $1->duration_ = *$2;
+               $$ = THIS->get_note_element ($1, $2);
+       }
+       | RESTNAME notemode_duration            {
+               $$ = THIS->get_rest_element (*$1, $2);
+               delete $1;  // delete notename
+       }
+       | MEASURES notemode_duration    {
+               Multi_measure_rest_req* m = new Multi_measure_rest_req;
+               m->duration_ = *$2;
+               delete $2;
+
+               Simultaneous_music*velt_p = new Request_chord;
+               velt_p->set_spot (THIS->here_input ());
+               velt_p->add_music (m);
+               $$ = velt_p;
+       }
+       | STRING notemode_duration                      {
+               if (!THIS->lexer_p_->lyric_state_b ())
+                       THIS->parser_error (_ ("have to be in Lyric mode for lyrics"));
+               $$ = THIS->get_word_element (*$1, $2);
+               delete $1;
+       }
+       ;
+
+
+/*
+       UTILITIES
+ */
+pitch_list:                    {
+               $$ = new Array<Musical_pitch>;
+       }
+       | pitch_list musical_pitch      {
+               $$->push (*$2);
+               delete $2;
+       }
+       ;
+
+
+int_list:
+       /**/                    {
+               $$ = new Array<int>
+       }
+       | int_list int          {
+               $$->push ($2);          
+       }
+       ;
+
+unsigned:
+       UNSIGNED        {
+               $$ = $1;
+       }
+       | DIGIT {
+               $$ = $1;
+       };
+
+int:
+       unsigned {
+               $$ = $1;
+       }
+       | '-' unsigned {
+               $$ = -$2;
+       }
+       | INT_IDENTIFIER        {
+               $$ = *$1->access_int (false);
+       }
+       ;
+
+
+string:
+       STRING          {
+               $$ = $1;
+       }
+       | STRING_IDENTIFIER     {
+               $$ = $1->access_String (true);
+       }
+       | string '+' string {
+               *$$ += *$3;
+               delete $3;
+       }
+       ;
+
+
+
+/*
+       symbol tables
+*/
+symtables:
+       SYMBOLTABLES '{' symtables_body '}'     { $$ = $3; }
+       ;
+
+symtables_body:
+                       {
+               $$ = new Symtables;
+       }
+       | IDENTIFIER            {
+               $$ = $1->access_Symtables (true);
+       }
+       | symtables_body FONT STRING            {
+               $$->font_ = *$3;
+               $$->font_path_ = global_path.find (*$3);
+               if  (!$$->font_path_.length_i ())
+                       THIS->here_input ().error (_f("can't open file: `%s'", $3->ch_C()));
+
+               delete $3;
+       }
+       | symtables_body STRING '=' symtable            {
+               $$->add (*$2, $4);
+               delete $2;
+       }
+       ;
+
+symtable:
+       TABLE '{' symtable_body '}' { $$ = $3; }
+       ;
+
+symtable_body:
+                               { $$ = new Symtable; }
+       | symtable_body STRING  symboldef {
+               $$->add (*$2, *$3);
+               delete $2;
+               delete $3;
+       }
+       ;
+
+symboldef:
+       STRING unsigned box             {
+               $$ = global_lookup_l->atom_p (*$1, $2, *$3);
+               delete $1;
+               delete $3;
+       }
+       | STRING unsigned {
+               Box b (Interval (0,0), Interval (0,0));
+               $$ = global_lookup_l->atom_p (*$1, $2, b);
+               delete $1;
+       }
+       ;
+
+box:
+       dinterval dinterval     {
+               $$ = new Box (*$1, *$2);
+               delete $1;
+               delete $2;
+       }
+       ;
+
+dinterval: real        real            {
+               $$ = new Interval ($1, $2);
+       }
+       ;
+
+%%
+
+void
+My_lily_parser::set_yydebug (bool b)
+{
+#ifdef YYDEBUG
+       yydebug = b;
+#endif
+}
+void
+My_lily_parser::do_yyparse ()
+{
+       yyparse ((void*)this);
+}
+
+
index e0978b7b455f3551874dac4d2674567273c7b7ff..93299307aa781e5a9b6244cf13915de1bfdb6435 100644 (file)
@@ -43,9 +43,9 @@ Ps_lookup::~Ps_lookup ()
 }
 
 Atom
-Ps_lookup::afm_find (String s) const
+Ps_lookup::afm_find (String s, bool warn) const
 {
-  return Lookup::afm_find (s, String ("(\\%03o) show "));
+  return Lookup::afm_find (s, String ("(\\%03o) show "), warn);
 }
 
 Atom*
index 2e774352af472fc7373d149cbc78b326dbea32c3..38826066297e9da6297f12cf3f6c05a01a38d13e 100644 (file)
@@ -42,9 +42,9 @@ Tex_lookup::~Tex_lookup()
 }
 
 Atom
-Tex_lookup::afm_find (String s) const
+Tex_lookup::afm_find (String s, bool warn) const
 {
-  return Lookup::afm_find (s, String ("\\char%d"));
+  return Lookup::afm_find (s, String ("\\char%d"), warn);
 }
 
 Atom*
index 966c59a4a2462253af89baedb3603464a609e8ae..f03cc5e8feb87f8c1899468ca83a94b2cbbf8605 100644 (file)
 1.0.15.uu1
 1.0.16
 1.0.16.jcn1
+1.0.16.mb1
index b6936163370ef5f394a93717dda14fb5fb5b82e2..ffaa8941cd97f9f4ed944c7e3fb0b63ce310e5c0 100644 (file)
@@ -29,8 +29,8 @@ either.
 
       /Mats
 
-
-Tested Features: Note placement, multipart score, figured base, \breve
+Tested Features: Note placement, multipart score, figured base, \breve,
+       time signature styles
 
 %}
 %{
@@ -47,8 +47,28 @@ definition below. --MB
 
 \version "1.0.7";
 
-vi1=\notes \relative c'' {
+global = \notes {
+  \property StaffGroup.timeSignatureStyle = "old"
+  \time 4/4;
+  \tempo 4=80;
+  \skip 1*31;
+  \property StaffGroup.timeSignatureStyle = "1"
+  \time 3/2;
+  \bar ":|:";
+  \tempo 2=140;
+  \skip 1.*15;
+  \property StaffGroup.timeSignatureStyle = "old"
   \time 4/4;
+  \tempo 4=80;
+  \skip 1;
+  \bar ":|:";
+  \skip 1*13;
+  \bar "|.";
+}
+
+vi1=\type Staff = vi1 <
+\global
+\notes \relative c'' {
 
   [d8 d d d] d4 [a16 b c a] |
   [b8 g ][ g g16 a][ b8 g ][ g g16 a] | 
@@ -80,9 +100,8 @@ vi1=\notes \relative c'' {
   [c8 g ][ g g16 f] e4 d |
   r8 g [g g16 f] e4 d |
   r8 [d16 a ][ b8 b16 c] a2 |
-  b1 |
-  \time 3/2;
-  \tempo 2=140;
+  b1 | 
+
   r4 d d d d d |
   e1. |
   r4 c c c c c |
@@ -98,8 +117,7 @@ vi1=\notes \relative c'' {
   a4 [c8 b] a4 [b8 c] f,4 [g8 a] |
   d,4 g g g g g |
   a [d,8 c] b4 [c8 d] a2 |
-  \time 4/4;
-  \tempo 4=80;
+
   b1 |
   [d8 d d d] d4 [a16 b c a] |
   [b8 g ][ g g16 a] [b8 g ][ g g16 a] | 
@@ -114,11 +132,11 @@ vi1=\notes \relative c'' {
   fis4 g2 fis!4 |
   \cadenza 1;
   g\breve
-  \bar "|.";
-}
+}>
 
-vi2=\notes \relative c'' {
-  \time 4/4;
+vi2=\type Staff = vi2 <
+\global
+\notes \relative c'' {
 
   r1 | r | r | 
   [d8 d d d] d4 [a16 b c a] |
@@ -149,7 +167,7 @@ vi2=\notes \relative c'' {
   e4 d r8 [c16 g ][ b8 b16 c] |
   a4 g2 fis4 |
   g1 |
-  \time 3/2;
+
   r1. |
   r4 [g'8 f] e4 [f8 g] c,4 [d8 e] |
   a,1. |
@@ -165,7 +183,7 @@ vi2=\notes \relative c'' {
   c,4 a a a a a |
   b [d8 c] b4 [c8 d] d,4 e |
   fis2 g fis! |
-  \time 4/4;
+
   g1 |
   r1 | r1 |
   [g'8 g g g] g4 [d16 e f d] |
@@ -179,13 +197,13 @@ vi2=\notes \relative c'' {
   [a d c b ][ a g fis e] d4 d' |
   \cadenza 1;
   b\breve
-  \bar "|.";
-}
+}>
 
 
-bc=\notes\transpose c'{
+bc=\type Staff = bc <
+\global
+\notes\transpose c'{
   \clef "bass";
-  \time 4/4;
 
   G2 d^"4 3" | G1 |
   g2 c4 G | d1^"3 4 3" |
@@ -203,7 +221,7 @@ bc=\notes\transpose c'{
   G1^"3 4 3" | c4 B c g |
   c B c G | d1^"3 4 3" |
   G1 |
-  \time 3/2;
+
   g1. | c |
   f | d^"\\textsharp" |
   g | c |
@@ -212,8 +230,9 @@ bc=\notes\transpose c'{
   d^"\\textsharp" | e |
   f | g1 B2 |
   d1.^"3 4 3" |
-  \time 4/4;
+
   G1 |
+  \bar ":|:";
   g2 fis | g G |
   g1^"3 4 3" | c |
   G^"3 4 3" | c2 G |
@@ -222,12 +241,10 @@ bc=\notes\transpose c'{
   ) d^"3 4 3" | 
   \cadenza 1;
   G\breve 
-  \bar "|.";
-}
+}>
 
 \score{
   \type StaffGroup <
-    \property StaffGroup.timeSignatureStyle = "old"
     \vi1
     \vi2
     \bc