+
+2002-02-18 Han-Wen <hanwen@cs.uu.nl>
+
+ * VERSION: 1.5.31 released
+
+ * lily/new-spacing-spanner.cc: remove file.
+
+ * lily/third-try.cc (do_measure): only take spacings into account
+ if they pertain to the column pair under consideration. This fixes
+ spacing bug when mixing eighths triplets and normal eighths.
+
+ * lily/note-head.cc (brew_molecule): revert ledger change: ledger
+ lines don't take up space anymore. Document why in note-head.cc
+ comment.
+
+2002-02-17 Han-Wen <hanwen@cs.uu.nl>
+
+ * lily/font-interface.cc (get_font): reinstate
+ #'font-magnification. See input/regression/font-magnification.ly
+ (get_font): Change the definition of #'font-name grob property.
+
+ * lily/grob.cc (get_uncached_molecule): output origin for grobs
+ that have a #'cause field.
+
+2002-02-12 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ * Documentation/topdocs/INSTALL.texi: remove type3 stuff.
+
+ * mf/GNUmakefile: remove metapost stuff
+
+ * stepmake/aclocal.m4: remove metapost detection stuff.
+
2002-02-11 Jan Nieuwenhuizen <janneke@gnu.org>
* mf/GNUmakefile (FET_FILES):
@item A reasonably new version of the GNU C++ compiler: EGCS 1.1, GCC 2.95.2 or
newer. Check out @uref{ftp://ftp.gnu.org/gnu/gcc/, the gcc site}.
-@item Python (version 1.5 or newer; not 2.1.x)
+@item Python (version 1.5 or newer; not 2.1.x)
Check out @uref{http://www.python.org, the python website}.
-@item GUILE 1.4 or newer, check out
+@item GUILE 1.4 or newer, check out
@uref{http://www.gnu.org/software/guile/guile.html,the GUILE webpage}.
Version 1.4 is recommended for better performance.
@item pktrace, [OPTIONAL], needed for generating PostScript Type1
-fonts. Get it from @uref{http://www.cs.uu.nl/~hanwen/pktrace/}
-
-@item autotrace-0.27a, [OPTIONAL], needed for generating PostScript Type1
-fonts. @uref{http://autotrace.sourceforge.net}.
-
-@item MetaPost [OPTIONAL] needed for generating PostScript Type3 fonts. Please
-note that tetex-0.4pl8 (included with Red Hat 5.x) does not include
-@file{mfplain.mp}, which is needed for producing the scalable font
-files.
-
-If you don't have MetaPost and don't want to use PostScript output, then
-edit @file{mf/GNUmakefile}, removing the line saying @code{PFA_FILES=}.
-
-
+fonts. Get it from @uref{http://www.cs.uu.nl/~hanwen/pktrace/}. You
+will need to install some additional packages to get pktrace to work.
@end itemize
@code{cmti}, etc. Setting this overrides font-family, font-shape and
font-series.
+
@end table
+
The font is selected by taking the first font that satisfies all
qualifiers specified. You can override any of these fields through
@code{\override} and @code{\revert}. The special value @code{*} matches
The style sheets and tables for selecting fonts are located in
@file{scm/font.scm}. Refer to this file for more information.
+
+Setting @code{font-name} overrides all other qualifiers. The value for
+this property should be a string, the file name of the font. You may use
+this to use special fonts, which are not a part of the style sheet, or
+which have special encodings.
+
+The size of the font may be set with the grob property
+@code{font-magnification}. It is the size of font, relative to its
+standard size. For example, @code{1.0} is normal size.
+
@refbugs
Relative size is not linked to any real size.
-There is no mechanism to select magnification of particular fonts,
-meaning that you don't have access to continuously scaled fonts. You
-can scale the entire output, of course, see @ref{Output scaling}.
-
There is no style sheet provided for other fonts besides the @TeX{}
family.
You need the following packages to compile Lilypond.
- * 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/).
+ * A reasonably new version of the GNU C++ compiler: EGCS 1.1, GCC
+ 2.95.2 or newer. Check out the gcc site
+ (ftp://ftp.gnu.org/gnu/gcc/).
* Python (version 1.5 or newer; not 2.1.x) Check out the python
website (http://www.python.org).
./configure --without-kpathsea --enable-tfm-path=/usr/share/texmf/fonts/tfm/public/cm/:/usr/share/texmf/fonts/tfm/ams/symbols
* pktrace, [OPTIONAL], needed for generating PostScript Type1 fonts.
- Get it from `http://www.cs.uu.nl/~hanwen/pktrace/'
-
- * autotrace-0.27a, [OPTIONAL], needed for generating PostScript Type1
- fonts. `http://autotrace.sourceforge.net'.
-
- * MetaPost [OPTIONAL] needed for generating PostScript Type3 fonts.
- Please note that tetex-0.4pl8 (included with Red Hat 5.x) does not
- include `mfplain.mp', which is needed for producing the scalable
- font files.
-
- If you don't have MetaPost and don't want to use PostScript
- output, then edit `mf/GNUmakefile', removing the line saying
- `PFA_FILES='.
+ Get it from `http://www.cs.uu.nl/~hanwen/pktrace/'. You will
+ need to install some additional packages to get pktrace to work.
Running requirements
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=5
-PATCH_LEVEL=30
-MY_PATCH_LEVEL=uu1.jcn1
+PATCH_LEVEL=31
+MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
METAFONT=$MFONT
fi
- AC_CHECK_PROGS(METAPOST, mp, no)
- if test "x$METAPOST" = "xno"; then
- AC_CHECK_PROGS(MPOST, mpost, -echo no mp or mpost)
-
- METAPOST=$MPOST
- fi
-
AC_CHECK_PROGS(INIMETAFONT, inimf, no)
if test "x$INIMETAFONT" = "xno"; then
AC_CHECK_PROGS(INIMFONT, inimfont, -echo no inimf or inimfont)
INIMETAFONT=$INIMFONT
fi
- AC_CHECK_PROGS(INIMETAPOST, inimp, no)
- if test "x$INIMETAPOST" = "xno"; then
- AC_CHECK_PROGS(INIMPOST, inimpost, -echo no inimp or inimpost)
- INIMETAPOST=$INIMPOST
- fi
-
AC_MSG_CHECKING(for working metafont mode)
modelist='ljfour lj4 lj3 lj2 ljet laserjet'
for MFMODE in $modelist; do
done
AC_MSG_RESULT($MFMODE)
- AC_MSG_CHECKING(for mfplain.mp)
- #
- # For now let people define these in their environments
- #
- : ${MFPLAIN_MP=`kpsewhich --format mp mfplain.mp`}
- AC_MSG_RESULT($MFPLAIN_MP)
-
- AC_MSG_CHECKING(for inimetapost flags)
- if test ${INIMETAPOST} = "inimp" ; then
- : ${INIMETAPOST_FLAGS=''}
- else
- : ${INIMETAPOST_FLAGS='-interaction=nonstopmode'}
- fi
- AC_MSG_RESULT($INIMETAPOST_FLAGS)
-
rm -f mfput.*
AC_SUBST(METAFONT)
- AC_SUBST(METAPOST)
AC_SUBST(MFMODE)
AC_SUBST(INIMETAFONT)
- AC_SUBST(INIMETAPOST)
- AC_SUBST(MFPLAIN_MP)
- AC_SUBST(INIMETAPOST_FLAGS)
])
AC_DEFUN(AC_STEPMAKE_WARN, [
fi
+
+## Urg. We should fix this configure test. -- so clumsy
if test $BISON != "error"; then
- bison_version=`$BISON --version | sed 's/^.*version 1.//g'`
- if test `echo $bison_version | sed 's/\..*$//g'` -lt 25; then
+ bison_version=`$BISON --version | head -1 | sed 's/^.* 1\.//g'`
+ if test $bison_version -lt 25; then
- echo "configure: warning: Your bison is a bit old (1.$bison_version). You might have to install 1.25" 1>&2
+ echo "configure: warning: The bison installed might be too old (1.$bison_version). You might have to install 1.25" 1>&2
warn_b=yes
fi
# 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:2200: checking for $ac_word" >&5
+echo "configure:2202: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2233: checking for $ac_word" >&5
+echo "configure:2235: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
echo $ac_n "checking language""... $ac_c" 1>&6
-echo "configure:2288: checking language" >&5
+echo "configure:2290: checking language" >&5
case "$language" in
En* | en* | Am* | am* | US* | us*)
lang=English;;
echo $ac_n "checking for gettext in -lintl""... $ac_c" 1>&6
-echo "configure:2324: checking for gettext in -lintl" >&5
+echo "configure:2326: checking for gettext in -lintl" >&5
ac_lib_var=`echo intl'_'gettext | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lintl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2332 "configure"
+#line 2334 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
gettext()
; return 0; }
EOF
-if { (eval echo configure:2346: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
for ac_func in gettext
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2376: checking for $ac_func" >&5
+echo "configure:2378: 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 2381 "configure"
+#line 2383 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:2407: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2439: checking for $ac_word" >&5
+echo "configure:2441: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_MSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
test -n "$MSGFMT" || MSGFMT="\$(SHELL) \$(step-bindir)/fake-msgfmt.sh "
echo $ac_n "checking whether msgfmt accepts -o""... $ac_c" 1>&6
-echo "configure:2470: checking whether msgfmt accepts -o" >&5
+echo "configure:2472: checking whether msgfmt accepts -o" >&5
msgfmt_output="`msgfmt -o bla 2>&1 | grep usage`"
if test "$msgfmt_output" = ""; then
echo "$ac_t""yes" 1>&6
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2498: checking for $ac_word" >&5
+echo "configure:2500: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_METAFONT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2534: checking for $ac_word" >&5
+echo "configure:2536: 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
METAFONT=$MFONT
fi
- for ac_prog in mp
-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:2572: 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
- if test -n "$METAPOST"; then
- ac_cv_prog_METAPOST="$METAPOST" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_METAPOST="$ac_prog"
- break
- fi
- done
- IFS="$ac_save_ifs"
-fi
-fi
-METAPOST="$ac_cv_prog_METAPOST"
-if test -n "$METAPOST"; then
- echo "$ac_t""$METAPOST" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-test -n "$METAPOST" && break
-done
-test -n "$METAPOST" || METAPOST="no"
-
- if test "x$METAPOST" = "xno"; then
- for ac_prog in mpost
-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:2608: 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
- if test -n "$MPOST"; then
- ac_cv_prog_MPOST="$MPOST" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_MPOST="$ac_prog"
- break
- fi
- done
- IFS="$ac_save_ifs"
-fi
-fi
-MPOST="$ac_cv_prog_MPOST"
-if test -n "$MPOST"; then
- echo "$ac_t""$MPOST" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-test -n "$MPOST" && break
-done
-test -n "$MPOST" || MPOST="-echo no mp or mpost"
-
-
- METAPOST=$MPOST
- fi
-
for ac_prog in inimf
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:2647: checking for $ac_word" >&5
+echo "configure:2574: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_INIMETAFONT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2683: checking for $ac_word" >&5
+echo "configure:2610: 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
INIMETAFONT=$INIMFONT
fi
- for ac_prog in inimp
-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:2721: 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
- if test -n "$INIMETAPOST"; then
- ac_cv_prog_INIMETAPOST="$INIMETAPOST" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_INIMETAPOST="$ac_prog"
- break
- fi
- done
- IFS="$ac_save_ifs"
-fi
-fi
-INIMETAPOST="$ac_cv_prog_INIMETAPOST"
-if test -n "$INIMETAPOST"; then
- echo "$ac_t""$INIMETAPOST" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-test -n "$INIMETAPOST" && break
-done
-test -n "$INIMETAPOST" || INIMETAPOST="no"
-
- if test "x$INIMETAPOST" = "xno"; then
- for ac_prog in inimpost
-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:2757: 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
- if test -n "$INIMPOST"; then
- ac_cv_prog_INIMPOST="$INIMPOST" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_INIMPOST="$ac_prog"
- break
- fi
- done
- IFS="$ac_save_ifs"
-fi
-fi
-INIMPOST="$ac_cv_prog_INIMPOST"
-if test -n "$INIMPOST"; then
- echo "$ac_t""$INIMPOST" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-test -n "$INIMPOST" && break
-done
-test -n "$INIMPOST" || INIMPOST="-echo no inimp or inimpost"
-
- INIMETAPOST=$INIMPOST
- fi
-
echo $ac_n "checking for working metafont mode""... $ac_c" 1>&6
-echo "configure:2791: checking for working metafont mode" >&5
+echo "configure:2644: 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
done
echo "$ac_t""$MFMODE" 1>&6
- echo $ac_n "checking for mfplain.mp""... $ac_c" 1>&6
-echo "configure:2802: checking for mfplain.mp" >&5
- #
- # For now let people define these in their environments
- #
- : ${MFPLAIN_MP=`kpsewhich --format mp mfplain.mp`}
- echo "$ac_t""$MFPLAIN_MP" 1>&6
-
- echo $ac_n "checking for inimetapost flags""... $ac_c" 1>&6
-echo "configure:2810: checking for inimetapost flags" >&5
- if test ${INIMETAPOST} = "inimp" ; then
- : ${INIMETAPOST_FLAGS=''}
- else
- : ${INIMETAPOST_FLAGS='-interaction=nonstopmode'}
- fi
- echo "$ac_t""$INIMETAPOST_FLAGS" 1>&6
-
rm -f mfput.*
-
-
-
-
# Check whether --enable-tfm-path or --disable-tfm-path was given.
# 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:2843: checking for $ac_word" >&5
+echo "configure:2675: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_KPSEWHICH'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
test -n "$KPSEWHICH" || KPSEWHICH="no"
echo $ac_n "checking for tfm path""... $ac_c" 1>&6
-echo "configure:2874: checking for tfm path" >&5
+echo "configure:2706: checking for tfm path" >&5
TFM_FONTS="cmr msam"
## First, let's just see if we can find Guile at all.
echo $ac_n "checking "for guile-config"""... $ac_c" 1>&6
-echo "configure:2902: checking "for guile-config"" >&5
+echo "configure:2734: 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:2908: checking "if we are cross compiling"" >&5
+echo "configure:2740: checking "if we are cross compiling"" >&5
guile_config=error
else
break
exit 1
fi
echo $ac_n "checking "Guile version"""... $ac_c" 1>&6
-echo "configure:2919: checking "Guile version"" >&5
+echo "configure:2751: checking "Guile version"" >&5
need_guile_version="1.3.4"
need_guile_version_numeric=100304
guile_version=`$guile_config --version 2>&1 | awk '{print $NF}'`
## The GUILE_FLAGS macro.
echo $ac_n "checking for Guile""... $ac_c" 1>&6
-echo "configure:2940: checking for Guile" >&5
+echo "configure:2772: checking for Guile" >&5
if ! $guile_config link > /dev/null ; then
echo "$ac_t"""cannot execute $guile_config"" 1>&6
{ echo "configure: error: "cannot find guile-config; is Guile installed?"" 1>&2; exit 1; }
# Extract the first word of "guile", so it can be a program name with args.
set dummy guile; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2955: checking for $ac_word" >&5
+echo "configure:2787: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_GUILE'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3016: checking for $ac_hdr" >&5
+echo "configure:2848: 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 3021 "configure"
+#line 2853 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3026: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2858: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
done
echo $ac_n "checking for kpse_find_file in -lkpathsea""... $ac_c" 1>&6
-echo "configure:3053: checking for kpse_find_file in -lkpathsea" >&5
+echo "configure:2885: checking for kpse_find_file in -lkpathsea" >&5
ac_lib_var=`echo kpathsea'_'kpse_find_file | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lkpathsea $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3061 "configure"
+#line 2893 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
kpse_find_file()
; return 0; }
EOF
-if { (eval echo configure:3075: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2907: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
for ac_func in kpse_find_file
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3105: checking for $ac_func" >&5
+echo "configure:2937: 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 3110 "configure"
+#line 2942 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:3136: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2968: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
fi
echo $ac_n "checking whether to use kpathsea""... $ac_c" 1>&6
-echo "configure:3163: checking whether to use kpathsea" >&5
+echo "configure:2995: checking whether to use kpathsea" >&5
if test "$kpathsea_b" != no; then
echo "$ac_t""yes" 1>&6
KPATHSEA=1
echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
-echo "configure:3191: checking for 8-bit clean memcmp" >&5
+echo "configure:3023: checking for 8-bit clean memcmp" >&5
if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_func_memcmp_clean=no
else
cat > conftest.$ac_ext <<EOF
-#line 3199 "configure"
+#line 3031 "configure"
#include "confdefs.h"
main()
}
EOF
-if { (eval echo configure:3209: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3041: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_memcmp_clean=yes
else
test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}"
echo $ac_n "checking for vprintf""... $ac_c" 1>&6
-echo "configure:3227: checking for vprintf" >&5
+echo "configure:3059: 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 3232 "configure"
+#line 3064 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char vprintf(); below. */
; return 0; }
EOF
-if { (eval echo configure:3258: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3090: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_vprintf=yes"
else
if test "$ac_cv_func_vprintf" != yes; then
echo $ac_n "checking for _doprnt""... $ac_c" 1>&6
-echo "configure:3282: checking for _doprnt" >&5
+echo "configure:3114: 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 3287 "configure"
+#line 3119 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char _doprnt(); below. */
; return 0; }
EOF
-if { (eval echo configure:3313: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3145: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func__doprnt=yes"
else
for ac_func in memmem snprintf vsnprintf gettext isinf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3340: checking for $ac_func" >&5
+echo "configure:3172: 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 3345 "configure"
+#line 3177 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:3371: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3203: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3411: checking for $ac_word" >&5
+echo "configure:3243: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test "$MAKEINFO" != "error"; then
echo $ac_n "checking whether makeinfo can split html by @node""... $ac_c" 1>&6
-echo "configure:3443: checking whether makeinfo can split html by @node" >&5
+echo "configure:3275: checking whether makeinfo can split html by @node" >&5
mkdir -p out
makeinfo --html --output=out/split <<EOF
\input texinfo
# Extract the first word of "perl", so it can be a program name with args.
set dummy perl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3471: checking for $ac_word" >&5
+echo "configure:3303: 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
fi
-for ac_hdr in python2.1/Python.h python2.0/Python.h python2/Python.h python/Python.h python1.5/Python.h Python.h
+for ac_hdr in python2.2/Python.h python2.1/Python.h python2.0/Python.h python2/Python.h python/Python.h python1.5/Python.h Python.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3509: checking for $ac_hdr" >&5
+echo "configure:3341: 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 3514 "configure"
+#line 3346 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3519: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3351: \"$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*
s%@MSGFMT@%$MSGFMT%g
s%@METAFONT@%$METAFONT%g
s%@MFONT@%$MFONT%g
-s%@METAPOST@%$METAPOST%g
-s%@MPOST@%$MPOST%g
s%@INIMETAFONT@%$INIMETAFONT%g
s%@INIMFONT@%$INIMFONT%g
-s%@INIMETAPOST@%$INIMETAPOST%g
-s%@INIMPOST@%$INIMPOST%g
s%@MFMODE@%$MFMODE%g
-s%@MFPLAIN_MP@%$MFPLAIN_MP%g
-s%@INIMETAPOST_FLAGS@%$INIMETAPOST_FLAGS%g
s%@KPSEWHICH@%$KPSEWHICH%g
s%@TFM_PATH@%$TFM_PATH%g
s%@GUILE_CFLAGS@%$GUILE_CFLAGS%g
+++ /dev/null
-\header {
- texidoc="Flat clashes with change-clef. After real word example."
-}
-\score {
- <
- \time 3/4
- \context Staff=a \notes\relative c'' {
-
- a16 a a a a a a a
- a16 a a a
- }
- \context Staff=b \notes\relative c' {
- \clef bass a16 a a a b8 b \clef violin ces4
- }
- >
- \paper{
- linewidth= -1.
- }
-}
\ No newline at end of file
+++ /dev/null
-
-\header {
-texidoc = "If possible clef changes and the like
-should be folded under notes of the different staff
-"
-}
-
-\score { \notes \relative c'' < \context Staff = SA {
-c4 c16 c c c cis4 cis4
-c4 c4 c4 c
-
-
- }
- { \key d \major c2
- \clef bass
- c,2 c cis2 } >
-
- \paper { linewidth = -1. }
- }
-
-
--- /dev/null
+\header { texidoc = "The magnification can be set for any font. Note
+that this doesn't change variable symbols such as beams or slurs. " }
+
+\score {
+\notes \relative c'' \context Voice {
+\property Voice .NoteHead \set #'font-magnification = #0.9
+c4
+\property Voice .NoteHead \set #'font-magnification = #0.8
+
+
+ % why doesn't this work?
+ c4-#'((font-series . bold) ((font-magnification . 2.0) ("foobar")))
+
+ \property Voice .NoteHead \set #'font-magnification = #1.2
+ \property Voice.TextScript \set #'font-magnification = #2.0
+ c4-"big"
+ \property Voice .NoteHead \set #'font-magnification = #1.6
+ c4
+}
+
+}
+
return Font_interface::get_default_font (gr)->self_scm ();
}
+
Font_metric *
Font_interface::get_font (Grob *me, SCM chain)
{
+ SCM name = me->get_grob_property ("font-name");
- SCM ss = me->paper_l ()->style_sheet_;
-
- SCM proc = ly_cdr (scm_assoc (ly_symbol2scm ("properties-to-font"),
- ss));
+ if (!gh_string_p (name))
+ {
+ SCM ss = me->paper_l ()->style_sheet_;
- SCM fonts = ly_cdr (scm_assoc (ly_symbol2scm ("fonts"), ss));
+ SCM proc = ly_cdr (scm_assoc (ly_symbol2scm ("properties-to-font"),
+ ss));
- assert (gh_procedure_p (proc));
- SCM font_name = gh_call2 (proc, fonts, chain);
+ SCM fonts = ly_cdr (scm_assoc (ly_symbol2scm ("fonts"), ss));
- Font_metric *fm = me->paper_l ()->find_font (font_name, 1.0);
+ assert (gh_procedure_p (proc));
+ name = gh_call2 (proc, fonts, chain);
+ }
+
+ SCM mag = me->get_grob_property ("font-magnification");
+ Real rmag = gh_number_p (mag) ? gh_scm2double (mag) : 1.0;
+
+ Font_metric *fm = me->paper_l ()->find_font (name, rmag);
return fm;
}
*/
-static SCM name_sym, shape_sym, family_sym, series_sym, rel_sz_sym, design_sz_sym, wild_sym;
+static SCM shape_sym, family_sym, series_sym, rel_sz_sym, design_sz_sym, wild_sym;
static void
init_syms ()
{
- name_sym = scm_permanent_object (ly_symbol2scm ("font-name"));
shape_sym = scm_permanent_object (ly_symbol2scm ("font-shape"));
family_sym = scm_permanent_object (ly_symbol2scm ("font-family"));
series_sym = scm_permanent_object (ly_symbol2scm ("font-series"));
SCM
Font_interface::properties_to_font_name (SCM fonts, SCM alist_chain)
{
- SCM name = ly_assoc_chain (name_sym, alist_chain);
-
SCM shape = SCM_BOOL_F;
SCM family = SCM_BOOL_F;
SCM series = SCM_BOOL_F;
SCM point_sz = ly_assoc_chain (design_sz_sym, alist_chain);
SCM rel_sz = SCM_BOOL_F;
- if (!gh_pair_p (name))
- {
- shape = ly_assoc_chain (shape_sym, alist_chain);
- family = ly_assoc_chain (family_sym, alist_chain);
- series = ly_assoc_chain (series_sym, alist_chain);
-
- if (gh_pair_p (shape))
- shape = ly_cdr (shape);
- if (gh_pair_p (family))
- family = ly_cdr (family);
- if (gh_pair_p (series))
- series = ly_cdr (series);
- }
- else
- name = ly_cdr (name);
+ shape = ly_assoc_chain (shape_sym, alist_chain);
+ family = ly_assoc_chain (family_sym, alist_chain);
+ series = ly_assoc_chain (series_sym, alist_chain);
+
+ if (gh_pair_p (shape))
+ shape = ly_cdr (shape);
+ if (gh_pair_p (family))
+ family = ly_cdr (family);
+ if (gh_pair_p (series))
+ series = ly_cdr (series);
if (gh_pair_p (point_sz))
{
SCM qlist = ly_caar (s);
- if (name != SCM_BOOL_F)
- {
- if (!wild_compare (scm_list_ref (qlist, gh_int2scm (4)), name))
- continue;
- }
- else
- {
- if (!wild_compare (scm_list_ref (qlist, gh_int2scm (1)), series))
- continue;
- if (!wild_compare (scm_list_ref (qlist, gh_int2scm (2)), shape))
- continue;
- if (!wild_compare (scm_list_ref (qlist, gh_int2scm (3)), family))
- continue;
- }
+ if (!wild_compare (scm_list_ref (qlist, gh_int2scm (1)), series))
+ continue;
+ if (!wild_compare (scm_list_ref (qlist, gh_int2scm (2)), shape))
+ continue;
+ if (!wild_compare (scm_list_ref (qlist, gh_int2scm (3)), family))
+ continue;
- if (point_sz != SCM_BOOL_F)
- {
- // This if statement will always be true since name must
- // be SCM_BOOL_F here, right? /MB
- if (!wild_compare (scm_list_ref (qlist, gh_int2scm (4)), name))
- continue;
- }
- else
- {
- if (!wild_compare (ly_car (qlist), rel_sz))
- continue;
- }
-
-
+ if (point_sz == SCM_BOOL_F && !wild_compare (ly_car (qlist), rel_sz))
+ continue;
+
SCM qname = ly_cdar (s);
return qname;
}
warning (_ ("couldn't find any font satisfying "));
- scm_write (scm_list_n (name, point_sz, shape, series , family, rel_sz, SCM_UNDEFINED), scm_current_error_port ());
+ scm_write (scm_list_n (point_sz, shape, series , family, rel_sz, SCM_UNDEFINED), scm_current_error_port ());
scm_flush (scm_current_error_port ());
return ly_str02scm ("cmr10");
/*
- score-elem.cc -- implement Grob
+ grob.cc -- implement Grob
source file of the GNU LilyPond music typesetter
#include <string.h>
#include <math.h>
+#include "main.hh"
#include "input-smob.hh"
-#include "libc-extension.hh"
+
#include "group-interface.hh"
#include "misc.hh"
#include "paper-score.hh"
#include "molecule.hh"
#include "misc.hh"
#include "paper-outputter.hh"
-#include "dimension-cache.hh"
-#include "side-position-interface.hh"
+#include "music.hh"
#include "item.hh"
#include "ly-smobs.icc"
if (unsmob_molecule (mol))
{
- /*
- TODO: add option for not copying origin info.
- */
- SCM origin =get_grob_property ("origin");
- if (!unsmob_input (origin))
- origin =ly_symbol2scm ("no-origin");
-
+ SCM origin = ly_symbol2scm ("no-origin");
+ if (store_locations_global_b){
+ SCM cause = get_grob_property ("cause");
+ if (Music*m = unsmob_music (cause))
+ {
+ SCM music_origin = m->get_mus_property ("origin");
+ if (unsmob_input (music_origin))
+ origin = music_origin;
+ }
+ }
+
// ugr.
mol = Molecule (m->extent_box (),
class Molecule {
Box dim_;
SCM expr_;
-
DECLARE_SIMPLE_SMOBS (Molecule,);
public:
j ++;
loose = dynamic_cast<Item*> (unsmob_grob (ly_cdr (between)));
}
-
}
}
+++ /dev/null
-/*
- spacing-spanner.cc -- implement Spacing_spanner
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1999--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-
- */
-
-
-#include "paper-column.hh"
-#include "dimensions.hh"
-#include "paper-def.hh"
-#include "warn.hh"
-#include "paper-score.hh"
-#include "line-of-score.hh"
-#include "misc.hh"
-#include "separation-item.hh"
-#include "spanner.hh"
-#include "spring.hh"
-
-class New_spacing_spanner
-{
-public:
- static void set_interface (Grob*);
- static void do_measure (Grob*,Link_array<Grob> *) ;
- static void stretch_to_regularity (Grob*, Array<Spring> *, Link_array<Grob> const &);
- static void breakable_column_spacing (Item* l, Item *r);
- DECLARE_SCHEME_CALLBACK (set_springs, (SCM ));
- static Real default_bar_spacing (Grob*,Grob*,Grob*,Moment) ;
- static Real note_spacing (Grob*,Grob*,Grob*,Moment) ;
- static Real get_duration_space (Grob*,Moment dur, Moment shortest) ;
- static void prune_loose_colunms (Link_array<Grob>*);
-};
-
-void
-New_spacing_spanner::set_interface (Grob*me)
-{
- me->set_extent_callback (SCM_EOL, X_AXIS);
- me->set_extent_callback (SCM_EOL, Y_AXIS) ;
-}
-
-/*
- Remove all columns that are not tightly
- fitting part of the spacing problem.
- */
-void
-New_spacing_spanner::prune_loose_colunms (Link_array<Grob> *cols)
-{
- for (int i = cols->size(); i--;)
- {
- SCM between = cols->elem(i)->get_grob_property ("between-cols");
- if (!gh_pair_p (between))
- continue;
-
- Item * l = dynamic_cast<Item*> (unsmob_grob (gh_car (between)));
- Item * r = dynamic_cast<Item*> (unsmob_grob (gh_cdr (between)));
- if (l->column_l () != cols->elem (i-1)
- || r->column_l () != cols->elem (i +1))
- {
- cols->del (i);
- }
- }
-}
-
-/*
-
- The algorithm is partly taken from :
-
- John S. Gourlay. ``Spacing a Line of Music,'' Technical Report
- OSU-CISRC-10/87-TR35, Department of Computer and Information
- Science, The Ohio State University, 1987.
-
- TOO HAIRY.
-
- TODO: write comments
-
- */
-void
-New_spacing_spanner::do_measure (Grob*me, Link_array<Grob> *cols)
-{
- Moment shortest_in_measure;
-
- /*
- space as if this duration is present.
- */
- Moment base_shortest_duration = *unsmob_moment (me->get_grob_property ("maximum-duration-for-spacing"));
- shortest_in_measure.set_infinite (1);
-
- prune_loose_colunms (cols);
-
- for (int i =0 ; i < cols->size (); i++)
- {
- if (Paper_column::musical_b (cols->elem (i)))
- {
- Moment *when = unsmob_moment (cols->elem (i)->get_grob_property ("when"));
-
- /*
- ignore grace notes for shortest notes.
- */
- if (when && when->grace_part_)
- continue;
-
- SCM st = cols->elem (i)->get_grob_property ("shortest-starter-duration");
- Moment this_shortest = *unsmob_moment (st);
- shortest_in_measure = shortest_in_measure <? this_shortest;
- }
- }
-
- Array<Spring> springs;
-
- Item * first_col = 0;
- for (int i= 0; i < cols->size () - 1; i++)
- {
- Item * l = dynamic_cast<Item*> (cols->elem (i));
-
- if (!first_col && Paper_column::musical_b (l))
- first_col = l;
-
- Item * r = dynamic_cast<Item*> (cols->elem (i+1));
- Paper_column * lc = dynamic_cast<Paper_column*> (l);
- Paper_column *rc = dynamic_cast<Paper_column*> (r);
-
-
-#if 0
-cout << "params for cols " << Paper_column::rank_i (l) << " " << Paper_column::rank_i (r) << endl;
- cout << " musical: " << Paper_column::musical_b (l) << " " << Paper_column::musical_b (r) << endl;
-#endif
-
- if (!Paper_column::musical_b (l))
- {
- breakable_column_spacing (l, r);
-
- l = l->find_prebroken_piece (RIGHT);
- if (l)
- breakable_column_spacing (l,r);
-
- continue ;
- }
-
- Real note_space = note_spacing (me,lc, rc, shortest_in_measure <? base_shortest_duration);
- Real hinterfleisch = note_space;
- Real headwid = gh_scm2double (me->get_grob_property ("arithmetic-multiplier"));
-
- SCM seq = lc->get_grob_property ("spacing-sequence");
-
- Moment dt = Paper_column::when_mom (r) - Paper_column::when_mom (l);
-
- /*
- hinterfleisch = hind-meat = amount of space following a note.
-
-
- We adjust the space following a note only if the next note
- happens after the current note (this is set in the grob
- property SPACING-SEQUENCE. */
-
- Real stretch_distance = note_space;
- if (shortest_in_measure <= dt)
- {
- /*
- currently SPACING-SEQUENCE is set in
- Separating_group_spanner::find_musical_sequences (), which
- works neatly for one-voice-per staff, however,
-
- it can't find out the actual duration of the notes on a
- staff, so when putting tuplets and normal patterns it gets
- confused, (ie. believes that < { c8 c8 } { d8 d8 d8 }*2/3
- > contains 1/12 notes. ).
-
- here we kludge, by checking if the distance we're spacing
- for is less than the shortest note.
-
- TODO:
-
- Move SPACING-SEQUENCE detection into a voice
- level-engraver --or-- make sure that every column has
- access to the note head.
-
- */
- for (SCM s = seq; gh_pair_p (s); s = ly_cdr (s))
- {
- Grob *lm = unsmob_grob (ly_caar (s));
- Grob *rm = unsmob_grob (ly_cdar (s));
-
- // TODO; configgable.
- hinterfleisch += -headwid + Separation_item::my_width (lm)[RIGHT] -
- 0.5 * Separation_item::my_width (rm)[LEFT];
-
- }
-
- // ? why.
- if (gh_pair_p (seq))
- stretch_distance -= headwid;
- }
- Spring s;
- s.distance_f_ = hinterfleisch;
- s.strength_f_ = 1 / stretch_distance;
-
- s.item_l_drul_[LEFT] = l;
- s.item_l_drul_[RIGHT] = r;
-
- s.add_to_cols();
- if (r->find_prebroken_piece (LEFT))
- {
- s.item_l_drul_[RIGHT] = r->find_prebroken_piece(LEFT);
- s.add_to_cols();
- }
- }
-
-}
-
-/*
- Read hints from L (todo: R) and generate springs.
- */
-void
-New_spacing_spanner::breakable_column_spacing (Item* l, Item *r)
-{
- Spring s;
-
- Real break_dist = 0.0;
- SCM espace = l->get_grob_property ("extra-space");
- if (gh_pair_p (espace))
- break_dist += gh_scm2double (ly_cdr (espace));
-
- if (!break_dist)
- break_dist = 1.0;
-
- Real break_stretch = 0.0;
-
- // todo: naming of "distance"
- espace = l->get_grob_property ("stretch-distance");
- if (gh_pair_p (espace))
- break_stretch += gh_scm2double (ly_cdr (espace));
-
- if (!break_stretch)
- break_stretch = 1.0;
-
- s.distance_f_ = break_dist;
- s.strength_f_ = 1/break_stretch;
- s.item_l_drul_[LEFT] = l;
- s.item_l_drul_[RIGHT] = r;
-
- s.add_to_cols ();
-}
-
-/*
- Look at COLS, searching for columns that have 'regular-distance-to
- set. A sequence of columns that have this property set should have
- an equal distance (an equispaced run). Extract the projected
- distance from SPRINGS, and scale SPRINGS for the equispaced run, to the
- widest space necessary.
-
-
- TODO:
-
- -- inefficient code; maybe it is easier to twiddle with the springs
- after they've become grob properties (ie. have their
- minimum-distances set)
-
- -- does not adjust strength field of the springs very well: result
- awkward spacing at the start of a line. (?)
-
- -- will be confused when there are multiple equispaced runs in a measure.
-
- -- dealing with springs for line breaks is a little tricky; in any
- case, we will only space per measure.
-
- -- we scale to actual distances, not to optical effects. Eg. if the
- equispaced run contains optical corrections, then the scaling will
- cancel those.
-
- -- Regular_spacing_engraver doesn't mark the first column of the
- next bar, making the space before a barline too short, in this case
-
-
- x<- 16ths--> x(8th)
- x(8th) x(8th) <- equispaced run.
-
-*/
-
-void
-New_spacing_spanner::stretch_to_regularity (Grob *me,
- Array<Spring> * springs,
- Link_array<Grob> const & cols)
-{
- /*
- Find the starting column of the run. REGULAR-DISTANCE-TO points
- back to a previous column, so we look ahead to find a column
- pointing back to the first one.
-
- */
- Grob * first_regular_spaced_col = 0;
- for (int i = 0 ; i < cols.size () && !first_regular_spaced_col; i++)
- {
- SCM rdt = cols[i]->get_grob_property ("regular-distance-to");
- if (cols.find_l (dynamic_cast<Item*> (unsmob_grob (rdt))))
- first_regular_spaced_col = unsmob_grob (rdt);
- }
- for (int i = springs->size (); i-- ;)
- springs->elem (i).set_to_cols ();
-
- int i;
- for (i = 0; i < springs->size ()
- && springs->elem (i).item_l_drul_[RIGHT] != first_regular_spaced_col;
- i++)
- ;
-
-
- if (i==springs->size ())
- return ;
-
- Real maxdist = 0.0;
- Real dist =0.0;
- Grob *last_col = first_regular_spaced_col;
- Grob *last_regular_spaced_col = first_regular_spaced_col;
-
-
- /*
- find the max distance for this run.
- */
- for (int j = i; j < springs->size (); j++)
- {
- Spring *s = &(springs->elem_ref (j));
- if (s->item_l_drul_[LEFT] != last_col)
- continue;
-
- dist += s->distance_f_;
-
- last_col = s->item_l_drul_[RIGHT];
- SCM rdt = last_col->get_grob_property ("regular-distance-to");
- if (unsmob_grob (rdt) == last_regular_spaced_col)
- {
- maxdist = maxdist >? dist;
- dist = 0.0;
- last_regular_spaced_col = last_col;
- }
-
- }
-
- /*
- Scale the springs
- */
- dist =0.0;
- last_col = first_regular_spaced_col;
- last_regular_spaced_col = first_regular_spaced_col;
- for (int j = i; j < springs->size (); j++)
- {
- Spring *s = &springs->elem_ref (j);
- if (s->item_l_drul_[LEFT] != last_col)
- continue;
- dist += s->distance_f_;
-
- last_col = s->item_l_drul_[RIGHT];
- SCM rdt = last_col->get_grob_property ("regular-distance-to");
- if (unsmob_grob (rdt) == last_regular_spaced_col)
- {
- do {
- springs->elem_ref (i).distance_f_ *= maxdist / dist;
- springs->elem_ref (i).strength_f_ *= dist / maxdist;
- } while (i++ < j);
- last_regular_spaced_col = last_col;
- dist =0.0;
- }
- }
-}
-
-/**
- Do something if breakable column has no spacing hints set.
- */
-Real
-New_spacing_spanner::default_bar_spacing (Grob*me, Grob *lc, Grob *rc,
- Moment shortest)
-{
- Real symbol_distance = lc->extent (lc,X_AXIS)[RIGHT] ;
- Real durational_distance = 0;
- Moment delta_t = Paper_column::when_mom (rc) - Paper_column::when_mom (lc);
-
- /*
- ugh should use shortest_playing distance
- */
- if (delta_t.to_bool ())
- {
- durational_distance = get_duration_space (me, delta_t, shortest);
- }
-
- return symbol_distance >? durational_distance;
-}
-
-
-/**
- Get the measure wide ant for arithmetic spacing.
-
- @see
- John S. Gourlay. ``Spacing a Line of Music,'' Technical Report
- OSU-CISRC-10/87-TR35, Department of Computer and Information Science,
- The Ohio State University, 1987.
-
- */
-Real
-New_spacing_spanner::get_duration_space (Grob*me, Moment d, Moment shortest)
-{
- Real log = log_2 (shortest.main_part_);
- Real k = gh_scm2double (me->get_grob_property ("arithmetic-basicspace"))
- - log;
-
- Rational compdur = d.main_part_ + d.grace_part_ /Rational (3);
-
- return (log_2 (compdur) + k) * gh_scm2double (me->get_grob_property ("arithmetic-multiplier"));
-}
-
-
-Real
-New_spacing_spanner::note_spacing (Grob*me, Grob *lc, Grob *rc,
- Moment shortest)
-{
- Moment shortest_playing_len = 0;
- SCM s = lc->get_grob_property ("shortest-playing-duration");
-
-
- if (unsmob_moment (s))
- shortest_playing_len = *unsmob_moment (s);
-
- if (! shortest_playing_len.to_bool ())
- {
- programming_error ("can't find a ruling note at " + Paper_column::when_mom (lc).str ());
- shortest_playing_len = 1;
- }
-
- if (! shortest.to_bool ())
- {
- programming_error ("no minimum in measure at " + Paper_column::when_mom (lc).str ());
- shortest = 1;
- }
- Moment delta_t = Paper_column::when_mom (rc) - Paper_column::when_mom (lc);
- Real dist = 0.0;
-
- if (delta_t.main_part_)
- {
- dist = get_duration_space (me, shortest_playing_len, shortest);
- dist *= (double) (delta_t.main_part_ / shortest_playing_len.main_part_);
- }
- else if (delta_t.grace_part_)
- {
- dist = get_duration_space (me, shortest, shortest);
-
- Real grace_fact = 1.0;
- SCM gf = me->get_grob_property ("grace-space-factor");
- if (gh_number_p (gf))
- grace_fact = gh_scm2double (gf);
-
- dist *= grace_fact;
- }
-
-#if 0
- /*
- TODO: figure out how to space grace notes.
- */
-
- dist *=
- + grace_fact * (double) (delta_t.grace_part_ / shortest_playing_len.main_part_);
-
-
- Moment *lm = unsmob_moment (lc->get_grob_property ("when"));
- Moment *rm = unsmob_moment (rc->get_grob_property ("when"));
-
- if (lm && rm)
- {
- if (lm->grace_part_ && rm->grace_part_)
- dist *= 0.5;
- else if (!rm->grace_part_ && lm->grace_part_)
- dist *= 0.7;
- }
-#endif
-
- return dist;
-}
-
-
-
-MAKE_SCHEME_CALLBACK (New_spacing_spanner, set_springs,1);
-SCM
-New_spacing_spanner::set_springs (SCM smob)
-{
- Grob *me = unsmob_grob (smob);
- Link_array<Grob> all (me->pscore_l_->line_l_->column_l_arr ()) ;
-
- int j = 0;
-
- for (int i = 1; i < all.size (); i++)
- {
- Grob *sc = all[i];
- if (Item::breakable_b (sc))
- {
- Link_array<Grob> measure (all.slice (j, i+1));
- do_measure (me, &measure);
- j = i;
- }
- }
-
- /*
- farewell, cruel world
- */
- me->suicide ();
- return SCM_UNSPECIFIED;
-}
-
-
-
-/*
- maximum-duration-for-spacing
-From: bf250@freenet.carleton.ca (John Sankey)
-To: gnu-music-discuss@gnu.org
-Subject: note spacing suggestion
-Date: Mon, 10 Jul 2000 11:28:03 -0400 (EDT)
-
-Currently, Lily spaces notes by starting with a basic distance,
-arithmetic_multiplier, which it applies to the minimum duration note
-of the bar. Then she adds a logarithmic increment, scaled from
-arithmetic_basicspace, for longer notes. (Then, columns are aligned
-and justified.) Fundamentally, this matches visual spacing to musical
-weight and works well.
-
-A lot of the time in music, I see a section basically in melodic
-notes that occasionally has a rapid ornamental run (scale). So, there
-will be a section in 1/4 notes, then a brief passage in 1/32nds, then
-a return to long notes. Currently, Lily gives the same horizontal
-space to the 1/32nd notes in their bar (even if set in small size as
-is commonly done for cadenzii) as she gives to 1/4 notes in bars
-where 1/4 note is the minimum duration. The resulting visual weight
-does not match the musical weight over the page.
-
-Looking at the music I am typesetting, I feel that Lily's spacing
-could be significantly improved if, with no change in the basic
-method used, arithmetic_multiplier could be applied referred to the
-same duration throughout a piece. Of course, the current method
-should be retained for those who have already set music in it, so I
-suggest a property called something like arithmetic_base=16 to fix
-1/16 duration as the reference for arithmetic_multiplier; the default
-would be a dynamic base is it is now.
-
-Does anyone else feel that this would be a useful improvement for
-their music? (Of course, if arithmetic_multiplier became a regular
-property, this could be used to achieve a similar result by
-tweaking.)
-
- */
#include "rhythmic-head.hh"
/*
- Note_head contains the code for printing note heads and the ledger lines.
+ Note_head contains the code for printing note heads.
+
+
+
+ Ledger lines:
+
+ It also contains the ledger lines, for historical reasons. Ledger
+ lines are somewhat of a PITA. In some cases, they take up no space, in
+ some cases they don't:
+
+ DO take space:
+
+ - when ledgered notes are juxtaposed: there should be some white
+ space between the ledger lines.
+
+ - when accidentals are near: the accidentals should not be on the ledger lines
+
+ [both tips by Heinz Stolba from Universal Edition].
+
+ DO NOT take space into account:
+
+ - for basically everything else, e.g. swapping ledgered notes on
+ clustered chords, spacing between ledgered and unledgered notes.
+
+
+ TODO: fix this. It is not feasible to have a special grob for
+ ledgers, since you basically don't know if there will be ledgers,
+ unless you know at interpretation phase already 1. the Y-position,
+ 2. the number of staff lines. It's not yet specced when both pieces
+ of information are there, so for now, it is probably better to build
+ special support for ledgers into the accidental and separation-item
+ code.
+
+ (Besides a separate ledger seems overkill. For what else would
+ it be useful?)
- TODO: maybe it's worthwhile to split away the Ledger lines into a
- separate grob. */
+
+
+*/
#include "staff-symbol-referencer.hh"
return out;
}
-MAKE_SCHEME_CALLBACK (Note_head,brew_molecule,1);
+MAKE_SCHEME_CALLBACK (Note_head,brew_molecule,1);
SCM
Note_head::brew_molecule (SCM smob)
{
Grob *me = unsmob_grob (smob);
- return internal_brew_molecule (me, true).smobbed_copy ();
+
+ /*
+ ledgers don't take space. See top of file.
+ */
+ return internal_brew_molecule (me, false).smobbed_copy ();
}
/*
Molecule
Text_item::lookup_text (Grob *me, Font_metric*fm, SCM text)
{
-#if 0
- /*
- Fixme; should be done differently, move to font-interface?
-
- differently -- how/why?
- */
-
- SCM magnification = me->get_grob_property ("font-magnification");
-
- Font_metric* metric = 0;
- if (gh_number_p (magnification))
- {
-
- Real realmag = pow (1.2, gh_scm2int (magnification));
- metric = all_fonts_global_p->find_scaled (ly_scm2string (font_name), realmag);
-
- assert (false);
- }
-#else
- SCM magnification = me->get_grob_property ("font-magnification");
-
- if (gh_number_p (magnification) && gh_scm2double (magnification) > 1)
- programming_error ("font-magnification disabled");
-#endif
-
-
SCM list = scm_list_n (ly_symbol2scm ("text"), text, SCM_UNDEFINED);
list = fontify_atom (fm, list);
if (extent_b)
{
-#if 0
- /* Hmm, we're not allowed to change a Molecule's extent? */
- mol.dim_[axis] = extent;
- Molecule::ly_set_molecule_extent_x (mol.self_scm (), gh_int2scm (axis),
- ly_cdr (e));
-#else
- // burp: unpredictable names, these...
+ /* we're not setting extents for unknown reasons. */
Box b = mol.extent_box ();
SCM expr = mol.get_expr ();
b[axis] = extent;
mol = Molecule (b, expr);
-#endif
- }
+ }
return mol;
}
left-neighbors = idem
(TODO: property-doc these!)
+
+ Don't be confused by right-items: each spacing wish can also contain
+ a number of items, with which a spacing constraint may be kept. It's
+ a little baroque, but it might come in handy later on?
+
*/
class Third_spacing_spanner
the column containing the clef is really loose, and should be
attached right to the first column, but that is a lot of work for
- such a border line case.
+ such a borderline case.
)
{
Grob * wish = unsmob_grob (gh_car (s));
- /*
- TODO: configgable.
+ if (Note_spacing::left_column (wish) != lc
+ || Note_spacing::right_column (wish) != rc)
+ continue;
- TODO: don't do stem-dir correction in polyphonic
- stuff. It wastes CPU time.
- */
+ /*
+ This is probably a waste of time in the case of polyphonic
+ music. */
if (Note_spacing::has_interface (wish))
{
hinterfleisch = hinterfleisch >?
}
}
- // ? why.
- if (gh_pair_p (seq))
- stretch_distance -= headwid;
-
- /*
- something failed, or we get ridiculous close.
- */
if (hinterfleisch < 0)
{
// maybe should issue a programming error.
hinterfleisch = note_space;
}
+ else
+ stretch_distance -= headwid; // why?
if (max_factor == 0.0)
max_factor = 1.0;
/*
TODO:
staff-line collisions for horizontal tuplet brackets.
+
+ TODO:
+
+ in the case that there is no bracket, but there is a (single) beam,
+ follow beam precisely for determining tuplet number location.
+
*/
me->set_interface (ly_symbol2scm ("tuplet-bracket"));
}
-/*
- TODO: use stem->beam fields to find Beams. Autobeams aren't found
- through the engraver mechanism. */
MAKE_SCHEME_CALLBACK (Tuplet_bracket,brew_molecule,1);
SCM
Tuplet_bracket::brew_molecule (SCM smob)
Begin3
Title: LilyPond
-Version: 1.5.30
-Entered-date: 04FEB02
+Version: 1.5.31
+Entered-date: 18FEB02
Description: @BLURB@
Keywords: music notation typesetting midi fonts engraving
Author: hanwen@cs.uu.nl (Han-Wen Nienhuys)
janneke@gnu.org (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
- 1000k lilypond-1.5.30.tar.gz
+ 1000k lilypond-1.5.31.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 1000k lilypond-1.5.30.tar.gz
+ 1000k lilypond-1.5.31.tar.gz
Copying-policy: GPL
End
%define name lilypond
-%define version 1.5.30
+%define version 1.5.31
%define release 1mdk
Name: %{name}
%define info yes
Name: lilypond
-Version: 1.5.30
+Version: 1.5.31
Release: 1
License: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.30.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.31.tar.gz
Summary: Create and print music notation
URL: http://www.lilypond.org/
BuildRoot: /tmp/lilypond-install
Distribution: SuSE Linux 7.0 (i386)
Name: lilypond
-Version: 1.5.30
+Version: 1.5.31
Release: 2
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.30.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.31.tar.gz
# music notation software for.. ?
Summary: A program for printing sheet music.
URL: http://www.lilypond.org/
depth = ..
-STEPMAKE_TEMPLATES=metafont metapost install install-out
+STEPMAKE_TEMPLATES=metafont install install-out
LOCALSTEPMAKE_TEMPLATES=asciifont
PFA_FILES = $(addprefix $(outdir)/, $(FONT_FILES:.mf=.pfa))
PFB_FILES = $(addprefix $(outdir)/, $(FONT_FILES:.mf=.pfb))
-pfb: $(PFB_FILES)
# Make tfm files first, log files last,
# so that normally log files aren't made twice
-ALL_GEN_FILES= $(TFM_FILES) $(TEXTABLES) $(AFM_FILES) $(TFM_FILES) $(PFA_FILES) $(LOG_FILES)
+ALL_GEN_FILES= $(TFM_FILES) $(TEXTABLES) $(AFM_FILES) $(TFM_FILES) $(LOG_FILES)
#PRE_INSTALL=$(MAKE) "$(ALL_GEN_FILES)"
INSTALLATION_DIR=$(datadir)/mf/
export MFINPUTS:=.:$(MFINPUTS)
-default: $(PFA_FILES) $(ALL_GEN_FILES)
+default: $(ALL_GEN_FILES)
##
## todo: this also depends on .tfm, FIXME.
$(PYTHON) $(buildscript-dir)/mf-to-table.py --package=$(topdir) --outdir=$(outdir) --dep $(outdir)/$(<F:.log=.dep) --afm $(outdir)/$(<F:.log=.afm) --tex $(outdir)/$(<F:.log=.tex) $<
local-clean:
- rm -f mfplain.mem mfplain.log mpout.log
+ rm -f mfplain.mem mfplain.log
rm -f *.tfm *.log
+pfb: $(PFB_FILES)
(PaperColumn . (
(axes 0)
+; (molecule-callback . ,Paper_column::brew_molecule) (font-name . "cmr8")
(meta . ,(grob-description paper-column-interface axis-group-interface spaceable-element-interface))
))
(PhrasingSlur . (
(NonMusicalPaperColumn . (
(axes 0)
+; (molecule-callback . ,Paper_column::brew_molecule) (font-name . "cmr8")
(meta . ,(grob-description paper-column-interface axis-group-interface spaceable-element-interface))
))
(grob-property-description 'flag-width-function procedure? "Procedure that computes the width of a half-beam (a non-connecting beam.).")
(grob-property-description 'font-family symbol? "partial font
definition: music roman braces dynamic math ...")
-(grob-property-description 'font-name symbol? "partial font definition:
-base name of font file FIXME: should override other partials.")
+(grob-property-description 'font-name string? "file name for the font to load.
+Overrides all other font-X qualifiers.")
(grob-property-description 'font-design-size number? "partial font definition: exact font size in points FIXME: should override font-relative-size.")
+(grob-property-description 'font-magnification number? "Magnification
+ of the font. If undefined, the default is @code{1.0}.")
(grob-property-description 'font-relative-size number? "partial font definition: the relative size compared the `normal' size.
0 is style-sheet's normal size, -1 is smaller, +1 is bigger, -1 is smaller.")
(grob-property-description 'font-series symbol? "partial font definition: medium, bold.")
;;; and `objects'.
+;;; TODO: this should be done through C++ macros, in order to have
+;;; tighter coupling between the C++ and its doco.
+
(define all-interfaces '())
(define (lily-interface symbol description props)
'lilypond-file': '(?m)^(?!@c)(?P<match>@lilypondfile(\[(?P<options>.*?)\])?{(?P<filename>[^}]+)})',
'lilypond' : '(?m)^(?!@c)(?P<match>@lilypond(\[(?P<options>.*?)\])?{(?P<code>.*?)})',
# pyton2.2b2 barfs on this
- 'lilypond-block': r"""(?m)^(?!@c)(?P<match1>(?s)(?P<match>@lilypond(\[(?P<options>.*?)\])?\s(?P<code>.*?)@end lilypond\s))""",
+ 'lilypond-block': r"""(?m)^(?!@c)(?P<match>(?s)(?P<match>@lilypond(\[(?P<options>.*?)\])?\s(?P<code>.*?)@end lilypond\s))""",
# 1.5.2 barfs on this.
# 'lilypond-block': r"""(?m)^(?!@c)(?P<match>@lilypond(\[(?P<options>.*?)\])?\s(?P<code>.*?)@end lilypond\s)""",
METAFONT=$MFONT
fi
- AC_CHECK_PROGS(METAPOST, mp, no)
- if test "x$METAPOST" = "xno"; then
- AC_CHECK_PROGS(MPOST, mpost, -echo no mp or mpost)
-
- METAPOST=$MPOST
- fi
-
AC_CHECK_PROGS(INIMETAFONT, inimf, no)
if test "x$INIMETAFONT" = "xno"; then
AC_CHECK_PROGS(INIMFONT, inimfont, -echo no inimf or inimfont)
INIMETAFONT=$INIMFONT
fi
- AC_CHECK_PROGS(INIMETAPOST, inimp, no)
- if test "x$INIMETAPOST" = "xno"; then
- AC_CHECK_PROGS(INIMPOST, inimpost, -echo no inimp or inimpost)
- INIMETAPOST=$INIMPOST
- fi
-
AC_MSG_CHECKING(for working metafont mode)
modelist='ljfour lj4 lj3 lj2 ljet laserjet'
for MFMODE in $modelist; do
done
AC_MSG_RESULT($MFMODE)
- AC_MSG_CHECKING(for mfplain.mp)
- #
- # For now let people define these in their environments
- #
- : ${MFPLAIN_MP=`kpsewhich --format mp mfplain.mp`}
- AC_MSG_RESULT($MFPLAIN_MP)
-
- AC_MSG_CHECKING(for inimetapost flags)
- if test ${INIMETAPOST} = "inimp" ; then
- : ${INIMETAPOST_FLAGS=''}
- else
- : ${INIMETAPOST_FLAGS='-interaction=nonstopmode'}
- fi
- AC_MSG_RESULT($INIMETAPOST_FLAGS)
-
rm -f mfput.*
AC_SUBST(METAFONT)
- AC_SUBST(METAPOST)
AC_SUBST(MFMODE)
AC_SUBST(INIMETAFONT)
- AC_SUBST(INIMETAPOST)
- AC_SUBST(MFPLAIN_MP)
- AC_SUBST(INIMETAPOST_FLAGS)
])
AC_DEFUN(AC_STEPMAKE_WARN, [