From: Han-Wen Nienhuys Date: Thu, 8 Jul 1999 10:03:06 +0000 (+0200) Subject: release: 1.1.54 X-Git-Tag: release/1.1.54 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=434da79e9d7684b2b05fa92a6d808d4ea7933046;p=lilypond.git release: 1.1.54 --- diff --git a/Documentation/links.yo b/Documentation/links.yo index 9addb6fc2c..cf57972684 100644 --- a/Documentation/links.yo +++ b/Documentation/links.yo @@ -56,6 +56,9 @@ lurl(http://cgi.debian.org/www-master/debian.org/Packages/stable/tex/lilypond.ht and lurl(ftp://ftp.debian.org/debian/dists/unstable/main/binary-i386/tex/lilypond_*.deb) +Precompiled i386 RedHat RPMS are available from +lurl(http://linux.umbc.edu/software/lilypond/rpms/). + sect(News) diff --git a/Documentation/man/lilypond.yo b/Documentation/man/lilypond.yo index 6c5bcce306..d82b76d5c3 100644 --- a/Documentation/man/lilypond.yo +++ b/Documentation/man/lilypond.yo @@ -136,16 +136,8 @@ Lots of them. See file(TODO) and file(BUGS) manpageseealso() -LilyPond comes with various other documentation files, but most are in -the form of manual pages. They are included in the source -package. Interesting documents include - -description( -dit(MANIFESTO) - Goals of the GNU LilyPond project. -dit(FAQ) - The GNU LilyPond FAQ list -) +LilyPond comes with various other documentation files. They are +included in the source package. A further source for information is the website, which can be found at lurl(http://www.lilypond.org/). The website contains on-line versions diff --git a/Documentation/man/out/lilypond.1 b/Documentation/man/out/lilypond.1 index dad5070306..e6cf0e3d61 100644 --- a/Documentation/man/out/lilypond.1 +++ b/Documentation/man/out/lilypond.1 @@ -107,7 +107,7 @@ Send a description of the LilyPond version you use .IP o Send a description of the bug itself\&. .IP o -Send it to bug-gnu-music@gnu\&.org ; you don\'t have to be subscribed +Send it to bug-gnu-music@gnu\&.org; you don\'t have to be subscribed to this mailinglist\&. .PP .SH "FILES" @@ -133,14 +133,8 @@ Lots of them\&. See \fBTODO\fP and \fBBUGS\fP .PP .SH "SEE ALSO" .PP -LilyPond comes with various other documentation files, but most are in -the form of manual pages\&. They are included in the source -package\&. Interesting documents include -.PP -.IP "MANIFESTO" -Goals of the GNU LilyPond project\&. -.IP "FAQ" -The GNU LilyPond FAQ list +LilyPond comes with various other documentation files\&. They are +included in the source package\&. .PP A further source for information is the website, which can be found at http://www\&.lilypond\&.org/\&. The website contains on-line versions @@ -154,21 +148,21 @@ for information about mirrors\&. For programs which are part of the GNU music project, the following mailing list have been setup: .PP -.IP "info-gnu-music@gnu\&.org " +.IP "info-gnu-music@gnu\&.org" For information on the GNU Music project, to subscribe: send mail with -subject "subscribe" to info-gnu-music-request@gnu\&.org -.IP "help-gnu-music@gnu\&.org " +subject "subscribe" to info-gnu-music-request@gnu\&.org +.IP "help-gnu-music@gnu\&.org" For help with programs from the GNU music project\&. To subscribe: send -mail with subject "subscribe" to help-gnu-music-request@gnu\&.org -.IP "bug-gnu-music@gnu\&.org " +mail with subject "subscribe" to help-gnu-music-request@gnu\&.org +.IP "bug-gnu-music@gnu\&.org" If you have bugreports, you should send them to this list\&. If you want to read all bugreports, you should subscribe to this list\&. To subscribe: send mail with subject "subscribe" to -bug-gnu-music-request@gnu\&.org -.IP "gnu-music-discuss@gnu\&.org " +bug-gnu-music-request@gnu\&.org +.IP "gnu-music-discuss@gnu\&.org" For discussions concerning the GNU Music project, to subscribe: send mail with subject "subscribe" to -gnu-music-discuss-request@gnu\&.org +gnu-music-discuss-request@gnu\&.org .PP Announces of new versions will be sent to info-gnu-music and gnu-music-discuss\&. diff --git a/Documentation/ntweb/index.yo b/Documentation/ntweb/index.yo index 1c7f252385..855b4aef8a 100644 --- a/Documentation/ntweb/index.yo +++ b/Documentation/ntweb/index.yo @@ -18,67 +18,12 @@ clearpage() subsect(NEWS) label(news) -The FAT16, FAT32, and NTFS file system problems have been corrected. -I have tested various installations that are known to be operational. -The following configurations that have been tested. - -description( - dit(Windows NT) - description( - dit(Installed on NTFS) - itemize( - it()Runs from NTFS partion - it()Runs from FAT16 partion - ) - dit(Installed on FAT16) - itemize( - it()Runs from NTFS partion - it()Runs from FAT16 partion - ) - ) -) - -description( - dit(Windows 95) - description( - dit(Installed on FAT16) - itemize( - it()Runs from FAT16 partion - it()Runs from FAT32 partion - ) - dit(Installed on FAT32) - itemize( - it()Runs from FAT16 partion - it()Runs from FAT32 partion - ) - ) -) - -The installer was created with -url(CreateInstall)(http://www.gentee.com/). This is a shareware -application that has capabilities close to the high dollar installers -bf(InstallShield), bf(Install Vise), and bf(WiseInstaller). -bf(CreateInstall) does cost $38 to register which is probably going to -be frowned upon, but I was unable to find a freeware install builder -that was suitable. The self extracting distribution currently: - -itemize( - it() Installs the lilypond distribution on any valid file system. - it() Optionally creates a em(Lilypond) shortcut group on your start - menu with the following shortcuts. - itemize( - it() bf(lilyshell) - it() bf(uninstall) - ) - it() Allows unistall through the Add/Remove Program interface on the - control panel. - it() The bf(lilyshell) uses the /E and /K switches to extend the - environment size and initialize the shell environment. - it() It has the look and feel of a real Windows installer -) - -The bf(lilyshell) shortcut initializes the environment so you can -generate music from a MSDOS prompt with commands like: +I have made my first attempt at distributing lilypond as a self +extracting executable for Windows NT 4.0 and Windows 95. The +executable will extract the distribution in the directory specified by +the user and create em(lilypond-@TOPLEVEL_VERSION@\lily.bat). This +batch file initializes the LilyPond environment and fires up a Command +Prompt. From this Command Prompt you may run: itemize( it()ly2dvi @@ -88,13 +33,6 @@ itemize( it()mi2mu ) -If you are upgrading from a previous version of lilypond you will most -likely need to flush your font cache. I generally just toss -file(D:\localtexmf\fonts\tfm\public\ehrhardt) and -file(D:\localtexmf\fonts\pk\ljfour\public\ehrhardt) in the Recyle -Bin. Your local font directory may be different, please refer to your -local installation of code(TeX). - I have also converted the Manual Pages for the above tools to HTML for easy browsing. This release has been tested on Windows NT 4.0sp3 and Windows 95 and found to be operational. If you have any troubles and @@ -139,10 +77,7 @@ clearpage() subsect(Download) label(download) itemize( - it()Windows 95 - url(lilypond-@TOPLEVEL_VERSION@-95)(lilypond-@TOPLEVEL_VERSION@-95.exe) - it()Windows NT 4.0 - url(lilypond-@TOPLEVEL_VERSION@-nt)(lilypond-@TOPLEVEL_VERSION@-nt.exe) + it()url(lilypond-@TOPLEVEL_VERSION@)(lily1123jbr1.exe) ) link(Back to top)(contents) @@ -192,7 +127,11 @@ subsect(Running LilyPond) label(running) itemize( it()Take a look at url(angels.ly)(angels.ly) it()Save angels.ly to your local disk - it()Select the bf(lilyshell) shortcut from the em(Lilypond) group nl() + it()Execute lilypond-@TOPLEVEL_VERSION@\lily.bat nl() +NOTE: If you get an em(out of environment memory error), simply increase +the environment memory by selecting +em(lilypond-@TOPLEVEL_VERSION@\lily.bat) Properties/Memory and increase +the available environment memory to 1024. it() From a LilyPond Command Prompt run: nl() bf(ly2dvi angels.ly) nl() bf(dvips angels.dvi) nl() diff --git a/Documentation/tex/engraving.bib b/Documentation/tex/engraving.bib index ab4099acce..bfa65238d3 100644 --- a/Documentation/tex/engraving.bib +++ b/Documentation/tex/engraving.bib @@ -79,6 +79,16 @@ work for music notation issues as one is likely to get. MB}, isbn = {ISBN 3-7957-2886-x}, } +{willemze, + note = {A comprehensive overview of music theory; +the (Dutch) authority on general music theory}, + year = {1964-1993}, + title = {Algemene muziekleer}, + author = {Theo Willemze}, + publisher = {Aula, Het Spectrum}, + address = {Utrecht}, + isbn = {ISBN 90-274-1817-9}, +} @Book {hader48, diff --git a/Documentation/tex/lilypond-regtest.doc b/Documentation/tex/lilypond-regtest.doc index 4ba4489be8..0dc04fde80 100644 --- a/Documentation/tex/lilypond-regtest.doc +++ b/Documentation/tex/lilypond-regtest.doc @@ -25,7 +25,9 @@ you must create a special context called Thread. \mudelafile{noteheadstyle.ly} Multiple measure rests do not collide with barlines and clefs. They -are not expanded when you set Score.SkipBars +are not expanded when you set \verb+Score.SkipBars+. Although the +multi-measure-rest is a Spanner, minimum distances are set to keep it +colliding from barlines. \mudelafile{multi-measure-rest.ly} @@ -124,7 +126,9 @@ middle voices are horizontally shifted in a limited number of cases. \mudelafile{collisions.ly} The number of stafflines of a staff can be set with the property -numberOfStaffLines. Ledger lines both on note heads and rests are adjusted. +numberOfStaffLines. Ledger lines both on note heads and rests are +adjusted. Barlines also are adjusted. + \mudelafile{number-staff-lines.fly} diff --git a/Documentation/tex/refman.yo b/Documentation/tex/refman.yo index a6d9cce778..6328f112b1 100644 --- a/Documentation/tex/refman.yo +++ b/Documentation/tex/refman.yo @@ -231,7 +231,7 @@ to an identifier whose name is the same as the name of a keyword. The following words are keywords: verb(accepts duration midi relative textscript alternative font mm remove time -bar grouping musicalpitch repeat times +bar musicalpitch repeat times cadenza header name scm translator chordmodifiers in notenames scmfile transpose chords include notes score type @@ -924,14 +924,6 @@ In order to help with error checking, you can insert bar markers in your music by typing code(|). Whenever LilyPond encounters a code(|) that doesn't fall at a measure boundary, she prints a warning message. -Rhythmic grouping is a concept closely associated with this. -A default grouping is selected for the chosen time signature. -The default consists of combinations of 2 and 3 beats with as many -groups of 3 as possible, and the groups of 3 coming first. For -example, 4/4 is divided into 2+2 and 8/8 is divided into 3+3+2. This -default grouping can be changed using the \grouping keyword which -takes a list of durations to specify the grouping. - COMMENT( sect(Composition: forming bigger structures) @@ -1155,11 +1147,6 @@ var(dotcount). dit(code(\font) var(string)) Internal keyword. Used within code(\paper) to specify the font. -dit(code(\grouping) var(durationseq)code(;)) Sets the metric structure of -the measure. Each argument specifies the duration of one metric unit. -For example, code(\duration 16*5;) specifies a grouping of five beats -together in 5/16 time. The default grouping is to have as many groups -of 3 as possible followed by groups of two. dit(code(\header) code({) var(key1) = var(val1); var(key2) = var(val2); ... code(})) Specifies information about the music. A header should appear at the diff --git a/Documentation/tex/tutorial.yo b/Documentation/tex/tutorial.yo index 883447e72e..d160e7abc8 100644 --- a/Documentation/tex/tutorial.yo +++ b/Documentation/tex/tutorial.yo @@ -97,7 +97,7 @@ mudela(verbatim)( \key g; \time 3/4; - \repeat 2 { + \repeat "semi" 2 { d4 g,8 a b c d4 g, g | e'4 c8 d e fis g4 g, g | c4 d8( )c b a( )b4 c8 b a g | @@ -796,25 +796,6 @@ Example: [d'8 dis'] e' c''4 e'8 c''4 ) -dit(code(\grouping) var(durationslist)) sets the metric structure of the measure. - Its effect can best be shown by an example: - mudela(fragment,verbatim,center)( - \time 5/16; - \grouping 16*3 16*2; - [c'8 c'16 c'8] - \grouping 16*2 16*3; - [c'8 c'16 c'8] - \grouping 16*5 ; - [c'8 c'16 c'8] - ) - -In practice, you won't be needing this command often: the -grouping is switched automatically when you issue a code(\time) -command. It is set to a combination of groups -of 2 and 3 beats, with as many groups of -3 as possible (in other words: 4/4 is divided in two times two beats -(2+2), 8/8 in 3+3+2) -) The commands described above aren't really music, but they can best be thought as as notes with no duration. Since they are grammatically diff --git a/Documentation/topdocs/INSTALL.yo b/Documentation/topdocs/INSTALL.yo index 0c9e54d424..e4d9dc3412 100644 --- a/Documentation/topdocs/INSTALL.yo +++ b/Documentation/topdocs/INSTALL.yo @@ -100,19 +100,18 @@ conversion tools. itemize( it()xpmtoppm (from the Portable Bitmap Utilities) (For RedHat Linux users: it is included within the package libgr-progs). -it()Bib2html lurl(http://pertsserver.cs.uiuc.edu/~hull/bib2html.) - Which, in turn depends on man2html for proper installation. -man2html can be had from lurl(http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05). + the original is at +lurl(ftp://ftp.x.org/contrib/utilities/netpbm-1mar1994.p1.tar.gz) - TeTeX users should not forget to rerun texhash. -) +it()pnmtopng, which is also in libgr-progs for RedHat. The original is +at +lurl(ftp://swrinde.nde.swri.edu/pub/png/applications/pnmtopng-2.37.2.tar.gz).i -Building the website requires pnmtopng. The version of file(pnmtopng) -that is distributed with RedHat 5.1 and 5.2 contains a bug: pnmtopng -is dynamically linked to the wrong version of libpng. Recompile it -from source, and make sure that the pnmtopng binary is linked -statically to the libpng that is included in libgr. RedHat 6.0 does -not have this problem. +The version of file(pnmtopng) that is distributed with RedHat 5.1 and +5.2 contains a bug: pnmtopng is dynamically linked to the wrong +version of libpng. Recompile it from source, and make sure that the +pnmtopng binary is linked statically to the libpng that is included in +libgr. RedHat 6.0 does not have this problem. verb( tar xzf libgr-2.0.13.tar.gz make @@ -123,6 +122,17 @@ verb( tar xzf libgr-2.0.13.tar.gz You can then install the new pnmtopng into /usr/local/bin/ +it()Bib2html lurl(http://pertsserver.cs.uiuc.edu/~hull/bib2html.) + Which, in turn depends on man2html for proper installation. +man2html can be had from lurl(http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05). + + TeTeX users should not forget to rerun texhash. +) + +You also have to install file(buildscripts/out/ps-to-gifs) in a +directory that is in the path. + + sect(CONFIGURING and COMPILING) to install GNU LilyPond, simply type: @@ -292,7 +302,7 @@ verb( rpm -i /usr/src/redhat/RPMS/i386/lilypond-x.y.z ) -Precompiled i386 eRedHat RPMS are available from +Precompiled i386 RedHat RPMS are available from lurl(http://linux.umbc.edu/software/lilypond/rpms/). diff --git a/Documentation/topdocs/index.yo b/Documentation/topdocs/index.yo index 804d96aeb9..7cc1afc560 100644 --- a/Documentation/topdocs/index.yo +++ b/Documentation/topdocs/index.yo @@ -71,7 +71,7 @@ it()url(FAQ)(DOEXPAND(docdir)/DOEXPAND(outdir)/faq.html) it()url(Mailing Lists)(DOEXPAND(docdir)/DOEXPAND(outdir)/mail.html) it()url(All of the LilyPond documentation)(DOEXPAND(docdir)/DOEXPAND(outdir)/index.html) it()url(The DOC++ documentation of the C++ sources.)(DOEXPAND(depth)/docxx/index.html) -it()url(The installation instructions)(DOEXPAND(tops)/INSTALL.html) +it()url(The installation instructions)(INSTALL.html) ) nsect(Sites) diff --git a/INSTALL.txt b/INSTALL.txt index 2b68d258c5..d17023348f 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -109,18 +109,18 @@ conversion tools. o xpmtoppm (from the Portable Bitmap Utilities) (For RedHat Linux users: it is included within the package libgr-progs). -o Bib2html http://pertsserver.cs.uiuc.edu/~hull/bib2html. - Which, in turn depends on man2html for proper installation. -man2html can be had from http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05. + the original is at +ftp://ftp.x.org/contrib/utilities/netpbm-1mar1994.p1.tar.gz - TeTeX users should not forget to rerun texhash. +o pnmtopng, which is also in libgr-progs for RedHat. The original is +at +ftp://swrinde.nde.swri.edu/pub/png/applications/pnmtopng-2.37.2.tar.gz.i -Building the website requires pnmtopng. The version of pnmtopng -that is distributed with RedHat 5.1 and 5.2 contains a bug: pnmtopng -is dynamically linked to the wrong version of libpng. Recompile it -from source, and make sure that the pnmtopng binary is linked -statically to the libpng that is included in libgr. RedHat 6.0 does -not have this problem. +The version of pnmtopng that is distributed with RedHat 5.1 and +5.2 contains a bug: pnmtopng is dynamically linked to the wrong +version of libpng. Recompile it from source, and make sure that the +pnmtopng binary is linked statically to the libpng that is included in +libgr. RedHat 6.0 does not have this problem. tar xzf libgr-2.0.13.tar.gz make @@ -130,6 +130,15 @@ not have this problem. You can then install the new pnmtopng into /usr/local/bin/ +o Bib2html http://pertsserver.cs.uiuc.edu/~hull/bib2html. + Which, in turn depends on man2html for proper installation. +man2html can be had from http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05. + + TeTeX users should not forget to rerun texhash. + +You also have to install buildscripts/out/ps-to-gifs in a +directory that is in the path. + 6: CONFIGURING and COMPILING to install GNU LilyPond, simply type: @@ -271,13 +280,13 @@ You can make the rpm by issuing rpm -tb lilypond-x.y.z.tar.gz rpm -i /usr/src/redhat/RPMS/i386/lilypond-x.y.z -Precompiled i386 eRedHat RPMS are available from +Precompiled i386 RedHat RPMS are available from http://linux.umbc.edu/software/lilypond/rpms/. 10: DEBIAN GNU/LINUX A Debian package is also available; contact Anthony Fok -. The build scripts are in the subdirectory +foka@debian.org. The build scripts are in the subdirectory debian/. 11: WINDOWS NT/95 diff --git a/NEWS b/NEWS index ec7799fdb9..b17aa62697 100644 --- a/NEWS +++ b/NEWS @@ -1,23 +1,50 @@ ---- ../lilypond-1.1.53.jbr1/NEWS Wed Jul 07 23:47:42 1999 -++ b/NEWS Thu Jul 08 17:07:30 1999 -@@ -1,3 +1,6 @@ -pl 53.jbr2 - - Documentation/ntweb/index.html: Updated nt distribution web page - - pl 53.jbr1 - - scripts/ly2dvi.py: A fix for the multitude of file systems supported - by windows. As long as the paths that the cygwin apps use are--- ../lilypond-1.1.53/NEWS Mon Jul 05 05:56:28 1999 -++ b/NEWS Wed Jul 07 23:47:42 1999 -@@ -1,3 +1,9 @@ pl 53.jbr1 - scripts/ly2dvi.py: A fix for the multitude of file systems supported by windows. As long as the paths that the cygwin apps use are UNC style and the paths that the native windows apps use are DOS style everybody is happy. I add quick and dirty unc2dos function to facilitate this approach. - - pl 52.jcn3 - - bf: mi2mu: midi without keypl 53.gp1 + +pl 53.hwn1 + - bf mudela-book. + - better min distance for multi measure rests. + - junk ATOM_SMOB + - control tuplet gap size from paper. + - bf: output header as PS strings for PS out. + - bf: cached-fontname + - control volta height from paper block. + +pl 53.jcn5 + - \rhythm-ified and text bfs: standchen.ly + - walk rhythm through *_iterator::next_music_l () + +pl 53.jcn4 + - more abc2ly hacking, including lyrics and \rhythm + - bfs: \rhythm + - \rhythm-ified input/twinkle.ly + +pl 53.jcn3 + - put rhythm A on pitches/lyrics B: \rhythm MUSICA MUSICB + input/test/rhythm-melody.fly + input/test/rhythm-lyrics.fly + - syntax changes: +o * dot-only duration dropped: use c4 c4. iso now invalid: c4 c. + * chords: optional_dot now mandatory: + \chords { c-1.2.3 } iso now invalid: \chords { c-1 2 3 } + * @c@ (notemode_chords) syntax dropped. rather use: + \notes { c d \chords { e f } } + +pl 53.jcn2 + - \property graceFraction: part of next note taken-up by grace(s). + - Note_performer: add moments for delayed notes, + fine for single grace notes: hear gnossienne-4.ly + +pl 53.jcn1 + - grace performance + - fixed tie-performance + - bf: abe + +pl 53.gp1 - added Hyphen-engraver, Hyphen-spanner ************ pl 52.jcn3 @@ -41,7 +68,8 @@ pl 52.hwn2 * beam over barlines * non-fitting stems handled gracefully (eg. [c8 c4 c8] ) - junked rhythmic grouping, \grouping and all associated bits. - - bf: do try_visibility_lambda for nonbreakable items as well (fixes \nobreak on barline) + - bf: do try_visibility_lambda for nonbreakable items as well + (fixes \nobreak on barline) - bf: Cons_list::truncate() pl 52.hwn1 @@ -56,7 +84,6 @@ pl 52.mb3 - Added barSize property. Junked barsize variable. ************ -i pl 51.uu2 - grace note flags, move Lookup::flag into Stem - faq updates: doc++, Matt's page @@ -597,7 +624,7 @@ pl 31.hwn3 - Span_bar bugfix (there you go, Mats). - bf: Score copy ctor (-> bf declaring score) - new Tie behavior: only tie identical pitches, switchable with -oldTieBehavior + oldTieBehavior - junked cautionary_b_ from Musical_pitch pl 32.jcn1 @@ -1320,7 +1347,7 @@ pl5.jcn4 pl5.jcn3 - website fixes -opl5.jcn2 +pl5.jcn2 - extender-*, see input/test/extender.ly - bf: half-beam length (urg) - fixes: standchen, star @@ -1550,7 +1577,7 @@ pl 17.jcn3 - tex output support - all output through scheme - option: f, output-format=X -o - geile placebox + - geile placebox - mf/mfplain.ini pl 17.jcn2 diff --git a/TODO b/TODO index 776239db00..569bfdb5b8 100644 --- a/TODO +++ b/TODO @@ -12,11 +12,9 @@ Grep for TODO and ugh/ugr/urg. . * indent = 0.0 with linewidth=-1.0 . * music ending in grace notes. . * PostScript -. * header for PS enteredby = "bla " . * ps/lily.ps see comments. . * didot / big point. . * fix singleStaffBracket -. * declare performers in \midi . * check EGCS version . * input/test/stem-spacing.ly: 12/4 touches first note . * \shape 1st dim skipped? @@ -24,14 +22,8 @@ Grep for TODO and ugh/ugr/urg. . * We need feta-din*.mf files for more sizes than 10. . * fix dynamics decently, ie. use kerning & ligatures. . * dots & rest collisions? -. * mudela-book.py -. * fix \mudelafile{} to have decent functionality -. * P.P.S. It can be cool in mudela-book to distinguish in -pre,postMudelaExample, whether MudelaExample is epsed or not: ( if -this fragment is floating eps, than 1, otherwise 2). say -preMudelaExample[eps]{}, and change it in document body sometimes. -. * use less RE's -. * junk _ in lyric mode for " " +. * behavior of "that the obvious solution +\lyrics { foo1*4 __ _ }" is unintuitive. . * Lyrics and scripts collide. . * a note with a circle after it, meaning: @@ -72,25 +64,7 @@ preMudelaExample[eps]{}, and change it in document body sometimes. . * Remove non-free software links. . * Remove meta article LilyPond. . * break priority setting from SCM. -. * Gade score -. * remove [] in favour of auto-beamer . * hangOnClef with non-breakable clefs. -. * Aha, the problem is the new TeX code generation for changing fonts. -> (The explanation below is mostly intended for Han-Wen and Jan) -> Before, the font was changed with macros declared separately for -> pure TeX and LaTeX, but now all the fonts are declared directly in -> the generated code using the low-level TeX commands. This circumvents -> the fontencoding mechanism of LaTeX and is a potential source of -> problems also for us users of the Latin-1 character set. -> I think it still works since the inputencoding latin1 is -> declared by ly2dvi, but it still means that e.g. an o with -> umlaut is typeset as a combination of the two symbols 'o' and -> 'umlaut' instead of as a single character, as would be the case -> if fontencoding OT1 had been used. This shouldn't give any -> difference in layout, though. One of the main argument for using -> fontencoding OT1 is for the hyphenation mechanism to work, an -> argument that's clearly irrelevant in our application. Yet we -> see the problem for August. . * Abstraction for engravers: . * make "in-between" engraver (Tie, Extender) . * make wide_spanner_engraver (line_group_spanner, staff_symbol) @@ -316,11 +290,23 @@ touching it. . * PS output . * optimal pagebreaking. -. * Unicode support? -> man 7 unicode -. * 16 bit Strings -. * -u switch -. * detect of 16/8 bit files -. * examples to go with it. +. * internationalisation for input. +. * Unicode support? -> man 7 unicode +. * (The explanation below is mostly intended for Han-Wen and Jan) +> Before, the font was changed with macros declared separately for +> pure TeX and LaTeX, but now all the fonts are declared directly in +> the generated code using the low-level TeX commands. This circumvents +> the fontencoding mechanism of LaTeX and is a potential source of +> problems also for us users of the Latin-1 character set. +> I think it still works since the inputencoding latin1 is +> declared by ly2dvi, but it still means that e.g. an o with +> umlaut is typeset as a combination of the two symbols 'o' and +> 'umlaut' instead of as a single character, as would be the case +> if fontencoding OT1 had been used. This shouldn't give any +> difference in layout, though. One of the main argument for using +> fontencoding OT1 is for the hyphenation mechanism to work, an +> argument that's clearly irrelevant in our application. Yet we +> see the problem for August. . * \header . * output header info to MIDI too. @@ -352,7 +338,6 @@ languages: . * SMDL? . * add to MIDI output: -. * tied notes for MIDI . * sharp / flat on trills (in MIDI ??) . * tempo change . * ornaments (and trills?) @@ -456,7 +441,6 @@ hesitate to ask. . * specify number of lines .* INPUTLANGUAGE -. * \rhythms 4 16 16 16 16; c c c c c -> c4 c16 etc. . * convention for slurs vs. phrasing marks. . * Language: . * \translator -> ? @@ -486,8 +470,6 @@ hesitate to ask. . * fix confusing naming in Engraver vs Engraver_group_engraver (context) -. * progress when creating MIDI elts. - . * A range for context errors (eg. mark both { and }. ) . * lyric in staff (sharpsharp in staff, text below) diff --git a/VERSION b/VERSION index 8293acdf2f..ceae9e6172 100644 --- a/VERSION +++ b/VERSION @@ -1,8 +1,8 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=1 -PATCH_LEVEL=53 -MY_PATCH_LEVEL=jbr2 +PATCH_LEVEL=54 +MY_PATCH_LEVEL= # use the above to send patches: MY_PATCH_LEVEL is always empty for a # released version. diff --git a/aclocal.m4 b/aclocal.m4 index caee78ed68..602d77213a 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -2,8 +2,6 @@ dnl WARNING WARNING WARNING WARNING dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4 dnl WARNING WARNING WARNING WARNING dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4 -dnl WARNING WARNING WARNING WARNING -dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4 dnl aclocal.m4 -*-shell-script-*- dnl StepMake subroutines for configure.in diff --git a/input/bugs/rhythm.ly b/input/bugs/rhythm.ly new file mode 100644 index 0000000000..e9fdd621f0 --- /dev/null +++ b/input/bugs/rhythm.ly @@ -0,0 +1,19 @@ +text = \lyrics { four4 syl- la ble } +two = \notes { c4. c8 } +fourn = \notes { c4. c8 c4. c8 } +fiven = \notes { [c16 c16 \bar ""; <{ c8 } { c16 c16 }> c8 } + +\score { \notes{ + \context Staff = SA + < \context Staff { \two } + \context Lyrics { \rhythm \fourn \text } + > + < \context Staff { \two } + \context Lyrics { \rhythm \two \text } + > + < \context Staff { \fiven } + \context Lyrics { \rhythm \fiven \text } + > + +} +} diff --git a/input/bugs/sv.ly b/input/bugs/sv.ly deleted file mode 100644 index a3856eb934..0000000000 --- a/input/bugs/sv.ly +++ /dev/null @@ -1,20 +0,0 @@ - -% -% Jan -> dit is Auto_B_E bug, niet grouping bug. -% - -\score{ - \notes{ \time 13/8; - % \property Voice.beamAutoBegin = "1/8" - % \property Voice.beamAutoEnd = "3/8" - \property Voice.beamAutoEnd = "10/8" - \property Voice."beamAutoEnd_16" = "1/8" - \property Voice.beamAutoBegin = "1/4" - - a8 a a a16 a16 a16 a16 a16 a16 a8 a a a a a - a a a a a a a a a a a a a - a8 a8 a8 a8 a8 a a a a a a a a - } - \paper{ linewidth = -1.;} -} - diff --git a/input/test/chord-table.ly b/input/test/chord-table.ly index 907782915f..c2b30c2c92 100644 --- a/input/test/chord-table.ly +++ b/input/test/chord-table.ly @@ -5,7 +5,7 @@ enteredby = "jcn"; } tab = \notes\transpose c'''\chords{ - c1 c-m c-4 c-m4 c-5+ c-5- c-m5- c-5-.5+ c-6\break %c-m6\break + c1 c-m c-4 c-m.4 c-5+ c-5- c-m.5- c-5-.5+ c-6\break %c-m6\break } \score{ diff --git a/input/test/hyphen.ly b/input/test/hyphen.ly index 149b02d9b4..21c2f4de6f 100644 --- a/input/test/hyphen.ly +++ b/input/test/hyphen.ly @@ -5,7 +5,7 @@ > } -\version "1.0.21"; +\version "1.1.53"; diff --git a/input/test/notemode-chords.ly b/input/test/notemode-chords.ly index 5b26d4c1c2..a096409a42 100644 --- a/input/test/notemode-chords.ly +++ b/input/test/notemode-chords.ly @@ -2,7 +2,10 @@ \score{ \notes \transpose c''{ - @c1@ @c-7@ @c-7^5@-1-3 +% 1.1.53: @x@ syntax dropped +% if you want fingering, write chord explicitily; eg < c1-1 e-2 g-3 > +% @c1@ @c-7@ @c-7^5@-1-3 + \chords { c1 c-7 c-7^5 } } } diff --git a/input/test/perform-grace.fly b/input/test/perform-grace.fly new file mode 100644 index 0000000000..c24ded8cb8 --- /dev/null +++ b/input/test/perform-grace.fly @@ -0,0 +1,5 @@ +\context Voice=VoiceOne +\property Voice.graceFraction = "1/4" +\grace c8 d4 d d d d +\property Voice.graceFraction = "1/2" +\grace { e16 f e f } d4 d d d d diff --git a/input/test/perform-tie.fly b/input/test/perform-tie.fly index 484f1368c5..5bd1eca9aa 100644 --- a/input/test/perform-tie.fly +++ b/input/test/perform-tie.fly @@ -1,2 +1,2 @@ -c8 c c ~ c c c c ~ c ~ c ~ c ~ c c c +c8 c c ~ c c c c ~ c ~ c ~ c c c %\grace { d16 c16 d16 } c8 diff --git a/input/test/rhythm-lyric.ly b/input/test/rhythm-lyric.ly new file mode 100644 index 0000000000..b9413ec88f --- /dev/null +++ b/input/test/rhythm-lyric.ly @@ -0,0 +1,12 @@ +text = \lyrics { Feel the rhy- thm } + +melody = \notes { + e4. d8 e4. c8 +} + +\score{ + < + \context Voice \notes\relative c'' \melody + \context Lyrics \rhythm \melody \text + > +} diff --git a/input/test/rhythm-melody.fly b/input/test/rhythm-melody.fly new file mode 100644 index 0000000000..7365625e35 --- /dev/null +++ b/input/test/rhythm-melody.fly @@ -0,0 +1 @@ +\rhythm { 4. 8 8. 16 } { c'' d e f } diff --git a/input/test/rhythm.ly b/input/test/rhythm.ly new file mode 100644 index 0000000000..c4125e26a3 --- /dev/null +++ b/input/test/rhythm.ly @@ -0,0 +1,5 @@ +\score{ + \context Voice \notes\relative c''{ + c4. 8 4. 8 + } +} diff --git a/input/test/tup.ly b/input/test/tup.ly index 6a0e13cb09..e532ed3030 100644 --- a/input/test/tup.ly +++ b/input/test/tup.ly @@ -1,5 +1,5 @@ \score{ - \notes \context Voice { + \notes \context Voice \relative c'' { \times 2/3 { \times 2/3 { a8 b c} c } \times 3/4 { c4 c4 c4 c4 } \time 6/8; diff --git a/input/test/tuplet.fly b/input/test/tuplet.fly index 92ac4d4739..d9962ad89a 100644 --- a/input/test/tuplet.fly +++ b/input/test/tuplet.fly @@ -18,7 +18,7 @@ \property Voice.tupletDirection = \down \property Voice.tupletVisibility = 0 -\times2/3{c,4^"tupletDirection = \\textbackslash{}down" d e} +\times2/3{c,4^"tupletDirection = down" d e} \times2/3{[[f8 g a]]} \times2/3{b16 c d} c8 | \property Voice.tupletVisibility = 1 \times2/3{c,4 d e} \times2/3{[f8 g a]} \times2/3{b16 c d} c8 | @@ -31,7 +31,7 @@ \property Voice.tupletDirection = \up \property Voice.tupletVisibility = 0 -\times2/3{c,4^"tupletDirection = \\textbackslash{}up" d e} +\times2/3{c,4^"tupletDirection = up" d e} \times2/3{[[f8 g a]]} \times2/3{b16 c d} c8 | \property Voice.tupletVisibility = 1 \times2/3{c,4 d e} \times2/3{[f8 g a]} \times2/3{b16 c d} c8 | diff --git a/input/twinkle.ly b/input/twinkle.ly index 1f5c15fa1b..168558215f 100644 --- a/input/twinkle.ly +++ b/input/twinkle.ly @@ -16,7 +16,8 @@ traditional song in various languages. %} %{ -Tested Features: lyrics, interleaving lyrics and staffs, repeats +Tested Features: lyrics, interleaving lyrics and staffs, repeats, + auto beaming, applying new rhythm on lyrics %} \version "1.1.52"; @@ -52,12 +53,12 @@ global = \notes { } tekst = \lyrics{ - Al-4 tijd is Kort- jak- je ziek,2 - midden4 "in de" week maar "'s zon-" dags niet.2 - "'s Zon-"4 dags gaat ze naar de kerk,2 - met4 een boek vol zil- ver werk.2 - Al-4 tijd is Kort- jak- je ziek,2 - mid-8 den in de week4 maar "'s zon-" dags niet.2 + Al- tijd is Kort- jak- je ziek, " " + midden "in de" week maar "'s zon-" dags " " niet. + "'s Zon-" dags gaat ze naar de kerk, " " + met een boek vol zil- ver " " werk. " " + Al- tijd is Kort- jak- je ziek, " " + midden "in de" week maar "'s zon-" dags " " niet. } @@ -67,64 +68,73 @@ tekst. Mogen wij ook af en toe ergens op afgeven? %} hegedraagjetekst = \lyrics{ - Al-4 tijd zuigt Bill Gates mijn piek,2 - "\TeX"4 is slecht- ser dan mu- ziek.2 - "'s Zon-"4 dags gaat het door een raam,2 - Weet4 dat ik me er- voor schaam.2 - Al-4 tijd zuigt Bill Gates mijn piek,2 - "\TeX"4 is slecht- ser dan mu- ziek.2 + Al- tijd zuigt Bill Gates mijn piek, " " + "\TeX" is slecht- ser dan mu- " " ziek. + "'s Zon-" dags gaat het door een raam, " " + Weet dat ik me er- voor " " schaam. + Al- tijd zuigt Bill Gates mijn piek, " " + "\TeX" is slecht- ser dan mu- " " ziek. } texte = \lyrics{ \property Lyrics . textStyle" = "italic" % \property Lyrics . textStyle" = "roman" - Ah!4 vous dir- ai- je ma- man2 - Ce4 qui cau- se mon tour- ment2 - Pa-4 pa veut que je rai- son- ne - Comm' u- ne gran- de per- son- ne - Moi je dis que les bon- bons2 - Va-4 lent mieux que la rai- son2 + Ah! vous dir- ai- je ma- man " " + Ce qui cau- se mon tour- " " ment + Pa- pa veut que je rai- son- ne + Comm' u- ne gran- de per- " " son- ne + Moi je dis que les bon- bons " " + Va- lent mieux que la rai- " " son } texti = \lyrics{ \property "Lyrics"."textStyle" = "roman" - Twin-4 kle, twin- kle, lit- tle star,2 - How4 I won- der what you are.2 - Up4 a- bove the world so high,2 - Like4 a dia- mond in the sky.2 - Twin-4 kle, twin- kle, lit- tle star,2 - How4 I won- der what you are!2 + Twin- kle, twin- kle, lit- tle star, " " + How I won- der what you " " are. + Up a- bove the world so high, " " + Like a dia- mond in the " " sky. " " + Twin- kle, twin- kle, lit- tle star, " " + How I won- der what you " " are! } textii = \lyrics{ - When4 the bla- zing sun is gone,2 - When4 he no- thing shines up- on,2 - Then4 you show your lit- tle light,2 - Twin-4 kle, twin- kle, all the night.2 - Twin-4 kle, twin- kle, lit- tle star,2 - How4 I won- der what you are!2 - + When the bla- zing sun is gone, " " + When he no- thing shines up- " " on, + Then you show your lit- tle light, " " + Twin- kle, twin- kle, all the " " night. " " + Twin- kle, twin- kle, lit- tle star, " " + How I won- der what you " " are! } textiii = \lyrics{ - Then4 the tra- veler in the dark2 - Thanks4 you for your ti- ny spark;2 - He4 could not see which way8 to8 go,2 - If4 you did not twin- kle so.2 - Twin-4 kle, twin- kle, lit- tle star,2 - How4 I won- der what you are!2 + Then the tra- veler in the dark " " + Thanks you for your ti- ny " " spark; + He could not see which way to go, + If you did not twin- kle " " so. " " + Twin- kle, twin- kle, lit- tle star, " " + How I won- der what you " " are! } \score{ < \context Staff=i \repeat semi 2 < \global\melody > - \context Lyrics=top \context LyricVoice \repeat fold 2 {} \alternative { \tekst \texte } + \context Lyrics=top \context LyricVoice + \repeat fold 2 {} + \alternative { + \rhythm \melody \tekst + \rhythm \melody \texte + } \context GrandStaff < \context Staff=ii \repeat semi 2 < \global\melody > \context Staff=iii \repeat semi 2 < \global\accompany > > - \context Lyrics =bottom \context LyricVoice \repeat fold 3 {} - \alternative { \texti \textii \textiii } + \context Lyrics =bottom \context LyricVoice + \repeat fold 3 {} + \alternative { + \rhythm \melody \texti + \rhythm \melody \textii + \rhythm \melody \textiii + } > \paper{ gourlay_maxmeasures = 14.0; diff --git a/lily/atom.cc b/lily/atom.cc index 61a1b3e32f..b6bbb7e598 100644 --- a/lily/atom.cc +++ b/lily/atom.cc @@ -20,95 +20,3 @@ Atom::Atom(SCM s) { func_ = s; } - - -#ifdef ATOM_SMOB -int -Atom::smob_display (SCM smob, SCM port, scm_print_state*) -{ - Atom* a =(Atom*) SCM_CDR(smob); - String i (a->off_.str ()); - - scm_puts ("#func_); - scm_puts (">", port); - - /* non-zero means success */ - return 1; -} - - -scm_sizet -Atom::smob_free (SCM smob) -{ - Atom * a= (Atom*) SCM_CDR(smob); - delete a; - return sizeof (Atom); -} - -SCM -Atom::smob_mark (SCM smob) -{ - Atom * a= (Atom*) SCM_CDR(smob); - scm_gc_mark (a->func_); - return a->font_; -} - -long Atom::smob_tag_; - -void -Atom::init_smob () -{ - static scm_smobfuns type_rec; - - type_rec.mark = smob_mark; - type_rec.free = smob_free; - type_rec.print = smob_display; - type_rec.equalp = 0; - - smob_tag_ = scm_newsmob (&type_rec); -} - - -SCM -Atom::make_smob () const -{ - SCM smob; - SCM_NEWCELL (smob); - SCM_SETCAR (smob, smob_tag_); - SCM_SETCDR (smob, this); - return smob; -} - -SCM -Atom::make_atom (SCM outputfunc) -{ - Atom * a= new Atom(outputfunc); - return a->make_smob (); -} - -SCM -Atom::copy_self () const -{ - return (new Atom (*this))->make_smob (); -} - -bool -Atom::Atom_b (SCM obj) -{ - return(SCM_NIMP(obj) && SCM_CAR(obj) == smob_tag_); -} - -Atom* -Atom::atom_l (SCM a) -{ - assert (Atom_b (a)); - return (Atom*) SCM_CDR(a); -} - - -ADD_GLOBAL_CTOR_WITHNAME(atomsmob, Atom::init_smob); -#endif - - diff --git a/lily/audio-element.cc b/lily/audio-element.cc index 717e2b0ea1..b815918423 100644 --- a/lily/audio-element.cc +++ b/lily/audio-element.cc @@ -11,6 +11,7 @@ Audio_element::Audio_element () { + grace_b_ = false; } Audio_element::~Audio_element() diff --git a/lily/audio-item.cc b/lily/audio-item.cc index f48f92179c..2e4e98747c 100644 --- a/lily/audio-item.cc +++ b/lily/audio-item.cc @@ -24,9 +24,22 @@ Audio_note::Audio_note (Musical_pitch p, Moment m, int transposing_i) { pitch_ = p; length_mom_ = m; + tied_ = 0; transposing_i_ = transposing_i; } +void +Audio_note::tie_to (Audio_note* t) +{ + tied_ = t; + Audio_note* first = t; + while (first->tied_) + first = first->tied_; + first->length_mom_ += length_mom_; + length_mom_ = 0; +} + + Audio_key::Audio_key (Key_def const& k) { key_ = k; diff --git a/lily/auto-beam-engraver.cc b/lily/auto-beam-engraver.cc index acca44ad5a..f80d36ec65 100644 --- a/lily/auto-beam-engraver.cc +++ b/lily/auto-beam-engraver.cc @@ -311,6 +311,8 @@ Auto_beam_engraver::acknowledge_element (Score_element_info info) { shortest_mom_ = mom; consider_end_and_begin (); + if (!stem_l_arr_p_) + return; } shortest_mom_ = mom; } diff --git a/lily/chord-name-engraver.cc b/lily/chord-name-engraver.cc index e730763fcf..487514ff26 100644 --- a/lily/chord-name-engraver.cc +++ b/lily/chord-name-engraver.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1998--1999, 1999 Jan Nieuwenhuizen + (c) 1998--1999 Jan Nieuwenhuizen */ #include "chord-name-engraver.hh" diff --git a/lily/grace-iterator.cc b/lily/grace-iterator.cc index f93e13e942..b291cf29d7 100644 --- a/lily/grace-iterator.cc +++ b/lily/grace-iterator.cc @@ -11,6 +11,11 @@ #include "global-translator.hh" #include "warn.hh" +Grace_iterator::~Grace_iterator () +{ + // child_iter_p_ = 0; +} + void Grace_iterator::construct_children () { @@ -41,7 +46,13 @@ Grace_iterator::do_process_and_next (Moment m) } Moment -Grace_iterator::next_moment () const +Grace_iterator::next_moment () const +{ + return 0; +} + +Music* +Grace_iterator::next_music_l () { return 0; } diff --git a/lily/grace-performer-group.cc b/lily/grace-performer-group.cc index 65d4cdef7f..004c7a4923 100644 --- a/lily/grace-performer-group.cc +++ b/lily/grace-performer-group.cc @@ -45,13 +45,14 @@ Grace_performer_group::do_removal_processing () } void -Grace_performer_group::announce_element (Audio_element_info inf) +Grace_performer_group::announce_element (Audio_element_info info) { - announce_info_arr_.push (inf); + announce_info_arr_.push (info); // do not propagate to top - announce_to_top_.push (inf); + announce_to_top_.push (info); //inf.elem_l_->set_elt_property (grace_scm_sym, SCM_BOOL_T); + info.elem_l_->grace_b_ = true; } void diff --git a/lily/include/atom.hh b/lily/include/atom.hh index 15fc068f5e..3c23232be7 100644 --- a/lily/include/atom.hh +++ b/lily/include/atom.hh @@ -15,37 +15,6 @@ #include "lily-proto.hh" #include "lily-guile.hh" -//#define ATOM_SMOB - -#ifdef ATOM_SMOB - -/// a symbol which can be translated, and freely copied -class Atom { - static long smob_tag_; - - static SCM smob_mark (SCM); - static scm_sizet smob_free (SCM); - static int smob_display (SCM, SCM, scm_print_state*); -public: - SCM make_smob () const; - - Offset off_; - Atom (SCM s); - - static SCM make_atom (SCM outputfunc); - SCM copy_self () const; - static Atom *atom_l (SCM); - - /// Is #obj# a Foo? - static bool Atom_b(SCM obj); - static void init_smob (); - - SCM func_; - SCM font_; -}; - -#else - class Atom { public: Atom (SCM s); @@ -57,6 +26,5 @@ representing a musical notation symbol. */ Protected_scm font_; }; -#endif #endif diff --git a/lily/include/audio-element.hh b/lily/include/audio-element.hh index 16955f4027..c629bcd2b1 100644 --- a/lily/include/audio-element.hh +++ b/lily/include/audio-element.hh @@ -19,6 +19,9 @@ public: virtual ~Audio_element (); void print () const; + + // should we use a scm list? + bool grace_b_; protected: virtual void do_print () const; diff --git a/lily/include/audio-item.hh b/lily/include/audio-item.hh index 5c4f8ebce6..1c0dac33d3 100644 --- a/lily/include/audio-item.hh +++ b/lily/include/audio-item.hh @@ -57,9 +57,14 @@ class Audio_note : public Audio_item public: Audio_note (Musical_pitch p, Moment m, int transposing_i = 0); + void tie_to (Audio_note*); + Musical_pitch pitch_; Moment length_mom_; + Moment delayed_mom_; + Moment delayed_until_mom_; int transposing_i_; + Audio_note* tied_; }; class Audio_text : public Audio_item diff --git a/lily/include/grace-iterator.hh b/lily/include/grace-iterator.hh index 5d63bcf603..77d5cd75b7 100644 --- a/lily/include/grace-iterator.hh +++ b/lily/include/grace-iterator.hh @@ -15,9 +15,11 @@ class Grace_iterator : public Music_wrapper_iterator { public: + ~Grace_iterator (); virtual void construct_children () ; virtual void do_process_and_next (Moment); Moment next_moment () const; + Music* next_music_l (); }; diff --git a/lily/include/lily-proto.hh b/lily/include/lily-proto.hh index 029309d854..a4cbf4e77b 100644 --- a/lily/include/lily-proto.hh +++ b/lily/include/lily-proto.hh @@ -198,6 +198,7 @@ struct Rational; struct Request; struct Request_column; struct Relative_octave_music; +struct Re_rhythmed_music; struct Repeat_engraver; struct Repeated_music; struct Repeated_music_iterator; diff --git a/lily/include/lookup.hh b/lily/include/lookup.hh index 58a7e34ccb..1d1d96c369 100644 --- a/lily/include/lookup.hh +++ b/lily/include/lookup.hh @@ -16,8 +16,9 @@ #include "direction.hh" #include "box.hh" -/** handy interface to symbol table - TODO: move this into GUILE? +/** + handy interface to symbol table + TODO: move this into GUILE? */ class Lookup { @@ -38,14 +39,14 @@ public: Molecule fill (Box b) const; Molecule filledbox (Box b) const; Molecule hairpin (Real width, Real height, bool decresc, bool continued) const; - Molecule tuplet_bracket (Real dy, Real dx, Real thick,Real interline, Direction dir) const; + Molecule tuplet_bracket (Real dy, Real dx, Real gap, Real thick,Real interline, Direction dir) const; Molecule rest (int, bool outside, String) const; Molecule accordion (SCM arg, Real interline_f) const; Molecule slur (Array controls) const; Molecule text (String style, String text, Paper_def*) const; Molecule staff_brace (Real dy) const; Molecule staff_bracket (Real dy) const; - Molecule volta (Real w, Real h, Real il, bool last_b) const; + Molecule volta (Real h, Real w, Real thick, bool last_b) const; Molecule special_time_signature (String, int,int, Paper_def*) const; Molecule time_signature (int n,int d, Paper_def*) const; diff --git a/lily/include/midi-item.hh b/lily/include/midi-item.hh index 6a64b0b93d..f24322e107 100644 --- a/lily/include/midi-item.hh +++ b/lily/include/midi-item.hh @@ -134,12 +134,11 @@ public: /** Turn a note off */ -class Midi_note_off : public Midi_item +class Midi_note_off : public Midi_note { public: Midi_note_off (Midi_note*); - int pitch_i () const; virtual String str () const; Midi_note* on_l_; diff --git a/lily/include/midi-walker.hh b/lily/include/midi-walker.hh index 20d1f95ff9..f732324ece 100644 --- a/lily/include/midi-walker.hh +++ b/lily/include/midi-walker.hh @@ -13,7 +13,7 @@ #include "lily-proto.hh" #include "moment.hh" -struct Midi_note_event : PQueue_ent +struct Midi_note_event : PQueue_ent { bool ignore_b_; Midi_note_event(); diff --git a/lily/include/music-iterator.hh b/lily/include/music-iterator.hh index c6a8e9a7d8..9d2a68f689 100644 --- a/lily/include/music-iterator.hh +++ b/lily/include/music-iterator.hh @@ -74,6 +74,9 @@ public: /// Find the next interesting point in time. virtual Moment next_moment() const; + /// Return next Music item + virtual Music* next_music_l (); + ///Are we finished with this piece of music? virtual bool ok() const; diff --git a/lily/include/music-list-iterator.hh b/lily/include/music-list-iterator.hh index 341b103608..7385230fcf 100644 --- a/lily/include/music-list-iterator.hh +++ b/lily/include/music-list-iterator.hh @@ -21,6 +21,7 @@ public: virtual void construct_children (); virtual Moment next_moment () const; + virtual Music* next_music_l (); virtual bool ok () const; protected: diff --git a/lily/include/music-list.hh b/lily/include/music-list.hh index 5f40c5dc6b..e00d9633ec 100644 --- a/lily/include/music-list.hh +++ b/lily/include/music-list.hh @@ -19,6 +19,7 @@ class Music_list : public Cons_list { public: Musical_pitch do_relative_octave (Musical_pitch, bool); + Music_iterator* do_rhythm (Music_iterator*); void add_music (Music*); Music_list (Music_list const&); Music_list (); @@ -38,6 +39,7 @@ public: VIRTUAL_COPY_CONS(Music); Musical_pitch do_relative_octave (Musical_pitch p, bool b); + Music_iterator* do_rhythm (Music_iterator*); virtual void transpose (Musical_pitch ); virtual void compress (Moment); void add_music (Music *music_p); @@ -48,6 +50,7 @@ public: protected: virtual Musical_pitch to_relative_octave (Musical_pitch); + virtual Music_iterator* to_rhythm (Music_iterator*); virtual void do_print() const; }; @@ -62,6 +65,7 @@ public: Simultaneous_music(Music_list *); virtual Musical_pitch to_relative_octave (Musical_pitch); + virtual Music_iterator* to_rhythm (Music_iterator*); virtual Moment length_mom () const; }; @@ -76,6 +80,7 @@ public: VIRTUAL_COPY_CONS(Music); virtual Musical_pitch to_relative_octave (Musical_pitch); + virtual Music_iterator* to_rhythm (Music_iterator*); Request_chord(); }; diff --git a/lily/include/music-wrapper-iterator.hh b/lily/include/music-wrapper-iterator.hh index f691270056..deee350913 100644 --- a/lily/include/music-wrapper-iterator.hh +++ b/lily/include/music-wrapper-iterator.hh @@ -26,6 +26,7 @@ public: virtual void construct_children () ; virtual Moment next_moment () const; + virtual Music* next_music_l (); virtual bool ok () const; protected: diff --git a/lily/include/music-wrapper.hh b/lily/include/music-wrapper.hh index f01a39ff9a..7e87040acf 100644 --- a/lily/include/music-wrapper.hh +++ b/lily/include/music-wrapper.hh @@ -33,6 +33,7 @@ public: virtual Moment length_mom () const; virtual ~Music_wrapper (); virtual Musical_pitch to_relative_octave (Musical_pitch); + virtual Music_iterator* to_rhythm (Music_iterator*); virtual void compress (Moment); }; diff --git a/lily/include/music.hh b/lily/include/music.hh index 0bd1e966d0..30ae02fddb 100644 --- a/lily/include/music.hh +++ b/lily/include/music.hh @@ -33,6 +33,7 @@ public: virtual Musical_pitch to_relative_octave (Musical_pitch); + virtual Music_iterator* to_rhythm (Music_iterator*); /// The duration of this piece of music virtual Moment length_mom () const; diff --git a/lily/include/my-lily-parser.hh b/lily/include/my-lily-parser.hh index 5207978087..ddd55c7517 100644 --- a/lily/include/my-lily-parser.hh +++ b/lily/include/my-lily-parser.hh @@ -15,6 +15,7 @@ #include "lily-proto.hh" #include "lily-proto.hh" #include "duration.hh" +#include "musical-pitch.hh" #include "string.hh" #include "array.hh" #include "input.hh" @@ -36,6 +37,7 @@ public: public: Duration default_duration_; + Musical_pitch default_pitch_; Scope *default_header_p_; bool first_b_; int fatal_error_i_; @@ -69,6 +71,7 @@ private: Simultaneous_music* get_word_element (String, Duration*); String notename_str (Melodic_req* melodic); void set_last_duration (Duration const *); + void set_last_pitch (Musical_pitch const *); friend int yyparse (void*); }; diff --git a/lily/include/new-repeated-music.hh b/lily/include/new-repeated-music.hh index 5cf2ff3166..0f4caed5bd 100644 --- a/lily/include/new-repeated-music.hh +++ b/lily/include/new-repeated-music.hh @@ -61,6 +61,7 @@ public: Music_sequence * alternatives_p_; virtual Musical_pitch to_relative_octave (Musical_pitch); + virtual Music_iterator* to_rhythm (Music_iterator*); /// The duration of this piece of music virtual Moment length_mom () const; diff --git a/lily/include/note-performer.hh b/lily/include/note-performer.hh index bfd49375c1..0536786d81 100644 --- a/lily/include/note-performer.hh +++ b/lily/include/note-performer.hh @@ -25,10 +25,13 @@ protected: virtual bool do_try_music (Music *req_l) ; virtual void do_print () const; virtual void do_pre_move_processing (); + virtual void process_acknowledged (); + Global_translator* global_translator_l (); private: Array note_req_l_arr_; Array note_p_arr_; + Array delayed_p_arr_; }; #endif // NOTE_PERFORMER_HH diff --git a/lily/include/relative-music.hh b/lily/include/relative-music.hh index 2d7cff937b..179362c593 100644 --- a/lily/include/relative-music.hh +++ b/lily/include/relative-music.hh @@ -22,6 +22,7 @@ public: VIRTUAL_COPY_CONS(Music); virtual Musical_pitch to_relative_octave (Musical_pitch); + virtual Music_iterator* to_rhythm (Music_iterator*); }; diff --git a/lily/include/request-iterator.hh b/lily/include/request-iterator.hh index bbc1a522d9..0b35c447d6 100644 --- a/lily/include/request-iterator.hh +++ b/lily/include/request-iterator.hh @@ -22,6 +22,7 @@ class Request_chord_iterator : public Music_iterator { */ Moment elt_length_mom_; bool last_b_; + Cons* cursor_; public: Request_chord_iterator (); @@ -30,6 +31,7 @@ public: protected: virtual void do_process_and_next (Moment); virtual Moment next_moment() const; + virtual Music* next_music_l (); virtual void construct_children(); virtual bool ok() const; virtual void do_print() const; diff --git a/lily/include/sequential-music-iterator.hh b/lily/include/sequential-music-iterator.hh index f4810c836c..bfab2b805f 100644 --- a/lily/include/sequential-music-iterator.hh +++ b/lily/include/sequential-music-iterator.hh @@ -23,6 +23,7 @@ public: virtual void construct_children (); virtual Moment next_moment () const; + virtual Music* next_music_l (); virtual bool ok () const; protected: diff --git a/lily/include/transposed-music.hh b/lily/include/transposed-music.hh index f6c1e13021..ce1314a78d 100644 --- a/lily/include/transposed-music.hh +++ b/lily/include/transposed-music.hh @@ -23,6 +23,7 @@ public: VIRTUAL_COPY_CONS(Music); virtual Musical_pitch to_relative_octave (Musical_pitch); + virtual Music_iterator* to_rhythm (Music_iterator*); }; #endif /* TRANSPOSED_MUSIC_HH */ diff --git a/lily/lookup.cc b/lily/lookup.cc index 0aedf8c219..961a4b37c8 100644 --- a/lily/lookup.cc +++ b/lily/lookup.cc @@ -517,12 +517,13 @@ Lookup::hairpin (Real width, Real height, bool decresc, bool continued) const } Molecule -Lookup::tuplet_bracket (Real dy , Real dx, Real thick, Real interline_f, Direction dir) const +Lookup::tuplet_bracket (Real dy , Real dx, Real thick, Real gap, Real interline_f, Direction dir) const { Molecule m; Atom at (gh_list(tuplet_scm_sym, - gh_double2scm (interline_f), + gh_double2scm (interline_f), + gh_double2scm (gap), gh_double2scm (dx), gh_double2scm (dy), gh_double2scm (thick), @@ -575,17 +576,18 @@ Lookup::staff_bracket (Real y) const } Molecule -Lookup::volta (Real w, Real thick, Real interline_f, bool last_b) const +Lookup::volta (Real h, Real w, Real thick, bool last_b) const { Molecule m; Atom at (gh_list (volta_scm_sym, + gh_double2scm (h), gh_double2scm (w), gh_double2scm (thick), gh_int2scm (last_b), SCM_UNDEFINED)); - m.dim_[Y_AXIS] = Interval (-interline_f, interline_f); + m.dim_[Y_AXIS] = Interval (- h/2, h/2); m.dim_[X_AXIS] = Interval (0, w); m.add_atom (&at); diff --git a/lily/midi-item.cc b/lily/midi-item.cc index b52ca3cf16..703a66ff21 100644 --- a/lily/midi-item.cc +++ b/lily/midi-item.cc @@ -431,6 +431,7 @@ Midi_note::str () const } Midi_note_off::Midi_note_off (Midi_note* n) + : Midi_note (n->audio_l_) { on_l_ = n; channel_i_ = n->channel_i_; @@ -445,12 +446,6 @@ Midi_note_off::Midi_note_off (Midi_note* n) i += 0x10; } -int -Midi_note_off::pitch_i () const -{ - return on_l_->pitch_i (); -} - String Midi_note_off::str () const { diff --git a/lily/midi-walker.cc b/lily/midi-walker.cc index c0afd12f15..48c408aaa7 100644 --- a/lily/midi-walker.cc +++ b/lily/midi-walker.cc @@ -66,7 +66,7 @@ Midi_walker::do_start_note (Midi_note* note_p) e.val = new Midi_note_off (note_p); e.key = stop_mom; stop_note_queue.insert (e); - + output_event (ptr->audio_column_l_->at_mom (), note_p); } @@ -86,7 +86,7 @@ Midi_walker::do_stop_notes (Moment max_mom) } Moment stop_mom = e.key; - Midi_note_off* note_p = e.val; + Midi_note* note_p = e.val; output_event (stop_mom, note_p); } diff --git a/lily/multi-measure-rest.cc b/lily/multi-measure-rest.cc index 5c604e3176..41d8018b05 100644 --- a/lily/multi-measure-rest.cc +++ b/lily/multi-measure-rest.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1998--1999, 1999 Jan Nieuwenhuizen + (c) 1998--1999 Jan Nieuwenhuizen */ @@ -59,7 +59,7 @@ Multi_measure_rest::do_brew_molecule_p () const Real x_off = 0.0; - Dimension_cache * col_ref = spanned_drul_[LEFT]->column_l ()->dim_cache_[X_AXIS]; + // Dimension_cache * col_ref = spanned_drul_[LEFT]->column_l ()->dim_cache_[X_AXIS]; Real rx = spanned_drul_[LEFT]->absolute_coordinate (X_AXIS); /* @@ -150,48 +150,35 @@ Multi_measure_rest::get_rods () const if (!(spanned_drul_[LEFT] && spanned_drul_[RIGHT])) { programming_error ("Multi_measure_rest::get_rods (): I am not spanned!"); - return a; + return a; } - Rod r; - r.item_l_drul_ = spanned_drul_; - r.distance_f_ = paper_l ()->get_var ("mmrest_x_minimum"); - a.push (r); + Item * l = spanned_drul_[LEFT]->column_l (); + Item * r = spanned_drul_[RIGHT]->column_l (); + Item * lb = l->find_prebroken_piece (RIGHT); + Item * rb = r->find_prebroken_piece (LEFT); - /* - also set distances in case the left or right ending of the rest is - a broken column. This is very common: it happens if the rest is in - the beginning of the line, or at the end. - - TODO: merge this code with other discretionary handling code. - - TODO: calc mmrest_x_minimum (see brew_molecule_p ()) - */ - - Drul_array discretionaries; - Direction d = LEFT; - do + Item* combinations[4][2]={{l,r}, {lb,r}, {l,rb},{lb,rb}}; + for (int i=0; i < 4; i++) { - Item *i = r.item_l_drul_[d]->find_prebroken_piece (-d); - discretionaries[d] = i; - if (i) - { - Rod k (r); - - k.item_l_drul_[d] = i; - a.push (k); - } - } - while ((flip (&d))!= LEFT); - - if (discretionaries[LEFT] && discretionaries[RIGHT]) - { - Rod k(r); - k.item_l_drul_ = discretionaries; - a.push (k); - } + Item * l = combinations[i][0]; + Item *r = combinations[i][1]; + if (!l || !r) + continue; + Rod rod; + rod.item_l_drul_[LEFT] = l; + rod.item_l_drul_[RIGHT] = r; + /* + should do something more advanced. + */ + rod.distance_f_ = l->extent (X_AXIS)[BIGGER] - r->extent (X_AXIS)[SMALLER] + + paper_l ()->get_var ("mmrest_x_minimum"); + + a.push (rod); + } + return a; } diff --git a/lily/music-iterator.cc b/lily/music-iterator.cc index e975d300a9..b3e99c8f63 100644 --- a/lily/music-iterator.cc +++ b/lily/music-iterator.cc @@ -90,6 +90,11 @@ Music_iterator::next_moment() const return 0; } +Music* +Music_iterator::next_music_l () +{ + return 0; +} void Music_iterator::process_and_next (Moment m) diff --git a/lily/music-list-iterator.cc b/lily/music-list-iterator.cc index d5e4bbff61..2be250faea 100644 --- a/lily/music-list-iterator.cc +++ b/lily/music-list-iterator.cc @@ -38,6 +38,12 @@ Music_list_iterator::next_moment () const return 0; } +Music* +Music_list_iterator::next_music_l () +{ + return 0; +} + bool Music_list_iterator::ok () const { diff --git a/lily/music-list.cc b/lily/music-list.cc index 36087d65c4..3b9c830fba 100644 --- a/lily/music-list.cc +++ b/lily/music-list.cc @@ -7,9 +7,11 @@ */ #include "music-list.hh" +#include "music-wrapper.hh" #include "musical-pitch.hh" #include "request.hh" #include "musical-request.hh" +#include "music-iterator.hh" #include "main.hh" #include "killing-cons.tcc" @@ -44,19 +46,30 @@ Sequential_music::length_mom () const return cumulative_length (); } - Musical_pitch Simultaneous_music::to_relative_octave (Musical_pitch p) { return do_relative_octave (p, true); } +Music_iterator* +Simultaneous_music::to_rhythm (Music_iterator* r) +{ + return do_rhythm (r); +} + Musical_pitch Music_sequence::do_relative_octave (Musical_pitch p, bool b) { return music_p_list_p_->do_relative_octave (p, b); } +Music_iterator* +Music_sequence::do_rhythm (Music_iterator* r) +{ + return music_p_list_p_->do_rhythm (r); +} + Musical_pitch Music_list::do_relative_octave (Musical_pitch last, bool ret_first) { @@ -75,6 +88,15 @@ Music_list::do_relative_octave (Musical_pitch last, bool ret_first) return retval; } +Music_iterator* +Music_list::do_rhythm (Music_iterator* r) +{ + for (Cons *i = head_; i ; i = i->next_) + { + r = i->car_->to_rhythm (r); + } + return r; +} Music_list::Music_list (Music_list const &s) : Cons_list (s) @@ -114,6 +136,34 @@ Request_chord::to_relative_octave (Musical_pitch last) return last; } +Music_iterator* +Request_chord::to_rhythm (Music_iterator* it) +{ + for (Cons* i = music_p_list_p_->head_; i ; i = i->next_) + { + if (Rhythmic_req* r= dynamic_cast (i->car_)) + { + for (Music*m = it->next_music_l (); m; m = it->next_music_l ()) + { +#if 0 + // is it sane to assume we don't want rests on lyrics/in rhythm? + if (dynamic_cast (r) + || dynamic_cast (r) + || dynamic_cast (r)) + { + continue; + } +#endif + if (Rhythmic_req* d= dynamic_cast (m)) + { + r->duration_ = d->duration_; + return it; + } + } + } + } + return it; +} Music_list::Music_list () { diff --git a/lily/music-sequence.cc b/lily/music-sequence.cc index 60e6459a20..6b074c5b16 100644 --- a/lily/music-sequence.cc +++ b/lily/music-sequence.cc @@ -63,6 +63,11 @@ Music_sequence::to_relative_octave (Musical_pitch p) return do_relative_octave (p, false); } +Music_iterator* +Music_sequence::to_rhythm (Music_iterator* r) +{ + return do_rhythm (r); +} Moment Music_sequence::maximum_length () const diff --git a/lily/music-wrapper-iterator.cc b/lily/music-wrapper-iterator.cc index f25dd82f39..03fefdd44e 100644 --- a/lily/music-wrapper-iterator.cc +++ b/lily/music-wrapper-iterator.cc @@ -56,3 +56,9 @@ Music_wrapper_iterator::next_moment () const return child_iter_p_->next_moment (); } +Music* +Music_wrapper_iterator::next_music_l () +{ + return child_iter_p_->next_music_l (); +} + diff --git a/lily/music-wrapper.cc b/lily/music-wrapper.cc index dff9d1fc87..4512e26fc2 100644 --- a/lily/music-wrapper.cc +++ b/lily/music-wrapper.cc @@ -50,13 +50,18 @@ Music_wrapper::length_mom () const return element_p_->length_mom (); } - Musical_pitch Music_wrapper::to_relative_octave (Musical_pitch p) { return element_p_->to_relative_octave (p); } +Music_iterator* +Music_wrapper::to_rhythm (Music_iterator* r) +{ + return element_p_->to_rhythm (r); +} + Music* Music_wrapper::element_l () const { diff --git a/lily/music.cc b/lily/music.cc index c7bd75a435..1d137e4524 100644 --- a/lily/music.cc +++ b/lily/music.cc @@ -54,6 +54,12 @@ Music::to_relative_octave (Musical_pitch m) return m; } +Music_iterator* +Music::to_rhythm (Music_iterator* r) +{ + return r; +} + void Music::transpose (Musical_pitch ) { diff --git a/lily/my-lily-lexer.cc b/lily/my-lily-lexer.cc index d0521d2240..1da40f6b55 100644 --- a/lily/my-lily-lexer.cc +++ b/lily/my-lily-lexer.cc @@ -60,6 +60,7 @@ static Keyword_ent the_key_tab[]={ {"remove", REMOVE}, {"repeat", REPEAT}, {"repetitions", REPETITIONS}, + {"rhythm", RHYTHM}, {"scm", SCM_T}, {"scmfile", SCMFILE}, {"score", SCORE}, diff --git a/lily/my-lily-parser.cc b/lily/my-lily-parser.cc index b787e2a8d5..46f09be711 100644 --- a/lily/my-lily-parser.cc +++ b/lily/my-lily-parser.cc @@ -28,6 +28,7 @@ My_lily_parser::My_lily_parser (Sources * source_l) source_l_ = source_l; lexer_p_ = 0; default_duration_.durlog_i_ = 2; + default_pitch_ = Musical_pitch (5*7, 0); error_level_i_ = 0; fatal_error_i_ = 0; @@ -95,14 +96,18 @@ My_lily_parser::parser_error (String s) exit_status_i_ = 1; } - - void My_lily_parser::set_last_duration (Duration const *d) { default_duration_ = *d; } +void +My_lily_parser::set_last_pitch (Musical_pitch const* p) +{ + default_pitch_ = *p; +} + // junk me Simultaneous_music* My_lily_parser::get_word_element (String s, Duration * duration_p) diff --git a/lily/note-performer.cc b/lily/note-performer.cc index 5542c8e693..1f88de4aad 100644 --- a/lily/note-performer.cc +++ b/lily/note-performer.cc @@ -9,6 +9,8 @@ #include "note-performer.hh" #include "musical-request.hh" #include "audio-item.hh" +#include "audio-column.hh" +#include "global-translator.hh" #include "debug.hh" @@ -39,7 +41,7 @@ Note_performer::do_process_requests () if (!prop.empty_b () && prop.isnum_b ()) transposing_i = prop; - while(note_req_l_arr_.size ()) + while (note_req_l_arr_.size ()) { Note_req* n = note_req_l_arr_.pop (); Audio_note* p = new Audio_note (n->pitch_, n->length_mom (), transposing_i); @@ -50,15 +52,65 @@ Note_performer::do_process_requests () } } +void +Note_performer::process_acknowledged () +{ +} + +Global_translator* +Note_performer::global_translator_l () +{ + Translator *t = this; + Global_translator *global_l =0; + do + { + t = t->daddy_trans_l_ ; + global_l = dynamic_cast (t); + } + while (!global_l); + + return global_l; +} + + void Note_performer::do_pre_move_processing () { + + // why don't grace notes show up here? + // --> grace notes effectively do not get delayed + Global_translator* global_l = global_translator_l (); + for (int i=0; i < note_p_arr_.size (); i++) + { + Audio_note* n = note_p_arr_[i]; + if (Moment m= n->delayed_until_mom_) + { + global_l->add_moment_to_process (m); + delayed_p_arr_.push (n); + note_p_arr_[i] = 0; + note_p_arr_.del (i); + i--; + } + } + + Moment now = now_mom (); for (int i=0; i < note_p_arr_.size (); i++) { play_element (note_p_arr_[i]); } note_p_arr_.clear (); note_req_l_arr_.clear (); + for (int i=0; i < delayed_p_arr_.size (); i++) + { + Audio_note* n = delayed_p_arr_[i]; + if (n->delayed_until_mom_ <= now) + { + play_element (n); + delayed_p_arr_[i] = 0; + delayed_p_arr_.del (i); + i--; + } + } } bool diff --git a/lily/parser.yy b/lily/parser.yy index 51a26d08d7..7973a73d6b 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -49,6 +49,7 @@ #include "mudela-version.hh" #include "scope.hh" #include "relative-music.hh" +#include "re-rhythmed-music.hh" #include "transposed-music.hh" #include "time-scaled-music.hh" #include "new-repeated-music.hh" @@ -174,6 +175,7 @@ yylex (YYSTYPE *s, void * v_l) %token REMOVE %token REPEAT %token REPETITIONS +%token RHYTHM %token SCM_T %token SCMFILE %token SCORE @@ -193,7 +195,7 @@ yylex (YYSTYPE *s, void * v_l) /* escaped */ %token E_EXCLAMATION E_SMALLER E_BIGGER E_CHAR -%type dots exclamations questions +%type exclamations questions %token DIGIT %token NOTENAME_PITCH %token TONICNAME_PITCH @@ -228,7 +230,7 @@ yylex (YYSTYPE *s, void * v_l) %type script_dir %type optional_modality %type identifier_init -%type steno_duration notemode_duration +%type steno_duration optional_notemode_duration %type entered_notemode_duration explicit_duration %type int_list %type pre_requests post_requests @@ -237,14 +239,15 @@ yylex (YYSTYPE *s, void * v_l) %type steno_tonic_pitch %type pitch_list -%type chord notemode_chord +%type chord %type chord_additions chord_subtractions chord_notes -%type chord_addsub chord_note chord_inversion notemode_chord_inversion +%type chord_addsub chord_note chord_inversion %type midi_block midi_body %type duration_length %type scalar -%type Music relative_music Sequential_music Simultaneous_music Music_sequence +%type Music Sequential_music Simultaneous_music Music_sequence +%type relative_music re_rhythmed_music %type property_def translator_change %type Music_list %type paper_block paper_def_body @@ -265,7 +268,6 @@ yylex (YYSTYPE *s, void * v_l) - %left '-' '+' %left '*' '/' %left UNARY_MINUS @@ -556,11 +558,6 @@ paper_block: ; -optional_dot: - /* empty */ - | '.' - ; - paper_def_body: /* empty */ { Paper_def *p = THIS->default_paper_p (); @@ -665,6 +662,9 @@ midi_body: /* empty */ { } | MIDI_IDENTIFIER { $$ = $1-> access_content_Midi_def (true); + } + | midi_body assignment semicolon { + } | midi_body translator_spec_block { $$-> assign_translator ($2); @@ -828,6 +828,7 @@ Composite_music: THIS->lexer_p_->pop_state (); } | relative_music { $$ = $1; } + | re_rhythmed_music { $$ = $1; } ; relative_music: @@ -837,6 +838,12 @@ relative_music: } ; +re_rhythmed_music: + RHYTHM Music Music { + $$ = new Re_rhythmed_music ($3, $2); + } + ; + translator_change: TRANSLATOR STRING '=' STRING { Change_translator * t = new Change_translator; @@ -851,7 +858,7 @@ translator_change: ; property_def: - PROPERTY STRING '.' STRING '=' scalar { + PROPERTY STRING '.' STRING '=' scalar { Translation_property *t = new Translation_property; t-> var_str_ = *$4; @@ -1138,8 +1145,14 @@ explicit_musical_pitch: ; musical_pitch: - steno_musical_pitch - | explicit_musical_pitch + steno_musical_pitch { + $$ = $1; + THIS->set_last_pitch ($1); + } + | explicit_musical_pitch { + $$ = $1; + THIS->set_last_pitch ($1); + } ; explicit_duration: @@ -1289,18 +1302,16 @@ duration_length: ; entered_notemode_duration: - dots { - $$ = new Duration (THIS->default_duration_); - if ($1) - $$->dots_i_ = $1; - } - | steno_duration { + steno_duration { THIS->set_last_duration ($1); } ; -notemode_duration: - entered_notemode_duration { +optional_notemode_duration: + { + $$ = new Duration (THIS->default_duration_); + } + | entered_notemode_duration { $$ = $1; } ; @@ -1338,7 +1349,7 @@ abbrev_type: simple_element: - musical_pitch exclamations questions notemode_duration { + musical_pitch exclamations questions optional_notemode_duration { if (!THIS->lexer_p_->note_state_b ()) THIS->parser_error (_ ("have to be in Note mode for notes")); @@ -1360,11 +1371,42 @@ simple_element: $$ = v; } - | RESTNAME notemode_duration { + /* + This rhythm option introduces a lot of shift/reduce conflicts; + ie, for every optional_notemode_duration. + However, we always want the default behaviour, which is to shift: + if an optional_notemode_duration is allowed, a following duration + is to be taken as this default duration. Thus + + c4 c 8 4 + + are three notes, ie: c4 c8 c4. + Parsing whitespace is a snaky thing to do. + * / + | entered_notemode_duration { + if (!THIS->lexer_p_->note_state_b ()) + THIS->parser_error (_ ("have to be in Note mode for notes")); + + Note_req *n = new Note_req; + + n->pitch_ = THIS->default_pitch_; + n->duration_ = *$1; + delete $1; + + Simultaneous_music*v = new Request_chord; + v->set_spot (THIS->here_input ()); + n->set_spot (THIS->here_input ()); + + v->add_music (n); + + $$ = v; + } +*/ + | RESTNAME optional_notemode_duration { $$ = THIS->get_rest_element (*$1, $2); delete $1; // delete notename } - | MEASURES notemode_duration { + | MEASURES optional_notemode_duration { Multi_measure_rest_req* m = new Multi_measure_rest_req; m->duration_ = *$2; delete $2; @@ -1374,7 +1416,7 @@ simple_element: velt_p->add_music (m); $$ = velt_p; } - | REPETITIONS notemode_duration { + | REPETITIONS optional_notemode_duration { Repetitions_req* r = new Repetitions_req; r->duration_ = *$2; delete $2; @@ -1384,7 +1426,7 @@ simple_element: velt_p->add_music (r); $$ = velt_p; } - | STRING notemode_duration { + | STRING optional_notemode_duration { if (!THIS->lexer_p_->lyric_state_b ()) THIS->parser_error (_ ("have to be in Lyric mode for lyrics")); $$ = THIS->get_word_element (*$1, $2); @@ -1395,24 +1437,13 @@ simple_element: THIS->parser_error (_ ("have to be in Chord mode for chords")); $$ = $1; } - | '@' notemode_chord '@' { - if (!THIS->lexer_p_->note_state_b ()) - THIS->parser_error (_ ("have to be in Note mode for @chords")); - $$ = $2; - } ; chord: - steno_tonic_pitch notemode_duration chord_additions chord_subtractions chord_inversion { + steno_tonic_pitch optional_notemode_duration chord_additions chord_subtractions chord_inversion { $$ = THIS->get_chord (*$1, $3, $4, $5, *$2); }; -notemode_chord: - steno_musical_pitch notemode_duration chord_additions chord_subtractions notemode_chord_inversion { - $$ = THIS->get_chord (*$1, $3, $4, $5, *$2); - }; - - chord_additions: { $$ = new Array; @@ -1423,12 +1454,13 @@ chord_additions: ; chord_notes: - { + chord_addsub { $$ = new Array; + $$->push (*$1); } - | chord_notes chord_addsub { + | chord_notes '.' chord_addsub { $$ = $1; - $$->push (*$2); + $$->push (*$3); } ; @@ -1448,8 +1480,8 @@ chord_subtractions: chord_addsub: - chord_note optional_dot - | CHORDMODIFIER_PITCH optional_dot + chord_note + | CHORDMODIFIER_PITCH ; chord_inversion: @@ -1461,15 +1493,6 @@ chord_inversion: } ; -notemode_chord_inversion: - { - $$ = 0; - } - | '/' steno_musical_pitch { - $$ = $2 - } - ; - chord_note: unsigned { $$ = new Musical_pitch; @@ -1548,15 +1571,6 @@ string: ; - - -dots: - { $$ = 0; } - | dots '.' { $$ ++; } - ; - - - exclamations: { $$ = 0; } | exclamations '!' { $$ ++; } diff --git a/lily/relative-octave-music.cc b/lily/relative-octave-music.cc index 7f66ab6a6b..dc0fc9906c 100644 --- a/lily/relative-octave-music.cc +++ b/lily/relative-octave-music.cc @@ -16,11 +16,16 @@ Relative_octave_music::to_relative_octave (Musical_pitch) return last_pitch_; } +Music_iterator* +Relative_octave_music::to_rhythm (Music_iterator* r) +{ + return element_l ()->to_rhythm (r); +} Relative_octave_music::Relative_octave_music(Music*p,Musical_pitch def) : Music_wrapper (p) { - last_pitch_ = element_l()->to_relative_octave (def); + last_pitch_ = element_l ()->to_relative_octave (def); } void diff --git a/lily/repeated-music.cc b/lily/repeated-music.cc index d00a932107..6436be9bfa 100644 --- a/lily/repeated-music.cc +++ b/lily/repeated-music.cc @@ -66,6 +66,17 @@ Repeated_music::to_relative_octave (Musical_pitch p) return p; } +Music_iterator* +Repeated_music::to_rhythm (Music_iterator* r) +{ + if (repeat_body_p_) + r = repeat_body_p_->to_rhythm (r); + + if (alternatives_p_) + r = alternatives_p_->do_rhythm (r); + return r; +} + void Repeated_music::transpose (Musical_pitch p) diff --git a/lily/request-iterator.cc b/lily/request-iterator.cc index ca103ee062..9cbf798a4b 100644 --- a/lily/request-iterator.cc +++ b/lily/request-iterator.cc @@ -30,6 +30,8 @@ Request_chord_iterator::elt_l () const Request_chord_iterator::Request_chord_iterator () { last_b_ = false; + // cursor_ = elt_l ()->music_p_list_p_->head_; + cursor_ = 0; } @@ -39,8 +41,6 @@ Request_chord_iterator::ok() const return (elt_length_mom_ && !last_b_) || first_b_; } - - Moment Request_chord_iterator::next_moment() const { @@ -50,6 +50,25 @@ Request_chord_iterator::next_moment() const return m; } +Music* +Request_chord_iterator::next_music_l () +{ + if (first_b_) + { + cursor_ = elt_l ()->music_p_list_p_->head_; + first_b_ = false; + } + else + { + if (cursor_) + cursor_ = cursor_->next_; + } + if (cursor_) + return cursor_->car_; + else + return 0; +} + void Request_chord_iterator::do_print() const { diff --git a/lily/sequential-music-iterator.cc b/lily/sequential-music-iterator.cc index a50a0de9a5..a6602b7709 100644 --- a/lily/sequential-music-iterator.cc +++ b/lily/sequential-music-iterator.cc @@ -127,6 +127,40 @@ Sequential_music_iterator::next_moment() const return iter_p_->next_moment() + here_mom_; } +Music* +Sequential_music_iterator::next_music_l () +{ + if (!iter_p_) + return 0; + + while (1) + { + if (Music* m = iter_p_->next_music_l ()) + { + return m; + } + else + { + // urg FIXME: grace-iterator::next_music_l () fools me! + if (dynamic_cast (iter_p_)) + iter_p_ = 0; + leave_element (); + + if (cursor_) + { + start_next_element (); + set_sequential_music_translator (); + } + else + { + delete iter_p_; + iter_p_ = 0; + return 0; + } + } + } +} + bool Sequential_music_iterator::ok() const { diff --git a/lily/tie-performer.cc b/lily/tie-performer.cc index 0d7d5a0257..f33e9efaac 100644 --- a/lily/tie-performer.cc +++ b/lily/tie-performer.cc @@ -121,14 +121,8 @@ Tie_performer::do_pre_move_processing () for (int i=0; i< tie_p_arr_.size (); i++) { //play_element (tie_p_arr_[i]); - /* - urg. - doesn't work for c ~ c ~ c - */ - tie_p_arr_[i]->note_l_drul_[LEFT]->length_mom_ += - tie_p_arr_[i]->note_l_drul_[RIGHT]->length_mom_; - tie_p_arr_[i]->note_l_drul_[RIGHT]->length_mom_ = 0; - } + tie_p_arr_[i]->note_l_drul_[RIGHT]->tie_to (tie_p_arr_[i]->note_l_drul_[LEFT]); + } tie_p_arr_.clear (); } diff --git a/lily/transposed-music.cc b/lily/transposed-music.cc index 2445dc80c3..f6de2eb3b3 100644 --- a/lily/transposed-music.cc +++ b/lily/transposed-music.cc @@ -17,8 +17,6 @@ Transposed_music::Transposed_music (Music *p, Musical_pitch pit) p->transpose (pit); } - - void Transposed_music::do_print () const { @@ -35,4 +33,10 @@ Transposed_music::to_relative_octave (Musical_pitch p) return p; } +Music_iterator* +Transposed_music::to_rhythm (Music_iterator* r) +{ + return r; +} + diff --git a/lily/tuplet-spanner.cc b/lily/tuplet-spanner.cc index 3f76d659e1..aa17ba7972 100644 --- a/lily/tuplet-spanner.cc +++ b/lily/tuplet-spanner.cc @@ -25,7 +25,7 @@ Tuplet_spanner::Tuplet_spanner () } /* - TODO. We should control the gap for lookup from here. + TODO. */ Molecule* Tuplet_spanner::do_brew_molecule_p () const @@ -69,7 +69,9 @@ Tuplet_spanner::do_brew_molecule_p () const Real thick = paper_l ()->get_realvar (tuplet_thick_scm_sym); if (bracket_visibility) { - mol_p->add_molecule (lookup_l ()->tuplet_bracket (dy, w, thick, interline, dir_)); + Real gap = paper_l () -> get_var ("tuplet_spanner_gap"); + + mol_p->add_molecule (lookup_l ()->tuplet_bracket (dy, w, thick, gap, interline, dir_)); } if (number_visibility) diff --git a/lily/volta-spanner.cc b/lily/volta-spanner.cc index 2cf391856c..860a87c94c 100644 --- a/lily/volta-spanner.cc +++ b/lily/volta-spanner.cc @@ -39,8 +39,9 @@ Volta_spanner::do_brew_molecule_p () const Real dx = internote_f; Real w = extent (X_AXIS).length () - dx; - Molecule volta (lookup_l ()->volta (w, t, interline_f, last_b_)); - Real h = volta.dim_.y ().length (); + Real h = paper_l()->get_var ("volta_spanner_height"); + Molecule volta (lookup_l ()->volta (h, w, t, last_b_)); + Molecule num (lookup_l ()->text ("volta", number_str_, paper_l ())); Real dy = bar_arr_.top ()->extent (Y_AXIS) [UP] > diff --git a/ly/params.ly b/ly/params.ly index 8706ac12fc..c224318fba 100644 --- a/ly/params.ly +++ b/ly/params.ly @@ -143,8 +143,10 @@ barthick_thick = 6.0* \staffline; barthick_thin = 1.6*\staffline; barthick_score = 1.6*\staffline; +tuplet_spanner_gap = 2.0 * \interline; tuplet_thick = 1.0*\staffline; volta_thick = 1.6*\staffline; +volta_spanner_height = 2.0 *\interline; % relative thickness of thin lines 1.6 : 1 : 0.8 stemthickness = 0.8*\staffline; @@ -171,8 +173,13 @@ restcollision_minimum_beamdist = 1.5; % deprecated! postBreakPadding = 0.0; +% optical correction amount. stemSpacingCorrection = 0.5*\interline; + + + + \include "engraver.ly"; diff --git a/ly/performer.ly b/ly/performer.ly index f9eafe68e2..184f18144f 100644 --- a/ly/performer.ly +++ b/ly/performer.ly @@ -1,7 +1,7 @@ % % setup for Request->Element conversion. Guru-only % -\translator { +StaffContext = \translator { \type "Staff_performer"; \name Staff; \accepts Voice; @@ -13,7 +13,8 @@ \consists "Key_performer"; \consists "Time_signature_performer"; -} +}; +\translator { \StaffContext } %% urg, why (needs praeludium-*.ly) these? \translator @@ -29,25 +30,33 @@ \consists "Note_performer"; \name VoiceThree; } -\translator -{ +\translator { \type "Performer_group_performer"; \consists "Note_performer"; \name VoiceOne; } -\translator -{ +VoiceContext = \translator { \type "Performer_group_performer"; \name Voice; +% All notes fall to Grace if you leave Thread out (huh?) + \consists "Grace_position_performer"; + \accepts Thread; + \accepts Grace; +}; +\translator { \VoiceContext } + +GraceContext = \translator { + \type "Performer_group_performer"; + \name Thread; \consists "Note_performer"; \consists "Tie_performer"; -% \accepts Grace; -} +}; +\translator { \GraceContext } \translator { \type "Grace_performer_group"; - \name "Grace"; + \name Grace; \consists "Note_performer"; \consists "Tie_performer"; weAreGraceContext = "1"; @@ -60,20 +69,24 @@ } -\translator -{ +GrandStaffContext = \translator { \type "Performer_group_performer"; - \accepts Staff; \name GrandStaff; -} + \accepts Staff; +}; +\translator { \GrandStaffContext } -\translator {\type "Performer_group_performer"; - \accepts Staff; \name "PianoStaff";} +PianoStaffContext = \translator { + \type "Performer_group_performer"; + \name "PianoStaff"; + \accepts Staff; +}; +\translator { \PianoStaffContext } \translator { \type "Performer_group_performer"; \consists "Lyric_performer"; -\name LyricVoice; + \name LyricVoice; } \translator{ @@ -87,16 +100,15 @@ \name Lyrics; \consists "Time_signature_performer"; } -\translator -{ +\translator { \type Performer_group_performer; \name StaffGroup; \accepts Staff; } -\translator { - \type "Score_performer"; +ScoreContext = \translator { + \type "Score_performer"; \name Score; instrument = "bright acoustic"; @@ -107,5 +119,6 @@ \accepts StaffGroup; \accepts ChoirStaff; \consists "Swallow_performer"; -} +}; +\translator { \ScoreContext } diff --git a/make/out/lelievijver.lsm b/make/out/lelievijver.lsm index 2fad8d037d..7ea9b25199 100644 --- a/make/out/lelievijver.lsm +++ b/make/out/lelievijver.lsm @@ -1,15 +1,15 @@ Begin3 Titel: LilyPond -Versie: 1.1.53 -Inschrijf datum: 05JUL99 +Versie: 1.1.54 +Inschrijf datum: 08JUL99 Beschrijving: @FLAPTEKST@ Trefwoorden: muziek typezetten midi notatie Auteur: hanwen@stack.nl (Han-Wen Nienhuys) janneke@gnu.org (Jan Nieuwenhuizen) Onderhouden door: hanwen@cs.ruu.nl (Han-Wen Nienhuys) Voornaamste plek: sunsite.unc.edu /pub/Linux/apps - 770k lilypond-1.1.53.tar.gz + 770k lilypond-1.1.54.tar.gz Oorspronkelijke plek: ftp.cs.uu.nl /pub/GNU/LilyPond/development/ - 770k lilypond-1.1.53.tar.gz + 770k lilypond-1.1.54.tar.gz Copi-eer voorwaarden: GPL End diff --git a/make/out/lilypond.lsm b/make/out/lilypond.lsm index 1acdb6762f..3d06342705 100644 --- a/make/out/lilypond.lsm +++ b/make/out/lilypond.lsm @@ -1,7 +1,7 @@ Begin3 Title: LilyPond -Version: 1.1.53 -Entered-date: 05JUL99 +Version: 1.1.54 +Entered-date: 08JUL99 Description: LilyPond is the GNU Project music typesetter. This program can print beautiful sheet music from a music definition file. It can also play @@ -14,8 +14,8 @@ Author: hanwen@cs.ruu.nl (Han-Wen Nienhuys) janneke@gnu.org (Jan Nieuwenhuizen) Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys) Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert - 770k lilypond-1.1.53.tar.gz + 770k lilypond-1.1.54.tar.gz Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/ - 770k lilypond-1.1.53.tar.gz + 770k lilypond-1.1.54.tar.gz Copying-policy: GPL End diff --git a/make/out/lilypond.spec b/make/out/lilypond.spec index ea09000321..0337c89dfc 100644 --- a/make/out/lilypond.spec +++ b/make/out/lilypond.spec @@ -1,9 +1,9 @@ Name: lilypond -Version: 1.1.53 +Version: 1.1.54 Release: 1 Copyright: GPL Group: Applications/Publishing -Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.53.tar.gz +Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.54.tar.gz Summary: A program for printing sheet music. URL: http://www.cs.uu.nl/~hanwen/lilypond Packager: Han-Wen Nienhuys diff --git a/mutopia/E.Satie/gnossienne-4.ly b/mutopia/E.Satie/gnossienne-4.ly index ca23359ef7..d9d499c9b3 100644 --- a/mutopia/E.Satie/gnossienne-4.ly +++ b/mutopia/E.Satie/gnossienne-4.ly @@ -26,6 +26,7 @@ global = \notes { melody = \notes\relative c''{ \clef violin; \property Voice.verticalDirection = 1 + \property Voice.graceFraction = "1/4" r2 r r r2 r r r4 a'8--(\< a-- a-- a-- c-- \!b-- a--\> gis f \!e @@ -112,9 +113,9 @@ accompany = \notes \relative c{ \property Voice.verticalDirection = 1 \property Voice.scriptVerticalDirection = 1 \melody - } + } \context AutoSwitchContext \accompany - > + > } \paper { gourlay_maxmeasures = 4.; @@ -138,8 +139,8 @@ accompany = \notes \relative c{ } \translator { \ScoreContext - \accepts AutoSwitchGrandStaff; - } + \accepts "AutoSwitchGrandStaff"; + } \translator{ \type "Engraver_group_engraver"; \name AutoSwitchGrandStaff; @@ -158,14 +159,31 @@ accompany = \notes \relative c{ slurVerticalDirection = 1; verticalDirection = -1; beamAutoEnd = "1/2"; - } + } \translator { \type "Engraver_group_engraver"; - \name "AutoSwitchContext"; + \name AutoSwitchContext; \consists "Staff_switching_translator"; - } } + } \midi { \tempo 4 = 54; + \translator { + \ScoreContext + \accepts "AutoSwitchGrandStaff"; + } + \translator { + \type "Performer_group_performer"; + \name AutoSwitchGrandStaff; + \accepts "AutoSwitchContext"; + \accepts "Staff"; + } + \translator { + \type "Staff_performer"; + \name AutoSwitchContext; + \accepts "Voice"; + \consists "Key_performer"; + \consists "Time_signature_performer"; + } } } diff --git a/mutopia/F.Schubert/standchen.ly b/mutopia/F.Schubert/standchen.ly index c124113668..46aabb538b 100644 --- a/mutopia/F.Schubert/standchen.ly +++ b/mutopia/F.Schubert/standchen.ly @@ -11,7 +11,7 @@ copyright = "public domain"; } %{ - Tested Features@ multivoice accents lyrics chords piano music + Tested Features: multivoice accents lyrics chords piano music multiple \paper{}s in one \score Note: Original key F. %} @@ -69,104 +69,62 @@ vocalThrough = \notes\relative c{ e2 r4 | } -lyricVerse1 = \lyrics{ -% 5 - \times 2/3 { Lei-4 se8 } fleh-4. en8 | - \times 2/3 { mei-4 ne8 } Lie-4 der8 " "8 | - Durch4. die8 \times 2/3 { Nacht4 zu8 } | - dir;2 " "4 | - " "2.*2 -%{ " "4 " " " " | - " " " " " " |%} -% 11 - \times 2/3 { In4 den8 } stil-4. len8 | - \times 2/3 { Hain4 her-8 } nie-4. der8 | - Lieb-4. chen,8 \times 2/3 { komm4 zu8 } | - mir!2 " "4 | - " "2.*2 -%{ " "4 " " " " | - " " " " " " |%} -% 17 - Fl\"us-8. ternd16 schlan-4. ke8 | - Wip-8. fel16 rau-4. schen8 | - \times 2/3 { In4 des8 } Mon-4. des8 | - Licht;2. | - \times 2/3 { In4 des8 } Mon-4. des8 | - Licht;2. | -% 23 - Des8. Ver-16 r\"a-4. thers8 | - feind-8. lich16 Lau-4. schen8 | - \times 2/3 { F\"urch-4 te8 } Hol-4. de8 | - nicht2. | - \times 2/3 { f\"urch-4 te8 } Hol-4. de8 | - nicht.2. | +lyricVerseOne = \lyrics{ + Lei- " " se fleh- en mei- " " ne Lie- der " " + Durch die Nacht " " zu dir; " " + " " + " " + In " " den stil- len Hain " " her- nie- der + Lieb- chen, komm " " zu mir! " " + " " + " " + Fl\"us- ternd schlan- ke Wip- fel rau- schen + In " " des Mon- des Licht, + In " " des Mon- des Licht; + + Des Ver- r\"a- ters feind- lich Lau- schen + F\"urch- " " te, Hol- de, nicht, + f\"urch- " " te, Hol- de, nicht. } -lyricVerse2 = \lyrics{ -% 5 - \times 2/3 { H\"orst4 die8 } Nach-4. ti-8 - \times 2/3 { gal-4 len8 } schla-4 gen?8 " "8 - ach!4. sie8 \times 2/3 { fleh-4 en8 } - dich,2 " "4 - " "2.*2 -%{ " "4 " " " " - " "4" " " " -%} -% 11 - \times 2/3 { Mit4 der8 } T\"o-4. ne8 - \times 2/3 { s\"u-4 "\ss en"8 } Kla-4. gen8 - Fleh-4. en8 \times 2/3 { sie4 f\"ur8 } - mich2 " "4 - " "2.*2 -%{ " "4" " " " - " "4" " " " -%} -% 17 - Sie-8. ver-16 stehn4. des8 - Bus-8. ens16 Seh-4. nen8 - \times 2/3 { Ken-4 nen8 } Lieb-4. es-8 - schmerz,2. - \times 2/3 { Ken-4 nen8 } Lieb-4. es-8 - schmerz.2. +lyricVerseTwo = \lyrics{ + H\"orst " " die Nach- ti- gal- " " len schla- gen? " " + Ach! sie fleh- " " en dich, " " + " " + " " + Mit " " der T\"o- ne s\"u- " " "\ss en" Kla- gen + Fleh- en sie " " f\"ur mich. " " + " " + " " + Sie- ver- "steh'n" des Bus- ens Seh- nen + Ken- " " nen Lieb- es- schmerz, + Ken- " " nen Lieb- es- schmerz. -% 23 - R\"uh-8. ren16 mit4. den8 - Sil-8. ber-16 t\"o-4. nen8 - \times 2/3 { jed-4 es8 } wei-4. che8 - Herz,2. - \times 2/3 { jed-4 es8 } wei-4. che8 - Herz.2. + R\"uh- ren mit den Sil- ber- t\"o- nen + Jed- " " es wei- che Herz, + Jed- " " es wei- che Herz. } lyricThrough = \lyrics{ -% 37 - La\ss8. auch16 dir8. die16 Brust8. be-16 | - we-4 gen " " | - Lieb-4. chen,8 h\"o-8. re16 | - mich!2 " "4 | - Be-4. bend8 \times 2/3 { harr'4 ich8} | - dir8. ent-16 ge-4 gen!8 " "8 | - " "2. | - " "2. | - \times 2/3 { Komm4 be-8 } gl\"u4. cke8 | - mich!2. | - \times 2/3 { Komm4 be-8 } gl\"u4. cke8 | - mich,2. __ | - " "2 be-4 | - gl\"u-2. | - cke2. | - mich!2 " "4 | + La\ss auch dir die Brust be- we- gen " " + Lieb- chen, h\"o- re mich! " " + Be- bend harr' " " ich dir ent- ge- gen! " " + " " + " " + Komm, " " be- "gl\"uk-" ke mich! + Komm, " " be- "gl\"uk-" ke mich, __ " " " " + Be- "gl\"uk-" ke mich! } trebleIntro = \notes\relative c{ - r8^"\bf m\\\"a\\\ss ig"\pp | + r8^"\bf M\\\"a\\ss ig"\pp | r8 | r8 | r8 | \break } -trebleVerse1 = \notes\relative c{ +trebleVerseOne = \notes\relative c{ %5 r8 | r8 | @@ -274,7 +232,7 @@ bassIntro = \notes\relative c{ r4 | } -bassVerse1 = \notes\relative c{ +bassVerseOne = \notes\relative c{ % \clef bass; \property Voice.dynamicDir=1 %5 @@ -362,24 +320,13 @@ global = \notes{ } -lyricFour = \lyrics{ - " "2.*4 -%{ " "4 " " " " - " " " " " " - " " " " " " - " " " " " "%} -} - -allLyrics = { - \time 3/4; -% \skip 4 * 12; - \lyricFour - \lyricVerse1 -% \skip 4 * 24; - \lyricFour - \lyricFour - \lyricVerse2 - \lyricThrough +allLyrics = \lyrics { + " "4 * 12 + \rhythm \vocalVerse \lyricVerseOne + " "4 * 12 + " "4 * 12 + \rhythm \vocalVerse \lyricVerseTwo + \rhythm \vocalThrough \lyricThrough } lyricStaff = \context Lyrics = lyric< @@ -390,7 +337,6 @@ vocals = \notes{ \clef treble; % certainly no auto-beaming for vocals \property Voice.beamAuto=0 - \property Voice.dynamicDir = \up \skip 4 * 12; @@ -410,9 +356,9 @@ treble = { \clef treble; \property Voice.beamAutoBegin=0 \trebleIntro - \trebleVerse1 + \trebleVerseOne \trebleEentje - \trebleVerse1 + \trebleVerseOne \trebleThrough } @@ -424,9 +370,9 @@ trebleStaff = \context Staff = treble< bass = { \clef bass; \bassIntro - \bassVerse1 + \bassVerseOne \bassEentje - \bassVerse1 + \bassVerseOne \bassThrough } @@ -455,12 +401,9 @@ grandStaff = \context PianoStaff < { \notes { \grandStaff } } > \paper { -% \translator { \OrchestralScoreContext } -% \translator { \OrchestralPartStaffContext } \translator { \HaraKiriStaffContext } } -%broken 1.1.51 -% \midi{ -% \tempo 4 = 54; -% } + \midi{ + \tempo 4 = 54; + } } diff --git a/ps/lily.ps b/ps/lily.ps index 662ac2ec53..75991aa5f0 100644 --- a/ps/lily.ps +++ b/ps/lily.ps @@ -4,14 +4,6 @@ % round cappings 1 setlinecap -% URG -% staffheight 4 div /interline exch def -% interline 3 div /bracket_b exch def -% interline 2 mul /bracket_w exch def -% stafflinethickness 2 mul /bracket_t exch def -% interline 1.5 mul /bracket_v exch def -% bracket_v /bracket_u exch def -% 50 /bracket_alpha exch def /draw_beam % width slope thick { @@ -61,7 +53,7 @@ 1 copy mul exch 1 copy mul add sqrt } bind def -/draw_tuplet % height dx dy thick dir +/draw_tuplet % height gap dx dy thick dir { % urg: the only Level-2 PS, check effect in print % true setstrokeadjust @@ -71,8 +63,8 @@ 1 setlinejoin /tuplet_dy exch def /tuplet_dx exch def + /tuplet_gapx exch def /tuplet_h exch def - staffheight 2 div /tuplet_gapx exch def tuplet_dy tuplet_dx div tuplet_gapx mul /tuplet_gapy exch def @@ -87,12 +79,12 @@ stroke } bind def -/draw_volta % w thick last +/draw_volta % h w thick last { /last exch def setlinewidth /volta_w exch def - staffheight 2 div /volta_h exch def + /volta_h exch def % urg: the only Level-2 PS, check effect in print % true setstrokeadjust 1 setlinecap diff --git a/scm/lily.scm b/scm/lily.scm index 268a383d62..dbc8381e43 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -49,8 +49,7 @@ (string-append (number->string (cadr c)) " "))) -(define - (font i) +(define (font i) (string-append "font" (make-string 1 (integer->char (+ (char->integer #\A) i))) @@ -316,11 +315,11 @@ (define (text s) (string-append "\\hbox{" (output-tex-string s) "}")) - (define (tuplet ht dx dy thick dir) - (embedded-ps ((ps-scm 'tuplet) ht dx dy thick dir))) + (define (tuplet ht gapx dx dy thick dir) + (embedded-ps ((ps-scm 'tuplet) ht gapx dx dy thick dir))) - (define (volta w thick last) - (embedded-ps ((ps-scm 'volta) w thick last))) + (define (volta h w thick last) + (embedded-ps ((ps-scm 'volta) h w thick last))) ;; TeX ;; The procedures listed below form the public interface of TeX-scm. @@ -401,7 +400,7 @@ (define (cached-fontname i) (string-append - " lilyfont" + "lilyfont" (make-string 1 (integer->char (+ 65 i))))) (define (select-font font-name) @@ -477,9 +476,12 @@ (define (header-end) "") (define (lily-def key val) - (string-append - "/" key " {" val "} bind def\n")) + (if (string=? (substring key 0 (string-length "mudelapaper") ) "mudelapaper") + (string-append "/" key " {" val "} bind def\n") + (string-append "/" key " (" val ") def\n") + ) + ) (define (header creator generate) (string-append "%!PS-Adobe-3.0\n" @@ -527,14 +529,14 @@ (string-append "(" s ") show ")) - (define (volta w thick last) + (define (volta h w thick last) (string-append - (numbers->string (list w thick (inexact->exact last))) + (numbers->string (list h w thick (inexact->exact last))) " draw_volta")) - (define (tuplet ht dx dy thick dir) + (define (tuplet ht gap dx dy thick dir) (string-append - (numbers->string (list ht dx dy thick (inexact->exact dir))) + (numbers->string (list ht gap dx dy thick (inexact->exact dir))) " draw_tuplet")) diff --git a/scripts/abc-2-ly.py b/scripts/abc-2-ly.py index 342b3d2d2c..dd4bcf2637 100644 --- a/scripts/abc-2-ly.py +++ b/scripts/abc-2-ly.py @@ -23,9 +23,12 @@ except: header = {} +lyrics = [] +voices = [] global_voice_stuff = [] default_len = 4 global_key = [0] * 7 # UGH +names = ["One", "Two", "Three"] DIGITS='0123456789' HSPACE=' \t' @@ -51,6 +54,12 @@ class Rational: pass +def dump_global (): + print ("global = \\notes{") + for i in global_voice_stuff: + print (i); + print ("}") + def dump_header (hdr): print '\\header {' @@ -58,6 +67,36 @@ def dump_header (hdr): print '%s = "%s";\n'% (k,hdr[k]) print '}' +def dump_lyrics (): + for i in range (len (lyrics)): + print ("verse%s = \\lyrics {" % names [i]) + print (lyrics [i]) + print ("}") + +def dump_voices (): + for i in range (len (voices)): + print ("voice%s = \\notes {" % names [i]) + print (voices [i]) + print ("}") + +def dump_score (): + print ("\\score{") + print (" \\notes<") + print (" \\global") + for i in range (len (voices)): + print (" \\context Staff=%s \\voice%s" % + (names [i], names [i])) + for i in range (len (lyrics)): + j = i + if j >= len (voices): + j = len (voices) - 1 + print (" \\context Lyrics=%s \\rhythm \\voice%s \\verse%s" % + (names [i], names [j], names [i])) + print (" >") + dump_header (header) + #print "%%%s" % global_voice_stuff, 1 + print ("}") + def set_default_length (s): m = re.search ('1/([0-9]+)', s) if m: @@ -70,11 +109,11 @@ def gulp_file(f): n = i.tell () i.seek (0,0) except: - print 'can\'t open file: ' + f + '\n' + sys.stderr.write ("can't open file: %s\n" % f) return '' s = i.read (n) if len (s) <= 0: - print 'gulped empty file: ' + f + '\n' + sys.stderr.write ("gulped emty file: %s\n" % f) i.close () return s @@ -191,7 +230,7 @@ def try_parse_tuplet_begin (str, state): str = str[1:] state.parsing_tuplet = 1 - print '\\times %s {' % tup_lookup[dig] + voices_append ("\\times %s {" % tup_lookup[dig]) return str def try_parse_group_end (str, state): @@ -199,14 +238,30 @@ def try_parse_group_end (str, state): str = str[1:] if state.parsing_tuplet: state.parsing_tuplet = 0 - print '}' + voices_append ("}") return str def header_append (key, a): s = '' if header.has_key (key): s = header[key] + "\n" - header [key ] = s + a + header [key] = s + a + +def lyrics_append (a): + i = len (lyrics) - 1 + if i < 0: + i = 0 + if len (lyrics) <= i: + lyrics.append ('') + lyrics [i] = lyrics [i] + a + "\n" + +def voices_append (a): + i = len (voices) - 1 + if i < 0: + i = 0 + if len (voices) <= i: + voices.append ('') + voices [i] = voices [i] + a + "\n" def try_parse_header_line (ln): m = re.match ('^(.): *(.*)$', ln) @@ -239,8 +294,11 @@ def try_parse_header_line (ln): header ['subtitle'] = a if g == 'L': set_default_length (ln) - - + if g == 'W': + if not len (a): + lyrics.append ('') + else: + lyrics_append (a); return m def pitch_to_mudela_name (name, acc): @@ -369,9 +427,10 @@ def try_parse_note (str, parser_state): - print '%s%s%s' % (pitch_to_mudela_name(notename, acc + global_key[notename]) , octave_to_mudela_quotes (octave), - duration_to_mudela_duration ((num,den), default_len, current_dots)) - + voices_append ("%s%s%s" % + (pitch_to_mudela_name (notename, acc + global_key[notename]), + octave_to_mudela_quotes (octave), + duration_to_mudela_duration ((num,den), default_len, current_dots))) slur_end =0 if str[0] == ')': slur_begin = 1 @@ -434,22 +493,22 @@ def try_parse_bar (str): sys.stderr.write ("warning: repeat kludge\n") bs = '|:' if bs: - print '\\bar "%s";' % bs + voices_append ('\\bar "%s";' % bs) str = str[1:] if str and str[:2] == '[|': sys.stderr.write ("warning: thick-thin bar kludge\n") - print '\\bar "||";' + voices_append ('\\bar "||";') str = str[2:] if str and str[:2] == ':|': sys.stderr.write ("warning: repeat kludge\n") - print '\\bar ":|:";' + voices_append ('\\bar ":|:";') str = str[2:] if str and str[:2] == '::': sys.stderr.write ("warning: repeat kludge\n") - print '\\bar ":|:";' + voices_append ('\\bar ":|:";') str = str[2:] return str @@ -458,11 +517,11 @@ def try_parse_bar (str): def try_parse_chord_delims (str): if str and str[0] == '[': str = str[1:] - print '<' + voices_append ('<') if str and str[0] == ']': str = str[1:] - print '>' + voices_append ('>') return str @@ -470,11 +529,11 @@ def try_parse_chord_delims (str): def try_parse_grace_delims (str): if str and str[0] == '{': str = str[1:] - print '\\grace { ' + voices_append ('\\grace { ') if str and str[0] == '}': str = str[1:] - print '}' + voices_append ('}') return str @@ -548,14 +607,11 @@ for opt in options: for f in files: if f == '-': f = '' - - print ("\\score{") - print (" <") - print (" \\context Staff=one \\notes {") parse_file (f) - print (" }") - print (" >") - dump_header (header) - print "%%%s" % global_voice_stuff, 1 - print ("}") + + dump_global () + dump_lyrics () + dump_voices () + dump_score () + diff --git a/scripts/mudela-book.py b/scripts/mudela-book.py index 46b6a61778..eafc978c0e 100644 --- a/scripts/mudela-book.py +++ b/scripts/mudela-book.py @@ -63,7 +63,7 @@ # - bf: Default fragments have linewidth=-1.0 # - Added 'singleline' and 'multiline' options. # 0.5.6: -# - \mudelafile{} set linewith correct, -1 for .sly and texlinewidth for .fly +# - \mudelafile{} set linewidth correct, -1 for .sly and texlinewidth for .fly # - changes to Mudela_output # - changed RE to search for pre/postMudelaExample to make it possible to # comment out a definition. @@ -85,6 +85,8 @@ fontsize_i2a = {11:'eleven', 13:'thirteen', 16:'sixteen', 20:'twenty', 26:'twentysix'} fontsize_pt2i = {'11pt':11, '13pt':13, '16pt':16, '20pt':20, '26pt':26} +# perhaps we can do without this? + begin_mudela_re = re.compile ('^ *\\\\begin{mudela}') begin_verbatim_re = re.compile ('^ *\\\\begin{verbatim}') end_verbatim_re = re.compile ('^ *\\\\end{verbatim}') @@ -600,6 +602,7 @@ class Main_tex_input(Tex_input): f = open (full_path, 'r') lines =f.readlines () + self.mudela.write ('%% This is a copy of file %s\n' % full_path) for x in lines: self.mudela.write (x) r = file_ext_re.search(fn) diff --git a/stepmake/aclocal.m4 b/stepmake/aclocal.m4 index 602d77213a..d579266f49 100644 --- a/stepmake/aclocal.m4 +++ b/stepmake/aclocal.m4 @@ -1,7 +1,5 @@ dnl WARNING WARNING WARNING WARNING dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4 -dnl WARNING WARNING WARNING WARNING -dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4 dnl aclocal.m4 -*-shell-script-*- dnl StepMake subroutines for configure.in diff --git a/tex/lilyponddefs.tex b/tex/lilyponddefs.tex index 5dc69f9e60..5ef348b4dd 100644 --- a/tex/lilyponddefs.tex +++ b/tex/lilyponddefs.tex @@ -46,17 +46,11 @@ %% set up dimensions % mudela-book don't like this: %\parindent=0pt -\newdimen\smallspace \newdimen\interlinedist -\newdimen\stemthickness \newcount\n %duh. meaningful identifiers. \newdimen\staffheight -\newdimen\notewidth -\newdimen\noteheight \newdimen\stafflinethickness -\newdimen\interstaffline -\newdimen\dist %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % set fonts and primary dimensions @@ -121,13 +115,8 @@ % this has to be synced with the font definition \def\musixcalc{ - \notewidth=\mudelapapernotewidth pt - \smallspace=.3\interlinedist - \interstaffline=\staffheight - \divide\interstaffline by 4 \stafflinethickness=\mudelapaperrulethickness pt - \stemthickness=\stafflinethickness }