2002-05-04 Han-Wen <hanwen@cs.uu.nl>
+ * lily/*.cc: change gh_str02scm() to ly_str02scm().
+
+ * lily/spacing-spanner.cc (note_spacing): Bound
+ shortest-playing-length by the distance to next note. This should
+ fix chord tremolo spacing.
+
* VERSION: 1.5.55 released
* lily/stem.cc (off_callback): invisible stem over whole note is
doc: lily fonts
$(MAKE) -C Documentation
-web-doc: pfa-fonts
+web-doc: pfa-fonts
$(MAKE) out=www -C Documentation WWW
$(MAKE) footify
MAJOR_VERSION=1
MINOR_VERSION=5
PATCH_LEVEL=55
-MY_PATCH_LEVEL=
+MY_PATCH_LEVEL=hwn1
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
+++ /dev/null
-#!@PYTHON@
-
-# ps-to-pfa.py -- make PostScript Type 3 font from separate ps char files
-#
-# source file of the GNU LilyPond music typesetter
-#
-# (c) 1998 Jan Nieuwenhuizen <janneke@gnu.org>
-
-#TODO. This could be more efficient.
-
-name = 'ps-to-pfa'
-version = '0.4'
-
-datadir = ''
-
-import os
-import sys
-import getopt
-from string import *
-import re
-import time
-
-logfile = sys.stdout
-
-def program_id ():
- return name + ' version ' + version;
-
-def identify ():
- sys.stdout.write (program_id () + '\n')
-
-def help ():
- sys.stdout.write ("Usage: %s [options] [files]\n"
- "ps-to-pfa.py -- make PostScript Type 3 font from separate ps char files\n\n"
- + "Options:\n"
- + " -d, --datadir=DIR use DIR for ps header/footer\n"
- + " -h, --help print this help\n"
- + " -o, --output=FILE set output file to FILE.\n"
- % (program_name)
- )
- sys.exit (0)
-
-output_name = ''
-
-identify ()
-(options, files) = getopt.getopt (
- sys.argv[1:], 'o:d:', ['help', 'package', 'output='])
-for opt in options:
- o = opt[0]
- a = opt[1]
- if o== '--help' or o == '-h':
- help ()
- elif o == '-d' or o == '--datadir':
- datadir = a
- elif o == '-o' or o =='--output':
- output_name = a
- else:
- print o
- raise getopt.error
-
-
-def gulp_file (f):
- logfile.write ('[%s' % f)
- try:
- i = open (f)
- i.seek (0, 2)
- n = i.tell ()
- i.seek (0,0)
- except:
- logfile.write ('can\'t open file %s\n ' % f)
- return ''
- s = i.read (n)
- logfile.write (']')
- if len (s) <= 0:
- logfile.write ('gulped empty file: %s\n'% f)
- return s
-
-mf = files[0]
-
-input_name = mf
-font_name = os.path.basename (os.path.splitext (mf)[0])
-if not output_name:
- output_name = font_name + '.pfa'
-
-
-logfile.write ('Font: %s\n'% font_name)
-
-def header (f):
- f.write ('%!PS-AdobeFont-3.0: ' + font_name + '\n')
- f.write ('%%%%Creator: %s-%s\n' % (name, version))
- f.write ('\n')
- f.write (r"""
-8 dict begin
-/FontType 3 def %% Required elements of font
-/FontName /%s def""" % font_name)
- f.write (r"""
-/FontMatrix [.083 0 0 .083 0 0] def %% 12 is default height: 1/12 = 0.083
-/FontBBox [-1000 -1000 1000 1000] def %% does not seem to matter.
-/Encoding 256 array def %% Trivial encoding vector
-0 1 255 {Encoding exch /.notdef put} for
-""")
-def footer (f):
- f.write (r"""
-/BuildGlyph { % Stack contains: font charname
- 1000 0 % Width
- -1000 -1000 1000 1000 % Bounding Box
- setcachedevice
- exch /CharProcs get exch % Get CharProcs dictionary
- 2 copy known not {pop /.notdef} if % See if charname is known
- get exec % Execute character procedure
-} bind def
-
-/BuildChar { % Level 1 compatibility
- 1 index /Encoding get exch get
- 1 index /BuildGlyph get exec
-} bind def
-
-currentdict
-end % of font dictionary
-"""
-)
-
- f.write ('/%s\n' % font_name)
- f.write (''
-'exch definefont pop % Define the font\n')
-
-suspect_re = re.compile ('closepath ((gsave )*fill( grestore stroke)*) 1 setgray newpath (.*?) closepath fill')
-
-def characters (f):
- logfile.write ('[')
-
- files = []
- import glob
- suffixes = [".[0-9]", ".[0-9][0-9]", ".[0-9][0-9][0-9]"]
- for suf in suffixes:
- files = files + glob.glob(font_name + suf)
-
-
- # concat all files into charprocs.
- charprocs = ' /.notdef {} def\n'
- encoding = ''
- for i in files:
- s = gulp_file (i)
- s = re.sub ('%[^\n]*\n', '', s)
-
- # if you want readable stuff, look at MP output.
- s = re.sub ('[\n\t ]+', ' ', s)
- s = re.sub ('showpage', '', s)
-
- # MP's implementation of unfill confuses GS.
- # Look for "Metapost & setgray" on deja.com
- # we do some twiddling to use eofill i.s.o. fill
- if re.search ('setgray',s ):
- m = suspect_re.search (s)
- while m:
- fill = m.group (1)
- path = m.group (4)
-
- # be complicated, in case of gsave/grestore.
- # vill as quick hack to avoid duple substitutions.
- fill = re.sub ('fill', 'eovill', fill, count = 1)
- s = re.sub (m.group (0), ' %s %s ' % (path, fill), s)
- m = suspect_re.search (s)
-
- s = re.sub ('eovill' , 'eofill', s)
- s = re.sub ('0 setgray' ,'', s)
-
-
- m = re.match ('.*\.([0-9]+)',i)
- n = atoi (m.group (1))
-
- s = '\n /%s-%d{\n%s} bind def\n' % (font_name, n, s)
- encoding = encoding + 'Encoding %d /%s-%d put\n' % (n, font_name, n)
- charprocs = charprocs + s
-
- f.write ('\n'
-'/CharProcs 3 dict def % Subsidiary dictiorary for\n'
-'CharProcs begin % individual character definitions\n')
- f.write (charprocs)
- f.write ('\n')
- f.write ('end % of CharProcs\n')
- f.write (encoding)
- f.write ('\n')
- logfile.write (']')
-
-
-ps_file = open (output_name, 'w')
-header (ps_file)
-characters (ps_file)
-footer (ps_file)
-logfile.write ('\n')
-ps_file.close ()
-logfile.write ('Wrote PostScript font: %s\n' % output_name)
-
leave a gap. Chord tremolo beams on half notes are not ambiguous,
as half notes cannot appear in a regular beam, and should reach the
stems.
+
+(To ensure that the spacing engine is not confused we add some regular notes as well.)
"
}
\repeat "tremolo" 4 { f'8 e }
\repeat "tremolo" 2 { f e }
\repeat "tremolo" 1 { f e }
+ c4 c4 c4 c4
+ c4 c4 c4 c4
+ c4 c4 c4 c4
+
}
\paper {
linewidth = 90*\staffspace
"%.2f");
SCM properties = Font_interface::font_alist_chain (me);
-
- Molecule tm = Text_item::text2molecule (me, gh_str02scm (str.ch_C ()), properties);
+
+
+ Molecule tm = Text_item::text2molecule (me, ly_str02scm (str.ch_C ()), properties);
mol.add_at_edge (Y_AXIS, UP, tm, 5.0);
}
Stem::set_beaming (s, f, LEFT);
Stem::set_beaming (s, f, RIGHT);
- /*
- URG: this sets the direction of the Stem s.
- It's amazing Mike:
-
- Stem:: type_i () ->first_head ()->get_direction () ->
- Directional_element_interface::set (me, d);
-
-
- don't understand this comment.
- --hwn.
- */
SCM d = s->get_grob_property ("direction");
if (Stem::type_i (s) != 1)
{
d->set_parent (info.grob_l_, Y_AXIS);
announce_grob (d, SCM_EOL);
-
}
}
}
/*
- this is culled from various other iterators, but sharing code by subclassing proved to be too difficult.
+ this is culled from various other iterators, but sharing code by
+ subclassing proved to be too difficult.
*/
#include "input.hh"
Chord_tremolo_iterator::Chord_tremolo_iterator (Chord_tremolo_iterator const &src)
: Music_iterator (src)
{
- child_iter_p_ = src.child_iter_p_? src.child_iter_p_->clone () : 0;
+ child_iter_p_ = src.child_iter_p_ ? src.child_iter_p_->clone () : 0;
}
void
const char * vars)
{
SCM s = ly_symbol2scm (symbol);
- SCM d = gh_str02scm (descr);
+ SCM d = ly_str02scm (descr);
SCM l = parse_symbol_list (vars);
SCM
ly_unit ()
{
- return gh_str02scm (INTERNAL_UNIT);
+ return ly_str02scm (INTERNAL_UNIT);
}
static void
/*
- Generate the space between two musical columns LC and RC, given spacing parameters INCR and SHRTEST.
+ Generate the space between two musical columns LC and RC, given spacing parameters INCR and SHORTEST.
*/
void
Spacing_spanner::musical_column_spacing (Grob *me, Item * lc, Item *rc, Real increment, Rational shortest)
Moment delta_t = rwhen - lwhen;
Real dist = 0.0;
+ /*
+ In normal situations, the next column is at most
+ SHORTEST_PLAYING_LEN away. However chord-tremolos do funky faking stuff
+ with durations, invalidating this assumption. Here we kludge
+ around to get chord tremolos to behave properly.
+
+ */
+ shortest_playing_len = shortest_playing_len >? delta_t;
if (delta_t.main_part_ && !lwhen.grace_part_)
{
dist = get_duration_space (me, shortest_playing_len, shortest.main_part_, expand_only);
*/
-
#include "system-start-delimiter.hh"
#include "engraver.hh"
#include "staff-symbol.hh"
/*
UGH UGH
*/
- if (gh_string_p (gl) && gh_equal_p (gl, gh_str02scm ("brace"))
- && gh_string_p (my_gl) && gh_equal_p (my_gl, gh_str02scm ("bracket")))
+ if (gh_string_p (gl) && gh_equal_p (gl, ly_str02scm ("brace"))
+ && gh_string_p (my_gl) && gh_equal_p (my_gl, ly_str02scm ("bracket")))
inf.grob_l_->translate_axis (-0.8, X_AXIS); // ugh
- else if (gh_string_p (gl) && gh_equal_p (gl, gh_str02scm ("bracket"))
- && gh_string_p (my_gl) && gh_equal_p (my_gl, gh_str02scm ("bracket")))
+ else if (gh_string_p (gl) && gh_equal_p (gl, ly_str02scm ("bracket"))
+ && gh_string_p (my_gl) && gh_equal_p (my_gl, ly_str02scm ("bracket")))
{
inf.grob_l_->translate_axis ( -0.8, X_AXIS); // ugh
inf.grob_l_->set_grob_property ("arch-height",
delim_ = new Spanner (internal_get_property (delim_name));
delim_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
-
-
announce_grob (delim_, SCM_EOL);
}
}
ENTER_DESCRIPTION(System_start_delimiter_engraver,
-/* descr */ "creates a system start delimiter (ie. SystemStart@{Bar,Brace,Bracket@} spanner",
+/* descr */ "Creates a system start delimiter (ie. SystemStart@{Bar,Brace,Bracket@} spanner",
/* creats*/ "SystemStartBar SystemStartBrace SystemStartBracket",
/* acks */ "system-start-delimiter-interface staff-symbol-interface",
/* reads */ "systemStartDelimiter",
-# file make/Makefile
+# file make/Makefile
depth = ..
STEPMAKE_TEMPLATES=makedir install
include $(depth)/make/stepmake.make
+default: spec