[EMAIL PROTECTED] said:
> [EMAIL PROTECTED] writes:
> > There will always be TeX commands (or Postscript or whatever output
> > language
> > Lilypond will use) in text scripts and in lyrics, so it will always be
> > impossible to calculate the exact extent of the text unless we
> > implement
> > TeX or call TeX and look at the output. However, the current solution
> > (text_str_.length_i() * const) is not sufficient. It's probably better
> > on 
> > the average to count each TeX command as a single symbol in the
> > approximation.
>
> That sounds like a passable solution for now.  

Here is a patch for the length calculations. Also changed the 
alignment of textual scripts to LEFT. Even better would be to 
set this from a property. 

    /Mats



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

usage 

    cd lilypond-source-dir; patch -E -p1 < lilypond-1.0.3.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.3
1.0.3.mb1
++state
diff -urN ../lilypond-1.0.3/NEWS ./NEWS
--- ../lilypond-1.0.3/NEWS      Wed Aug 19 12:01:05 1998
+++ ./NEWS      Fri Aug 21 02:14:27 1998
@@ -1,3 +1,9 @@
+pl 3.mb1
+       - Changed text script alignment: center -> left
+       - TeX commands counts as one character when calculating
+         the length of a Text_def
+
+*********
 pl 2.uu1
        - solaris 2.6 compile/make website fixes.
        - rm'd WWW.make
diff -urN ../lilypond-1.0.3/VERSION ./VERSION
--- ../lilypond-1.0.3/VERSION   Wed Aug 19 11:38:16 1998
+++ ./VERSION   Fri Aug 21 02:11:27 1998
@@ -2,7 +2,7 @@
 MAJOR_VERSION=1
 MINOR_VERSION=0
 PATCH_LEVEL=3
-MY_PATCH_LEVEL=
+MY_PATCH_LEVEL=mb1
 
 # use the above to send patches, always empty for released version:
 # please don't move these comments up; the patch should fail if 
diff -urN ../lilypond-1.0.3/lily/VERSION ./lily/VERSION
--- ../lilypond-1.0.3/lily/VERSION      Wed Aug 19 11:38:21 1998
+++ ./lily/VERSION      Fri Aug 21 02:16:08 1998
@@ -2,7 +2,7 @@
 MAJOR_VERSION=1
 MINOR_VERSION=0
 PATCH_LEVEL=3
-MY_PATCH_LEVEL=
+MY_PATCH_LEVEL=mb1
 
 # use the above to send patches, always empty for released version:
 # please don't move these comments up; the patch should fail if 
diff -urN ../lilypond-1.0.3/lily/parser.yy ./lily/parser.yy
--- ../lilypond-1.0.3/lily/parser.yy    Fri Jul 31 11:22:26 1998
+++ ./lily/parser.yy    Fri Aug 21 01:08:00 1998
@@ -1112,7 +1112,7 @@
 gen_script_def:
        text_def        { 
                $$ = $1;
-               ((Text_def*) $$)->align_dir_ = CENTER; /* UGH */
+               ((Text_def*) $$)->align_dir_ = LEFT; /* UGH */
        }
        | mudela_script { 
                $$ = $1;
diff -urN ../lilypond-1.0.3/lily/text-def.cc ./lily/text-def.cc
--- ../lilypond-1.0.3/lily/text-def.cc  Thu Aug 13 22:33:18 1998
+++ ./lily/text-def.cc  Fri Aug 21 01:09:05 1998
@@ -12,6 +12,7 @@
 #include "molecule.hh"
 #include "text-def.hh"
 #include "dimension.hh"
+#include <ctype.h>
 
 Direction
 Text_def::staff_dir () const
@@ -26,10 +27,18 @@
 {
   Atom a = get_atom (p,CENTER);
 
-  /* TODO: check string for \texcommand
-   */
 
-  Real guess_width_f = text_str_.length_i() * a.dim_.x ().length (); // ugh
+  // Count each TeX command as one character, ugh
+  int index, length=0;
+  int total_length=text_str_.length_i();
+  const char* str=text_str_.ch_C();
+  for (index=0;index<total_length;index++) {
+    length++;
+    if (str[index]=='\\')
+      for (index++;(index < total_length) && isalpha(str[index]);index++)
+       ;
+  }
+  Real guess_width_f = length * a.dim_.x ().length (); // ugh
   Interval i (0, guess_width_f);
   i += - (align_dir_ + 1)* i.center();
   return i;
@@ -62,7 +71,17 @@
 {
   Atom a= p->lookup_l(0)->text (style_str_, text_str_);
 
-  Real guess_width_f = text_str_.length_i() * a.dim_.x ().length (); // ugh
+  // Count each TeX command as one character, ugh
+  int index, length=0;
+  int total_length=text_str_.length_i();
+  const char* str=text_str_.ch_C();
+  for (index=0;index<total_length;index++) {
+    length++;
+    if (str[index]=='\\')
+      for (index++;(index < total_length) && isalpha(str[index]);index++)
+       ;
+  }
+  Real guess_width_f = length * a.dim_.x ().length (); // ugh
   a.translate_axis (-(align_dir_ + 1)* guess_width_f/ 2, X_AXIS);
   
   return a;
diff -urN ../lilypond-1.0.3/make/STATE-VECTOR ./make/STATE-VECTOR
--- ../lilypond-1.0.3/make/STATE-VECTOR Wed Aug 19 11:38:19 1998
+++ ./make/STATE-VECTOR Fri Aug 21 02:15:59 1998
@@ -64,3 +64,4 @@
 1.0.2
 1.0.2.hwn1
 1.0.3
+1.0.3.mb1

Reply via email to