+++ /dev/null
-=head1 NAME
-
-Mudela - GNU LilyPond input format 0.1
-
-=head1 DESCRIPTION
-
-This document describes the the GNU LilyPond input format, which is an
-effective language for defining music. We call this language
-(rather arrogantly) The Musical Definition Language (S<Mudela 0.1>).
-
-[If anybody comes up with a better name, we'd gladly take this Gourlay
-already uses Musical Description Language, GSharp Score Definition
-Language. We're not being original here]
-
-The first aim of Mudela is to define a piece of music,
-being complete from both from a musical typesetting,
-as from a musical performing point of view.
-
-
-=head1 Overview
-
-The Musical Definition Language (Mudela) S<version 2>, has a logical
-structure, making use of typing and naming (using identifiers), that
-allows for flexible input, and definition reuse. See MANIFESTO for
-reasons and design considerations.
-
-The below included for explanatory purposes only (i.e., for a complete
-and up-to-date definition, see F<lily/parser.y> and F<lily/lexer.l>):
-
-As a related note, you should take a look at the examples and the init
-files, as this document does not cover every aspect of mudela yet, and
-may be out of date.
-
-=head2 Files
-
-The de-facto extension of Mudela is F<.ly>. Files may be included by
-entering C<include> at the start of a line:
-
- \include "a_file.ly"
-
-=head2 Comments
-
-Line comments are introduced by a C<%>. Block comments are delimited
-by C<%{> and C<%}>. They do not nest.
-
-=head2 Versions
-
-Occasionally, small changes in syntax across different versions of
-Mudela might give syntax errors. To warn you about possible
-incompatibilities, you can specify the Mudela version for which the
-inputfile was written,
-
- \version "0.0.50";
-
-A perl-script which tries to convert to newer versions
-(F<convert-mudela>) is included in the LilyPond distribution.
-
-=head2 Words
-
-Keywords are preceded by a backslash: '\'. They contain alphabetic
-characters only.
-
-Identifiers in their normal form consist start with a alpha character,
-followed by alpha-numerics. Identifiers can contain any characters
-(except whitespace, C<$> and C<%>), if you use this construct:
-
- $i'm_a_weird###identifier
-
-(which is the identifier with the name
-C<i'm_a_weird###identifier> ). C<$> Takes any sequence of
-characters which are not whitespace, C<$> and C<%>.
-
- \$i'm_a_weird###escaped_word
-
-=head2 Nesting characters
-
-Mudela uses the brace (C<{> and C<}>) for hierarchical structures. To
-aid the eye in reading, for chords the < and the > are used as
-nesting braces.
-
-=head2 Constants
-
-Please note that -.5 is no Real.
-
- "I am a string"
- -1.2e3 % a real
- 12 % an int
-
-
-
-=head2 Identifiers
-
-=head2 Hierarchical structures
-
-The general structure consists of declarations:
-
- IDENTIFIER = \TYPE{
- <type specific data>
- }
-
-and instantiations:
-
- \TYPE{ <type specific data> }
-
-(Currently, C<\score> is the only type that can be instantiated
-at top level. Currently declarations can only be done at top level)
-
-Most instantiations that use an IDENTIFIER are specified as follows:
-
- \TYPE{ IDENTIFIER [...] }
-
-Some exceptions on this rule have been made to prevent inputting
-Mudela becoming tedious
-
-
-=head2 Simple mudela
-
-The actual musical part of Mudela that defines a melody, is known as
-I<simple mudela>.
-
-Simple mudela is the most common type of music. It consists of a list
-of notes or lyrics, chords, and commands.
-
-=head2 Modes:
-
-To simplify different aspects of music definition (entering the notes
-and manipulating them) Mudela has a number of different input "modes":
-
-=over 4
-
-=item Normal mode
-
-At the start of parsing, Mudela assumes normal mode.
-In Normal mode, a word is looked up in the following order:
-
- word identifier, string
- \word keyword, identifier, string
-
-In normalmode, a word is assumed to start with an alphabetic
-character, followed by alpha-numeric characters.
-
-=item Note mode
-
-Note mode (and thus Simple mudela) is introduced by the keyword C<\melodic>.
-In Note mode, a word is looked up in the following order:
-
- word notename, string
- \word keyword, identifier, string
-
-In Note mode a word is considered to have alphabetic characters only.
-
-=item Lyric mode
-
-Lyrics mode (and thus Simple mudela) is introduced by the keyword C<\lyrics>.
-
-In Lyrics mode, a word is looked up in the following order:
-
- word string
- \word keyword, identifier, string
-
-In Lyric mode every sequence of non-digit and non-white characters
-starting with an alphabetic character or the '_'is considered a word.
-
- a&@&@&TSI|{[ % a word
- 1THtrhortho % not a "word"
- Leise Fl\"u\ss{}teren meine Sapfe % 4 words
- _ _ _ _ % 4 words: 4 spaces
-
-=back
-
-These modes are of a lexical nature. Normal and Note mode largely
-resemble each other, save the possibility of entering Reals,
-meaning of C<_> and the resolution of words
-
-=head2 Notes
-
-Simple mudela basically is a sequence of the notes you want to
-enter.
-
- a'4 % dutch names
-
-is a A-1 pitched quaver. The ' signifies an octave change. A-1 is 440
-Hz concert-pitch. C<c'> is also known as the central c. More examples:
-
- 'a % 110
- a % 220
- a' % 440
- a'' % 880
-
-another example:
-
- 'as4.*2/3
-
-This is an A flat, (just below 110 Hz concert-pitch). The C<*2/3>
-signifies that this note is part of a triplet (3 in stead of 2). The
-duration is one and a half quaver (C<4.>) times 2/3.
-
-
-Notenames are just a special kind of identifiers, and can be declared
-for any language appropriate (see F<dutch.ini>). The default language
-for notenames is defined to be dutch. In dutch, the notenames are
-a,b,c,d,e,f and g. Sharps are formed by adding the extension "is",
-flats by adding "es"
-
- % double sharp
- cisis disis eisis fisis gisis aisis bisis
- % sharps
- cis dis eis fis gis ais bis
- % naturals
- c d e f g a b
- % flats
- ces des es fes ges as bes
- % double flats
- ceses deses eses feses geses ases beses
-
-The standard notenames also have uppercase versions, which octavate
-down:
-
- a % 220 concert-pitch
- A % 110
- 'A % 55
- A' % 220
- Cisis
-
-Rests are named r or s
-
- r % print a rest
- s % a "space" rest, nothing is printed.
-
-These notenames along with duration are enough material to construct
-simple melodies:
-
- c4 c4 g4 g4 a4 a4 g2
- f4 f4 e4 e4 d4 d4 c2
-
-Music is able to express more. generally speaking, the other
-'features' are either connected between notes (slurs, beams: spanning
-requests) or attached to notes (eg. accents). The former are
-implemented as START and STOP stop features and then attached to the note.
-
- [] START/STOP a beam
- () START/STOP a slur
-
-
-example:
-
- [c8 () d8 () e8 ]
-
-Please note that these two characters do I<not> necessarrily nest,
-they should attached to the note C<[ {c4 c4} ]> will generate a parse
-error for this reason.
-
- [c8 e8(] [)g8 <c'8] e'8>
- % NO nesting!
- [2/3 c8 c8 c8]1/1 % a triplet
-
-
-=head2 Slurs and Ties
-
-Ties connect the noteheads of adjecent notes. They are entered as follows:
-
- a4 ~ a4
-
-Slurs connect whole chords, and try to avoid crossing stems. They are
-entered as follows:
-
- a4( )a4
-
-=head2 Scripts
-
-Symbols which can be put at either side (above or below) of a staff
-are entered as follows:
-
- a-^ % marcato, direction: default
- a^- % portato, direction: above note
- a_. % staccato, direction: below note
- a^\script { "symbolindex" . . . } % see script.ini for details.
- a^\fermata % predefined identifier
-
-Dynamics can be put after the notename:
-
- a4 \dynamic { 0 } % 0 = fff, 7 = ppp
-
-Mudela defines the following dynamic identifiers:
-
- ppp pp p mp mf df ff fff % df iso f, f is a notename.
-
-and the following abbreviations:
-
- \< %start crescendo
- \> % start decrescendo
- \! % end crescendo/decrescendo
-
-=head2 Text
-
-To accompany a note with a text (eg, "marcato"), you should say:
-
- c_"marcato"
- c^"marcato"
- c-"marcato"
-
-the c- construct chooses the default up/down direction.
-
-
-
-
-=head2 Defaults
-
-If omit the duration of a, a default value is substituted. For this
-default value, there are two modes:
-
-=over 4
-
-=item 1
-
-Use the last duration explicitly entered
-
-=item 2
-
-Use the explicitly set "default duration"
-
-=back
-
-Thus the following inputs are equivalent
-
- c4 c4 c16 c16 c16 s16 c4 c16
-
- \duration { "last" }
- c4 c c16 c c c c4 c16
-
- \duration { 4 }
- c c c16 c16 c16 c16 c c16
-
- \duration { 16 }
- c4 c4 c c c c c4
-
-If you are typing music which does not lie in the "small" and "large"
-octave, you can prevent having to type C<'> all the time by using the
-C<\octave> command: These two lines have the same pitch.
-
- c'' d'' e''
- \octave{c''} c d e
-
-By default the setting of C<\octave> is 0.
-
-=head2 Lyrics
-
-Lyrics in Mudela resemble Simple mudela a lot, with notes substituted
-by text.
-
-All syllables are entered separately, separated by whitespace
-
- Twin-4 kle4 twin-4 kle4 ...
-
-Two syllables or words that compose a single
-duration entry are bound together using an underscore
-
- He_could4 not4
-
-=head2 Music direction
-
-Mudela reads left to right, but you can still stack voices and
-Voice_elements which are produced in two directions: horizontal
-(voice like) and vertical (chord like)
-
-A sequence of notes (horizontal) is called simple horizontal, eg
-
- c4 c4 g4 g4
-
-
-You can also glue two pieces of simple horizontal music together with the
-concatenation operator:
-
- horOne = \melodic { c c g g }
- horTwo = \melodic { a a g2 }
- twinkle = \melodic { \horOne ++ \horTwo }
-
-If you enclose simple horizontal music in braces ( { } ), then you get
-horizontal music:
-
- { c c g g a a g2 } % twinkle twinkle
-
-You can start vertical music (a "chord") by enclosing a sequence of
-notes with < and >. Example:
-
- <a cis e'> % a-major chord
-
-You can also put vertical music inside horizontal music:
-
- { c <c e> <c e g> <c e g c'> } % 4 increasing chords
-
-And vice versa
-
- < \multivoice
- {c c g g a a g2}
- {r2 r2 c c g g a a g2} > % a canon
-
-The duration of a chord equals the union of the durations of each of
-its elements. The C<\multivoice> is a construct which is explained
-below.
-
-
-=head2 Transposition
-
-You can transpose horizontal music in the following way:
-
-
- \melodic {
- \meter 2/4;
- ++
- \transpose {
- d % from c to the d that's one octave down
- { e4 f4 } % the horizontal music
- } ++ g4
- }
-
-The result is, as you can see, again simple horizontal music.
-
-
-=head2 Voicegroups
-
-If more than one "voice" is in a staff, then you have the option of
-putting the different voices into so called voicegroups: members of
-the same voicegroup share certain characteristics, among others:
-
- - dynamics
- - text
- - beams and stems
- - scripts
-
-For the actual list, see the init file F<register.ini>
-
-Putting different musical lines in to the same voicegroup effectively
-makes LilyPond try to form chords of all those lines. Putting
-different musical lines in to different voicegroups effectively makes
-LilyPond try to set those lines as independently as possible.
-
-You can set the voicegroup of a voice with the command C<\group>, e.g.,
-
- oboeI = \melodic {
- \group "oboes";
- [e8 f8
- \group "+solo";
- [g16 a16 g16 fis16]
- \group "-";
- g8 f8
- }
- oboeII = \melodic { \group "oboes";
- c8 d8]
- e4
- e8 d8
- }
- /// ...
-
- \staff {
- melodicregs \melodic{ oboeI }
- \melodic { oboeII}
- }
-
-In this example, the two oboe voices share one staff and are initially
-in the voicegroup called "oboes". They will share beams, dynamics etc.
-After two quavers, oboeI "pushes" its group: a new voicegroup is
-created, called "oboes+solo". The C<\group "-"> command makes the
-voice enter "oboes" again.
-
-Please do note that [] are voicegroup wide; the previous input is
-valid: the beam, started in oboeI, voicegroup "oboes" is also ended in
-voicegroup "oboes", albeit not in oboeI but oboeII
-
-This concept may seem contorted, but it allows you to set the separate
-oboe parts without changing the C<oboeI> and C<oboeII> (assuming that
-you edit the [] in the example.)
-
-The construct
-
- < { .... } {......} >
-
-makes a chord (all horizontal parts are in the same voicegroup). The construct
-
- < \multivoice { ....} { .... } >
-
-creates horizontal parts which behave independently. You will have to
-set voicegroup features by hand (\stem and \hshift. See examples)
-
-
-
-
-=head2 Rhythms
-
-Rhythms in Mudela are entered identical to Simple mudela.
-The melodic part of the information is ignored.
-
-=head2 Durations
-
-A duration always starts with the duration type (1,2,4 etc), and then
-any optional multipliers/dots
-
-=head2 Meters/groupings
-
-A meter has this form:
-
- \meter 3/4 ;
-
-Rhythmic grouping is a concept closely associated with this. For
-example, in a 5/8 meter, the counts are grouped 2+3. In mudela this is
-entered as
-
- \grouping 8*2 8*3 ;
-
-You can start the piece with a partial measure, the command takes the
-same syntax as grouping:
-
- \partial 16*3 4;
-
-Make the piece start with a partial measure [transl?] lasting 1 3/4
-quaver.
-
-These commands are also "voice elements", and constitute simple mudela
-(consisting of stuff with duration 0).
-
-=head1 STRUCTURE
-
-In concrete, a piece of Mudela has the following structure:
-
- % declare pieces of music:
- melody = \music{ <simple mudela> }
- accompany = \music{ <simple mudela> }
-
- % instantiate (=create tex, midi output) the score:
- \score{
- \staff{ melodicregs melody }
- \staff{ melodicregs accompany }
- \midi{ <midi definitions> }
- \paper{ <paper and layout definitions> }
- }
-
-=head2 Examples
-
-Examples are included with the GNU LilyPond distribution. For the sake of
-maintenance no long examples are included in this document.
-
-=head2 Staff
-
-The staff is a simple container (containing Voices). The so-called
-"registers" determine the characteristics of the Staff. At this time,
-LilyPond supports the following personalities:
-
-=over 4
-
-=item melodicregs
-
-This makes the staff into a single five line melodic staff.
-
-=item lyricregs
-
-This makes the staff into a staff which will only set Lyric_requests.
-
-=back
-
-
-=head1 HISTORY
-
-
-This language has a number of roots. First and foremost, GNU LilyPond's
-predecessor mpp was the inspiration of simple Mudela. Secondly, the
-hierarchical structure looks a lot like Rayce's (Rayce is a raytracer
-that I've written as a hobby project. ), which in turn owes a lot to
-POVRay.
-
-Now, we know, musictypesetting and raytracing do not necessarily
-require the same input format, and we know that a lot more ways exist
-to convert music to ASCII, but we did give this language some
-thoughts. As always suggestions are appreciated.
-
+++ /dev/null
-#!/bin/sh
-
-#shift;
-if test "x$1" = x;
-then
- versionfile=".version"
-else
- versionfile=$1;
-fi
-
-cat $versionfile| sed 's/#.*$//g'|sed 's/\([^ ]*\)[\t ]*=[ \t]*\([^ ]*\)$/#define \1 \"\2\"/g'
-echo
-if [ -z $CXX ]
-then
- COMPILER=unknown
-else
- COMPILER="$CXX `$CXX --version`"
-fi
-
-echo "#define COMPILER "\"$COMPILER\"
+++ /dev/null
-#!/usr/bin/perl -w
-# stupid script to generate WWW site.
-
-use FileHandle;
-use Getopt::Long;
-my $lily_version;
-my $footstr;
-my $mw_id = "<!make_website!>";
-
-sub get_version
-{
- my ($vstr)=("");
- open V, "$depth/.version";
- while (<V>) {
- s/#.*$//g;
- next if (/^ *$/);
- s/^/\$/;
- s/= *(.*)$/=\"$1\";/;
- $vstr .= $_;
- }
- eval ($vstr);
-
- $lily_version= "$TOPLEVEL_MAJOR_VERSION.$TOPLEVEL_MINOR_VERSION.$TOPLEVEL_PATCH_LEVEL$TOPLEVEL_MY_PATCH_LEVEL";
-
- # stupid checks.
- $lily_version= "$TOPLEVEL_MAJOR_VERSION.$TOPLEVEL_MINOR_VERSION.$TOPLEVEL_PATCH_LEVEL$TOPLEVEL_MY_PATCH_LEVEL";
-
-
- close V;
-}
-
-sub set_html_footer
-{
- my $MAILADRESS=$ENV{MAILADRESS};
- my @pw=(getpwuid($<));
- my $username=$pw[6];
-
- $footstr =
- "\n<hr>Please take me <a href=index.html>back to the index</a>\n<hr>
-<font size=-1>
-This page was generated by <code>make_website</code> from lilypond-$lily_version by
-<p>
-<address><br>$username <a href=mailto:$MAILADRESS><<!bla>$MAILADRESS</a>></address>
-<p>" . `date` . "
-<p></font>";
-}
-
-
-# do something, check return status
-sub my_system
-{
- my (@cmds) = @_;
- foreach $cmd (@cmds) {
- my ($ignoreret)=0;
- if ( $cmd =~ /^-/ ) {
- $ignoreret = 1;
- $cmd = substr ($cmd, 1);
- }
-
- my $ret = ( system ($cmd));
- if ($ret) {
- if ($ignoreret) {
- print STDERR "ignoring failed command \`$cmd\' (status $ret)\n";
- }else {
- print STDERR "\nmake_website: failed on command \`$cmd\' (status $ret)\n";
- exit 2;
- }
- }
- }
-}
-
-
-local $base="lilypond/";
-local @examples=("multi", "wohltemperirt" ,"standchen", "toccata-fuga-E",
- "scsii-menuetto", "collisions", "cadenza", "scales", "book");
-
-# rhythm, scales,
-
-
-sub gen_html
-{
- print "generating HTML\n";
- my_system "make -kC .. html";
-}
-
-sub ps_to_gif
-{
- my ($a)=@_;
-
- if (! -f "$a.ps" ) {
- my_system("gunzip -c $a.ps.gz > $a.ps");
- }
- my_system "gs -q -sDEVICE=ppmraw -sOutputFile=- -r200 -dNOPAUSE $a.ps -c quit |pnmscale 0.5| ppmtogif > $a.gif";
-}
-
-
-sub ps_to_jpeg
-{
- my ($a)=@_;
- my $in = "$a.ps";
-
- my_system "gs -q -sDEVICE=ppmraw -sOutputFile=- -r200 -dNOPAUSE $in -c quit |pnmscale 0.5| cjpeg -grayscale > $a.jpeg";
-}
-
-sub gen_examples
-{
- print "generating examples: \n";
- foreach $a (@examples) {
- $texfile="lelie";
- $tex = "tex $texfile";
- if ($a eq "standchen" || $a eq "scsii-menuetto" || $a eq "book" ) {
- $tex = "latex $a";
- $texfile = "$a";
- }
-
- if ( ! -f "$a.ly.txt" ) {
- my_system "ln $depth/input/$a.ly ./$a.ly.txt";
- }
- if (! -f "$a.dvi" ) {
- my_system "lilypond $a;",
- "$tex", "-mv $texfile.dvi $a.dvi";
- }
- if ( ! -f "$a.ps.gz" && ! -f "$a.ps" ) {
- my_system "dvips -o $a.ps $a.dvi";
- }
-
- my_system "mv lelie.midi $a.midi; " if ( -f "lelie.midi" );
-
- # generate the pixmap at twice the size, then rescale (for antialiasing)
- if ( ! -f "$a.gif" ) {
- ps_to_gif($a);
- }
- if ( ! -f "$a.ps.gz" ) {
- my_system "gzip -f $a.ps";
- }
- }
-}
-
-
-sub gen_list
-{
- print "generating HTML list\n";
- open HTMLLIST, ">example_output.html";
- print HTMLLIST "<html><body><title>LilyPond examples</title>\n
-These example files are taken from the LilyPond distribution.\n
-LilyPond currently only outputs TeX and MIDI. The pictures and\n
- PostScript files were generated using TeX, Ghostscript and some graphics tools. \n
-The GIF files have been scaled to eliminate aliasing.";
- foreach $a (@examples) {
- $name=$a;
- print HTMLLIST "<h1>example file: $name</h1>\n<XMP>\n";
-
- open IF, "$depth/input/$a.ly";
- input_record_separator IF "%}";
-
- $desc = <IF>;
- close IF;
-
- print HTMLLIST "$desc\n</XMP>";
-
- $inputf="$a.ly.txt";
- $giff="$a.gif";
- $jpegf="$a.jpeg";
- $pngf = "$a.png";
- $psf="$a.ps.gz";
- $midif="$a.midi";
-
- print HTMLLIST "<ul>";
-
- print HTMLLIST "<li><a href=$inputf> The input file</a>"
- if ( -f $inputf );
-
- print HTMLLIST "<li><a href=$giff>The output (picture)</a>"
- if ( -f $giff );
-
- print HTMLLIST "<li><a href=$psf>The output (PS)</a>\n"
- if ( -f $psf );
-
- print HTMLLIST "<li><a href=$midif>The output (MIDI)</a>\n"
- if ( -f $midif );
- print HTMLLIST "</ul>";
- }
- print HTMLLIST "</BODY></HTML>";
- close HTMLLIST;
-}
-
-sub edit_html
-{
- print STDERR "adding footer\n";
-
- OUTER:
- foreach $a (<*.html>) {
- open H, "$a";
- my $sep="</BODY>";
- input_record_separator H $sep;
- my $file="";
-
- while (<H>) {
- if (/$mw_id/) {
- close H;
- next OUTER;
- }
- $file .= $_;
-
- }
- close H;
-
- my $subst = $footstr;
- $subst .= $back if (! $a =~ /index.html/ );
- $file =~ s/$sep/$subst$sep/g ;
- $file =~ s/\.gif/\.$image/g;
- open H, ">$a";
- print H $mw_id;
- print H $file;
- close H;
- }
-}
-
-sub copy_files
-{
- print "copying files\n";
- print `ln -s $depth/out ./docxx` if ( ! -x "docxx" ) ;
- my_system "cp $depth/TODO ./TODO.txt",
- "cp $depth/NEWS ./NEWS.txt",
- "cp ../lelie*gif .";
-}
-
-sub set_images
-{
- for $a (<*.gif>) {
- if ($opt_png) {
- my_system "gif2png -d $a";
- }
- if ($opt_jpeg) {
- my $b=$a;
- $b =~ s/.gif/.jpeg/;
- my_system "cjpeg -o $b $a";
- }
- }
-}
-
-sub docxx_update
-{
- my_system "make -C $depth doc++";
-}
-
-sub do_tar
-{
- print "tarring.\n";
- $files = join (' ', < *.html *.$image *.ps.gz *.txt *.midi docxx/*>);
- my_system
- "-tar vhcf website.tar $files;",
- "gzip -f9 website.tar;";
-}
-sub identify
-{
- print STDERR "make_website 0.1\n";
-
-}
-sub main
-{
- identify;
- GetOptions("jpeg", "gif", "png", "noexamples");
-
- local $image="gif" ;
- $image = "png" if ($opt_png);
- $image = "jpeg" if ($opt_jpeg);
-
- $depth = "../";
- my $cwd;
- chomp($cwd = `pwd`);
- die "need to be in directory Documentation\n" if ( ! ($cwd =~ /Documentation$/));
- get_version;
- set_html_footer;
-
-
- $depth = "../../";
-
- chdir ("out");
- $ENV{"TEXINPUTS"} .= ":$depth/input/:";
- $ENV{"LILYINCLUDE"} = "$depth/input/";
-
-
- gen_html;
- copy_files;
- if (! $opt_noexamples) {
- gen_examples;
- gen_list;
- }
- set_images;
-
- edit_html;
- docxx_update;
- do_tar;
-}
-
-main;
+++ /dev/null
-%{
-MudelaHeader
-
- filename: book.ly
- title:
- description: demonstrate inclusion of Lily output into (La)TeX
-documents
- composers:
- entered-by:
- copyright:
-
- Tested Features: natural width
-EndMudelaHeader
-%}
-\version "0.0.61";
-
-
-
-\score {\melodic { \clef "bass";
- [c8 g e' d'] [e' g e' g]
- [c a f' e'] [f' a f' a]
- }
-
- \paper {
- \output "bach1.out";
- linewidth =-1.0\cm;
- }
-}
-
-\score {\melodic { \clef "bass";
- [c8() g e'() d'] [e'( g e') g]
- [c() a f' ()e'] [f'( a f') a]
- }
- \paper {
- \output "bach2.out";
- linewidth= -1.0\cm;
- }
-}
-
-\score {\melodic { \clef "bass";
- [c8 g( e' d'] [)e' g( e' )g]
- [c a( f' e'] [)f' a( f' )a]
- }
- \paper {
- \output "bach3.out";
- linewidth = -1.0\cm;
- unitspace = 2.0\cm;
- }
-}
+++ /dev/null
-% should be scriptified, probably
-\documentclass{article}
-\input lilyponddefs
-\title{Bach's Cello suites}
-
-\author{A.U.Thor}
-\begin{document}
-\maketitle
-
-\section{Banjo}
-
-It is normal to have some text around various figures. Such as this
-text which is merely to add some weight to the page. In het midden van
-mei/Als de nachtegaals zingen/En de avondglans huwt/aan de morgense schijn.
-Als de schuchtere geur/ van de bloeiende seringen/zich mengt met de
-geur/van de late jasmijn. Op een tochtje langs de rijn.
-
-\def\EndLilyPondOutput{}
-\begin{figure}[h]
- \begin{center}
- \leavevmode
- \input bach1.out
- \caption{original}
- \end{center}
-\end{figure}
-
-Voglio centocinquante gramme di gorgonzola, tre di questi pannini e due bionde
-ragazze con ciocolatta e panna, per favore. Presto! Non posso parlare
-o scrivere la lingua italiana, ma provo.
-
-\section{Hammond-organ and electric guitar}
-
-It is normal to have some text around various figures. Such as this
-text which is merely to add some weight to the page. In het midden van
-mei/Als de nachtegaals zingen/En de avondglans huwt/aan de morgense schijn.
-Als de schuchtere geur/ van de bloeiende seringen/zich mengt met de
-geur/van de late jasmijn. Op een tochtje langs de rijn.
-
-\begin{figure}[h]
- \begin{center}
- \leavevmode
-\input bach2.out
-
- \caption{interpretation 1}
- \end{center}
-\end{figure}
-
-It is normal to have some text around various figures. Such as this
-text which is merely to add some weight to the page. In het midden van
-mei/Als de nachtegaals zingen/En de avondglans huwt/aan de morgense schijn.
-Als de schuchtere geur/ van de bloeiende seringen/zich mengt met de
-geur/van de late jasmijn. Op een tochtje langs de rijn.
-
-\begin{figure}[h]
- \begin{center}
- \leavevmode
-\input bach3.out
-
- \caption{interpretation 2}
- \end{center}
-\end{figure}
-
-Voglio centocinquante gramme di gorgonzola, tre di questi pannini e due bionde
-ragazze con ciocolatta e panna, per favore. Presto! Non posso parlare
-o scrivere la lingua italiana, ma provo.
-
-\end{document}
+++ /dev/null
-/*
- calcideal.cc -- implement Score::calc_idealspacing()
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "idealspacing.hh"
-#include "score.hh"
-#include "p-score.hh"
-#include "paper-def.hh"
-#include "score-column.hh"
-#include "dimen.hh"
-
-
-/**
- generate springs between columns.
-
- TODO: This needs A LOT of rethinking. Spacing should take optical
- effects into account, should be local (measure wide), should check
- smallest divisions.
-
- plus, calc_idealspacing() should be called per line.
- */
-void
-Score::calc_idealspacing()
-{
- iter_top(cols_,i);
-
- for (; i.ok(); i++) {
- if (!i->used_b())
- continue;
-
- PCursor<Score_column*> j(i+1);
-
- if (i->musical_b()) {
- assert(j.ok());
- for (int n=0; n < i->durations.size(); n++) {
- Moment d = i->durations[n];
- Real dist = paper_p_->duration_to_dist(d);
- Real strength = i->durations[0]/i->durations[n];
- assert(strength <= 1.0);
-
- while (j.ok()) {
- if (j->used_b() && j->when() >= d + i->when() )
- break;
- j++;
- }
- Moment delta_desired = j->when() - (d+i->when());
- dist += paper_p_->duration_to_dist(delta_desired);
- if (!j->musical_b())
- dist += 1 PT; // ugh
- pscore_p_->connect(i->pcol_l_, j->pcol_l_, dist, strength);
- }
- } else if (j.ok()) {
- while (!j->used_b())
- j++;
-
- /* attach i to the next column in use. This exists, since
- the last col is breakable, and therefore in use
- */
-
- Moment d = j->when() - i->when();
- Real dist = (d) ? paper_p_->duration_to_dist(d) : 2 PT; // todo
-
- pscore_p_->connect(i->pcol_l_, j->pcol_l_, dist, (d) ? 1.0:1.0);
- }
- // !j.ok() might hold if we're at the last col.
- }
-}
-
-
+++ /dev/null
-#include <math.h>
-#include "linespace.hh"
-#include "p-col.hh"
-#include "debug.hh"
-#include "qlp.hh"
-#include "unionfind.hh"
-#include "idealspacing.hh"
-#include "pointer.tcc"
-
-const Real COLFUDGE=1e-3;
-template class P<Real>; // ugh.
-
-bool
-Spacing_problem::contains(PCol const *w)
-{
- for (int i=0; i< cols.size(); i++)
- if (cols[i].pcol_l_ == w)
- return true;
- return false;
-}
-
-int
-Spacing_problem::col_id(PCol const *w)const
-{
- for (int i=0; i< cols.size(); i++)
- if (cols[i].pcol_l_ == w)
- return i;
- assert(false);
- return -1;
-}
-
-void
-Spacing_problem::OK() const
-{
-#ifndef NDEBUG
- for (int i = 1; i < cols.size(); i++)
- assert(cols[i].rank_i_ > cols[i-1].rank_i_);
- for (int i = 1; i < loose_col_arr_.size(); i++)
- assert(loose_col_arr_[i].rank_i_ > loose_col_arr_[i-1].rank_i_);
-#endif
-}
-
-/**
- Make sure no unconnected columns happen.
- */
-void
-Spacing_problem::handle_loose_cols()
-{
- Union_find connected(cols.size());
- Array<int> fixed;
- for (int i=0; i < ideals.size(); i++) {
- assert(ideals[i]->hooke > 0);
- int l = col_id(ideals[i]->left);
- int r = col_id(ideals[i]->right);
- connected.connect(l,r);
- }
- for (int i = 0; i < cols.size(); i++)
- if (cols[i].fixed())
- fixed.push(i);
- for (int i=1; i < fixed.size(); i++)
- connected.connect(fixed[i-1], fixed[i]);
-
- for (int i = cols.size(); i--; ) {
- if (! connected.equiv(fixed[0], i)) {
- warning("unconnected column: " + String(i));
- loosen_column(i);
- }
- }
- OK();
-}
-
-
-/** Guess a stupid position for loose columns. Put loose columns at
- regular distances from enclosing calced columns */
-void
-Spacing_problem::position_loose_cols(Vector &sol_vec)const
-{
- if (!loose_col_arr_.size())
- return ;
- assert(sol_vec.dim());
- Array<bool> fix_b_arr;
- fix_b_arr.set_size(cols.size() + loose_col_arr_.size());
- Real utter_right_f=-INFTY;
- Real utter_left_f =INFTY;
- for (int i=0; i < loose_col_arr_.size(); i++) {
- fix_b_arr[loose_col_arr_[i].rank_i_] = false;
- }
- for (int i=0; i < cols.size(); i++) {
- int r= cols[i].rank_i_;
- fix_b_arr[r] = true;
- utter_right_f = utter_right_f >? sol_vec(i);
- utter_left_f = utter_left_f <? sol_vec(i);
- }
- Vector v(fix_b_arr.size());
- int j =0;
- int k =0;
- for (int i=0; i < v.dim(); i++) {
- if (fix_b_arr[i]) {
- assert(cols[j].rank_i_ == i);
- v(i) = sol_vec(j++);
- } else {
- Real left_pos_f =
- (j>0) ?sol_vec(j-1) : utter_left_f;
- Real right_pos_f =
- (j < sol_vec.dim()) ? sol_vec(j) : utter_right_f;
- int left_rank = (j>0) ? cols[j-1].rank_i_ : 0;
- int right_rank = (j<sol_vec.dim()) ? cols[j].rank_i_ : sol_vec.dim();
-
- int d_r = right_rank - left_rank;
- Colinfo loose=loose_col_arr_[k++];
- int r = loose.rank_i_ ;
- assert(r > left_rank && r < right_rank);
-
- v(i) = (r - left_rank)*left_pos_f/ d_r +
- (right_rank - r) *right_pos_f /d_r;
- }
- }
- sol_vec = v;
-}
-
-bool
-Spacing_problem::check_constraints(Vector v) const
-{
- int dim=v.dim();
- assert(dim == cols.size());
-
- for (int i=0; i < dim; i++) {
-
- if (cols[i].fixed()&&
- abs(cols[i].fixed_position() - v(i)) > COLFUDGE)
- return false;
-
- if (!i)
- continue;
-
- Real mindist=cols[i-1].minright()
- +cols[i].minleft();
-
- // ugh... compares
- Real dif =v(i) - v(i-1)- mindist;
- bool b = (dif > - COLFUDGE);
-
-
- if (!b)
- return false;
-
- }
- return true;
-}
-
-void
-Spacing_problem::prepare()
-{
- handle_loose_cols();
-}
-
-bool
-Spacing_problem::check_feasible() const
-{
- Vector sol(try_initial_solution());
- return check_constraints(sol);
-}
-
-/// generate a solution which obeys the min distances and fixed positions
-Vector
-Spacing_problem::try_initial_solution() const
-{
- int dim=cols.size();
- Vector initsol(dim);
- for (int i=0; i < dim; i++) {
- if (cols[i].fixed()) {
- initsol(i)=cols[i].fixed_position();
-
- if (i > 0) {
- Real r =initsol(i-1) + cols[i-1].minright();
- if (initsol(i) < r ) {
- warning("overriding fixed position");
- initsol(i) =r;
- }
- }
-
- } else {
- Real mindist=cols[i-1].minright()
- +cols[i].minleft();
- if (mindist < 0.0)
- warning("Excentric column");
- initsol(i)=initsol(i-1)+mindist;
- }
- }
-
- return initsol;
-}
-
-
-
-Vector
-Spacing_problem::find_initial_solution() const
-{
- Vector v(try_initial_solution());
- assert(check_constraints(v));
- return v;
-}
-
-// generate the matrices
-void
-Spacing_problem::make_matrices(Matrix &quad, Vector &lin, Real &c) const
-{
- quad.fill(0);
- lin.fill(0);
- c = 0;
- for (int j=0; j < ideals.size(); j++){
- Idealspacing const*i=ideals[j];
- int l = col_id(i->left);
- int r = col_id(i->right);
-
- quad(r,r) += i->hooke;
- quad(r,l) -= i->hooke;
- quad(l,r) -= i->hooke;
- quad(l,l) += i->hooke;
-
- lin(r) -= i->space*i->hooke;
- lin(l) += i->space*i->hooke;
-
- c += sqr(i->space);
- }
-}
-
-// put the constraints into the LP problem
-void
-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());
- }
- if (j > 0){
- Vector c1(dim);
-
- c1(j)=1.0 ;
- c1(j-1)=-1.0 ;
- lp.add_inequality_cons(c1, cols[j-1].minright() +
- cols[j].minleft());
- }
- }
-}
-
-Array<Real>
-Spacing_problem::solve() const
-{
- assert(check_feasible());
- print();
-
- Mixed_qp lp(cols.size());
- make_matrices(lp.quad,lp.lin, lp.const_term);
- make_constraints(lp);
- Vector start=find_initial_solution();
- Vector sol(lp.solve(start));
- if (!check_constraints(sol)) {
- WARN << "solution doesn't satisfy constraints.\n" ;
- }
- Real energy_f =lp.eval(sol);
- position_loose_cols(sol);
-
- Array<Real> posns(sol);
-
- posns.push(energy_f);
- return posns;
-}
-
-/**
- add one column to the problem.
-*/
-void
-Spacing_problem::add_column(PCol *col, bool fixed, Real fixpos)
-{
- Colinfo c(col,(fixed)? &fixpos : 0);
- if (cols.size())
- c.rank_i_ = cols.top().rank_i_+1;
- else
- c.rank_i_ = 0;
- cols.push(c);
-}
-
-Array<PCol*>
-Spacing_problem::error_pcol_l_arr()const
-{
- Array<PCol*> retval;
- for (int i=0; i< cols.size(); i++)
- if (cols[i].ugh_b_)
- retval.push(cols[i].pcol_l_);
- for (int i=0; i < loose_col_arr_.size(); i++) {
- retval.push(loose_col_arr_[i].pcol_l_);
- }
- return retval;
-}
-
-void
-Spacing_problem::loosen_column(int i)
-{
- Colinfo c=cols.get(i);
- for (int i=0; i < ideals.size(); ) {
- Idealspacing const *i_l =ideals[i];
- if (i_l->left == c.pcol_l_ || i_l->right == c.pcol_l_)
- ideals.del(i);
- else
- i++;
- }
- c.ugh_b_ = true;
-
- int i=0;
- for (; i < loose_col_arr_.size(); i++) {
- if (loose_col_arr_[i].rank_i_ > c.rank_i_)
- break;
- }
- loose_col_arr_.insert(c,i);
-}
-
-void
-Spacing_problem::add_ideal(Idealspacing const *i)
-{
- PCol const *l =i->left;
- PCol const *r= i->right;
-
- if (!contains(l) || !contains(r)) {
- return;
- }
- ideals.push(i);
-}
-
-void
-Spacing_problem::print_ideal(Idealspacing const *id)const
-{
-#ifndef NPRINT
- int l = col_id(id->left);
- int r = col_id(id->right);
-
- mtor << "between " << l <<","<<r<<":" ;
- id->print();
-#endif
-}
-
-void
-Spacing_problem::print() const
-{
-#ifndef NPRINT
- for (int i=0; i < cols.size(); i++) {
- mtor << "col " << i<<' ';
- cols[i].print();
- }
- for (int i=0; i < ideals.size(); i++) {
- print_ideal(ideals[i]);
- }
-#endif
-
-}
-
-/* **************** */
-
-void
-Colinfo::print() const
-{
-#ifndef NPRINT
- mtor << "column { ";
- if (fixed())
- mtor << "fixed at " << fixed_position()<<", ";
- assert(pcol_l_);
- mtor << "[" << minleft() << ", " << minright() << "]";
- mtor <<"}\n";
-#endif
-}
-
-Colinfo::Colinfo(PCol *col_l, Real const *fixed_C)
-{
- if (fixed_C)
- fixpos_p_.set_l(fixed_C);
- ugh_b_ = false;
- pcol_l_ = col_l;
- width = pcol_l_->width();
-}
-
-
-Colinfo::Colinfo()
-{
- ugh_b_ = false;
- pcol_l_ =0;
-}
+++ /dev/null
-/*
- lyric-engraver.cc -- implement Lyric_engraver
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "lyric-engraver.hh"
-#include "musical-request.hh"
-#include "text-item.hh"
-#include "paper-def.hh"
-#include "lookup.hh"
-
-Lyric_engraver::Lyric_engraver()
-{
-}
-
-bool
-Lyric_engraver::do_try_request(Request*r)
-{
- Musical_req * m =r->musical();
- if (!m || ! m->lreq_l())
- return false;
- lreq_arr_.push(m->lreq_l());
-
- return true;
-}
-
-void
-Lyric_engraver::do_process_requests()
-{
- Text_item * last_item_l =0;
- for (int i=0; i < lreq_arr_.size(); i++) {
- Text_item *lp = new Text_item(lreq_arr_[i]->tdef_p_ );
- lp->dir_i_ = -1;
- lp->fat_b_ = true;
- if (last_item_l)
- lp->add_support(last_item_l);
- last_item_l = lp;
- typeset_element(lp);
- }
-}
-
-void
-Lyric_engraver::do_post_move_processing()
-{
- lreq_arr_.set_size(0);
-}
-
-
-IMPLEMENT_STATIC_NAME(Lyric_engraver);
-IMPLEMENT_IS_TYPE_B1(Lyric_engraver,Engraver);
-ADD_THIS_ENGRAVER(Lyric_engraver);
+++ /dev/null
-/*
- midioutput.cc -- implement Midi_output
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>, Jan Nieuwenhuizen <jan@digicash.com>
-*/
-
-#if 0
-#include "time.h"
-#include "main.hh"
-#include "source.hh"
-#include "proto.hh"
-#include "plist.hh"
-#include "string.hh"
-#include "string-convert.hh"
-#include "debug.hh"
-#include "score.hh"
-#include "main.hh"
-#include "midi-stream.hh"
-#include "midi-def.hh"
-#include "midi-output.hh"
-#include "midi-walker.hh"
-#include "midi-item.hh"
-#include "staff-column.hh"
-#include "musical-request.hh"
-#include "p-score.hh"
-
-Midi_output::Midi_output(Score* score_l, Midi_def* midi_l )
-{
- midi_l_ = midi_l;
- score_l_ = score_l;
-
- Midi_stream midi_stream(midi_l->outfile_str_,
- // don-t forget: extra track 0 for tempo/copyright stuff...
- score_l_->staffs_.size() + 1,
- 384 );
- midi_stream_l_ = &midi_stream;
-
- header();
- staffs();
-}
-
-void
-Midi_output::do_staff(Staff*st_l,int track_i)
-{
- Midi_track midi_track( track_i );
-
- // set track name
- Midi_text track_name( Midi_text::TRACK_NAME, "Track " + String_convert::i2dec_str( track_i, 0, '0' ) );
- midi_track.add( Moment( 0 ), &track_name );
-
- // set instrument :-)
- Midi_text instrument_name( Midi_text::INSTRUMENT_NAME, "piano" );
- midi_track.add( Moment( 0 ), &instrument_name );
-
- Midi_tempo midi_tempo( midi_l_->get_tempo_i( Moment( 1, 4 ) ) );
- midi_track.add( Moment( 0 ), &midi_tempo );
-
- for (Midi_walker w (st_l, &midi_track); w.ok(); w++)
- w.do_process_requests();
-
- *midi_stream_l_ << midi_track;
-}
-
-void
-Midi_output::header()
-{
- Midi_track midi_track( 0 );
-
- time_t t = time( 0 );
-
- // perhaps multiple text events?
- String str = String( "Creator: " ) + get_version_str() + "\n";
-
- Midi_text creator( Midi_text::TEXT, str );
- midi_track.add( Moment( 0 ), &creator );
-
- str = "Generated, at ";
- str += ctime( &t );
- str = str.left_str( str.length_i() - 1 );
- str += ",\n";
- Midi_text generate( Midi_text::TEXT, str );
- midi_track.add( Moment( 0 ), &generate );
-
-#if 0 // TODO!
- Source_file* sourcefile_l = source_l_g->sourcefile_l( score_l_->defined_ch_C_ );
- if ( sourcefile_l ) {
- str += "from musical definition: "
- + sourcefile_l->file_line_no_str(score_l_->defined_ch_C_);
-
- }
-#endif
- Midi_text from( Midi_text::TEXT, str );
- midi_track.add( Moment( 0 ), &from );
-
- // set track name
- Midi_text track_name( Midi_text::TRACK_NAME, "Track " + String_convert::i2dec_str( 0, 0, '0' ) );
- midi_track.add( Moment( 0 ), &track_name );
-
- // ugh, to please lily when reparsing mi2mu output.
- // lily currently barfs when no meter present.
- /* are you sure? init is to 4/4 HWN */
- Midi_time midi_time( 4, 4, 18 );
- midi_track.add( Moment( 0.0 ), &midi_time );
-
- *midi_stream_l_ << midi_track;
-}
-
-void
-Midi_output::staffs()
-{
- int track_i = 1;
- for (iter_top(score_l_->staffs_,i); i.ok(); i++)
- do_staff(i, track_i++);
-}
-
-#endif
+++ /dev/null
-#
-# project LilyPond -- the musical typesetter
-# title makefile for yet to add in MF files
-# file ../Makefile
-#
-# Copyright (c) 1997 by
-# Jan Nieuwenhuizen <jan@digicash.com>
-# Han-Wen Nienhuys <hanwen@stack.nl>
-#
-
-# 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 =
-
-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 644 $(MFFILES) $(lily-mfdir)
-
-localuninstall:
- for i in $(MFFILES); do rm -f $(lily-mfdir)/$$i; done
- -rmdir $(lily-mfdir)
+++ /dev/null
-This is from the package MusixTeX, version T.73 (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
- <taupin@lps.u-psud.fr>
-
- 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
+++ /dev/null
-% 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 ("<big braces>");
-%%%%%%%
-
-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 ("<glissandi-elements>");
-%%%%%%%
-% 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 ("<guitar chords>");
-%%%%%%%
-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;
+++ /dev/null
-
-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
+++ /dev/null
-
-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
+++ /dev/null
-
-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
+++ /dev/null
-
-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
+++ /dev/null
-
-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
+++ /dev/null
-
-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
+++ /dev/null
-
-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
+++ /dev/null
-% next changes: - redesigning accidentals
-% - new accents
-% - new gregorian symbols
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% this is musixgen.mf (c)
-%
-% Version T.70 [March 97]
-% - double shap corrected by Julian Gilbey (strange paths)
-%
-% 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 ("<dots & par's>");
-%%%%%%%
-
-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("<accents>");
-%%%%%%%
-
-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 ("<noteheads>");
-%%%%%%%
-
-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+(eps,0))--cycle;
- fill z1..{dir35}z4'{dir-125}..{se}z2r--z2l--(z1-(eps,0))--cycle; % ***
-else :
-%%% but this causes 'strange path' on lower resolutions
- fill z1..{dir-110}z3'{dir30}..{se}z2l--z2r--(z1+(eps,0))--cycle;
- fill z1..{dir20}z4'{dir-120}..{se}z2r--z2l--(z1-(eps,0))--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 ("<flags>");
-%%%%%%%
-
-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("<accidentals>");
-%%%%%%%
-
-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 ("<rests>");
-%%%%%%%
-
-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 ("<clefs>");
-%%%%%%%
-
-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 ("<special signs>");
-%%%%%%%
-
-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 ("<repeat symbols>");
-%%%%%%%
-
-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 ("<trills>");
-%%%%%%%
-
-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 ("<pedal signs>");
-%%%%%%%
-
-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 ("<beam elements>");
-%%%%%%%
-
-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
+++ /dev/null
-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 ("<glissandi-elements>");
-%%%%%%%
-
-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 ("<guitar chords>");
-%%%%%%%
-
-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 ("<several lines>");
-%%%%%%%
-
-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 ("<circles>");
-%%%%%%%
-
-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 ("<piano brackets>");
-%%%%%%%
-
-% 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
+++ /dev/null
-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 ("<glissandi-elements>");
-%%%%%%%
-
-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 ("<guitar chords>");
-%%%%%%%
-
-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 ("<several lines>");
-%%%%%%%
-
-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 ("<circles>");
-%%%%%%%
-
-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 ("<piano brackets>");
-%%%%%%%
-
-% 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
+++ /dev/null
-%(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
+++ /dev/null
-%(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
+++ /dev/null
-
-font_identifier:="xgreg11";
-
-mode_setup;
-
-font_size 10.24pt#;
-
-nhh#:=2.56pt#;
-
-input xgreggen
+++ /dev/null
-
-font_identifier:="xgreg13";
-
-mode_setup;
-
-font_size 12.8pt#;
-
-nhh#:=3.2pt#;
-
-input xgreggen
+++ /dev/null
-
-font_identifier:="xgreg16";
-
-mode_setup;
-
-font_size 16pt#;
-
-nhh#:=4pt#;
-
-input xgreggen
+++ /dev/null
-
-font_identifier:="xgreg20";
-
-mode_setup;
-
-font_size 20pt#;
-nhh#:=5pt#;
-
-
-input xgreggen
+++ /dev/null
-
-font_identifier:="xgreg24";
-
-mode_setup;
-
-font_size 24pt#;
-
-nhh#:=6pt#;
-
-input xgreggen
+++ /dev/null
-
-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
+++ /dev/null
-
-font_identifier:="xgreg29";
-
-mode_setup;
-
-font_size 29pt#;
-
-nhh#:=7.2pt#;
-
-input xgreggen
+++ /dev/null
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% this is xgreggen.mf (c)
-%
-% Version T.67 [January 97]
-%
-
-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.66; 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 ("<noteheads>");
-%%%%%%%
-
-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 ("<clefs>");
-%%%%%%%
-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
+++ /dev/null
-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
+++ /dev/null
-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
+++ /dev/null
-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
+++ /dev/null
-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
+++ /dev/null
-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;
+++ /dev/null
-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;
+++ /dev/null
-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;
+++ /dev/null
-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;
+++ /dev/null
-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;
+++ /dev/null
-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;
+++ /dev/null
-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
+++ /dev/null
-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
-
+++ /dev/null
-font_identifier:="xslhd11";
-mode_setup;
-font_size 10.24pt#;
-input xslhd;
-
+++ /dev/null
-font_identifier:="xslhd13";
-mode_setup;
-font_size 12.8pt#;
-input xslhd;
+++ /dev/null
-font_identifier:="xslhd16";
-mode_setup;
-font_size 16pt#;
-input xslhd;
-
+++ /dev/null
-font_identifier:="xslhd20";
-mode_setup;
-font_size 20pt#;
-input xslhd;
+++ /dev/null
-font_identifier:="xslhd24";
-mode_setup;
-font_size 24pt#;
-input xslhd;
+++ /dev/null
-font_identifier:="xslhd24";
-mode_setup;
-font_size 28.8pt#;
-input xslhd;
+++ /dev/null
-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
+++ /dev/null
-font_identifier:="xslhu11";
-mode_setup;
-font_size 10.24pt#;
-input xslhu.mf
+++ /dev/null
-font_identifier:="xslhu13";
-mode_setup;
-font_size 12.8pt#;
-input xslhu.mf
+++ /dev/null
-font_identifier:="xslhu16";
-mode_setup;
-font_size 16pt#;
-input xslhu.mf
-
+++ /dev/null
-font_identifier:="xslhu20";
-mode_setup;
-font_size 20pt#;
-input xslhu.mf
+++ /dev/null
-font_identifier:="xslhu24";
-mode_setup;
-font_size 24pt#;
-input xslhu.mf
+++ /dev/null
-font_identifier:="xslhu29";
-mode_setup;
-font_size 28.8pt#;
-input xslhu.mf
+++ /dev/null
-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
+++ /dev/null
-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;
+++ /dev/null
-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;
+++ /dev/null
-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;
+++ /dev/null
-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;
+++ /dev/null
-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;
+++ /dev/null
-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;
+++ /dev/null
-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
+++ /dev/null
-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