From: Han-Wen Nienhuys Date: Tue, 22 Apr 1997 15:06:31 +0000 (+0200) Subject: release: 0.0.54 X-Git-Tag: release/0.0.54 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=e85b008ae96fef8fc0c15529e8a172584d5d08fd;p=lilypond.git release: 0.0.54 --- diff --git a/.dstreamrc b/.dstreamrc index c992908ec4..7fd7b97e0a 100644 --- a/.dstreamrc +++ b/.dstreamrc @@ -3,13 +3,13 @@ Dstream 1 File_path 1 My_lily_lexer 1 -PCol 1 +PCol 0 Score_column 1 Ineq_constrained_qp 1 Spacing_problem 1 Colinfo 1 Mixed_qp 1 -PScore 1 +PScore 0 Idealspacing 1 # yydebug diff --git a/.version b/.version index 09683a7054..187deb764c 100644 --- a/.version +++ b/.version @@ -1,6 +1,6 @@ TOPLEVEL_MAJOR_VERSION = 0 TOPLEVEL_MINOR_VERSION = 0 -TOPLEVEL_PATCH_LEVEL = 53 +TOPLEVEL_PATCH_LEVEL = 54 # use to send patches, always empty for released version: # include separator: ".postfix", "-pl" makes rpm barf diff --git a/ANNOUNCE b/ANNOUNCE index b4aa95f949..5e446d8f0f 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -49,12 +49,11 @@ for compilation you need GNU C++ v2.7 or better, with libg++ installed. GNU make. Flex (2.5.1 or better). - Bison. + Bison. (1.25 or better) for running you need TeX - The MusixTeX fonts. (I use those in MusixTeX T.59) FEATURES @@ -69,7 +68,7 @@ Multiple voices within one staff; beams optionally shared between voices. Multiple scores within one input file. Each score is output to a different file. -Beams, slurs, chords, super/subscripts (accents and text), triplets, +Beams, slurs, chords, super/subscripts (accents and text), general n-plet (triplet, quadruplets, etc.), lyrics, transposition dynamics (both absolute and hairpin style) clef changes, meter changes, cadenza-mode, key changes, repeat bars diff --git a/AUTHORS.text b/AUTHORS.text new file mode 100644 index 0000000000..0e38986625 --- /dev/null +++ b/AUTHORS.text @@ -0,0 +1,66 @@ + + + +AUTHORS(1) LilyPond documentation AUTHORS(1) + + +NNNNAAAAMMMMEEEE + AUTHORS - who did what on LilyPond? + +DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN + This file lists authors of LilyPond, and what they wrote. + + +o Han-Wen Nienhuys + + Main author, all files files except mentioned below + + +o Jan Nieuwenhuizen + + lily/midi-*, mi2mu/*, flower/string.cc, make/*.make, + Documentation/mudela.pod lib/*source-file*, + lib/duration.cc, lib/source, flower/*list* + + and corresponding header files. + + +o Mats Bengtsson , parts of clef- + reg.cc, clef-item.cc testing, general comments. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +21/Apr/97 LilyPond 0.0.54 1 + + diff --git a/COPYING b/COPYING index 6bf77451b9..54b93e6973 100644 --- a/COPYING +++ b/COPYING @@ -1,6 +1,10 @@ +This license applies to all files except: -This license applies to all files except the included input files -which explicitly state a different copyright + - the included input files which explicitly state a different +copyright + + - the MetaFont sources, found in the subdirectory mf/. See +mf/README. GNU GENERAL PUBLIC LICENSE diff --git a/Documentation/INSTALL.pod b/Documentation/INSTALL.pod index d5920a70ab..86eea36f1f 100644 --- a/Documentation/INSTALL.pod +++ b/Documentation/INSTALL.pod @@ -45,7 +45,7 @@ Flex (2.5.1 or better). =item * -Bison. +Bison. (Version 1.25 or better) =back @@ -97,6 +97,8 @@ B<--help>. If you are not root, you will probably have to make it with configure --prefix=/home/me_myself_and_I/ +In this case, you will have to set MFINPUTS, and TEINPUTS accordingly. + If you want to install GNU LilyPond in F, and your TeX has no default hooks for local stuff (mine is broken too), you can do: @@ -104,7 +106,7 @@ no default hooks for local stuff (mine is broken too), you can do: Since GNU LilyPond currently is beta, you are advised to also use - --enable-debug + --enable-debugging --enable-checking other options include: @@ -116,6 +118,7 @@ other options include: --enable-tex-prefix --enable-tex-dir +All options are documented in the F help The option B<--enable-optimise> is recommended for Real Life usage. If you do @@ -132,8 +135,32 @@ If you have done a successful C, then a simple make install -should do the trick. Install the musixtex fonts in a directory which -TeX and MF knows. Do not forget to rehash TeX (if applicable) +should do the trick. + +[todo] + +Install the musixtex fonts in a directory which TeX and MF knows (if +you are root, look for a directory which contains the directories with +AMS and CM source (*.mf) files. Create a subdir lilypond or musixtex +and copy the fonts into that). Do not forget to rehash TeX (if +applicable) + +Example: my fonts are in F, and I +have a symlink pointing to that in +F + +=head1 CAVEATS + + + +=over 5 + +=item * + +The -O2 option to gcc triggers a gcc bug on DEC Alpha in dstream.cc. You +should turn off this flag for this file. + +=back =head1 RUNNING diff --git a/Documentation/Makefile b/Documentation/Makefile index b9df442521..85248070ff 100644 --- a/Documentation/Makefile +++ b/Documentation/Makefile @@ -49,13 +49,21 @@ include ./$(depth)/make/Rules.make localclean: rm -f out/* - rm -f $(TEXTFILES) $(HTMLFILES) $(GROFFFILES) $(HTMLFILES) + rm -f $(TEXTFILES) $(HTMLFILES) $(GROFFFILES) + +MAN1FILES = lilypond convert-mudela +MAN1GROFF = $(addprefix $(outdir)/, $(addsuffix .1,$(MAN1FILES))) + +bla: + echo $(MANGROFF) + echo $(MANFILES) localinstall: $(outdir)/lilypond.1 $(outdir)/mudela.5 $(INSTALL) -d $(mandir)/man5 $(INSTALL) -d $(mandir)/man1 - $(INSTALL) -m 755 $(outdir)/lilypond.1 $(mandir)/man1 + $(INSTALL) -m 755 $(MAN1GROFF) $(mandir)/man1 $(INSTALL) -m 755 $(outdir)/mudela.5 $(mandir)/man5 localuninstall: rm -f $(mandir)/man1/lilypond.1 + rm -f $(mandir)/man1/convert-mudela.1 diff --git a/INSTALL.text b/INSTALL.text index 46c552aeb5..17819376c6 100644 --- a/INSTALL.text +++ b/INSTALL.text @@ -38,7 +38,7 @@ PPPPRRRREEEERRRREEEEQQQQUUUUIIIISSSSIIIITTTTEE +o Flex (2.5.1 or better). - +o Bison. + +o Bison. (Version 1.25 or better) RRRREEEECCCCOOOOMMMMMMMMEEEENNNNDDDDEEEEDDDD +o Perl. Most scripts are written in Perl. The @@ -61,7 +61,7 @@ CCCCOOOONNNNFFFFIIIIGGGGUUUURRRRIIIINNNNGGGG a -21/Apr/97 LilyPond 0.0.53 1 +22/Apr/97 LilyPond 0.0.54 1 @@ -95,6 +95,9 @@ INSTALL(1) LilyPond documentation INSTALL(1) configure --prefix=/home/me_myself_and_I/ + In this case, you will have to set MFINPUTS, and TEINPUTS + accordingly. + If you want to install GNU LilyPond in _/_u_s_r_/_l_o_c_a_l, and your TeX has no default hooks for local stuff (mine is broken too), you can do: @@ -104,7 +107,7 @@ INSTALL(1) LilyPond documentation INSTALL(1) Since GNU LilyPond currently is beta, you are advised to also use - --enable-debug + --enable-debugging --enable-checking other options include: @@ -116,18 +119,15 @@ INSTALL(1) LilyPond documentation INSTALL(1) --enable-tex-prefix --enable-tex-dir - The option --------eeeennnnaaaabbbblllleeee----ooooppppttttiiiimmmmiiiisssseeee is recommended for Real Life + All options are documented in the _c_o_n_f_i_g_u_r_e help The + option --------eeeennnnaaaabbbblllleeee----ooooppppttttiiiimmmmiiiisssseeee is recommended for Real Life usage. If you do - make all - - everything will be compiled, but nothing will be - -21/Apr/97 LilyPond 0.0.53 2 +22/Apr/97 LilyPond 0.0.54 2 @@ -136,6 +136,9 @@ INSTALL(1) LilyPond documentation INSTALL(1) INSTALL(1) LilyPond documentation INSTALL(1) + make all + + everything will be compiled, but nothing will be installed. The resulting binaries can be found in the subdirectory _b_i_n_/. @@ -144,9 +147,26 @@ IIIINNNNSSSSTTTTAAAALLLLLLLLIIIINNNNGGGG make install - should do the trick. Install the musixtex fonts in a - directory which TeX and MF knows. Do not forget to rehash - TeX (if applicable) + should do the trick. + + [todo] + + Install the musixtex fonts in a directory which TeX and MF + knows (if you are root, look for a directory which + contains the directories with AMS and CM source (*.mf) + files. Create a subdir lilypond or musixtex and copy the + fonts into that). Do not forget to rehash TeX (if + applicable) + + Example: my fonts are in + _/_u_s_r_/_l_o_c_a_l_/_l_i_b_/_t_e_x_f_o_n_t_s_/_m_u_s_i_x_t_e_x_/, and I have a symlink + pointing to that in + _/_u_s_r_/_l_i_b_/_t_e_x_m_f_/_t_e_x_m_f_/_f_o_n_t_s_/_s_o_u_r_c_e_/_p_u_b_l_i_c_/ + +CCCCAAAAVVVVEEEEAAAATTTTSSSS + +o The -O2 option to gcc triggers a gcc bug on DEC Alpha + in dstream.cc. You should turn off this flag for this + file. RRRRUUUUNNNNNNNNIIIINNNNGGGG GNU LilyPond does use a lot of resources. For operation @@ -171,6 +191,17 @@ RRRREEEEDDDDHHHHAAAATTTT LLLLIIIINNNNUUUUXXXX create an rpm as a normal user. Be sure you have a ~/.rpmrc, and edit the RPM-dir in _V_a_r_i_a_b_l_e_s_._m_a_k_e + + +22/Apr/97 LilyPond 0.0.54 3 + + + + + +INSTALL(1) LilyPond documentation INSTALL(1) + + WWWWIIIINNNNDDDDOOOOZZZZEEEE Windows NT: @@ -187,21 +218,6 @@ PPPPLLLLAAAATTTTFFFFOOOORRRRMMMMSSSS GNU LilyPond (pl 0.0.39) is known to compile on the following platforms: - - - - - - -21/Apr/97 LilyPond 0.0.53 3 - - - - - -INSTALL(1) LilyPond documentation INSTALL(1) - - * linux 2.0.x, g++ 2.7.2[.1] * aix 4.1, g++ 2.7.2 * windows-nt 4.0, cygnus gnu-win32 beta17.1 (~=g++ 2.7.2) @@ -243,22 +259,6 @@ AAAAUUUUTTTTHHHHOOOORRRRSSSS - - - - - - - - - - - - - - - - -21/Apr/97 LilyPond 0.0.53 4 +22/Apr/97 LilyPond 0.0.54 4 diff --git a/NEWS b/NEWS index c59f0320f3..657fe561bc 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,11 @@ +pl 54 + - bugfix Colhpos.cc::OK assert fail. + - Inclusion of MusixTeX MF files, + - detection of MF dir +pl 53.hwn + - stacked lyrics + - configure/make buglets. +****** pl 53 - spurious accidental bug. - simultaneity check. diff --git a/TODO b/TODO index cf48d74f4c..53c2457685 100644 --- a/TODO +++ b/TODO @@ -1,6 +1,8 @@ IMPORTANT * update 20 pt table + + * rename mf fonts to avoid conflicts with musixtex * decent TeX page layout @@ -14,6 +16,8 @@ IMPORTANT * check return status in make_website + * tutorial + This is an assorted collection of stuff that will be done, might be done, or is an idea that I want to think about @@ -22,6 +26,10 @@ PARSER BUGS + * detect -pipe + + * redo timing stuff <-> pulk to allow \meter 2/4; e2. to work out correctly + * hairpin width * help-lines for rests @@ -32,6 +40,8 @@ BUGS * lilypond - -> crash + * wohltemperirt.ly + SEVERELY LACKING: * SPEED! @@ -98,6 +108,8 @@ SMALLISH PROJECTS * do conventional keys (C G A, F B E, a e fis, d as des, etc ), besides lists of flats/sharps + * update for T70 fonts or newer + * midi esp.: use I32 iso int where 32 bits are needed (or assumed...) * fix Staff_elem::width() derivs to use offset_ diff --git a/bin/Makefile b/bin/Makefile index 05214b0b58..ed0e8522ae 100644 --- a/bin/Makefile +++ b/bin/Makefile @@ -7,7 +7,7 @@ include $(depth)/make/Include.make # list of distribution files: SCRIPTS = clearlily cpgento genheader make_patch \ - make_version make_website release convert-mudela + make_version make_website release convert-mudela show-latest EXTRA_DISTFILES = $(SCRIPTS) # diff --git a/bin/release b/bin/release index 7fb658c7cb..a9a70bbe73 100755 --- a/bin/release +++ b/bin/release @@ -1,10 +1,14 @@ #!/bin/sh + +# script to automate releases + grep -q '^TOP' .version res=$? if test ! -f .version || test $res != 0; then echo not in topleveldir exit 1 fi + function setversion() { eval `sed -n 's/^\([A-Z_]*\) *= *\(.*\)$/\1=\2/p' .version` MJ=$TOPLEVEL_MAJOR_VERSION @@ -23,18 +27,28 @@ echo echo "Current version ("`pwd`") is $NEWVER, Last version: $LASTVER" echo } + heredir=`pwd` - make dist; - setversion - LILYVER=$NEWVER - cp lilypond-$LILYVER.tar.gz ../releases - $heredir/bin/make_patch $LASTVER $NEWVER lilypond - gzip -f9 patch-$NEWVER - mv {lilypond-,patch-}*.gz ../ -cd .. -tar cf updeet {lily,patch-}*.gz +make dist; +setversion +LILYVER=$NEWVER +mv lilypond-$LILYVER.tar.gz ../releases + +cd ../test +$heredir/bin/make_patch $LASTVER $NEWVER lilypond +gzip -f9 patch-$NEWVER +mv patch-$NEWVER.gz ../patches/ + +RPMS=`find ~/rpms/ -name lilypond-$NEWVER'*'rpm` +rm *.rpm {lilypond,patch}-*.gz + +if [ ! -z $RPMS ]; then + ln $RPMS . +fi +ln ../releases/lilypond-$NEWVER.tar.gz . +ln ../patches/patch-$NEWVER.gz . + +RPMS=`echo *.rpm` +tar cf updeet {lily,patch-}*.gz $RPMS tar tfv updeet -mv patch-*gz patches/ -mv lilypond*tar.gz releases/ -#time make diff --git a/bin/show-latest b/bin/show-latest new file mode 100644 index 0000000000..7aacb57ff6 --- /dev/null +++ b/bin/show-latest @@ -0,0 +1,33 @@ +#!/usr/bin/perl +$reldir="~/musix/releases"; + +sub cmpver +{ + + my(@a)= split /\./,$a; + my(@b)= split /\./,$b; + + for $i (0,1,2) { + return $a[$i] <=> $b[$i] if ($a[$i] != $b[$i]); + } + return $a cmp $b; +} + +my @versions; +open LS, "ls -1 $reldir|"; + + +while () { + + $_ =~ /lilypond-([^.]+\.[^.]+\.[^.]+).tar.gz/; + push @versions, $1; +} + + +@versions = sort cmpver @versions; +my $last= (pop @versions); +print $last; + +system "rm $reldir/zZ*"; + +system "> $reldir/zZ_LATEST_IS_$last"; diff --git a/configure b/configure index ee977f051b..7bb6edf9d1 100755 --- a/configure +++ b/configure @@ -16,7 +16,7 @@ ac_help="$ac_help ac_help="$ac_help disable-checking set runtime checks" ac_help="$ac_help - disable-debug set debug info" + disable-debugging set debug info" ac_help="$ac_help enable-optimise use maximal speed optimisations" ac_help="$ac_help @@ -25,6 +25,8 @@ ac_help="$ac_help tex-prefix=DIR set the tex-directory to find TeX subdirectories." ac_help="$ac_help tex-dir=DIR set the directory to put LilyPond TeX files in." +ac_help="$ac_help + mf-dir=DIR set the directory to put LilyPond MetaFont files in." # Initialize some variables set by options. # The variables have the same names as the options, with @@ -563,11 +565,9 @@ if test "${enable_checking+set}" = set; then fi - - -# Check whether --enable-debug or --disable-debug was given. -if test "${enable_debug+set}" = set; then - enableval="$enable_debug" +# Check whether --enable-debugging or --disable-debugging was given. +if test "${enable_debugging+set}" = set; then + enableval="$enable_debugging" debug_b=$enableval fi @@ -604,6 +604,14 @@ else TEXDIR=auto fi +# Check whether --enable-mf-dir or --disable-mf-dir was given. +if test "${enable_mf_dir+set}" = set; then + enableval="$enable_mf_dir" + MFDIR=$enableval +else + MFDIR=auto +fi + if test $profile_b = yes; then EXTRA_LIBES="-pg" @@ -632,7 +640,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:636: checking for $ac_word" >&5 +echo "configure:644: 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 @@ -663,7 +671,7 @@ test -n "$CXX" || CXX="gcc" echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:667: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5 +echo "configure:675: 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. @@ -673,11 +681,11 @@ ac_link='${CXX-g++} -o conftest $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $L cross_compiling=$ac_cv_prog_cxx_cross cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:689: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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 @@ -697,12 +705,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:701: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:709: 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:706: checking whether we are using GNU C++" >&5 +echo "configure:714: 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 @@ -711,7 +719,7 @@ else yes; #endif EOF -if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:715: \"$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:723: \"$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 @@ -726,7 +734,7 @@ if test $ac_cv_prog_gxx = yes; then ac_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS= echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6 -echo "configure:730: checking whether ${CXX-g++} accepts -g" >&5 +echo "configure:738: 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 @@ -756,7 +764,7 @@ fi # 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:760: checking for $ac_word" >&5 +echo "configure:768: 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 @@ -812,7 +820,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:816: checking for a BSD compatible install" >&5 +echo "configure:824: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -866,7 +874,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:870: checking for $ac_word" >&5 +echo "configure:878: 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 @@ -910,12 +918,13 @@ fi + for ac_prog in bison 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:919: checking for $ac_word" >&5 +echo "configure:928: 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 @@ -949,7 +958,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:953: checking for $ac_word" >&5 +echo "configure:962: 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 @@ -983,7 +992,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:987: checking for $ac_word" >&5 +echo "configure:996: 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 @@ -1017,7 +1026,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:1021: checking for $ac_word" >&5 +echo "configure:1030: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_PODMAN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1053,7 +1062,7 @@ if test "x$TEXPREFIX" = xauto ; then echo $ac_n "checking TeX/MF root dir directory""... $ac_c" 1>&6 -echo "configure:1057: checking TeX/MF root dir directory" >&5 +echo "configure:1066: checking TeX/MF root dir directory" >&5 find_root_prefix="$prefix" @@ -1074,8 +1083,11 @@ echo "configure:1057: checking TeX/MF root dir directory" >&5 fi find_texprefix="$find_root_prefix/$find_texpostfix" - TEXPREFIX='${prefix}'/"$find_texpostfix" + # only assign if variablename not empty + if test x != "xTEXPREFIX"; then + TEXPREFIX='${prefix}'/"$find_texpostfix" + fi echo "$ac_t""$find_texprefix" 1>&6 @@ -1083,29 +1095,48 @@ fi if test "x$TEXDIR" = xauto ; then - - # do something sensible if root hasn't specced dir yet attempts install - test "x$find_texprefix" != x || find_texprefix="$TEXPREFIX" - - echo $ac_n "checking TeX tex input directory""... $ac_c" 1>&6 -echo "configure:1092: checking TeX tex input directory" >&5 - find_texdir=`(cd $find_texprefix; - $FIND -type d -a -name tex -print |sort|head -1|sed 's#^\./##')` + + + echo $ac_n "checking TeX input directory""... $ac_c" 1>&6 +echo "configure:1102: checking TeX input directory" >&5 + find_dirdir=`(cd $find_texprefix; + $FIND ./ -type d -a -name tex -print |sort|head -1|sed 's#^\./##')` - if test "x$find_texdir" = x; then - find_texdir="/tex"; - echo "configure: warning: Cannot determine the TeX-subdirectory. Please use --enable-tex-dir" 1>&2 + if test "x$find_dirdir" = x; then + find_dirdir="/tex"; + echo "configure: warning: Cannot determine TeX input subdirectory. Please set from command-line" 1>&2 true fi + TEXDIR=$find_dirdir + echo "$ac_t""$find_texprefix/$find_dirdir" 1>&6 + + TEXDIR="$TEXPREFIX/$TEXDIR" + +fi + +if test "x$MFDIR" = xauto; then + - TEXDIR="$TEXPREFIX/$find_texdir" - echo "$ac_t""$find_texprefix/$find_texdir" 1>&6 + echo $ac_n "checking MF input directory""... $ac_c" 1>&6 +echo "configure:1124: checking MF input directory" >&5 + find_dirdir=`(cd $find_texprefix; + $FIND ./ -type d -a -name source -print |sort|head -1|sed 's#^\./##')` + + if test "x$find_dirdir" = x; then + find_dirdir="/source"; + echo "configure: warning: Cannot determine MF input subdirectory. Please set from command-line" 1>&2 + true + fi + MFDIR=$find_dirdir + echo "$ac_t""$find_texprefix/$find_dirdir" 1>&6 -fi + MFDIR="$TEXPREFIX/$MFDIR" +fi + if test $MAKE = "error" then { echo "configure: error: Please install GNU make" 1>&2; exit 1; } @@ -1140,7 +1171,7 @@ else fi echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6 -echo "configure:1144: checking how to run the C++ preprocessor" >&5 +echo "configure:1175: 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 @@ -1153,12 +1184,12 @@ ac_link='${CXX-g++} -o conftest $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $L cross_compiling=$ac_cv_prog_cxx_cross CXXCPP="${CXX-g++} -E" cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1162: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1193: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then : @@ -1178,17 +1209,17 @@ echo "$ac_t""$CXXCPP" 1>&6 ac_safe=`echo "FlexLexer.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for FlexLexer.h""... $ac_c" 1>&6 -echo "configure:1182: checking for FlexLexer.h" >&5 +echo "configure:1213: 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 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1192: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1223: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* @@ -1369,6 +1400,7 @@ s%@BISON@%$BISON%g s%@FLEX@%$FLEX%g s%@TEXPREFIX@%$TEXPREFIX%g s%@TEXDIR@%$TEXDIR%g +s%@MFDIR@%$MFDIR%g s%@EXTRA_LIBES@%$EXTRA_LIBES%g s%@MAKE@%$MAKE%g s%@PODMAN@%$PODMAN%g @@ -1591,7 +1623,7 @@ fi eval "DIR_DATADIR=$datadir" DIR_DATADIR="$DIR_DATADIR/lilypond" echo $ac_n "checking ""... $ac_c" 1>&6 -echo "configure:1595: checking " >&5 +echo "configure:1627: checking " >&5 cat << EOF > lib/out/config.hh @@ -1623,10 +1655,11 @@ If you only want help on the make targets, do a make help +assuming that \`make' is GNU make, of course. -END +If you want to make site-wide extensions to the makefiles, please use + make/out/Site.make -#if test $shared_b = yes; then -# echo "NOTE: you are building the *shared* library. You should -#fi +END + diff --git a/configure.in b/configure.in index a2e61c2379..d0519149fb 100644 --- a/configure.in +++ b/configure.in @@ -28,34 +28,49 @@ AC_DEFUN(AC_TEX_PREFIX, [ fi find_texprefix="$find_root_prefix/$find_texpostfix" - $1='${prefix}'/"$find_texpostfix" + # only assign if variablename not empty + if test x != "x$1"; then + $1='${prefix}'/"$find_texpostfix" + fi AC_MSG_RESULT($find_texprefix) ]) - -AC_DEFUN(AC_TEX_SUBDIR, [ - - # do something sensible if root hasn't specced dir yet attempts install - test "x$find_texprefix" != x || find_texprefix="$TEXPREFIX" - - AC_MSG_CHECKING(TeX tex input directory) - find_texdir=`(cd $find_texprefix; - $FIND -type d -a -name tex -print |sort|head -1|sed 's#^\./##')` + + +# find a directory inside a prefix, +# $1 the prefix (expanded version) +# $2 variable to assign +# $3 the directory name +# $4 description +AC_DEFUN(AC_FIND_DIR_IN_PREFIX, [ + + AC_MSG_CHECKING($4 directory) + find_dirdir=`(cd $1; + $FIND ./ -type d -a -name $3 -print |sort|head -1|sed 's#^\./##')` - if test "x$find_texdir" = x; then - find_texdir="/tex"; - AC_MSG_WARN(Cannot determine the TeX-subdirectory. Please use --enable-tex-dir) + if test "x$find_dirdir" = x; then + find_dirdir="/$3"; + AC_MSG_WARN(Cannot determine $4 subdirectory. Please set from command-line) true fi - - $1="$TEXPREFIX/$find_texdir" - - AC_MSG_RESULT($find_texprefix/$find_texdir) + $2=$find_dirdir + AC_MSG_RESULT($1/$find_dirdir) +]) +AC_DEFUN(AC_TEX_SUBDIR, [ +dnl AC_REQUIRE([AC_TEX_PREFIX]) + AC_FIND_DIR_IN_PREFIX($find_texprefix, $1, tex,TeX input) + $1="$TEXPREFIX/$$1" ]) +AC_DEFUN(AC_MF_SUBDIR, [ +dnl AC_REQUIRE([AC_TEX_PREFIX]) + AC_FIND_DIR_IN_PREFIX($find_texprefix, $1, source, MF input) + $1="$TEXPREFIX/$$1" +]) + AC_INIT(flower/choleski.cc) @@ -76,10 +91,8 @@ AC_ARG_ENABLE(checking, [ disable-checking set runtime checks], [checking_b=$enableval] ) - - -AC_ARG_ENABLE(debug, - [ disable-debug set debug info], +AC_ARG_ENABLE(debugging, + [ disable-debugging set debug info], [debug_b=$enableval]) AC_ARG_ENABLE(optimise, @@ -100,6 +113,10 @@ AC_ARG_ENABLE(tex-dir, [ tex-dir=DIR set the directory to put LilyPond TeX files in.], [TEXDIR=$enableval], [TEXDIR=auto] ) +AC_ARG_ENABLE(mf-dir, + [ mf-dir=DIR set the directory to put LilyPond MetaFont files in.], + [MFDIR=$enableval], + [MFDIR=auto] ) if test $profile_b = yes; then EXTRA_LIBES="-pg" @@ -142,6 +159,7 @@ AC_SUBST(BISON) AC_SUBST(FLEX) AC_SUBST(TEXPREFIX) AC_SUBST(TEXDIR) +AC_SUBST(MFDIR) AC_SUBST(EXTRA_LIBES) AC_CHECK_PROGS(BISON, bison, error) @@ -158,6 +176,10 @@ if test "x$TEXDIR" = xauto ; then AC_TEX_SUBDIR(TEXDIR) fi +if test "x$MFDIR" = xauto; then + AC_MF_SUBDIR(MFDIR) +fi + if test $MAKE = "error" then AC_MSG_ERROR(Please install GNU make) @@ -236,10 +258,11 @@ If you only want help on the make targets, do a make help +assuming that \`make' is GNU make, of course. -END +If you want to make site-wide extensions to the makefiles, please use + make/out/Site.make -#if test $shared_b = yes; then -# echo "NOTE: you are building the *shared* library. You should -#fi +END + diff --git a/flower/Makefile b/flower/Makefile index 0a6d806a21..f68ca1c5a8 100644 --- a/flower/Makefile +++ b/flower/Makefile @@ -66,9 +66,10 @@ localdistclean: rm -f config.cache config.status localinstall: $(LIBFLOWER) +ifeq ($(LIB_SUFFIX),.so) $(INSTALL) -d $(libdir) $(INSTALL) $(LIBFLOWER) $(libdir) -# ln -s $(libdir)/libflower.so.$(VERSION) $(libdir +endif localuninstall: rm -f $(libdir)/libflower.{so,a} diff --git a/input/maartje.ly b/input/maartje.ly index ddce8ee770..bebe65d14f 100644 --- a/input/maartje.ly +++ b/input/maartje.ly @@ -3,13 +3,15 @@ % COPYRIGHT: GPL % % +\version "0.0.53"; + globals=\melodic{ \meter 4/ 4; \partial 8; \skip 8*1; \skip 2*3 ; - \bar ":|:" - \skip 2*1; + \bar ":|:"; + \skip 1*2; \meter 2/4; } @@ -33,7 +35,8 @@ globals=\melodic{ melody= \staff{melodicregs globals - \melodic \octave {c; + \melodic { + \octave c; c8\key fis cis gis; |r4 r4 r4 r4 |cis'2.. r8 @@ -47,14 +50,14 @@ melody= \staff{melodicregs { a () bes eis8 eis8 } { fis () g gis8 gis8 } > - \clef\tenor + \clef\tenor; < c4 c'4 > [d8 e8 f'8 g8] d8 e8 f8 g8 |fis''2 | a8 b8 c'8 d'8 |c''8 '''c8 c4 |c4 c4 |c4 \duration 16 ; 'b 'a 'g 'f \duration 4; - \clef\bass + \clef\bass ; |c 'b 'a 'g 'f 'e 'd 'c ''b ''a ''g ''f ''e ''d ''c } diff --git a/input/wohltemperirt.ly b/input/wohltemperirt.ly index 7b464e4ee5..82659d3800 100644 --- a/input/wohltemperirt.ly +++ b/input/wohltemperirt.ly @@ -90,7 +90,7 @@ comes = \melodic { [G F16 Es] [F8 D] [As G] r A | [B c] [F16 Es D C] [C8 c16 B] [c8 G]| [As c16 B] [c8 d] [G8 c16 B] [c8 d] | - [F16 G] As4 [G16 F] E2 | + [F16 G] As4 [G16 F] E2. | } diff --git a/lily/.version b/lily/.version index b311b7eb03..99892df436 100644 --- a/lily/.version +++ b/lily/.version @@ -1,6 +1,6 @@ MAJOR_VERSION = 0 MINOR_VERSION = 0 -PATCH_LEVEL = 53 +PATCH_LEVEL = 54 # use to send patches, always empty for released version: # include separator: ".postfix", "-pl" makes rpm barf diff --git a/lily/Stable.make b/lily/Stable.make index 276b320e14..e7eee4cd6b 100644 --- a/lily/Stable.make +++ b/lily/Stable.make @@ -1,7 +1,7 @@ # kept in dist bo stripping stable stuff, still to copy... # a bit of a hack to keep exec size under control. -stablecc=command-request.cc musical-request.cc bar.cc boxes.cc break.cc \ +stablecc=command-request.cc musical-request.cc bar.cc boxes.cc \ item.cc keyword.cc leastsquares.cc \ lookup.cc molecule.cc meter.cc\ paper-def.cc parser.cc lexer.cc p-staff.cc qlp.cc qlpsolve.cc\ diff --git a/lily/break.cc b/lily/break.cc index cc588e6b0f..8a07b02344 100644 --- a/lily/break.cc +++ b/lily/break.cc @@ -1,6 +1,12 @@ /* - do calculations for breaking problem - */ + break.cc -- implement Break_algorithm + + source file of the LilyPond music typesetter + + (c) 1996, 1997 Han-Wen Nienhuys +*/ + + #include "break.hh" #include "paper-def.hh" #include "linespace.hh" @@ -9,9 +15,7 @@ #include "p-score.hh" -/* - return all breakable columns - */ +/// return all breakable columns Line_of_cols Break_algorithm::find_breaks() const { @@ -23,7 +27,7 @@ Break_algorithm::find_breaks() const return retval; } -// construct an appropriate Spacing_problem and solve it. +/// construct an appropriate Spacing_problem and solve it. Col_hpositions Break_algorithm::solve_line(Line_of_cols curline) const { diff --git a/lily/lexer.l b/lily/lexer.l index 3a5631770c..5e82c5a31d 100644 --- a/lily/lexer.l +++ b/lily/lexer.l @@ -79,7 +79,9 @@ COMMENT %.*\n new_input(s,source_l_g); yy_pop_state(); } - +<*>{WHITE}+ { + +} {RESTNAME} { const char *s = YYText(); yylval.string = new String (s); @@ -187,7 +189,7 @@ COMMENT %.*\n [{}] { return YYText()[0]; } -[()\[\]|/.^>;_-] { +. { return yylval.c = YYText()[0]; } @@ -223,9 +225,7 @@ COMMENT %.*\n mtor << "misc char" <{WHITE}+ { - -} + . { return yylval.c = YYText()[0]; } diff --git a/lily/linespace.cc b/lily/linespace.cc index 4f3f69a62e..aed6c407eb 100644 --- a/lily/linespace.cc +++ b/lily/linespace.cc @@ -152,9 +152,9 @@ Spacing_problem::make_constraints(Mixed_qp& lp) const { int dim=cols.size(); for (int j=0; j < dim; j++) { - Colinfo *c=&(cols[j]); - if (c->fixed()) { - lp.add_fixed_var(j,c->fixed_position()); + Colinfo c=cols[j]; + if (c.fixed()) { + lp.add_fixed_var(j,c.fixed_position()); } if (j > 0){ Vector c1(dim); @@ -174,7 +174,6 @@ Spacing_problem::solve() const OK(); assert(check_feasible()); - /* optimalisatiefunctie */ Mixed_qp lp(cols.size()); make_matrices(lp.quad,lp.lin, lp.const_term); make_constraints(lp); @@ -196,8 +195,6 @@ Spacing_problem::solve() const void Spacing_problem::add_column(PCol const *col, bool fixed, Real fixpos) { - if (!col->used_b() ) - return; Colinfo c(col,(fixed)? &fixpos : 0); cols.push(c); } diff --git a/lily/lyric-register.cc b/lily/lyric-register.cc index 73f0def7b0..db86760cb4 100644 --- a/lily/lyric-register.cc +++ b/lily/lyric-register.cc @@ -30,8 +30,12 @@ Lyric_register::try_request(Request*r) void Lyric_register::process_requests() { + Lyric_item * last_item_l =0; for (int i=0; i < lreq_arr_.size(); i++) { - Item *lp = new Lyric_item(lreq_arr_[i],i); + Lyric_item *lp = new Lyric_item(lreq_arr_[i],i); + if (last_item_l) + lp->add_support(last_item_l); + last_item_l = lp; typeset_element(lp); } get_staff_info().walk_l_->allow_break(); diff --git a/lily/note-column.cc b/lily/note-column.cc index dbeeba4a91..075e61d1ab 100644 --- a/lily/note-column.cc +++ b/lily/note-column.cc @@ -26,9 +26,9 @@ Note_column::add(Stem*stem_l) void Note_column::add(Notehead* n_l) { - if (head_l_arr_.size()) - assert(n_l->rest_b_ == rest_b_); - else + if (head_l_arr_.size()){ + if (n_l->rest_b_ != rest_b_) return; // ugly fix. Should think about integrating rests into colunms. + } else rest_b_ = n_l->rest_b_; head_l_arr_.push(n_l); diff --git a/lily/p-col.cc b/lily/p-col.cc index c47a4b2d27..e1c286da70 100644 --- a/lily/p-col.cc +++ b/lily/p-col.cc @@ -107,6 +107,7 @@ PCol::PCol(PCol *parent) line_l_=0; hpos = -1.0; pscore_l_ = 0; + rank_i_ = -1; } PCol::~PCol() diff --git a/lily/p-score.cc b/lily/p-score.cc index d31762e54a..6f1b362765 100644 --- a/lily/p-score.cc +++ b/lily/p-score.cc @@ -252,7 +252,7 @@ void PScore::process() { clean_cols(); - + print(); *mlog << "Preprocessing ... " < $@ + cat $< | $(sed-version) | $(sed-docs) | $(sed-examples) > $@ $(outdir)/lilypond.lsm: lilypond.lsm.in $(depth)/.version cat $< | $(sed-version) | $(sed-date) > $@ diff --git a/make/Targets.make b/make/Targets.make index 5d161c5be7..bd04277f73 100644 --- a/make/Targets.make +++ b/make/Targets.make @@ -7,7 +7,8 @@ # Jan Nieuwenhuizen # Han-Wen Nienhuys -.PHONY : all clean config default dist doc doc++ dummy exe help lib TAGS html +.PHONY : all clean config default dist doc doc++ dummy exe help lib TAGS html\ + check-flower-deps check-lily-deps check-doc-deps # target all: # @@ -29,7 +30,8 @@ include ./$(depth)/make/out/Site.make # dependency list of executable: # EXECUTABLE = $(lily_bindir)/$(NAME) -$(EXECUTABLE): $(build) $(OFILES) $(MODULE_LIBDEPS) +$(EXECUTABLE): $(build) $(OFILES) + $(MAKE) $(MODULE_LIBDEPS) $(INCREASE_BUILD) $(MAKE) -S $(OFILES) $(SILENT_LOG) ifdef STABLEOBS @@ -46,7 +48,7 @@ $(build): $(depth)/.version # dependency list of library: # LIBRARY = $(outdir)/$(LIB_PREFIX)$(NAME).a -$(LIBRARY): $(build) $(OFILES) $(MODULE_LIBDEPS) +$(LIBRARY): $(build) $(OFILES) $(INCREASE_BUILD) $(MAKE) $(OFILES) $(SILENT_LOG) $(AR_COMMAND) $(OFILES) @@ -126,7 +128,8 @@ dist: chmod -Rf a+rX $(distdir) (cd ./$(depth); tar cfz $(DIST_NAME).tar.gz $(DIST_NAME)) - rm -rf $(distdir)/ # should be trapped +# should be trapped + rm -rf $(distdir)/ localdist: $(DISTFILES) if [ -d out ]; then mkdir $(distdir)/$(localdir)/out; fi @@ -140,7 +143,7 @@ moduledist: -mkdir $(module-distdir) $(MAKE) localmoduledist (cd ./$(depth); tar cfz $(MODULE_DIST_NAME).tar.gz $(MODULE_DIST_NAME)) - rm -rf $(module-distdir)/ # should be trapped + rm -rf $(module-distdir)/ localmoduledist: ln $(DISTFILES) $(module-distdir)/$(localdir) diff --git a/make/Toplevel.make.in b/make/Toplevel.make.in index ae4e131c1a..b7ba88ce97 100644 --- a/make/Toplevel.make.in +++ b/make/Toplevel.make.in @@ -1,7 +1,13 @@ # -*-Makefile-*- +######################################################## +# +# WARNING!WARNING!WARNING!WARNING!WARNING!WARNING! +# +# DO NOT EDIT! # -# @configure_input@ # +# @configure_input@ +######################################################## # project LilyPond -- the musical typesetter # title top level makefile for LilyPond # file Makefile @@ -9,7 +15,6 @@ # Copyright (c) 1997 by # Jan Nieuwenhuizen # Han-Wen Nienhuys -# ...your sort order here, or how to comment-out a comment # subdir level: # @@ -29,14 +34,14 @@ include ./$(depth)/make/Variables.make # descent order into subdirectories: # -SUBDIRS = flower lib lily mi2mu \ +SUBDIRS = mf flower lib lily mi2mu \ Documentation bin init input tex make # # list of distribution files: # SCRIPTS = configure configure.in install-sh -README_FILES = ANNOUNCE COPYING NEWS README TODO INSTALL.text +README_FILES = ANNOUNCE COPYING NEWS README TODO INSTALL.text AUTHORS.text EXTRA_DISTFILES= .dstreamrc .version $(README_FILES) $(SCRIPTS) $(SYMLINKS) # do not dist ./Makefile (is copied from make/Toplevel.make) diff --git a/make/Variables.make b/make/Variables.make index 87656c81b1..4cc56e118b 100644 --- a/make/Variables.make +++ b/make/Variables.make @@ -24,7 +24,7 @@ endif # directory names: # -outdir = out# "objects" won-t do, used for libs and deps as well +outdir = out lily_bindir = ./$(depth)/bin distdir = ./$(depth)/$(DIST_NAME) module-distdir = ./$(depth)/$(MODULE_DIST_NAME) @@ -94,14 +94,14 @@ DUMMYDEPS=\ # clean file lists: # ERROR_LOG = 2> /dev/null -SILENT_LOG = >& /dev/null +SILENT_LOG = 2>&1 > /dev/null allexe = $(lily_bindir)/lilypond $(lily_bindir)/mi2mu date = $(shell date +%x) -allhh := $(shell $(FIND) -name "*.hh" $(ERROR_LOG)) -allcc := $(shell $(FIND) -name "*.cc" $(ERROR_LOG)) -allobs := $(shell $(FIND) $(outdir) -name "*.o" $(ERROR_LOG)) +allhh := $(shell $(FIND) ./ -name "*.hh" $(ERROR_LOG)) +allcc := $(shell $(FIND) ./ -name "*.cc" $(ERROR_LOG)) +allobs := $(shell $(FIND) ./ $(outdir) -name "*.o" $(ERROR_LOG)) -alldeps := $(shell $(FIND) $(outdir) -name "*.dep" $(ERROR_LOG)) +alldeps := $(shell $(FIND) ./ $(outdir) -name "*.dep" $(ERROR_LOG)) # version stuff: # @@ -123,13 +123,15 @@ CFLAGS = $(DEFINES) $(INCLUDES) $(USER_CFLAGS) $(EXTRA_CFLAGS) # added two warnings that are treated by cygwin32's gcc 2.7.2 as errors. # huh, but still, no warnings even provoced with linux's gcc 2.7.2.1? -EXTRA_CXXFLAGS=-pipe -Wall -W -Wmissing-prototypes -Wmissing-declarations -Wconversion + +# -pipe makes it go faster, but is not supported on all platforms. +EXTRA_CXXFLAGS= -Wall -W -Wmissing-prototypes -Wmissing-declarations -Wconversion CXXFLAGS = $(CFLAGS) $(USER_CXXFLAGS) $(EXTRA_CXXFLAGS) $(MODULE_CXXFLAGS) INCLUDES = -Iinclude -I$(outdir) -I$(include-lib) -I$(libout) -I$(include-flower) -I$(flowerout) CXX_OUTPUT_OPTION = $< -o $@ -LDFLAGS = $(EXTRA_LDFLAGS) $(MODULE_LDFLAGS) -L $(depth)/lib/out -L $(depth)/flower/out +LDFLAGS = $(EXTRA_LDFLAGS) $(MODULE_LDFLAGS) -L$(depth)/lib/out -L$(depth)/flower/out LOADLIBES = $(EXTRA_LIBES) $(MODULE_LIBES) -lg++ # need lg++ for win32, really! # @@ -178,14 +180,15 @@ endif LIBRARY = $(LIB_PREFIX)$(NAME)$(LIB_SUFFIX) # -STRIPDEBUG=true #replace to do stripping of certain objects +#replace to do stripping of certain objects +STRIPDEBUG=true DISTFILES=$(EXTRA_DISTFILES) Makefile $(ALL_SOURCES) DOCDIR=$(depth)/$(outdir) # .hh should be first. Don't know why -# take some trouble to auto sources and obsolete stuff. -progdocs=$(shell find -name '*.hh' |egrep -v 'obsolete/|out/') $(shell find -name '*.cc'|egrep -v 'out/|obsolete/') +# take some trouble to vauto ignore sources and obsolete stuff. +progdocs=$(shell find ./ -name '*.hh' |egrep -v 'obsolete/|out/') $(shell find -name '*.cc'|egrep -v 'out/|obsolete/') pod2html=pod2html diff --git a/make/lilypond.lsm b/make/lilypond.lsm index 5e09dc7878..0600cc065d 100644 --- a/make/lilypond.lsm +++ b/make/lilypond.lsm @@ -2,8 +2,8 @@ Begin3 Title: LilyPond -Version: 0.0.53 -Entered-date: 04/21/97 +Version: 0.0.54 +Entered-date: 04/22/97 Description: LilyPond is a program which converts a music-script (mudela) into TeX output, or MIDI to produce multi-staff scores. Features include multiple meters, clefs, keys, lyrics, versatile input-language, cadenzas @@ -13,7 +13,7 @@ Author: hanwen@stack.nl (Han-Wen Nienhuys) jan@digicash.com (Jan Nieuwenhuizen) Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys) Primary-site: pcnov095.win.tue.nl /pub/lilypond/ - 300k lilypond-0.0.53.tar.gz + 300k lilypond-0.0.54.tar.gz Alternate-site: Original-site: Platform: unix/win32, GNU C++ diff --git a/make/lilypond.spec b/make/lilypond.spec index bd7f88d2f7..cc8fa318fb 100644 --- a/make/lilypond.spec +++ b/make/lilypond.spec @@ -1,9 +1,9 @@ Name: lilypond -Version: 0.0.53 +Version: 0.0.54 Release: 1 Copyright: GPL Group: Applications/Publishing -Source0: pcnov095.win.tue.nl:/pub/lilypond/lilypond-0.0.53.tar.gz +Source0: pcnov095.win.tue.nl:/pub/lilypond/lilypond-0.0.54.tar.gz Summary: A preprocessor to make TeX typeset music. URL: http://www.stack.nl/~hanwen/lilypond Packager: Han-Wen Nienhuys @@ -14,23 +14,27 @@ Buildroot: /tmp/lilypond_build LilyPond is a program which converts a music-script (mudela) into TeX output, or MIDI to produce multi-staff scores. Features include multiple meters, clefs, keys, lyrics, versatile input-language, cadenzas -beams, slurs, triplets, multi voices. +beams, slurs, triplets, multiple voices. %prep %setup %build -configure --enable-checking --enable-printing --prefix=/usr --enable-optimise +configure --enable-checking --disable-debugging --enable-printing --prefix=/usr --enable-optimise --enable-shared make all %install strip bin/lilypond bin/mi2mu make prefix="$RPM_BUILD_ROOT/usr" install %files -%doc Documentation/out/AUTHORS.text Documentation/out/CodingStyle.text Documentation/out/INSTALL.text Documentation/out/MANIFESTO.text Documentation/out/convert-mudela.text Documentation/out/error.text Documentation/out/examples.text Documentation/out/faq.text Documentation/out/index.text Documentation/out/language.text Documentation/out/lilygut.text Documentation/out/lilypond.text Documentation/out/mudela.text Documentation/lelie_logo.gif +%doc Documentation/out/AUTHORS.text Documentation/out/CodingStyle.text Documentation/out/INSTALL.text Documentation/out/MANIFESTO.text Documentation/out/convert-mudela.text Documentation/out/error.text Documentation/out/examples.text Documentation/out/faq.text Documentation/out/index.text Documentation/out/language.text Documentation/out/lilygut.text Documentation/out/lilypond.text Documentation/out/mudela.text input/cadenza.ly input/collisions.ly input/coriolan-alto.ly input/error.ly input/fugue1.midi.ly input/kortjakje.ly input/maartje.ly input/martien.ly input/martien.tex input/mlalt.ly input/mlcello.ly input/mlvio1.ly input/mlvio2.ly input/plet.ly input/pre1.midi.ly input/rhythm.ly input/scales.ly input/scsii-menuetto.ly input/scsii-menuetto.tex input/standchen.ly input/standchen.tex input/twinkle.ly input/wohltemperirt.ly Documentation/lelie_logo.gif +/usr/bin/convert-mudela /usr/bin/lilypond +/usr/lib/libflower.so /usr/bin/mi2mu /usr/man/man1/lilypond.1 /usr/man/man5/mudela.5 +/usr/man/man1/convert-mudela.1 /usr/lib/texmf/texmf/tex/lilypond/ +/usr/lib/texmf/texmf/fonts/source/lilypond/ /usr/share/lilypond/ %post diff --git a/make/lilypond.spec.in b/make/lilypond.spec.in index c301043366..a30e634fbd 100644 --- a/make/lilypond.spec.in +++ b/make/lilypond.spec.in @@ -14,23 +14,27 @@ Buildroot: /tmp/lilypond_build LilyPond is a program which converts a music-script (mudela) into TeX output, or MIDI to produce multi-staff scores. Features include multiple meters, clefs, keys, lyrics, versatile input-language, cadenzas -beams, slurs, triplets, multi voices. +beams, slurs, triplets, multiple voices. %prep %setup %build -configure --enable-checking --enable-printing --prefix=/usr --enable-optimise +configure --enable-checking --disable-debugging --enable-printing --prefix=/usr --enable-optimise --enable-shared make all %install strip bin/lilypond bin/mi2mu make prefix="$RPM_BUILD_ROOT/usr" install %files -%doc @TEXT_DOCS@ Documentation/lelie_logo.gif +%doc @TEXT_DOCS@ @EXAMPLE_LYS@ Documentation/lelie_logo.gif +/usr/bin/convert-mudela /usr/bin/lilypond +/usr/lib/libflower.so /usr/bin/mi2mu /usr/man/man1/lilypond.1 /usr/man/man5/mudela.5 +/usr/man/man1/convert-mudela.1 /usr/lib/texmf/texmf/tex/lilypond/ +/usr/lib/texmf/texmf/fonts/source/lilypond/ /usr/share/lilypond/ %post diff --git a/mf/Makefile b/mf/Makefile new file mode 100644 index 0000000000..3a2fb59ea8 --- /dev/null +++ b/mf/Makefile @@ -0,0 +1,62 @@ +# +# project LilyPond -- the musical typesetter +# title makefile for yet to add in MF files +# file ../Makefile +# +# Copyright (c) 1997 by +# Jan Nieuwenhuizen +# Han-Wen Nienhuys +# + +# subdir level: +# +depth = .. +# + +# generic variables: +# +include ./$(depth)/make/Variables.make + +include ./$(depth)/.version + +# descent order into subdirectories: +# +SUBDIRS = +# + +# +include ./$(depth)/make/Files.make +MFFILES:=$(wildcard *.mf) + +EXTRA_DISTFILES = $(MFFILES) README + + +# list of custom libraries: +# +CUSTOMLIBES = \ + +LOADLIBES += +# + +# main target of this module: +# +MAINTARGET = $(EXECUTABLE) + +default: $(MAINTARGET) +# + +# generic targets and rules: +# +include ./$(depth)/make/Targets.make +include ./$(depth)/make/Rules.make +# + +lily-mfdir = $(MFDIR)/lilypond + +localinstall: + $(INSTALL) -d $(lily-mfdir) + $(INSTALL) -m 755 $(MFFILES) $(lily-mfdir) + +localuninstall: + for i in $(MFFILES); do rm -f $(lily-mfdir)/$$i; done + -rmdir $(lily-mfdir) diff --git a/mf/README b/mf/README new file mode 100644 index 0000000000..f6878bc0f0 --- /dev/null +++ b/mf/README @@ -0,0 +1,44 @@ +This is from the package MusixTeX, version T.59 or T.64 (Taupin +version.) + +The documentation states: + + \begin{center} + + Although one of the authors contested that point once the + common work had begun, \musixtex{} may be freely copied, + duplicated and used. However, since it is intended to be a + \ital{freeware} you are not allowed to sell it, and the fee + you may ask for distributing it must be limited to + maintenance, support and duplication costs. You may take parts + of it to include in other packages, but no packages called + \musixtex{} may be distributed under this name if different + from the original distribution (except obvious bug corrections + or text font adaptations for specific implementations). + + \musixtex{} may be included in further commercial packages, + provided that no fee is charged for \musixtex{} itself. + + \end{center} + + +A part (the fonts) are included in this package, which is not called +\musixtex, so this not a copyright infringement. + + +MusixTeX is copyright 19?? by: + + Daniel Taupin, + + Laboratoire de Physique des Solides (associ\'e au CNRS), + b\^atiment 510, Centre Universitaire, F-91405 ORSAY Cedex + + + Ross Mitchell + + CSIRO Division of Atmospheric Research, Private Bag No.1, + Mordialloc, Victoria 3195, Australia + + Andreas Egler + + (Ruhr--Uni--Bochum) Ursulastr. 32 D-44793 Bochum diff --git a/mf/musexgen.mf b/mf/musexgen.mf new file mode 100644 index 0000000000..1b73e01bd8 --- /dev/null +++ b/mf/musexgen.mf @@ -0,0 +1,194 @@ +% this is musexgen.mf + +% Here are two types of pianobrackets available, they are absolute compatible, +% so choose this one you prefer (search for '%!!!') + +path p; +picture save_pic; + +pen thin_pen, med_pen; +thin_pen:= pencircle scaled max(1,.2pt+blacker); +med_pen:= pencircle scaled med; + +%%%%%%% +message (""); +%%%%%%% + +firstbrace:=20; % smallest brace is 2*20 pt (\simeq 14mm) +lastbrace:=67; % largest brace is 2*67 pt (\simeq 47mm) + +%%% from Stanislav Kneifl + +def drawpianobracket (expr height) = + u# := 1nhh#/5pt# * 1pt#; + v# := (height/40) * 1pt#; + define_pixels (u, v); +% beginchar (height-firstbrace, 1.25nhh#, 0, 0); + beginchar (height-firstbrace, 0, 0, 0); + z1 = origin; + z2 = (4.7u, 7v); + z3 = (3.6u, 16.5v); + z4 = (1.9u, 25v); + z5 = (2.28u, 32v); + z6 = (w, 40v); + penpos1 (max(1,0.1u), 125); + penpos2 (1.2u, 180); + penpos3 (3.2u, 195); + penpos4 (2.5u, 180); + penpos5 (1.14u, 180); + penpos6 (max(2,0.3u), 150); + penstroke z1e{dir 35}..z2e..z3e..z4e..z5e..{dir 60}z6e; + currenttransform := identity reflectedabout ((0,0),(1,0)); + penstroke z1e{dir 35}..z2e..z3e..z4e..z5e..{dir 60}z6e; + currenttransform := identity; +% inserted + currentpicture:=currentpicture shifted (round(-1.75nhh), 0); +% + endchar; +enddef; + +def bigbrace(expr v) = + beginchar (v-firstbrace, 0, 0, 0); + " brace vsize "&decimal round(2v*pt#)&"pt"; + vwidth:=v*pt; + hwidth:=max(.1vwidth,3.25pt); + hwidth:=min(hwidth,6.5pt); + actwidth:=.035vwidth; + x1=.25nhw; y1=vwidth; + x2l=-.8hwidth; y2=2/3vwidth; + x3r=.2hwidth; y3=1/3vwidth; + x4=-hwidth; y4=0; + penpos1(max(1,.25pt),-35); + penpos2(1.5med+actwidth,40); + penpos3(1.75med+actwidth,45); + penpos4(max(1,.2pt),-90); + penstroke z1e..z2e..z3e..{left+sw}z4e; + currentpen:= pencircle; draw z1..z2..z3..{left+sw}z4; + addto currentpicture also currentpicture reflectedabout (origin, right); + penlabels(1,2,3,4); + currentpicture:= currentpicture shifted (round(-.75nhh), 0); + endchar; +enddef; + +%!!! comment the line 'bigbrace' and uncomment the line 'drawpianobracket' +% or leave it like it is !!! + +for v=firstbrace upto lastbrace : + bigbrace (v); +% drawpianobracket (v); +endfor; + +%%%%%%% +message (""); +%%%%%%% +% glissando{slide} (slope [degree]) + +def glissando (expr theta)= + x1=-1; y1=0; z2=z1+(.5nhw,0); z3=z1+(nhw+1,0); + p:= z1{1.25up+right}..{1.25down+right}z2{1.25down+right}..{1.25up+right}z3; + pickup penrazor scaled (.075nhw+thick) rotated (theta+65); + draw p rotated theta; + labels (1,2,3); +enddef; + +for slope=1 upto 8: + + beginchar(56+slope-1, (cosd(10slope))*nhw#,(sind(10slope))*nhw#, 0); + " glissando element slope "&decimal (10slope)&" degree"; + glissando (10slope); + save_pic:= currentpicture; + endchar; + + beginchar(64+slope-1, (cosd(10slope))*nhw#, (sind(10slope))*nhw#, 0); + " glissando element slope "&decimal (-10slope)&" degree"; + currentpicture:= save_pic reflectedabout (origin, right); + endchar; + +endfor; + +%%%%%%% +message (""); +%%%%%%% +def tabulatur (expr nd)= + hwidth:=1/5w; + x1=x2=y2=y3=0; x3=w; y1=-nd; + fill unitsquare xscaled (w+2thinwidth) yscaled (med+.2pt) + shifted(-thinwidth,0); + pickup thin_pen; + for v=1 upto 5 : + draw (z2--z3) shifted (0,v*-hwidth); + endfor; + + for v=0 upto 5 : + draw (z1--z2) shifted (v*hwidth,0); + endfor; + labels (1,2,3); +enddef; + +%beginchar(72, 15/4nhw#, 0, 0);" grid"; +% tabulatur (54/10nhh); +%endchar; + +%beginchar(73, 15/8nhw#, 0, 0); " dot"; +% fill fullcircle scaled .675nhh shifted (w,-.45nhh); +%endchar; + +%beginchar(74, 15/4nhw#, 0, 0); " bar"; +% fill unitsquare xscaled w yscaled .3nhh shifted (0,-.6nhh); +%endchar; + +shift:=.15nhh; +def Circle (expr nh)= + x1l=.1w; x2=x4=.5w; x3l=.9w; + y1=y3=.5nh+shift; y2=.1nh+shift; y4=.9nh+shift; + penpos1(med, 0); + penpos2(thinwidth,90); + penpos3(med,180); + penpos4(thinwidth, 270); + penstroke z1e..z2e..z3e..z4e..cycle; + pickup pencircle; draw z1..z2..z3..z4..cycle; +enddef; + +%beginchar(75, 3/4nhw#, 0, 0); " circle"; +% Circle (.9nhh); +%endchar; + +def Cross (expr nh)= + x1=x3=.2w; x2=x4=.8w; + y1=y4=.2nh+shift; y2=y3=nh-.2nh+shift; + pickup med_pen; + draw z1--z2; draw z3--z4; +% labels (1,2,3,4); +enddef; + +%beginchar(76, 3/4nhw#, 0, 0); " cross"; +% Cross (.9nhh); +%endchar; + +%beginchar(77, 3/4nhw#, 0, 0); " blank"; +%endchar; + +beginchar(72, 3nhw#, 0, 0);" small grid"; + tabulatur (108/25nhh); +endchar; + +beginchar(73, 3/2nhw#, 0, 0); " small dot"; + fill fullcircle scaled .54nhh shifted (w,-.36nhh); +endchar; + +beginchar(74, 3nhw#, 0, 0); " small bar"; + fill unitsquare xscaled w yscaled .24nhh shifted (0,-.48nhh); +endchar; + +beginchar(75, 3/5nhw#, 0, 0); " small circle"; + Circle (.72nhh); +endchar; + +beginchar(76, 3/5nhw#, 0, 0); " small cross"; + Cross (.72nhh); +endchar; + +% the next seems to be senseless, but it isn't + +beginchar(77, 3/5nhw#, 0, 0); " small blank"; +endchar; diff --git a/mf/musix11.mf b/mf/musix11.mf new file mode 100644 index 0000000000..fd70f02eca --- /dev/null +++ b/mf/musix11.mf @@ -0,0 +1,28 @@ + +font_identifier:="musix11"; + +mode_setup; + +font_size 10.24pt#; + +nhh#:=2.56pt#; +nhw#:=3.072pt#; +gregwidth#:=0.5*sqrt(2)*nhw#; + +thin#:=1/50designsize; +med#:=1/33designsize; +thick#:=1/16designsize; + +thinwidth := 0.064pt; +beamht#:=0.48nhh#; + +define_pixels(nhh,nhw,beamht,gregwidth); +define_blacker_pixels(thin,med,thick); + +pair ne,se,sw,nw; %northeast,southeast,southwest,northwest +ne = up+right; se = down+right; sw = down+left; nw = up+left; + +font_x_height nhh#; +font_quad nhw#; + +input musixgen diff --git a/mf/musix13.mf b/mf/musix13.mf new file mode 100644 index 0000000000..918db5f01b --- /dev/null +++ b/mf/musix13.mf @@ -0,0 +1,28 @@ + +font_identifier:="musix13"; + +mode_setup; + +font_size 12.8pt#; + +nhh#:=3.2pt#; +nhw#:=3.84pt#; +gregwidth#:=0.5*sqrt(2)*nhw#; + +thin#:=1/50designsize; +med#:=1/33designsize; +thick#:=1/16designsize; + +thinwidth := 0.08pt; +beamht#:=0.48nhh#; + +define_pixels(nhh,nhw,beamht,gregwidth); +define_blacker_pixels(thin,med,thick); + +pair ne,se,sw,nw; %northeast,southeast,southwest,northwest +ne = up+right; se = down+right; sw = down+left; nw = up+left; + +font_x_height nhh#; +font_quad nhw#; + +input musixgen diff --git a/mf/musix16.mf b/mf/musix16.mf new file mode 100644 index 0000000000..32dbddd36d --- /dev/null +++ b/mf/musix16.mf @@ -0,0 +1,28 @@ + +font_identifier:="musix16"; + +mode_setup; + +font_size 16pt#; + +nhh#:=4pt#; +nhw#:=4.8pt#; +gregwidth#:=0.5*sqrt(2)*nhw#; + +thin#:=1/50designsize; +med#:=1/33designsize; +thick#:=1/16designsize; + +thinwidth := 0.1pt; +beamht#:=0.48nhh#; + +define_pixels(nhh,nhw,beamht,gregwidth); +define_blacker_pixels(thin,med,thick); + +pair ne,se,sw,nw; %northeast,southeast,southwest,northwest +ne = up+right; se = down+right; sw = down+left; nw = up+left; + +font_x_height nhh#; +font_quad nhw#; + +input musixgen diff --git a/mf/musix20.mf b/mf/musix20.mf new file mode 100644 index 0000000000..0bdebdf3f1 --- /dev/null +++ b/mf/musix20.mf @@ -0,0 +1,28 @@ + +font_identifier:="musix20"; + +mode_setup; + +font_size 20pt#; + +nhh#:=5pt#; +nhw#:=1.2*nhh#; +gregwidth#:=0.5*sqrt(2)*nhw#; + +thin#:=1/50designsize; +med#:=1/33designsize; +thick#:=1/16designsize; + +thinwidth := 0.125pt; +beamht#:=0.48nhh#; + +define_pixels(nhh,nhw,beamht,gregwidth); +define_blacker_pixels(thin,med,thick); + +pair ne,se,sw,nw; %northeast,southeast,southwest,northwest +ne = up+right; se = down+right; sw = down+left; nw = up+left; + +font_x_height nhh#; +font_quad nhw#; + +input musixgen diff --git a/mf/musix24.mf b/mf/musix24.mf new file mode 100644 index 0000000000..0b2dc46b71 --- /dev/null +++ b/mf/musix24.mf @@ -0,0 +1,28 @@ + +font_identifier:="musix24"; + +mode_setup; + +font_size 24pt#; + +nhh#:=6pt#; +nhw#:=1.2nhh#; +gregwidth#:=0.5*sqrt(2)*nhw#; + +thin#:=1/50designsize; +med#:=1/33designsize; +thick#:=1/16designsize; + +thinwidth := 0.15pt; +beamht#:=0.48nhh#; + +define_pixels(nhh,nhw,beamht,gregwidth); +define_blacker_pixels(thin,med,thick); + +pair ne,se,sw,nw; %northeast,southeast,southwest,northwest +ne = up+right; se = down+right; sw = down+left; nw = up+left; + +font_x_height nhh#; +font_quad nhw#; + +input musixgen diff --git a/mf/musix25.mf b/mf/musix25.mf new file mode 100644 index 0000000000..529c7ec7ad --- /dev/null +++ b/mf/musix25.mf @@ -0,0 +1,28 @@ + +font_identifier:="musix25"; + +mode_setup; + +font_size 25pt#; + +nhh#:=6.25pt#; +nhw#:=7.5pt#; +gregwidth#:=0.5*sqrt(2)*nhw#; + +thin#:=1/50designsize; +med#:=1/33designsize; +thick#:=1/16designsize; + +thinwidth := 0.15pt; +beamht#:=0.48nhh#; + +define_pixels(nhh,nhw,beamht,gregwidth); +define_blacker_pixels(thin,med,thick); + +pair ne,se,sw,nw; %northeast,southeast,southwest,northwest +ne = up+right; se = down+right; sw = down+left; nw = up+left; + +font_x_height nhh#; +font_quad nhw#; + +input musixgen diff --git a/mf/musix29.mf b/mf/musix29.mf new file mode 100644 index 0000000000..622aeae27f --- /dev/null +++ b/mf/musix29.mf @@ -0,0 +1,28 @@ + +font_identifier:="musix29"; + +mode_setup; + +font_size 29pt#; + +nhh#:=7.2pt#; +nhw#:=1.2*nhh#; +gregwidth#:=0.5*sqrt(2)*nhw#; + +thin#:=1/50designsize; +med#:=1/33designsize; +thick#:=1/16designsize; + +thinwidth := 0.15pt; +beamht#:=0.48nhh#; + +define_pixels(nhh,nhw,beamht,gregwidth); +define_blacker_pixels(thin,med,thick); + +pair ne,se,sw,nw; %northeast,southeast,southwest,northwest +ne = up+right; se = down+right; sw = down+left; nw = up+left; + +font_x_height nhh#; +font_quad nhw#; + +input musixgen diff --git a/mf/musixgen.mf b/mf/musixgen.mf new file mode 100644 index 0000000000..e408f8a787 --- /dev/null +++ b/mf/musixgen.mf @@ -0,0 +1,1518 @@ +% next changes: - redesigning accidentals +% - new accents +% - new gregorian symbols +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% this is musixgen.mf (c) +% +% Version T.59 [September 96] +% - added one more gregorian symbol (126) +% +% Version T.40 [September 95] +% - corrected gregorianFclef (123) +% +% Version 0.37 [March 95] +% - introduced reverseAllabreve (122) +% +% Version 0.25 [December 94] +% - some new chars +% - added the beamfonts at pos x+128 to save memory +% - changed coda to be centered +% - changed the flags +% - changed the position of some chars to save time +% +% ... - trouble shooting, minor changes +% +% Version 0.99b[April 94] +% - added the new signs from Daniel Taupin +% +% Version 0.99 [February 94] +% -'bravely' changed the tfm informations to save memory +% - redesigned chars 14, 15, 35, 36, 53, 71, 72, 80, 81, 86, 93 +% - removed * 'never used' chars 37-39, 55-57, 69-70, +% 77-79, 91-99, 101-119 +% * (de)crescendi 16-23 -> now in musixlin +% - introduced some new chars 0-11, 16-23, 37-39, 57, 77-79, +% 99-117 +% - changed the position of some chars to save memory +%%%%%%%%%% +% this was musicgen.mf +% +% Version 4.89 [September 93] Andreas Egler +% - blacker influence now +% - redesigned chars 71, 72, 53, 123 +% +% Version 4.88 [January 93] Ross Mitchell +% - redesigned chars 63, 64, 65, 66 +% +% Version 4.87 [] Daniel Taupin +% +% Version 2.00 [] Daniel Taupin +% +% Version 1.00 [August 86] Angelika Schofer/Andrea Steinbach +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% free positions: 125-127, 188-191, 252-255 +% heights : 0, 0.5, 1, 1.5, 2.25, 3.25, 4, 4.75, 5.25 +% depths : 0, 0.5, 1, 1.5, 2.25 + +%{{{ This always indicates a lowres fix to avoid seperated points +%}}} and/or 'invisible' lines. It doesn't affect higher resolutions !! + +pair pone, ptwo; +transform t; +path p; + +hlthick=.2pt; +lthick=.4pt; + +pen line_pen, med_pen, coda_pen, thin_pen; +med_pen:= pencircle scaled med; +line_pen:= pencircle scaled lthick; +coda_pen:= pencircle xscaled 1.25thick yscaled max(1,.75med); +thin_pen:= pencircle scaled max(1,.25pt); + +apog_fact=.75; +apog_nhw#=apog_fact*nhw#; + +picture save_pic, elem_pic; + +%%%%%%%%%%%%%%% +% basic def's % +%%%%%%%%%%%%%%% + +def savepic = save_pic:= currentpicture enddef; +def save_elempic = elem_pic:= currentpicture enddef; +def callpic = currentpicture:= save_pic enddef; + +def mirror (expr pone, ptwo) = + currentpicture:=currentpicture reflectedabout(round(pone),round(ptwo)) +enddef; + +def add_mirror (expr pone, ptwo) = + addto currentpicture also currentpicture + reflectedabout (round(pone), round(ptwo)) +enddef; + +def call_mirror (expr pone, ptwo) = callpic; mirror (pone, ptwo) enddef; + +def add_shift (expr pone, ptwo) = + addto currentpicture also currentpicture shifted (pone, ptwo) +enddef; + +def call_add_shift (expr pone, ptwo) = + callpic; add_shift (pone, ptwo) +enddef; + +def add_elempic (expr pone, ptwo) = + addto currentpicture also elem_pic shifted (pone, ptwo) +enddef; + +def call_add_save_elempic (expr pone, ptwo) = + callpic; add_elempic(pone, ptwo); savepic +enddef; + +def shift_pic (expr pone, ptwo) = + currentpicture:=currentpicture shifted (round(pone),round(ptwo)) +enddef; + +def fill_circle (expr diameter, zshift) = + fill fullcircle scaled diameter shifted zshift +enddef; + +def fill_square (expr xwidth, ywidth, zshift) = + fill unitsquare xscaled xwidth yscaled ywidth shifted zshift +enddef; + +% + +def staff= + for i=0 upto 4: + pickup pencircle yscaled lthick; + draw (-5nhw,i*nhh)--(5nhw,i*nhh); + endfor +enddef; + +def Staff= + for i=0 upto 4: + pickup pencircle yscaled lthick; + draw (-5nhw,(i*nhh-.5nhh))--(5nhw,(i*nhh-.5nhh)); + endfor +enddef; + +def upstem= + fill_square (lthick, 5nhh, (0,-5nhh)) +enddef; + +def downstem= + fill_square (lthick, 5nhh, (nhw-hlthick,0)) +enddef; + +% eobasicdefs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +%%%%%%% +message (""); +%%%%%%% + +beginchar(0, 0, 0, 0); "duration dot"; % correct 3=>0 DT + fill_circle (1/3nhh+blacker, (1.5nhw, 0)); + save_elempic; + savepic; +endchar; + +beginchar(1, 0, 0, 0); "double duration dot"; + call_add_shift (.5nhw, 0); + savepic; +endchar; + +beginchar(2, 0, 0, 0); "triple duration dot"; + callpic; + add_elempic (nhw, 0); +endchar; + +beginchar(3, 0, nhh#, nhh#); "left parenthesis"; % correct 0=>3 DT + x11=x13=-.1nhw; y12=0; x12=-.3nhw; y11=-y13=-.75nhh; + pickup med_pen; + draw z11..z12..z13; + savepic; +endchar; + +beginchar(4, 0, nhh#, nhh#); "right parenthesis"; + call_mirror ((.5nhw,0),(.5nhw,1)); +endchar; + +beginchar(5, 0, nhh#, nhh#); "cautionary parentheses"; + callpic; + add_mirror ((.3nhw, 0),(.3nhw, 1)); +endchar; + +beginchar(6, 0, nhh#, nhh#); "cautionary wide parentheses";% -> bb + callpic; + add_mirror ((.55nhw, 0),(.55nhw, 1)); +endchar; + +%%%%%%% +message(""); +%%%%%%% + +beginchar(120, 0, 1.5nhh#, 0); "harmonics"; + pickup thin_pen; + draw fullcircle scaled .5nhw shifted (.5nhw, nhh); +endchar; + +%beginchar(XX, 0, 1.5nhh#, 0); "???"; +% x1=0; x2=.5nhw; x3=nhw-x1; x3=x4+.25nhw; x6=x1+med; +% y1=y6=y4=y3=nhh; y2=y1+nhh; +% z5-z6=whatever*(z2-z1); +% z5-z4=whatever*(z2-z3); +% fill z1--z2--z3--z4--z5--z6--cycle; +% fill_circle (thick, ((x5,y1+.5thick))); +% savepic; +%endchar; + +beginchar(20, 0, 2.25nhh#, 0); "upper sforzato"; + x1=1/12nhw; x2=.5nhw; x3=nhw-x1; x3=x4+.25nhw; x6=x1+med; + y1=y6=y4=y3=nhh; y2=y1+nhh; + z5-z6=whatever*(z2-z1); + z5-z4=whatever*(z2-z3); + fill z1--z2--z3--z4--z5--z6--cycle; + savepic; +endchar; + +beginchar(21, 0, 0, 2.25nhh#); "lower sforzato"; + call_mirror (origin, right); +endchar; + +beginchar(22, 0, nhh#, 0); "downbow"; + fill_square (thin, nhh, (-thin, .4nhh)); + fill_square (.5nhw+thin+1, .8beamht+thin, (-thin, nhh)); + add_mirror ((.5nhw,0),(.5nhw,1)); +endchar; + +beginchar(23, 0, 1.5nhh#, 0); "upbow"; + pickup med_pen; + draw (.15nhw, 1.7nhh)--(.5nhw, .2nhh); + add_mirror ((.5nhw,0),(.5nhw,1)); +endchar; + +beginchar(24, 0, nhh#, 0); "upper staccato"; + fill_circle (.275nhw+blacker, (.5nhw, nhh)); + savepic; +endchar; + +beginchar(25, 0, 0, nhh#); "lower staccato"; + call_mirror (origin, right); +endchar; + +beginchar(18, 0, nhh#, 0); "upper tenuto/staccato"; + fill_square (nhw, 1.25med, (0, 1.2nhh-.625med)); + fill_circle (.275nhw+blacker, (.5nhw, .9nhh)); + savepic; +endchar; + +beginchar(19, 0, 0, nhh#); "lower tenuto/staccato"; + call_mirror (origin, right); +endchar; + +beginchar(26, 0, nhh#, 0); "upper portato (tenuto)"; + fill_square (nhw, 1.25med, (0, nhh-.625med)); + savepic; +endchar; + +beginchar(27, 0, 0, nhh#); "lower portato (tenuto)"; + call_mirror (origin, right); +endchar; + +beginchar(28, 0, 1.5nhh#, 0); "upper staccatissimo"; + rayon:= thin+.125nhh; + x1=x3=x2+rayon=x4-rayon=.5nhw; + y2=y4=y1-rayon=y3+.5nhh=1.15nhh; + fill z3--z4{up}..z1..{down}z2--cycle; + savepic; +endchar; + +beginchar(29, 0, 0, 1.5nhh#); "lower staccatissimo"; + call_mirror (origin, right); +endchar; + +beginchar(30, 0, 2.25nhh#, 0); "upper marcato"; + pickup med_pen; + draw (-.2nhw, 1.9nhh)--(1.2nhw, 1.5nhh)--(-.2nhw, 1.1nhh); + savepic; +endchar; + +beginchar(31, 0, 0, 2.25nhh#); "lower marcato"; + call_mirror (origin, right); +endchar; + +%%%%%%% +message (""); +%%%%%%% + +NHW=nhw+hlthick; + +beginchar(7, 0, .5nhh#, .5nhh#); "quarter note"; +% makeshift, expedience +if pixels_per_inch=600: + if NHW>50: corNHW=1.04*NHW; else: corNHW=1.04*NHW+1; fi + fill fullcircle xscaled corNHW yscaled 1.85h + rotated 20 shifted (.5NHW-.5, 0); +else: + corNHW=1.065*NHW; + fill fullcircle xscaled corNHW yscaled 1.85h + rotated 20 shifted (.5NHW, 0); +fi +endchar; + +beginchar(8, 0, .5nhh#, .5nhh#); "half note"; + penpos1(max(1,2hlthick), 0); + penpos3(max(1,2hlthick), 180); + penpos2(thick,-90); + penpos4(thick, 90); + -x1l = .53NHW; + x3l = .5NHW; + x2 = x4 = y1 = y3 = 0; + y2l =-y4l = h; + penstroke (z1e{up}..z2e{right}..z3e{down}..z4e{left}..cycle) + rotated 20 shifted (.5NHW, 0); +endchar; + +beginchar(9, 0, .5nhh#, .5nhh#); "whole note"; + x1= y1 = y3 = y5 = y7 = 0; + x3= 2x2 = 2x4 = 2x6 = 2x8 = 5/4nhw; + y2=-y4 = h; + x5= x3-x7 = x1+.375nhw-blacker; + y6=-y8 = y2-.1thin; + fill z1{curl3}..z2..{curl3}z3{curl3}..z4..{curl3}cycle; + unfill (z5..z6..z7..z8..cycle) rotatedaround ((x2,0), 45) shifted (.5,.5); +%{{{ + currentpen:= pencircle; + draw rt z1{curl3}..bot z2..{curl3}lft z3{curl3}..top z4..{curl3}cycle; +%}}} + labels(range 1 thru 8); + savepic; +endchar; + +beginchar(56, 0, .5nhh#, .5nhh#); "whole note with | --> |O|"; + callpic; + fill_square (.6thick, nhh, (-.55thick,-.5nhh)); + fill_square (.6thick, nhh, (5/4nhw-.05thick,-.5nhh)); +endchar; + +beginchar(32, 0, .5nhh#, .5nhh#); "brevis";% 2 whole notes + fill_square (5/4nhw, .25nhh, (0,.25nhh)); + add_mirror (origin, right); + x1=x2=0; x3=x4=5/4nhw; y1=-y2=y3=-y4=.7nhh; + pickup line_pen; + draw z1--z2; draw z3--z4; + savepic; +endchar; + +beginchar(39, 0, .5nhh#, .5nhh#); "longa";% 4 whole notes + callpic; + pickup line_pen; + draw (5/4nhw,-.7nhh)--(5/4nhw,-1.7nhh); +endchar; + +beginchar(36, 0, .5nhh#, .5nhh#); "maxima";% 8 whole notes + fill_square (5/2nhw, .3nhh, (0,.2nhh)); + add_mirror (origin, right); + pickup line_pen; + draw (0,.7nhh)--(0,-.7nhh); draw (5/2nhw,.7nhh)--(5/2nhw,-1.7nhh); +endchar; + +beginchar(37, 0, .5nhh#, .5nhh#); "filled diamond";% -> triangle + fill unitsquare scaled (.5*sqrt(2)*NHW) rotated -45; +endchar; + +def square (expr mw)= + fill_square (sqrt(2)*.5mw, max(1,thin), origin) rotated -45; + fill_square (sqrt(2)*.5mw, .15nhw, (0,-.15nhw)) rotated 45; + save_elempic; + mirror (origin,up); + mirror (origin,left); + shift_pic (mw+.5,0); + add_elempic(0,0); +% mirror (origin,right);% I've seen this too, somewhere ... +enddef; + +beginchar(38, 0, .5nhh#, .5nhh#); "unfilled diamond";% -> rimshot + square (NHW); +endchar; + +beginchar(99, 0, .5nhh#, .5nhh#); "oldstyle quarter notehead up"; + x1=x4=0; x2=x3=NHW; y1=y2=-y3=-y4=h-hlthick; + fill z1{dir-10}..z2--z3{dir-170}..z4--cycle; + savepic; +endchar; + +beginchar(100, 0, .5nhh#, .5nhh#); "oldstyle quarter notehead down"; + call_mirror(origin, right); +endchar; + +beginchar(101, 0, .5nhh#, .5nhh#); "oldstyle half notehead up"; + pthick:=.2nhh; + x1=0; x2=NHW; y1=y2=h-.5pthick+hlthick; + pickup penrazor scaled pthick rotated 90; + draw z1{dir-10}..z2; + add_shift (0, -nhh+pthick); + fill_square (lthick, nhh-hlthick, (0, -h+hlthick)); + fill_square (lthick, nhh-hlthick, (nhw-hlthick, -h+hlthick)); + savepic; +endchar; + +beginchar(102, 0, .5nhh#, .5nhh#); "oldstyle half notehead down"; + call_mirror(origin, right); +endchar; + +beginchar(111, 0, .5nhh#, .5nhh#); "cross"; % -> closed hihat + x1=0; x2=nhw; y1=-.5nhw; y2=-y1; + pickup med_pen; + draw top rt z1--bot lft z2; + add_mirror((.5nhw,0),(.5nhw,1)); + savepic; +endchar; + +beginchar(112, 0, .5nhh#, .5nhh#); "halfcircled cross";% -> halfclosed hihat + callpic; + pickup thin_pen; + draw halfcircle scaled nhw shifted (.5nhw,0); +endchar; + +beginchar(113, 0, .5nhh#, .5nhh#); "circled cross";% -> open hihat + callpic; + pickup thin_pen; + draw fullcircle scaled nhw shifted (.5nhw,0); +endchar; + +def doublesharp (expr mw, xshift)= + x1=y2=x3=0; y1=x2=y4=.5mw; y3=.5mw-x4=.1mw; + z4'=.925[z3,z4]; z3'=.925[z4,z3]; % *** + penpos2(max(1,thin),45); +%%% a 'nicer' look for 'high'res-printers gives +if pixels_per_inch > 500: + fill z1..{dir-125}z3'{dir35}..{se}z2l--z2r--z1--cycle; + fill z1..{dir35}z4'{dir-125}..{se}z2r--z2l--z1--cycle; % *** +else : +%%% but this causes 'strange path' on lower resolutions + fill z1..{dir-110}z3'{dir30}..{se}z2l--z2r--z1--cycle; + fill z1..{dir20}z4'{dir-120}..{se}z2r--z2l--z1--cycle; % *** +fi +%{{{ + currentpen:= pencircle; draw z1--(x2+1,y2-1);% draw (x3'+1,y3'+1)--z5'; +%}}} +% add_mirror ((0,.5mw),(.5mw,0)); % *** + add_mirror ((.5mw,-.5mw),(.5mw,.5mw)); + add_mirror (origin, right); + shift_pic (xshift, 0); +enddef; + +beginchar(114, 0, .5nhh#, .5nhh#); "doublesharp notehead";% -> ride cymbal + doublesharp (.95nhw,0.025nhw); + savepic; +endchar; + +beginchar(115,0, .5nhh#, .5nhh#);"circled doublesharp notehead";%->crash cymbal + callpic; + pickup thin_pen; + draw fullcircle scaled nhw shifted (.5nhw,0); +endchar; + +beginchar(116, 0, .5nhh#, .5nhh#); "triangle";% -> rattle + x1=y1=y2=0; x2=2x3=nhw; y3=.8h; + pickup med_pen; + draw z1--z2--z3--z1; +endchar; + +beginchar(117, 0, .5nhh#, .5nhh#); "bongo cross"; + pickup med_pen; + draw (0,0)--(nhw,0); + draw (0.5nhw,-0.5nhw) -- (0.5nhw,0.5nhw); +endchar; + +beginchar(118, 0, .5nhh#, .5nhh#); "rhombus";% -> shaker + x1=x4=y2=y4=0; y1=-y3=-h; x2=x3=NHW; + fill z1--z2--z3--z4--cycle; +endchar; + +beginchar(95, 0, .5nhh#, .5nhh#); "gregorian square"; + x1=x4=0; x2=x3=gregwidth; y1=y2=-y3=-y4=.5gregwidth-lthick; + fill z1{dir 15}..z2--z3{dir 165}..z4--cycle; + shift_pic(0,-hlthick); + savepic; +endchar; + +beginchar(96, 0, .5nhh#, .5nhh#); "gregorian square left"; + callpic; + fill_square (med, 1.5nhh,(0, -1.5nhh)); +endchar; + +beginchar(97, 0, .5nhh#, .5nhh#); "gregorian square right"; + callpic; + fill_square (med, 1.5nhh,(gregwidth-med, -1.5nhh)); + savepic; +endchar; + +beginchar(124, 0, .5nhh#, .5nhh#); "porrectus"; + x1=x4=0; x2=x3=2.5*gregwidth; y1=-y4=.5gregwidth-lthick; y2=y1-nhh; y3=y4-nhh; + fill z1..{right}z2--z3{left}..z4--cycle; shift_pic(0,hlthick); + fill_square (med, 1.5nhh,(0, -1.5nhh)); +endchar; + +beginchar(125, 0, .5nhh#, .5nhh#); "quilisma"; + qdecalage:=.12*gregwidth; + x1=x4=-0.2*gregwidth; x2=x3=1.2*gregwidth; + y1+qdecalage=y2-qdecalage=.5gregwidth-lthick;y1=-y3; y2=-y4; + fill z1--z2--z3--z4--cycle; + pickup med_pen; + + draw z4--(z1+0.4*(z1-z4)); + draw (0.667z4+0.333z3)--((0.667z1+0.333z2)+0.4*(z1-z4)); + draw (0.333z4+0.667z3)--((0.333z1+0.667z2)+0.4*(z1-z4)); + draw z3--(z2+0.4*(z1-z4)); + shift_pic(0,-hlthick); +endchar; + +beginchar(126, 0, .5nhh#, .5nhh#); "mirrored gregorian square"; + x1=x4=0; x2=x3=gregwidth; y1=y2=-y3=-y4=-.5gregwidth+lthick; + fill z1{dir -15}..z2--z3{dir -165}..z4--cycle; + shift_pic(0,+hlthick); +endchar; + + + +%%%%%%% +message (""); +%%%%%%% + +flagw:=.8nhw; +flagthick:=nhh; +flagthin:=5thinwidth; + +def flagshape +(expr contflag, width, height, flgthick, flgthin, shifty, flagsense) = + penpos1(flgthick+blacker, 90); % .1 + penpos2(3.25flgthin+blacker, 70);% + x1 = 0; % .2 + y1 = height+shifty-.5flgthick; % + x2 = 3/8width; % .3 + y2 = y1-.45flgthick; % + x3 = width-flgthin/2; % .4(.4) + y3 = y1-1.5flgthick; + + if contflag=1: x4 = x3-.4width; y4 = shifty; + else: x4 = x3; y4 = 2.5flagthick-2flgthick; fi + if flagsense>0: penpos3(1.15flgthin, 35); + else: penpos3(.8flgthin, 0); fi + + penstroke z1e..z2e..z3e{down}..z4; +%{{{ + currentpen:= pencircle; draw lft z1..z2..z3{down}..z4; +%}}} + penlabels(1,2,3,4) +enddef; + +def mirror_flag(expr sense)= if sense<0: mirror((0,h/2),(1,h/2));fi enddef; + +def cflag (expr sense) = + flagshape(1, flagw, 3nhh, flagthick, flagthin, 0, sense); + mirror_flag(sense); + savepic; +enddef; + +def ccflag (expr sense) = + flagshape(5, flagw, 2.25nhh, 2/3flagthick, flagthin, flagthick, sense); + save_elempic; + clearxy; + flagshape(1, flagw, 2.5nhh, 2/3flagthick, flagthin, 0, sense); + savepic; + mirror_flag(sense); +enddef; + +def addflag (expr sense, shifty) = + call_add_save_elempic (0, shifty*.75flagthick); + mirror_flag(sense); +enddef; + +def cccflag (expr sense) = addflag(sense, 1) enddef; +def ccccflag (expr sense) = addflag(sense, 2) enddef; +def cccccflag (expr sense) = addflag(sense, 3) enddef; + +beginchar(40, 0, 3.25nhh#, 0); "8th flag up"; + cflag(1); + shift_pic (0, .5nhh+.5); +endchar; + +beginchar(12, 0, 3.25nhh#, 0); "acciacaturra stem up"; + callpic; + pickup med_pen; + x1=-.25nhw; y1=.2h; x2=1.1nhw; y2=y1+.6(x2-x1); + draw z1--z2; + shift_pic (0, .5nhh+.5); +endchar; + +beginchar(41, 0, 3.25nhh#, 0); "16th flag up"; + ccflag(1); + shift_pic (0, .25nhh); +endchar; + +beginchar(42, 0, 4nhh#, 0); "32th flag up"; + cccflag(1); + shift_pic (0, .25nhh); +endchar; + +beginchar(43, 0, 4.75nhh#, 0); "64th flag up"; + ccccflag(1); + shift_pic (0, .25nhh); +endchar; + +beginchar(44, 0, 5.5nhh#, 0); "128th flag up"; + cccccflag(1); + shift_pic (0, .25nhh); +endchar; + +%%% +% flags up should be wider +%%% +flagw:=nhw; + +beginchar(45, 0, 3.25nhh#, 0); "8th flag down"; + cflag(-1); + shift_pic (0,-.5nhh-.5); +endchar; + +beginchar(13, 0, 3.25nhh#, 0); "acciacaturra stem down"; + callpic; + pickup med_pen; + x1=-.25nhw; y1=1.6nhh; x2=1.2nhw; y2=y1+.6(x2-x1); + draw z1--z2; + shift_pic (0,-.5nhh-.5); +endchar; + +beginchar(46, 0, 3.25nhh#, 0); "16th flag down"; + ccflag(-1); + shift_pic (0,-.25nhh); +endchar; + +beginchar(47, 0, 4nhh#, 0); "32th flag down"; + cccflag(-1); + shift_pic (0,-.25nhh); +endchar; + +beginchar(48, 0, 4.75nhh#, 0); "64th flag down"; + ccccflag(-1); + shift_pic (0,-.25nhh); +endchar; + +beginchar(49, 0, 5.5nhh#, 0); "128th flag down"; + cccccflag(-1); + shift_pic (0,-.25nhh); +endchar; + +%%%%%%% +message(""); +%%%%%%% + +def flat (expr reduction, shiftx, flatsense) = + fthick:= reduction*thick; + penpos4(4/3fthick,0); % 1 + penpos3(1/2fthick,-90); % + penpos6(4/7fthick,90); % 6 + x1 = x2 = x3 = x5 = fthick; % / \ + y1 = 6fthick; y2 = .5y4; % 2 4 + y3l=-2fthick; y5 = y3r; % / + x4 = 3.6fthick; y4 = .1fthick; % 3,5 + y6r= 2fthick; x6 = .5(x2+x4); + t:= identity shifted (round(shiftx),0); + p:= (z1--z5) transformed t; + pickup penrazor scaled max(1,(2sind40*thin)) rotated 40; + draw p; + penstroke (z2..{right}z6e..z4e{sw+down}..{sw}z3e) transformed t; + if flatsense<0: mirror (z5 transformed t, z1 transformed t); fi + penlabels (1,2,3,4,5,6) +enddef; + +beginchar(50, nhw#, 1.5nhh#, .5nhh#); "flat"; + flat (1, 0, 1); + savepic; +endchar; + +beginchar(51, 1.7nhw#, 1.5nhh#, .5nhh#); "doubleflat"; + call_add_shift (.7nhw, 0); +endchar; + +def sharp (expr reduction, zshift) = + sthick:= .5reduction*thick; + nx:= reduction*1.5nhh; + ny:= reduction*.8nhw; + y1 =-y7= nx-1.5sthick; y2 =-y8 = .5sthick-nx; + x1 = x2 = y3 = -y6 = ny-x7 = ny-x8 = 2sthick; + y4 =-y5 = y3 + 3sthick; + x3 = x5 = 0; x4 = x6 = ny; + pickup penrazor scaled max(1,thin) rotated angle(z4-z3); + draw z1--z2; draw z8--z7; + pickup penrazor scaled 3sthick rotated 90; + draw z3--z4; draw z5--z6; + shift_pic (zshift, 0); + labels (range 1 thru 8) +enddef; + +beginchar(52, nhw#, 1.5nhh#, 1.5nhh#); "sharp"; + sharp (1, 0); +endchar; + +beginchar(53, nhw#, .5nhh#, .5nhh#); "doublesharp"; + doublesharp (w, -.1nhw); +endchar; + +def natural (expr reduction, zshift) = + ny:= .8nhw*reduction; + nthick:= 3/4reduction*thick; + x1 = x2 = x3 = nthick+.5thin; + x5 = x6 = x4 = ny-x1; + y1 = -y6 = 1.5nhh*reduction; + y2 = -y5 = 1.6nthick; + y4 = -y3 = y2+4/3nthick; + pickup penrazor scaled max(1,thin) rotated angle(z4-z2); + draw lft z1--bot lft(x3,y3-nthick); + draw top rt(x4,y4+nthick)--rt z6; + pickup penrazor scaled 2nthick rotated 90; + draw (x2-.5,y2)--(x4+.5,y4); + draw (x3-.5,y3)--(x5+.5,y5); + shift_pic (zshift, 0); + labels(1,2,3,4,5,6) +enddef; + +beginchar(54, nhw#, 1.5nhh#, 1.5nhh#); "natural"; + natural (1, 0); +endchar; + +beginchar(90, apog_nhw#, nhh#, .5nhh#); "small flat"; + flat (apog_fact, -.05nhw, 1); + savepic; +endchar; + +beginchar(91, 1.65apog_nhw#, nhh#, .5nhh#); "small doubleflat"; + call_add_shift (.7apog_fact*nhw,0); +endchar; + +beginchar(92, apog_nhw#, nhh#, nhh#); "small sharp"; + sharp (apog_fact, 0); +endchar; + +beginchar(93, apog_nhw#, .5nhh#, .5nhh#); "small doublesharp"; + doublesharp (w, -.075nhw); +endchar; + +beginchar(94, apog_nhw#, nhh#, nhh#); "small natural"; + natural (apog_fact, 0); +endchar; + +%%%%%%% +message (""); +%%%%%%% + +beginchar(59, .5nhw#, 0, 0); "ddp";% doubledouble (4) pause + fill_square (.5nhw, 2nhh, (0, nhh)); +endchar; + +beginchar(58, .5nhw#, 0, 0); "dp";% double (2) pause + fill_square (.5nhw, nhh, (0, 2nhh)); + savepic; +endchar; + +beginchar(60, 5/4nhw#, .5nhh#, 0); "half rest"; + fill_square (5/4nhw, .5nhh, (0, 0)); + savepic; +endchar; + +beginchar(10, 0, .5nhh#, 0); "half rest outside a staff"; + callpic; + fill_square (2nhw, lthick, (-.375nhw, -hlthick)); + savepic; +endchar; + +beginchar(11, 0, 0, .5nhh#); "full rest outside a staff"; + call_mirror(origin,right); +endchar; + +beginchar(61, 5/4nhw#, 0, .5nhh#); "full rest"; + fill_square (5/4nhw, .5nhh, (0, -.5nhh)); +endchar; + +beginchar(62, 0, 4nhh#, 0); "quarter rest"; + rthin:= 1/8 nhh; % .1 + rthick:= 2 thick+rthin; % .2 + alpha:= -50; % .3 + penpos1(rthin, 90+alpha); % .4 + penpos5(rthin, alpha); % .5,10 + penpos2(rthick, alpha); % .6 + penpos4(rthick, alpha); % + penpos3(3/4rthick, alpha); % .7 + penpos6(4/3thick, alpha); + penpos7(rthin, 45); + y1l = 4nhh - 1/2nhh; + x1l = 1/2nhh; + z2r = z1 +(nhh* right) rotated alpha; + z3 = 1/2[z2,z4]; + z4 = (nhw,4nhh) scaled .55; + z5 = z4l+(nhh* right) rotated alpha; + x6l = x4l; y6r = 1.45nhh; + x7 = .9nhw; y7= nhh-1/8nhh; + z10 = z5r shifted (sqrt(2)*rthin/4,sqrt(2)*rthin/4); + + pickup penrazor scaled rthin rotated 45; + draw z1--z2r; draw z4l--z10; + penstroke z2e..z3e..z4e; + penstroke z5e..z6e..z7e; + penlabels(1,2,3,4,5,6,7,10); + shift_pic (-.2nhw, 0); +endchar; + +%%% +% Draw the crook needed for quaver rests and shorter. +% The crook extends left from the point z.i on the stem. +%%% +def crook(text i)= + forsuffixes $=i: + x3:=x.$-6.5fact; y3:=top y.$- 3fact; + x4:=x.$-6fact; y4:= y.$+.5fact; + draw z.${dir 240}..{dir 160}z3; + filldraw z3{dir 160}..z4{dir-20}..{dir 160}z3..cycle; + endfor +enddef; + +beginchar(63, 0, 3.25nhh#, 0); "8th rest"; + z1=(nhh,nhh); + z2-z1=whatever*dir 70; % Angle the stem at 70 degrees. +%%% +% Define the scaling factor `fact' implicitly. +% This value will be used for the shorter rests as well. +%%% + z2-z1=(5fact,1.7nhh); + pickup med_pen; + draw z1..z2; + crook(2); + shift_pic (-.35nhw, 0); + penlabels (1,2,3,4); +endchar; + +beginchar(64, 0, 3.25nhh#, 0); "16th rest"; + z1=(nhh,0); + z2-z1=whatever*dir 75; % Angle the stem at 75 degrees. + y2-y1=2.7nhh; + z5-z2=whatever*(z1-z2); y5=y2-nhh; + pickup med_pen; + draw z1..z2; + crook(2,5); + shift_pic (-.35nhw, 0); + penlabels (1,2,3,4,5); +endchar; + +beginchar(65, 0, 4nhh#, 0); "32th rest"; + z1=(nhh,0); + z2-z1=whatever*dir 80; % Angle the stem at 80 degrees. + y2-y1=3.7nhh; + z5-z2=whatever*(z1-z2); y5=y2-nhh; + z6-z2=whatever*(z1-z2); y6=y5-nhh; + pickup med_pen; + draw z1..z2; + crook(2,5,6); + shift_pic (-.35nhw, 0); + penlabels (1,2,3,4,5,6); +endchar; + +beginchar(66, 0, 4.75nhh#, 0); "64th rest"; + z1=(nhh,0); + z2-z1=whatever*dir 82; % Angle the stem at 82 degrees. + y2-y1=4.7nhh; + z5-z2=whatever*(z1-z2); y5=y2-nhh; + z6-z2=whatever*(z1-z2); y6=y5-nhh; + z7-z2=whatever*(z1-z2); y7=y6-nhh; + pickup med_pen; + draw z1..z2; + crook(2,5,6,7); + shift_pic (-.35nhw, 0); + penlabels (1,2,3,4,5,6,7); +endchar; + +%%%%%%% +message (""); +%%%%%%% + +def violin(expr reduction) = + gx:=reduction*-nhw; + gy:=reduction*nhh; + gthick:=1.5reduction*thick; + gthin:=.75reduction*med; + + x1=31/24gx+w; x4=23/24gx+w; x2=x10=3/4gx+w; x3r=w; x8l=15/16gx+w; + x5=x11r=15/8gx+w; x6=gx+w; x7=5/8gx+w; x9=5/4gx+w; + y1=5/8gy; y2r=y5r=2gy; y3=gy; y4r=0; y6=27/8gy; + y7l=5gy; y8l=11/2gy; y9=17/4gy; y10=y11=-7/8gy; + penpos1(gthin,160); + penpos2(gthick,90); + penpos3(gthick,0); + penpos4(5/4gthin,-90); + penpos5(3/2gthick,110); + penpos6(17/16gthick,130); + penpos7(gthin,-140); + penpos8(5/4gthick,-80); + penpos9(3/8gthick,0); + penpos10(gthin,0); + penpos11(1/2gthick,180); + penstroke z1e{nw}..z2e..z3e..z4e..z5e{up+ne}..z6e..{up+nw}z7e + ..z8e{sw}..{down}z9e{down}..{down}z10e..z11e; +%{{{ + currentpen:= pencircle; + draw z1{nw}..z2..z3..z4..z5{up+ne}..z6..{up+nw}z7 + ..z8{sw}..{down}z9{down}..{down}z10..z11; +%}}} + fill_circle ((3(x2-x4)), (x11+11/40gy, y11)); + penlabels(range 1 thru 11) +enddef; + +%beginchar(71, 8/3nhw#, 5.5nhh#, 1.5nhh#); "G-clef"; +beginchar(71, 8/3nhw#, 4.5nhh#, 2.5nhh#); "G-clef"; + violin(1); +% shift_pic (-.2nhw, 0); % T.59 + shift_pic (-.2nhw, -nhh); % T.60 +endchar; + +%beginchar(72, 7/3nhw#, 3nhh#, 2nhh#); "small G-clef"; +beginchar(72, 7/3nhw#, 3nhh#, 3nhh#); "small G-clef"; + violin(.8); +% shift_pic (-.3nhw, 0); %T.59 + shift_pic (-.3nhw, -nhh); %T.60 +endchar; + +def bass (expr reduction) = + fx:=reduction*nhw; + fy:=reduction*nhh; + fthick:=reduction*thick; + + x2=.8fx; y2=3nhh; + x1=x2r+.26fx; y1=y2; + x3=x2+.71fx; y3r=y2+1fy; + x4=x3+.71fx; y4=y2-.2fy; + x6=x2-6reduction*thinwidth; y6=y2-2.2fy; + x7=x4+.50fx; y7=y2+.38fy; + + penpos2(.6fthick,180); + penpos3(.6fthick, 90); + penpos4(2fthick,0); + penpos6(.4fthick,-10); + + fill_circle (.35fx, z7); + add_mirror ((0,y2), (1,y2)); + fill_circle ((2(x2r-x1)), z1); + + penstroke z2e{up}..{right}z3e{right}..{down}z4e{down}..{left+.1down}z6e; +%{{{ + currentpen:= pencircle; + draw z2{up}..{right}z3{right}..{down}z4{down}..{left+.1down}z6; +%}}} + penlabels(1,2,3,4,6) +enddef; + +beginchar(73, 8/3nhw#, 4nhh#, 0); "F-clef"; + bass(1); +% shift_pic (-.35nhw, 0); % T.59 + shift_pic (-.35nhw, -3nhh); % T.60 +endchar; + +beginchar(74, 7/3nhw#, 4nhh#, 0); "small F-clef"; + bass(.8); +% shift_pic (-4/15nhw, 0); % T.59 + shift_pic (-4/15nhw, -3nhh); % T.59 +endchar; + +def alt(expr reduction, yshift) = + nh:=h*reduction; + athick:=1/10nh; + ahigh:=1/2nh; + radius:=5/4thick*reduction; + + x4=13/16nh+3thinwidth; x5=9/16nh; + x6=1/2nh; x9=x10=2/3nh; x11=17/32nh; + y4=yshift+31/50ahigh; y5=yshift+1/2ahigh; + y6=yshift; y9=yshift+1/9ahigh; + y10=yshift+ahigh; y11=yshift+11/14ahigh; + penpos4(athick,180); + penpos5(1/8athick,0); + penpos6(athick,0); + penpos9(1/3athick,90); + penpos10(1/3athick,-90); + penpos11(1/2athick,0); + + penstroke z5e..{sw+down}z6e; + penstroke z5e{se+3down}..{right}z9e{right}..{up}z4e{up} + ..{left}z10e{left}..{sw+3down}z11e; + fill_circle (2radius, (z11l+(radius, -.05nhh))); + fill_square (athick, ahigh, (5/16nh-1/2athick,yshift)); + fill_square (.25athick, ahigh, (x6l-.25athick,yshift)); + add_mirror ((0,yshift),(1,yshift)); + penlabels(4,5,6,9,10,11) +enddef; + +beginchar(75, 8/3nhw#, 4nhh#, 0); "Alto clef"; + alt(1, 2nhh); +% shift_pic (-.45nhw, 0); % T.59 + shift_pic (-.45nhw, -2nhh); % T.60 +endchar; + +beginchar(76, 7/3nhw#, 4nhh#, 0); "small Alto clef"; + alt(.8 ,2nhh); +% shift_pic (-.3nhw, 0); % T.59 + shift_pic (-.3nhw, -2nhh); % T.60 +endchar; + +beginchar(77, 8/3nhw#, 4nhh#, 0); "drum clef"; + fill_square (.3nhw, .5h, (.85nhw,1nhh)); + add_mirror ((w/2,0),(w/2,1)); +% shift_pic (.2nhw, 0); % T.59 + shift_pic (.2nhw, -2nhh); % T.60 +endchar; + +beginchar(103, 8/3nhw#, 4nhh#, nhh#); "oldstyle G-clef"; + def penslopeI= (.35nhh/cosd45)+blacker,45 enddef; + def penslopeII= (.35nhh/cosd32.5)+blacker,32.5 enddef; + def penslopeIII= (.4nhh/cosd32.5)+blacker,32.5 enddef; + def penslopeIV= (max(1,lthick/cosd32.5)),122.5 enddef; + + x1l=1.5nhw; x2l=x3l=x4r=x1l+2/5nhw; + x1l-x5l=x3r-x1l; x6l=x15r=x5l; x7r=x1=x14r; x8=x2; + y1l=y2l=1.45nhh; y3l=y4r; + y4l=0; y5=y3r; y6l=y15r; y7l=y8r=3nhh; y14r=y7r; + z15r-z14r=whatever*dir(180+32.5); + penpos1(penslopeI); + penpos2(penslopeI); % /7\ 6(15) + penpos3(penslopeII); % 6 8 7(14) + penpos4(penslopeIII); % | + penpos5(penslopeII); % | 1-2 + penpos6(penslopeII); % | | + penpos7(penslopeII); % 5 3 + penpos8(.35nhh,90); % \4/ + penpos14(penslopeIV); + penpos15(penslopeIV); + penstroke z1e--z2e--z3e; + fill unitsquare xscaled (x3r-x4l) yscaled lthick + shifted z4l rotatedaround (z4l,32.5); + penstroke z4e--z5e{dir85}..z6e; + penstroke z7e--z8e; penstroke z14e--z15e; + + x9=x5l=x16-.25nhw; x10l=x1l; x11=x10-.1nhw; x12=x8; + x17l=x2r+.05nhw; x13r=x2l-.1nhw; + y9r=-nhh; y16l=y9l-.01nhh; y10=0; + y11=3.5nhh; y12r=y8r; y17r=y8r+.2nhh; y13r=4nhh; + % 13 + penpos12(2lthick,90); % / \ + penpos17(3hlthick,180); % 11 17 + penpos13(.35nhh+blacker,-90); % | 12 + penpos11(max(lthick,1),0); % | + penpos10(max(lthick,1),0); % 10 + penpos16(.475nhh+blacker,-90); % / + penpos9(.5nhh+blacker,-90); % 9-16 + + penstroke z12e..z17e{dir80}..z13e..{down}z11e..{down}z10e{down}.. + {left}z16e..z9e; + shift_pic (-.25nhw,0); + penlabels (range 1 thru 12); + shift_pic (0, -nhh); % T.60 +endchar; + +beginchar(98, 8/3nhw#, 3.25nhh#, 0); "gregorian C clef"; + x1=x4=0; x2=x3=gregwidth; y1=y2=-y3=-y4=.5gregwidth-lthick; + fill z1{dir 15}..z2--z3{dir 165}..z4--cycle; + save_elempic; + pickup med_pen; draw bot rt z1..{down}(-.01nhw,-.5nhh); + shift_pic(nhw,2.5nhh); + add_mirror ((0,2nhh),(1,2nhh)); + savepic; + shift_pic (0,-2nhh); +endchar; + +beginchar(122, 8/3nhw#, 4.25nhh#, 0); "gregorian F clef"; + callpic; + add_elempic (.1nhw,2nhh); + fill_square (med, 1.5nhh, (.75nhw,.8nhh)); + shift_pic (1/3nhw,-2nhh); +endchar; + +%%%%%%% +message (""); +%%%%%%% + +beginchar(14, 0, nhh#, 0); "song system limit up"; + x1=y1=0; x2=1.5nhw; y2=nhh; + penpos1(thick, 90); penpos2(thin, 90); + penstroke z1e{right}..{dir80}z2e; +%{{{ + currentpen:=pencircle; draw z1{right}..{dir80}z2; +%}}} + savepic; +endchar; + +beginchar(15, 0, 0, nhh#); "song system limit down"; + call_mirror (origin, right); +endchar; + +beginchar(16, 0, 0, 0); "used for volta"; + fill_square (lthick, 2.5nhh, (0,-.5nhh)); +endchar; + +beginchar(17, 0, 0, 0); "used for volta"; + fill_square (lthick, 2.5nhh, (0,-2.5nhh)); +endchar; + +% 'polyrhythmik' {\meterfrac{3+2+3}8}, e.g. Bart\'ok +beginchar(57, 2nhh#, 1.5nhh#, 0); "big plus sign"; + pickup pencircle scaled .3nhh; + draw lft(.5nhh,.9nhh)..rt(1.5nhh,.9nhh); + draw bot(nhh,.4nhh)..top(nhh,1.4nhh); +endchar; + +beginchar(79, 0, 4nhh#, 0); "caesura";% other breathmark + pickup penrazor scaled thick; + draw (.3nhw+thick, 3.4nhh)--(.7nhw+thick, 4.6nhh); +endchar; + +beginchar(80, 0, 2.25nhh#, 0); "fermata up"; + x1 = -.5nhw; x2=.5(x1+x3); x3 = 1.5nhw; + y1 = y3 = nhh; y2 = 2.3nhh; + penpos1(thinwidth,165); + penpos2(.9beamht+thin,90); + penpos3(thinwidth,15); + penstroke z1e{dir75}..z2e..{dir-75}z3e; + fill_circle (beamht, (x2, y1+.5beamht)); +%{{{ + currentpen:= pencircle; draw z1{dir 75}..z2..{dir-75}z3; + add_mirror ((x2, 0),(x2, 1)); +%}}} + savepic; + penlabels(1,2,3); +endchar; + +beginchar(81, 0, 0, 2.25nhh#); "fermata down"; + call_mirror (origin, right); +endchar; + +beginchar(82, 5/3nhw#, 4nhh#, 0); "allabreve"; + fit:= .025nhw; + 2x2 = 2x4 = x1 + 1/2nhh = w; + x3r = 0; 2y1 = 3y2 = y4r = 3nhh; + y3r = 2nhh; x5 = w -1/2nhh; y5 = 3nhh -1/2nhh; + z6r = z5r + (-1/40nhh, 1/20nhh); + penpos1(max(1,med), 0); + penpos2(max(1,med), -90); + penpos3(1/4nhh+thick,180); + penpos4(max(1,med), 90); + penpos5(max(1,med), 0); + penpos6(1/4nhh+med,45); + penstroke z1e..z2e..z3e..z4e..z5e; + fill rt z1r..lft z1l..cycle; + fill_circle (.35nhw+blacker, (z6 + (-2fit, fit))); + shift_pic (.5nhh,0); + savepic; + + pickup med_pen; + draw (4/5nhw+.5nhh, y2r-3/8nhh)--(4/5nhw+.5nhh, y4r+3/8nhh); + penlabels(1,2,3,4,5,6); + save_elempic; + shift_pic (0,-2nhh); +endchar; + +beginchar(83, 5/3nhw#, 3.25nhh#, 0); "C"; + callpic; + shift_pic (0,-2nhh); +endchar; + +beginchar(84, 10/3nhw#, 3.25nhh#, 0); "reverseC"; + callpic; + add_mirror ((11/6nhw,0),(11/6nhw,1)); + shift_pic (0,-2nhh); +endchar; + +beginchar(123, 5/3nhw#, 3.25nhh#, 0); "reverseallabreve"; + add_elempic (0,0); + mirror ((13/12nhw,0),(13/12nhw,1)); + shift_pic (0,-2nhh); +endchar; + +beginchar(121, 0, 0, 0); "double thumb bracket"; + mh:=0.625nhh; + fill_square (lthick, mh, origin); + fill_square (.55nhw, lthick, origin); + add_mirror ((0,mh),(1,mh)); + shift_pic (-.75nhw, -mh); +endchar; + +%%%%%%% +message (""); +%%%%%%% + +beginchar(55, 0, 4nhh#, 0); "repeat colons"; + fill_circle (1/3nhw+blacker, (0, 3/2nhh)); + add_mirror ((0, 2nhh),(1, 2nhh)); + shift_pic(0,-2nhh); +endchar; + +beginchar(78, 0, 4nhh#, 0); "due volte"; + fill_circle ((1/3nhw+blacker),(-.75nhh,2.5nhh)); + addto currentpicture also currentpicture rotatedaround ((0,2nhh), 180); + pickup penrazor scaled (1/3nhw+blacker); + draw (-nhh, nhh)--(nhh, 3nhh); +endchar; + +beginchar(85, 0, 3.25nhh#, 0); "coda"; + mh:=3nhh; + x2 = 2nhw-x4 = 1/6mh; y2 = y4 = 1/2mh; + x3 = x5 = nhw; y3 = mh-y5 = 5/6mh; + pickup thin_pen; + draw (0,mh/2)--(2nhw,mh/2); draw (nhw,0)--(nhw,mh); + savepic; + pickup coda_pen; + draw z2..z3..z4..z5..cycle; + shift_pic (-nhw, 0); + labels (1,2,3,4); +endchar; + +beginchar(105, 0, 3.25nhh#, 0); "coda II"; + mh:=3nhh; + callpic; + x2 = x5 = 1/6mh; y2 = y3 = 5/6mh; + x3 = x4 = 2nhw-x2; y4 = y5 = 1/6mh; + pickup coda_pen; + draw z2--z3--z4--z5--cycle; + shift_pic (-nhw, 0); + labels (1,2,3,4); +endchar; + +beginchar(86, 0, 3.25nhh#, 0); "segno"; + x1= .5nhw; y1 = 1.75nhh; x4=-.5x1; y4=.4nhh; + x5=.7x1; y5=y6=3.05nhh; x6=x5-x1; + z1'= (x1+1,y1); + penpos1'(.5nhh+blacker, 80); + penpos5(max(1,thin), -110); + penpos6(max(1,1.2thin), -70); + fill_circle (.5nhh, (x5-.2nhh,y5l-.13nhh)); + fill_circle (thick+.1nhh, (x4, y4+.9nhh)); + penstroke z1'e{dir170}..{ne}z6e..z5e; + pickup penrazor scaled max(1,thin); + draw z4--z1; + penlabels (1,5,6); + addto currentpicture also currentpicture rotatedaround (z1, 180); +endchar; + +beginchar(110, 0, 5.5nhh#, 2nhh#); "segno II"; + mw:=2.5nhh; + gamma:=36.9; + dist:=1nhh+.75beamht; + gthick:=beamht+blacker; + + x1'=x3'=x7=x16=2x1=2x10=2x13=.5mw; x9=x14=x2; x3r=mw-.2nhh; + x11=x5; x15=x3; mw-x8=x12=1/3nhh; + y1'=dist; y3'=y1'-.5dist; y4'+dist=y9-2dist=y2; y10-2dist=y13+dist=y1; + y11=y5+2dist; y14=y2-dist; y8=y6-.1dist+2dist; y12=y3+.1dist-dist; + y15=y3-dist; y16r=-d; y7l=3.25nhh+2dist; + z1-z1'=z1'-z2=whatever*dir-gamma; + z3-z3'=whatever*dir-gamma; z2-z4=whatever*dir(-90-gamma); + z2-z4'=whatever*dir-90; z4-z4'=whatever*dir-gamma; + z5=z3 rotatedaround (z1',180); z6=z4 rotatedaround (z1',180); + + penpos1(gthick, gamma); penpos2(gthick, gamma); + penpos3(max(1,thin),-90+gamma); penpos4(.9gthick,-180+gamma); + penpos5(max(1,thin),-90+gamma); penpos6(.9gthick,-180+gamma); + penpos7(.3gthick,-90-gamma); penpos8(.5gthick,-180+gamma); + penpos9(gthick, gamma); penpos10(gthick, gamma); + penpos11(.5gthick,-90+gamma); penpos12(.5gthick,-180+gamma); + penpos13(gthick, gamma); penpos14(gthick, gamma); + penpos15(.5gthick,-90+gamma); penpos16(.3gthick+1,-90-gamma); + + penstroke z6e{dir(180-gamma)}..z5e..z1e---z2e..z3e..{dir(180-gamma)}z4e; + add_shift (0,2dist); + add_shift (0,-dist); + unfill (0,-nhh)--(mw,-nhh)--(mw,-d)--(0,-d)--cycle; + unfill (0,5nhh)--(mw,5nhh)--(mw,6nhh)--(0,6nhh)--cycle; cullit; + + penstroke z9e---z10e..z11e..z7e..z8e; + penstroke z13e---z14e..z15e..z16e..z12e; + + dotthick:=.65nhh+blacker; fit:=.15nhh; + fill_circle(dotthick,(x8-fit,y8-.5dotthick+fit+.02nhh)); + fill_circle(dotthick,(x12+fit,y12+.5dotthick-fit-.02nhh)); + + pickup thin_pen; + draw (3/8mw,1/3nhh)--(3/8mw,4nhh+1/3nhh); + draw (5/8mw,-1/3nhh)--(5/8mw,4nhh-1/3nhh); + penlabels (range 1 thru 16); + shift_pic(-mw,0); +endchar; + +%%%%%%% +message (""); +%%%%%%% + +beginchar (67, 0, nhh#, 0); "turn"; + x1=2nhw-x6=.4nhw; y1r=h; y6=h-y1; + x2r=0; y2=.5h; x5=2nhw-x2; y5=h-y2; + x3=.44nhw; y3r=0; x4=2nhw-x3; y4=h-y3; + penpos1(med, 90); + penpos2(med, 180); + penpos3(thick,-40); + penpos4(thick,-40); + penpos5(med, 180); + penpos6(med, 90); + penstroke z1e..{down}z2e{down}..{right}z3e{right} + ..{right}z4e{right}..{down}z5e{down}..z6e; + fill_circle ((1/4nhh+thick), (x1,y1r-thick)); + fill_circle ((1/4nhh+thick), (x6,y6l+thick)); + shift_pic (-.5nhw, 0); + penlabels(1,2,3,4,5,6); + savepic; +endchar; + +beginchar (68, 0, nhh#, 0); "backturn"; + call_mirror ((.5nhw,0), (.5nhw,1)); +endchar; + +def setpar = + off:= .3nhw; x2=x1+off; x3=x2+off; x4=x3+off; + y1= y3=.75nhh-y2=.75nhh-y4=.15nhh; +enddef; + +beginchar(87, 0, nhh#, 0); "shake"; + x1=-.15nhw; setpar; + pickup pensquare xscaled (thick+.15nhh) yscaled med rotated 52; + draw z1--z2--z3--z4; + save_elempic; + add_elempic (2off,0); + savepic; +endchar; + +beginchar(88, 0, nhh#, 0); "(long or double) shake"; + callpic; + add_elempic (2*2off,0); + shift_pic (-.3nhw, 0); + save_elempic; +endchar; + +beginchar(89, 0, nhh#, 0); "mordent"; + callpic; + fill_square (med, 1.5nhh, (.5nhw,-.375nhh)); +endchar; + +beginchar(119, 0, nhh#, 0); "(long or double) mordent"; + currentpicture:= elem_pic; savepic; + fill_square (med, 1.5nhh, (.5nhw,-.375nhh)); +endchar; + +beginchar(106, 0, 1.5nhh#, 0); "Pince with line"; + callpic; + pickup med_pen; + draw (-.55nhw, 0)--(-.55nhw, h); +endchar; + +beginchar(107, 0, 1.5nhh#, 0); "Pince with hook nw"; + callpic; + x1=-.45nhw; setpar; + pickup med_pen; + z5=1.75[z3,z2]-(x3-x1,0); z6=z1 rotatedaround (z5,90); + draw (z1..z5{z2-z3}..{z3-z2}z6) shifted -(.5thick, .15nhh); +endchar; + +beginchar(108, 0, nhh#, 0); "Pince with hook sw"; + callpic; + x1=-.45nhw; setpar; + pickup med_pen; + z5=1.5[z2,z1]-.75(.5thick,.15nhh); z6=z2 rotatedaround (z5,-90); + draw (z1..z5{z1-z2}..{z2-z1}z6); +endchar; + +beginchar(109, 0, 1.5nhh#, 0); "Pince with hook ne"; + callpic; + x1=1.35nhw; setpar; + pickup med_pen; + z5=1.5[z1,z2]; z6=z1 rotatedaround (z5,-90); + draw (z1..z5{z2-z1}..{z1-z2}z6); +endchar; + +beginchar(69, nhw#, .5nhh#, 0); "trille-element"; + x1=-1; y1=y2=y3=.5h; x3=2x2=nhw; + pickup penrazor scaled 1.5thick rotated 50; + draw z1{ne}..{se}z2{se}..{ne}z3; +endchar; + +beginchar(70, 0, nhh#, 0); "arpeggio-element"; + x1=x2=x3=.2nhw-1; y1=0; y3=2y2=nhh+1; + pickup penrazor scaled (thick+.16nhh) rotated 45; + draw z1{ne}..{nw}z2{nw}..{ne}z3; + shift_pic (-nhw, 0); +endchar; + +%%%%%%% +message (""); +%%%%%%% + +def pedalstar (text rot)= + x4=-x1=min(.05nhh,0.35pt); y1=y4=0; x3=-x2=.14nhh; + y3=y2=2y5=2y6=.4nhh; x6=-x5=1.1x4; + p:=(z1..z5..z2..z3..z6..z4--cycle) shifted (0, .2nhh); + forsuffixes $=rot: fill p rotated $; endfor + pickup med_pen; + draw quartercircle scaled .4nhh; + add_mirror (origin, up); + add_mirror (origin, right); + labels (1,2,3,4); + shift_pic (.5nhw, .8nhh); +enddef; + +beginchar(33, 0, 1.5nhh#, 0); "pedal (release) star I"; + pedalstar (0,60); +endchar; + +beginchar(104, 0, 1.5nhh#, 0); "pedal star II"; + pedalstar (0,45,90); +endchar; + +beginchar(34, 0, 1.5nhh#, 0); "pedal I"; + mw:= 1.25nhw; mh:=1.7nhh; + + x1=.425mw; y1=4/18mh; + x2=.2mw; y2=4/18mh; + x3=x1; y3r=0; + x4=.65mw; y4=.35mh; + x5=.475mw; y5=.83mh; + penpos1(.75thin,0); penpos4(.275nhh+thin,60); + penpos2(.15nhh+thin,135); penpos5(.025nhh+med,0); + penpos3(.025nhh+med,-90); + + penstroke z1e{up}..z2e..z3e..z4e..{up+.5right}z5e; + + fill lft z1l{up+ne}..{down+se}rt z1r{down+sw}..{up+nw}cycle; + fill rt z5l{up+ne}..{down+se}lft z5r{down+sw}..{up+nw}cycle; +%{{{ + currentpen:= pencircle; draw z1{up}..z2..z3..z4..{up+.5right}z5; +%}}} + + x6=mw-x12; y6=.75mh; + x7=mw-x11; y7=.65mh; + x8=.25mw; y8=y10; + x9=x8+(x10-x8)/2; y9r=mh; + x10=.8mw; y10=.9mh; + x11=.88mw; y11=y7; + x12=.7mw; y12=.7mh; + penpos6(thin,-80); penpos10(1.2med,90); + penpos7(.25nhh+thin,-110); penpos11(.25nhh+thin,-70); + penpos8(med,90); penpos12(thin,-100); + penpos9(.9med,90); + + penstroke z6e..z7e..z8e..z9e..z10e..z11e..z12e; +%{{{ + currentpen:=pencircle; draw z6..z7..z8..z9..z10..z11..z12; +%}}} + penlabels (range 1 thru 12); + savepic; + shift_pic (-.125nhw, 0); +endchar; + +beginchar(35, 0, 1.5nhh#, 0); "pedal II"; + callpic; %%% ->P + mw:=3nhw; mh:=1.7nhh; + fill_circle (.15mh, (.945mw-.15mh/2, .15mh/2));%%% ->. + + x1=.5mw; y1=.9mh; + x2=.77mw; y2=.58mh; + x3=.815mw; y3=.2mh; + x4= x2; y4r=0; + x5=.63mw; y5=.22mh; + x6= x2; y6=y2; + penpos1(.75med,90); penpos4(.025nhh+med,-90); + penpos2(.1125nhh+med,30); penpos5(.1125nhh+thin,-135); + penpos3(.05nhh+med,0); penpos6(med,100); + + penstroke (z1e{right}..z2e..z3e..z4e..z5e{dir 110}..z6e);%%% ->d + fill lft z1l{ne}..{nw}rt z1r{sw}..{se}cycle; + + x7=x5; y7=y5; + x8=.55mw; y8r=0; + x9=x1; y9=.56mh; + x10=x11+.1mw; y10=y11+.1mh; + x11=.375mw; y11r=0; + x12=.28mw; y12=.25mh; + penpos7(thin,-75); penpos10(1.2thin,-45); + penpos8(.05nhh+med,-90); penpos11(.225nhh,-100); + penpos9(.0625nhh+thin,80); penpos12(thin,-125); + + penstroke z7e..z8e..z9e & z9e{dir-30}..{dir-150}z10e..z11e;%%% ->e + penstroke z12e..z11e; + penlabels (range 1 thru 12); + shift_pic (-(.125nhw+.25nhw), 0); +endchar; + +%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +%%%%%%% +message (""); +%%%%%%% + +pen beam_pen; +beam_pen:= penrazor scaled beamht rotated 90; + +for LOOP=0 upto 9: + longueur:= 2; + for loop=0 upto 5: + beginchar(LOOP*6+loop+128, longueur, 0, 0); + pickup beam_pen; + draw origin--(lft w, w*(.05*(LOOP+1))); + savepic; + endchar; + + beginchar(LOOP*6+loop+64+128, longueur, 0, 0); + call_mirror (origin,right); + endchar; + + longueur:= 2*longueur; + endfor +endfor; +end diff --git a/mf/musixsps.mf b/mf/musixsps.mf new file mode 100644 index 0000000000..26e350f0ee --- /dev/null +++ b/mf/musixsps.mf @@ -0,0 +1,295 @@ +font_identifier := "music_special_symbols"; + +% Here are two types of pianobrackets available, they are absolute compatible, +% so choose this one you prefer (search for '%!!!') + +% free pos: 196-255 + +mode_setup; + +font_size 20pt#; + +nhh#:=5pt#; +nhw#:=6pt#; + +qqs#=.4pt#; %width of lines +qqw#=10pt#; %length of horizontal stroke. + +med#:=1/33designsize; +thick#:=1/16designsize; + +thinwidth:=0.125pt; + +define_pixels(qqw,nhh,nhw); +define_blacker_pixels(med,thick); + +qqs:=ceiling(qqs#*hppp); % the way rule widths are calculated + +pair sw; +sw = down+left; + +path p; +picture save_pic; + +pen line_pen; +line_pen:= pencircle scaled qqs; + +%%%%%%% +message (""); +%%%%%%% + +def glissando (expr theta)= + x1=-1; y1=0; z2=z1+(.5nhw,0); z3=z1+(nhw+1,0); + p:= z1{1.25up+right}..{1.25down+right}z2{1.25down+right}..{1.25up+right}z3; + pickup penrazor scaled (.075nhw+thick) rotated (theta+65); + draw p rotated theta; + labels (1,2,3); +enddef; + +for slope=1 upto 8: + + beginchar(slope-1, (cosd(10slope))*nhw#,(sind(10slope))*nhw#, 0); + " glissando element slope "&decimal (10slope)&" degree"; + glissando (10slope); + save_pic:= currentpicture; + endchar; + + beginchar(8+slope-1, (cosd(10slope))*nhw#, (sind(10slope))*nhw#, 0); + " glissando element slope "&decimal (-10slope)&" degree"; + currentpicture:= save_pic reflectedabout (origin, right); + endchar; + +endfor; + +%%%%%%% +message (""); +%%%%%%% + +def tabulatur (expr nd)= + hwidth:=1/5w; + x1=x2=y2=y3=0; x3=w; y1=-nd; + fill unitsquare xscaled (w+2thinwidth) yscaled (med+.2pt) + shifted(-thinwidth,0); + pickup pencircle scaled max(1,.2pt+blacker); + for v=1 upto 5 : + draw (z2--z3) shifted (0,v*-hwidth); + endfor; + + for v=0 upto 5 : + draw (z1--z2) shifted (v*hwidth,0); + endfor; + labels (1,2,3); +enddef; + +shift:=.15nhh; +def Circle (expr nh)= + x1l=.1w; x2=x4=.5w; x3l=.9w; + y1=y3=.5nh+shift; y2=.1nh+shift; y4=.9nh+shift; + penpos1(med, 0); + penpos2(thinwidth,90); + penpos3(med,180); + penpos4(thinwidth, 270); + penstroke z1e..z2e..z3e..z4e..cycle; + pickup pencircle; draw z1..z2..z3..z4..cycle; +enddef; + +def Cross (expr nh)= + x1=x3=.2w; x2=x4=.8w; + y1=y4=.2nh+shift; y2=y3=nh-.2nh+shift; + pickup pencircle scaled med; + draw z1--z2; draw z3--z4; + labels (1,2,3,4); +enddef; + +beginchar(16, 3nhw#, 0, 0);" small grid"; + tabulatur (108/25nhh); +endchar; + +beginchar(17, 3/2nhw#, 0, 0); " small dot"; + fill fullcircle scaled .54nhh shifted (w,-.36nhh); +endchar; + +beginchar(18, 3nhw#, 0, 0); " small bar"; + fill unitsquare xscaled w yscaled .24nhh shifted (0,-.48nhh); +endchar; + +beginchar(19, 3/5nhw#, 0, 0); " small circle"; + Circle (.72nhh); +endchar; + +beginchar(20, 3/5nhw#, 0, 0); " small cross"; + Cross (.72nhh); +endchar; + +% the next seems to be senseless, but it isn't + +beginchar(28, 3/5nhw#, 0, 0); " small blank"; +endchar; + +%%%%%%% +message (""); +%%%%%%% + +hooklength:=4.5pt; + +beginchar(21, 0, 0, 0);" bracket hook up"; + pickup line_pen; + draw origin--(0, hooklength); +endchar; + +beginchar(22, 0, 0, 0);" bracket hook down"; + pickup line_pen; + draw origin--(0, -hooklength); +endchar; + +beginchar(23, nhw#, 0, 0);" upper octaveline"; + pickup line_pen; + draw (.33w, 1.1nhw)--(.66w, 1.1nhw); +endchar; + +beginchar(24, 0, 0, 0);" final hook for upper octaveline"; + pickup line_pen; + draw (1.1nhw,0)--(1.1nhw, 1.1nhw); + draw (.33nhw, 1.1nhw)--(1.1nhw, 1.1nhw); +endchar; + +beginchar(25, nhw#, 0, 0);" lower octaveline"; + pickup line_pen; + draw (.33w, 0)--(.66w, 0); +endchar; + +beginchar(26, 0, 0, 0);" final hook for lower octaveline"; + pickup line_pen; + draw (1.1nhw,0)--(1.1nhw, 1.1nhw); + draw (.33nhw,0)--(1.1nhw, 0); +endchar; + +beginchar(27, .75nhw#, 0, 0);" used for \bracket"; + pickup line_pen; + draw origin--(.5nhw, 0); +endchar; + +beginchar(29, qqw#, 0, 0);" line ydim 0pt"; + pickup line_pen; + draw origin--(w,0); +endchar; + +% lines length xdim 10pt, ydim (-).25 to (-)5pt + +for j=1 upto 20: + beginchar(29+j, qqw#, 0, 0); " line ydim "&decimal .25j&"pt"; + pickup line_pen; + draw origin--(w, .25pt*j); + save_pic:= currentpicture; + endchar; + + beginchar(49+j, qqw#, 0, 0); " line ydim -"&decimal .25j&"pt"; + currentpicture:= save_pic reflectedabout (origin, right); + endchar; +endfor; + +%%%%%%% +message (""); +%%%%%%% + +for n:=1 upto 14: + beginchar(70+n-1, 0, 0, 0); + " fullcircle diameter "&decimal ((n+2)*2)&" pt"; + diameter:=(n+2)*2pt; + pickup line_pen; + draw fullcircle scaled diameter; + endchar; +endfor; + +%%%%%%% +message ("<(de-)crescendi>"); +%%%%%%% + +widthstep:=nhw; +crescendowidth:=.5nhh; % \Internote + +for n:=1 upto 32: + beginchar(84+n-1, 0, 3pt#, 3pt#); + " crescendo length "&decimal n&" noteheadwidths"; + pickup line_pen; + draw (n*widthstep, crescendowidth+.0075n*crescendowidth)--(0,0); + addto currentpicture also currentpicture reflectedabout (origin,right); + save_pic:= currentpicture; + endchar; + + beginchar(116+n-1, 0, 3pt#, 3pt#); + " decrescendo length "&decimal n&" noteheadwidths"; + currentpicture:= save_pic reflectedabout(origin, up) shifted (n*widthstep,0); + endchar; +endfor; + +%%%%%%% +message (""); +%%%%%%% + +% lastbrace is adjustable (originally 99) + +firstbrace:=20; % smallest brace is 2*20 pt (\simeq 14mm) +lastbrace:=67; % largest brace is 2*67 pt (\simeq 47mm) + +%%% from Stanislav Kneifl + +def drawpianobracket (expr height) = + u# := 1nhh#/5pt# * 1pt#; + v# := (height/40) * 1pt#; + define_pixels (u, v); +% beginchar (height-firstbrace, 1.25nhh#, 0, 0); + beginchar (height-firstbrace+148, 0, 0, 0); + z1 = origin; + z2 = (4.7u, 7v); + z3 = (3.6u, 16.5v); + z4 = (1.9u, 25v); + z5 = (2.28u, 32v); + z6 = (w, 40v); + penpos1 (max(1,0.1u), 125); + penpos2 (1.2u, 180); + penpos3 (3.2u, 195); + penpos4 (2.5u, 180); + penpos5 (1.14u, 180); + penpos6 (max(2,0.3u), 150); + penstroke z1e{dir 35}..z2e..z3e..z4e..z5e..{dir 60}z6e; + currenttransform := identity reflectedabout ((0,0),(1,0)); + penstroke z1e{dir 35}..z2e..z3e..z4e..z5e..{dir 60}z6e; + currenttransform := identity; +% inserted + currentpicture:=currentpicture shifted (round(-1.75nhh), 0); +% + endchar; +enddef; + +def bigbrace(expr v) = + beginchar (v-firstbrace+148, 0, 0, 0); + " brace vsize "&decimal round(2v*pt#)&"pt"; + vwidth:=v*pt; + hwidth:=max(.1vwidth,3.25pt); + hwidth:=min(hwidth,6.5pt); + actwidth:=.035vwidth; + x1=.25nhw; y1=vwidth; + x2l=-.8hwidth; y2=2/3vwidth; + x3r=.2hwidth; y3=1/3vwidth; + x4=-hwidth; y4=0; + penpos1(max(1,.25pt),-35); + penpos2(1.5med+actwidth,40); + penpos3(1.75med+actwidth,45); + penpos4(max(1,.2pt),-90); + penstroke z1e..z2e..z3e..{left+sw}z4e; + currentpen:= pencircle; draw z1..z2..z3..{left+sw}z4; + addto currentpicture also currentpicture reflectedabout (origin, right); + penlabels(1,2,3,4); + currentpicture:= currentpicture shifted (round(-.75nhh), 0); + endchar; +enddef; + +%!!! comment the line 'bigbrace' and uncomment the line 'drawpianobracket' + +for v=firstbrace upto lastbrace : + bigbrace (v); +% drawpianobracket (v); +endfor; + +end diff --git a/mf/musixspx.mf b/mf/musixspx.mf new file mode 100644 index 0000000000..3b3f432d9f --- /dev/null +++ b/mf/musixspx.mf @@ -0,0 +1,295 @@ +font_identifier := "music_special_symbols"; + +% Here are two types of pianobrackets available, they are absolute compatible, +% so choose this one you prefer (search for '%!!!') + +% free pos: 196-255 + +mode_setup; + +font_size 20pt#; + +nhh#:=5pt#; +nhw#:=6pt#; + +qqs#=.4pt#; %width of lines +qqw#=10pt#; %length of horizontal stroke. + +med#:=1/33designsize; +thick#:=1/16designsize; + +thinwidth:=0.125pt; + +define_pixels(qqw,nhh,nhw); +define_blacker_pixels(med,thick); + +qqs:=ceiling(qqs#*hppp); % the way rule widths are calculated + +pair sw; +sw = down+left; + +path p; +picture save_pic; + +pen line_pen; +line_pen:= pencircle scaled qqs; + +%%%%%%% +message (""); +%%%%%%% + +def glissando (expr theta)= + x1=-1; y1=0; z2=z1+(.5nhw,0); z3=z1+(nhw+1,0); + p:= z1{1.25up+right}..{1.25down+right}z2{1.25down+right}..{1.25up+right}z3; + pickup penrazor scaled (.075nhw+thick) rotated (theta+65); + draw p rotated theta; + labels (1,2,3); +enddef; + +for slope=1 upto 8: + + beginchar(slope-1, (cosd(10slope))*nhw#,(sind(10slope))*nhw#, 0); + " glissando element slope "&decimal (10slope)&" degree"; + glissando (10slope); + save_pic:= currentpicture; + endchar; + + beginchar(8+slope-1, (cosd(10slope))*nhw#, (sind(10slope))*nhw#, 0); + " glissando element slope "&decimal (-10slope)&" degree"; + currentpicture:= save_pic reflectedabout (origin, right); + endchar; + +endfor; + +%%%%%%% +message (""); +%%%%%%% + +def tabulatur (expr nd)= + hwidth:=1/5w; + x1=x2=y2=y3=0; x3=w; y1=-nd; + fill unitsquare xscaled (w+2thinwidth) yscaled (med+.2pt) + shifted(-thinwidth,0); + pickup pencircle scaled max(1,.2pt+blacker); + for v=1 upto 5 : + draw (z2--z3) shifted (0,v*-hwidth); + endfor; + + for v=0 upto 5 : + draw (z1--z2) shifted (v*hwidth,0); + endfor; + labels (1,2,3); +enddef; + +shift:=.15nhh; +def Circle (expr nh)= + x1l=.1w; x2=x4=.5w; x3l=.9w; + y1=y3=.5nh+shift; y2=.1nh+shift; y4=.9nh+shift; + penpos1(med, 0); + penpos2(thinwidth,90); + penpos3(med,180); + penpos4(thinwidth, 270); + penstroke z1e..z2e..z3e..z4e..cycle; + pickup pencircle; draw z1..z2..z3..z4..cycle; +enddef; + +def Cross (expr nh)= + x1=x3=.2w; x2=x4=.8w; + y1=y4=.2nh+shift; y2=y3=nh-.2nh+shift; + pickup pencircle scaled med; + draw z1--z2; draw z3--z4; + labels (1,2,3,4); +enddef; + +beginchar(16, 3nhw#, 0, 0);" small grid"; + tabulatur (108/25nhh); +endchar; + +beginchar(17, 3/2nhw#, 0, 0); " small dot"; + fill fullcircle scaled .54nhh shifted (w,-.36nhh); +endchar; + +beginchar(18, 3nhw#, 0, 0); " small bar"; + fill unitsquare xscaled w yscaled .24nhh shifted (0,-.48nhh); +endchar; + +beginchar(19, 3/5nhw#, 0, 0); " small circle"; + Circle (.72nhh); +endchar; + +beginchar(20, 3/5nhw#, 0, 0); " small cross"; + Cross (.72nhh); +endchar; + +% the next seems to be senseless, but it isn't + +beginchar(28, 3/5nhw#, 0, 0); " small blank"; +endchar; + +%%%%%%% +message (""); +%%%%%%% + +hooklength:=4.5pt; + +beginchar(21, 0, 0, 0);" bracket hook up"; + pickup line_pen; + draw origin--(0, hooklength); +endchar; + +beginchar(22, 0, 0, 0);" bracket hook down"; + pickup line_pen; + draw origin--(0, -hooklength); +endchar; + +beginchar(23, nhw#, 0, 0);" upper octaveline"; + pickup line_pen; + draw (.33w, 1.1nhw)--(.66w, 1.1nhw); +endchar; + +beginchar(24, 0, 0, 0);" final hook for upper octaveline"; + pickup line_pen; + draw (1.1nhw,0)--(1.1nhw, 1.1nhw); + draw (.33nhw, 1.1nhw)--(1.1nhw, 1.1nhw); +endchar; + +beginchar(25, nhw#, 0, 0);" lower octaveline"; + pickup line_pen; + draw (.33w, 0)--(.66w, 0); +endchar; + +beginchar(26, 0, 0, 0);" final hook for lower octaveline"; + pickup line_pen; + draw (1.1nhw,0)--(1.1nhw, 1.1nhw); + draw (.33nhw,0)--(1.1nhw, 0); +endchar; + +beginchar(27, .75nhw#, 0, 0);" used for \bracket"; + pickup line_pen; + draw origin--(.5nhw, 0); +endchar; + +beginchar(29, qqw#, 0, 0);" line ydim 0pt"; + pickup line_pen; + draw origin--(w,0); +endchar; + +% lines length xdim 10pt, ydim (-).25 to (-)5pt + +for j=1 upto 20: + beginchar(29+j, qqw#, 0, 0); " line ydim "&decimal .25j&"pt"; + pickup line_pen; + draw origin--(w, .25pt*j); + save_pic:= currentpicture; + endchar; + + beginchar(49+j, qqw#, 0, 0); " line ydim -"&decimal .25j&"pt"; + currentpicture:= save_pic reflectedabout (origin, right); + endchar; +endfor; + +%%%%%%% +message (""); +%%%%%%% + +for n:=1 upto 14: + beginchar(70+n-1, 0, 0, 0); + " fullcircle diameter "&decimal ((n+2)*2)&" pt"; + diameter:=(n+2)*2pt; + pickup line_pen; + draw fullcircle scaled diameter; + endchar; +endfor; + +%%%%%%% +message ("<(de-)crescendi>"); +%%%%%%% + +widthstep:=nhw; +crescendowidth:=.5nhh; % \Internote + +for n:=1 upto 32: + beginchar(84+n-1, 0, 3pt#, 3pt#); + " crescendo length "&decimal n&" noteheadwidths"; + pickup line_pen; + draw (n*widthstep, crescendowidth+.0075n*crescendowidth)--(0,0); + addto currentpicture also currentpicture reflectedabout (origin,right); + save_pic:= currentpicture; + endchar; + + beginchar(116+n-1, 0, 3pt#, 3pt#); + " decrescendo length "&decimal n&" noteheadwidths"; + currentpicture:= save_pic reflectedabout(origin, up) shifted (n*widthstep,0); + endchar; +endfor; + +%%%%%%% +message (""); +%%%%%%% + +% lastbrace is adjustable (originally 99) + +firstbrace:=20; % smallest brace is 2*20 pt (\simeq 14mm) +lastbrace:=67+48; % largest brace is 2*67 pt (\simeq 47mm) + +%%% from Stanislav Kneifl + +def drawpianobracket (expr height) = + u# := 1nhh#/5pt# * 1pt#; + v# := (height/40) * 1pt#; + define_pixels (u, v); +% beginchar (height-firstbrace, 1.25nhh#, 0, 0); + beginchar (height-firstbrace+148, 0, 0, 0); + z1 = origin; + z2 = (4.7u, 7v); + z3 = (3.6u, 16.5v); + z4 = (1.9u, 25v); + z5 = (2.28u, 32v); + z6 = (w, 40v); + penpos1 (max(1,0.1u), 125); + penpos2 (1.2u, 180); + penpos3 (3.2u, 195); + penpos4 (2.5u, 180); + penpos5 (1.14u, 180); + penpos6 (max(2,0.3u), 150); + penstroke z1e{dir 35}..z2e..z3e..z4e..z5e..{dir 60}z6e; + currenttransform := identity reflectedabout ((0,0),(1,0)); + penstroke z1e{dir 35}..z2e..z3e..z4e..z5e..{dir 60}z6e; + currenttransform := identity; +% inserted + currentpicture:=currentpicture shifted (round(-1.75nhh), 0); +% + endchar; +enddef; + +def bigbrace(expr v) = + beginchar (v-firstbrace+148, 0, 0, 0); + " brace vsize "&decimal round(2v*pt#)&"pt"; + vwidth:=v*pt; + hwidth:=max(.1vwidth,3.25pt); + hwidth:=min(hwidth,6.5pt); + actwidth:=.035vwidth; + x1=.25nhw; y1=vwidth; + x2l=-.8hwidth; y2=2/3vwidth; + x3r=.2hwidth; y3=1/3vwidth; + x4=-hwidth; y4=0; + penpos1(max(1,.25pt),-35); + penpos2(1.5med+actwidth,40); + penpos3(1.75med+actwidth,45); + penpos4(max(1,.2pt),-90); + penstroke z1e..z2e..z3e..{left+sw}z4e; + currentpen:= pencircle; draw z1..z2..z3..{left+sw}z4; + addto currentpicture also currentpicture reflectedabout (origin, right); + penlabels(1,2,3,4); + currentpicture:= currentpicture shifted (round(-.75nhh), 0); + endchar; +enddef; + +%!!! comment the line 'bigbrace' and uncomment the line 'drawpianobracket' + +for v=firstbrace upto lastbrace : + bigbrace (v); +% drawpianobracket (v); +endfor; + +end diff --git a/mf/xdrawsl.mf b/mf/xdrawsl.mf new file mode 100644 index 0000000000..fe8c5ec0b8 --- /dev/null +++ b/mf/xdrawsl.mf @@ -0,0 +1,39 @@ +%(c) + +min_bow:= .5nhh; +max_bow:= 1.5nhh; +slope:=17.5/100; + +code=-1; + +for iht=1 upto 8: + for iwd=0 upto 15: + beginchar(incr code, 0, 0, 0); + mw#:=(minwidth+iwd*delwidth)*pt#; + define_pixels(mw); + x1 = y1= 0; x3= mw; y3= 2y2'= iht*delheight; x2'= .5x3; + mheight:=y3; + z2-z2'= whatever*dir(angle(z3-z1)+90); + my_bow:=min(max_bow, slope*mw); + my_bow:=max(my_bow, min_bow); + z1'=(z1-(0,my_bow)) rotated angle(z3-z1); + (z1'-z2)=whatever*(z1-z2'); + penpos1(.15thick,(angle(z3-z1)+90)); + penpos2(thick,(angle(z3-z1)+90)); + penpos3(.15thick,(angle(z3-z1)+90)); + penstroke (flex(z1e,z2e,z3e)); +%{{{ + currentpen:= pencircle; + draw (flex(z1,z2,z3));% draw z1--z3; draw z2'--z2--z1'--z1; +%}}} + currentpicture:=currentpicture t; + p:=currentpicture; + endchar; + + beginchar(code+128, 0, 0, 0); + currentpicture:=p T; + endchar; + + endfor +endfor +end diff --git a/mf/xdrawzl.mf b/mf/xdrawzl.mf new file mode 100644 index 0000000000..50ef6cfd6f --- /dev/null +++ b/mf/xdrawzl.mf @@ -0,0 +1,25 @@ +%(c) + +min_bow:= .4nhh; +max_bow:= 1.75nhh; +slope:= 10/100; + +code=-1; + +for i=1 upto numslurs: + beginchar(incr code, 0, 0, 0); + mw:=(minwidth+code*delwidth)*pt; + x3= -x1= .5mw; x2= y1= y3 = 0; + y2= max(min_bow, slope*mw); + y2:= min(y2, max_bow); + penpos1(.15thick,90); penpos2(thick,90); penpos3(.15thick,90); + penstroke (flex(z1e,z2e,z3e)); + currentpen:= pencircle; draw (flex(z1,z2,z3)); + p:=currentpicture; + endchar; + + beginchar(code+54, 0, 0, 0); + currentpicture:=p reflectedabout (origin, right); + endchar; +endfor +end diff --git a/mf/xgreg11.mf b/mf/xgreg11.mf new file mode 100644 index 0000000000..e5f3dc4b4c --- /dev/null +++ b/mf/xgreg11.mf @@ -0,0 +1,10 @@ + +font_identifier:="xgreg11"; + +mode_setup; + +font_size 10.24pt#; + +nhh#:=2.56pt#; + +input xgreggen diff --git a/mf/xgreg13.mf b/mf/xgreg13.mf new file mode 100644 index 0000000000..49a78be6e7 --- /dev/null +++ b/mf/xgreg13.mf @@ -0,0 +1,10 @@ + +font_identifier:="xgreg13"; + +mode_setup; + +font_size 12.8pt#; + +nhh#:=3.2pt#; + +input xgreggen diff --git a/mf/xgreg16.mf b/mf/xgreg16.mf new file mode 100644 index 0000000000..bc5d554686 --- /dev/null +++ b/mf/xgreg16.mf @@ -0,0 +1,10 @@ + +font_identifier:="xgreg16"; + +mode_setup; + +font_size 16pt#; + +nhh#:=4pt#; + +input xgreggen diff --git a/mf/xgreg20.mf b/mf/xgreg20.mf new file mode 100644 index 0000000000..f0ba509ead --- /dev/null +++ b/mf/xgreg20.mf @@ -0,0 +1,10 @@ + +font_identifier:="xgreg20"; + +mode_setup; + +font_size 20pt#; +nhh#:=5pt#; + + +input xgreggen diff --git a/mf/xgreg24.mf b/mf/xgreg24.mf new file mode 100644 index 0000000000..9f4dbfbd9b --- /dev/null +++ b/mf/xgreg24.mf @@ -0,0 +1,10 @@ + +font_identifier:="xgreg24"; + +mode_setup; + +font_size 24pt#; + +nhh#:=6pt#; + +input xgreggen diff --git a/mf/xgreg25.mf b/mf/xgreg25.mf new file mode 100644 index 0000000000..529c7ec7ad --- /dev/null +++ b/mf/xgreg25.mf @@ -0,0 +1,28 @@ + +font_identifier:="musix25"; + +mode_setup; + +font_size 25pt#; + +nhh#:=6.25pt#; +nhw#:=7.5pt#; +gregwidth#:=0.5*sqrt(2)*nhw#; + +thin#:=1/50designsize; +med#:=1/33designsize; +thick#:=1/16designsize; + +thinwidth := 0.15pt; +beamht#:=0.48nhh#; + +define_pixels(nhh,nhw,beamht,gregwidth); +define_blacker_pixels(thin,med,thick); + +pair ne,se,sw,nw; %northeast,southeast,southwest,northwest +ne = up+right; se = down+right; sw = down+left; nw = up+left; + +font_x_height nhh#; +font_quad nhw#; + +input musixgen diff --git a/mf/xgreg29.mf b/mf/xgreg29.mf new file mode 100644 index 0000000000..3a2293e7d4 --- /dev/null +++ b/mf/xgreg29.mf @@ -0,0 +1,10 @@ + +font_identifier:="xgreg29"; + +mode_setup; + +font_size 29pt#; + +nhh#:=7.2pt#; + +input xgreggen diff --git a/mf/xgreggen.mf b/mf/xgreggen.mf new file mode 100644 index 0000000000..6b2f4b5a20 --- /dev/null +++ b/mf/xgreggen.mf @@ -0,0 +1,351 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% this is xgreggen.mf (c) +% +% Version T.63 [October 96] +% + +nhw#:=1.2*nhh#; + +thin#:=1/50designsize; +med#:=1/33designsize; +thick#:=1/16designsize; + +thinwidth := 0.125pt; +beamht#:=0.48nhh#; +%gregwidth#:=0.5*sqrt(2)*nhh#; +gregwidth#:=0.6*nhh#; +smallgreg:=0.5; + +define_pixels(nhh,nhw,beamht,gregwidth); +define_blacker_pixels(thin,med,thick); + +pair ne,se,sw,nw; %northeast,southeast,southwest,northwest +ne = up+right; se = down+right; sw = down+left; nw = up+left; + +font_x_height nhh#; +font_quad nhw#; + +pair pone, ptwo; +transform t; +path p; + +hlthick=.2pt; +lthick=.4pt; + +greglangle:=18; gregrlangle:=180+greglangle; +greguangle:=26; gregruangle:=180+greguangle; +orisuangle:=40; orisruangle:=180+orisuangle; + +diamwidth:=.96 gregwidth; greg_min_diam:=gregwidth-diamwidth; +diamheight:=1.33 gregwidth; +deminutae:=0.6; gregwidth_dem:=gregwidth*deminutae; +aucta_fact:=0.33gregwidth; +shave:=.3gregwidth; + +pen line_pen, med_pen, coda_pen, thin_pen; +med_pen:= pencircle scaled med; +line_pen:= pencircle scaled lthick; +coda_pen:= pencircle xscaled 1.25thick yscaled max(1,.75med); +thin_pen:= pencircle scaled max(1,.25pt); + +picture save_pic, elem_pic; + +%%%%%%%%%%%%%%% +% basic def's % +%%%%%%%%%%%%%%% + +def savepic = save_pic:= currentpicture enddef; +def save_elempic = elem_pic:= currentpicture enddef; +def callpic = currentpicture:= save_pic enddef; + +def mirror (expr pone, ptwo) = + currentpicture:=currentpicture reflectedabout(round(pone),round(ptwo)) +enddef; + +def add_mirror (expr pone, ptwo) = + addto currentpicture also currentpicture + reflectedabout (round(pone), round(ptwo)) +enddef; + +def call_mirror (expr pone, ptwo) = callpic; mirror (pone, ptwo) enddef; + +def add_shift (expr pone, ptwo) = + addto currentpicture also currentpicture shifted (pone, ptwo) +enddef; + +def call_add_shift (expr pone, ptwo) = + callpic; add_shift (pone, ptwo) +enddef; + +def add_elempic (expr pone, ptwo) = + addto currentpicture also elem_pic shifted (pone, ptwo) +enddef; + +def call_add_save_elempic (expr pone, ptwo) = + callpic; add_elempic(pone, ptwo); savepic +enddef; + +def shift_pic (expr pone, ptwo) = + currentpicture:=currentpicture shifted (round(pone),round(ptwo)) +enddef; + +def fill_circle (expr diameter, zshift) = + fill fullcircle scaled diameter shifted zshift +enddef; + +def fill_square (expr xwidth, ywidth, zshift) = + fill unitsquare xscaled xwidth yscaled ywidth shifted zshift +enddef; + +% + +% eobasicdefs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +%%%%%%% +message (""); +%%%%%%% + +NHW=nhw+hlthick; + +beginchar(0, gregwidth#, .5nhh#, .5nhh#); "dummy square"; +endchar; + +beginchar(18, smallgreg*gregwidth#, .5nhh#, .5nhh#); "small dummy square"; +endchar; + + +beginchar(1, 0, .5nhh#, .5nhh#); "filled diamond"; + x1:=0.5greg_min_diam+hlthick; x3=gregwidth-x1; x2=x4=0.5gregwidth; + y1=y3=0; y2=-y4=0.5diamheight; + pickup pencircle scaled lthick; + fill z1--z2--z3--z4--cycle; + draw z1--z2--z3--z4--cycle; + penlabels (1,2,3,4); +endchar; + +beginchar(2, 0, .5nhh#, .5nhh#); "filled diamond aucta"; + x1:=0.5greg_min_diam+hlthick; x3=gregwidth-x1; x2=x4=0.5gregwidth; + y1=y3=0; y2=-y4=0.5diamheight; + x5=x1+hlthick; y5=1.5y4; + pickup pencircle scaled lthick; + fill z1--z2--z3{sw+down}..{left+0.3up}z5--z5{right}..z4--cycle; + draw z1--z2--z3{sw+down}..{left+0.3up}z5--z5{right}..z4--cycle; + penlabels (1,2,3,4,5); +endchar; + +beginchar(3, 0, .5nhh#, .5nhh#); "apostropha"; + x1:=0.5greg_min_diam+hlthick; x3=gregwidth-x1; x2=x4+0.1gregwidth=0.5gregwidth; + y1=y3=0; y2=0.5gregwidth+0.5greg_min_diam-hlthick; + y4=-y2-0.2gregwidth; + pickup pencircle scaled lthick; + fill z1--z2--z3{left+1.5down}..{left+0.6down}z4--z4{right+2up}..{left+0.1up}cycle; + draw z1--z2--z3{left+1.5down}..{left+0.6down}z4--z4{right+2up}..{left+0.1up}cycle; + penlabels (1,2,3,4); +endchar; + +beginchar(4, 0, .5nhh#, .5nhh#); "filled diamond deminutae"; + x1:=0.5greg_min_diam*deminutae+hlthick; + x3=gregwidth_dem-x1; x2=x4=0.5gregwidth_dem; + y1=y3=0; y2=-y4=0.5diamheight*deminutae; + pickup pencircle scaled lthick; + fill z1--z2--z3--z4--cycle; + draw z1--z2--z3--z4--cycle; + penlabels (1,2,3,4); +endchar; + +beginchar(5, 0, .5nhh#, .5nhh#); "gregorian punctum"; + x1=x4=hlthick; x2=x3=gregwidth+hlthick; y1=y2=-y3=-y4=.5gregwidth-hlthick; + pickup pencircle scaled lthick; + fill z1{dir greguangle}..z2--z3..{dir gregrlangle}z4--cycle; + draw z1{dir greguangle}..z2--z3..{dir gregrlangle}z4--cycle; + shift_pic(0,-hlthick); + savepic; + penlabels (1,2,3,4); +endchar; + +beginchar(13, 0, .5nhh#, .5nhh#); "mirrored gregorian punctum"; + callpic; + mirror(origin, right); +endchar; + +beginchar(6, 0, .5nhh#, .5nhh#); "gregorian virga left"; + callpic; + fill_square (lthick, 1.5nhh,(0, -1.5nhh)); +endchar; + +beginchar(7, 0, .5nhh#, .5nhh#); "gregorian virga right"; + callpic; + fill_square (lthick, 1.5nhh,(gregwidth, -1.5nhh)); +endchar; + +beginchar(8, 0, .5nhh#, .5nhh#); "gregorian punctum aucta down"; + x1=x4=hlthick; x2=x3=gregwidth+hlthick; + y1=y2+aucta_fact=-y3-aucta_fact=-y4=.5gregwidth-hlthick; + pickup pencircle scaled lthick; + fill z1{dir greguangle}..z2--z3..{dir gregrlangle}z4--cycle; + draw z1{dir greguangle}..z2--z3..{dir gregrlangle}z4--cycle; + shift_pic(0,-hlthick); + savepic; + penlabels (1,2,3,4); +endchar; + +beginchar(9, 0, .5nhh#, .5nhh#); "gregorian punctum aucta up"; +callpic; +mirror(origin,right); +endchar; + +beginchar(10, 0, .5nhh#, .5nhh#); "oriscus"; + x1=x4=hlthick; x2=x3=gregwidth+hlthick; y1=y2=-y3=-y4=.5gregwidth-hlthick; + pickup pencircle scaled lthick; + fill z1{dir orisuangle}..{dir orisuangle}z2--z3{dir orisruangle}..{dir orisruangle}z4--cycle; + draw z1{dir orisuangle}..{dir orisuangle}z2--z3{dir orisruangle}..{dir orisruangle}z4--cycle; + penlabels (1,2,3,4); +endchar; + +beginchar(11, 0, .5nhh#, .5nhh#); "apostropha aucta"; + x1:=0.5greg_min_diam+hlthick; x3=gregwidth-x1; x2=x4=0.5gregwidth; + y1=y3=0; y2=0.5gregwidth+0.5greg_min_diam-hlthick; + y4=-y2-0.2gregwidth; y5=y4; x5=x1; + pickup pencircle scaled lthick; + fill z1--z2--z3{left+1.5down}..{left+0.6down}z4..z5--z5{right}..{left+0.1up}cycle; + draw z1--z2--z3{left+1.5down}..{left+0.6down}z4..z5--z5{right}..{left+0.1up}cycle; + penlabels (1,2,3,4,5); +endchar; + +beginchar(12, 0, .5nhh#, .5nhh#); "small gregorian punctum"; + x1=x4=hlthick; x2=x3=smallgreg*gregwidth+hlthick; + y1=y2=-y3=-y4=.5smallgreg*gregwidth-hlthick; + pickup pencircle scaled lthick; + fill z1{dir greguangle}..z2--z3..{dir gregrlangle}z4--cycle; + draw z1{dir greguangle}..z2--z3..{dir gregrlangle}z4--cycle; + shift_pic(0,-hlthick); + savepic; +endchar; + +beginchar(14, 0, .5nhh#, .5nhh#); "mirrored small gregorian punctum"; + callpic; + mirror(origin, right); +endchar; + +beginchar(15, gregwidth#, .5nhh#, .5nhh#); "podatus bottom"; + fill_square(gregwidth+lthick, gregwidth, (0, -0.5gregwidth)); +endchar; + +beginchar(16, gregwidth#, .5nhh#, .5nhh#); "small podatus bottom"; + fill_square(gregwidth+lthick, gregwidth-shave, (0, -0.5gregwidth)); +endchar; + +beginchar(17, 0, .5nhh#, .5nhh#); "gregorian punctum shaved bottom"; + x1=x4=hlthick; x2=x3=gregwidth+hlthick; y1=y2=-y3+shave=-y4+shave=.5gregwidth-hlthick; + pickup pencircle scaled lthick; + fill z1{dir greguangle}..z2--z3..{dir gregrlangle}z4--cycle; + draw z1{dir greguangle}..z2--z3..{dir gregrlangle}z4--cycle; + shift_pic(0,-hlthick); + savepic; + penlabels (1,2,3,4); +endchar; + +def square (expr mw)= + fill_square (sqrt(2)*.5mw, max(1,thin), origin) rotated -45; + fill_square (sqrt(2)*.5mw, .15nhw, (0,-.15nhw)) rotated 45; + save_elempic; + mirror (origin,up); + mirror (origin,left); + shift_pic (mw+.5,0); + add_elempic(0,0); +% mirror (origin,right);% I've seen this too, somewhere ... +enddef; + +beginchar(118, 0, .5nhh#, .5nhh#); "deep porrectus"; + x1=x4=0; x2=x3=3*gregwidth+lthick; + y1=-y4=.5gregwidth-lthick; y2=y1-2nhh; y3=y4-2nhh; + z5=z1+(0,0.3gregwidth); + fill z5..{right+0.4down}z2--z3{left+0.4up}..z4--cycle; shift_pic(0,hlthick); + fill_square (med, 1.5nhh,(0, -2nhh)); + penlabels (1,2,3,4,5); +endchar; + +beginchar(119, 0, .5nhh#, .5nhh#); "low porrectus"; + x1=x4=0; x2=x3=3*gregwidth+lthick; + y1=-y4=.5gregwidth-lthick; y2=y1-1.5nhh; y3=y4-1.5nhh; + z5=z1+(0,0.2gregwidth); + fill z1..{right+0.4down}z2--z3{left+0.4up}..z4--cycle; shift_pic(0,hlthick); + fill_square (med, 1.5nhh,(0, -2nhh)); + penlabels (1,2,3,4,5); +endchar; + +beginchar(120, 0, .5nhh#, .5nhh#); "porrectus"; + x1=x4=0; x2=x3=3*gregwidth+lthick; + y1=-y4=.5gregwidth-lthick; y2=y1-nhh; y3=y4-nhh; + z5=z1+(0,0.1gregwidth); + fill z5..{right}z2--z3{left}..z4--cycle; shift_pic(0,hlthick); + fill_square (med, 1.5nhh,(0, -1.5nhh)); + penlabels (1,2,3,4,5); +endchar; + +beginchar(121, 0, .5nhh#, .5nhh#); "soft porrectus"; + x1=x4=0; x2=x3=3*gregwidth+lthick; + y1=-y4=.5gregwidth-lthick; y2=y1-0.5nhh; y3=y4-0.5nhh; + z5=z1+(0,0.1gregwidth); + fill z5..{right}z2--z3{left}..z4--cycle; shift_pic(0,hlthick); + fill_square (med, 1.5nhh,(0, -1.5nhh)); + penlabels (1,2,3,4,5); +endchar; + +def quilisma(expr ymidtop, ymidbot) = + ydiff:=0.15gregwidth; + qdecalage:=.2*gregwidth; + ydepth:=0.25gregwidth; + x1=x14=-qdecalage+hlthick; + x7=x8=gregwidth+hlthick; + y1+ydiff-0.5ydepth=ymidtop=y7-ydiff-0.5ydepth; + y14+ydiff-0.5ydepth=ymidbot=y8-ydiff-0.5ydepth; + 3x3=2x1+x7; 3x5=x1+2x7; + 3y3=2y1+y7; 3y5=y1+2y7; + 2x2=x1+x3; 2x4=x3+x5; 2x6=x5+x7; + 2y2=y1+y3-2ydepth; 2y4=y3+y5-2ydepth; 2y6=y5+y7-2ydepth; + 3x12=2x14+x8; 3x10=x14+2x8; + 3y12=2y14+y8; 3y10=y14+2y8; + 2x13=x14+x12; 2x11=x12+x10; 2x9=x10+x8; + 2y13=y14+y12-2ydepth; 2y11=y12+y10-2ydepth; 2y9=y10+y8-2ydepth; + + pickup line_pen; + + + draw z1{down+0.1right}..z2..z3..z4..z5..z6..{up+0.1right}z7--z8{down}..z9..z10..z11..z12..z13..{up+0.1left}z14--cycle; + fill z1{down+0.1right}..z2..z3..z4..z5..z6..{up+0.1right}z7--z8{down}..z9..z10..z11..z12..z13..{up+0.1left}z14--cycle; + shift_pic(0,-hlthick); +enddef; + +beginchar(125, 0, .5nhh#, .5nhh#); "quilisma"; + quilisma(0.5gregwidth-hlthick, -0.5gregwidth+hlthick); +endchar; + +beginchar(126, 0, .5nhh#, .5nhh#); "bottom quilisma"; + quilisma(0.5gregwidth-hlthick-0.8shave, -0.5gregwidth+hlthick); +endchar; + +%%%%%%% +message (""); +%%%%%%% +keygregwidth:=0.5*sqrt(2)*nhw; + +beginchar(98, 8/3nhw#, 3.25nhh#, 0); "gregorian C clef"; + x1=x4=0; x2=x3=keygregwidth; y1=y2=-y3=-y4=.5keygregwidth-lthick; + fill z1{dir 15}..z2--z3{dir 165}..z4--cycle; + save_elempic; + pickup med_pen; draw bot rt z1..{down}(-.01nhw,-.5nhh); + shift_pic(nhw,2.5nhh); + add_mirror ((0,2nhh),(1,2nhh)); + savepic; + shift_pic (0,-2nhh); +endchar; + +beginchar(122, 8/3nhw#, 4.25nhh#, 0); "gregorian F clef"; + callpic; + add_elempic (.1nhw+0.5med,2nhh); + fill_square (med, 1.5nhh, (.75nhw,.8nhh)); + shift_pic (1/3nhw,-2nhh); +endchar; + +end diff --git a/mf/xhsld16.mf b/mf/xhsld16.mf new file mode 100644 index 0000000000..5c719988e7 --- /dev/null +++ b/mf/xhsld16.mf @@ -0,0 +1,37 @@ +font_identifier:="xhsld16"; +mode_setup; +font_size 16pt#; +thick#:=1pt#; +stepwidth#:=1/8designsize;% -> \internote +define_pixels(stepwidth); +define_blacker_pixels(thick); +picture save_pic; +numheights:=16; +numlengths:=8;%(20-90pt) + +code=-1; +for j=1 upto numlengths: + slength#:=(j+1)*10pt#; + define_pixels(slength); + + for i=1 upto numheights: + beginchar(incr code, slength#, 0, 0); + x1=y1=0;x3=slength;y3=2y1'= i*stepwidth; + x1'=.5x3;z3'-z1'=whatever*dir(angle(z3-z1)+90); + if x3> y3:y3'=0;else:x3'=slength;fi + z2=.5[z3',z1']; + penpos1(thick,90); + penpos2(2/3thick,(angle(z3-z1)+90)); + penpos3(.15thick,(angle(z3-z1)+90)); + penstroke z1e..z2e..z3e; + pickup pencircle; draw z1..z2..z3;% draw z1--z3; draw z1'--z3'; + save_pic:=currentpicture; + endchar; + + beginchar(128+code, slength#, 0, 0); + currentpicture:=save_pic reflectedabout((.5slength,0),(.5slength, 1)); + endchar; + endfor + +endfor +end diff --git a/mf/xhsld20.mf b/mf/xhsld20.mf new file mode 100644 index 0000000000..e91a7902a0 --- /dev/null +++ b/mf/xhsld20.mf @@ -0,0 +1,37 @@ +font_identifier:="xhsld20"; +mode_setup; +font_size 20pt#; +thick#:=1pt#; +stepwidth#:=1/8designsize;% -> \internote +define_pixels(stepwidth); +define_blacker_pixels(thick); +picture save_pic; +numheights:=16; +numlengths:=8;%(20-90pt) + +code=-1; +for j=1 upto numlengths: + slength#:=(j+1)*10pt#; + define_pixels(slength); + + for i=1 upto numheights: + beginchar(incr code, slength#, 0, 0); + x1=y1=0;x3=slength;y3=2y1'= i*stepwidth; + x1'=.5x3;z3'-z1'=whatever*dir(angle(z3-z1)+90); + if x3> y3:y3'=0;else:x3'=slength;fi + z2=.5[z3',z1']; + penpos1(thick,90); + penpos2(2/3thick,(angle(z3-z1)+90)); + penpos3(.15thick,(angle(z3-z1)+90)); + penstroke z1e..z2e..z3e; + pickup pencircle; draw z1..z2..z3;% draw z1--z3; draw z1'--z3'; + save_pic:=currentpicture; + endchar; + + beginchar(128+code, slength#, 0, 0); + currentpicture:=save_pic reflectedabout((.5slength,0),(.5slength, 1)); + endchar; + endfor + +endfor +end diff --git a/mf/xhslu16.mf b/mf/xhslu16.mf new file mode 100644 index 0000000000..b2e3e7d6b0 --- /dev/null +++ b/mf/xhslu16.mf @@ -0,0 +1,37 @@ +font_identifier:="xhslu16"; +mode_setup; +font_size 16pt#; +thick#:=1pt#; +stepwidth#:=1/8designsize;% -> \internote +define_pixels(stepwidth); +define_blacker_pixels(thick); +picture save_pic; +numheights:=16; +numlengths:=8;%(20-90pt) + +code=-1; +for j=1 upto numlengths: + slength#:=(j+1)*10pt#; + define_pixels(slength); + + for i=1 upto numheights: + beginchar(incr code, slength#, 0, 0); + x1=y1=0;x3=slength;y3=2y1'=-i*stepwidth; + x1'=.5x3;z3'-z1'=whatever*dir(angle(z3-z1)+90); + if x3>-y3:y3'=0;else:x3'=slength;fi + z2=.5[z3',z1']; + penpos1(thick,90); + penpos2(2/3thick,(angle(z3-z1)+90)); + penpos3(.15thick,(angle(z3-z1)+90)); + penstroke z1e..z2e..z3e; + pickup pencircle; draw z1..z2..z3;% draw z1--z3; draw z1'--z3'; + save_pic:=currentpicture; + endchar; + + beginchar(128+code, slength#, 0, 0); + currentpicture:=save_pic reflectedabout((.5slength,0),(.5slength, 1)); + endchar; + endfor + +endfor +end diff --git a/mf/xhslu20.mf b/mf/xhslu20.mf new file mode 100644 index 0000000000..d41801dd5c --- /dev/null +++ b/mf/xhslu20.mf @@ -0,0 +1,37 @@ +font_identifier:="xhslu20"; +mode_setup; +font_size 20pt#; +thick#:=1pt#; +stepwidth#:=1/8designsize;% -> \internote +define_pixels(stepwidth); +define_blacker_pixels(thick); +picture save_pic; +numheights:=16; +numlengths:=8;%(20-90pt) + +code=-1; +for j=1 upto numlengths: + slength#:=(j+1)*10pt#; + define_pixels(slength); + + for i=1 upto numheights: + beginchar(incr code, slength#, 0, 0); + x1=y1=0;x3=slength;y3=2y1'=-i*stepwidth; + x1'=.5x3;z3'-z1'=whatever*dir(angle(z3-z1)+90); + if x3>-y3:y3'=0;else:x3'=slength;fi + z2=.5[z3',z1']; + penpos1(thick,90); + penpos2(2/3thick,(angle(z3-z1)+90)); + penpos3(.15thick,(angle(z3-z1)+90)); + penstroke z1e..z2e..z3e; + pickup pencircle; draw z1..z2..z3;% draw z1--z3; draw z1'--z3'; + save_pic:=currentpicture; + endchar; + + beginchar(128+code, slength#, 0, 0); + currentpicture:=save_pic reflectedabout((.5slength,0),(.5slength, 1)); + endchar; + endfor + +endfor +end diff --git a/mf/xsld11.mf b/mf/xsld11.mf new file mode 100644 index 0000000000..4b9142ae10 --- /dev/null +++ b/mf/xsld11.mf @@ -0,0 +1,20 @@ +font_identifier:="xsld11"; +mode_setup; +font_size 10.24pt#; +thick#:=1pt#; +internote#:=1.28pt#; +define_pixels(internote); +define_blacker_pixels(thick); + +minwidth:=8pt#; +delwidth:=4pt#; + +maxwidth:=minwidth+15delwidth; +fontdimen 5: maxwidth; + +picture p; + +def t= reflectedabout (origin,right) shifted (-.5mw,0) enddef; +def T= rotated 180 shifted (0,-mheight) enddef; + +input xslgen; diff --git a/mf/xsld13.mf b/mf/xsld13.mf new file mode 100644 index 0000000000..c612d42a63 --- /dev/null +++ b/mf/xsld13.mf @@ -0,0 +1,20 @@ +font_identifier:="xsld13"; +mode_setup; +font_size 12.8pt#; +thick#:=1pt#; +internote#:=1.6pt#; +define_pixels(internote); +define_blacker_pixels(thick); + +minwidth:=8pt#; +delwidth:=4pt#; + +maxwidth:=minwidth+15delwidth; +fontdimen 5: maxwidth; + +picture p; + +def t= reflectedabout (origin,right) shifted (-.5mw,0) enddef; +def T= rotated 180 shifted (0,-mheight) enddef; + +input xslgen; diff --git a/mf/xsld16.mf b/mf/xsld16.mf new file mode 100644 index 0000000000..38720a75ac --- /dev/null +++ b/mf/xsld16.mf @@ -0,0 +1,20 @@ +font_identifier:="xsld16"; +mode_setup; +font_size 16pt#; +thick#:=1pt#; +internote#:=2pt#; +define_pixels(internote); +define_blacker_pixels(thick); + +minwidth:=8pt#; +delwidth:=4pt#; + +maxwidth:=minwidth+15delwidth; +fontdimen 5: maxwidth; + +picture p; + +def t= reflectedabout (origin,right) shifted (-.5mw,0) enddef; +def T= rotated 180 shifted (0,-mheight) enddef; + +input xslgen; diff --git a/mf/xsld20.mf b/mf/xsld20.mf new file mode 100644 index 0000000000..c36089fcf9 --- /dev/null +++ b/mf/xsld20.mf @@ -0,0 +1,20 @@ +font_identifier:="xsld20"; +mode_setup; +font_size 20pt#; +thick#:=1pt#; +internote#:=2.5pt#; +define_pixels(internote); +define_blacker_pixels(thick); + +minwidth:=8pt#; +delwidth:=4pt#; + +maxwidth:=minwidth+15delwidth; +fontdimen 5: maxwidth; + +picture p; + +def t= reflectedabout (origin,right) shifted (-.5mw,0) enddef; +def T= rotated 180 shifted (0,-mheight) enddef; + +input xslgen; diff --git a/mf/xsld24.mf b/mf/xsld24.mf new file mode 100644 index 0000000000..5a03c91cac --- /dev/null +++ b/mf/xsld24.mf @@ -0,0 +1,20 @@ +font_identifier:="xsld24"; +mode_setup; +font_size 24pt#; +thick#:=1pt#; +internote#:=3pt#; +define_pixels(internote); +define_blacker_pixels(thick); + +minwidth:=8pt#; +delwidth:=4pt#; + +maxwidth:=minwidth+15delwidth; +fontdimen 5: maxwidth; + +picture p; + +def t= reflectedabout (origin,right) shifted (-.5mw,0) enddef; +def T= rotated 180 shifted (0,-mheight) enddef; + +input xslgen; diff --git a/mf/xsld29.mf b/mf/xsld29.mf new file mode 100644 index 0000000000..766cb83ffc --- /dev/null +++ b/mf/xsld29.mf @@ -0,0 +1,20 @@ +font_identifier:="xsld29"; +mode_setup; +font_size 28.8pt#; +thick#:=1pt#; +internote#:=3.6pt#; +define_pixels(internote); +define_blacker_pixels(thick); + +minwidth:=8pt#; +delwidth:=4pt#; + +maxwidth:=minwidth+15delwidth; +fontdimen 5: maxwidth; + +picture p; + +def t= reflectedabout (origin,right) shifted (-.5mw,0) enddef; +def T= rotated 180 shifted (0,-mheight) enddef; + +input xslgen; diff --git a/mf/xslgen.mf b/mf/xslgen.mf new file mode 100644 index 0000000000..8df8742b77 --- /dev/null +++ b/mf/xslgen.mf @@ -0,0 +1,37 @@ +min_bow:= internote; +max_bow:=3internote; +slope:=17.5/100; + +code=-1; + +for iht=1 upto 8: + for iwd=0 upto 15: + beginchar(incr code, 0, 0, 0); + mw#:=(minwidth+iwd*delwidth)*pt#; + define_pixels(mw); + x1 = y1= 0; x3= mw; y3= 2y2'= iht*internote; x2'= .5x3; + mheight:=y3; + z2-z2'= whatever*dir(angle(z3-z1)+90); + my_bow:=min(max_bow, slope*mw); + my_bow:=max(my_bow, min_bow); + z1'=(z1-(0,my_bow)) rotated angle(z3-z1); + (z1'-z2)=whatever*(z1-z2'); + penpos1(.15thick,(angle(z3-z1)+90)); + penpos2(thick,(angle(z3-z1)+90)); + penpos3(.15thick,(angle(z3-z1)+90)); + penstroke (flex(z1e,z2e,z3e)); +%{{{ + currentpen:= pencircle; + draw (flex(z1,z2,z3));% draw z1--z3; draw z2'--z2--z1'--z1; +%}}} + currentpicture:=currentpicture t; + p:=currentpicture; + endchar; + + beginchar(code+128, 0, 0, 0); + currentpicture:=p T; + endchar; + + endfor +endfor +end diff --git a/mf/xslhd.mf b/mf/xslhd.mf new file mode 100644 index 0000000000..5ae5fdcdd0 --- /dev/null +++ b/mf/xslhd.mf @@ -0,0 +1,31 @@ +thick#:=1pt#; +stepwidth#:=designsize/8; +define_pixels(stepwidth); +define_blacker_pixels(thick); +picture save_pic; +numheights:=16; +numlengths:=8;%(12-96pt) + +code=-1; +for j=1 upto numlengths: + slength#:=j*12pt#; + define_pixels(slength); + + for i=1 upto numheights: + beginchar(incr code, slength#, 0, 0); + x1=y1=0;x2=slength;y2= i*stepwidth; + penpos1(thick,90); + penpos2(max(1,.15thick),min(2angle(z2-z1)+90,180)); + fill z1r{dir(1)}..{dir(min(2angle(z2-z1),90)-1)}z2r-- + z2l{dir(min(2angle(z2-z1)-180,-90))}..z1l{left}--cycle; + save_pic:=currentpicture; + endchar; + + beginchar(128+code, slength#, 0, 0); + currentpicture:=save_pic reflectedabout((.5slength,0),(.5slength, 1)); + endchar; + endfor + +endfor +end + diff --git a/mf/xslhd11.mf b/mf/xslhd11.mf new file mode 100644 index 0000000000..215a47fbee --- /dev/null +++ b/mf/xslhd11.mf @@ -0,0 +1,5 @@ +font_identifier:="xslhd11"; +mode_setup; +font_size 10.24pt#; +input xslhd; + diff --git a/mf/xslhd13.mf b/mf/xslhd13.mf new file mode 100644 index 0000000000..930c0aef58 --- /dev/null +++ b/mf/xslhd13.mf @@ -0,0 +1,4 @@ +font_identifier:="xslhd13"; +mode_setup; +font_size 12.8pt#; +input xslhd; diff --git a/mf/xslhd16.mf b/mf/xslhd16.mf new file mode 100644 index 0000000000..aacbd5ac1a --- /dev/null +++ b/mf/xslhd16.mf @@ -0,0 +1,5 @@ +font_identifier:="xslhd16"; +mode_setup; +font_size 16pt#; +input xslhd; + diff --git a/mf/xslhd20.mf b/mf/xslhd20.mf new file mode 100644 index 0000000000..d0bb66a5d2 --- /dev/null +++ b/mf/xslhd20.mf @@ -0,0 +1,4 @@ +font_identifier:="xslhd20"; +mode_setup; +font_size 20pt#; +input xslhd; diff --git a/mf/xslhd24.mf b/mf/xslhd24.mf new file mode 100644 index 0000000000..650eba1aa9 --- /dev/null +++ b/mf/xslhd24.mf @@ -0,0 +1,4 @@ +font_identifier:="xslhd24"; +mode_setup; +font_size 24pt#; +input xslhd; diff --git a/mf/xslhd29.mf b/mf/xslhd29.mf new file mode 100644 index 0000000000..db52074175 --- /dev/null +++ b/mf/xslhd29.mf @@ -0,0 +1,4 @@ +font_identifier:="xslhd24"; +mode_setup; +font_size 28.8pt#; +input xslhd; diff --git a/mf/xslhu.mf b/mf/xslhu.mf new file mode 100644 index 0000000000..c52ceacc8f --- /dev/null +++ b/mf/xslhu.mf @@ -0,0 +1,30 @@ +thick#:=1pt#; +stepwidth#:=designsize/8; +define_pixels(stepwidth); +define_blacker_pixels(thick); +picture save_pic; +numheights:=16; +numlengths:=8;%(12-96pt) + +code=-1; +for j=1 upto numlengths: + slength#:=j*12pt#; + define_pixels(slength); + + for i=1 upto numheights: + beginchar(incr code, slength#, 0, 0); + x1=y1=0;x2=slength;y2=-i*stepwidth; + penpos1(thick,90); + penpos2(max(1,.15thick),min(2angle(z2-z1)+90,180)); + fill z1r{dir(1)}..{dir(min(2angle(z2-z1),90)-1)}z2r-- + z2l{dir(min(2angle(z2-z1)-180,-90))}..z1l{left}--cycle; + save_pic:=currentpicture; + endchar; + + beginchar(128+code, slength#, 0, 0); + currentpicture:=save_pic reflectedabout((.5slength,0),(.5slength, 1)); + endchar; + endfor + +endfor +end diff --git a/mf/xslhu11.mf b/mf/xslhu11.mf new file mode 100644 index 0000000000..f1b0c69998 --- /dev/null +++ b/mf/xslhu11.mf @@ -0,0 +1,4 @@ +font_identifier:="xslhu11"; +mode_setup; +font_size 10.24pt#; +input xslhu.mf diff --git a/mf/xslhu13.mf b/mf/xslhu13.mf new file mode 100644 index 0000000000..162c503770 --- /dev/null +++ b/mf/xslhu13.mf @@ -0,0 +1,4 @@ +font_identifier:="xslhu13"; +mode_setup; +font_size 12.8pt#; +input xslhu.mf diff --git a/mf/xslhu16.mf b/mf/xslhu16.mf new file mode 100644 index 0000000000..6cfc184d8e --- /dev/null +++ b/mf/xslhu16.mf @@ -0,0 +1,5 @@ +font_identifier:="xslhu16"; +mode_setup; +font_size 16pt#; +input xslhu.mf + diff --git a/mf/xslhu20.mf b/mf/xslhu20.mf new file mode 100644 index 0000000000..94c6f00d1b --- /dev/null +++ b/mf/xslhu20.mf @@ -0,0 +1,4 @@ +font_identifier:="xslhu20"; +mode_setup; +font_size 20pt#; +input xslhu.mf diff --git a/mf/xslhu24.mf b/mf/xslhu24.mf new file mode 100644 index 0000000000..399813c110 --- /dev/null +++ b/mf/xslhu24.mf @@ -0,0 +1,4 @@ +font_identifier:="xslhu24"; +mode_setup; +font_size 24pt#; +input xslhu.mf diff --git a/mf/xslhu29.mf b/mf/xslhu29.mf new file mode 100644 index 0000000000..f5155abdc7 --- /dev/null +++ b/mf/xslhu29.mf @@ -0,0 +1,4 @@ +font_identifier:="xslhu29"; +mode_setup; +font_size 28.8pt#; +input xslhu.mf diff --git a/mf/xslhz20.mf b/mf/xslhz20.mf new file mode 100644 index 0000000000..23f015dc97 --- /dev/null +++ b/mf/xslhz20.mf @@ -0,0 +1,24 @@ +font_identifier:="xslhz20"; +mode_setup; +font_size 20pt#; +thick#:=1pt#; +stepwidth#:=4pt#; +define_pixels(stepwidth); +define_blacker_pixels(thick); +picture pic; + +slope=1/100; + +for i=1 upto 100: + beginchar((i-1),0,0,0); + x3=-x1=.5i*stepwidth; x2=y1=y3=0; y2=slope*i*stepwidth; + penpos1(thick,90); penpos2(thick,90); penpos3(thick,90); + penstroke z1e..z2e..z3e; + pic:= currentpicture; + endchar; + + beginchar((128+i-1),0,0,0); + currentpicture:= pic reflectedabout(origin,right); + endchar; +endfor +end diff --git a/mf/xslu11.mf b/mf/xslu11.mf new file mode 100644 index 0000000000..0a11e6012f --- /dev/null +++ b/mf/xslu11.mf @@ -0,0 +1,20 @@ +font_identifier:="xslu11"; +mode_setup; +font_size 10.24pt#; +thick#:=1pt#; +internote#:=1.28pt#; +define_pixels(internote); +define_blacker_pixels(thick); + +minwidth:=8pt#; +delwidth:=4pt#; + +maxwidth:=minwidth+15delwidth; +fontdimen 5: maxwidth; + +picture p; + +def t= rotated 180 shifted (.5mw, mheight) enddef; +def T= rotated 180 shifted (0,mheight) enddef; + +input xslgen; diff --git a/mf/xslu13.mf b/mf/xslu13.mf new file mode 100644 index 0000000000..b9f9fb1720 --- /dev/null +++ b/mf/xslu13.mf @@ -0,0 +1,20 @@ +font_identifier:="xslu13"; +mode_setup; +font_size 12.8pt#; +thick#:=1pt#; +internote#:=1.6pt#; +define_pixels(internote); +define_blacker_pixels(thick); + +minwidth:=8pt#; +delwidth:=4pt#; + +maxwidth:=minwidth+15delwidth; +fontdimen 5: maxwidth; + +picture p; + +def t= rotated 180 shifted (.5mw, mheight) enddef; +def T= rotated 180 shifted (0,mheight) enddef; + +input xslgen; diff --git a/mf/xslu16.mf b/mf/xslu16.mf new file mode 100644 index 0000000000..37d07d99ff --- /dev/null +++ b/mf/xslu16.mf @@ -0,0 +1,20 @@ +font_identifier:="xslu16"; +mode_setup; +font_size 16pt#; +thick#:=1pt#; +internote#:=2pt#; +define_pixels(internote); +define_blacker_pixels(thick); + +minwidth:=8pt#; +delwidth:=4pt#; + +maxwidth:=minwidth+15delwidth; +fontdimen 5: maxwidth; + +picture p; + +def t= rotated 180 shifted (.5mw, mheight) enddef; +def T= rotated 180 shifted (0,mheight) enddef; + +input xslgen; diff --git a/mf/xslu20.mf b/mf/xslu20.mf new file mode 100644 index 0000000000..0a741c0f54 --- /dev/null +++ b/mf/xslu20.mf @@ -0,0 +1,20 @@ +font_identifier:="xslu20"; +mode_setup; +font_size 20pt#; +thick#:=1pt#; +internote#:=2.5pt#; +define_pixels(internote); +define_blacker_pixels(thick); + +minwidth:=8pt#; +delwidth:=4pt#; + +maxwidth:=minwidth+15delwidth; +fontdimen 5: maxwidth; + +picture p; + +def t= rotated 180 shifted (.5mw, mheight) enddef; +def T= rotated 180 shifted (0,mheight) enddef; + +input xslgen; diff --git a/mf/xslu24.mf b/mf/xslu24.mf new file mode 100644 index 0000000000..f7ce9d6561 --- /dev/null +++ b/mf/xslu24.mf @@ -0,0 +1,20 @@ +font_identifier:="xslu24"; +mode_setup; +font_size 24pt#; +thick#:=1pt#; +internote#:=3pt#; +define_pixels(internote); +define_blacker_pixels(thick); + +minwidth:=8pt#; +delwidth:=4pt#; + +maxwidth:=minwidth+15delwidth; +fontdimen 5: maxwidth; + +picture p; + +def t= rotated 180 shifted (.5mw, mheight) enddef; +def T= rotated 180 shifted (0,mheight) enddef; + +input xslgen; diff --git a/mf/xslu29.mf b/mf/xslu29.mf new file mode 100644 index 0000000000..68383431b3 --- /dev/null +++ b/mf/xslu29.mf @@ -0,0 +1,20 @@ +font_identifier:="xslu29"; +mode_setup; +font_size 28.8pt#; +thick#:=1pt#; +internote#:=3.6pt#; +define_pixels(internote); +define_blacker_pixels(thick); + +minwidth:=8pt#; +delwidth:=4pt#; + +maxwidth:=minwidth+15delwidth; +fontdimen 5: maxwidth; + +picture p; + +def t= rotated 180 shifted (.5mw, mheight) enddef; +def T= rotated 180 shifted (0,mheight) enddef; + +input xslgen; diff --git a/mf/xslz20.mf b/mf/xslz20.mf new file mode 100644 index 0000000000..f335e12bcf --- /dev/null +++ b/mf/xslz20.mf @@ -0,0 +1,42 @@ +font_identifier:="xslz20"; +mode_setup; +font_size 20pt#; +thick#:=1pt#; +nhh#:=5pt#; +define_pixels(nhh); +define_blacker_pixels(thick); +minwidth:=8pt#; +delwidth:=4pt#; + +numslurs:=54; +maxwidth:=minwidth+(numslurs-1)*delwidth; + +fontdimen 5: maxwidth; + +picture p; + +min_bow:= .4nhh; +max_bow:= 1.75nhh; +slope:= 10/100; + +code=-1; + +for i=1 upto numslurs: + + beginchar(incr code, 0, 0, 0); + mw:=(minwidth+code*delwidth)*pt; + x3= -x1= .5mw; x2= y1= y3 = 0; + y2= max(min_bow, slope*mw); + y2:= min(y2, max_bow); + penpos1(.15thick,90); penpos2(thick,90); penpos3(.15thick,90); + penstroke (flex(z1e,z2e,z3e)); + currentpen:= pencircle; draw (flex(z1,z2,z3)); + p:=currentpicture; + endchar; + + beginchar(code+54, 0, 0, 0); + currentpicture:=p reflectedabout (origin, right); + endchar; + +endfor +end diff --git a/mf/xtie20.mf b/mf/xtie20.mf new file mode 100644 index 0000000000..99f2454842 --- /dev/null +++ b/mf/xtie20.mf @@ -0,0 +1,24 @@ +font_identifier:="xtie20"; +mode_setup; +font_size 20pt#; +thick#:=1pt#; +stepwidth#:=4pt#; +define_pixels(stepwidth); +define_blacker_pixels(thick); +picture pic; + +slope=.009; + +for i=1 upto 100: + beginchar((i-1),0,0,0); + x3=-x1=.5i*stepwidth; x2=y1=y3=0; y2=slope*i*stepwidth; + penpos1(thick,90); penpos2(thick,90); penpos3(thick,90); + penstroke z1e..z2e..z3e; + pic:= currentpicture; + endchar; + + beginchar((128+i-1),0,0,0); + currentpicture:= pic reflectedabout(origin,right); + endchar; +endfor +end