]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 1.4.13 release/1.4.13
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 5 May 2002 17:06:06 +0000 (19:06 +0200)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 5 May 2002 17:06:06 +0000 (19:06 +0200)
============

* 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.

* lilypond-indent.el: New file, from HEAD.  Fixes lilypond-mode.

1.4.12.

58 files changed:
CHANGES
Documentation/GNUmakefile
Documentation/index.texi
Documentation/user/GNUmakefile
Documentation/user/tutorial.itely
Documentation/windows/gs-profile.sh [deleted file]
Documentation/windows/gsview-profile.sh [deleted file]
Documentation/windows/installing.texi
Documentation/windows/setup.hint
GNUmakefile.in
INSTALL.txt
VERSION
aclocal.m4
buildscripts/GNUmakefile [changed mode: 0755->0644]
buildscripts/clean-fonts.sh [changed mode: 0755->0644]
buildscripts/help2man.pl [changed mode: 0755->0644]
buildscripts/lilypond-login.sh [changed mode: 0755->0644]
buildscripts/lilypond-profile.sh [changed mode: 0755->0644]
buildscripts/mf-to-table.py [changed mode: 0755->0644]
buildscripts/mf-to-xpms.sh [changed mode: 0755->0644]
buildscripts/mutopia-index.py [changed mode: 0755->0644]
buildscripts/ps-to-gifs.sh [changed mode: 0755->0644]
buildscripts/ps-to-pfa.py [changed mode: 0755->0644]
buildscripts/ps-to-pngs.sh [changed mode: 0755->0644]
configure
debian/postinst [changed mode: 0755->0644]
debian/postrm [changed mode: 0755->0644]
debian/rules [changed mode: 0755->0644]
lily/parser.yy
lily/symbol-cache.cc
ly/dynamic-scripts.ly
make/lilypond-vars.make
make/ly-rules.make
make/mutopia-targets.make
make/mutopia-vars.make
make/out/lilypond.lsm
make/out/lilypond.redhat.spec
make/out/lilypond.suse.spec
mf/GNUmakefile
mf/cmbase.mf [deleted file]
mf/feta-din-code.mf
mf/feta-din.mf
mf/feta-nummer-code.mf
mf/feta-nummer.mf
mf/feta-nummer10.mf
mf/feta-nummer12.mf [new file with mode: 0644]
mf/feta-nummer16.mf [new file with mode: 0644]
mf/feta-nummer20.mf [new file with mode: 0644]
mf/feta-nummer23.mf [new file with mode: 0644]
mf/feta-nummer26.mf [new file with mode: 0644]
scripts/lilypond-book.py
scripts/ly2dvi.py
stepmake/AUTHORS.txt [deleted file]
stepmake/INSTALL.txt [deleted file]
stepmake/bin/config.guess [changed mode: 0644->0755]
stepmake/bin/config.sub [changed mode: 0644->0755]
stepmake/bin/packagepython.py
stepmake/make/out/stepmake.lsm

diff --git a/CHANGES b/CHANGES
index c48e091365a3375418343b8e0ef1d01811bc3b58..e8261e6be5ab0409de8d1cfab8af4e6e986ea5f9 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,32 @@
 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.
 
index 0dd22f2f2e8477b1122f1e6e0497e560dfdb683c..40462e49fb5be572d91780a70aaeac09370bfe35 100644 (file)
@@ -16,7 +16,11 @@ test-reg:
        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
index 288aa160153e5537168e0c91179386f05ea255c4..c445f14b7ec441bb30e8b8de1ba56499139a32bc 100644 (file)
@@ -90,13 +90,17 @@ the mailing lists.
 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}
@@ -118,7 +122,9 @@ want to fine-tune output, you need the information in this document.
 @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
index 566c3b2c1cf63f59dea626f60ac8150303a92777..71e1de2aa187757a683eb948a00ef2fb7b22ff9e 100644 (file)
@@ -13,7 +13,7 @@ EXTRA_DIST_FILES= $(LATEX_FILES)    $(wildcard *.itexi *.itely)
 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)
@@ -85,7 +85,7 @@ deep-symlinks:
 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
 
index bbc3d201337b4cfc49b111567a892e920ba616a3..f4bd5193695fdc67ee127ed9f347c571e4bcd5fd 100644 (file)
@@ -831,12 +831,20 @@ at @uref{http://www.ghostscript.com}.
 @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
diff --git a/Documentation/windows/gs-profile.sh b/Documentation/windows/gs-profile.sh
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/Documentation/windows/gsview-profile.sh b/Documentation/windows/gsview-profile.sh
deleted file mode 100644 (file)
index e69de29..0000000
index 232fd67d4ebb37c16737668cdd1907aaae9e5d60..2d507514b22a1ade9a2c0efb8fae166002c66abe 100644 (file)
@@ -63,29 +63,37 @@ Options:
 @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
@@ -123,31 +131,27 @@ bugreport. A bugreport includes
 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
 
@@ -171,7 +175,6 @@ part of Cygwin and much more robust for use with LilyPond than MiKTeX.
 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
index 3be206b3334548755570655a7b863a77dfc71880..f77436c5627329fb8190a47cc73ce9792feed0e7 100644 (file)
@@ -1,6 +1,6 @@
 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
index 36f11dfcf5cc42bcd3adcb46a2ce0782502cffc5..1c8931dd27fe9f198c39f98a213d8c96637e6a93 100644 (file)
@@ -41,10 +41,13 @@ fonts:
 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 
 
@@ -60,12 +63,12 @@ TOP_HTMLS = index.html short-examples.html long-examples.html
 
 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/
 
@@ -86,6 +89,7 @@ top-web:
                -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
index c82132525f6ef98d77677e7f048935b0032b2ad3..751393665d182f4cfdbad9366ec15b0bf35d1af9 100644 (file)
@@ -15,7 +15,7 @@ INSTALL - compiling and installing GNU LilyPond
     Compilation
     Running requirements
     Website requirements
-  Building  LilyPond
+  Building LilyPond
     Configuring for multiple platforms
   Emacs mode
   Compiling for distributions
@@ -25,6 +25,7 @@ INSTALL - compiling and installing GNU LilyPond
     Slackware
     Mandrake
     Debian GNU/Linux
+    MacOS X
   Problems
     Debian GNU/Linux unstable gcc-3.0
     Linux-2.4.0, Guile-1.4 -with-threads
@@ -94,10 +95,10 @@ Upgrading
      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
 ============
@@ -110,7 +111,8 @@ Compilation
    * 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
@@ -224,8 +226,8 @@ issuing
      (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 -
@@ -320,10 +322,10 @@ LinuxPPC
 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.
 
@@ -337,7 +339,7 @@ Slackware
    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
@@ -394,12 +396,12 @@ the .deb by doing, for example:
        $ 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
        $
 
@@ -427,7 +429,7 @@ in addition to the those needed for running:
 
    * 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
@@ -442,11 +444,11 @@ by running \`apt-get' as root before building the package:
                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
 
@@ -455,6 +457,43 @@ interfere with your build, you may want to do this before the build too:
 
        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
 ========
 
diff --git a/VERSION b/VERSION
index e9a8965cf79d0b24bdca3e79c8bfb9b548191109..b32adc53a574c17576e61808f3e3f2435840de69 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,8 +1,8 @@
 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.
index 6ac10571c013fbf309a399cb7e7d0c313ea1f81a..082312d7413a30eea1b2f3ff52f1c1552f7260fd 100644 (file)
@@ -33,6 +33,10 @@ AC_DEFUN(AC_STEPMAKE_COMPILE, [
     [  --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])
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index ec2dac6..ded4d57
@@ -9,7 +9,6 @@ set datadir="@datadir@"
 
 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...
@@ -29,8 +28,15 @@ endif
 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
+
+
 
 
old mode 100755 (executable)
new mode 100644 (file)
index e23206f..c243d0f
@@ -27,11 +27,12 @@ GS_LIB="$datadir/ps:"${GS_LIB:=""}
 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 
 
        
 
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 794e599..999d0af
@@ -163,6 +163,7 @@ def gen_list(inputs, filename):
                                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");
 
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 0e09423923cf53b50c6f9b513abc2666aab84cc5..c3c59f65fd88d95fce5324a99023c367bc7b0487 100755 (executable)
--- a/configure
+++ b/configure
@@ -71,6 +71,8 @@ ac_help="$ac_help
   --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
@@ -626,12 +628,12 @@ fi
     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
@@ -669,7 +671,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
         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
@@ -689,7 +691,7 @@ echo "configure:673: checking builddir" >&5
        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
@@ -811,7 +813,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
 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
@@ -836,7 +838,7 @@ do
 # 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
@@ -871,7 +873,7 @@ do
 # 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
@@ -908,7 +910,7 @@ do
 # 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
@@ -943,7 +945,7 @@ test -n "$TAR" || TAR="error"
        # 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
@@ -983,7 +985,7 @@ fi
        # 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
@@ -1020,7 +1022,7 @@ fi
        # 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
@@ -1061,7 +1063,7 @@ fi
     # 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
@@ -1227,6 +1229,13 @@ if test "${enable_debugging+set}" = set; then
 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"
@@ -1262,7 +1271,7 @@ EOF
     # 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
@@ -1292,7 +1301,7 @@ if test -z "$CC"; then
   # 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
@@ -1343,7 +1352,7 @@ fi
       # 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
@@ -1375,7 +1384,7 @@ fi
 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.
@@ -1386,12 +1395,12 @@ cross_compiling=$ac_cv_prog_cc_cross
 
 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
@@ -1417,12 +1426,12 @@ if test $ac_cv_prog_cc_works = no; 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
@@ -1431,7 +1440,7 @@ 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
@@ -1450,7 +1459,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
 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
@@ -1488,7 +1497,7 @@ fi
     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*-*-*)
@@ -1510,7 +1519,7 @@ echo "configure:1492: checking for IEEE-conformance compiler flags" >&5
 
 # 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=
@@ -1525,13 +1534,13 @@ else
   # 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
   :
@@ -1542,13 +1551,13 @@ else
   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
   :
@@ -1559,13 +1568,13 @@ else
   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
   :
@@ -1593,17 +1602,17 @@ for ac_hdr in assert.h sys/stat.h
 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*
@@ -1630,12 +1639,12 @@ fi
 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>
@@ -1693,7 +1702,7 @@ EOF
 
 
 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
@@ -1706,12 +1715,12 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
 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
   :
@@ -1748,7 +1757,7 @@ do
 # 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
@@ -1780,7 +1789,7 @@ test -n "$CXX" || CXX="gcc"
 
 
 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.
@@ -1791,12 +1800,12 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
 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
@@ -1822,12 +1831,12 @@ if test $ac_cv_prog_cxx_works = no; 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
@@ -1836,7 +1845,7 @@ 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
@@ -1855,7 +1864,7 @@ ac_test_CXXFLAGS="${CXXFLAGS+set}"
 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
@@ -1886,71 +1895,20 @@ 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*
@@ -1987,7 +1945,7 @@ fi
 
 
     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?
@@ -2005,12 +1963,12 @@ echo "configure:1991: checking "g++ version"" >&5
 
 
     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; };
@@ -2020,7 +1978,7 @@ int main() {
  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
@@ -2047,7 +2005,7 @@ do
 # 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
@@ -2090,7 +2048,7 @@ do
 # 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
@@ -2125,7 +2083,7 @@ do
 # 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
@@ -2193,7 +2151,7 @@ do
 # 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
@@ -2226,7 +2184,7 @@ test -n "$AR" || AR="error"
     # 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
@@ -2281,7 +2239,7 @@ fi
 
 
     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;;
@@ -2317,7 +2275,7 @@ EOF
 
 
     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
@@ -2325,7 +2283,7 @@ else
   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
@@ -2339,7 +2297,7 @@ int main() {
 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
@@ -2369,12 +2327,12 @@ fi
     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.  */
@@ -2400,7 +2358,7 @@ $ac_func();
 
 ; 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
@@ -2432,7 +2390,7 @@ do
 # 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
@@ -2463,7 +2421,7 @@ done
 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
@@ -2491,7 +2449,7 @@ do
 # 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
@@ -2527,7 +2485,7 @@ do
 # 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
@@ -2565,7 +2523,7 @@ do
 # 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
@@ -2601,7 +2559,7 @@ do
 # 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
@@ -2640,7 +2598,7 @@ do
 # 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
@@ -2676,7 +2634,7 @@ do
 # 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
@@ -2714,7 +2672,7 @@ do
 # 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
@@ -2750,7 +2708,7 @@ do
 # 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
@@ -2784,7 +2742,7 @@ test -n "$INIMPOST" || INIMPOST="-echo no inimp or inimpost"
     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
@@ -2795,7 +2753,7 @@ echo "configure:2788: checking for working metafont mode" >&5
     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
     #
@@ -2803,7 +2761,7 @@ echo "configure:2799: checking for mfplain.mp" >&5
     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
@@ -2836,7 +2794,7 @@ do
 # 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
@@ -2867,7 +2825,7 @@ done
 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"
 
@@ -2895,13 +2853,13 @@ echo "configure:2871: checking for tfm path" >&5
 
     ## 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
@@ -2912,7 +2870,7 @@ echo "configure:2905: checking "if we are cross compiling"" >&5
        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}'`
@@ -2933,7 +2891,7 @@ else {last =0}}
         
 ## 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; }
@@ -2948,7 +2906,7 @@ echo "configure:2937: checking for Guile" >&5
     # 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
@@ -3009,17 +2967,17 @@ fi
 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*
@@ -3046,7 +3004,7 @@ fi
 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
@@ -3054,7 +3012,7 @@ else
   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
@@ -3068,7 +3026,7 @@ int main() {
 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
@@ -3098,12 +3056,12 @@ fi
        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.  */
@@ -3129,7 +3087,7 @@ $ac_func();
 
 ; 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
@@ -3156,7 +3114,7 @@ done
 
     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
@@ -3177,7 +3135,7 @@ do
 # 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
@@ -3218,7 +3176,7 @@ test -n "$BIBTEX2HTML" || BIBTEX2HTML="error"
 
 
 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
@@ -3226,8 +3184,11 @@ 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()
 {
@@ -3236,7 +3197,7 @@ 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
@@ -3254,12 +3215,12 @@ echo "$ac_t""$ac_cv_func_memcmp_clean" 1>&6
 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.  */
@@ -3285,7 +3246,7 @@ vprintf();
 
 ; 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
@@ -3309,12 +3270,12 @@ fi
 
 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.  */
@@ -3340,7 +3301,7 @@ _doprnt();
 
 ; 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
@@ -3367,12 +3328,12 @@ fi
 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.  */
@@ -3398,7 +3359,7 @@ $ac_func();
 
 ; 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
@@ -3438,7 +3399,7 @@ do
 # 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
@@ -3470,7 +3431,7 @@ test -n "$MAKEINFO" || MAKEINFO="error"
 
     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
@@ -3498,7 +3459,7 @@ EOF
 # 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
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 4803c2eae57347675147fdf50eb39ead3118dca5..55ef527c1e9d7dcec88540fe20390580acd23e4d 100644 (file)
@@ -1072,12 +1072,6 @@ command_element:
                 $$ = 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 ();
index d247ccd3d577e45d7b401cdc39681b7b98eaebc8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,77 +0,0 @@
-/*   
-  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
-
-
index 0f2f3e6b243dcde066810157e3c00322ca24c44f..80eabb0adc75a45bc38e5d2793551b0f3e87f26c 100644 (file)
@@ -10,7 +10,7 @@ pp = \dynamicscript #"pp"
 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"
index 01f6ec105ebbc3af2c8d313b2ea6509f7c16cb3b..0744ffe3c86d62fbce56612d1bf542f345aa3dee 100644 (file)
@@ -1,6 +1,7 @@
 
 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)
index 4c238e1fb6e75e0387676010adbed166cec9c49b..e534f4a5210eb751d5a564b1d256dcf488e31f30 100644 (file)
@@ -43,3 +43,8 @@ $(outdir)/%.tex: $(outdir)/%.ly
 $(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 $@
index 1b041638a49f2cac87603a51ad5558b9114e43de..a17d04dcbbe1f722b6508d2ec270dc1b1410deac 100644 (file)
@@ -10,7 +10,7 @@ include $(stepdir)/www-targets.make
 
 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)
index 7e2362e6344d8aad398e3290faf83da82b54e2d5..5591727b13c3569055b0ffe812dda8a3fc3159af 100644 (file)
@@ -13,6 +13,7 @@ EXTRA_DIST_FILES += $(LY_FILES) $(M4_FILES) $(LYM4_FILES)
 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)))
index 5df075e20e1b7658a6f3c02933e1ec1fc31cec5b..faa8af758cc1f46941c8747f0a878c84c04db174 100644 (file)
@@ -1,15 +1,15 @@
 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
index ee8cd7c287517fd56a667bb982f938323dd4052b..d1f85aae86de32fd271f5df174756ff21aeff969 100644 (file)
@@ -1,11 +1,11 @@
 %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
index d900a53ee3053712cab95805228a0ffe5f51fe9b..5202f9212c9769dc10025c3a9791b754a8a57933 100644 (file)
 
 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/
index 9af2a11212f0972d420d7fe815e928dcf6d6c204..c745a00539be3de9361df82c5cd497bc2fbbc64b 100644 (file)
@@ -35,7 +35,7 @@ ALL_GEN_FILES= $(TFM_FILES) $(TEXTABLES) $(AFM_FILES) $(TFM_FILES) $(LOG_FILES)
 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)
@@ -53,17 +53,26 @@ INSTALLATION_OUT_FILES3=$(TFM_FILES)
 # 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)
diff --git a/mf/cmbase.mf b/mf/cmbase.mf
deleted file mode 100644 (file)
index 22c4a27..0000000
+++ /dev/null
@@ -1,697 +0,0 @@
-% 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;
index ed795cb4e825fcec600aea602003d9ffe54d16f0..e457b64ad2cedb7af31b1a741bb32cc35c0265d7 100644 (file)
-% 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.
index c314f4468d5c1eef18f9fe0a6d6e254a49b56353..00d7211031f18499dd01bbaf96d086e6a0115a93 100644 (file)
@@ -5,13 +5,21 @@ test:=0;
 
 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.
index 1cd8e52accf5d7ce6a156f17cf601bf4029e2d9e..28bd3b7a0d60e5b3225a005194edf8f69d69e596 100644 (file)
@@ -4,7 +4,18 @@
 %
 % 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")
 
@@ -12,6 +23,66 @@ define_pixels(height,thick,thick,thin,hair,flare);
 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;
@@ -48,7 +119,7 @@ def draw_foot(expr xpos) =
        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;
 
@@ -57,26 +128,45 @@ def draw_six =
        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;
@@ -85,6 +175,10 @@ save dot_diam;
 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 
 
@@ -125,8 +219,7 @@ fet_endchar;
 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);
@@ -177,36 +270,51 @@ fet_beginchar("Numeral 1", "1", "one")
 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")
@@ -214,32 +322,66 @@ 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;
@@ -283,10 +425,11 @@ fet_beginchar("Numeral 4", "4", "four")
 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);
@@ -303,19 +446,35 @@ fet_beginchar("Numeral 5", "5", "five")
        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")
@@ -384,21 +543,22 @@ fet_beginchar("Numeral 8", "8", "eight")
        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;
index 898364cd2310fd5d5379b10d5ffa463986e0434e..bdefb0680915385c93651b05ab0abc388d74e9c8 100644 (file)
@@ -7,24 +7,38 @@ input feta-autometric;
 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#;
index 884ca5c30a5b0cb3045dd6e7478eae4c63b7a766..2c6e8f5338d803daa54e87b23940b2dc3f90d9fc 100644 (file)
@@ -2,7 +2,7 @@
 % part of LilyPond's pretty-but-neat music font
 
 design_size:=10; % feta20 = 20pt
-
+% mode := smoke;
 input feta-nummer;
 
 end.
diff --git a/mf/feta-nummer12.mf b/mf/feta-nummer12.mf
new file mode 100644 (file)
index 0000000..c3e868d
--- /dev/null
@@ -0,0 +1,2 @@
+design_size := 12;
+input feta-nummer;
diff --git a/mf/feta-nummer16.mf b/mf/feta-nummer16.mf
new file mode 100644 (file)
index 0000000..92423b0
--- /dev/null
@@ -0,0 +1,2 @@
+design_size := 16;
+input feta-nummer;
diff --git a/mf/feta-nummer20.mf b/mf/feta-nummer20.mf
new file mode 100644 (file)
index 0000000..8ddfd9e
--- /dev/null
@@ -0,0 +1,2 @@
+design_size := 20.74;
+input feta-nummer;
diff --git a/mf/feta-nummer23.mf b/mf/feta-nummer23.mf
new file mode 100644 (file)
index 0000000..d324151
--- /dev/null
@@ -0,0 +1,2 @@
+design_size := 23;
+input feta-nummer;
diff --git a/mf/feta-nummer26.mf b/mf/feta-nummer26.mf
new file mode 100644 (file)
index 0000000..a9308dd
--- /dev/null
@@ -0,0 +1,2 @@
+design_size := 26;
+input feta-nummer;
index cf10c42f20c5ce06d1459ee828596409249723aa..3aa25bbcfece3788c4f9a277ac6bf713a02ffefb 100644 (file)
 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 
@@ -153,20 +166,16 @@ class LatexPaper:
                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
@@ -180,12 +189,12 @@ class LatexPaper:
                        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':
@@ -198,25 +207,25 @@ class LatexPaper:
                        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':
@@ -225,8 +234,7 @@ class LatexPaper:
                        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:]):
@@ -344,6 +352,23 @@ dimension_conversion_dict ={
        '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
@@ -399,15 +424,21 @@ output_dict= {
 \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 
@@ -418,6 +449,9 @@ output_dict= {
                  '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
@@ -455,6 +489,11 @@ def output_verbatim (body):
        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>[^}]+)})',
@@ -558,6 +597,8 @@ def compose_full_body (body, opts):
        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
@@ -569,6 +610,16 @@ def compose_full_body (body, opts):
                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
@@ -581,10 +632,15 @@ def compose_full_body (body, opts):
 
        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)
@@ -605,20 +661,23 @@ def compose_full_body (body, opts):
                        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
@@ -954,7 +1013,10 @@ def schedule_lilypond_block (chunk):
                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:
index f00531f78c249859802c30ca53f632ed297c7c4d..a883199cf198f648c9d8b36dcc86de32130f82e8 100644 (file)
@@ -70,6 +70,19 @@ import operator
 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
diff --git a/stepmake/AUTHORS.txt b/stepmake/AUTHORS.txt
deleted file mode 100644 (file)
index a7bed18..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-
-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.
diff --git a/stepmake/INSTALL.txt b/stepmake/INSTALL.txt
deleted file mode 100644 (file)
index a0e5f77..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-
-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!
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index 9fb12ff07431757bc10dba277aa5a61d0c4227a2..86fc71969c547f3a2e1308808342a3e2e26dcdea 100755 (executable)
 # (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)
@@ -29,9 +28,10 @@ def read_makefile (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
 
@@ -39,7 +39,7 @@ class Package:
        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
@@ -80,10 +80,9 @@ def full_version_tup(tup):
                  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))
@@ -103,7 +102,7 @@ def prev_version(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:
@@ -129,24 +128,21 @@ def version_str_to_tuple(str):
                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 ('.')
index 0f70c05204ab521d572684ec8af434e34e5c9296..56726717326050df29a6914f7b8f8804cc895b68 100644 (file)
@@ -1,7 +1,7 @@
 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)