lilypond_1_4
============
+* Backport feta-nummer and feta-din.
+
+* Oops. Included '|' rule in parser.yy twice.
+
+* Generate PDF for examples and manuals.
+
+* scripts/lilypond-book.py: Import from HEAD.
+
+* scripts/ly2dvi.py: fix by Mats. Try to import pre if available.
+
+* Documentation/user/lilypond-book.itely:
+* scripts/lilypond-book.py: Add options [no]indent, linewidth and
+ noinline.
+
+* configure: Regenerate.
+
+* aclocal.m4: Add --enable/disable-optimising option.
+
+* Documentation/windows/setup.hint (requires): Add gsview dependency.
+
+* Documentation/windows/installing.texi: Suggest gswin32c (console
+program) for getting the version. Layout fixes.
+
+* Documentation/user/tutorial.itely (Running LilyPond): Backport
+windows doco fix.
+
* Documentation/windows/gs-profile.sh:
* Documentation/windows/gsview-profile.sh: Remove.
rm -f out-www/regression-test.html out-www/regression-test.texi
$(MAKE) out=www out-www/regression-test.html
-local-WWW: copy-for-me txt-to-html $(outdir)/regression-test.ps.gz $(outdir)/regression-test.html footify
+PS_FILES=$(outdir)/regression-test.ps
+PDF_FILES=$(PS_FILES:.ps=.pdf)
+PS_GZ_FILES=$(PS_FILES:.ps=.ps.gz)
+
+local-WWW: copy-for-me txt-to-html $(outdir)/regression-test.html footify $(PDF_FILES) $(PS_GZ_FILES)
copy-for-me:
$(foreach a, $(README_TOP_FILES), cp ../$(a) $(outdir)/$(a).txt && ) true
The reference manual.
@item @uref{../user/out-www/lilypond/lilypond.html,lilypond} The complete
-user manual, (in @uref{../user/out-www/lilypond.ps.gz,PostScript}). This
+user manual, (in @uref{../user/out-www/lilypond.ps.gz,PostScript}
+and in @uref{../user/out-www/lilypond.pdf,PDF}). This
manual contains among others the tutorial, the reference manual.
@c glossary maybe for new users?
@item @uref{../user/out-www/glossary.html,glossary} A glossary of musical
terms, including translations. (in
-@uref{../user/out-www/glossary.ps.gz,Postscript}) Read this if you're not
+@uref{../user/out-www/glossary.ps.gz,Postscript}
+and
+@uref{../user/out-www/glossary.pdf,PDF}
+) Read this if you're not
familiar with English terms for notation.
@item @uref{../user/out-www/lilypond-internals/lilypond-internals.html,lilypond-internals}
@itemize @bullet
@item @uref{../out-www/regression-test.html,regression-test}
A large document that tests all kinds of features (in
-@uref{../out-www/regression-test.ps.gz,Postscript}).
+@uref{../out-www/regression-test.ps.gz,Postscript}
+and in
+@uref{../out-www/regression-test.pdf,PDF}).
@item
@uref{http://www2.iro.umontreal.ca/~pinard/po/registry.cgi?domain=lilypond">Translations,lilypond
textual domain
HTML_FILES = $(addprefix $(outdir)/, $(TELY_FILES:.tely=.html))
PS_FILES = $(DVI_FILES:.dvi=.ps)
-
+PDF_FILES=$(DVI_FILES:.dvi=.pdf)
PS_GZ_FILES= $(addsuffix .gz, $(PS_FILES))
INFO_FILES = $(addprefix $(outdir)/, lilypond.info lilypond-internals.info)
endif
-local-WWW: $(HTML_FILES) $(datafiles) $(PS_GZ_FILES) $(DEEP_HTML_FILES) info-dir
+local-WWW: $(HTML_FILES) $(datafiles) $(PDF_FILES) $(PS_GZ_FILES) $(DEEP_HTML_FILES) info-dir
local-WWW-clean: deep-WWW-clean
@cindex PostScript
@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}
+Windows users start the terminal by clicking on the LilyPond or Cygwin
+icon. Notepad is sufficient for editing the LilyPond file. Viewing
+the PS file can be done with:
+@quotation
+@example
+@code{gsview32 test.ps}
+@end example
+@end quotation
+You can also print from the command line by executing:
+@quotation
+@example
+@code{gsview32 /s test.ps}
+@end example
+@end quotation
@node The first real tune
@end quotation
Then, prepare a file called @file{foo.ly}, by issuing
+@quotation
@example
notepad foo.ly
@end example
+@end quotation
Enter the following into the file
+@quotation
@example
\score @{ \notes @{ c4 ( ) c4 @} @}
@end example
+@end quotation
Close the file and save it. Run the following command a few times (at
least three times) until it says @code{PS output to `foo.ps', DVI output
to `foo.dvi'}.
+@quotation
@example
ly2dvi -P foo
@end example
+@end quotation
You can now view the file using the following command
+@quotation
@example
gsview32 foo.ps
@end example
+@end quotation
If this works, then you can head to the
@uref{../../user/out-www/lilypond/Tutorial.html,Tutorial} to start using
system)
@item All version numbers of relevant software you run. Specifically, we
want to see the output of the following commands:
+@quotation
@example
python --version
lilypond --version
ly2dvi --version
- gswin32 --version
+ gswin32c --version
@end example
+@end quotation
@item If ly2dvi fails, then please run it as follows and include the
output in the
+@quotation
@example
ly2dvi --verbose MY-FILE
@end example
+@end quotation
@end itemize
You can also check out
@uref{http://lilypond.org/wiki/?TroubleshootingWindows} for more
instructions on how to make a bug report.
-
-@c
-@c IGNORE.
-@c
-@c
-@c
-@c
-@c
@ignore
@subsection Additional software
See @file{/usr/doc/Cygwin/tetex-beta-20001218.README} and
@file{/usr/doc/Cygwin/texmf-20000804-2.README} for details.
-
@item Ghostview.
You can use GSView-2.6. This old package has two advantages. It has
sdesc: "A program for printing sheet music"
category: Publishing
-requires: ash bash guile python tetex-beta texmf-tiny
+requires: ash bash guile gsview python tetex-beta texmf-tiny
#suggests: rxvt xdvi texmf-base
ldesc: "A program for printing sheet music.
LilyPond is a music typesetter. It produces beautiful sheet music
doc: lily fonts
$(MAKE) -C Documentation
-web-doc:
+web-doc: pfa-fonts
$(MAKE) out=www -C Documentation WWW
$(MAKE) footify
+pfa-fonts:
+ $(MAKE) MAKE_PFA_FILES=1 -C mf
+
# KPATHSEA=0: Hack for compiling without kpathsea -- not recommended
my_tfm_path = $(TFM_PATH) /tmp /tmp /tmp /tmp /tmp /tmp
index: web-doc
-short-examples:
+short-examples: pfa-fonts
$(MAKE) out=www -C input WWW
$(PYTHON) $(buildscript-dir)/mutopia-index.py -o short-examples.html input/
-long-examples:
+long-examples: pfa-fonts
$(MAKE) out=www -C mutopia WWW
$(PYTHON) $(buildscript-dir)/mutopia-index.py -o long-examples.html mutopia/
-not -name '*.pg' -not -name '*.tmp' -not -name '*.toc' \
-not -name '*.fns' -not -name '*.cps' -not -name '*.nexi' \
-not -name '*.texi' -not -name '*.texidoc' -not -name '*.tp' \
+ -not -name '*.pdfps' -not -name '*.eps.bbox' \
-not -name '*.log' -not -name 'out-www' -not -name '*.dep' \
> $(outdir)/weblist
ls *.png *.html >> $(outdir)/weblist
Compilation
Running requirements
Website requirements
- Building LilyPond
+ Building LilyPond
Configuring for multiple platforms
Emacs mode
Compiling for distributions
Slackware
Mandrake
Debian GNU/Linux
+ MacOS X
Problems
Debian GNU/Linux unstable gcc-3.0
Linux-2.4.0, Guile-1.4 -with-threads
xdelta (ftp://ftp.xcf.berkeley.edu/pub/xdelta/). This is much
safer than using patches, and is the recommended way.
- The following command produces `lilypond-1.4.3.tar.gz' from
- `lilypond-1.4.2.tar.gz' identical (up to compression dates) to the
- .3 on the FTP site.
- xdelta patch lilypond-1.4.2-1.4.3.xd lilypond-1.4.2.tar.gz
+ The following command produces `lilypond-1.4.11.tar.gz' from
+ `lilypond-1.4.10.tar.gz' identical (up to compression dates) to
+ the .11 on the FTP site.
+ xdelta patch lilypond-1.4.10-1.4.11.xd lilypond-1.4.10.tar.gz
Requirements
============
* A reasonably new C++ compiler: EGCS 1.1, GCC 2.95.2 or newer.
Check out the gcc site (ftp://ftp.gnu.org/gnu/gcc/).
- * Python 1.5, Check out the python website (http://www.python.org).
+ * Python 1.5 or 2.1 Check out the python website
+ (http://www.python.org/).
* GUILE 1.3.4 or newer, check out the GUILE webpage
(http://www.gnu.org/software/guile/guile.html). Version 1.4 is
(ftp://texinfo.org/texinfo/pretests/texinfo-4.0b.tar.gz) or
texinfo-4.0b (ftp://alpha.gnu.org/gnu/texinfo-4.0b.tar.gz)
-Building LilyPond
-==================
+Building LilyPond
+=================
to install GNU LilyPond, type:
gunzip -c lilypond-x.y.z | tar xf -
SuSE
----
- Some SUSE RPMS should available from
+ Some SuSE RPMS should available from
`ftp://ftp.lilypond.org/pub/LilyPond/binaries/SuSE'.
- You can also compile a RPM for SUSE yourself. A spec file is in
+ You can also compile a RPM for SuSE yourself. A spec file is in
`make/out/lilypond.suse.spec', see the instructions for building the
Red Hat RPM.
No precompiled packages for Slackware are available.
Problems have been reported with Slackware 7.0; apparently, it ships
-with a faulty compiler. Do not compile LilyPond with -O2 on this
+with a faulty compiler. Do not compile LilyPond with -O2 on this
platform.
Mandrake
$ su - root
# dpkg --purge lilypond lilypond1.3
# exit
- $ tar xzf lilypond-1.4.3.tar.gz
- $ cd lilypond-1.4.3
- $ dch -p -v 1.4.3-0.local.1 "Local build."
+ $ tar xzf lilypond-1.4.11.tar.gz
+ $ cd lilypond-1.4.11
+ $ dch -p -v 1.4.11-0.local.1 "Local build."
$ debuild -B
$ su - root
- # dpkg -i ../lilypond_1.4.3*.deb
+ # dpkg -i ../lilypond_1.4.11*.deb
# exit
$
* gs, netpbm
- * pnmtopng (only in Debian 2.2; pnmtopng has been merged with netpbm
+ * pnmtopng (only in Debian 2.2: pnmtopng has been merged with netpbm
in Debian testing/unstable.)
Most of these are listed on the `Build-Depends' line in the
tetex-extra flex bison texinfo groff gs \
netpbm pnmtopng m4 gettext
- For Debian in development ("unstable", the future 2.3 or 3.0):
+ For Debian in development ("unstable", the future Debian 3.0):
apt-get install binutils cpp gcc libc6-dev \
g++ libstdc++2.10-dev \
- python-base libguile-dev tetex-bin libkpathsea-dev \
+ python libguile-dev tetex-bin libkpathsea-dev \
tetex-extra flex bison texinfo bibtex2html groff gs \
netpbm m4 gettext
dpkg --purge lilypond lilypond1.3
+MacOS X
+-------
+
+ LilyPond has been built on Darwin, to be precise, on:
+ Darwin buoux.aspiratie.nl 5.3 Darwin Kernel Version 5.3: Thu Jan 24
+ 22:06:02 PST 2002; root:xnu/xnu-201.19.obj~1/RELEASE_PPC Power Macintosh powerpc
+
+ using:
+
+ Apple Computer, Inc. version gcc-932.1, based on gcc version 2.95.2 19991024 (release)
+
+ To make sure you have all packages needed to build LilyPond
+installed, run as root:
+
+ apt-get install bash python guile debianutils flex bison texinfo \
+ ghostscript6 netpbm m4 gettext
+
+ and:
+
+ fink install tetex
+
+ For more information about `apt-get' and `fink', see
+fink.sourceforge.net (http://fink.sf.net).
+
+ Then, configure, patch, make and install LilyPond using these
+commands:
+
+ CC="cc -I/sw/include" CXX="c++ -I/sw/include" LDFLAGS="-L/sw/lib" \
+ ./configure --prefix=/sw
+ make -C lily out/parser.hh out/parser.cc out/config.h
+ patch -p0 < darwin.patch
+ make -C lily out/parser.o
+ make DEPENDENCIES_OUTPUT=/dev/null all
+ make install
+
+ For installing, you must be root, of course.
+
Problems
========
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=4
-PATCH_LEVEL=12
-MY_PATCH_LEVEL=jcn2
+PATCH_LEVEL=13
+MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
[ --enable-debugging compile with debugging info. Default: on],
[debug_b=$enableval])
+ AC_ARG_ENABLE(optimising,
+ [ --enable-optimising compile with optimising. Default: on],
+ [optimise_b=$enableval])
+
AC_ARG_ENABLE(profiling,
[ --enable-profiling compile with gprof support. Default: off],
[profile_b=$enableval])
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...
if ($?TFMFONTS) then
setenv TFMFONTS "$datadir/tfm:$TFMFONTS"
else
- setenv TFMFONTS "$datadir/tfm:"
+ setenv TFMFONTS "$datadir/tfm::"
endif
+if ($?DVIPSHEADERS) then
+ setenv DVIPSHEADERS "$datadir/pfa:$DVIPSHEADERS"
+else
+ setenv DVIPSHEADERS "$datadir/pfa::"
+endif
+
+
MFINPUTS="$datadir/mf:"${MFINPUTS:=":"}
TEXINPUTS="$datadir/tex:$datadir/ps:"${TEXINPUTS:=":"}
TFMFONTS="$datadir/tfm:"${TFMFONTS:=":"}
+DVIPSHEADERS="$datadir/pfa:"${DVIPSHEADERS:=":"}
# LILYPONDPREFIX="$datadir"
# export LILYPONDPREFIX
-export MFINPUTS TEXINPUTS TFMFONTS GS_LIB GS_FONTPATH
+export DVIPSHEADERS MFINPUTS TEXINPUTS TFMFONTS GS_LIB GS_FONTPATH
break
list_item(f, 'See a picture of page %d' % pageno, 'png')
list_item(base + '.ps.gz', 'Print ', 'gzipped PostScript')
+ list_item(base + '.pdf', 'Print ', 'PDF')
list_item(base + '.midi', 'Listen', 'MIDI')
list.write ("</ul>\n");
--enable-checking set runtime checks (assert calls). Default: on"
ac_help="$ac_help
--enable-debugging compile with debugging info. Default: on"
+ac_help="$ac_help
+ --enable-optimising compile with optimising. Default: on"
ac_help="$ac_help
--enable-profiling compile with gprof support. Default: off"
ac_help="$ac_help
fi
echo $ac_n "checking Package""... $ac_c" 1>&6
-echo "configure:630: checking Package" >&5
+echo "configure:632: checking Package" >&5
if test "x$PACKAGE" = "xSTEPMAKE"; then
echo "$ac_t""Stepmake package!" 1>&6
echo $ac_n "checking builddir""... $ac_c" 1>&6
-echo "configure:635: checking builddir" >&5
+echo "configure:637: checking builddir" >&5
if test "$srcdir" = "."; then
builddir=.
else
echo "$ac_t""$PACKAGE" 1>&6
echo $ac_n "checking builddir""... $ac_c" 1>&6
-echo "configure:673: checking builddir" >&5
+echo "configure:675: checking builddir" >&5
if test "$srcdir" = "."; then
builddir=.
srcdir_build=no
fi
echo $ac_n "checking for stepmake""... $ac_c" 1>&6
-echo "configure:693: checking for stepmake" >&5
+echo "configure:695: checking for stepmake" >&5
# Check for installed stepmake
if test -d $stepmake; then
echo "$ac_t""$stepmake" 1>&6
fi
echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:815: checking host system type" >&5
+echo "configure:817: checking host system type" >&5
host_alias=$host
case "$host_alias" in
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:840: checking for $ac_word" >&5
+echo "configure:842: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_MAKE'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:875: checking for $ac_word" >&5
+echo "configure:877: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_FIND'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:912: checking for $ac_word" >&5
+echo "configure:914: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_TAR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "bash", so it can be a program name with args.
set dummy bash; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:947: checking for $ac_word" >&5
+echo "configure:949: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_BASH'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "bash", so it can be a program name with args.
set dummy bash; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:987: checking for $ac_word" >&5
+echo "configure:989: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_SHELL'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "bash", so it can be a program name with args.
set dummy bash; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1024: checking for $ac_word" >&5
+echo "configure:1026: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_BASH'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "${PYTHON:-python}", so it can be a program name with args.
set dummy ${PYTHON:-python}; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1065: checking for $ac_word" >&5
+echo "configure:1067: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_PYTHON'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
fi
+ # Check whether --enable-optimising or --disable-optimising was given.
+if test "${enable_optimising+set}" = set; then
+ enableval="$enable_optimising"
+ optimise_b=$enableval
+fi
+
+
# Check whether --enable-profiling or --disable-profiling was given.
if test "${enable_profiling+set}" = set; then
enableval="$enable_profiling"
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1266: checking for $ac_word" >&5
+echo "configure:1275: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1296: checking for $ac_word" >&5
+echo "configure:1305: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1347: checking for $ac_word" >&5
+echo "configure:1356: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1379: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1388: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
cat > conftest.$ac_ext << EOF
-#line 1390 "configure"
+#line 1399 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:1395: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1404: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1421: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1430: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1426: checking whether we are using GNU C" >&5
+echo "configure:1435: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1435: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1444: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1454: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1463: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
CPPFLAGS=${CPPFLAGS:-""}
echo $ac_n "checking for IEEE-conformance compiler flags""... $ac_c" 1>&6
-echo "configure:1492: checking for IEEE-conformance compiler flags" >&5
+echo "configure:1501: checking for IEEE-conformance compiler flags" >&5
save_cflags="$CFLAGS"
case "$host" in
alpha*-*-*)
# AC_HAVE_HEADERS(limits.h malloc.h string.h unistd.h values.h)
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1514: checking how to run the C preprocessor" >&5
+echo "configure:1523: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 1529 "configure"
+#line 1538 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1535: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1544: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 1546 "configure"
+#line 1555 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1552: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1561: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
-#line 1563 "configure"
+#line 1572 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1569: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1578: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1597: checking for $ac_hdr" >&5
+echo "configure:1606: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1602 "configure"
+#line 1611 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1607: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1616: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
done
echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6
-echo "configure:1634: checking whether stat file-mode macros are broken" >&5
+echo "configure:1643: checking whether stat file-mode macros are broken" >&5
if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1639 "configure"
+#line 1648 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/stat.h>
echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6
-echo "configure:1697: checking how to run the C++ preprocessor" >&5
+echo "configure:1706: checking how to run the C++ preprocessor" >&5
if test -z "$CXXCPP"; then
if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
cross_compiling=$ac_cv_prog_cxx_cross
CXXCPP="${CXX-g++} -E"
cat > conftest.$ac_ext <<EOF
-#line 1710 "configure"
+#line 1719 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1715: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1724: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1752: checking for $ac_word" >&5
+echo "configure:1761: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1784: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:1793: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
ac_ext=C
# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
cat > conftest.$ac_ext << EOF
-#line 1795 "configure"
+#line 1804 "configure"
#include "confdefs.h"
int main(){return(0);}
EOF
-if { (eval echo configure:1800: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1809: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cxx_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
{ echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1826: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1835: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
cross_compiling=$ac_cv_prog_cxx_cross
echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
-echo "configure:1831: checking whether we are using GNU C++" >&5
+echo "configure:1840: checking whether we are using GNU C++" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
yes;
#endif
EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1840: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1849: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gxx=yes
else
ac_cv_prog_gxx=no
ac_save_CXXFLAGS="$CXXFLAGS"
CXXFLAGS=
echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:1859: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:1868: checking whether ${CXX-g++} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
fi
fi
-for ac_declaration in \
- ''\
- '#include <stdlib.h>' \
- 'extern "C" void std::exit (int) throw (); using std::exit;' \
- 'extern "C" void std::exit (int); using std::exit;' \
- 'extern "C" void exit (int) throw ();' \
- 'extern "C" void exit (int);' \
- 'void exit (int);'
-do
- cat > conftest.$ac_ext <<EOF
-#line 1900 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-$ac_declaration
-int main() {
-exit (42);
-; return 0; }
-EOF
-if { (eval echo configure:1908: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- :
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- continue
-fi
-rm -f conftest*
- cat > conftest.$ac_ext <<EOF
-#line 1918 "configure"
-#include "confdefs.h"
-$ac_declaration
-int main() {
-exit (42);
-; return 0; }
-EOF
-if { (eval echo configure:1925: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- break
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -f conftest*
-done
-if test -n "$ac_declaration"; then
- echo '#ifdef __cplusplus' >>confdefs.h
- echo $ac_declaration >>confdefs.h
- echo '#endif' >>confdefs.h
-fi
-
-
ac_safe=`echo "FlexLexer.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for FlexLexer.h""... $ac_c" 1>&6
-echo "configure:1944: checking for FlexLexer.h" >&5
+echo "configure:1902: checking for FlexLexer.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1949 "configure"
+#line 1907 "configure"
#include "confdefs.h"
#include <FlexLexer.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1954: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1912: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
echo $ac_n "checking "g++ version"""... $ac_c" 1>&6
-echo "configure:1991: checking "g++ version"" >&5
+echo "configure:1949: checking "g++ version"" >&5
cxx_version=`$CXX --version`
echo "$ac_t"""$cxx_version"" 1>&6
# urg, egcs: how to check for egcs >= 1.1?
echo $ac_n "checking whether explicit instantiation is needed""... $ac_c" 1>&6
-echo "configure:2009: checking whether explicit instantiation is needed" >&5
+echo "configure:1967: checking whether explicit instantiation is needed" >&5
if eval "test \"`echo '$''{'lily_cv_need_explicit_instantiation'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2014 "configure"
+#line 1972 "configure"
#include "confdefs.h"
template <class T> struct foo { static int baz; };
return foo<int>::baz;
; return 0; }
EOF
-if { (eval echo configure:2024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1982: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
lily_cv_need_explicit_instantiation=no
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2051: checking for $ac_word" >&5
+echo "configure:2009: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2094: checking for $ac_word" >&5
+echo "configure:2052: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_BISON'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2129: checking for $ac_word" >&5
+echo "configure:2087: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_FLEX'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2197: checking for $ac_word" >&5
+echo "configure:2155: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2230: checking for $ac_word" >&5
+echo "configure:2188: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
echo $ac_n "checking language""... $ac_c" 1>&6
-echo "configure:2285: checking language" >&5
+echo "configure:2243: checking language" >&5
case "$language" in
En* | en* | Am* | am* | US* | us*)
lang=English;;
echo $ac_n "checking for gettext in -lintl""... $ac_c" 1>&6
-echo "configure:2321: checking for gettext in -lintl" >&5
+echo "configure:2279: checking for gettext in -lintl" >&5
ac_lib_var=`echo intl'_'gettext | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lintl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2329 "configure"
+#line 2287 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
gettext()
; return 0; }
EOF
-if { (eval echo configure:2343: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
for ac_func in gettext
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2373: checking for $ac_func" >&5
+echo "configure:2331: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2378 "configure"
+#line 2336 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:2404: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2362: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2436: checking for $ac_word" >&5
+echo "configure:2394: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_MSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
test -n "$MSGFMT" || MSGFMT="\$(SHELL) \$(step-bindir)/fake-msgfmt.sh "
echo $ac_n "checking whether msgfmt accepts -o""... $ac_c" 1>&6
-echo "configure:2467: checking whether msgfmt accepts -o" >&5
+echo "configure:2425: checking whether msgfmt accepts -o" >&5
msgfmt_output="`msgfmt -o bla 2>&1 | grep usage`"
if test "$msgfmt_output" = ""; then
echo "$ac_t""yes" 1>&6
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2495: checking for $ac_word" >&5
+echo "configure:2453: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_METAFONT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2531: checking for $ac_word" >&5
+echo "configure:2489: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_MFONT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2569: checking for $ac_word" >&5
+echo "configure:2527: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_METAPOST'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2605: checking for $ac_word" >&5
+echo "configure:2563: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_MPOST'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2644: checking for $ac_word" >&5
+echo "configure:2602: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_INIMETAFONT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2680: checking for $ac_word" >&5
+echo "configure:2638: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_INIMFONT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2718: checking for $ac_word" >&5
+echo "configure:2676: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_INIMETAPOST'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2754: checking for $ac_word" >&5
+echo "configure:2712: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_INIMPOST'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
fi
echo $ac_n "checking for working metafont mode""... $ac_c" 1>&6
-echo "configure:2788: checking for working metafont mode" >&5
+echo "configure:2746: checking for working metafont mode" >&5
modelist='ljfour lj4 lj3 lj2 ljet laserjet'
for MFMODE in $modelist; do
$METAFONT "\mode:=$MFMODE; mode_setup; end." > /dev/null 2>&1
echo "$ac_t""$MFMODE" 1>&6
echo $ac_n "checking for mfplain.mp""... $ac_c" 1>&6
-echo "configure:2799: checking for mfplain.mp" >&5
+echo "configure:2757: checking for mfplain.mp" >&5
#
# For now let people define these in their environments
#
echo "$ac_t""$MFPLAIN_MP" 1>&6
echo $ac_n "checking for inimetapost flags""... $ac_c" 1>&6
-echo "configure:2807: checking for inimetapost flags" >&5
+echo "configure:2765: checking for inimetapost flags" >&5
if test ${INIMETAPOST} = "inimp" ; then
: ${INIMETAPOST_FLAGS=''}
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2840: checking for $ac_word" >&5
+echo "configure:2798: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_KPSEWHICH'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
test -n "$KPSEWHICH" || KPSEWHICH="no"
echo $ac_n "checking for tfm path""... $ac_c" 1>&6
-echo "configure:2871: checking for tfm path" >&5
+echo "configure:2829: checking for tfm path" >&5
TFM_FONTS="cmr msam"
## First, let's just see if we can find Guile at all.
echo $ac_n "checking "for guile-config"""... $ac_c" 1>&6
-echo "configure:2899: checking "for guile-config"" >&5
+echo "configure:2857: checking "for guile-config"" >&5
for guile_config in guile-config $target-guile-config $build-guile-config; do
echo "$ac_t"""$guile_config"" 1>&6
if ! $guile_config --version > /dev/null 2>&1 ; then
echo "configure: warning: "cannot execute $guile_config"" 1>&2
echo $ac_n "checking "if we are cross compiling"""... $ac_c" 1>&6
-echo "configure:2905: checking "if we are cross compiling"" >&5
+echo "configure:2863: checking "if we are cross compiling"" >&5
guile_config=error
else
break
exit 1
fi
echo $ac_n "checking "Guile version"""... $ac_c" 1>&6
-echo "configure:2916: checking "Guile version"" >&5
+echo "configure:2874: checking "Guile version"" >&5
need_guile_version="1.3.4"
need_guile_version_numeric=100304
guile_version=`$guile_config --version 2>&1 | awk '{print $NF}'`
## The GUILE_FLAGS macro.
echo $ac_n "checking for Guile""... $ac_c" 1>&6
-echo "configure:2937: checking for Guile" >&5
+echo "configure:2895: checking for Guile" >&5
if ! $guile_config link > /dev/null ; then
echo "$ac_t"""cannot execute $guile_config"" 1>&6
{ echo "configure: error: "cannot find guile-config; is Guile installed?"" 1>&2; exit 1; }
# Extract the first word of "guile", so it can be a program name with args.
set dummy guile; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2952: checking for $ac_word" >&5
+echo "configure:2910: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_GUILE'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3013: checking for $ac_hdr" >&5
+echo "configure:2971: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3018 "configure"
+#line 2976 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3023: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2981: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
done
echo $ac_n "checking for kpse_find_file in -lkpathsea""... $ac_c" 1>&6
-echo "configure:3050: checking for kpse_find_file in -lkpathsea" >&5
+echo "configure:3008: checking for kpse_find_file in -lkpathsea" >&5
ac_lib_var=`echo kpathsea'_'kpse_find_file | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lkpathsea $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3058 "configure"
+#line 3016 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
kpse_find_file()
; return 0; }
EOF
-if { (eval echo configure:3072: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
for ac_func in kpse_find_file
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3102: checking for $ac_func" >&5
+echo "configure:3060: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3107 "configure"
+#line 3065 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:3133: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3091: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
fi
echo $ac_n "checking whether to use kpathsea""... $ac_c" 1>&6
-echo "configure:3160: checking whether to use kpathsea" >&5
+echo "configure:3118: checking whether to use kpathsea" >&5
if test "$kpathsea_b" != no; then
echo "$ac_t""yes" 1>&6
KPATHSEA=1
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3181: checking for $ac_word" >&5
+echo "configure:3139: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_BIBTEX2HTML'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
-echo "configure:3222: checking for 8-bit clean memcmp" >&5
+echo "configure:3180: checking for 8-bit clean memcmp" >&5
if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_func_memcmp_clean=no
else
cat > conftest.$ac_ext <<EOF
-#line 3230 "configure"
+#line 3188 "configure"
#include "confdefs.h"
+#ifdef __cplusplus
+extern "C" void exit(int);
+#endif
main()
{
}
EOF
-if { (eval echo configure:3240: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3201: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_memcmp_clean=yes
else
test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}"
echo $ac_n "checking for vprintf""... $ac_c" 1>&6
-echo "configure:3258: checking for vprintf" >&5
+echo "configure:3219: checking for vprintf" >&5
if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3263 "configure"
+#line 3224 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char vprintf(); below. */
; return 0; }
EOF
-if { (eval echo configure:3289: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3250: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_vprintf=yes"
else
if test "$ac_cv_func_vprintf" != yes; then
echo $ac_n "checking for _doprnt""... $ac_c" 1>&6
-echo "configure:3313: checking for _doprnt" >&5
+echo "configure:3274: checking for _doprnt" >&5
if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3318 "configure"
+#line 3279 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char _doprnt(); below. */
; return 0; }
EOF
-if { (eval echo configure:3344: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func__doprnt=yes"
else
for ac_func in memmem snprintf vsnprintf gettext isinf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3371: checking for $ac_func" >&5
+echo "configure:3332: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3376 "configure"
+#line 3337 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:3402: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3363: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3442: checking for $ac_word" >&5
+echo "configure:3403: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test "$MAKEINFO" != "error"; then
echo $ac_n "checking whether makeinfo can split html by @node""... $ac_c" 1>&6
-echo "configure:3474: checking whether makeinfo can split html by @node" >&5
+echo "configure:3435: checking whether makeinfo can split html by @node" >&5
mkdir -p out
makeinfo --html --output=out/split <<EOF
\input texinfo
# Extract the first word of "perl", so it can be a program name with args.
set dummy perl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3502: checking for $ac_word" >&5
+echo "configure:3463: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
$$ = new Music (gh_list (gh_cons (ly_symbol2scm ("name"), ly_symbol2scm ("separator")), SCM_UNDEFINED));
$$->set_spot (THIS->here_input ());
}
- | '|' {
-
- extern Music * get_barcheck();
- $$ = get_barcheck ();
- $$->set_spot (THIS->here_input ());
- }
| '|' {
extern Music * get_barcheck();
$$ = get_barcheck ();
-/*
- symbol-cache.cc -- implement a cache for literal symbols, eg
- symbol ("foo-bar")
-
-
- source file of the GNU LilyPond music typesetter
-
- (c) 2000--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-
- */
-
-#include <map>
-#include "lily-guile.hh"
-
-#if 0
-
-typedef map<const char*, SCM> Literal_symbol_map;
-Literal_symbol_map literal_map;
-
-
-SCM
-symbol (const char*s)
-{
- Literal_symbol_map::const_iterator i = literal_map.find (s);
- if (i != literal_map.end ())
- return (*i).second;
-
- SCM sym = gh_symbol2scm ((char*)s);
- scm_permanent_object (sym);
- literal_map[s] = sym;
- return sym;
-}
-
-
-/*
- This is a gory trick to cache the value gh_symbol2scm (), without
- cluttering up the C code with snarf macros.
-
- You should *ONLY* use symbol () for arguments that are literal
- strings!
-
- without (wtk1-fugue2)
-
- real 0m20.157s
- user 0m19.800s
- sys 0m0.140s
-
- with: (per file.)
-
- real 0m19.284s
- user 0m18.630s
- sys 0m0.190s
-
-
- global with STL map
-
- real 0m20.616s
- user 0m19.360s
- sys 0m0.080s
-
- global with binsearch.
-
- real 0m19.352s
- user 0m18.710s
- sys 0m0.230s
-
- local binsearch
-
- user 18.8
-
- local with binsearch, and other optimizations.
-
- 17.7
-*/
-#endif
-
-
p = \dynamicscript #"p"
mp = \dynamicscript #"mp"
mf = \dynamicscript #"mf"
-f = \dynamicscript #"e" % see feta-din layout
+f = \dynamicscript #"f"
ff = \dynamicscript #"ff"
fff = \dynamicscript #"fff"
ffff = \dynamicscript #"ffff"
export PATH:=$(topdir)/lily/out:$(topdir)/buildscripts/out:$(PATH)
-
+export TEXCONFIG:=$(topdir)/mf/out:$(TEXCONFIG)
+export TEXPSHEADERS:=$(topdir)/mf/out::$(TEXPSHEADERS)
export MFINPUTS:=$(topdir)/mf/:$(MFINPUTS)::
export TEXINPUTS:=$(topdir)/mf/out/:$(topdir)/tex/:$(topdir)/ps/:$(TEXINPUTS):$(pwd)::
export LILYINCLUDE:=$(topdir)/ps:$(topdir)/scm:$(topdir)/ly:$(topdir)/mf/out::$(TEX_TFMDIR):$(LILYINCLUDE)
$(outdir)/%-book.ps: $(outdir)/%.ps
psbook $< $<.tmp
pstops '2:0L@.7(21cm,0)+1L@.7(21cm,14.85cm)' $<.tmp $@
+
+
+$(outdir)/%.pdf: $(outdir)/%.dvi
+ dvips -Ppdf -G0 -u$(topdir)/mf/out/lilypond.map -o $@.pdfps $<
+ ps2pdf $@.pdfps $@
all: $(OUT_FILES)
-local-WWW: $(ly_examples) $(ps_examples) $(png_examples) $(dvi_examples)
+local-WWW: $(ly_examples) $(ps_examples) $(pdf_examples) $(png_examples) $(dvi_examples)
tar:
mkdir -p $(outdir)/$(tarball)
ly_examples=$(addprefix $(outdir)/, $(addsuffix .ly.txt, $(examples)))
ps_examples=$(addprefix $(outdir)/, $(addsuffix .ps.gz, $(examples)))
+pdf_examples=$(addprefix $(outdir)/, $(addsuffix .pdf, $(examples)))
dvi_examples=$(addprefix $(outdir)/, $(addsuffix .dvi, $(examples)))
gif_examples=$(addprefix $(outdir)/, $(addsuffix .gif, $(examples)))
png_examples=$(addprefix $(outdir)/, $(addsuffix .png, $(examples)))
Begin3
Title: LilyPond
-Version: 1.4.12
-Entered-date: 04MRT02
+Version: 1.4.13
+Entered-date: 05MEI02
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.4.12.tar.gz
+ 1000k lilypond-1.4.13.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 1000k lilypond-1.4.12.tar.gz
+ 1000k lilypond-1.4.13.tar.gz
Copying-policy: GPL
End
%define info yes
Name: lilypond
-Version: 1.4.12
+Version: 1.4.13
Release: 1
License: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.4.12.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.4.13.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.4.12
+Version: 1.4.13
Release: 2
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.4.12.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.4.13.tar.gz
# music notation software for.. ?
Summary: A program for printing sheet music.
URL: http://www.lilypond.org/
INSTALLATION_DIR=$(datadir)/mf/
INSTALLATION_FILES=$(MF_FILES) $(AF_FILES)
-INSTALLATION_OUT_SUFFIXES=1 2 3 4
+INSTALLATION_OUT_SUFFIXES=1 2 3 4 5
INSTALLATION_OUT_DIR1=$(datadir)/tex
INSTALLATION_OUT_FILES1=$(TEXTABLES)
# making pfas takes a lot of CPU time. Let's skip it for now.
+PFA_FILES = $(addprefix $(outdir)/, $(FONT_FILES:.mf=.pfa))
+
ifdef MAKE_PFA_FILES
-PFA_FILES = $(addprefix $(outdir)/, $(FONT_FILES:.mf=.pfa))
-ALL_GEN_FILES += $(PFA_FILES)
+ALL_GEN_FILES += $(PFA_FILES) $(outdir)/lilypond.map
INSTALLATION_OUT_DIR4=$(datadir)/pfa
INSTALLATION_OUT_FILES4=$(PFA_FILES)
+INSTALLATION_OUT_DIR5=$(datadir)/dvips/
+INSTALLATION_OUT_FILES5=$(outdir)/lilypond.map
+
pfa: $(PFA_FILES)
endif
+$(outdir)/lilypond.map:
+ echo $(FONT_FILES:.mf=) | tr ' ' '\n' | \
+ sed 's/\(.*\)/\1 \1 <\1.pfa/' > $@
+
+
export MFINPUTS:=.:$(MFINPUTS)
default: $(ALL_GEN_FILES)
+++ /dev/null
-% The base file for Computer Modern (a supplement to {\tt plain.mf})
-
-cmbase:=1; % when |cmbase| is known, this file has been input
-
-let cmchar=\; % `|cmchar|' should precede each character
-let generate=input; % `|generate|' should follow the parameters
-
-autorounding:=0; smoothing:=0; % we do our own rounding
-def autorounded = interim autorounding:=2 enddef;
-
-newinternal slant,fudge,math_spread,superness,superpull,beak_darkness,ligs;
-boolean square_dots,hefty,serifs,
- monospace,variant_g,low_asterisk,math_fitting;
-
-boolean dark,dark.dark,skewed,skewed.skewed; % for fast option testing
-dark=skewed=false; dark.dark=skewed.skewed=true;
-
-vardef Vround primary y = y_:=vround y;
- if y_<min_Vround: min_Vround else: y_ fi enddef;
-newinternal y_,min_Vround;
-
-vardef serif(suffix $,$$,@) % serif at |z$| for stroke from |z$$|
- (expr darkness,jut) suffix modifier =
- pickup crisp.nib; numeric bracket_height; pair downward;
- bracket_height=if dark.modifier: 1.5 fi\\ bracket;
- if y$<y$$: y@2=min(y$+bracket_height,y$$);
- top y@1-slab=bot y@0+eps=tiny.bot y$; downward=z$-z$$;
- if y@1>y@2: y@2:=y@1; fi
- else: y@2=max(y$-bracket_height,y$$);
- bot y@1+slab=top y@0-eps=tiny.top y$; downward=z$$-z$;
- if y@1<y@2: y@2:=y@1; fi fi
- y@3=y@2; z@3=whatever[z$,z$$];
- if jut<0: z@2+penoffset downward of currentpen =
- z$l+penoffset downward of pen_[tiny.nib]+whatever*downward;
- lft x@0=lft x@1=tiny.lft x$l+jut;
- if x@3<x@2+eps: x@3:=x@2+eps; fi
- else: z@2-penoffset downward of currentpen =
- z$r-penoffset downward of pen_[tiny.nib]+whatever*downward;
- rt x@0=rt x@1=tiny.rt x$r+jut;
- if x@3>x@2-eps: x@3:=x@2-eps; fi fi
- pair corner; ypart corner=y@1; corner=z@2+whatever*downward;
- filldraw z@2{z$-z$$}
- ...darkness[corner,.5[z@1,z@2] ]{z@1-z@2}
- ...{jut,0}z@1--z@0--(x$,y@0)--z@3--cycle; % the serif
- labels (@1,@2); enddef;
-
-def dish_serif(suffix $,$$,@)(expr left_darkness,left_jut)
- (suffix @@)(expr right_darkness,right_jut) suffix modifier =
- serif($,$$,@,left_darkness,-left_jut) modifier;
- serif($,$$,@@,right_darkness,right_jut) modifier;
- if dish>0: pickup tiny.nib; numeric dish_out,dish_in;
- if y$<y$$: dish_out=bot y$; dish_in=dish_out+dish; let rev_=reverse;
- else: dish_out=top y$; dish_in=dish_out-dish; let rev_=relax; fi
- erase fill rev_
- ((x@1,dish_out)..(x$,dish_in){right}..(x@@1,dish_out)--cycle);
- fi enddef;
-
-def nodish_serif(suffix $,$$,@)(expr left_darkness,left_jut)
- (suffix @@)(expr right_darkness,right_jut) suffix modifier =
- serif($,$$,@,left_darkness,-left_jut) modifier;
- serif($,$$,@@,right_darkness,right_jut) modifier; enddef;
-
-vardef sloped_serif.l(suffix $,$$,@)(expr darkness,jut,drop) =
- pickup crisp.nib; pos@2(slab,90);
- lft x@0=tiny.lft x$l; rt x@1=tiny.rt x$r; top y@1=tiny.top y$r;
- lft x@2=lft x@0-jut; y@2r=y@1-drop;
- y@0=max(y@2l-bracket,y$$)-eps;
- if drop>0: erase fill z@1--top z@1
- --(x@2r,top y@1)--z@2r--cycle; fi % erase excess at top
- filldraw z@1--z@2r--z@2l{right}
- ...darkness[(x@0,y@2l),.5[z@2l,z@0] ]{z@0-z@2l}
- ...{down}z@0--(x@1,y@0)--cycle; % sloped serif
- labels(@0,@1,@2); enddef;
-
-vardef sloped_serif.r(suffix $,$$,@)(expr darkness,jut,drop) =
- pickup crisp.nib; pos@2(slab,-90);
- rt x@0=tiny.rt x$r; lft x@1=tiny.lft x$l; bot y@1=tiny.bot y$l;
- rt x@2=rt x@0+jut; y@2r=y@1+drop;
- y@0=min(y@2l+bracket,y$$)+eps;
-if drop>0: erase fill z@1--bot z@1
- --(x@2r,bot y@1)--z@2r--cycle; fi % erase excess at bottom
- filldraw z@1--z@2r--z@2l{left}
- ...darkness[(x@0,y@2l),.5[z@2l,z@0] ]{z@0-z@2l}
- ...{up}z@0--(x@1,y@0)--cycle; % sloped serif
- labels(@0,@1,@2); enddef;
-
-vardef term.l(suffix $,$$)(expr d,t,s)= % ``robust'' sans-serif terminal
- path p_; p_=z$l{d}..tension t..z$$l;
- pair d_; d_=(x$$l-x$l,s*(y$$l-y$l));
- if (abs angle direction 1 of p_ < abs angle d_)<>(x$l<x$$l):
- p_:=z$l{d}..tension atleast t..{d_}z$$l; fi
- p_ enddef;
-vardef term.r(suffix $,$$)(expr d,t,s)=
- path p_; p_=z$r{d}..tension t..z$$r;
- pair d_; d_=(x$$r-x$r,s*(y$$r-y$r));
- if (abs angle direction 1 of p_ < abs angle d_)<>(x$r<x$$r):
- p_:=z$r{d}..tension atleast t..{d_}z$$r; fi
- p_ enddef;
-def rterm=reverse term enddef;
-
-vardef arm(suffix $,$$,@)(expr darkness,jut) = % arm from |z$| to |z$$|
- x@0=good.x(x$$r-jut); y@0=y$r;
- if serifs: y@1=y$l; z@1=z$$l+whatever*(z$$r-z@0);
- z@2=.5[z$l,z@1];
- filldraw z$$l{z@1-z$$l}...darkness[z@1,.5[z@2,z$$l] ]...z@2
- ---z$l--z$r--z@0--z$$r--cycle; % arm and beak
- else: filldraw z$l--z$r--z@0--z$$r--cycle; fi % sans-serif arm
- penlabels(@0,@1,@2); enddef;
-
-def pi_stroke = pickup fine.nib;
- pos1(hair,0); pos2(vstem,-90); pos3(vstem,-90);
- x1-.5hair=hround -.5hair; x2=2u; x3=w-1.5u;
- y1=x_height-x_height/3.141592653589793; y2=y3; top y3l=x_height;
- filldraw circ_stroke z3e---z2e...{x1-x2,3.14159(y1-y2)}z1e enddef;
-
-def bulb(suffix $,$$,$$$) =
- z$$$r=z$$r;
- path_.l:=z$l{x$$r-x$r,0}...{0,y$$r-y$r}z$$l;
- filldraw path_.l--z$$r{0,y$r-y$$r}...{x$r-x$$r,0}z$r--cycle; % link
- path_.r:=z$$$l{0,y$r-y$$r}..z$$$r{0,y$$r-y$r}; % near-circle
- filldraw subpath(0,xpart(path_.r intersectiontimes path_.l)) of path_.r
- --z$$r{0,y$$r-y$r}..cycle; % bulb
- enddef;
-
-def v_bulb(suffix $,$$)= % |pos$| is known
- y$$+.5curve=x_height+oo; x$$+.5curve=w-u;
- numeric theta; theta=angle(4(x$-x$$),y$-y$$); pos$$(curve,theta+90);
- filldraw z$$l{dir theta}..tension atleast 1 and 1..{down}z$l
- --z$r{up}...{-dir theta}z$$r..cycle; % bulb
- enddef;
-
-def dot(suffix $,$$) =
- filldraw if square_dots: (x$l,y$$l)--(x$r,y$$l)
- --(x$r,y$$r)--(x$l,y$$r)--cycle % squarish dot
- else: z$l...z$$l...z$r...z$$r...cycle fi % roundish dot
- enddef;
-
-def comma(suffix $,@)(expr dot_size,jut,depth) =
- pickup fine.nib; pos$(dot_size,90);
- if square_dots: pos$'(dot_size,0); z$'=z$; dot($',$); % squarish dot
- comma_join_:=max(fine.breadth,floor .7dot_size);
- comma_bot_:=max(fine.breadth,floor .5dot_size);
- pos@0(comma_join_,0); pos@1(comma_join_,0);
- pos@2(comma_bot_,0); y@0=y$; y@1=y$l; y@2=y@1-depth;
- x@0r=x@1r=x$'r; rt x@2r=good.x(x$-eps);
- filldraw stroke z@0e--z@1e..z@2e; % tail
- else: pos@1(vair,90); pos@2(vair,0); pos@3(vair,-45);
- z@1r=z$r; rt x@2r=hround(x$+.5dot_size+jut)+2eps; x@3=x$-.5u;
- y@2=1/3[y@1,y@3]; bot y@3r=vround(y$-.5dot_size-depth);
- y_:=ypart((z@1{right}...z@2{down}...z@3)
- intersectiontimes (z$l{right}..{left}z$r)); if y_<0: y_:=1; fi
- filldraw z$r{left}..subpath (0,y_) of (z$l{right}..{left}z$r)--cycle; % dot
- filldraw stroke z@1e{right}...z@2e{down}...z@3e; fi % tail
- penlabels(@1,@2,@3); enddef;
-
-def ammoc(suffix $,@)(expr dot_size,jut,depth) = % reversed comma
- pickup fine.nib; pos$(dot_size,90);
- if square_dots: pos$'(dot_size,0); z$'=z$; dot($',$); % squarish dot
- comma_join_:=max(fine.breadth,floor .7dot_size);
- comma_top_:=max(fine.breadth,floor .5dot_size);
- pos@0(comma_join_,0); pos@1(comma_join_,0);
- pos@2(comma_top_,0); y@0=y$; y@1=y$r; y@2=y@1+depth;
- x@0l=x@1l=x$'l; lft x@2l=good.x(x$+eps);
- filldraw stroke z@0e--z@1e..z@2e; % tail
- else: pos@1(vair,90); pos@2(vair,0); pos@3(vair,-45);
- z@1l=z$l; lft x@2l=hround(x$-.5dot_size-jut)-2eps; x@3=x$+.5u;
- y@2=1/3[y@1,y@3]; top y@3l=vround(y$+.5dot_size+depth);
- y_:=ypart((z@1{left}...z@2{up}...z@3)
- intersectiontimes (z$r{left}..{right}z$l)); if y_<0: y_:=1; fi
- filldraw z$l{right}..subpath (0,y_) of (z$r{left}..{right}z$l)--cycle; % dot
- filldraw stroke z@1e{left}...z@2e{up}...z@3e; fi % tail
- penlabels(@1,@2,@3); enddef;
-
-%%% @ from to %%%% temporary formatting change
-vardef diag_in(suffix from,$)(expr sharpness)(suffix $$) =
- pickup tiny.nib; save from_x,y_;
- if y.from>y$: bot else: top fi\\ y_=y$;
- (from_x,y_)=whatever[z.from,z$];
- sharpness[z$,(from_x,y_)]{z$-z.from}
- ...{z$$-z$}z$+sharpness*length(z$-(from_x,y_))*unitvector(z$$-z$) enddef;
-
-vardef diag_out(suffix $)(expr sharpness)(suffix $$,to) =
- pickup tiny.nib; save to_x,y_;
- if y.to>y$: bot else: top fi\\ y_=y$;
- (to_x,y_)=whatever[z$$,z.to];
- z$$-sharpness*length(z$$-(to_x,y_))*unitvector(z$$-z$){z$$-z$}
- ...{z.to-z$$}sharpness[z$$,(to_x,y_)] enddef;
-
-vardef diag_end(suffix from,$)(expr sharpness_in,sharpness_out)(suffix $$,to)=
- save from_x,to_x,y_,x_,xx_;
- if y.from>y$: tiny.bot else: tiny.top fi\\ y_=y$; % we assume that |y$=y$$|
- (from_x,y_)=whatever[z.from,z$]; (to_x,y_)=whatever[z$$,z.to];
- if x$$>x$: x_=x$+sharpness_in*length(z$-(from_x,y_));
- xx_=x$$-sharpness_out*length(z$$-(to_x,y_));
- if xx_<x_: xx_:=x_:=.5[xx_,x_]; fi
- else: x_=x$-sharpness_in*length(z$-(from_x,y_));
- xx_=x$$+sharpness_out*length(z$$-(to_x,y_));
- if xx_>x_: xx_:=x_:=.5[xx_,x_]; fi fi
- sharpness_in[z$,(from_x,y_)]{z$-z.from}
- ...{z$$-z$}(x_,y$)..(xx_,y$){z$$-z$}
- ...{z.to-z$$}sharpness_out[z$$,(to_x,y_)] enddef;
-%%% at from to %%%% restore normal formatting
-
-vardef special_diag_end(suffix $$,$,@,@@) = % for top middle of w's
- if x@r<=x$r: diag_end($$r,$r,1,1,@l,@@l)
- else: z0=whatever[z$$l,z$l]=whatever[z@l,z@@l];
- diag_end($$r,$r,1,1,$l,0)--z0 fi enddef;
-
-def prime_points_inside(suffix $,$$) =
- theta_:=angle(z$r-z$l);
- penpos$'(whatever,theta_);
- if y$$>y$: z$'=(0,pen_top) rotated theta_ + whatever[z$l,z$r];
- theta_:=angle(z$$-z$)-90;
- else: z$'=(0,pen_bot) rotated theta_ + whatever[z$l,z$r];
- theta_:=angle(z$$-z$)+90; fi
- z$'l+(pen_lft,0) rotated theta_=z$l+whatever*(z$-z$$);
- z$'r+(pen_rt,0) rotated theta_=z$r+whatever*(z$-z$$);
- enddef;
-
-def ellipse_set(suffix $,@,@@,$$) = % given |z$,x@,z$$|, find |y@| and |z@@|
-% such that the path |z${x@-x$,0}..z@{0,y@-y$}..{z$$-z@@}z@@|
-% is consistent with an ellipse
-% and such that the line |z@@--z$$| has a given |slope|
- alpha_:=slope*(x@-x$); beta_:=y$$-y$-slope*(x$$-x$);
- gamma_:=alpha_/beta_;
- y@-y$=.5(beta_-alpha_*gamma_);
- x@@-x$=-2gamma_*(x@-x$)/(1+gamma_*gamma_);
- y@@-y$$=slope*(x@@-x$$) enddef;
-
-vardef diag_ratio(expr a,b,y,c) = % assuming that $a>\vert b/y\vert$,
-% compute the value $\alpha=(x\6{++}y)/y$ such that $ax+b\alpha=c$
- numeric a_,b_,c_; b_=b/y; c_=c/y; a_=a*a-b_*b_;
- (a*(c_++sqrt a_)-b_*c_)/a_ enddef;
-
-def f_stroke(suffix $,$$,@,left_serif,right_serif)(expr left_jut,right_jut)=
- pickup tiny.nib; bot y$=0;
- penpos@0(x$r-x$l,0); x@0l=x$l; top y@0=x_height;
- filldraw stroke z$e--z@0e; % stem
- pickup fine.nib; pos@0'(x$r-x$l-(hround stem_corr)+tiny,180);
- y@0'=y@0; lft x@0'r=tiny.lft x$l;
- penpos@1(x@0'l-x@0'r,180); x@1=x@0'; y@1+.5vair=.5[x_height,h];
- pos@2(vair,90); top y@2r=h+oo;
- if serifs: x@2=.6[x@1,x$$r]; (x@,y@2r)=whatever[z@2l,z@1l];
- x@2r:=min(x@,.5[x@2,x$$r]); pos@3(hair,0); bulb(@2,@3,$$); % bulb
- filldraw stroke z@0'e--z@1e & super_arc.e(@1,@2); % arc
- dish_serif($,@0,left_serif,1/3,left_jut,right_serif,1/3,right_jut); % serif
- else: x@2=.6[x@1,x$$]; y@1l:=1/3[y@1l,y@2l];
- filldraw stroke z@0'e--z@1e & super_arc.e(@1,@2)
- & term.e(@2,$$,right,.9,4); fi % arc and terminal
- penlabels(@0,@1,@2); enddef;
-
-def h_stroke(suffix $,@,@@,$$) =
- penpos$$(x@@r-x@@l,0); x$$=x@@; bot y$$=0;
- y@@=1/3[bar_height,x_height];
- penpos$''(x$r-x$l,0); x$''=x$; y$''=1/8[bar_height,x_height];
- filldraw stroke z$''e--z$e; % thicken the lower left stem
- penpos@0(min(rt x$r-lft x$l,thin_join)-fine,180); pickup fine.nib;
- rt x@0l=tiny.rt x$r; y@0=y$'';
- pos@1(vair,90); pos@@'(x@@r-x@@l+tiny,0); z@@'=z@@;
- x@1=.5[rt x@0l,rt x@@'r]; top y@1r=x_height+oo;
- (x@,y@1l)=whatever[z@1r,z@0l]; x@1l:=x@;
- filldraw stroke z@0e{up}...{right}z@1e
- &{{interim superness:=hein_super; super_arc.e(@1,@@')}}; % arch
- pickup tiny.nib; filldraw stroke z@@e--z$$e; % right stem
- labels(@0); penlabels(@1); enddef;
-
-def hook_out(suffix $,$$,$$$)suffix modifier= % |x$| and |x$$$| (only) are known
- pos$(stem,0); pos$$(vair,90);
- x$$$:=hround(x$$$+.5hair-eps)-.5hair; pos$$$(hair,180);
- y$=1/4x_height; bot y$$l=-oo; y$$$=1/3x_height;
- if skewed.modifier: x$$=x$+1.25u;
- filldraw stroke z$e{-u,-x_height}...z$$e{right}...{up}z$$$e; % hook
- else: x$$=x$+1.5u;
- filldraw stroke z$e{down}...z$$e{right}
- ...{x$$$-(x$+2.5u),x_height}z$$$e; fi enddef; % hook
-
-def hook_in(suffix $,$$,$$$)suffix modifier= % |x$| and |x$$$| (only) are known
- x$:=hround(x$-.5hair)+.5hair; pos$(hair,180);
- pos$$(vair,90); pos$$$(stem,0);
- y$=2/3x_height; top y$$r=x_height+oo; y$$$=3/4x_height;
- if skewed.modifier: x$$=x$$$-1.25u;
- filldraw stroke z$e{up}...z$$e{right}...{-u,-x_height}z$$$e; % hook
- else: x$$=x$$$-1.5u;
- filldraw stroke z$e{x$$$-2.5u-x$,x_height}
- ...z$$e{right}...{down}z$$$e; fi enddef; % hook
-
-def ital_arch(suffix $,$$,$$$) = % |z$| and |z$$$| (only) are known
- pos$'(hair,180); z$'=z$;
- pos$$(vair,90); pos$$$(stem,0);
- {{interim superness := more_super; x$$=.6[x$,x$$$];
- top y$$r=x_height+oo; y$$$=.65x_height;
- filldraw stroke z$'e{up}...super_arc.e($$,$$$);}} enddef; % stroke
-
-def compute_spread(expr normal_spread,big_spread)=
- spread#:=math_spread[normal_spread,big_spread];
- spread:=2ceiling(spread#*hppp/2)+eps; enddef;
-
-def v_center(expr h_sharp) =
- .5h_sharp+math_axis#, .5h_sharp-math_axis# enddef;
-
-def circle_points =
- x4=x8=.5[x2,x6]; x1=x3=superness[x4,x2]; x5=x7=superness[x4,x6];
- y2=y6=.5[y4,y8]; y1=y7=superness[y2,y8]; y3=y5=superness[y2,y4];
- enddef;
-def draw_circle =
- draw z8{right}...z1{z2-z8}...z2{down}...z3{z4-z2}...z4{left}
- ...z5{z6-z4}...z6{up}...z7{z8-z6}...cycle enddef;
-
-def left_paren(expr min_breadth, max_breadth) =
- pickup fine.nib; pos1(hround min_breadth,0);
- pos2(hround max_breadth,0); pos3(hround min_breadth,0);
- rt x1r=rt x3r=hround(w-1.25u+.5min_breadth); lft x2l=hround 1.25u;
- top y1=h; y2=.5[y1,y3]; bot y3=1-d;
- filldraw stroke z1e{3(x2e-x1e),y2-y1}...z2e
- ...{3(x3e-x2e),y3-y2}z3e; % arc
- penlabels(1,2,3); enddef;
-
-def right_paren(expr min_breadth, max_breadth) =
- pickup fine.nib; pos1(hround min_breadth,0);
- pos2(hround max_breadth,0); pos3(hround min_breadth,0);
- lft x1l=lft x3l=hround(1.25u-.5min_breadth); rt x2r=hround(w-1.25u);
- top y1=h; y2=.5[y1,y3]; bot y3=1-d;
- filldraw stroke z1e{3(x2e-x1e),y2-y1}...z2e
- ...{3(x3e-x2e),y3-y2}z3e; % arc
- penlabels(1,2,3); enddef;
-
-def left_bracket(expr breadth,do_top,do_bot) =
- pickup crisp.nib;
- numeric thickness; thickness=hround breadth;
- pos1(thickness,0); pos2(thickness,0);
- top y1=h; bot y2=1-d; lft x1l=lft x2l=hround(2.5u-.5thickness);
- filldraw stroke z1e--z2e; % stem
- pos3(thickness,90); pos4(thickness,90);
- pos5(thickness,90); pos6(thickness,90);
- x3=x5=x1l; rt x4=rt x6=hround(w-.75u+.5thickness);
- y3r=y4r=y1; y5l=y6l=y2;
- if do_top: filldraw stroke z3e--z4e; fi % upper bar
- if do_bot: filldraw stroke z5e--z6e; fi % lower bar
- penlabels(1,2,3,4,5,6); enddef;
-
-def right_bracket(expr breadth,do_top,do_bot) =
- pickup crisp.nib;
- numeric thickness; thickness=hround breadth;
- pos1(thickness,0); pos2(thickness,0);
- top y1=h; bot y2=1-d; rt x1r=rt x2r=hround(w-2.5u+.5thickness);
- filldraw stroke z1e--z2e; % stem
- pos3(thickness,90); pos4(thickness,90);
- pos5(thickness,90); pos6(thickness,90);
- x3=x5=x1r; lft x4=lft x6=hround(.75u-.5thickness);
- y3r=y4r=y1; y5l=y6l=y2;
- if do_top: filldraw stroke z3e--z4e; fi % upper bar
- if do_bot: filldraw stroke z5e--z6e; fi % lower bar
- penlabels(1,2,3,4,5,6); enddef;
-
-def left_curly(expr min_breadth, max_breadth) =
- pickup fine.nib;
- forsuffixes $=1,1',4,4',7,7': pos$(hround min_breadth,0); endfor
- forsuffixes $=2,3,5,6: pos$(hround max_breadth,0); endfor
- x2=x3=x5=x6; x1=x1'=x7=x7'=w-x4=w-x4';
- lft x4l=hround(1.5u-.5min_breadth); lft x2l=hround(.5w-.5max_breadth);
- top y1=h; bot y7=1-d; .5[y4,y4']=.5[y1,y7]=.5[y2,y6]=.5[y3,y5];
- y1-y2=y3-y4=(y1-y4)/4;
- y1-y1'=y4-y4'=y7'-y7=vround(min_breadth-fine);
- filldraw z1l{3(x2l-x1l),y2-y1}...z2l---z3l...{3(x4l-x3l),y4-y3}z4l
- --z4'l{3(x5l-x4l),y5-y4'}...z5l---z6l...{3(x7l-x6l),y7-y6}z7l
- --z7r--z7'r{3(x6r-x7r),y6-y7'}...z6r---z5r
- ...{3(x4r-x5r),.5[y4,y4']-y5}.5[z4r,z4'r]{3(x3r-x4r),y3-.5[y4,y4']}
- ...z3r---z2r...{3(x1r-x2r),y1'-y2}z1'r--z1r--cycle; % stroke
- penlabels(1,2,3,4,5,6,7); enddef;
-
-def right_curly(expr min_breadth, max_breadth) =
- pickup fine.nib;
- forsuffixes $=1,1',4,4',7,7': pos$(hround min_breadth,0); endfor
- forsuffixes $=2,3,5,6: pos$(hround max_breadth,0); endfor
- x2=x3=x5=x6; x1=x1'=x7=x7'=w-x4=w-x4';
- lft x1l=hround(1.5u-.5min_breadth); lft x2l=hround(.5w-.5max_breadth);
- top y1=h; bot y7=1-d; .5[y4,y4']=.5[y1,y7]=.5[y2,y6]=.5[y3,y5];
- y1-y2=y3-y4=(y1-y4)/4;
- y1-y1'=y4-y4'=y7'-y7=vround(min_breadth-fine);
- filldraw z1r{3(x2r-x1r),y2-y1}...z2r---z3r...{3(x4r-x3r),y4-y3}z4r
- --z4'r{3(x5r-x4r),y5-y4'}...z5r---z6r...{3(x7r-x6r),y7-y6}z7r
- --z7l--z7'l{3(x6l-x7l),y6-y7'}...z6l---z5l
- ...{3(x4l-x5l),.5[y4,y4']-y5}.5[z4l,z4'l]{3(x3l-x4l),y3-.5[y4,y4']}
- ...z3l---z2l...{3(x1l-x2l),y1'-y2}z1'l--z1l--cycle; % stroke
- penlabels(1,2,3,4,5,6,7); enddef;
-
-def left_angle(expr breadth) =
- pickup pencircle scaled breadth;
- x1=x3=good.x(w-u)+eps; lft x2=hround u-eps;
- top y1=h+eps; .5[y1,y3]=y2=good.y .5[-d+eps,h];
- draw z1--z2--z3; % diagonals
- labels(1,2,3); enddef;
-
-def right_angle(expr breadth) =
- pickup pencircle scaled breadth;
- x1=x3=good.x u-eps; rt x2=hround(w-u)+eps;
- top y1=h+eps; .5[y1,y3]=y2=good.y .5[-d+eps,h];
- draw z1--z2--z3; % diagonals
- labels(1,2,3); enddef;
-
-def big_slash(expr breadth) =
- adjust_fit(-letter_fit#,-letter_fit#); pickup pencircle scaled breadth;
- rt x1=hround(w-u); lft x2=hround u; top y1=h+eps; bot y2=1-d-eps;
- draw z1--z2; % diagonal
- labels(1,2); enddef;
-
-def big_blash(expr breadth) =
- adjust_fit(-letter_fit#,-letter_fit#); pickup pencircle scaled breadth;
- lft x1=hround u; rt x2=hround(w-u); top y1=h+eps; bot y2=1-d-eps;
- draw z1--z2; % diagonal
- labels(1,2); enddef;
-
-def big_sqrt =
- adjust_fit(0,-letter_fit#); pickup rule.nib;
- x1=good.x 4/9w; x2=good.x(w+.5); bot y1=-d; bot y2=0;
- draw z1--z2; % diagonal
- pickup crisp.nib; pos3(max(curve,rule_thickness),0);
- x3l=1.5[x2,x1]; y3=.5[y1,y2];
- pos4(rule_thickness,0); x4=x1; bot y4=-d;
- pos5(vair,-45); x5l=good.x(x3l-u); z5l=whatever[z3r,z2];
- z6=z5r+whatever*(z2-z3r)=whatever[z3l,z4l];
- z7=whatever[z1,z2]=z3r+whatever*(z4l-z3l);
- filldraw z5r--z6--z4l--z4--z7--z3r--z5l--cycle; % left diagonal and serif
- penlabels(1,2,3,4,5,6,7); enddef;
-
-def big_hat =
- adjust_fit(0,0);
- pickup crisp.nib; pos2(.6[vair,curve],90); top y2r=h+o; x2=.5w;
- x1=w-x3=good.x -eps; y1=y3=.5[x_height,y2];
- pos1(hair,angle(z2-z1)+90); pos3(hair,angle(z3-z2)+90);
- filldraw stroke z1e--z2e--z3e; % diagonals
- penlabels(1,2,3); enddef;
-
-def big_tilde =
- adjust_fit(0,0); pickup crisp.nib;
- numeric theta; theta=angle(1/6(w-vair),1/4(h-x_height));
- numeric mid_width; mid_width=.4[vair,stem];
- pos1(vair,theta+90); pos2(vair,theta+90);
- pos3(vair,theta+90); pos4(vair,theta+90);
- z2-z1=z4-z3=(mid_width-crisp)*dir theta;
- lft x1r=w-rt x4l=0; top y4r=h;
- bot y1l=vround(bot y1l+min(2/3[x_height,h],y3l-.25vair)-top y1r);
- pair delta; ypart delta=3(y3l-y1l); delta=whatever*dir theta;
- filldraw z1l..controls(z1l+delta)and(z3l-delta)..z3l..z4l
- --z4r..controls(z4r-delta)and(z2r+delta)..z2r..z1r--cycle; % stroke
- penlabels(1,2,3,4); enddef;
-
-def beginarithchar(expr c) = % ensure consistent dimensions for $+$, $-$, etc.
- if monospace: beginchar(c,14u#,27/7u#+math_axis#,27/7u#-math_axis#);
- else: beginchar(c,14u#,6u#+math_axis#,6u#-math_axis#); fi
- italcorr math_axis#*slant-.5u#;
- adjust_fit(0,0); enddef;
-
-newinternal l,r,shrink_fit; % adjustments to spacing
-
-def do_expansion(expr expansion_factor) =
- forsuffixes $=u,jut,cap_jut,beak_jut,apex_corr:
- $:=$.#*expansion_factor*hppp; endfor
-enddef;
-
-def normal_adjust_fit(expr left_adjustment,right_adjustment) =
- numeric charwd_in; charwd_in=charwd;
- l:=-hround(left_adjustment*hppp)-letter_fit;
- interim xoffset:=-l;
- charwd:=charwd+2letter_fit#+left_adjustment+right_adjustment;
- r:=l+hround(charwd*hppp)-shrink_fit;
- w:=r-hround(right_adjustment*hppp)-letter_fit;
- do_expansion(w/(charwd_in*hppp));
- enddef;
-
-def mono_adjust_fit(expr left_adjustment,right_adjustment) =
- numeric charwd_in; charwd_in=charwd;
- numeric expansion_factor;
- mono_charwd#=2letter_fit#
- +expansion_factor*(charwd+left_adjustment+right_adjustment);
- l:=-hround(left_adjustment*expansion_factor*hppp)-letter_fit;
- interim xoffset:=-l;
- r:=l+mono_charwd-shrink_fit;
- w:=r-hround(right_adjustment*expansion_factor*hppp)-letter_fit;
- charwd:=mono_charwd#; charic:=mono_charic#;
- do_expansion(w/(charwd_in*hppp));
- enddef;
-
-extra_endchar:=extra_endchar&"r:=r+shrink_fit;w:=r-l;";
-
-def ignore_math_fit(expr left_adjustment,right_adjustment) = enddef;
-def do_math_fit(expr left_adjustment,right_adjustment) =
- l:=l-hround(left_adjustment*hppp); interim xoffset:=-l;
- charwd:=charwd+left_adjustment+right_adjustment;
- r:=l+hround(charwd*hppp)-shrink_fit;
- charic:=charic-right_adjustment;
- if charic<0: charic:=0; fi enddef;
-def zero_width = charwd:=0; r:=l-shrink_fit enddef;
-def change_width = if not monospace: % change width by $\pm1$
- if r+shrink_fit-l=floor(charwd*hppp): w:=w+1; r:=r+1;
- else: w:=w-1; r:=r-1; fi fi enddef;
-def center_on(expr x) = if not monospace: % change width for symmetric fit
- r:=r+2x-w; w:=2x; fi enddef;
-def padded expr del_sharp =
- charht:=charht+del_sharp; chardp:=chardp+del_sharp enddef;
-
-def font_setup =
- if monospace: let adjust_fit=mono_adjust_fit;
- def mfudged=fudged enddef;
- mono_charic#:=body_height#*slant;
- if mono_charic#<0: mono_charic#:=0; fi
- mono_charwd#:=9u#; define_whole_pixels(mono_charwd);
- else: let adjust_fit=normal_adjust_fit;
- def mfudged= enddef; fi
- if math_fitting: let math_fit=do_math_fit
- else: let math_fit=ignore_math_fit fi;
- define_pixels(u,width_adj,serif_fit,cap_serif_fit,jut,cap_jut,beak,
- bar_height,dish,bracket,beak_jut,stem_corr,vair_corr,apex_corr);
- define_blacker_pixels(notch_cut,cap_notch_cut);
- forsuffixes $=notch_cut,cap_notch_cut: if $<3: $:=3; fi endfor
- define_whole_pixels(letter_fit,fine,crisp,tiny);
- define_whole_vertical_pixels(body_height,asc_height,
- cap_height,fig_height,x_height,comma_depth,desc_depth,serif_drop);
- define_whole_blacker_pixels(thin_join,hair,stem,curve,flare,
- dot_size,cap_hair,cap_stem,cap_curve);
- define_whole_vertical_blacker_pixels(vair,bar,slab,cap_bar,cap_band);
- define_corrected_pixels(o,apex_o);
- forsuffixes $=hair,stem,cap_stem:
- fudged$.#:=fudge*$.#; fudged$:=hround(fudged$.#*hppp+blacker);
- forever: exitif fudged$>.9fudge*$; fudged$:=fudged$+1; endfor endfor
- rule_thickness:=ceiling(rule_thickness#*hppp);
- heavy_rule_thickness:=ceiling(3rule_thickness#*hppp);
- oo:=vround(.5o#*hppp*o_correction)+eps;
- apex_oo:=vround(.5apex_o#*hppp*o_correction)+eps;
- lowres_fix(stem,curve,flare) 1.3;
- lowres_fix(stem,curve) 1.2;
- lowres_fix(cap_stem,cap_curve) 1.2;
- lowres_fix(hair,cap_hair) 1.2;
- lowres_fix(cap_band,cap_bar,bar,slab) 1.2;
- stem':=hround(stem-stem_corr); cap_stem':=hround(cap_stem-stem_corr);
- vair':=vround(vair+vair_corr);
- vstem:=vround .8[vair,stem]; cap_vstem:=vround .8[vair,cap_stem];
- ess:=(ess#/stem#)*stem; cap_ess:=(cap_ess#/cap_stem#)*cap_stem;
- dw:=(curve#-stem#)*hppp; bold:=curve#*hppp+blacker;
- dh#:=.6designsize;
- stem_shift#:=if serifs: 2stem_corr# else: 0 fi;
- more_super:=max(superness,sqrt .77superness);
- hein_super:=max(superness,sqrt .81225258superness); % that's $2^{-.3}$
- clear_pen_memory;
- if fine=0: fine:=1; fi
- forsuffixes $=fine,crisp,tiny:
-%%% fine $ %%%% temporary formatting convention for MFT
- if $>fudged.hair: $:=fudged.hair; fi
- $.breadth:=$;
- pickup if $=0: nullpen else: pencircle scaled $; $:=$-eps fi;
- $.nib:=savepen; breadth_[$.nib]:=$;
- forsuffixes $$=lft,rt,top,bot: shiftdef($.$$,$$ 0); endfor endfor
-%%% @ $ %%%% restore ordinary formatting for $
- min_Vround:=max(fine.breadth,crisp.breadth,tiny.breadth);
- if min_Vround<vround min_Vround: min_Vround:=vround min_Vround; fi
- if flare<vround flare: flare:=vround flare; fi
- forsuffixes $=vair,bar,slab,cap_bar,cap_band,vair',vstem,cap_vstem,bold:
- if $<min_Vround: $:=min_Vround; fi endfor
- pickup pencircle scaled rule_thickness; rule.nib:=savepen;
- math_axis:=good.y(math_axis#*hppp);
- pickup pencircle scaled if hefty:(.6[vair,fudged.hair]) else:fudged.hair fi;
- light_rule.nib:=savepen;
- pickup pencircle xscaled cap_curve yscaled cap_hair rotated 30;
- cal.nib:=savepen;
- pair cal.extension; cal.extension:=(.75cap_curve,0) rotated 30;
- pickup pencircle xscaled cap_curve yscaled cap_hair rotated 70;
- tilted.nib:=savepen;
- pickup pencircle xscaled curve yscaled cap_hair rotated 70;
- med_tilted.nib:=savepen;
- pickup pencircle xscaled cap_stem yscaled cap_hair rotated 30;
- med_cal.nib:=savepen;
- pickup pencircle xscaled stem yscaled cap_hair rotated 30;
- light_cal.nib:=savepen;
- pickup pencircle xscaled(cap_curve+dw) yscaled cap_hair rotated 30;
- heavy_cal.nib:=savepen;
- bot_flourish_line:=-.5u-o;
- pair bend; bend=(.5u,0);
- pair flourish_change; flourish_change=(4u,.2asc_height);
- join_radius:=u;
- currenttransform:=identity slanted slant
- yscaled aspect_ratio scaled granularity;
- if currenttransform=identity: let t_=relax
- else: def t_ = transformed currenttransform enddef fi;
- numeric paren_depth#; .5[body_height#,-paren_depth#]=math_axis#;
- numeric asc_depth#; .5[asc_height#,-asc_depth#]=math_axis#;
- body_depth:=desc_depth+body_height-asc_height;
- shrink_fit:=1+hround(2letter_fit#*hppp)-2letter_fit;
- if not string mode: if mode<=smoke: shrink_fit:=0; fi fi
- enddef;
-
-def shiftdef(suffix $)(expr delta) =
- vardef $ primary x = x+delta enddef enddef;
-
-def makebox(text rule) =
- for y=0,asc_height,body_height,x_height,bar_height,-desc_depth,-body_depth:
- rule((l,y)t_,(r,y)t_); endfor % horizontals
- for x=l,r: rule((x,-body_depth)t_,(x,body_height)t_); endfor % verticals
- for x=u*(1+floor(l/u)) step u until r-1:
- rule((x,-body_depth)t_,(x,body_height)t_); endfor % more verticals
- if charic<>0:
- rule((r+charic*pt,h.o_),(r+charic*pt,.5h.o_)); fi % italic correction
- enddef;
-def maketicks(text rule) =
- for y=0,h.o_,-d.o_:
- rule((l,y),(l+10,y)); rule((r-10,y),(r,y)); endfor % horizontals
- for x=l,r:
- rule((x,10-d.o_),(x,-d.o_)); rule((x,h.o_-10),(x,h.o_)); endfor % verticals
- if charic<>0:
- rule((r+charic*pt,h.o_-10),(r+charic*pt,h.o_)); fi % italic correction
- enddef;
-rulepen:=pensquare;
-
-vardef stroke text t =
- forsuffixes e = l,r: path_.e:=t; endfor
- if cycle path_.l:
- errmessage "Beware: `stroke' isn't intended for cycles"; fi
- path_.l -- reverse path_.r -- cycle enddef;
-
-vardef circ_stroke text t =
- forsuffixes e = l,r: path_.e:=t; endfor
- if cycle path_.l:
- errmessage "Beware: `stroke' isn't intended for cycles"; fi
- path_.l -- reverse path_.r .. cycle enddef;
-
-vardef super_arc.r(suffix $,$$) = % outside of super-ellipse
- pair center,corner;
- if y$=y$r: center=(x$$r,y$r); corner=(x$r,y$$r);
- else: center=(x$r,y$$r); corner=(x$$r,y$r); fi
- z$.r{corner-z$.r}...superness[center,corner]{z$$.r-z$.r}
- ...{z$$.r-corner}z$$.r enddef;
-
-vardef super_arc.l(suffix $,$$) = % inside of super-ellipse
- pair center,corner;
- if y$=y$r: center=(x$$l,y$l); corner=(x$l,y$$l);
- else: center=(x$l,y$$l); corner=(x$$l,y$l); fi
- z$l{corner-z$l}...superness[center,corner]{z$$l-z$l}
- ...{z$$l-corner}z$$l enddef;
-
-vardef pulled_super_arc.r(suffix $,$$)(expr superpull) =
- pair center,corner;
- if y$=y$r: center=(x$$r,y$r); corner=(x$r,y$$r);
- else: center=(x$r,y$$r); corner=(x$$r,y$r); fi
- z$r{corner-z$r}...superness[center,corner]{z$$r-z$r}
- ...{z$$r-corner}z$$r enddef;
-
-vardef pulled_super_arc.l(suffix $,$$)(expr superpull) =
- pair center,corner,outer_point;
- if y$=y$r: center=(x$$l,y$l); corner=(x$l,y$$l);
- outer_point=superness[(x$$r,y$r),(x$r,y$$r)];
- else: center=(x$l,y$$l); corner=(x$$l,y$l);
- outer_point=superness[(x$r,y$$r),(x$$r,y$r)]; fi
- z$l{corner-z$l}
- ...superpull[superness[center,corner],outer_point]{z$$l-z$l}
- ...{z$$l-corner}z$$l enddef;
-
-vardef pulled_arc@#(suffix $,$$) =
- pulled_super_arc@#($,$$)(superpull) enddef;
-
-vardef serif_arc(suffix $,$$) =
- z${x$$-x$,0}...(.75[x$,x$$],.25[y$,y$$]){z$$-z$}...{0,y$$-y$}z$$ enddef;
-
-vardef penpos@#(expr b,d) =
- if known b: if b<=0: errmessage "bad penpos"; fi fi
- (x@#r-x@#l,y@#r-y@#l)=(b,0) rotated d;
- x@#=.5(x@#l+x@#r); y@#=.5(y@#l+y@#r) enddef;
-
-newinternal currentbreadth;
-vardef pos@#(expr b,d) =
- if known b: if b<=currentbreadth: errmessage "bad pos"; fi fi
- (x@#r-x@#l,y@#r-y@#l)=(b-currentbreadth,0) rotated d;
- x@#=.5(x@#l+x@#r); y@#=.5(y@#l+y@#r) enddef;
-def numeric_pickup_ primary q =
- currentpen:=pen_[q];
- pen_lft:=pen_lft_[q]; pen_rt:=pen_rt_[q];
- pen_top:=pen_top_[q]; pen_bot:=pen_bot_[q];
- currentpen_path:=pen_path_[q];
- if known breadth_[q]: currentbreadth:=breadth_[q]; fi enddef;
-
-vardef ic# = charic enddef;
-vardef h# = charht enddef;
-vardef w# = charwd enddef;
-vardef d# = chardp enddef;
-
-let {{=begingroup; let }}=endgroup;
-def .... = .. tension atleast .9 .. enddef;
-def less_tense = save ...; let ...=.... enddef;
-def ?? = hide(showvariable x,y) enddef;
-
-let semi_ =;; let colon_ = :; let endchar_ = endchar;
-def iff expr b = if b:let next_=use_it else:let next_=lose_it fi; next_ enddef;
-def use_it = let : = restore_colon; enddef;
-def restore_colon = let : = colon_; enddef;
-def lose_it = let endchar=fi; inner cmchar; let ;=fix_ semi_ if false enddef;
-def fix_=let ;=semi_; let endchar=endchar_; outer cmchar; enddef;
-def always_iff = let : = endgroup; killboolean enddef;
-def killboolean text t = use_it enddef;
-outer cmchar;
-% feta-din.mf
+
+save serif_thick;
+serif_thick# = 1.1 stafflinethickness#;
+define_blacker_pixels (serif_thick);
+med_thick = round (1.5 stafflinethickness);
+bottom_blot = 1.3 serif_thick;
+
+
+
+%
+% Couldn't find many z examples. This one is losely inspired
+% by a sfz from Mueller etuden fuer Horn (Edition Hofmeister.)
+%
+
+code := 121;
+fet_beginchar ("dynamic z", "z", "dynz");
+ set_char_box (0, .98 ex#, 0, 0.9 ex#);
+
+ save thin_thick, top_narrow, over_shoot;
+ save bot_thick;
+
+ thin_thick = serif_thick;
+ top_narrow = thin_thick;
+ top_overshoot = .8 serif_thick;
+ top_thick = .3 h ;
+ bot_thick = .2 ex;
+ bot_overshoot = serif_thick;
+
+ x0 = + top_narrow;
+ y0 = .9 [y1r, y1l];
+ y1l = .72 h;
+ x1r = .34 ex;
+ x2 = .66 ex;
+ y2 = y1r - top_overshoot;
+
+
+ y3 = h - .7 thin_thick;
+ x3 = w - .6 top_narrow - .5 thin_thick;
+
+ y4 = .5 thin_thick;
+ x4 = .5 thin_thick;
+
+ x5l =.25 ex;
+ y5l = .4 bot_overshoot;
+ y6l = -bot_overshoot;
+ x6 = w - 3 top_narrow;
+ x7 = w;
+ y7 = .82 [y8r, y6r];
+ x8r = w - .35 top_narrow;
+ x9 = w;
+ y8r = .45 h;
+
+ penpos1(top_thick, 80);
+ penpos3 (thin_thick, angle(z3-z4) + 90);
+ penpos4(thin_thick, angle (z3-z4) + 90);
+ penpos5(bot_thick, 70);
+ penpos6(3/2 bot_thick, 70);
+ penpos8 (thin_thick, 20);
+
+ penlabels(range 0 thru 9);
+
+ save p,q,r;
+ path p,q,r;
+
+ p := z0{down}
+ .. z1l{dir(10)}
+
+ .. simple_serif (z3l, z3r, 90) .. z2{left} .. z1r{left}
+ .. tension 1.2
+ .. cycle;
+ q := z3l -- z3r -- z4r -- z4l -- cycle;
+ r := simple_serif (z4r, z4l, 90) .. z5l{right}
+ .. z6l{right}
+ .. z7{up}
+ .. simple_serif (z8r, z8l, 90)
+ .. z6r{left} .. z5r{left} .. cycle;
+ pickup pencircle scaled 1;
+% draw p ; draw q ; draw r ;
+
+ fill p; fill q; fill r;
+
+fet_endchar;
+
+
+% forte f, grabbed from Ed Breitkopf Mozart horn concerto 3.
+%
+% NOTES:
+%
+% * the bulbs are open.
+%
+% * blotting around the serif
%
-% from cmbxti10.mf
%
-% feta dynamics
-% too easy now to use this copy from cm, but we might want to do ourselves
%
-% 16pt staff: \font\dynfont=feta-din10 scaled \magstep1
-% 20pt staff: \font\dynfont=feta-din10 scaled \magstep2
+% TODO: insert blots around the serif
+%
+%
+%
+slant_angle = 20;
+
+
+code := 101;
+fet_beginchar("dynamic f", "f", "dynf");
+ set_char_box (0, 1.1 ex#, descender#, ex# + ascender#);
+
+ save left_angle, right_angle;
+ save serif_length, serif_excentricity;
+ save f_thick;
+ save bulb_thick, bulb_diam, fill_up;
+ save p;
+ path p;
+ bulb_diam = 7.5 / 40 ex;
+ bulb_thick = 8.5/40 ex;
+ fill_up = 1.5 serif_thick;
+ save slant;
+ left_angle = slant_angle - 6;
+ right_angle = slant_angle - 3;
+ f_thick = 7/16 ex;
+ serif_length = 0.96 ex;
+ serif_excentricity = 0.01 ex;
+
+
+ % z1 is the "base point"
+ z1 = (0.2 ex, - serif_thick);
+ y2 = y1 + ex;
+ z2l = z1 + whatever*dir (90 - left_angle);
+ penpos2 (f_thick, 0);
+
+ y3l = y1 + ex + ascender;
+ x3l = x1 + 1 ex;
+ penpos3 (med_thick, -90);
+ penpos4 (bulb_thick, -20);
+ z3r = whatever [z4r,z4l];
+
+ x4l - x3l = 1/10 ex;
+
+ penpos5(bulb_thick, -45);
+ x5r = 0.1 [x4l, x4r];
+ y5l = y4l - bulb_diam;
+
+ z6 = z2r + whatever* dir (90 - right_angle);
+ y6 = y1 + 3/8 ex;
+
+ x7 = x1 - 1/4 ex;
+ y7r = y1 -descender;
+ penpos7(med_thick, -90);
+
+ penpos8 (bulb_thick, 160);
+ x8l = x7l - 1/10 ex;
+ z7l = whatever [z8r,z8l];
+
+ penpos9 (bulb_thick, 135);
+ x9r = 0.1 [x8l, x8r];
+ y9l = y8l + bulb_diam;
+ labels(1,6,9);
+ penlabels(2, 3,4,5, 7, 8,9);
+
+ p := z1 --- z2l
+ .. tension 1.1
+ .. z3l{right} .. z4r{down}
+ .. z5r{left} .. z5l{up}
+ .. tension 0.8
+ .. z4l{up} .. z3r{left}
+ .. tension 1.1
+ .. z2r --- z6 .. tension 1.25 .. z7r{left}
+ .. z8r{up} .. z9r{right} .. z9l{down} .. tension 0.8
+ .. z8l{down} .. z7l{right} .. cycle;
+ pickup pencircle scaled 1;
+ fill p;
+% draw p;
+
+%
+% todo round for pixels...
+%
+ pickup pencircle scaled round (1.4 serif_thick);
+ (rt x13) - (lft x14) = serif_length;
+ y13 = y14;
+ y14 = y2;
+ 0.5 [x13, x14] = x2 + serif_excentricity;
+
+ draw z13 .. z14;
+
+ penlabels(16);
+ labels(13,14,15);
+fet_endchar;
+
%
-% Computer Modern Bold Extended Text Italic 10 point
+% Notes:
+%
+% - The S is trapezoidal (i.e. narrower at the top)
%
-% font_identifier:="CMBXTI"; font_size 10pt#;
+% - The white space is differently shaped at the top (the bulb's inner
+% curve is filled up.)
%
+% - less heavy than the f and p signs.
+%
+
+
+code := 114;
+fet_beginchar("dynamic s", "s", "dyns");
+ set_char_box (0, 17/24 ex#, 0, 1 ex#);
+
+ save left_angle, right_angle;
+ save s_thick, s_thin;
+ save base_point;
+ save bulb_diam, bulb_len;
+ save over_shoot;
+ over_shoot = 0; % .2 serif_thick;
+ pair base_point;
+
+ bulb_diam = 11/70 ex;
+ bulb_len = 1.0 bulb_diam;
+ left_angle = slant_angle - 2;
+ right_angle = slant_angle -11;
+
+ s_thick = 16/70 ex;
+ s_thin = serif_thick;
+
+ base_point = (0,0);
+
+ penpos1 (bulb_diam, -45);
+ z1 = 0.35 [z2l,z2r] + bulb_len * dir(45);
+ penpos2 (bulb_diam, -25);
+ y2l = 0.845 [y7r, y3r];
+
+ z2l = base_point + whatever * dir (90-left_angle);
+ penpos3 (s_thin, 100);
+ x3l = 1/2 w ;
+ y3l = ypart base_point - over_shoot ;
+
+ penpos4 (s_thick, 25);
+ ypart z4l = ypart z1r;
+ z4r = base_point + (w,0) + whatever *dir(90-right_angle);
+ penpos5 (s_thick, 40);
+ z5 = z3l + whatever * dir (90-right_angle);
+ y5 = ypart (0.48 [z7r, z3r]);
+
+
+ penpos6 (s_thick, 25);
+ z6l = base_point + whatever *dir(90-left_angle);
+ y6r = y9l;
+
+ penpos7 (.9 s_thin, 110);
+ z7l = 0.45 [z6r, z8l] + whatever * dir (90-left_angle);
+ y7r = h + over_shoot;
+
+ penpos8 (.9 bulb_diam, -25);
+ z8 = .6 [z4l,z4r] + whatever *dir(90-right_angle);
+
+ y8r = ypart (0.23 [z7r, z3r]);
+
+ penpos9 (.9 bulb_diam, -45);
+ z9 = .4 [z8r,z8l] + .9 bulb_len * dir (-135);
+
+ penlabels(1,2,3,4,5,6,7,8,9);
+
+ labels(12);
+ save p;
+ path p;
+ p := z2l{down} .. z3l{right} .. z4r{up}
+ .. z5r
+ .. z6r{up}
+ .. z7l{right}
+ %.. z8l{down}
+ ..z9l{down}
+ .. z9r{right} .. z7r{left}
+ .. z6l{down}
+ .. z5l
+ .. z4l{down}
+ .. z3r{left}
+ .. z2r{up} .. z1r{up}
+ .. z1l{left} .. cycle;
+ pickup pencircle scaled 1;
+ fill p;
+fet_endchar;
-input cmbase;
+
+%
+% piano p, grabbed from Ed Breitkopf Mozart horn concerto 3.
+%
+% Notes:
+%
+% * there is no dishing in the serif (but we do it anyway)
+%
+% * The cheek is a little fatter than the stem
+%
+% * The slant is extreme: 20 degrees
+%
+% * the twiddle (what'sitcalled) is a slightly darker than the serif
+%
+% * The hole in the cheek has a straight right side.
+%
+% * Corners are filled up.
%
-% We bluntly multiply by font-size / 10pt#,
-% before we did plain scaling anyway.
%
-M:=design_size/10;
+save slant;
+slant := ypart (dir(slant_angle));
+currenttransform := currenttransform slanted slant;
+
+code := 111;
+
+
+fet_beginchar("dynamic p", "p", "dynp")
+ %
+ % TODO w really is 13/12 ex
+ % but should do kerning
+ set_char_box (0, 15/12 ex#, descender#, 1.0 ex#);
+
+ save twiddle_thick, stem_thick, cheek_thick;
+ save updir, fill_up;
+ save serif, dishing_angle, p, q;
+ save cheek_medium, left_serif_protude, right_serif_protude;
+ save lower_overshoot;
+
+ pair updir;
+ path serif,q,p;
+ save my_slant_angle;
+ my_slant_angle = 0;
+ updir := dir (90 - my_slant_angle );
+ twiddle_thick = med_thick;
+ cheek_medium = 1/6 ex;
+
+ dishing_angle = 5;
+ fill_up := 1.5 serif_thick;
+ straigh_len = 0.5 ex;
+ lower_overshoot := .3 serif_thick;
+
+ stem_thick = 2/6 ex;
+ cheek_thick = 13/32 ex;
+ cheek_width = 0.72 ex;
+ left_serif_protude = 18/60 ex;
+ right_serif_protude= 15/60 ex;
+
+ penpos1 (twiddle_thick, -slant - 5);
+ penpos2 (cheek_medium, 90 - slant );
+ penpos3 (cheek_medium, 90 - slant);
+
+ x4r - x4l = cheek_thick;
+ penpos4 (whatever, 0);
+ penpos5 (whatever, -38);
+ penpos6 (stem_thick, 0);
+ penpos17 (straigh_len, 90 -slant);
+ whatever [z17l, z17r] = z4l;
+ y17 = 7/16 ex;
+
+ x6l = 0;
+ y6l = - descender + serif_thick/2;
+ z1l = z6l - whatever *dir (90 - my_slant_angle + 20 );
+ y1r = 0.5 ex;
+ y2r = ex;
+ z7 = whatever * updir + z6l;
+ y7 = 43/60 ex;
+
+ z2l = whatever *updir + 0.3 [z7, z1r];
+ y8 = ypart (0.9 [z7, z2l]);
+ z8 = 2/3 [z6l, z6r] + whatever * updir;
+
+
+ y3r = ex;
+ z3l = 0.58 [(stem_thick, -descender), (stem_thick + cheek_width - cheek_thick, -descender)] + whatever * updir;
+ y4r = .38 ex;
+ z4r = whatever*updir + (stem_thick+ cheek_width, -descender);
+
+ z5l = whatever*updir + z3l;
+ y5r = -lower_overshoot;
+ y5l = y5r + cheek_medium * ypart dir(55);
+
+ z9 = z6r + whatever*updir;
+ y9 = .2 [y5l, y5r];
+
+ p :=
+ z2r{right} .. {dir( -60)}z8 & z8{dir 35} .. z3r{right}
+ .. z4r{-updir}
+ .. tension 1.1
+ .. z5r{left} .. z9
+ & z9 -- z6r -- z6l -- z7{updir}
+ .. z2l{left} .. tension 1.2 ..
+ % z1r & z1r -- z1l & z1l
+ simple_serif (z1r, z1l, -90)
+ .. cycle;
+
+
+ save blot_t, corner_t;
+
+ blot_t := 0.13;
+ corner_t := xpart (p intersectiontimes z9);
+
+ z19 = point corner_t - 2 blot_t of p;
+ z20 = point corner_t + blot_t of p;
+ labels(19,20);
+
+ save blot_path;
+ path blot_path;
+
+ pickup pencircle scaled 1;
+
+ fill z19{up} .. {right}z20{updir} .. z19{-(direction corner_t - 2 blot_t of p)} .. cycle;
+
+ pickup pencircle scaled 1;
+ fill p;
+
+ y12 = 0.5 ex;
+ z12 = z6r + whatever*updir;
+
+ save inner_tension;
+ inner_tension = 1.4;
+ q :=
+ z17l .. tension 1.5 .. z17r .. z3l{left}.. tension 1.05 .. z12{-updir} .. tension 1.05 .. z5l{right} .. cycle;
+ unfill q;
+ penlabels (1, 2, 3, 4, 5, 6, 17);
+
+
+
+
+ pickup pencircle scaled serif_thick;
+ lft x11 = -left_serif_protude;
+ rt x10 = stem_thick+ right_serif_protude;
+ bot y10 = bot y11 = -descender;
+
+
+ serif := simple_serif (z10, z11, dishing_angle);
+ draw serif;
+
+ labels(7,8, 9, 10, 11,12);
+
+
+ z13 = point 0.05 of serif;
+ z14 = point 0.85 of serif;
+ z15 = z6l + updir * fill_up +( serif_thick/2, 0);
+ z16 = z6r + updir * 1.2fill_up- +( serif_thick/2, 0);
+ labels(13,14, 15, 16);
+% pickup pencircle scaled 1;
+ draw z13{direction 0.05 of serif} .. z16{updir};
+ draw z14{-(direction 0.85 of serif)} .. z15{updir};
+fet_endchar;
-u#:=M*21.2/36pt#; % unit width
-width_adj#:=M*11/36pt#; % width adjustment for certain characters
-serif_fit#:=M*0pt#; % extra sidebar near lowercase serifs
-cap_serif_fit#:=M*7/36pt#; % extra sidebar near uppercase serifs
-letter_fit#:=M*11/36pt#; % extra space added to all sidebars
+%
+% NOTES:
+%
+% * right stem is fatter and more straight than the left 2 two stems.
+%
+% * The twiddle at the left is similar to the p twiddle
+%
+% * The bottoms of the stems are blotted.
+%
-body_height#:=M*270/36pt#; % height of tallest characters
-asc_height#:=M*250/36pt#; % height of lowercase ascenders
-cap_height#:=M*247/36pt#; % height of caps
-fig_height#:=M*232/36pt#; % height of numerals
-x_height#:=M*160/36pt#; % height of lowercase without ascenders
-math_axis#:=M*90/36pt#; % axis of symmetry for math symbols
-bar_height#:=M*85/36pt#; % height of crossbar in lowercase e
-comma_depth#:=M*70/36pt#; % depth of comma below baseline
-desc_depth#:=M*70/36pt#; % depth of lowercase descenders
+%
+%
+% This is cut & paste programming. Somehow 3 i shapes in two chars (p and m)
+% Doesn't seem worth the trouble of writing a macro.
+%
+code := 108;
+
+fet_beginchar("dynamic m", "m", "dynm");
+ set_char_box (0, 1.5 ex#, 0, 1.0 ex#);
+
+ % should share code with p for twiddle.
+
+ save i_thick, i_angle, i_twiddle_thick,
+ i_twiddle_start_angle, i_twiddle_start_y,
+ i_left_space;
+ save p;
+ save idir, center, right_ending;
+ save overshoot;
+ pair center, idir, right_ending;
+
+ path p;
+
+ overshoot = .25 serif_thick;
+ i_thick := 21 / 80 ex;
+ i_angle := 0;
+ idir := dir(90- i_angle);
+
+ i_left_space = 16/80 ex;
+ i_twiddle_thick = 1.2 serif_thick;
+ i_twiddle_start_y = 8/16 ex;
+ i_twiddle_start_angle = 0;
+ center =(0,0);
+
+ penpos1 (i_twiddle_thick, -i_twiddle_start_angle);
+ y1 = i_twiddle_start_y;
+ z1r = center - (i_left_space,0) + whatever * idir;
+
+ y3 = 0.5 bottom_blot + ypart center;
+ penpos3(i_thick, 0);
+ z3l = center + whatever * idir;
+ y4 = ypart center;
+ penpos4 (i_thick - bottom_blot, 0);
+ z4 - z3 = whatever * idir;
+
+ y2l = 1 ex + overshoot;
+ z2l = .08 [z3l, z3r] + whatever * idir;
+ z2r = 5/8 [z1r, z3l] + whatever * idir;
+ y2r = y5l + 1/9 ex;
+ z2 = 1/2 [z2l, z2r] ;
+ penpos5(i_thick, 0);
+ z5 = z4 + whatever * idir;
+ y5 = 55 / 80 ex;
+
+ p := simple_serif (z1l, z1r, 90) .. tension 1.2 .. z2r{right} .. z5l --- z3l
+ .. z4l --- z4r .. z3r --- z5r .. tension 1.2 .. z2l{left} .. cycle;
+
+ fill p;
+ right_ending := z5r;
+ penlabels (1, 2, 3 , 4,5);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ clearxy;
+
+ i_angle := -3.2;
+ idir := dir(90 - i_angle);
+ i_left_space := 14/80 ex;
+
+
+ z1r = right_ending;
+ z5l = right_ending + (i_left_space,0);
+ penpos1(serif_thick, - i_twiddle_start_angle);
+
+ y3 = .5 bottom_blot + ypart center;
+ penpos3(i_thick, 0);
+ z3l = z5l + whatever * idir;
+ y4 = ypart center;
+ penpos4(i_thick - bottom_blot, 0);
+ z4 - z3 = whatever * idir;
+
+ y2l = 1 ex+ overshoot;
+
+ z2l = .08 [z3l, z3r] + whatever * idir;
+ z2r = 5/8 [z1r, z3l] + whatever * idir;
+ y2r = y5l + 1/9 ex;
+ z2 = 1/2 [z2l, z2r] ;
+ penpos5(i_thick, 0);
+
+ p := simple_serif (z1l, z1r, 90) .. tension 1.05 .. z2r{right} .. z5l --- z3l
+ .. z4l --- z4r .. z3r --- z5r .. tension 1.2 .. z2l{left} .. cycle;
+
+ fill p;
+ right_ending := z5r;
+ penlabels (1, 2, 3 , 4,5);
+ clearxy;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ i_thick := 23 / 80 ex;
+ i_angle := -6;
+ i_left_space := 14/80 ex;
+
+
+ idir := dir(90- i_angle);
+ z1r = right_ending;
+ z5l = right_ending + (i_left_space,0);
+ penpos5 (whatever, 10);
+ penpos3 (whatever, 20);
+
+ y7 = 0;
+ penpos7(i_thick ,0);
+
+ penpos1(serif_thick, - i_twiddle_start_angle);
+
+ z3l = z7l + whatever * idir;
+ z3r = z7r + whatever * idir;
+ z5l = z7l + whatever * idir;
+ z5r = z7r + whatever * idir;
+
+ save end_twiddle_angle;
+ end_twiddle_angle := 35;
+ penpos6(serif_thick, - end_twiddle_angle);
+ y6l = 23/80 ex + ypart center;
+ z6l = 1.6 [z3l, z3r] + whatever * idir;
+
+
+
+ y3l = 1/8 ex + ypart center;
+ y2l = 1 ex+ overshoot;
+ z2l = .08 [z3l, z3r] + whatever * idir;
+ z2r = 5/8 [z1r, z3l] + whatever * idir;
+ y2r = y5l + 1/9 ex;
+ z2 = 1/2 [z2l, z2r] ;
+ z8 = z7 - (0, 1 overshoot);
+
+ p := simple_serif (z1l, z1r, 90) .. tension 1.05
+ .. z2r{right} .. z5l --- z3l
+ .. z8{right}
+ .. simple_serif(z6r, z6l, 90)
+ .. tension 0.85
+ .. z3r --- z5r
+ .. tension 1.2
+ .. z2l{left} .. cycle;
+
+% pickup pencircle scaled 1;
+% draw p;
+ fill p;
+ right_ending := z5r;
+ penlabels (1, 2, 3 , 4,5,6,7, 8);
+ clearxy;
-crisp#:=M*13/36pt#; % diameter of serif corners
-tiny#:=M*13/36pt#; % diameter of rounded corners
-fine#:=M*10/36pt#; % diameter of sharply rounded corners
-thin_join#:=M*10/36pt#; % width of extrafine details
-hair#:=M*20/36pt#; % lowercase hairline breadth
-stem#:=M*38/36pt#; % lowercase stem breadth
-curve#:=M*43/36pt#; % lowercase curve breadth
-ess#:=M*35/36pt#; % breadth in middle of lowercase s
-flare#:=M*42/36pt#; % diameter of bulbs or breadth of terminals
-dot_size#:=M*53/36pt#; % diameter of dots
-cap_hair#:=M*22/36pt#; % uppercase hairline breadth
-cap_stem#:=M*49/36pt#; % uppercase stem breadth
-cap_curve#:=M*52/36pt#; % uppercase curve breadth
-cap_ess#:=M*50/36pt#; % breadth in middle of uppercase s
-rule_thickness#:=M*.6pt#; % thickness of lines in math symbols
+fet_endchar;
-dish#:=M*1/36pt#; % amount erased at top or bottom of serifs
-bracket#:=M*10/36pt#; % vertical distance from serif base to tangent
-jut#:=M*27/36pt#; % protrusion of lowercase serifs
-cap_jut#:=M*39/36pt#; % protrusion of uppercase serifs
-beak_jut#:=M*10/36pt#; % horizontal protrusion of beak serifs
-beak#:=M*70/36pt#; % vertical protrusion of beak serifs
-vair#:=M*13/36pt#; % vertical diameter of hairlines
-notch_cut#:=M*10pt#; % maximum breadth above or below notches
-bar#:=M*17/36pt#; % lowercase bar thickness
-slab#:=M*17/36pt#; % serif and arm thickness
-cap_bar#:=M*17/36pt#; % uppercase bar thickness
-cap_band#:=M*17/36pt#; % uppercase thickness above/below lobes
-cap_notch_cut#:=M*10pt#; % max breadth above/below uppercase notches
-serif_drop#:=M*3/36pt#; % vertical drop of sloped serifs
-stem_corr#:=M*2/36pt#; % for small refinements of stem breadth
-vair_corr#:=M*1.5/36pt#; % for small refinements of hairline height
-apex_corr#:=M*0pt#; % extra width at diagonal junctions
-o#:=M*6/36pt#; % amount of overshoot for curves
-apex_o#:=M*6/36pt#; % amount of overshoot for diagonal junctions
+code := 113;
-slant:=.25; % tilt ratio $(\Delta x/\Delta y)$
-fudge:=1; % factor applied to weights of heavy characters
-math_spread:=.5; % extra openness of math symbols
-superness:=8/11; % parameter for superellipses
-superpull:=1/8; % extra openness inside bowls
-beak_darkness:=.4; % fraction of triangle inside beak serifs
-ligs:=2; % level of ligatures to be included
-square_dots:=false; % should dots be square?
-hefty:=false; % should we try hard not to be overweight?
-serifs:=true; % should serifs and bulbs be attached?
-monospace:=false; % should all characters have the same width?
-variant_g:=true; % should an italic-style g be used?
-low_asterisk:=false; % should the asterisk be centered at the axis?
-math_fitting:=false; % should math-mode spacing be used?
+currenttransform := identity slanted ypart(dir(15));
+fet_beginchar("dynamic r", "r", "dynr");
+ set_char_box (0, .75 ex#, 0, 1ex#);
+ save base_point, stem_thick, bulb_diam;
+ save twiddle_thick, attach_len, overshoot, taille;
+ stem_thick =.26 ex;
+ bulb_diam = .30 ex;
+ twiddle_thick= 1.1 serif_thick;
+ overshoot = .5 serif_thick;
+ taille = -0.3 serif_thick;
-% "f" obviously has a _lot_ bigger slant than "p" (see Wanske p.239)
-% however; perhaps we need two f symbols:
-% - a super-slanted one used in "f" "mf" "sfz" "sf", and
-% - a more normal-slanted in "ff" "fff" "fp" "fp" (see Wanske p.241)
-%
-% looking at professionally typeset music reveals that typesetters
-% are somewhat unsure about slanting in "mf", "fp", "sfz"
+ pair base_point;
+ base_point = (0,0);
-% "f" and "p" (in any combination) are a lot (factor two) fatter than
-% "s", "m", and "z". sometimes the "m" and "z" are a bit fatter than
-% "s".
+ x1l = 0;
+ y1l = .5 bottom_blot;
-slant:=.68; % tilt ratio $(\Delta x/\Delta y)$
-crisp#:=M*19/36pt#; % diameter of serif corners
-tiny#:=M*19/36pt#; % diameter of rounded corners
-fine#:=M*20/36pt#; % diameter of sharply rounded corners
-thin_join#:=M*20/36pt#; % width of extrafine details
-stem#:=M*72/36pt#; % lowercase stem breadth
-flare#:=M*52/36pt#; % diameter of bulbs or breadth of terminals
+ penpos10(stem_thick - bottom_blot, 0);
+ y10 = 0;
+ x10 = x1;
-mode_setup;
-font_setup;
+ penpos1 (stem_thick, 0);
+ y2l - y1l = 36/47 ex;
+ x2l = x1l;
+ penpos2 (stem_thick, 0);
-num=-1;
-xbar:=M*u;
+ y3 = .77 ex;
+ x3r = x2l - .2 ex;
+ penpos3(twiddle_thick, -20);
-save fcode;
+ x9 = 0.15 [x1r, x1l] ;
+ y9 = y4l - .12 ex ;
-fcode = 101;
-input feta-ital-f;
+ x4l = -0.1 [x1l, x1r];
+ y4l = ex + overshoot;
-bar#:=M*17/36pt#; % lowercase bar thickness
-slant:=.38; % tilt ratio $(\Delta x/\Delta y)$
-stem#:=M*58/36pt#; % lowercase stem breadth
-font_setup;
-xbar:=M*.4u;
+ x4r = 0.62 [x3r, x2l];
+ y4r = 0.5 [y4l, y2l];
-save fcode;
+ penpos5(whatever, -74);
+ y5l - y5r = bulb_diam;
+ y5l = ex + overshoot;
+ x5 = x2r + attach_len;
+ attach_len + bulb_diam/2 + stem_thick = w;
-fcode = 102;
+ z6 = z5;
+ penpos6 (bulb_diam, 0);
+% z7 = z6l + taille* dir(180);
-input feta-ital-f;
-stem#:=M*54/36pt#; % lowercase stem breadth
-hair#:=M*12/36pt#; % lowercase hairline breadth
-vair#:=M*7/36pt#; % vertical diameter of hairlines
+ save alpha;
+ alpha := 35;
+ z7 = z6 + .4 * bulb_diam * dir (-90 -alpha);
+ z8 = 9/10 [z1r, z2r];
-font_setup;
-input feta-ital-p;
+ save p;
+ path p;
+
+ p := z1r .. z10r --- z10l .. z1l
+ --- z2l
+ .. z4r{left}
+ .. tension 1.2
+ .. {down}simple_serif(z3r, z3l,-90){up}
+ .. tension 0.95
+ .. z4l
+ .. z9
+ & z9{curl 0}
+ .. z5l
+ .. z6r{dir(-80)}
+ .. z5r{left}
+ .. z7
+ .. z6l
+ .. tension 1.2
+ .. z8 --- cycle;
+ pickup pencircle scaled 1;
+ draw p;
+ fill p;
+ penlabels (1,2,3, 4,5,6,7,8, 9, 10);
+fet_endchar ;
+
+
+
+
+
+%%% KERNING
+
+ligtable "m" : "p" kern 0.2 ex#, "f" kern -0.1 ex#;
+ligtable "f" : "f" kern -0.13 ex#;
+ligtable "r" : "f" kern 0.1 ex#;
-slant:=.28; % tilt ratio $(\Delta x/\Delta y)$
-stem#:=M*32/36pt#; % lowercase stem breadth
-ess#:=M*28/36pt#; % breadth in middle of lowercase s
-hair#:=M*14/36pt#; % lowercase hairline breadth
-vair#:=M*9/36pt#; % vertical diameter of hairlines
-flare#:=M*36/36pt#; % diameter of bulbs or breadth of terminals
-crisp#:=M*13/36pt#; % diameter of serif corners
-tiny#:=M*13/36pt#; % diameter of rounded corners
-fine#:=M*10/36pt#; % diameter of sharply rounded corners
-thin_join#:=M*10/36pt#; % width of extrafine details
-curve#:=M*43/36pt#; % lowercase curve breadth
-% Chester, Breitkopf suggest smaller sizes of these other chars,
-% using the x-height as reference point.
-x_height#:=M*135/36pt#; % height of lowercase without ascenders
-font_setup;
-input feta-ital-m;
-input feta-ital-r;
-input feta-ital-s;
-input feta-ital-z;
-font_slant slant;
-font_x_height x_height#;
-font_quad 18u#; % to have a working em unit
-%%fet_endfont("feta-din");
+
+
+%% notes from old dyn code.
+
+% "f" obviously has a _lot_ bigger slant than "p" (see Wanske p.239)
+% however; perhaps we need two f symbols:
+% - a super-slanted one used in "f" "mf" "sfz" "sf", and
+% - a more normal-slanted in "ff" "fff" "fp" "fp" (see Wanske p.241)
+%
+% looking at professionally typeset music reveals that typesetters
+% are somewhat unsure about slanting in "mf", "fp", "sfz"
+
+% "f" and "p" (in any combination) are a lot (factor two) fatter than
+% "s", "m", and "z". sometimes the "m" and "z" are a bit fatter than
+% "s".
+
+
+% Chester, Breitkopf suggest smaller sizes of these other chars,
+% using the x-height as reference point.
input feta-autometric;
input feta-macros;
-input feta-params;
+% input feta-params;
+mode_setup;
+
+ex# := (design_size / 2.4)* pt#;
+descender# := 0.5 ex#;
+ascender# := 0.72 ex#;
+staffspace# := 1.75 / 2.0 * ex#;
+stafflinethickness# := staffspace# / 10;
+
+define_pixels (staffspace, stafflinethickness, ex, descender, ascender);
fet_beginfont("feta-din", design_size);
-%mode_setup;
input feta-din-code;
-fet_endfont("feta-nummer");
+fet_endfont("feta-din");
end.
%
% source file of the Feta (not the Font-En-Tja) music font
%
-% (c) 1997--2001 Jan Nieuwenhuizen <janneke@gnu.org>
+% (c) 1997--2002 Jan Nieuwenhuizen <janneke@gnu.org>
+
+%
+% These numbers were taken from a part that that the EJE violas played
+% 1997 -- Probably Mendelssohn's ouverture Heimkehr aus der Fremde.
+%
+
+%
+% TODO all the invocation of flare_path are weird --
+% the horizontal tangents should be more at the center of the
+% glyph.
+%
fet_begingroup("number")
define_pixels(foot_top,foot_width);
define_pixels(kuulleke);
+%
+% Yet Another Bulb Routine with smooth inside curve.
+%
+% alpha = start direction.
+% beta = which side to turn to.
+% flare = diameter of the bulb
+% line = diameter of line attachment
+% direction = is ink on left or right side (1 or -1)
+%
+
+%
+% move_away_to = amount left (for 2)
+% turn_to = amount down (for 2 )
+%
+def number_flare_path(expr pos,alpha,beta,line,flare,
+
+ move_away_to,
+ turn_to, taille, taille_ratio,
+ direction) =
+ begingroup;
+ clearxy;
+
+% z5 = z2 + 0.43* flare *dir (alpha - 1.5 beta);
+
+ z4 = (0.75 - taille) [z2r, z2l] + whatever* dir (alpha - beta) ;
+ z4 = (taille_ratio * taille) [z3l, z3r] + whatever* dir(alpha);
+ penpos1(line,180+beta+alpha);
+ z1r=pos;
+
+ z2r = z1r + move_away_to *dir (alpha) + (line + turn_to) * dir(alpha+beta);
+ z3r = 0.5 [z2l,z2r] + 0.5 *flare *dir(alpha + beta);
+
+ penpos2(flare, alpha );
+ penpos3(flare, alpha + beta);
+ penlabels(1, 2, 3, 4, 5);
+ pickup pencircle;
+
+ save p;
+ path p;
+ p := z1r{dir(alpha)}
+ .. z2r{dir(180+alpha-beta)}
+ .. z3r{dir(alpha+180)}
+ .. z2l{dir(alpha-beta)}
+
+
+%%% Two versions of the curve: one with z4, the other with z5.
+% .. z5{dir(alpha- beta/2 )}
+ ..z4{dir(180+alpha+beta)}
+ ..z1l{dir(alpha+180)};
+% draw p ;
+ if direction = 1:
+ p
+ else:
+ reverse p
+ fi
+ endgroup
+ enddef;
+
+
+
def calc_kuulleke(expr w,alpha) =
begingroup;
save beta; beta=(alpha-90)/2;
enddef;
def draw_six =
- set_char_box(0, 2/3height#*widen, 0, height#);
+ set_char_box(0, .68 height#*widen, 0, height#);
message "w:"&decimal w;
message "h:"&decimal h;
penpos2(hair,90);
z2=(w/2,y1);
- penpos3(7/8thick,0);
+
+ penpos3 (15/16 thick,0);
% yup, should use the path fract [] "everywhere"
- z3r=(w,1/2[0,y1]);
+ x3r=w;
+ y3r = .5 [y4r, y2r];
penpos4(hair,-90);
z4r=(x2,0);
- penpos5(7/8thick,180);
- z5r=(0,y1);
penpos6(hair,90);
- z6r=(w-flare,h);
- penpos7(7/8thick,180);
- z7r=(0,h/2);
- penpos10(7/8thick,180);
+ x6r = .56 w;
+ y6r = h;
+ penpos7(thick,180);
+
+ x7r=0;
+ y7r = .50 h;
+
+ penpos10(thick,180);
z10r=(0,y3);
penlabels(1,2,3,4,5,6,7,8,9,10,11);
- save t; t=tense;
- fill z7{right}..z2r{right}..tension t..z3r{down}
- ..tension t..z4r{left}
- ..tension t..z7r{up}..tension t..z6r{right}
- ..z6l{left}..tension t..z7l{down}..z10l{up}..cycle;
- draw_flare(z6r,0,-90,hair,flare);
+
+
+ save outer_t; outer_t= 0.88;
+ save t ; t := tense;
+ fill
+% draw
+ z7{right}..z2r{right}
+ ..tension outer_t
+ ..z3r{down}
+ ..tension outer_t
+ ..z4r{left}
+% ..tension t
+ ..z7r{up}
+% .. flare_path (z6r,0,-90,hair,flare, 1)
+ .. number_flare_path (z6r, 0,-90,hair,flare,
+ w - x6r -hair/2, .16 h, 0.05, 2.5, 1)
+
+% ..tension t
+ ..z7l{down}
+ .. {down}z10l -- cycle;
+
unfill z2l{right}..tension t..z3l{down}..tension t
..z4l{left}..tension t..z10l{up}..tension t..cycle;
enddef;
dot_diam# = 7/8flare#;
define_pixels(dot_diam);
+code := 32;
+fet_beginchar("Space", "space", "space")
+ set_char_box(0, space#, 0,height#);
+fet_endchar;
code := 43; % , = 44
code := 47; % 0 = 48
fet_beginchar("Numeral 0", "0", "zero")
-% set_char_box(0, 4/5height#*widen, 0, height#);
- set_char_box(0, 11/15height#*widen, 0, height#);
+ set_char_box(0, 11/15height# * widen, 0, height#);
message "w:"&decimal w;
message "h:"&decimal h;
penpos1(thin,90);
fet_endchar;
fet_beginchar("Numeral 2", "2", "two")
- set_char_box(0, 11/15height#*widen, 0, height#);
+ set_char_box(0, 22/30 height#*widen, 0, height#);
message "w:"&decimal w;
message "h:"&decimal h;
clearxy;
save alpha; alpha=-45*widen;
save beta; beta=85;
save gamma; gamma=beta-10;
+ save flare_start_distance;
+
+ flare_start = 0.25 ;
save theta; theta=20/widen;
penpos1(hair,90+beta);
z1=(0,0)+(1/2sqrt(2)*hair)*dir(45);
penpos3(hair,90+gamma);
z3=(w,thick)+(1/2sqrt(2)*hair)*dir(-135);
- penpos2(thick,90+alpha);
- x2-x1=x3-x2; y2=11/16thick/widen;
- fill z1r{dir(beta)}..{dir(alpha)}z2r..{dir(gamma)}z3r
- ..z3l{dir(180+gamma)}..{dir(180+alpha)}z2l
+ penpos2(thick, 90+alpha -15);
+ x2-x1=x3-x2;
+ y2=10/16 thick/widen;
+ fill z1r{dir(beta)}.. tension 0.9 .. {dir(alpha + 10)}z2r..{dir(gamma)}z3r
+ ..z3l{dir(180+gamma)}..{dir(180+alpha - 5)}z2l
..{dir(180+beta)}z1l..cycle;
penpos4(thick,0);
- z4r=(w-thin/2,.72h);
- penpos5(thin,90);
- z5r=(1/2hair+flare,h);
+ z4r=(w-thin/2, .71 h);
+ penpos5(hair,90);
+ y5r = h;
+ x5r = 9/20 w ;
+
penlabels(1,2,3,4);
penlabels(5,6);
save t; t=tense;
- fill z1l{dir(beta)}..tension t..z4r{up}
- ..tension t..z5r{left}..z5l{right}
- ..z4l{down}..tension t
+
+ save p;
+ path p ;
+ p := z1l{dir(beta)}..tension t..z4r{up}
+ .. number_flare_path(z5r,180,90,hair, 1.05 flare,
+ x5r - 1/2 hair,
+ .21 h, 0.006, 0.4, 1)
+ .. z4l{down}..tension t
..{dir(180+beta)}z1r..cycle;
- draw_flare(z5r,180,90,thin,flare);
+
+ pickup pencircle scaled 1;
+% draw p;
+ fill p;
+
fet_endchar;
fet_beginchar("Numeral 3", "3", "three")
message "w:"&decimal w;
message "h:"&decimal h;
penpos1(hair,-90);
- z1l=(17/16thick,h);
+
+% flare_start = 0.25 ;
+ x1l = 36/80 w;
+ y1l = h;
+
+% z1l=(17/16thick,h);
penpos2(7/8thick,180);
- z2l=(w-thick/8,3/4h+thick/16);
+ x2l= w-thick/8;
+ y2l = 3/4h + thick* 3/32;
penpos3(thin,90);
z3=(w/2,h/2+1/8thick);
penpos4(thin,90);
z4=(5/8thick+1/2thin,y3);
penpos5(thick,0);
- z5r=(w,1/4h+thick/16);
+ x5r=w;
+ y5r = 17/64 h + thick/16;
+
penpos6(hair,-90);
- z6r=(9/8thick,0);
+
+ x6r= 37/80 w;
+ y6r = 0;
penpos7(3/2thin,90);
- z7=(x5,y3);
+ x7 = .83 w ;
+ y7 = y3;
penlabels(1,2,3,4,5,6,7);
save alpha; alpha=25;
save t; t=tense;
- fill z1l{right}..tension t..z2l{down}..z7r{dir(180+alpha)}
- ..z7l{dir(-alpha)}..z5r{down}..tension t..z6r{left}
- ..z6l{right}..tension t..z5l{up}
- ..tension t..z3l{left}..z4l{left}
- ..z4r{right}..z3r{right}..tension t..z2r{up}
- ..tension t..z1r{left}..cycle;
- draw_flare(z1l,180,90,hair,7/8flare);
- draw_flare(z6r,180,-90,hair,flare);
+ save outer_t; outer_t := 0.93;
+ pickup pencircle scaled 1;
+
+% draw
+ fill
+ number_flare_path (z1l, 180, 90, hair, 7/8 flare, x1l - .5 hair,
+ .16 h, 0.06, 1.5, -1)
+ ..tension outer_t
+ .. z2l{down}
+ .. tension outer_t
+ ..z7r{dir(180+alpha)}
+ ..z7l{dir(-alpha)}
+ .. tension outer_t
+ ..z5r{down}
+ .. tension outer_t
+ .. number_flare_path (z6r, 180, -90, hair, flare, x6l,
+ .18 h, 0.06, 1.5, 1)
+
+ .. z5l{up}
+ ..tension t
+ ..z3l{left}
+ ..z4l{left}
+ ..z4r{right}
+ ..z3r{right}
+ ..tension t
+ ..z2r{up}
+ ..tension t
+ .. cycle
+;
fet_endchar;
+
+
fet_beginchar("Numeral 4", "4", "four")
set_char_box(0, 4/5height#*widen, 0, height#);
message "w:"&decimal w;
fet_endchar;
fet_beginchar("Numeral 5", "5", "five")
- set_char_box(0, 7/10height#*widen, 0, height#);
+ set_char_box(0, 27/40 height#*widen, 0, height#);
message "w:"&decimal w;
message "h:"&decimal h;
calc_kuulleke(w-thin,0);
+
z1=(w/2+1/8thick,h);
save alpha; alpha=0;
penpos5(thin,0);
penpos8(thin,90);
z8l=(x7r,y7r-1/16thick);
penpos9(thin,90);
- z9=(x11+3/16thick,10/16[y5,y7]);
+
+
+ y9=10/16[y5,y7];
+ x9 = .36 [x8r, x10r] ;
+
penpos10(thick,0);
- z10r=(w,1/2[y9r,y11r]);
+ x10r = w+ hair/2;
+ y10r = 1/2[y9r,y11r];
penpos11(hair,-90);
- z11r=(9/8thick,0);
- penlabels(8,9,10,11);
+ y11r = 0;
+ x11r = .7 [0, x10l];
+
+ penlabels(8,9,10,11, 12);
save beta; beta=45;
- save t; t=tense;
- fill z8r{dir(beta)}..z9r{right}..tension t..z10r{down}
- ..tension t..z11r{left}
- ..z11l{right}..tension t..z10l{up}..tension t
+
+ save inner_t, outer_t;
+ inner_t= 1.0;
+ outer_t= .85;
+ fill z8r{dir(beta)}..z9r{right}
+ ..tension outer_t
+ ..z10r{down}
+ .. number_flare_path (z11r, 180, -90, hair, flare, x11l,
+ .18 h, 0.06, 1.5, 1)
+ ..z11l{right}
+ ..tension inner_t
+ ..z10l{up}
+ ..tension inner_t
..z9l{left}..z8l{dir(180+beta+10)}..cycle;
- draw_flare(z11r,180,-90,hair,flare);
+
fet_endchar;
fet_beginchar("Numeral 6", "6", "six")
save alpha; alpha=60;
save beta; beta=alpha-15;
z1=(w/2,h/2+thick/8);
- penpos2(hair,90+180+beta);
+ penpos2(14/8 thin,0);
z2=(w/3,h/2+thin);
penpos3(3/2thin,0);
z3l=(0,h/4+thin/2);
penpos4(hair,90);
- z4l=(x1,0);
+
+ z4l=(x1 ,0);
penpos5(thick,90+90+alpha);
z5=z1+w/4*dir(alpha-90);
penpos6(thick,90+90+alpha);
z6=z1+(w/4-thin/2)*dir(90+alpha);
penpos7(hair,90);
- z7r=(x1,h);
+ z7r= (x1 + .02 w ,h);
penpos8(3/2thin,0);
z8r=(w-thin/2,3/4h+thin/2);
- penpos9(hair,90+180+beta);
+ penpos9( 13/8 thin,0);
z9=(2/3w,h/2);
penlabels(1,2,3,4,5,6,7,8,9);
save t; t=tense;
input feta-macros;
input feta-params;
+
+
+
%blot_diameter# = .4pt#;
fet_beginfont("feta-nummer", design_size);
mode_setup;
height#:=designsize;
+space# := design_size/2;
font_x_height height#;
+font_normal_space space#;
+
+
+%
+% DOCME!
+%ugh. b and h are reused.
+%
save b,h; 4h+b=1.15; 10h+b=1;
fatten:=designsize*h+b;
+
save b,h; 4h+b=1.05; 10h+b=1;
widen:=designsize*h+b;
+
tense=0.85;
thick#:=7/30height#*fatten;
-thin#:=thick#/4*fatten;
-hair#:=blot_diameter#;
-flare#:=9/8thick#/fatten;
+thin#:=thick#/4*fatten + max(.1 (height# / 10 - 1), 0);
+hair#:= sqrt(.8 * blot_diameter#* thin#) ;
+flare#:=9/8 thick# + .75 (height# / 10 - 1);
+
save b,h; 4h+b=1/8; 10h+b=1/6;
kuulleke#:=thick#*designsize*h+b;
foot_top#:=thick#;
% part of LilyPond's pretty-but-neat music font
design_size:=10; % feta20 = 20pt
-
+% mode := smoke;
input feta-nummer;
end.
--- /dev/null
+design_size := 12;
+input feta-nummer;
--- /dev/null
+design_size := 16;
+input feta-nummer;
--- /dev/null
+design_size := 20.74;
+input feta-nummer;
--- /dev/null
+design_size := 23;
+input feta-nummer;
--- /dev/null
+design_size := 26;
+input feta-nummer;
import os
import stat
import string
-import re
+
+
import getopt
import sys
import __main__
import operator
+# Handle bug in Python 1.6-2.1
+#
+# there are recursion limits for some patterns in Python 1.6 til 2.1.
+# fix this by importing pre instead. Fix by Mats.
+
+# todo: should check Python version first.
+try:
+ import pre
+ re = pre
+ del pre
+except ImportError:
+ import re
program_version = '@TOPLEVEL_VERSION@'
if program_version == '@' + 'TOPLEVEL_VERSION' + '@':
- program_version = '1.5.18'
+ program_version = '1.4.12'
# if set, LILYPONDPREFIX must take prevalence
# if datadir is not set, we're doing a build and LILYPONDPREFIX
self.__body = None
def set_geo_option(self, name, value):
- if type(value) == type(""):
- m = re.match ("([0-9.]+)(cm|in|pt|mm|em|ex)",value)
- if m:
- unit = m.group (2)
- num = string.atof(m.group (1))
- conv = dimension_conversion_dict[m.group(2)]
-
- value = conv(num)
+ if type(value) == type([]):
+ value = map(conv_dimen_to_float, value)
+ else:
+ value = conv_dimen_to_float(value)
if name == 'body' or name == 'text':
- if type(value) == type(""):
- self.m_geo_textwidth = value
- else:
+ if type(value) == type([]):
self.m_geo_textwidth = value[0]
+ else:
+ self.m_geo_textwidth = value
self.__body = 1
elif name == 'portrait':
self.m_geo_landscape = 0
self.m_geo_x_marginparsep = value
self.m_geo_includemp = 1
elif name == 'scale':
- if type(value) == type(""):
- self.m_geo_width = self.get_paperwidth() * float(value)
+ if type(value) == type([]):
+ self.m_geo_width = self.get_paperwidth() * value[0]
else:
- self.m_geo_width = self.get_paperwidth() * float(value[0])
+ self.m_geo_width = self.get_paperwidth() * value
elif name == 'hscale':
- self.m_geo_width = self.get_paperwidth() * float(value)
+ self.m_geo_width = self.get_paperwidth() * value
elif name == 'left' or name == 'lmargin':
self.m_geo_lmargin = value
elif name == 'right' or name == 'rmargin':
if value[2] not in ('*', ''):
self.m_geo_rmargin = value[2]
elif name == 'hmargin':
- if type(value) == type(""):
- self.m_geo_lmargin = value
- self.m_geo_rmargin = value
- else:
+ if type(value) == type([]):
self.m_geo_lmargin = value[0]
self.m_geo_rmargin = value[1]
- elif name == 'margin':#ugh there is a bug about this option in
- # the geometry documentation
- if type(value) == type(""):
+ else:
self.m_geo_lmargin = value
self.m_geo_rmargin = value
- else:
+ elif name == 'margin':#ugh there is a bug about this option in
+ # the geometry documentation
+ if type(value) == type([]):
self.m_geo_lmargin = value[0]
self.m_geo_rmargin = value[0]
- elif name == 'total':
- if type(value) == type(""):
- self.m_geo_width = value
else:
+ self.m_geo_lmargin = value
+ self.m_geo_rmargin = value
+ elif name == 'total':
+ if type(value) == type([]):
self.m_geo_width = value[0]
+ else:
+ self.m_geo_width = value
elif name == 'width' or name == 'totalwidth':
self.m_geo_width = value
elif name == 'paper' or name == 'papername':
self.m_papersize = name
else:
pass
- # what is _set_dimen ?? /MB
- #self._set_dimen('m_geo_'+name, value)
+
def __setattr__(self, name, value):
if type(value) == type("") and \
dimension_conversion_dict.has_key (value[-2:]):
'pt': pt2pt
}
+# Convert numeric values, with or without specific dimension, to floats.
+# Keep other strings
+def conv_dimen_to_float(value):
+ if type(value) == type(""):
+ m = re.match ("([0-9.]+)(cm|in|pt|mm|em|ex)",value)
+ if m:
+ unit = m.group (2)
+ num = string.atof(m.group (1))
+ conv = dimension_conversion_dict[m.group(2)]
+
+ value = conv(num)
+
+ elif re.match ("^[0-9.]+$",value):
+ value = float(value)
+
+ return value
+
# latex linewidths:
# indices are no. of columns, papersize, fontsize
\verb+%s+:''',
'output-lilypond': r"""\begin[%s]{lilypond}
%s
-\end{lilypond}""",
- 'output-verbatim': "\\begin{verbatim}%s\\end{verbatim}",
+\end{lilypond}
+""",
+ 'output-verbatim': r'''\begin{verbatim}%s\end{verbatim}%%
+''',
'output-default-post': "\\def\postLilypondExample{}\n",
'output-default-pre': "\\def\preLilypondExample{}\n",
'usepackage-graphics': '\\usepackage{graphics}\n',
'output-eps': '\\noindent\\parbox{\\lilypondepswidth{%(fn)s.eps}}{\includegraphics{%(fn)s.eps}}',
+ 'output-noinline': r'''
+%% generated: %(fn)s.eps
+''',
'output-tex': '{\\preLilypondExample \\input %(fn)s.tex \\postLilypondExample\n}',
'pagebreak': r'\pagebreak',
},
+
'texi' : {'output-lilypond': """@lilypond[%s]
%s
@end lilypond
'output-lilypond-fragment': """@lilypond[%s]
\context Staff\context Voice{ %s }
@end lilypond """,
+ 'output-noinline': r'''
+@c generated: %(fn)s.png
+''',
'pagebreak': None,
'output-verbatim': r"""@example
%s
return get_output ('output-verbatim') % body
+#warning: this uses extended regular expressions. Tread with care.
+
+# legenda (?P name parameter
+# *? match non-greedily.
+
re_dict = {
'latex': {'input': r'(?m)^[^%\n]*?(?P<match>\\mbinput{?([^}\t \n}]*))',
'include': r'(?m)^[^%\n]*?(?P<match>\\mbinclude{(?P<filename>[^}]+)})',
Add stuff to BODY using OPTS as options."""
music_size = default_music_fontsize
latex_size = default_text_fontsize
+ indent = ''
+ linewidth = ''
for o in opts:
if g_force_lilypond_fontsize:
music_size = g_force_lilypond_fontsize
m = re.match ('latexfontsize=([0-9]+)pt', o)
if m:
latex_size = string.atoi (m.group (1))
+
+ m = re.match ('indent=([-.0-9]+)(cm|in|mm|pt)', o)
+ if m:
+ f = float (m.group (1))
+ indent = 'indent = %f\\%s' % (f, m.group (2))
+
+ m = re.match ('linewidth=([-.0-9]+)(cm|in|mm|pt)', o)
+ if m:
+ f = float (m.group (1))
+ linewidth = 'linewidth = %f\\%s' % (f, m.group (2))
if re.search ('\\\\score', body):
is_fragment = 0
if is_fragment and not 'multiline' in opts:
opts.append('singleline')
+
if 'singleline' in opts:
- l = -1.0;
- else:
- l = __main__.paperguru.get_linewidth()
+ linewidth = 'linewidth = -1.0'
+ elif not linewidth:
+ l = __main__.paperguru.get_linewidth ()
+ linewidth = 'linewidth = %f\pt' % l
+
+ if 'noindent' in opts:
+ indent = 'indent = 0.0\mm'
for o in opts:
m= re.search ('relative(.*)', o)
body = '\\relative %s { %s }' %(pitch, body)
if is_fragment:
- body = r"""\score {
+ body = r'''\score {
\notes { %s }
\paper { }
-}""" % body
+}''' % body
opts = uniq (opts)
optstring = string.join (opts, ' ')
optstring = re.sub ('\n', ' ', optstring)
- body = r"""
+ body = r'''
%% Generated automatically by: lilypond-book.py
%% options are %s
\include "paper%d.ly"
-\paper { linewidth = %f \pt }
-""" % (optstring, music_size, l) + body
+\paper {
+ %s
+ %s
+}
+''' % (optstring, music_size, linewidth, indent) + body
# ughUGH not original options
return body
m = re.search ('intertext="(.*?)"', o)
if m:
newbody = newbody + m.group (1) + "\n\n"
- if format == 'latex':
+
+ if 'noinline' in opts:
+ s = 'output-noinline'
+ elif format == 'latex':
if 'eps' in opts:
s = 'output-eps'
else:
import tempfile
import traceback
+# Handle bug in Python 1.6-2.1
+#
+# there are recursion limits for some patterns in Python 1.6 til 2.1.
+# fix this by importing pre instead. Fix by Mats.
+
+# todo: should check Python version first.
+try:
+ import pre
+ re = pre
+ del pre
+except ImportError:
+ import re
+
################################################################
# lilylib.py -- options and stuff
+++ /dev/null
-
-NAME
-
-AUTHORS - who did what on StepMake?
-
-DESCRIPTION
-
-This file lists authors of StepMake, and what they wrote.
-
-AUTHORS
-
-o Jan Nieuwenhuizen <janneke@gnu.org>,
- http://www.xs4all.nl/~jantien
-
- Main author.
-o Han-Wen Nienhuys <hanwen@cs.uu.nl>,
- http://www.cs.uu.nl/people/hanwen
-
- Main author.
-
-CONTRIBUTORS
-
-o Jeffrey B. Reed <daboys@bga.com>,
- Windows-nt fixes.
+++ /dev/null
-
-NAME
-
-INSTALL - installing StepMake
-
-DESCRIPTION
-
-This page documents installation and usage of StepMake
-
-ABSTRACT
-
-StepMake is a drop-in package that takes care of generic Makefile and
-packaging/distribution issues. It enables you to write only the simplest of
-Makefile snippets, while providing a series powerful make targets. Features
-include speed, wildcarding, out/ dir build, stateless Makefiles and package
-clustering. It includes some handy scripts for making (package-)diffs and
-patches, making binary distributions etc.
-
-To use StepMake with your package, you do something remotely like:
-
- tar xzf releases/stepmake-0.1.23
- cd package-x.x.x/ # package to be StepMake-ised
- ./../stepmake-0.1.23/bin/stepmakeise.sh
-
-You'll have to customize at least the files:
-
- ./VERSION .
- ./configure.in
-
-to your package's needs. You might want to take a look at:
-
- ./make/Toplevel.make.in
- ./config.hh.in
- ./config.make.in
-
-Also, you should put a Makefile in every subdirectory of your
-package. These makefiles generally are quite simple, e.g. this
-is a the makefile for an include directory of LilyPond:
-
- # lily/include/Makefile
-
- depth = ../..
- include $(depth)/make/Stepmake.make
-
-it will identify all .h, .hh, ... files and take care of distributing
-them.
-
-There's a make/Template.make that you can use as an example.
-See also the Makefiles in the LilyPond or Yodl package.
-
-Once included in your package, StepMake (or in fact, any
-StepMake-ised package) behaves as a normal subdirectory;
-make commands such as 'make dist' recurse into the stepmake tree
-(For a list of available targets, type make help after
-configuring).
-Stepmake (and any changes made) will be distributed with the main
-pacakage. However, StepMake doesn't lose its independency, change
-to the stepmake directory, and it'll behave as a main package.
-You shouldn't version directory names of subpackages, otherwise
-you'll see that package twice in each patch when you upgrade.
-
-PREREQUISITES
-
-To use StepMake with a package you need:
-
-o A GNU system: StepMake is known to work on these GNU systems: Linux
- (PPC, intel), FreeBSD, AIX, NeXTStep, IRIX, Digital Unix and Solaris.
- If you have the Cygnus WINDOWS32 port of the GNU utils, it will even
- work in Windows NT/95, but we don't promise to support it.
-o GNU make
-o GNU autoconf
-
-RECOMMENDED
-
-Although not strictly necessary, these are recommended to have.
-
-o Python
-o Yodl. All documentation will be in Yodl. (1.22.jcn3)
-o GNU find
-
-INTERNALS
-
-Over time, we put a lot of effort in the configure, make, distribute
-system (CMDS) for LilyPond. Some months ago, we realised it was not
-standard GNU --- we require GNU make for building, and Python for extra
-scripting. In an effort to be more GNU, we tried automake, but after two
-weeks we realised the costs were too high for us and we reverted to our
-own system (see automake.urgh). Not long after that i was confronted
-with two other packages that lacked a decent CMDS. I realised that Lily's
-would be perfect, it's modular and easy. The only problem was to make a
-clean cut between generic and Lily specific stuff. The result was
-StepMake: a bunch of generic makefiles, found in:
-
- stepmake/stepmake/*.make
-
-eneric helper scripts:
-
- stepmake/bin/*.sh
- stepmake/bin/*.py
-
-and modular configure functions:
-
- stepmake/configure.in
- stepmake/aclocal.m4
- stepmake/config.hh.in
- stepmake/config.make.in
-
-Of course, every package has its own configure- and make peculiarities.
-The best way to create the configure scripts is to copy them from
-stepmake (Actually, stepmake/bin/stepmakeise.sh will do
-that for you.) into you package's toplevel directory. For most
-packages, you'll only have to comment in/out some functions in
-configure.in.
-
-Package specific makefiles go in:
-
- make/Targets.make
- make/Rulese.make
- make/Substitute.make
-
-and are included by the generic StepMake makefiles.
-
-MAINTAINING
-
-If you want to make and manage (binary) distributions, create and apply
-patches, you'll need some framework that's outside of the package's
-sourcetree.
-For a number of simple maintenance tasks, StepMake will therefore assume
-the following directory structure:
-
- doos/ # gnu/windows32 build and binary releases
- harmonia -> harmonia-x.y.z
- harmonia-x.y.z/
- lilypond -> lilypond-x.y.z # symlink to development directory
- lilypond-x.y.z/ # current development
- patches/ # patches between different releases
- RedHat/BUILD # RedHat build and binary releases
- RedHat/RPMS
- RedHat/SPECS
- releases/ # .tar.gz releases
- test/ # tarballs and diffs from current version
- yodl -> yodl-1.30.17
- yodl-1.30.17
-
-with prefix $HOME/usr/src
-and (for building rpms only) in $HOME/.rpmrc:
-
- topdir: /home/fred/usr/src/RedHat
-
-Check and update the layout with the command:
-
- ./stepmake/bin/stepdirs.sh
-
-SEE ALSO
-
-../PATCHES.txt
-
-CONFIGURING
-
-Stepmake comes with a number of precooked configure functions for
-general needs, such as AC_STEPMAKE_COMPILE for simple C development
-and AC_STEPMAKE_CXX for C++.
-
-See configure.in and comment in/out the functions that your package
-needs. For specific needs, you can write your own autoconf code,
-see info autoconf.
-
-AUTHORS
-
-Jan Nieuwenhuizen <janneke@gnu.org>
-
-Han-Wen Nienhuys <hanwen@cs.uu.nl>
-
-Have fun!
# (c) 1997--1998 Han-Wen Nienhuys <hanwen@stack.nl>
# Jan Nieuwenhuizen <janneke@gnu.org>
-import regex
-import regsub
+import re
import string
import sys
import os
import getopt
-make_assign_re = regex.compile('^\([A-Z_]*\)=\(.*\)$')
+make_assign_re = re.compile ('^([A-Z_]*)=(.*)$')
def read_makefile (fn):
file = open (fn)
make_dict = {}
for l in lines:
- if make_assign_re.search(l) <> -1:
- nm = make_assign_re.group(1)
- val = make_assign_re.group(2)
+ m = make_assign_re.search (l)
+ if m:
+ nm = m.group (1)
+ val = m.group (2)
make_dict[nm] = val
return make_dict
def __init__ (self, dirname):
dict = read_makefile (dirname + '/VERSION')
version_list = []
- for x in [ 'MAJOR_VERSION', 'MINOR_VERSION', 'PATCH_LEVEL']:
+ for x in [ 'MAJOR_VERSION', 'MINOR_VERSION', 'PATCH_LEVEL']:
version_list.append (string.atoi (dict[x]))
version_list.append (dict['MY_PATCH_LEVEL'])
self.topdir = dirname
break
return tuple(t)
-def split_my_patchlevel(str):
- return (regsub.sub('[0-9]*$', '', str),
- string.atoi(regsub.sub('[^0-9]*', '', str)))
-
+def split_my_patchlevel (str):
+ m = re.match ('(.*?)([0-9]*)$', str)
+ return (m.group (1), string.atoi (m.group (2)))
def next_version(tup):
l = list(full_version_tup (tup))
l = list(full_version_tup (tup))
t3name=t3num=''
if l[3]:
- (t3name,t3num)= split_my_patchlevel (l[3])
+ (t3name, t3num) = split_my_patchlevel (l[3])
if t3num and t3num - 1 > 0:
t3num = '%d' %(t3num - 1)
else:
mypatch = string.join (t[3:], '.')
return (string.atoi(t[0]), string.atoi(t[1]), string.atoi(t[2]), mypatch)
-def version_compare (tupl, tupr):
- tupl = full_version_tup (tupl)
- tupr = full_version_tup (tupr)
+def version_compare (ltup, rtup):
+ rtup = full_version_tup (ltup)
+ rtup = full_version_tup (rtup)
for i in (0,1,2):
- if tupl[i] - tupr[i]: return tupl[i] - tupr[i]
- if tupl[3] and tupr[3]:
- lname = regsub.sub('[0-9]*$', '', tupl[3])
- lnum = string.atoi(regsub.sub('[^0-9]*', '', tupl[3]))
- rname = regsub.sub('[0-9]*$', '', tupr[3])
- rnum = string.atoi(regsub.sub('[^0-9]*', '', tupr[3]))
+ if ltup[i] - rtup[i]: return ltup[i] - rtup[i]
+ if ltup[3] and rtup[3]:
+ (lname, lnum) = split_my_patchlevel (ltup[i])
+ (rname, rnum) = split_my_patchlevel (rtup[3])
if lname != rname:
raise 'ambiguous'
return sign (lnum - rnum)
- if tupl[3]:
+ if ltup[3]:
return 1
else:
return -1
-
if __name__ == '__main__':
p = Package ('.')
Begin3
Title: StepMake
Version: 0.1.81
-Entered-date: 22MAR00
+Entered-date: 05MEI02
Description:
Keywords: music notation typesetting midi fonts engraving
Author: janneke@gnu.org (Jan Nieuwenhuizen)