]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.3.152
authorfred <fred>
Wed, 27 Mar 2002 01:03:24 +0000 (01:03 +0000)
committerfred <fred>
Wed, 27 Mar 2002 01:03:24 +0000 (01:03 +0000)
17 files changed:
lily/font-metric.cc
lily/hyphen-spanner.cc
lily/include/afm.hh
lily/include/font-metric.hh
lily/include/tfm.hh
lily/system-start-delimiter.cc
lily/tfm.cc
mf/feta-beugel.mf
mf/feta-braces0.mf [new file with mode: 0644]
mf/feta-braces1.mf [new file with mode: 0644]
mf/feta-braces2.mf [new file with mode: 0644]
mf/feta-braces3.mf [new file with mode: 0644]
mutopia/J.S.Bach/wtk1-fugue2.ly
scm/font.scm
scm/grob-description.scm
scm/grob-property-description.scm
scripts/mup2ly.py

index b421075119a2b9fcd61e7a33e999f49aa4d23999..930d5f3b2ce3795a574e3b967d7b650409659c10 100644 (file)
@@ -90,6 +90,11 @@ Font_metric::Font_metric (Font_metric const &s)
 {
 }
 
+int
+Font_metric::count () const
+{
+  return 0;
+}
 
 Box 
 Font_metric::get_char (int)const
index cd676ff44a40bc0faeadcd5fa05198852b87525f..1a35efaaed73a4fd3be307bf0458e754657f40eb 100644 (file)
@@ -48,7 +48,10 @@ Hyphen_spanner::brew_molecule (SCM smob)
   Real lt = sp->paper_l ()->get_var ("stafflinethickness");
   Real th = gh_scm2double (sp->get_grob_property ("thickness")) * lt ;
   Real h = gh_scm2double (sp->get_grob_property ("height"));
+
+  // interval?
   Real l = gh_scm2double (sp->get_grob_property ("minimum-length"));  
+  Real x = gh_scm2double (sp->get_grob_property ("maximum-length"));
   // The hyphen can exist in the word space of the left lyric ...
   SCM space =  sp->get_bound (LEFT)->get_grob_property ("word-space");
   if (gh_number_p (space))
@@ -56,10 +59,16 @@ Hyphen_spanner::brew_molecule (SCM smob)
       bounds[LEFT] -=  gh_scm2double (space);
     }
   Real w  = bounds.length ();
+
+  
   /* for length, use a geometric mean of the available space and some minimum
-  */
+   */
   if (l < w)
-    l = sqrt (l*w);
+    {
+      l = sqrt (l*w);
+      if (l > x)
+       l = x;
+    }
   else
     {
       /* OK, we have a problem. Usually this means that we're on the
index b62d34fa54143efe10a5168b3736fff380b5f714..2f8b07ae0212e82876af8f87830af28d4166712a 100644 (file)
@@ -22,6 +22,7 @@ struct Adobe_font_metric : Font_metric
 {
   AFM_Font_info * font_inf_;
 
+  virtual int count () const;
   virtual Box get_char (int) const;
   AFM_CharMetricInfo const *find_char_metric (String name, bool warn=true) const;
   AFM_CharMetricInfo const *find_ascii_metric (int, bool warn=true) const;  
index 0bea74247ef4e161d8895a29e9edcaa939251099..87137221c3cf547a4f1592b124ac4d29806924ef 100644 (file)
@@ -21,6 +21,8 @@ struct Font_metric
 public:
   SCM description_;
   String path_;
+  
+  virtual int count () const;
   virtual Box get_char (int ascii) const;
   virtual Box text_dimension (String)  const;
   virtual Molecule find_by_name (String) const;
index 93deefc1066264f95cfee4073125da356bc21139..8eb633a9e57df24d6e36476a3dfd099fdf504e00 100644 (file)
@@ -150,7 +150,8 @@ class Tex_font_metric : public Font_metric
 public:
   static  SCM make_tfm (String filename);
 
-  Box get_char (int) const;
+  virtual int count () const;
+  virtual Box get_char (int) const;
   Tex_font_char_metric const *find_ascii (int ascii, bool warn=true) const;
 
   String str () const;
index 72a444a5329b11940773ccb3d228288494cc1750..22b993ba3122e8607e820a1cf6b2765f28f718b4 100644 (file)
@@ -138,25 +138,17 @@ System_start_delimiter::brew_molecule (SCM smob)
 }
 
 Molecule
-System_start_delimiter::staff_brace (Grob*me,Real y)  
+System_start_delimiter::staff_brace (Grob*me, Real y)
 {
-
-  /*
-    FIXME:
-    * should look at afm/tfm file for dimensions.
-     (This breaks ascii-art output: it hasn't got 255 symbols)
-    
-    * more glyphs (or maybe just better sized (fixed # of staff-spaces)),
-      the size mismatches with the staffs are very ugly
-         
-   */
-
-  // ugrhn
-  int lo = 0;
-  int hi = 255;
-  
   Font_metric *fm = Font_interface::get_default_font (me);
   Box b;
+  int lo = 0;
+  int hi = 255; //arg, urg == 0: fm->count () >? 2;
+
+  int big = 1;
+  SCM bigger = gh_list (me->mutable_property_alist_,
+                       me->immutable_property_alist_,
+                       SCM_UNDEFINED);
 
   /* do a binary search for each Y, not very efficient, but passable?  */
   do
@@ -165,9 +157,35 @@ System_start_delimiter::staff_brace (Grob*me,Real y)
 
     b = fm->get_char (cmp);
     if (b[Y_AXIS].empty_b () || b[Y_AXIS].length () > y)
-      hi = cmp;
+      {
+         hi = cmp;
+      }
     else
-      lo = cmp;
+      {
+       /*
+         ugh: 7
+         We have four fonts: feta-braces0-3.mf
+         
+         In the style-sheet, all paper relative sizes need to start
+         looking at the feta-braces0 font.
+
+         The smallest paper size, feta11 or -3, has to make 5 steps
+         to get to feta26 or +2.  Only after that, from +3 to +5 are
+         the real bigger sizes, so worst case we need 8 steps to get
+         to the font we need. */
+       if (big < 8)
+         {
+           bigger = gh_cons (gh_cons (ly_symbol2scm ("font-relative-size"),
+                                      gh_int2scm (big++)),
+                             bigger);
+           me->set_grob_property ("font", bigger);
+           fm = Font_interface::get_default_font (me); 
+           lo = 0;
+           hi = 255; //fm->count () >? 2;
+         }
+       else
+         lo = cmp;
+      }
     }
   while (hi - lo > 1);
 
index 3bf4f9463247c6e710c83ed28e527d6debd9cfd2..0a3e7362b5dc9d52ac7655c6c928cef79b17de5b 100644 (file)
@@ -79,6 +79,12 @@ Tex_font_metric::find_ascii (int ascii, bool warn) const
   return &dummy_static_char_metric;  
 }
 
+int
+Tex_font_metric::count () const
+{
+  return ascii_to_metric_idx_.size ();
+}
+
 Box
 Tex_font_metric::get_char (int a) const
 {
index db3c642752f366d7be326a52f61b607f9c6bd231..ca510cebb3904ce6543e5e589fd6007028686653 100644 (file)
@@ -16,7 +16,7 @@ def draw_brace( expr height_sharp, width_sharp) =
          
        define_pixels (height, width);
        thin = 2 stafflinethickness;
-       thick = .5 staff_space;
+       thick = .5 width;
        
        z2 = .5 [z1, z3];
        y3 = y1 + height/2;
@@ -39,9 +39,10 @@ def draw_brace( expr height_sharp, width_sharp) =
 endchar;
 enddef;
 
-
-for x :=  1 step 1 until 160:
-       % note: define_pixels (x) multiplies x by hppp,
-       %       we must never get bigger than infinity
-       draw_brace (min (x * pt#, infinity/hppp - 1), staff_space#);
+for i := font_count * 256 step 1 until (font_count + 1) * 256 - 1:
+  % note: define_pixels (x) multiplies x by hppp,
+  %       we must never get bigger than infinity
+  y := min ((i + 1) * 0.25pt#, infinity/hppp - 1);
+  x := y / 12;
+  draw_brace (y, x);
 endfor
diff --git a/mf/feta-braces0.mf b/mf/feta-braces0.mf
new file mode 100644 (file)
index 0000000..6afda40
--- /dev/null
@@ -0,0 +1,17 @@
+% 
+% feta-braces0.mf --  256 smallest braces
+% 
+% source file of the Feta (Font-En-Tja) music font
+% 
+% (c) 1997--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+% 
+
+font_identifier:="feta-braces0";
+font_size 16;
+mode_setup;
+
+staffsize#:=16pt#;
+font_count := 0;
+input feta-beugel;
+end.
+
diff --git a/mf/feta-braces1.mf b/mf/feta-braces1.mf
new file mode 100644 (file)
index 0000000..eb535f0
--- /dev/null
@@ -0,0 +1,17 @@
+% 
+% feta-braces1.mf --  next 256 braces
+% 
+% source file of the Feta (Font-En-Tja) music font
+% 
+% (c) 1997--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+% 
+
+font_identifier:="feta-braces1";
+font_size 16;
+mode_setup;
+
+staffsize#:=16pt#;
+font_count := 1;
+input feta-beugel;
+end.
+
diff --git a/mf/feta-braces2.mf b/mf/feta-braces2.mf
new file mode 100644 (file)
index 0000000..3eb180c
--- /dev/null
@@ -0,0 +1,17 @@
+% 
+% feta-braces2.mf --  next 256 braces
+% 
+% source file of the Feta (Font-En-Tja) music font
+% 
+% (c) 1997--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+% 
+
+font_identifier:="feta-braces2";
+font_size 16;
+mode_setup;
+
+staffsize#:=16pt#;
+font_count := 2;
+input feta-beugel;
+end.
+
diff --git a/mf/feta-braces3.mf b/mf/feta-braces3.mf
new file mode 100644 (file)
index 0000000..847ac44
--- /dev/null
@@ -0,0 +1,17 @@
+% 
+% feta-braces3.mf --  next 256 braces
+% 
+% source file of the Feta (Font-En-Tja) music font
+% 
+% (c) 1997--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+% 
+
+font_identifier:="feta-braces3";
+font_size 16;
+mode_setup;
+
+staffsize#:=16pt#;
+font_count := 3;
+input feta-beugel;
+end.
+
index bc8a767dbd8172e29347bcea49e764c7a9260b05..80e6941046159ef5daf8b0e53f8b01f42e9c8f8c 100644 (file)
   mutopiaopus = "BWV847"
   style = "baroque"
   copyright = "Public Domain"
-  tagline =    "\\\\This music is part of the Mutopia project, http://sca.uwaterloo.ca/Mutopia/\\\\It has been typeset and placed in the public domain by Han-Wen Nienhuys.\\\\Unrestricted modification and redistribution is permitted and encouraged - copy this music and share it!"
   maintainer = "hanwen@cs.uu.nl"
+  mutopiapublicdomain = "\\parbox{\\hsize}{\\thefooter\\quad\\small
+    \\\\This music is part of the Mutopia project,
+    \\texttt{http://www.mutopiaproject.org/}\\\\It has been typeset
+    and placed in the public domain by " + \maintainer +
+    ".\\\\Unrestricted modification and redistribution is permitted
+    and encouraged---copy this music and share it.}"
+  tagline = \mutopiapublicdomain
   lastupdated = "2000/Feb/14"
 }
 
@@ -170,6 +176,7 @@ bassdux =  \context Voice=three \notes \relative c' {
 \score {
  
     \notes \context PianoStaff < 
+        \property Score.TimeSignature \override #'style = #'C
        \context Staff = treble <
            \key c \minor
 %      \key es \major
@@ -185,11 +192,6 @@ bassdux =  \context Voice=three \notes \relative c' {
 
     \paper {
         linewidth = 18.0 \cm
-       \translator{ \OrchestralScoreContext
-        timeSignatureStyle \override #'style = #"C"
-
-       }
-       
     }
     \header{
        opus = "BWV 847"
index 084a5039bf7a0ef1cbe05fd93d1d2a62565462fe..e6c46e7ba1d2db7d761b6d212de8e8ba3c7514c8 100644 (file)
     ((-2 medium caps roman cmcsc 7) . "cmcsc7")
     ((-3 medium caps roman cmcsc 7) . "cmcsc7")
 
-    
-    ;; should use the same brace font every where and fix C++ code.
-    ((2 * * braces feta-braces 26) . "feta-braces26")
-    ((1 * * braces feta-braces 23) . "feta-braces23")
-    ((0 * * braces feta-braces 20) . "feta-braces20")
-    ((-1 * * braces feta-braces 16) . "feta-braces16")
-    ((-2 * * braces feta-braces 13) . "feta-braces13")
-    ((-3 * * braces feta-braces 11) . "feta-braces11")
+    ;; smallest needs 8 steps: -3 to +5, so
+    ;; biggest also needs 8 available steps: +2 to + 10
+    ((10 * * braces feta-braces 3) . "feta-braces3")
+    ((9 * * braces feta-braces 3) . "feta-braces3")
+    ((8 * * braces feta-braces 3) . "feta-braces3")
+    ((7 * * braces feta-braces 3) . "feta-braces3")
+    ((6 * * braces feta-braces 3) . "feta-braces3")
+    ((5 * * braces feta-braces 3) . "feta-braces3")
+    ((4 * * braces feta-braces 2) . "feta-braces2")
+    ((3 * * braces feta-braces 1) . "feta-braces1")
+    ((2 * * braces feta-braces 0) . "feta-braces0")
+    ((1 * * braces feta-braces 0) . "feta-braces0")
+    ((0 * * braces feta-braces 0) . "feta-braces0")
+    ((-1 * * braces feta-braces 0) . "feta-braces0")
+    ((-2 * * braces feta-braces 0) . "feta-braces0")
+    ((-3 * * braces feta-braces 0) . "feta-braces0")
 
     ((3 * * dynamic feta-din 19) . "feta-din19")
     ((2 * * dynamic feta-din 19) . "feta-din19")
index 90bbb79a0b62fe5c3d18a32f09d5b3c13ad2d4b4..fd4a146c8e772e375868c69981cbb47af2aaf0d9 100644 (file)
                (thickness . 1.0)
                (height . 0.4)
                (minimum-length .  0.5) 
+               (maximum-length .  100)
                (molecule-callback . ,Hyphen_spanner::brew_molecule)
                (Y-extent-callback . ,Grob::point_dimension_callback)
                (meta . ,(grob-description "LyricHyphen" lyric-hyphen-interface ))
index 8f22abd64961f9d63f2c076febd0b48ce5fa648b..ef4cec6bebb0481e33752813afa373bf28a357c7 100644 (file)
@@ -203,6 +203,7 @@ For barline, space after a thick line.")
 (grob-property-description 'lookup symbol? "lookup method: 'value for plain text, 'name for character-name.")
 (grob-property-description 'magnify number? "the magnification factor.  FIXME: doesn't work for feta fonts.")
 (grob-property-description 'maximum-duration-for-spacing moment? "space as if a duration of this type is available in this measure.")
+(grob-property-description 'maximum-length number? "don't make Grob longer than this")
 (grob-property-description 'maximum-rest-count integer? "kill off rests so we don't more than this number left.")
 (grob-property-description 'merge-differently-dotted boolean? " Merge noteheads in collisions, even if they have a different number of dots. This normal notation for some types of polyphonic music. The value of this setting is used by @ref{note-collision-interface} .")
 (grob-property-description 'minimum-distance number? "minimum distance between notes and rests.")
index 0bb9cbf01b8f55073015ffb8876de4f92dea9334..c48765b320e06037c7e9aeb27c8ec90ed482a3fe 100644 (file)
@@ -1184,17 +1184,21 @@ for opt in options:
 # sys.stdout.flush ()
 
 # handy emacs testing
-if not files:
-       files = ['template.mup']
+if not files:
+#      files = ['template.mup']
 
+if not files:
+       files = ['-']
+       
 for f in files:
-       if f == '-':
-               f = ''
 
-       if f and not os.path.isfile (f):
+       if f == '-':
+               h = sys.stdin
+       elif f and not os.path.isfile (f):
                f = strip_extension (f, '.mup') + '.mup'
+               h = open (f)
        progress ( _("Processing %s..." % f))
-       raw_lines = open (f).readlines ()
+       raw_lines = h.readlines ()
        p = Pre_processor (raw_lines)
        if only_pre_process_p:
                if not output:
@@ -1205,7 +1209,13 @@ for f in files:
                        output = os.path.basename (re.sub ('(?i).mup$', '.ly', f))
                if output == f:
                        output = os.path.basename (f + '.ly')
-               
+                       
+       if f == '-':
+               output = '-'
+               out_h = sys.stdout
+       else:
+               out_h = open (output, 'w')
+
        progress (_ ("Writing %s...") % output)
 
        tag = '%% Lily was here -- automatically converted by %s from %s' % ( program_name, f)
@@ -1215,9 +1225,8 @@ for f in files:
        else:
                ly = tag + '\n\n' + e.dump ()
 
-       o = open (output, 'w')
-       o.write (ly)
-       o.close ()
+       out_h.write (ly)
+       out_h.close ()
        if debug_p:
                print (ly)