-1.3.153.jcn2
+1.3.153.hwn1
============
-* PO updates.
+* More brace bugfixes.
+
+* Revert: simplified TFM and PK logic in ly_init_kpath (). Find feta
+fonts in datadir (eg /usr/share/) again, rely on environment in the
+other tools.
+
+* Add .pk font caching for ly2dvi. pk files resulting from running
+dvips are stored in outdir.
-1.3.153.jcn1
+1.3.153.jcn2
============
* Cleaned-up braces font selection code.
+* PO updates.
+
+* petite-ouverture-a-danser.ly bugfix, twinkle.ly bugfix
+
1.3.153
=======
DESIGN
+cocentric
+
* More pervasive GUILE integration resulting in improved design and
implementation. LilyPond is smaller, cleaner, more flexible, etc.
* Easy-play note heads
+* ASCIIScript: ASCII-art output
-MIDI
+* Improved standalone postscript layout.
-* dynamics, tempo changes in the MIDI output
+IMPORT/EXPORT
-MISC
+* dynamics, tempo changes in the MIDI output
* Finale (.etf), PMX, Musedata and Mup import tools.
-* Mutopia ports collection: easy accessible music archive.
-* ASCIIScript: ASCII-art output
+MISCELLANEOUS
-* Improved standalone postscript layout.
+* Mutopia ports collection: easily accessible music archive.
* Translations into Japanese, French and Russian
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=3
-PATCH_LEVEL=153
-MY_PATCH_LEVEL=jcn2
+PATCH_LEVEL=154
+MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
setenv GS_FONTPATH "$datadir/afm:@datadir@/pfa:$GS_FONTPATH"
setenv GS_LIB "$datadir/ps:$GS_LIB"
+setenv LILYPONDPREFIX "$datadir"
+
# bit silly. for ly2dvi, overrules compiled-in datadir...
# setenv LILYPONDPREFIX "@datadir@"
MFINPUTS="$datadir/mf:"${MFINPUTS:=":"}
TEXINPUTS="$datadir/tex:$datadir/ps:"${TEXINPUTS:=":"}
TFMFONTS="$datadir/tfm:"${TFMFONTS:=":"}
+LILYPONDPREFIX="$datadir"
-export MFINPUTS TEXINPUTS TFMFONTS GS_LIB GS_FONTPATH
+export MFINPUTS TEXINPUTS TFMFONTS GS_LIB GS_FONTPATH LILYPONDPREFIX
SUBDIRS=bugs test regression tutorial no-notation ascii-art
-examples=trip star-spangled-banner paddy scarlatti-test
+examples=trip star-spangled-banner paddy twinkle
flexamples=
LOCALSTEPMAKE_TEMPLATES=ly mutopia
\header {
- title = "Trip"
+ title = "Trip test"
+ subtitle = "Make life very difficult for lilypond"
copyright = "public domain"
+
+ footer ="This file tests as much features of lily as possible."
}
melody = \notes \relative c'' {
\clef violin
- \property Staff.instrument = "alto sax"
+ \property Staff.midiInstrument = "alto sax"
c4 c | g' g | a a | g g |
f f | e e | d d8.( e16 | )c2 |
if (path.empty_b ())
{
- char * p = ly_find_tfm (name.ch_C ());
- if (p)
+ String p = ly_find_tfm (name.ch_C ());
+ if (p.length_i ())
path = p;
}
m = unsmob_molecule (mol);
}
-
-
/*
transparent retains dimensions of element.
char * ly_find_afm (char const * name);
-char * ly_find_tfm (char const * name);
+String ly_find_tfm (char const * name);
void ly_init_kpath (char *av0);
#include <string.h>
#include "config.h"
-#include "string.hh"
#define popen REALLYUGLYKLUDGE
#define pclose ANOTHERREALLYUGLYKLUDGE
}
#endif
+#include "file-path.hh"
+#include "string.hh"
+#include "main.hh"
#include "kpath.hh"
#include "lily-version.hh"
return 0;
}
-char *
+String
ly_find_tfm (char const * name)
{
+ String p = global_path.find (String (name) + ".tfm");
+
+ if (p.length_i ())
+ return p;
+
#if (KPATHSEA && HAVE_KPSE_FIND_FILE)
return kpse_find_file (name, kpse_tfm_format, true);
#endif
- return 0;
+ return "";
}
ly_init_kpath (char *av0)
{
#if KPATHSEA && HAVE_KPATHSEA_KPATHSEA_H
+ /*
+ We take two pronged approach to tfms:
+
+ * the lilypond tfms (feta*.tfm) are found through our own routines.
+
+ * the TeX tfms are found through vanilla kpathsea.
+
+ (* other TFMs are not found, i.e. don't use them. )
+
+ PRO:
+
+ - TFM and AFM checksums always match in Lily.
+
+ - less hassle, no kpathsea spaghetti
+
+ CON:
+
+ - feta PK files are often recreated, locally
+ Solution: cache PK files locally?
+
+ - need env. vars to make sure that TeX finds the TFMs
+
+ - Outdated PK (TFM?) font files are not automatically removed,
+ since VERSION is not part of the standard location.
+
+
+ ALTERNATIVE
+
+ we have tried to come up with schemes that leave this kind of work
+ to kpathsea with objective of fixing the CONs, but miserably
+ failed. TeX installations and kpathsea itself form a buggy,
+ inconsistent, and unorderly mess.
+
+ */
+
+ /*
+ initialize kpathsea
+ */
+ kpse_set_program_name (av0, NULL);
+ kpse_maketex_option ("tfm", TRUE);
+
+#if 0
+
/*
+
Remove the setting for TFMFONTS if we have kpathsea, because
kpathsea can find TFM fonts anyway.
The advantage is that the PK font will also be generated under
/var/texmf/fonts, reducing clutter and compilation time.
-
- */
+
+ */
+
#ifndef __CYGWIN__ /* mktextfm/mktexpk does not work on windows */
-#ifndef DEBIAN
unsetenv ("TFMFONTS");
-#endif
#endif
- /*
- initialize kpathsea
- */
- kpse_set_program_name (av0, NULL);
- kpse_maketex_option ("tfm", TRUE);
-
#ifdef DEBIAN
String my_tfm = "$VARTEXFONTS/tfm/public/lilypond";
#else
my_tfm += version_str () + "/";
#endif
- char * mypath = kpse_expand ((my_tfm + ":").ch_C ());
-#ifndef DEBIAN
+#ifdef DEBIAN
+ char * mypath = strdup ((my_tfm + ":").ch_C());
+ kpse_format_info[kpse_tfm_format].client_path = mypath;
+#else
+ char * mypath = kpse_expand (my_tfm.ch_C ());
+
String prog = "mktextfm --destdir ";
prog += mypath;
kpse_format_info[kpse_tfm_format].program = strdup (prog.ch_C ());
#endif
- kpse_format_info[kpse_tfm_format].client_path = mypath;
#endif
+#endif
+
}
#include <stdio.h>
#include <ctype.h>
#include <iostream.h> /* gcc 3.0 */
+#include <errno.h>
+
#include "score.hh"
#include "lily-guile.hh"
Begin3
Title: LilyPond
-Version: 1.3.153
-Entered-date: 08MAY01
+Version: 1.3.154
+Entered-date: 09MAY01
Description: @BLURB@
Keywords: music notation typesetting midi fonts engraving
Author: hanwen@cs.uu.nl (Han-Wen Nienhuys)
janneke@gnu.org (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
- 1000k lilypond-1.3.153.tar.gz
+ 1000k lilypond-1.3.154.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 1000k lilypond-1.3.153.tar.gz
+ 1000k lilypond-1.3.154.tar.gz
Copying-policy: GPL
End
%define info yes
Name: lilypond
-Version: 1.3.153
+Version: 1.3.154
Release: 1
License: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.153.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.154.tar.gz
Summary: Create and print music notation
URL: http://www.cs.uu.nl/~hanwen/lilypond
BuildRoot: /tmp/lilypond-install
Distribution: SuSE Linux 7.0 (i386)
Name: lilypond
-Version: 1.3.153
+Version: 1.3.154
Release: 2
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.153.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.154.tar.gz
# music notation software for.. ?
Summary: A program for printing sheet music.
URL: http://www.lilypond.org/
% l is the increment.
-l := 0.2pt#;
+save stafflinethickness;
+save increment;
+
+stafflinethickness := 0.5pt#;
+increment := 0.5pt#;
y := 10pt#;
%% We can't store more than 64 (65?) height dimensions in a TFM
%% file, so we make small files.
- for j := 0 step 1 until 65:
+ for j := 0 step 1 until 63:
% message "l: "&decimal l;
% note: define_pixels (x) multiplies x by hppp,
% must never get bigger than infinity
- y := min (y + l / 2, infinity/hppp - 1);
+ y := min (y + increment, infinity/hppp - 1);
+
% x should be about one staff space, taking brace to have
% default height of 3 staffs, this yields height / 3 / 4
- x := y / 12;
+ x := y / 15;
% l should be about one stafflinethickness
- l := x / 10;
+
+ increment := x / 10;
+ stafflinethickness := min (0.5pt#, y/120 );
if i = font_count:
- draw_brace (y, x, l);
+ draw_brace (y, x, stafflinethickness);
fi
endfor;
endfor
i = \context Staff \notes\relative c''{
\context Voice=i
- \stemUp
+ \voiceOne
c8.( es16 bes4 ~ | )bes8 r c8.( bes16 | des4 c8. bes16 | c4 ~ ) c8 r |
c4( f,8. as16 | bes4 ~ )bes8 r | f8.( es16 f4 | es )f |
ii = \context Staff \notes\relative c'{
\context Voice=ii
- \stemDown
+ \voiceTwo
r8 <es as> r <des f> | r <es g> r <es as> | r <f as> r <f as> |
r <es g> r <es g> | r <es as> r <as, des> | r <des f> r <des f> |
r <cis e> r <cis e> | r <b d> r <a d> | r <g b> r <a cis> |
r <a cis> r <a cis> |
- \translator Staff=bass\stemUp
+ \translator Staff=bass\voiceOne
r <g b> r <fis a> r <fis a> | r <g bes>
- \translator Staff=treble\stemDown
+ \translator Staff=treble\voiceTwo
r <a c> r <a d> |
r <bes d> r <bes d> | r <g c> r <bes d> | r <c es> r <d g> |
}
\score {
- \context GrandStaff <
+ \context GrandStaff <
\context Staff = treble <
\global
\clef violin
\translator{ \OrchestralScoreContext }
\translator{
\VoiceContext
+ Slur \override #'attachment = #'(stem . stem)
autoBeamSettings \override #'(end 1 8 * *) = #(make-moment 1 4)
autoBeamSettings \override #'(end 1 16 * *) = #(make-moment 1 4)
}
(else (ly-warning "unknown font field name"))
)
))
-
-;;;;;;;;; TODO TODO . (should not use filtering?)
+
+
+
+;; most of these routines have been reimplemented in C++
+
+;; TODO TODO . (should not use filtering?)
;; this is bad, since we generate garbage every font-lookup.
;; otoh, if the qualifiers is narrow enough , we don't generate much garbage.
#
+#
+# TODO: should allow to set a central pk cache directory from the command line.
+# TODO: should allow to switch off pk cache.
+#
+
+
# Note: gettext work best if we use ' for docstrings and "
# for gettextable strings
'meter', 'poet']
-# init to empty; values here take precedence over values in the file
+# init to empty; values here take precedence over values in the file
+
+## TODO: change name.
extra_init = {
'language' : [],
'latexheaders' : [],
include_path = ['.']
lily_p = 1
paper_p = 1
+cache_pks_p = 1
+
+PK_PATTERN='feta.*\.[0-9]+pk'
output_name = ''
targets = {
map (sys.stdout.write, ls)
def setup_temp ():
+ """
+ Create a temporary directory, and return its name.
+ """
global temp_dir
if not keep_temp_dir_p:
temp_dir = tempfile.mktemp (program_name)
os.mkdir (temp_dir, 0777)
except OSError:
pass
- os.chdir (temp_dir)
+
+ return temp_dir
def system (cmd, ignore_error = 0):
dep_prefix = 0
reldir = os.path.dirname (output_name)
- (outdir, outbase) = os.path.split (abspath (output_name))
+ (outdir, outbase) = os.path.split (abspath (output_name))
+ if outdir != '.' and (track_dependencies_p or targets.keys ()):
+ mkdir_p (outdir, 0777)
+
setup_environment ()
- setup_temp ()
+ tmpdir = setup_temp ()
+ if cache_pks_p :
+ os.chdir (outdir)
+ cp_to_dir (PK_PATTERN, tmpdir)
+
+ os.chdir (tmpdir)
extra = extra_init
if targets.has_key ('PS'):
run_dvips (outbase, extra)
- if outdir != '.' and (track_dependencies_p or targets.keys ()):
- mkdir_p (outdir, 0777)
-
# add DEP to targets?
if track_dependencies_p:
depfile = os.path.join (outdir, outbase + '.dep')
progress (_ ("%s output to `%s'...") % (i, outname))
elif verbose_p:
warning (_ ("can't find file: `%s'") % outname)
-
+
+ if cache_pks_p:
+ cp_to_dir (PK_PATTERN, outdir)
+
os.chdir (original_dir)
cleanup_temp ()