-1.5.22.jcn4
+1.5.22.jcn1
===========
-* Stanza number: allow markup texts.
+* Resurrected experimental sketch output, now with dispatch.
-* Partial bugfix: ly2dvi: handle spaces in .ly file names (except for
-latex calls).
+* Bugfix: prefix directory defaults to DIR_DATADIR if not defined.
-* Bugfix: prepend DATADIR to %loadpath too.
+* Rune: more reliable repeat dots (WARNING: FONT CHANGED)
-* Resurrected experimental sketch output, now with dispatch.
+1.5.22.hwn1
+===========
-* Documented Linux-2.4.0, Guile-1.4 --with-threads bug.
+* Dashed slur bugfix.
+
+* GUILE 1.4 compatibility.
+
+
1.5.22
======
</td></tr>
<tr><td><font size="-1">
<a href="@TOP@Documentation/topdocs/out-www/INSTALL.html#download-binaries">GNU/Linux binaries</a><br>
- <a href="@TOP@Documentation/windows/out-www/installing.html">GNU/Windows binaries</a><br>
+ <a href="@TOP@Documentation/windows/out-www/installing.html">Windows binaries</a><br>
<a href="@TOP@Documentation/topdocs/out-www/INSTALL.html#download-source">Source code</a><br>
</font></td></tr>
<tr><td bgcolor="#e8e8ff">
@item pktrace, [OPTIONAL], needed for generating PostScript Type1
-fonts. Get it from
- @uref{http://www.cs.uu.nl/~hanwen/public/software/pktrace-0.1.tar.gz}
+fonts. Get it from @uref{http://www.cs.uu.nl/~hanwen/pktrace/}
@item autotrace-0.27a, [OPTIONAL], needed for generating PostScript Type1
-fonts. You must apply the patch included pktrace-0.1 first.
-@uref{http://autotrace.sourceforge.net}.
+fonts. @uref{http://autotrace.sourceforge.net}.
@item MetaPost [OPTIONAL] needed for generating PostScript Type3 fonts. Please
note that tetex-0.4pl8 (included with Red Hat 5.x) does not include
@end example
-@c Why isn't this in BUGS (where it belongs?)
+
@section Problems
For help and questions use @email{lilypond-user@@gnu.org}. Please
LilyPond with gcc-3.0 you may do:
@example
- rm -f config.cache
CC=gcc-3.0 CXX=g++-3.0 ./configure --enable-config=gcc-3.0
make conf=gcc-3.0 -C lily out-gcc-3.0/lexer.cc
patch -p1 < lexer-gcc-3.0.patch
Note that this is fixed in Debian/unstable for flex >= 2.5.4a-13.
-@unnumberedsubsec Linux-2.4.0, Guile-1.4 --with-threads
-
-There's a bug in certain kernels around version 2.4.0, that is
-triggered when using Guile 1.4 compiled with pthreads. You'll see
-random segmentation fault craches of LilyPond. Upgrade to a newer
-version of Linux. If you can't do that, you may try to recompiling
-Guile without threads (YMMV):
-
-@example
- guile-1.4$ ./configure --without-threads; make all install
-#end example
-
@unnumberedsubsec NetBSD
@itemize @bullet
files. Correcting the quantization mistakes of the human player takes a
lot of time.
-Hackers who know about signal processing are invited to write a more
-robust midi2ly.
+Hackers who know about signal processing are invited to write a more
+robust midi2ly. midi2ly is written in Python, using a module written in
+C to parse the MIDI files.
+
@subsection Invoking midi2ly
@end table
-Report bugs to @email{bug-lilypond@@gnu.org}.
-
-
-Written by @email{Jan Nieuwenhuizen, janneke@@gnu.org}.
-
-
@node etf2ly
@section etf2ly
@refbugs
-Known: articulation scripts are buggy. Empty measures confuse etf2ly.
-
-Written by @email{Han-Wen Nienhuys,hanwen@@cs.uu.nl}.
+The list of articulation scripts is incomplete. Empty measures confuse
+etf2ly.
-Report bugs to @email{bug-lilypond@@gnu.org}.
@node abc2ly
@section abc2ly
abc2ly ignores the ABC beaming.
-Written by @email{Han-Wen Nienhuys,hanwen@@cs.uu.nl}.
-@c How about Laura? /MB
-
-Report bugs to @email{bug-lilypond@@gnu.org}.
-
@node pmx2ly
@section pmx2ly
PMX is a MusiXTeX preprocessor written by Don Simons, see
@uref{http://icking-music-archive.sunsite.dk/Misc/Music/musixtex/software/pmx/}.
-Report bugs to @email{bug-lilypond@@gnu.org}.
@subsection Invoking pmx2ly
version information
@end table
-Report bugs to @email{bug-lilypond@@gnu.org}.
-
-Written by @email{Han-Wen Nienhuys,hanwen@@cs.uu.nl}.
-
@node musedata2ly
@section musedata2ly
@var{REFFILE}
@end table
-Report bugs to @email{bug-lilypond@@gnu.org}.
-
-Written by @email{Han-Wen Nienhuys,hanwen@@cs.uu.nl}.
-
@node mup2ly
@section mup2ly
Currently, only plain notes (pitches, durations), voices and staves are
converted.
-Written by @email{Jan Nieuwenhuizen,janneke@@gnu.org}, based on pmx2ly.
-
-Report bugs to @email{bug-lilypond@@gnu.org}.
-
@lilypond[]
\score {
\notes \relative c'' {
- a\breve \autoBeamOff
+ a\breve \autoBeamOff
a1 a2 a4 a8 a16 a32 a64 a64
r\longa r\breve
r1 r2 r4 r8 r16 r32 r64 r64
\property Staff.clefOctavation = @var{extra transposition of clefname}
@end example
+
Any change in these properties creates a clef (A @internalsref{Clef} grob).
Supported clef-names include
@end table
By adding @code{_8} or @code{^8} to the clef name, the clef is
-transposed one octave down or up, respectively.
+transposed one octave down or up, respectively. Note that you have to
+enclose @var{clefname} in quotes if you use underscores or digits in the
+name. For example,
+@example
+ \clef "G_8"
+@end example
Supported associated glyphs (for @code{Staff.clefGlyph}) are:
@unnumberedsubsec Windows users
Windows users start the terminal by clicking on the LilyPond icon.
Notepad is sufficient for editing the LilyPond file. Viewing the PS file
-can be done with @code{gsview32 test.ps}. Viewing DVI files can be done
-with @code{yap test.dvi}. The "print" button in Yap will print files.
-You can also print from the command line by executing @code{gsview32 /s
-test.ps}
+can be done with @code{gsview32 test.ps}.@footnote{ You can also view
+DVI files with @code{yap test.dvi}, but unfortunately the postscript
+interaction seems broken, meaning that you will not see slurs or beams
+in the Yap window.} You can also print from the command line by
+executing @code{gsview32 /s test.ps}
+
@node The first real tune
and none of us use it. Don't complain to us that installing LilyPond is
too difficult; rather, if you know something about your Windows, send us
code that works better (see @uref{compiling.html,compiling}).
+Nevertheless, detailed bug reports are appreciated; before you send a
+report, make sure to read the section on bugreports below.
-@section Windows binary setup
-
-Apart from LilyPond itself, you need Cygwin, GUILE, Python and a TeX
-installation, but all this software be installed by running setup.exe:
-
-@table @asis
-@item LilyPond
-Download and run
-@c let's do http, so that people read the README
-@uref{http://www.lilypond.org/gnu-windows/setup.exe, setup.exe}
-to install LilyPond.
-This will install the minimal set of cygwin tools needed to run
-LilyPond. Make sure to install in the default place, @file{c:/cygwin},
-and install everything.
+@section Windows binary setup
-As of version 1.3.150, you also have the option to install MiKTeX and
-GSView from this installer, which is recommended. If you choose to
-install these by hand (see below), make sure to install them
-@strong{before} you install LilyPond, otherwise your LilyPond setup will
-be broken.
-If you already have cygwin installed, don't worry: nothing will be
-installed twice. To expand on this minimal set, click
-@uref{http://sources.redhat.com/cygwin/setup.exe,here}, or visit a
-Cygwin @uref{http://sources.redhat.com/cygwin/mirrors.html,mirror site}.
-@end table
+All the software you need is installed by downloading and running
+@uref{http://www.lilypond.org/gnu-windows/setup.exe, setup.exe}. You
+will be asked some questions. If you are unsure just click "Next". Do
+not change the default install directory @file{c:/cygwin}.
+This installs LilyPond, and Cygwin, GUILE, Python, MiKTeX and GSView If
+you already have some of that software under @file{c:/cygwin}, then
+don't worry: nothing will be installed twice.
-@section Windows running setup
+If you want to install any of this software by hand, do this
+@strong{before} you run @file{setup.exe}, otherwise your LilyPond setup
+will not work.
-If you're lucky, after running @file{setup.exe} you're all set up.
+@section Testing LilyPond
-Open a LilyPond shell (or any bash shell), and type
+Open a LilyPond shell (To open a a lilypond shell, click the "GNU
+LilyPond" icon), and type
@quotation
@example
@end example
@end quotation
-If you don't see something similar to
+You should see something similar to
@quotation
@example
@end example
@end quotation
-you should try adding @file{/usr/lilypond-x.y.z/bin} to your @var{PATH},
-do:
+Then, prepare a file called @file{foo.ly}, by issuing
+@example
+notepad foo.ly
+@end example
+Enter the following into the file
+@example
+
+\score @{ \notes @{ c4 ( ) c4 @} @}
+
+@end example
+Close the file and save it. Run the following command a few times until
+it says @code{PS output to `foo.ps', DVI output to `foo.dvi'}.
+@example
+
+ly2dvi -P foo
+
+@end example
+You can now view the file using the following command
+@example
+
+gsview32 foo.ps
+
+@end example
+
+If this works, then you can head to the
+@uref{../../user/out-www/lilypond/Tutorial.html,Tutorial} to start using
+LilyPond.
+
+
+@section Removing LilyPond
+
+Start @file{setup.exe}, click Next, select "Install from Local
+Directory". Then click next until you reach "Select packages to
+install". Click "View". Now, for every package, click on the recycle
+icon until it says "Uninstall". Then, click Next.
+
+(If you find this too tedious, you can also simply remove
+@file{c:/cygwin}. This also removes the @file{/home/} directories under
+cygwin (i.e. @file{C:\CYGWIN\HOME}, so make sure that you bring
+important files in safety first.)
+
+@section Troubleshooting
+
+
+@unnumberedsubsec invoking lilypond --help doesn't work
+
+Open the shell, and try adding @file{/usr/lilypond-x.y.z/bin} to your
+@var{PATH}, do:
@quotation
@example
PATH=/usr/lilypond-1.4.2/bin:$PATH
@end example
@end quotation
-and try again.
-
-
-@subsection Trouble
+Now, invoke @file{lilypond --help}
For problems and solutions see
@uref{http://lilypond.org/wiki?TroubleshootingWindows,Troubleshooting
Windows}
+
+
+@ignore
@subsection Additional software
LilyPond needs a number of software packages to be really useful. These
@uref{ftp://ftp.cs.wisc.edu/ghost/ghostgum,ftp.cs.wisc.edu}.
or visit the
@uref{http://www.cs.wisc.edu/~ghost/,Ghostscript, Ghostview and GSview site}.
-
@end table
-
-
[TODO:
]
-
-@ignore
-
guile -v
Guile 1.4.1
@end ignore
+@ignore
+@c irrelevant.
+
+If you want to install more of cygwnTo expand on this minimal set,
+@section If you already have MikTeX, GSView or
+If you already have cygwin installed, don't worry: nothing will be
+installed twice. To expand on this minimal set, click
+@uref{http://sources.redhat.com/cygwin/setup.exe,here}, or visit a
+Cygwin @uref{http://sources.redhat.com/cygwin/mirrors.html,mirror site}.
+
+
+This will install the minimal set of cygwin tools needed to run
+LilyPond. Make sure to install in the default place, @file{c:/cygwin},
+and install everything.
+@end ignore
# "C:\GSTOOLS\GSVIEW\gsview32.exe" "%1"
+
+## we set GS_LIB although the registry keys have been set.
+##
+
if [ -e "$gs550/gswin32.exe" ]; then
PATH="$gs550:$PATH"
+ GS_LIB='C:\cygwin\usr\windows\gs\gs5.50\lib'
fi
if [ -e "$gs650/gswin32.exe" ]; then
PATH="$gs650:$PATH"
+ GS_LIB='C:\cygwin\usr\windows\gs\gs6.50\lib'
fi
if [ -e "$gsview26/gsview32.exe" ]; then
if [ -e "$gsview36/gsview32.exe" ]; then
PATH="$gsview36:$PATH"
fi
+
+
+
+
+export GS_LIB
+export PATH
./configure --without-kpathsea --enable-tfm-path=/usr/share/texmf/fonts/tfm/public/cm/:/usr/share/texmf/fonts/tfm/ams/symbols
* pktrace, [OPTIONAL], needed for generating PostScript Type1 fonts.
- Get it from
- `http://www.cs.uu.nl/~hanwen/public/software/pktrace-0.1.tar.gz'
+ Get it from `http://www.cs.uu.nl/~hanwen/pktrace/'
* autotrace-0.27a, [OPTIONAL], needed for generating PostScript Type1
- fonts. You must apply the patch included pktrace-0.1 first.
- `http://autotrace.sourceforge.net'.
+ fonts. `http://autotrace.sourceforge.net'.
* MetaPost [OPTIONAL] needed for generating PostScript Type3 fonts.
Please note that tetex-0.4pl8 (included with Red Hat 5.x) does not
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=5
-PATCH_LEVEL=22
-MY_PATCH_LEVEL=jcn4
+PATCH_LEVEL=23
+MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
<
% \property Score.beamQuantisation = #'none
\context GrandStaff <
- \notes\transpose c' {
+\context Staff = SA \notes\transpose c' {
\time 8/4
\stemUp [c8 c'' a' f']
}
>
<
- \notes {
+\context Staff = SB \notes {
\transpose c' {
\time 8/4
\stemDown [a'8 a, c e]
-
+
fugaIIRight = \notes \relative c'' {
\key e \major % E-major
\clef violin
\clef bass
%13
- r4 fis,4-\ltoe e4.-\lheel e'8-\rheel |
+ \property Staff.PhrasingSlur \override #'dashed = #5.0
+ c4 \( ( d ) e\) f
+
+% r4 fis,4-\ltoe e4.-\lheel e'8-\rheel |
+
% tie accs: 2nd should get no acc
f4-\rtoe~ f8
fis8-\rtoe fis4-\rtoe [e8-\ltoe a-\rtoe] |
Real fatline = gh_scm2double (me->get_grob_property ("thick-thickness"));
Real staffline = me->paper_l ()->get_var ("stafflinethickness");
+ Real staffspace = me->paper_l ()->get_var ("staffspace")
+ * Staff_symbol_referencer::staff_space (me);
kern *= staffline;
thinkern *= staffline;
Molecule thin = simple_barline (me, hair, h);
Molecule thick = simple_barline (me, fatline, h);
- Molecule colon = Font_interface::get_default_font (me)->find_by_name (
- Staff_symbol_referencer::line_count (me) & 1 == 1 ?
- "dots-repeatcolon" : "dots-evenrepeatcolon"
- );
+ Molecule colon;
+ Molecule dot = Font_interface::get_default_font (me)->find_by_name ("dots-dot");
+ Real dist = (2-(Staff_symbol_referencer::line_count (me) & 1))*staffspace;
+ dot.translate_axis(dist/2,Y_AXIS);
+ colon.add_molecule(dot);
+ dot.translate_axis(-dist,Y_AXIS);
+ colon.add_molecule(dot);
Molecule m;
break long notes and automatically tie them into the next measure.",
/* creats*/ "NoteHead Dots",
/* acks */ "",
-/* reads */ "",
+/* reads */ "easyPlay centralCPosition measurePosition measureLength",
/* write */ "");
return SCM_UNDEFINED;
}
}
- else if (SCM_CONSP (src))
+ else if (ly_pair_p (src)) // SCM_CONSP (src)) // huh?
{
SCM oldcar =ly_car (src);
/*
void
init_lily_guile (String p )
{
- // very very ugh: LILYPONDPREFIX (a hack), if set, overrules DATADIR.
- // DATADIR (the default) should work too!
- prepend_load_path (DIR_DATADIR);
- prepend_load_path (DIR_DATADIR "/scm");
-
prepend_load_path (p);
// todo: junk this. We should make real modules iso. just loading files.
prepend_load_path (p + "/scm/");
+
+#if GUILE_MINOR_VERSION >= 5
SCM last_mod = scm_current_module ();
scm_set_current_module (scm_c_resolve_module ("guile"));
+#endif
init_cxx_function_smobs ();
for (int i=scm_init_funcs_->size () ; i--;)
if (verbose_global_b)
progress_indication ("\n");
read_lily_scm_file ("lily.scm");
+
+#if GUILE_MINOR_VERSION >= 5
scm_set_current_module (last_mod);
+#endif
}
unsigned int ly_scm_hash (SCM s)
{
Real alpha = (curve.control_[3] - curve.control_[0]).arg ();
Bezier back = curve;
-
+ Offset perp = curvethick * complex_exp (Offset (0, alpha + M_PI/2)) * 0.5;
back.reverse ();
- back.control_[1] += curvethick * complex_exp (Offset (0, alpha + M_PI/2));
- back.control_[2] += curvethick * complex_exp (Offset (0, alpha + M_PI/2));
+ back.control_[1] += perp;
+ back.control_[2] += perp;
+ curve.control_[1] -= perp;
+ curve.control_[2] -= perp;
+
SCM scontrols[8];
for (int i=4; i--;)
ly_quote_scm (list),
gh_double2scm (linethick),
SCM_UNDEFINED));
+ Box b(curve.extent (X_AXIS),
+ curve.extent (Y_AXIS));
+
+ b[X_AXIS].unite (back.extent (X_AXIS));
+ b[Y_AXIS].unite (back.extent (Y_AXIS));
- Box b (curve.extent (X_AXIS), curve.extent (Y_AXIS));
return Molecule (b, at);
}
/* Adding mf/out make lilypond unchanged source directory, when setting
LILYPONDPREFIX to lilypond-x.y.z */
char *suffixes[] = {"ly", "afm", "mf/out", "scm", "tfm", "ps", 0};
- String prefix = prefix_directory;
- if (prefix.empty_b ())
- prefix = DIR_DATADIR;
+
+ if (prefix_directory.empty_b ())
+ prefix_directory = DIR_DATADIR;
for (char **s = suffixes; *s; s++)
{
- String p = prefix + to_str ('/') + String (*s);
+ String p = prefix_directory + to_str ('/') + String (*s);
global_path.add (p);
#if !KPATHSEA
Very ugh.
*/
+
init_lily_guile (prefix_directory);
cout << endl;
exit_status_global = 1;
}
-void
-My_lily_parser::set_last_duration (Duration const *d)
-{
- default_duration_ = *d;
-}
Input
/* descr */ "Generate one or more noteheads from Music of type Note_req.",
/* creats*/ "NoteHead Dots",
/* acks */ "",
-/* reads */ "",
+/* reads */ "easyPlay centralCPosition",
/* write */ "");
void
Paper_outputter::output_scheme (SCM scm)
{
- scm_apply_2 (output_func_, scm, file_, SCM_EOL);
+ gh_call2 (output_func_, scm, file_);
}
void
}
| multiplied_duration {
$$ = $1;
+ THIS->default_duration_ = *unsmob_duration ($$);
}
| explicit_duration {
$$ = $1;
+ THIS->default_duration_ = *unsmob_duration ($$);
}
;
l = intlog2 ($1);
$$ = Duration (l, $2).smobbed_copy ();
-
- THIS->set_last_duration (unsmob_duration ($$));
}
| DURATION_IDENTIFIER dots {
Duration *d =unsmob_duration ($1);
Duration k (d->duration_log (),d->dot_count () + $2);
$$ = k.smobbed_copy ();
-
- THIS->set_last_duration (unsmob_duration ($$));
}
;
// TODO
- if (gh_string_p (s) || gh_pair_p (s))
+ if (gh_string_p (s))
/*
if (i.grob_l_->has_interface (symbol ("lyric-syllable-interface")))
for (int i=0; i < texts_.size (); i++)
{
Item *ti = texts_[i];
- Side_position_interface::add_staff_support (ti);
+ if (!to_boolean (get_property ("scriptHorizontal")))
+ Side_position_interface::add_staff_support (ti);
typeset_grob (ti);
}
texts_.clear ();
:group 'LilyPond
:type 'string)
+(defcustom LilyPond-gv-command "gv -watch"
+ "Command used to display PS files."
+
+ :group 'LilyPond
+ :type 'string)
+
+(defcustom LilyPond-midi-command "timidity"
+ "Command used to play MIDI files."
+
+ :group 'LilyPond
+ :type 'string)
+
;; This is the major configuration variable.
(defcustom LilyPond-command-alist
`(
(LilyPond-command (LilyPond-command-menu "Midi") 'LilyPond-master-file)
)
+(defun LilyPond-command-formatdvi ()
+ "Format the dvi output of the current document."
+ (interactive)
+ (LilyPond-command (LilyPond-command-menu "2Dvi") 'LilyPond-master-file)
+)
+
+(defun LilyPond-command-formatps ()
+ "Format the ps output of the current document."
+ (interactive)
+ (LilyPond-command (LilyPond-command-menu "2PS") 'LilyPond-master-file)
+)
+
+(defun LilyPond-command-smartview ()
+ "View the dvi output of current document."
+ (interactive)
+ (LilyPond-command (LilyPond-command-menu "SmartView") 'LilyPond-master-file)
+)
+
+(defun LilyPond-command-view ()
+ "View the dvi output of current document."
+ (interactive)
+ (LilyPond-command (LilyPond-command-menu "View") 'LilyPond-master-file)
+)
+
+(defun LilyPond-command-viewps ()
+ "View the ps output of current document."
+ (interactive)
+ (LilyPond-command (LilyPond-command-menu "ViewPS") 'LilyPond-master-file)
+)
+
+(defun LilyPond-command-midi ()
+ "View the ps output of current document."
+ (interactive)
+ (LilyPond-command (LilyPond-command-menu "Midi") 'LilyPond-master-file)
+)
+
;; FIXME, this is broken
(defun LilyPond-region-file (begin end)
(let (
Begin3
Title: LilyPond
-Version: 1.5.22
-Entered-date: 09NOV01
+Version: 1.5.23
+Entered-date: 29NOV01
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.5.22.tar.gz
+ 1000k lilypond-1.5.23.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 1000k lilypond-1.5.22.tar.gz
+ 1000k lilypond-1.5.23.tar.gz
Copying-policy: GPL
End
%define name lilypond
-%define version 1.5.22
+%define version 1.5.23
%define release 1mdk
Name: %{name}
%define info yes
Name: lilypond
-Version: 1.5.22
+Version: 1.5.23
Release: 1
License: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.22.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.23.tar.gz
Summary: Create and print music notation
URL: http://www.lilypond.org/
BuildRoot: /tmp/lilypond-install
Distribution: SuSE Linux 7.0 (i386)
Name: lilypond
-Version: 1.5.22
+Version: 1.5.23
Release: 2
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.22.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.23.tar.gz
# music notation software for.. ?
Summary: A program for printing sheet music.
URL: http://www.lilypond.org/
FET_FILES = $(filter-out $(TEST_FILES),$(wildcard feta[0-9]*.mf))
FONT_FILES = $(filter-out $(TEST_FILES),$(wildcard feta*[0-9].mf))
-XPM_FONTS = feta20 feta-nummer10
+XPM_FONTS = feta20 feta-nummer10 feta-braces20
#CM_AFM_FILES = cmr10
$(outdir)/cmr10.afm:
set_char_box(0, dot_diam#, dot_diam#/2, dot_diam#/2);
fet_endchar;
-fet_beginchar("repeat dots", "repeatcolon", "repeatcolon")
- pickup pencircle scaled dot_diam;
- draw (dot_diam/2, staff_space/2);
- addto currentpicture also currentpicture yscaled -1;
- set_char_box(0, dot_diam#, staff_space#/2, staff_space#/2);
-fet_endchar;
-
-fet_beginchar("even repeat dots", "evenrepeatcolon", "evenrepeatcolon")
- pickup pencircle scaled dot_diam;
- draw (dot_diam/2, staff_space);
- addto currentpicture also currentpicture yscaled -1;
- set_char_box(0, dot_diam#, staff_space#, staff_space#);
-fet_endchar;
-
fet_endgroup("dots");
(define-module (scm ascii-script)
- :export (as-output-expression)
- :no-backtrace
)
(define this-module (current-module))
-(define (as-output-expression expr port)
+(define-public (as-output-expression expr port)
(display (eval expr this-module) port)
)
))
-
-
(define (find-dumper format )
(let*
((d (assoc format output-alist)))
"sketch.scm"
"pdf.scm"
"pdftex.scm"
- "ascii-script.scm"
"c++.scm"
"grob-property-description.scm"
"translator-property-description.scm"
+1
(define-module (scm ps)
- :export (ps-output-expression)
- :no-backtrace
)
(define this-module (current-module))
-(define (ps-output-expression expr port)
- (display (eval expr this-module) port)
- )
+(debug-enable 'backtrace)
+
+(if (or (equal? (minor-version) "4")
+ (equal? (minor-version) "3.4"))
+ (define-public (ps-output-expression expr port)
+ (display (eval-in-module expr this-module) port )
+ )
+
+ (define-public (ps-output-expression expr port)
+ (display (eval expr this-module) port )
+ )
+ )
(use-modules
(guile)
- (guile-user))
+)
(define-module (scm pysk)
- :export (pysk-output-expression)
- :no-backtrace
)
(use-modules (scm ps)
(ice-9 regex)
(ice-9 string-fun)
- (guile-user)
(guile)
)
(define this-module (current-module))
-(define (pysk-output-expression expr port)
+(define-public (pysk-output-expression expr port)
(display (pythonify expr) port )
)
"Fs(20)\n"
;; chars > 128 don't work yet
(format #f "txt('\\~o',(" (modulo i 128))
-;; (format #f "txt('\\~o',(" i)
-;; "txt('" (ascii->string i) "',("
-;; "char(" ,(number->string i) ",("
+ ;; "char(" ,(number->string i) ",("
(sketch-numbers->string (map mul-scale (list x y)))
"))\n"))
;;; Han-Wen Nienhuys <hanwen@cs.uu.nl>
-(define-module (scm tex)
- :export (tex-output-expression)
- :no-backtrace
- )
-
+(define-module (scm tex) )
+(debug-enable 'backtrace)
(use-modules (scm ps)
(ice-9 regex)
(ice-9 string-fun)
(ice-9 format)
- (guile-user)
(guile)
)
(embedded-ps (list 'bracket arch_angle arch_width arch_height height arch_thick thick)))
(define (dashed-slur thick dash l)
- (embedded-ps (list 'dashed-slur thick dash l)))
+ (embedded-ps (list 'dashed-slur thick dash `(quote ,l))))
(define (hairpin thick w sh eh)
(embedded-ps (list 'hairpin thick w sh eh))
""
)
-
(define (embedded-ps expr)
(let
((os (open-output-string)))
;;
;; need to do something to make this really safe.
;;
-(define (output-tex-string s)
+(define-public (output-tex-string s)
(if security-paranoia
(if use-regex
(regexp-substitute/global #f "\\\\" s 'pre "$\\backslash$" 'post)
; no-origin not yet supported by Xdvi
(define (no-origin) "")
-(define (tex-output-expression expr port)
- (display (eval expr this-module) port )
+(define my-eval-in-module eval)
+
+(if (or (equal? (minor-version) "4")
+ (equal? (minor-version) "3.4"))
+ (begin
+ (set! my-eval-in-module eval-in-module)
+
+ ))
+
+(define-public (tex-output-expression expr port)
+ (display (my-eval-in-module expr this-module) port )
)
+
(translator-property-description 'squashedPosition integer? " Vertical position of
squashing for Pitch_squash_engraver.")
(translator-property-description 'stavesFound list? "list of all staff-symbols found.")
-(translator-property-description 'stanza markup? "Stanza `number' to print at start of a verse. Use in LyricsVoice context.")
+(translator-property-description 'stanza string? "Stanza `number' to print at start of a verse. Use in LyricsVoice context.")
(translator-property-description 'stemLeftBeamCount integer? "
This program converts ABC music files (see
http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) To LilyPond input.
+
+
+Report bugs to bug-gnu-music@gnu.org
+
+Written by Han-Wen Nienhuys <hanwen@cs.uu.nl>, Laura Conrad
+<lconrad@laymusic.org>, Roy Rankin <Roy.Rankin@@alcatel.com.au>
"""
def print_version ():
#!@PYTHON@
# info mostly taken from looking at files. See also
-# http://www.cs.uu.nl/~hanwen/lily-devel/etf.html
+# http://lilypond.org/wiki/?EnigmaTransportFormat
# This supports
#
# * dynamics
# * empty measures (eg. twopt03.etf from freenote)
#
-#
+
program_name = 'etf2ly'
version = '@TOPLEVEL_VERSION@'
# geometry.sty and article.cls. Give me a hint, and I'll
# fix it.)
+#
+# TODO: magnification support should also work for texinfo -> html: eg. add as option to dvips.
+#
+
# This is was the idea for handling of comments:
# Multiline comments, @ignore .. @end ignore is scanned for
# in read_doc_file, and the chunks are marked as 'ignore', so
# The the rest of the rexeces are searched for. They don't have to test
# if they are on a commented out line.
+
+
import os
import stat
import string
return newchunks
-def find_eps_dims (match):
- "Fill in dimensions of EPS files."
-
- fn =match.group (1)
- dims = bounding_box_dimensions (fn)
- if g_outdir:
- fn = os.path.join(g_outdir, fn)
-
- return '%ipt' % dims[0]
-
def system (cmd):
sys.stderr.write ("invoking `%s'\n" % cmd)
if m:
gr = map (string.atoi, m.groups ())
break
-
+
return gr
def make_pixmap (name):
bbox = get_bbox (name + '.eps')
-
+ margin = 3
fo = open (name + '.trans.eps' , 'w')
- fo.write ('%d %d translate\n' % (-bbox[0], -bbox[1]))
+ fo.write ('%d %d translate\n' % (-bbox[0]+margin, -bbox[1]+margin))
fo.close ()
res = 90
- x = (bbox[2] - bbox[0]) * res / 72.
- y = (bbox[3] - bbox[1]) * res / 72.
+
+ x = (2* margin + bbox[2] - bbox[0]) * res / 72.
+ y = (2* margin + bbox[3] - bbox[1]) * res / 72.
cmd = r"""gs -g%dx%d -sDEVICE=pgm -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -q -sOutputFile=- -r%d -dNOPAUSE %s %s -c quit | pnmtopng > %s"""
n.append (c)
return n
+
+## what's this? Docme --hwn
+##
def fix_epswidth (chunks):
newchunks = []
for c in chunks:
- if c[0] == 'lilypond' and 'eps' in c[2]:
- body = re.sub (r"""\\lilypondepswidth{(.*?)}""", find_eps_dims, c[1])
- newchunks.append(('lilypond', body, c[2], c[3], c[4]))
- else:
+ if c[0] <> 'lilypond' or 'eps' not in c[2]:
newchunks.append (c)
+ continue
+
+ mag = 1.0
+ for o in c[2]:
+ m = re.match ('magnification=([0-9.]+)', o)
+ if m:
+ mag = string.atof (m.group (1))
+
+ def replace_eps_dim (match, lmag = mag):
+ filename = match.group (1)
+ dims = bounding_box_dimensions (filename)
+
+ return '%fpt' % (dims[0] *lmag)
+
+ body = re.sub (r"""\\lilypondepswidth{(.*?)}""", replace_eps_dim, c[1])
+ newchunks.append(('lilypond', body, c[2], c[3], c[4]))
+
return newchunks
if dep_prefix:
opts = opts + ' --dep-prefix=%s' % dep_prefix
- fs = '"' + string.join (files, '" "') + '"'
+ fs = string.join (files)
if not verbose_p:
# cmd = cmd + ' 1> /dev/null 2> /dev/null'
f.write (s)
f.close ()
- # FIXME: howto escape spaces in file names?
cmd = 'latex \\\\nonstopmode \\\\input %s' % latex_fn
if not verbose_p:
if extra['orientation'] and extra['orientation'][0] == 'landscape':
opts = opts + ' -tlandscape'
- cmd = 'dvips "%s" -o"%s" "%s"' % (opts, outbase + '.ps', outbase + '.dvi')
+ cmd = 'dvips %s -o%s %s' % (opts, outbase + '.ps', outbase + '.dvi')
if not verbose_p:
progress ( _("Running %s...") % 'dvips')
import sys
import __main__
-
-# if set, LILYPONDPREFIX must take prevalence
-# if datadir is not set, we're doing a build and LILYPONDPREFIX
-datadir = '@datadir@'
-if os.environ.has_key ('LILYPONDPREFIX') \
- or '@datadir@' == '@' + 'datadir' + '@':
- datadir = os.environ['LILYPONDPREFIX']
-else:
- datadir = '@datadir@'
-
-sys.path.append (os.path.join (datadir, 'python'))
-sys.path.append (os.path.join (datadir, 'python/out'))
-
+package_name = 'lilypond'
program_name = 'build-lily'
program_version = '@TOPLEVEL_VERSION@'
('', 'w', 'warranty', _ ("show warranty and copyright")),
]
-from lilylib import *
+
+################################################################
+# lilylib.py -- options and stuff
+#
+# source file of the GNU LilyPond music typesetter
+
+import os
+
+try:
+ import gettext
+ gettext.bindtextdomain ('lilypond', localedir)
+ gettext.textdomain ('lilypond')
+ _ = gettext.gettext
+except:
+ def _ (s):
+ return s
+
+if program_version == '@' + 'TOPLEVEL_VERSION' + '@':
+ program_version = '1.5.17'
+
+def identify ():
+ sys.stdout.write ('%s (GNU LilyPond) %s\n' % (program_name, program_version))
+
+def warranty ():
+ identify ()
+ sys.stdout.write ('\n')
+ sys.stdout.write (_ ('Copyright (c) %s by' % ' 2001'))
+ sys.stdout.write ('\n')
+ sys.stdout.write (' Han-Wen Nienhuys')
+ sys.stdout.write (' Jan Nieuwenhuizen')
+ sys.stdout.write ('\n')
+ sys.stdout.write (_ (r'''
+Distributed under terms of the GNU General Public License. It comes with
+NO WARRANTY.'''))
+ sys.stdout.write ('\n')
+
+def progress (s):
+ errorport.write (s + '\n')
+
+def warning (s):
+ progress (_ ("warning: ") + s)
+
+def error (s):
+
+
+ '''Report the error S. Exit by raising an exception. Please
+ do not abuse by trying to catch this error. If you do not want
+ a stack trace, write to the output directly.
+
+ RETURN VALUE
+
+ None
+
+ '''
+
+ progress (_ ("error: ") + s)
+ raise _ ("Exiting ... ")
+
+def getopt_args (opts):
+ '''Construct arguments (LONG, SHORT) for getopt from list of options.'''
+ short = ''
+ long = []
+ for o in opts:
+ if o[1]:
+ short = short + o[1]
+ if o[0]:
+ short = short + ':'
+ if o[2]:
+ l = o[2]
+ if o[0]:
+ l = l + '='
+ long.append (l)
+ return (short, long)
+
+def option_help_str (o):
+ '''Transform one option description (4-tuple ) into neatly formatted string'''
+ sh = ' '
+ if o[1]:
+ sh = '-%s' % o[1]
+
+ sep = ' '
+ if o[1] and o[2]:
+ sep = ','
+
+ long = ''
+ if o[2]:
+ long= '--%s' % o[2]
+
+ arg = ''
+ if o[0]:
+ if o[2]:
+ arg = '='
+ arg = arg + o[0]
+ return ' ' + sh + sep + long + arg
+
+
+def options_help_str (opts):
+ '''Convert a list of options into a neatly formatted string'''
+ w = 0
+ strs =[]
+ helps = []
+
+ for o in opts:
+ s = option_help_str (o)
+ strs.append ((s, o[3]))
+ if len (s) > w:
+ w = len (s)
+
+ str = ''
+ for s in strs:
+ str = str + '%s%s%s\n' % (s[0], ' ' * (w - len(s[0]) + 3), s[1])
+ return str
+
+def help ():
+ ls = [(_ ("Usage: %s [OPTION]... FILE") % program_name),
+ ('\n\n'),
+ (help_summary),
+ ('\n\n'),
+ (_ ("Options:")),
+ ('\n'),
+ (options_help_str (option_definitions)),
+ ('\n\n'),
+ (_ ("Report bugs to %s") % 'bug-lilypond@gnu.org'),
+ ('\n')]
+ 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)
+ try:
+ os.mkdir (temp_dir, 0777)
+ except OSError:
+ pass
+
+ return temp_dir
+
+
+def system (cmd, ignore_error = 0):
+ """Run CMD. If IGNORE_ERROR is set, don't complain when CMD returns non zero.
+
+ RETURN VALUE
+
+ Exit status of CMD
+ """
+
+ if verbose_p:
+ progress (_ ("Invoking `%s\'") % cmd)
+ st = os.system (cmd)
+ if st:
+ name = re.match ('[ \t]*([^ \t]*)', cmd).group (1)
+ msg = name + ': ' + _ ("command exited with value %d") % st
+ if ignore_error:
+ warning (msg + ' ' + _ ("(ignored)") + ' ')
+ else:
+ error (msg)
+
+ return st
+
+
+def cleanup_temp ():
+ if not keep_temp_dir_p:
+ if verbose_p:
+ progress (_ ("Cleaning %s...") % temp_dir)
+ shutil.rmtree (temp_dir)
+
+
+def strip_extension (f, ext):
+ (p, e) = os.path.splitext (f)
+ if e == ext:
+ e = ''
+ return p + e
+
notify = 0
pass
elif o == '--help' or o == '-h':
help ()
+ sys.exit (0)
elif o == '--buid-root' or o == '-b':
build_root = a
elif o == '--command' or o == '-c':
+
+
+$(outdir)/%.pfb:
+ pktrace $(basename $(@F))
+ mv $(basename $(@F)).pfb $(outdir)
+
#%.afm:
# $(SHELL) $(depth)/buildscripts/tfmtoafm.sh $(shell basename $@ .afm)
# mv $@ $@.in