]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-0.1.59
authorfred <fred>
Sun, 24 Mar 2002 20:10:47 +0000 (20:10 +0000)
committerfred <fred>
Sun, 24 Mar 2002 20:10:47 +0000 (20:10 +0000)
123 files changed:
Documentation/INSTALL.pod
Documentation/Makefile
Documentation/colorado.bib [new file with mode: 0644]
Documentation/engraving.bib
Documentation/fonts.tex
Documentation/literature.pod
Documentation/man/Makefile [new file with mode: 0644]
Documentation/man/convert-mudela.pod [new file with mode: 0644]
Documentation/man/lilypond.pod [new file with mode: 0644]
Documentation/man/ly2dvi.pod [new file with mode: 0644]
Documentation/man/mi2mu.pod [new file with mode: 0644]
Documentation/man/mudela-book.pod [new file with mode: 0644]
Documentation/mudela.doc
Documentation/vocabulary-data
Documentation/vocabulary-forms.el
NEWS
TODO
VERSION
bin/Makefile
bin/conflily.sh
bin/flower.py
bin/genheader.py [new file with mode: 0644]
bin/ly2dvi.sh
bin/make-patch.py
bin/mutopia-index.py [new file with mode: 0644]
bin/profile-conf.sh [new file with mode: 0644]
bin/ps-to-gifs.sh
config.make.in
configure.in
flower/NEWS
flower/VERSION
flower/choleski.cc
flower/full-storage.cc
flower/include/choleski.hh
flower/include/full-storage.hh
flower/include/full-storage.icc
flower/include/matrix-storage.hh
flower/include/matrix.hh
flower/include/offset.hh
flower/include/scalar.hh
flower/include/text-stream.hh
flower/include/varray.hh
flower/include/vector.hh
flower/matrix-debug.cc
flower/matrix.cc
flower/offset.cc
flower/scalar.cc
flower/vector.cc
init/engraver.ly
init/table11.ly
init/table13.ly
init/table16.ly
init/table20.ly
init/table26.ly
input/Makefile
input/bugs/Makefile [new file with mode: 0644]
input/bugs/beam-bug.ly [new file with mode: 0644]
input/bugs/slur-bug.ly [new file with mode: 0644]
input/part.ly [new file with mode: 0644]
input/test/Makefile [new file with mode: 0644]
input/test/abbrev.ly [new file with mode: 0644]
input/test/beams.ly [new file with mode: 0644]
input/test/clefs.ly [new file with mode: 0644]
input/test/collisions.ly [new file with mode: 0644]
input/test/denneboom.ly [new file with mode: 0644]
input/test/font-body.ly [new file with mode: 0644]
input/test/font.ly [new file with mode: 0644]
input/test/font11.ly [new file with mode: 0644]
input/test/font13.ly [new file with mode: 0644]
input/test/font16.ly [new file with mode: 0644]
input/test/font20.ly [new file with mode: 0644]
input/test/font26.ly [new file with mode: 0644]
input/test/gourlay.ly [new file with mode: 0644]
input/test/sleur.ly [new file with mode: 0644]
input/test/slurs.ly [new file with mode: 0644]
input/test/spacing.ly [new file with mode: 0644]
input/test/stem.ly [new file with mode: 0644]
input/test/test-lyrics.ly [new file with mode: 0644]
lily/bar-grav.cc
lily/bow.cc
lily/clef-item.cc
lily/include/bar-grav.hh
lily/include/bezier.hh
lily/include/lily-proto.hh
lily/include/lookup.hh
lily/include/main.hh
lily/include/multi-measure-rest-engraver.hh [new file with mode: 0644]
lily/include/multi-measure-rest.hh [new file with mode: 0644]
lily/include/musical-request.hh
lily/include/timing-grav.hh
lily/include/timing-translator.hh
lily/ineq-constrained-qp.cc
lily/lookup.cc
lily/main.cc
lily/multi-measure-rest-engraver.cc [new file with mode: 0644]
lily/multi-measure-rest.cc [new file with mode: 0644]
lily/musical-request.cc
lily/my-lily-parser.cc
lily/p-score.cc
lily/slur.cc
lily/spring-spacer.cc
lily/tex-beam.cc
lily/timing-grav.cc
lily/timing-translator.cc
make/Docrules.make [new file with mode: 0644]
make/Install_outfiles.make [new file with mode: 0644]
make/Makefile
make/Manual.make [new file with mode: 0644]
make/Mutopia.make
make/Rules.make
make/WWW.make [new file with mode: 0644]
make/lilypond.spec.in
mf/feta-generic.mf
mf/feta-haak.mf
mutopia/J.S.Bach/Makefile
mutopia/Makefile
mutopia/TODO [new file with mode: 0644]
mutopia/los-toros-oboe.ly
test/Makefile
test/bow.cc
tex/fetdefs.tex
tex/lily-ps-defs.tex
tex/lilyponddefs.tex

index b1fd8f6f7652a66e0959b807b9baf95844550e0b..a52cccadc72c41a74842d2618e3887a29c5b94eb 100644 (file)
@@ -34,6 +34,9 @@ work in Windows NT/95, but we don't promise to support it.
 
 GNU C++ version 2.7 or newer (yes, 2.8 is fine).
 
+=item *
+
+Python
 
 =back
 
@@ -41,7 +44,6 @@ GNU C++ version 2.7 or newer (yes, 2.8 is fine).
 
 GNU LilyPond does use a lot of resources. For operation you need the following:
 
-
 =over 5
 
 =item *
@@ -73,6 +75,7 @@ Flex (version 2.5.4 or newer).
 =item *
 
 Bison (version 1.25 or newer).
+
 =item *
 
 Perl-5.  Most documentation was created with the perl's Plain Old
@@ -101,6 +104,7 @@ most MusiXTeX preprocessors)
 to install GNU LilyPond, simply type:
 
        configure
+       make
        make install
 
 This will install the following files:
@@ -175,6 +179,12 @@ Set then directory TeX input is in (detected as a subdir of tex-prefix)
 
 Set the directory mf input is in (idem)
 
+=item B<--enable-config>
+
+Output to different configuration files.  Needed for multi-platform
+builds
+
+
 =back
 
 All options are documented in the F<configure> help
@@ -188,6 +198,24 @@ everything will be compiled, but nothing will be installed.  The
 resulting binaries can be found in the subdirectories F<out/> (which
 contain all files generated during compilation).
 
+=head1 CONFIGURING FOR MULTIPLE PLATFORMS
+
+If you want to compile LilyPond with different configuration settings,
+then, you can use the B<--enable-config> option.  Example: suppose I
+want to build with and   without profiling.  Then I'd use the
+following for the normal build, 
+
+      configure --prefix=~ --disable-optimise --enable-checking
+      make
+      make install
+
+and for the profiling version, I specify a different configuration.
+
+      configure --prefix=~ --enable-profiling --enable-config=optprof --enable-optimise --disable-checking
+      make configuration=optprof
+      make configuration=optprof install
+
+
 =head1 INSTALLING
 
 If you have done a successful C<make>, then a simple
@@ -275,52 +303,6 @@ to unpack the distribution, make sure the B<entire> source tree
 is unpacked correctly, in particular the empty out directories 
 (F<flower/out>, F<lib/out> et. al.)
 
-=head1 MUSIXTEX
-
-Previous versions (before 0.1.39) used fonts from the TeX macro
-package "MusixTeX".  You can still use these, but they are not
-supported.  Since LilyPond's Feta font is much prettier, you'd be
-seriously misguided if you used them, but anyway, here are the 
-installation instructions for those deprecated fonts.
-
-
-[obsolete] I use the MusixTeX fonts those found in MusixTeX
-T.73. Beware, the clef symbol seems to have changed its position in
-some versions, (notably Egler's, a.k.a. OpusTeX). The MusixTeX fonts
-are included in MusixTeX (T73 or newer), which can be had from any
-CTAN site, e.g. at
-
-=over 4
-
-=item ftp://ftp.shsu.edu/tex-archive/macros/musixtex/taupin
-
-=item ftp://ftp.tex.ac.uk/tex-archive/macros/musixtex/taupin
-
-=item ftp://ftp.dante.de/tex-archive/macros/musixtex/taupin
-
-=back 
-
-You only need the contents of the F<mf/> subdirectory of the
-package. The primary site of the Taupin version is
-ftp://hprib.lps.u-psud.fr/pub/music_zips/musixtex.zip
-
-Install the musixtex fonts in a directory which TeX and MF knows (if
-you are root, look for a directory which contains the directories with
-AMS and CM source (*.mf) files. Create a subdir lilypond or musixtex
-and copy the fonts into that). Do not forget to rehash TeX (if
-applicable)
-
-Example: my fonts are in F</usr/local/lib/texfonts/musixtex/>, and I
-have a symlink pointing to that in
-F</usr/lib/texmf/texmf/fonts/source/public/>. After I copied the
-files, I ran "texhash"
-
-Andreas Egler's version of MusixTeX, now called OpusTeX, will also
-work. Andreas moved some characters around in the fonts, so you have
-to edit the definitions in F<tex/eglerdefs.tex>.
-
-
-
 =head1 AUTHORS
 
 Han-Wen Nienhuys <hanwen@cs.ruu.nl>
index 47df8c5935f7f5461e0f3c65dbe769db516c06ef..27248c9ad8793ac4e29d0a09372b13da4ecdc2cf 100644 (file)
@@ -8,6 +8,7 @@ depth = ..
 # identify module:
 #
 NAME = Documentation
+SUBDIRS=man
 
 #
 
@@ -16,13 +17,14 @@ NAME = Documentation
 include ./$(depth)/make/Variables.make 
 include ./$(depth)/make/Version.make
 include ./$(depth)/make/Files.make 
-include ./Rules.make
+include ./$(depth)/make/Docrules.make
 #
 
 
 #
 DOCFILES = $(wildcard *.doc)
 OUTPODFILES = $(addprefix $(outdir)/,$(PODFILES))
+BIBFILES= $(wildcard *.bib)
 TEXTFILES = $(OUTPODFILES:.pod=.txt)
 GROFFFILES = $(OUTPODFILES:.pod=.1)
 HTMLFILES = $(OUTPODFILES:.pod=.html)
@@ -39,33 +41,16 @@ giffiles=$(XPMS:.xpm=.gif)
 gifs: $(addprefix $(outdir)/, $(giffiles))
 
 
-EXTRA_DISTFILES = $(XPMS)  $(DOCFILES)  vocabulary-data vocabulary-forms.el fonts.tex automake.urgh engraving.bib
+EXTRA_DISTFILES = $(XPMS)  $(DOCFILES)  vocabulary-data vocabulary-forms.el fonts.tex automake.urgh $(BIBFILES)
 
 # don't do DVI files. They can only be made if lily is installed
 do-doc: $(TEXTFILES)
 
 html: $(HTMLFILES)
 
-htmldist: html
-       $(lily_bindir)/make_website
-
 dvi: $(DVIFILES)
 
 # generic targets and rules:
 #
 include $(depth)/make/Targets.make
 include $(depth)/make/Rules.make
-
-MAN1FILES = lilypond convert-mudela mi2mu mudela-book
-MAN1GROFF = $(addprefix $(outdir)/, $(addsuffix .1,$(MAN1FILES)))
-
-localinstall: $(outdir)/lilypond.1
-       $(INSTALL) -d $(mandir)/man1
-       $(INSTALL) -m 644 $(MAN1GROFF) $(mandir)/man1
-
-
-localuninstall:
-       (cd  $(mandir)/man1/; rm -f $(MAN1GROFF))
-
-
-
diff --git a/Documentation/colorado.bib b/Documentation/colorado.bib
new file mode 100644 (file)
index 0000000..2955972
--- /dev/null
@@ -0,0 +1,452 @@
+%
+% from the University of Colorado Engraving page (by Alyssa Lamb)
+%
+
+@Book {
+author ={Jacob, Archibald},
+year={ 1947},
+title = {Musical handwriting : or, How to put music on paper : A handbook for all musicians, professional and amateur},
+address ={   London}
+publisher ={Oxford University Press}, 
+subject = { Musical notation},
+}
+
+@Book {
+author ={Brandt, Carl, and Roemer, Clinton},
+title = {Standardized Chord Symbol Notation},
+address={Sherman Oaks, CA}
+publisher={Roerick Music Co.}
+}
+
+@Book {
+author = {Johnson, Harold M},
+year = {1946},
+title = {How to write music manuscript an exercise-method handbook for the  music student, copyist, arranger, composer, teacher},
+publisher={ Carl Fischer, Inc. }
+address= {New York}
+subject = {Musical notation --Handbooks, manuals},
+}
+
+@Book {
+title = {Music Printing & Publishing},
+editedby={ Donald W. Krummel \& Stanley Sadie},
+author = {?}
+year = {1990},
+series={ The Norton/Grove Handbooks in Music.}
+publisher={W.W. Norton}
+}
+
+@Book {
+author={Foss, Hubert},
+title = {Music Printing},
+series = {Practical Printing and Binding},
+address={  London},
+publisher={  Oldhams Press Ltd., Long Acre.}
+}
+
+@Book {
+author = {Steele, Robert},
+year = {1903},
+title = {The Earliest English Music Printing},
+address={  London},
+}
+@Book {
+author={Austin, Ernest},
+title = {The Story of Music Printing},
+address={ London},
+publisher={Lowe and Brydone Printers, Ltd.}
+}
+
+}
+
+@Book {
+title = {Pictoral History of Music Printing},
+address={E;lhardt, Indiana}
+publisher={H. and A. Selmer, Inc.}
+}
+
+@Book {
+author = {Scholderer, Victor},
+year = {1963},
+title = {Johann Gutenberg},
+address={ London},
+publisher={  British Museum},
+}
+
+@Book{
+author = {Wintermitz, Emmanuel},
+year = {1955},
+title = {Musical Autographs from Monteverdi to Hindemith},
+address={Princeton}
+publisher={Princeton University Press},
+}
+
+@Book{
+author = {Wolf, Johannes},
+year = {1919},
+title = {Handbuch der Notationskunde},
+address={Leipzig},
+publisher={  Breitkopf & Hartel.} 
+}
+@Book{
+
+author = {Novello, A},
+year = {1847},
+title = {Some Account of the Methods of Musick Printing, with Specimens of the Various Sizes of Moveable Types and of Other Matters},
+address={  London}.
+}
+
+@Book{
+author={Chrsander, F.}
+year={18??}
+title={A Sketch of the HIstory of Music printing, from the 15th to the 16th century},
+}
+@Book{
+author = {Squire, W},
+year = {1897},
+title = {Notes on Early Music Printing},
+, title = {Bibliographica},
+, iii, 99.
+}
+
+@Book{
+author = {Meyer, K. and O'Meara, J},
+year = {1935},
+title = {The Printing of Music, 1473-1934},
+, title = {The Dolphin},
+, ii, p.171-207.
+
+@Book{
+author = {Pattison, B},
+year = {1939},
+title = {Notes on Early Music Printing},
+,title = {The Library},
+, 4th ver., xix, p.389-421. 
+}
+
+@Book{
+author = {Barksdale, A},
+year = {1957},
+title = {The Printed Note: 500 Years of Music Printing and Engraving},
+address={Toledo, Ohio}
+note={(exhibition catalogue, the Toledo Museum of Art).}
+}
+
+@Book{
+author = {King, H},
+year = {1964},
+title = {Four Hundred Years of Music Printing},
+London.
+}
+
+@Book{
+Gamble, W.  1923 (Rev. 1971).  title = {Music Engraving and Pinting, Historical And Technical Treatise},
+Londond.  
+
+Deutsch, O.F.  1946 (Rev.1961).  title = {Music Publishers' Numbers},
+London. 
+}
+
+@Book{
+author = {Marco, G.A},
+year = {1962},
+title = {The Earliest Music Printers of Continental Europe: a Checklist of Facsimiles Illustrating Their Work},
+Charlottesville, Virginia.
+}
+
+@Book{
+author = {Kinkeldey, O},
+year = {1932},
+title = {Music And Music Printing in Incunabula},
+, title = {Papers of the Bibliographical Society of America},
+, xxvi, p.89-118.
+}
+
+@Book{
+author = {Oldman, C.B},
+year = {1934},
+title = {Collecting Musical First Editions},
+London.
+Also in: Carter, J.  1934. title = {New Paths in Book Collecting},
+London.
+
+Krummel, D.W.  1958-9.    title = {Graphic Analysis in Application to Early American Engraved Music},
+, title = {Notes},
+, xvi, p.213.
+}
+
+@Book{
+author = {Krummel, D.W},
+year = {1971},
+title = {Oblong Format in Early Music Books},
+,  title = {The Library},
+, 5th ser., xxvi, p.312.
+}
+
+@Book{
+author = {King, A.H},
+year = {1973},
+title = {The 50th Anniversary of Music Printing},
+, title = {M_________},
+, cxiv.
+}
+
+@Book{
+Rastall, Richard.  1982. title = {The notation of Western music : an introduction},
+New York, N.Y.:  St. Martin's Press.   
+subject = { Musical notation},
+
+
+}
+
+@Book{
+author = {Tappelot, Willy},
+year = {1947},
+title = {La Notation Musicale},
+Paris:  Neuchatel. 
+}
+
+@Book{
+author = {Williams, C.F. Abdy},
+year = {1903},
+title = {The Story of Notation},
+New York:  Charles Scribner's Sons.
+}
+
+@Book{
+author = {Rosenthal, Carl A},
+year = {1967},
+title = {A Practical Guide to Music Notation},
+New York: MCA Music.
+
+<UL>}
+
+@Book{
+Apel, Willi.  1953. title = {The notation of polyphonic music, 900-1600.},
+Cambridge, Mass.: Mediaeval Academy of America.  
+subject = {Musical notation},
+}
+
+@Book{
+
+
+Berger, Anna Maria Busse. 1993.  title = {Mensuration and proportion signs : origins and evolution},
+Oxford, England: Clarendon Press; New York: Oxford University Press .
+}
+
+@Book{
+Parrish, Carl. 1957. title = {The notation of medieval music},
+New York : Norton.  
+subject = {Musical notation},
+
+
+}
+
+@Book{
+author = {Parrish, Carl},
+year = {1946},
+title = { The Notation of Medieval Music},
+New York: Carl Fischer, Inc.   
+}
+
+@Book{
+author = {Patch, Harry},
+year = {1949},
+title = { Genesis of a Music},
+Madison: University of Wisconsin Press.  
+}
+
+@Book{
+Cage, John. 1969.  title = {Notations},
+New York: Something Else Press.   
+subject = { Music, Manuscripts, Facsimiles},
+
+(Facsimiles of holographs from the Foundation for Contemporary Performance Arts, with text by 269 composers, but rearranged using   title = {chance operations.},
+) 
+}
+
+@Book{
+author = {Gaburo, Virginia},
+year = {1977},
+title = {Notation},
+publisher= {Lingua Press:  La Jolla, California}. 
+subject = { A Lecture about notation, new ideas about},
+
+
+}
+
+@Book{
+author = {Risatti, Howard},
+year = {1975},
+title = {New Music Vocabulary},
+Urbana, Illinois: University of Illinois Press.  
+subject = { A Guide to Notational Signs for Contemporary Music},
+
+
+}
+
+@Book{
+author = {Boehm, Laszlo},
+year = {1961},
+Modern Music Notation.  New York: G. Schirmer, Inc.  
+}
+
+@Book{
+author = {Cowell, Henry},
+year = {1930},
+title = {New Musical Resources},
+New York: Alfred A. Knopf, Inc. 
+
+author = {Cowell, Henry},
+year = {1927},
+title = {Our Inadequate Notation},
+,title = {Modern Music},
+, Vol. 4, No. 3.  
+}
+
+@Book{
+author = {Bowers, Roger},
+year = {1992},
+title = {Music & Letters},
+v73, n3, August, p347(52)
+
+Some reflection upon notation and proportion in Monteverdi's mass and vespers.
+}
+
+@Book{
+author = {Brainard, Paul},
+year = {1992},
+title = {Current Musicology},
+n50, July-Dec, p21(26) 
+
+Proportional notation in the music of Schutz and his contemporaries in the 17th Century.}
+
+@Book{
+
+author = {Monelle, Raymond},
+year = {1989},
+title = {Comparative Literature},
+v41, n3, Summer, p252(18)
+
+Music notation and the poetic foot.
+}
+
+@Book{
+author = {Pinegar, Sandra},
+year = {1993},
+title = {Current Musicology},
+n53, July, p99(10) 
+The seeds of notation and music paleography.
+
+author = {Smith, Norman E},
+year = {1990},
+title = {Current Musicology},
+n45-47, Jan-Dec, p283(22)
+
+The notation of fractio modi.
+}
+
+@Book{
+author = {Treitler, Leo},
+year = {1992},
+title = {The Journal of Musicology},
+v10, n2, Spring, p131(61)
+
+The   title = {unwritten},
+and   title = {written transmission},
+of medieval chant and the start-up of musical notation. 
+
+Notational practice developed in medieval music to address the written tradition for chant which interacted with the unwritten vocal tradition...
+}
+
+@Book{
+author = {West, M.L},
+year = {1994},
+title = {Music & Letters},
+v75, n2, May, p161(19)
+The Babylonian musical notation and the Hurrian melodic texts. 
+
+A new way of deciphering the ancient Babylonian musical notation... 
+
+}
+
+@Book{
+author = {Brown, Earle},
+year = {1986},
+title = {Musical Quarterly},
+v72, Spr, p180(22)
+
+The notation and performance of new music.
+}
+
+@Book{
+author = {Eggleston, Suzanne},
+year = {1994},
+
+title = {Notes},
+v51, n2, Dec, p657(7) 
+
+New periodicals
+
+A list of new music periodicals covering the period Jun.-Dec. 1994. Includes aims, formats and a description of the contents of each listed periodical. Includes   title = {Music Notation News},
+
+}
+
+@Book{
+
+author = {Fuller, David},
+year = {1989},
+title = {The Journal of Musicology},
+v7, n1, Wntr, p21(8)
+
+Notes and inegales unjoined: defending a definition. (written-out inequalities in music notation).        
+}
+
+@Book{
+
+author = {Jones, David Evan},
+year = {1990},
+title = {Perspectives of New Music},
+
+
+Speech extrapolated. (includes notation)
+
+}
+
+@Book{
+
+author = {Lependorf, Jeffrey},
+year = {1989},
+I>Perspectives of New Music</I> v27, n2, Summer, p232(20)
+
+Contemporary notation for the shakuhachi: a primer for composers. (Tradition and Renewal in the Music of Japan) 
+
+}
+
+@Book{
+author = {Rastall, Richard},
+year = {1993},
+title = {Music & Letters},
+v74, n4, Nov, p639(2)
+Equal Temperament Music Notation: The Ailler-Brennink Chromatic Notation. Results and Conclusions of the Music Notation Refor by  the Chroma Foundation  (book reviews).
+}
+
+@Book{
+<UL>
+Francois, Jean-Charles.title = {Perspectives of New Music},
+v30, n1, Wntr, p6(15)
+
+1992.
+Writing without representation, and unreadable notation. by Jean-Charles Francois. 
+Modern music has outgrown notation. While the computer is used to write down music with accuracy never before achieved, the range of modern sounds has surpassed the relevance of the computer...
+}
+
+@Book{
+author = {Hamel, Keith A},
+year = {1989},
+
+title = {Perspectives of New Music},
+v27, n1, Wntr, p70(14)
+
+A design for music editing and printing software based on notational syntax. (computer music) 
+
index 5b8a1ba4bab70504f0fc7e59d136ebbaff0390fe..ad34b6a0a320bbda1bd6c648aceb066d4384450b 100644 (file)
-@Book{wanske,
-  author =      {Helene Wanske},
-  ALTeditor =   {},
-  title =       {Musiknotation --- Von der Syntax des Notenstichs zum
-EDV-gesteuerten Notensatz},
-  publisher =   {Schott-Verlag, Mainz},
-  year =        {1988},
-  OPTkey =      {},
-  OPTvolume =   {},
-  OPTnumber =   {},
-  OPTseries =   {},
-  OPTaddress =          {},
-  OPTedition =          {},
-  OPTmonth =    {},
-  OPTnote =     {ISBN 3-7957-2886-x},
-  OPTannote =   {}
-}
-
-
 @Book{rastall,
   author =      {Richard Rastall},
   ALTeditor =   {},
   title =       {The Notation of Western Music: an
-Introduction},
+  Introduction},
   publisher =   {J. M. Dent \6& Sons London},
   year =        {1983},
-  OPTkey =      {},
-  OPTvolume =   {},
-  OPTnumber =   {},
-  OPTseries =   {},
-  OPTaddress =          {},
-  OPTedition =          {},
-  OPTmonth =    {},
-  OPTnote =     {},
-  OPTannote =   {}
+  key =         {},
+  volume =      {},
+  number =      {},
+  series =      {},
+  address =     {},
+  edition =     {},
+  month =       {},
+  note =        {},
+  comment = {Interesting account of the evolution and origin of common notation starting from neumes, and ending with modern innovations HWN},
+  annote =      {},
 }
 
 @Book{ross,
-author =        {Ted Ross},
+  author =      {Ted Ross},
   title =       {Teach yourself the art of music engraving and processing},
   publisher =   {Hansen House},
   year =        {1987},
+  key =         {},
+  volume =      {},
+  number =      {},
+  series =      {},
+  address =     {},
+  edition =     {},
+  month =       {},
+  comment =     {This is about engraving, i.e.  professional typesetting.  It contains
+  directions on good typesetting, but the sections on reproduction
+  technicalities, how to use pens and history are interesting.
+  Especially the section on Music Typewriters is amusing HWN},
+  annote =      {},
+}
+
+@Article{blostein94,
+  author =      {Dorothea Blostein and Lippold Haken},
+  title =       {The Lime Music Editor: A Diagram Editor Involving Complex
+  Translations},
+  journal =     {Software Practice and Experience},
+  year =        {1994},
+  key =         {},
+  volume =      {24},
+  number =      {3},
+  month =       {march},
+  pages =       {289--306},
+  note =        {},
+  annote =      {},
+  comment = {A description of various conversions, decisions and issues relating to this interactive editor HWN},
+}
+
+
+
+@Book {wanske,
+  comment = {I. A very thorough overview of engraving practices of various craftsmen. It includes detailed specs of characters, dimensions etc. II. a thorough overview of a anonymous (by now antiquated) automated system. EDV Means e(lektronischen) D(aten)v(erarbeitung), electronic data processing HWN},
+  year =  {1988},
+  title = {Musiknotation --- Von der Syntax des Notenstichs zum EDV-gesteuerten Notensatz},
+  author = {Helene Wanske},
+  publisher = {Schott-Verlag},
+  address = {Mainz},
+  isbn = {ISBN 3-7957-2886-x},
+}
+
+
+
+
+@Book{,
+  ALTauthor =   {},
+  ALTeditor =   {},
+  title =       {},
+  publisher =   {},
+  year =        {},
+  key =         {},
+  volume =      {},
+  number =      {},
+  series =      {},
+  address =     {},
+  edition =     {},
+  month =       {},
+  note =        {},
+  annote =      {},
+}
+
+
+
+@Book {,
+  year =  {1993},
+  title = {Standard Music Notation Practice},
+  author = {Maxwell Weaner and Walter Boelke},
+  totalentry = {revised edition by Arnold Broido and Daniel Dorff.},
+  publisher = { Music Publisher's Association of the United States Inc},
+  address = {New York}
+}
+
+
+
+@Book {,
+  comment = {Sound (boring) review of the various hairy rhythmic notations used by avant-garde composers HWN},
+  year =  {1978},
+  title = {Modern Rhythmic Notation},
+  author = {Gardner Read},
+  publisher = {Indiana University Press},
+}
+
+
+@Book {,
+  comment = {This is as close to the ``standard'' reference work for music notation issues as one is likely to get. MB},
+  title = {Music Notation: a Manual of Modern Practice},
+  author = {Gardner Read},
+  totalentry = {(2nd edition)},
+  publisher ={Taplinger Publishing},
+  address ={New York},
+  note = { (Out of print)},
+}
+
+
+@Book{,
+  ALTauthor =   {},
+  ALTeditor =   {},
+  title =       {},
+  publisher =   {},
+  year =        {},
   OPTkey =      {},
   OPTvolume =   {},
   OPTnumber =   {},
@@ -47,10 +130,432 @@ author =   {Ted Ross},
   OPTaddress =          {},
   OPTedition =          {},
   OPTmonth =    {},
-  OPTnote =     {This is about engraving, i.e.  professional typesetting.  It contains
-directions on good typesetting, but the sections on reproduction
-technicalities, how to use pens and history are interesting.
-Especially the section on Music Typewriters is amusing HWN},
+  OPTnote =     {},
   OPTannote =   {}
 }
 
+@Book {,
+  year =  {1948},
+  title = {Aus der Werkstatt eines Notenstechers},
+  author = {Karl Hader},
+  publisher = {Waldheim--Eberle Verlag},
+  address ={Vienna},
+
+  comment = {Hader was the chief-engraver of the Waldheim-Eberle music
+  publishers. This book contains the most important rules on engraving
+(according to [Chlapik])},
+
+}
+
+
+
+@Booklet {,
+  comment = {Pamphlet explaining some fine points in music font design HWN},
+  year =  {1996},
+  title = {Standard music notation specifications for computer programming. },
+  month =  {December},
+  publisher = {MPA},
+}
+
+@TechReport{,
+  comment = {Rules on formatting music formulated for use in computers. Mainly distilled from [Ross] HWN},
+  year =  {1988},
+  title = {Music Formatting Guidelines,},
+  author = {D. Roush},
+  note={Technical Report OSU-CISRC-3/88-TR10}, 
+  institution ={Department of Computer and Information Science, The Ohio State University},
+}
+
+
+
+@PhdThesis {,
+  year =  {1985},
+  title = {Music Notation by Computer},
+  author = {Donald Byrd},
+  institution = {Dissertation Indiana University},
+}
+
+
+@Article {,
+  year =  {1974},
+  title = {A System for Music Printing by Computer},
+  author = {Donald Byrd},
+  journal = {Computers and the Humanities},
+  volume ={ 8},
+  pages ={161-72},
+}
+
+
+@Book {,
+  comment = {If I remember correctly, this was concerned more with an input language than with the typography. SP},
+  year =  {1973},
+  title = {Editing and Printing Music by Computer},
+  author = {Leland Smith},
+  totalentry = {Journal of Music Theory},
+  volume={ 17},
+  pages ={292-309},
+}
+
+
+@PhdThesis {,
+  year =  {1975},
+  title = {A Computer-Oriented System for Music Printing},
+  author = {David A Gomberg},
+  school = {Washington University},
+}
+
+
+@Book {,
+  comment = {Annual editions since 1985, many containing surveys of music typesetting technology. SP},
+  title = {Directory of Computer Assisted Research in Musicology},
+  author = {Walter B Hewlett. and Eleanor Selfridge-Field},
+  totalentry = {Menlo Park, CA: Center for Computer Assisted Research in the Humanities},
+}
+
+
+@Book {,
+  title = {A Computer-oriented System for Music Printing},
+  author = {David A.  Gomberg; },
+
+  journal  = {Computers and the Humanities},
+  volume={11},
+  pages = {63-80},
+}
+
+
+@TechReport {,
+  comment = {Algorithm for generating spacing in one line of (polyphonic) music, tailored for use with MusiCopy. LilyPond uses a variant of it (as of pl 76) HWN},
+  year =  {1987},
+  title = {Spacing a Line of Music,},
+  author = {John S. Gourlay},
+  totalentry = {OSU-CISRC-10/87-TR35},
+  institution ={ Department of Computer and Information Science, The Ohio State University},
+}
+
+
+@TechReport {,
+  comment = {A brief overview of MusiCopy HWN},
+  year =  {1987},
+  title = {MusiCopy: An automated Music Formatting System},
+  author = {Allen Parish, Wael A. Hegazy, John S. Gourlay, Dean K. Roush and F. Javier Sola},
+  totalentry = {OSU-CISRC-10/87-TR29},
+  institution ={ Department of Computer and Information Science, The Ohio State University},
+}
+
+
+@TechReport {,
+  comment = {This paper discusses the development of algorithms for the formatting of musical scores (from abstract). It also appeared at PROTEXT III, Ireland 1986},
+  year =  {1987},
+  title = {Computer Formatting of Music,},
+  author = {John S. Gourlay, A. Parrish, D. Roush, F. Sola, Y. Tien},
+  totalentry = {OSU-CISRC-2/87-TR3},
+  institution ={Department of Computer and Information Science, The Ohio State University},
+}
+
+
+@TechReport {,
+  comment = {Describes the "parser" which converts MusiCopy MDL  to MusiCopy Simultaneities & columns HWN},
+  year =  {1987},
+  title = {On the Implementation of the MusiCopy Language Processor,},
+  author = {Wael A. Hegazy},
+  number = { OSU-CISRC-10/87-TR34},
+  institution={ Department of Computer and Information Science, The Ohio State University},
+}
+
+
+@TechReport {,
+  comment = {This generalizes TeX's breaking algorithm to music. It also appeared in Document Manipulation and Typography, J.C. van Vliet (ed) 1988. HWN},
+  year =  {1987},
+  title = {Optimal line breaking in music},
+  author = {Wael A. Hegazy and John S. Gourlay},
+  totalentry = { OSU-CISRC-8/87-TR33},
+  institution={Department of Computer and Information Science, The Ohio State University, },
+}
+
+
+@TechReport {,
+  comment = {User manual of MusiCopy. Includes an impressive example piece.  HWN},
+  year =  {1987},
+  title = {Using MusiCopy},
+  author = {Dean K. Roush},
+  totalentry = { OSU-CISRC-18/87-TR31},
+  institution={ Department of Computer and Information Science, The Ohio State University},
+}
+
+
+@TechReport {,
+  comment = {Placement of balls, stems, dots which occur at the same moment ("Simultaneity") HWN},
+  year =  {1987},
+  title = {Computer Formatting of Musical Simultaneities,},
+  author = {A. Parrish and John S. Gourlay},
+ institution={ Department of Computer and Information Science, The Ohio State University},
+}
+  totalentry = { OSU-CISRC-10/87-TR28},
+}
+
+
+@TechReport {,
+  comment = {Overview of a procedure for generating slurs HWN},
+  year =  {1987},
+  title = {Computer Design of Musical Slurs, Ties and Phrase Marks,},
+  author = {F. Sola},
+  institution={ Department of Computer and Information Science, The Ohio State University},
+  totalentry = { OSU-CISRC-10/87-TR32},
+}
+
+
+@TechReport {,
+  institution={ Department of Computer and Information Science, The Ohio State University},
+  comment = {Calculating beam slopes HWN},
+  year =  {1987},
+  title = {Design of Musical Beams,},
+  author = {F. Sola and D. Roush},
+  totalentry = { OSU-CISRC-10/87-TR30},
+}
+
+
+@Article {,
+  comment = {This paper describes the MusiCopy musicsetting system and an input language to go with it. HWN},
+  year =  {1986},
+  title = {A language for music printing},
+  author = {John. S. Gourlay},
+  journal = { Communications of the ACM},
+   volume= { 29 },
+  number ={5},
+  pages = {388--401},
+}
+
+
+
+
+@Article {,
+  comment = {A description of Lime internals (which resemble older (before 0.0.68pre) LilyPond data structures somewhat) HWN},
+  year =  {1993},
+  title = {The Tilia Music Representation: Extensibility, Abstraction, and Notation Contexts for the Lime Music Editor},
+  author = {Lippold Haken and Dorothea Blostein},
+  journal = { Computer Music Journal},
+  volume= {17},
+  number={ 3},
+  pages = {43--58},
+}
+
+
+@Article {,
+  comment = {This describes an algorithm which uses springs between adjacent columns. This algorithm is a "subclass" of the LilyPond algorithm. HWN},
+  year =  {1995},
+  title = {A New Algorithm for Horizontal Spacing of Printed Music},
+  author = {Lippold Haken and Dorothea Blostein},
+  totalentry = {Lippold Haken and Dorothea Blostein. ``A New Algorithm for Horizontal Spacing of Printed Music'', International Computer Music Conference, Banff, Sept. 1995},
+  pages = {118-119},
+}
+
+@Article {,
+  comment = {This paper provides a shallow overview of the algorithm used in LIME for spacing individual lines. HWN},
+  year =  {1991},
+  title = {Justification of Printed Music},
+  author = {Dorothea Blostein and Lippold Haken},
+  totalentry = {Communications of the ACM},
+  volume={J34},
+  number={ 3},month={ March}, pages = {88-99},
+}
+
+
+@Article {,
+  comment = {Describes a system called MusicEase, and explains that it uses "constraints" (which go unexplained) to automatically position various elements. HWN},
+  year =  {1996},
+  title = {Creating Printed Music Automatically},
+  author = {Gary M. Rader},
+  journal = {Computer},
+  volume={ 29},
+  number={6},
+  month={June}, pages = {61--69}},
+
+
+@PhdThesis {,
+  comment = {Don't ask Stephen for a copy. Write to the Bodleian Library, Oxford, or to the British Library, instead. SP},
+  year =  {1988},
+  title = {Computer Tools for Music Information Retrieval},
+  author = {Stephen Dowland Page},
+  school ={ Dissertation University of Oxford},
+}
+
+@MastersThesis{,
+  comment = {This dutch thesis describes a simplistic (monophonic) typesetting system, and focuses on the breaking algorithm, which is taken from Hegazy & Gourlay HWN},
+  year =  {1991},
+  title = {Een Geautomatiseerd Systeem voor het Afdrukken van Muziek},
+  author = {Ren\'e Roelofs},
+  totalentry = {Ren\'e Roelofs. ``Een Geautomatiseerd Systeem voor het Afdrukken van Muziek'' afstudeerscriptie Bestuurlijke informatica, no 45327, Erasmus universiteit Rotterdam, 1991.  (``An automated system for printing music'' Master's Thesis Managerial Computer Science.)},
+}
+
+
+@Article {,
+  year =  {1993},
+  title = {Representation and manipulation of music documents in SceX},
+  author = {Miguel Filgueiras and Jos\'e Paulo Leal},
+  journal= { Electronic Publishing},
+  volume={ 6},
+  number={4}, pages = {507--518},
+
+}
+
+
+@Article {,
+  comment = {A paper on a TROFF preprocessor to typeset music. The output shown is not very sophisticated, and contains some typographical atrocities HWN},
+  year =  {1987},
+  title = {Music --- A language for typesetting music scores},
+  author = {Eric Foxley, },
+  journal={ Software --- Practice and Experience, },
+  volume={ 17},
+  number={8}, pages = {485-502},
+
+}
+
+
+@Book {,
+  year =  {1996},
+  title = {Implementing a Symbolic Music Processing System},
+  author = {Miguel Filgueiras},
+  totalentry = {LIACC, Universidade do Porto, 1996; submitted},
+}
+
+@Book {,
+  title = {Some Music Typesetting Algorithms},
+  author = {Miguel Filgueiras},
+  totalentry = {Miguel Filgueiras. ``Some Music Typesetting Algorithms''. LIACC, Universidade do Porto, forthcoming},
+}
+
+
+@Book {,
+  comment = {A concise, alphabetically ordered list of typesetting and music (notation) issues with a rather simplistic attitude but in most  cases "good-enough" answers JCN},
+  year =  {1996},
+  title = {Essential Dictionary of Music Notation},
+  author = {Tom Gerou and Linda Lusk},
+  publisher = {Alfred Publishing},
+  address ={Van Nuys CA},
+  isbn ={  ISBN 0-88284-768-6},
+}
+
+
+@Book {,
+  comment = {An clearly written book for the casually interested reader. It shows some of the conventions and difficulties in printing music HWN},
+  year =  {1987},
+  title = {Die Praxis des Notengraphikers},
+  author = {Herbert Chlapik},
+  publisher = {Doblinger},
+  isbn ={ ISBN 3-9000 035-96-2},
+}
+
+
+@Book {,
+  comment = {Webpages about engraving (designed with finale users in mind) (sic) HWN},
+  institution = {The University of Colorado},
+  title ={The University of Colorado Music Engraving page.},
+  url={http://obenamots.cc.colorado.edu/Musicpress/engraving.html},
+}
+
+
+
+
+@Book {,
+  year =  {1963},
+  author = {Anthony Donato},
+  title ={ Preparing Music Manuscript},
+  address ={ Englewood Cliffs, NJ},
+  publisher={Prentice-Hall},
+}
+
+
+@Book {,
+  year =  {1900},
+  title = {Uitgeven van muziek},
+  author = {Donemus},
+  publisher= {Donemus Amsterdam},
+}
+
+
+@Book {,
+  year =  {1987},
+  title = {The Norton Manual of Music Notation},
+  author = {George Heussenstamm},
+  address= { New York},
+  publisher={ Norton},
+}
+
+
+@Book {,
+  year =  {1972},
+  title = {Notation in New Music; a critical guide to interpretation and realisation},
+  author = {Erdhard Karkoshka},
+  translator={Ruth Koenig},
+  publisher={Praeger Publishers},
+  address={ New York},
+  note ={(Out of print)},
+}
+
+
+@Book {,
+  year =  {1973},
+  title = {The Art of Music Copying},
+  author = {Clinton Roemer},
+  publisher={ Roerick music co.},
+  address= { Sherman Oaks (CA)},
+}
+
+
+@Book {,
+  year =  {1979},
+  title = {Music Notation Primer},
+  author = {Glen Rosecrans},
+  publisher={Passantino},
+  address={New York},
+}
+
+
+@Book {,
+  year =  {1980},
+  title = {Music Notation in the Twentieth Century},
+  author = {Kurt Stone},
+  publisher= {Norton},
+  address={New York},
+  note ={(Out of print)},
+
+}
+
+
+@Book {,
+  comment = {This paper deals with some command-line tools for music editing and playback. It doesn't mention notation issues, but does come with the grand idea (not) of using music to monitor complex systems. Imagine your nuclear plant supervisor to use AC/DC for checking the reactor HWN},
+  year =  {1990},
+  title = {Unix music tools at Bellcore},
+  author = {Peter S. Langston},
+  journal={ Software --- Practice and Experience},
+  volume={20},
+  number={S1},
+  pages={47--61},
+}
+
+
+
+@URL {,
+  comment = {FAQ (with answers) about TAB, the ASCII variant of Tablature. HWN},
+  title = {how to read and write tab: a guide to tab notation},
+  author = {Howard Wright},
+  email={Howard.Wright@ed.ac.uk},
+  url={ http://wabakimi.carleton.ca/~phacket2/guitar/tabfaq.html},
+}
+
+
+@URL {,
+  comment = {Specs for NIFF, a comprehensive but binary (yuk) format for notation HWN},
+  year =  {1995},
+  title = {NIFF6a Notation Interchange File Format},
+  author = {Cindy Grande, },
+  publisher={Grande Software Inc.},
+  url={http://www.jtauber.com/music/encoding/niff/},
+}
+
+
+@URL {,
+  title = {SMDL, Standard Musical Description Language},
+  url={ftp://ftp.ornl.gov/pub/sgml/wg8/smdl/10743.pdf},
+  note={ISO/IEC DIS 10743},
+}
index e9c18ab9c4a4f0c87121af4363fab0537239be75..a9e1940fbee7cfd10fccf7a4e101863fd3a50441 100644 (file)
@@ -10,8 +10,8 @@
 
 This document are some design notes of the Feta font.  Feta (not an
 abbreviation of Font-En-Tja) is a font of music symbols.  All MetaFont
-%ugh sources are original.  The symbols are modelled after various
-editions of music, notably
+sources are original.  The symbols are modelled after various editions
+of music, notably
 \begin{itemize}
 \item B\"arenreiter
 \item Hofmeister
@@ -173,34 +173,32 @@ Traditional engraving uses a set of 9 standardised sizes for Staffs
 (running from 0 to 8).  
 
 We have tried to measure these (helped by a magnifying glass), and
-found the staffsizes in the following table.  One should note that
+found the staffsizes in  table~\ref{fonts:staff-size}.  One should note that
 these are estimates, so I think there could be a measuring error of ~
 .5 pt.  Moreover [Ross] states that not all engravers use exactly
 those sizes.
 
-\begin{table}
-\begin{tabular}{lll}
-Staffsize      &Numbers                &Name\\
+\begin{table}[h]
+  \begin{center}
+    \begin{tabular}{lll}
+Staffsize       &Numbers                &Name\\
 \hline\\
-26.2pt &No. 0\\
-22.6pt &No. 1          &Giant/English\\
-21.3pt &No. 2          &Giant/English\\
-19.9pt &No. 3          &Regular, Ordinary, Common\\
-19.1pt &No. 4          &Peter\\
-17.1pt &No. 5          &Large middle\\
-15.9pt &No. 6          &Small middle\\
-13.7pt &No. 7          &Cadenza\\
-11.1pt &No. 8          &Pearl\\
-\end{tabular}
-\caption{Font and staff sizes}
+26.2pt  &No. 0\\
+22.6pt  &No. 1          &Giant/English\\
+21.3pt  &No. 2          &Giant/English\\
+19.9pt  &No. 3          &Regular, Ordinary, Common\\
+19.1pt  &No. 4          &Peter\\
+17.1pt  &No. 5          &Large middle\\
+15.9pt  &No. 6          &Small middle\\
+13.7pt  &No. 7          &Cadenza\\
+11.1pt  &No. 8          &Pearl\\
+
+    \end{tabular}
+    \caption{Foo}
+    \label{fonts:staff-size}
+  \end{center}
 \end{table}
 
-
-This table is partially taken from [Ross].  Most music is set in No.3,
-but the papersizes usually are bigger than standard printer paper
-(such as A4).  If you plot these, you'll notice that the sizes (With
-exception of 26) almost (but not quite) form a arithmetic progression.
-
 Ross states that the dies (the stamps to make the symbols) come in
 12 different sizes.
 
index b714006cdd1b80959e0e5dbf0af8794ec59e8fed..37fb180df3078d24d29188cc2c37b47020d21822 100644 (file)
@@ -13,8 +13,9 @@ too seriously]
 
 =head2 Music engraving: references
 
-Helene Wanske.  ``Musiknotation --- Von der Syntax des Notenstichs zum
-EDV-gesteuerten Notensatz'', Schott-Verlag, Mainz 1988.ISBN 3-7957-2886-x.
+Helene Wanske. ``Musiknotation --- Von der Syntax des Notenstichs zum
+EDV-gesteuerten Notensatz'', Schott-Verlag, Mainz 1988.  ISBN
+3-7957-2886-x.
 
 [I. A very thorough overview of engraving practices of various
 craftsmen. It includes detailed specs of characters, dimensions etc.
@@ -22,7 +23,7 @@ II. a thorough overview of a anonymous (by now antiquated) automated
 system. EDV Means e(lektronischen) D(aten)v(erarbeitung), electronic
 data processing HWN]
 
-Maxwell Weaner and Walter Boelke, Standard Music Notation Practice,
+Maxwell Weaner and Walter Boelke. ``Standard Music Notation Practice'',
 revised edition by Arnold Broido and Daniel Dorff. Music Publisher's
 Association of the United States Inc., 1993.
 
@@ -68,22 +69,22 @@ distilled from [Ross] HWN]
 
 =head2 Notation with computers
 
-Donald Byrd.  ``Music Notation by Computer''.  Dissertation Indiana
+Donald Byrd. ``Music Notation by Computer''.  Dissertation Indiana
 University, 1985.
 
-Donald Byrd.  ``A System for Music Printing by Computer.''  Computers
+Donald Byrd. ``A System for Music Printing by Computer.''  Computers
 and the Humanities, 8 (1974), 161-72.
 
-Leland Smith.  ``Editing and Printing Music by Computer.''  Journal of
+Leland Smith. ``Editing and Printing Music by Computer.''  Journal of
 Music Theory, 17 (1973), 292-309.
 
 [If I remember correctly, this was concerned more with an input
 language than with the typography. SP.]
 
-David A Gomberg.  ``A Computer-Oriented System for Music Printing.''
+David A Gomberg. ``A Computer-Oriented System for Music Printing.''
 Dissertation Washington University. 1975.
 
-Walter B Hewlett. and Eleanor Selfridge-Field.  ``Directory of Computer
+Walter B Hewlett. and Eleanor Selfridge-Field. ``Directory of Computer
 Assisted Research in Musicology''.  Menlo Park, CA: Center for Computer
 Assisted Research in the Humanities.
 
@@ -161,28 +162,28 @@ of the ACM, Vol. 29(5), 388--401, 1986.
 [This paper describes the MusiCopy musicsetting system and an input
 language to go with it. HWN]
 
-Dorothea Blostein and Lippold Haken, ``The Lime Music Editor: A Diagram
+Dorothea Blostein and Lippold Haken. ``The Lime Music Editor: A Diagram
 Editor Involving Complex Translations'', Software Practice and
 Experience, Vol. 24, No. 3, March 1994, pp. 289-306.
 
 [A description of various conversions, decisions and issues relating
 to this interactive editor HWN]
 
-Lippold Haken and Dorothea Blostein, ``The Tilia Music Representation:
+Lippold Haken and Dorothea Blostein. ``The Tilia Music Representation:
 Extensibility, Abstraction, and Notation Contexts for the Lime Music
 Editor'', Computer Music Journal, Vol. 17, No. 3, 1993, pp. 43-58
 
 [A description of Lime internals (which resemble older (before
 0.0.68pre) LilyPond data structures somewhat) HWN]
 
-Lippold Haken and Dorothea Blostein, ``A New Algorithm for Horizontal
+Lippold Haken and Dorothea Blostein. ``A New Algorithm for Horizontal
 Spacing of Printed Music'', International Computer Music Conference,
 Banff, Sept. 1995, pp. 118-119.
 
 [This describes an algorithm which uses springs between adjacent
 columns. This algorithm is a "subclass" of the LilyPond algorithm. HWN]
 
-Dorothea Blostein and Lippold Haken, ``Justification of Printed Music'',
+Dorothea Blostein and Lippold Haken. ``Justification of Printed Music'',
 Communications of the ACM, VolJ34, No. 3, March 1991, pp. 88-99.
 
 [This paper provides a shallow overview of the algorithm used in LIME
@@ -195,7 +196,7 @@ Gary M. Rader. ``Creating Printed Music Automatically''. Computer Vol
 "constraints" (which go unexplained) to automatically position various
 elements. HWN]
 
-Stephen Dowland Page.  ``Computer Tools for Music Information
+Stephen Dowland Page. ``Computer Tools for Music Information
 Retrieval''.  Dissertation University of Oxford, 1988.
 
 [Don't ask Stephen for a copy. Write to the Bodleian Library, Oxford,
@@ -214,21 +215,21 @@ Miguel Filgueiras and Jos\'e Paulo Leal. ``Representation and
 manipulation of music documents in SceX''.  Electronic Publishing,
 vol. 6 (4), 507--518, 1993.
 
-Eric Foxley, Music --- A language for typesetting music scores.
+Eric Foxley, ``Music --- A language for typesetting music scores''.
 Software --- Practice and Experience, Vol. 17(8), 485--502, 1987.
 
 [A paper on a TROFF preprocessor to typeset music. The output shown is
 not very sophisticated, and contains some typographical atrocities HWN]
 
-Miguel Filgueiras, ``Implementing a Symbolic Music Processing
+Miguel Filgueiras. ``Implementing a Symbolic Music Processing
 System''. LIACC, Universidade do Porto, 1996; submitted.
 
-Miguel Filgueiras, ``Some Music Typesetting Algorithms''. LIACC,
+Miguel Filgueiras. ``Some Music Typesetting Algorithms''. LIACC,
 Universidade do Porto, forthcoming.
 
 =head2 Engraving: further reading
 
-Tom Gerou and Linda Lusk.  ``Essential Dictionary of Music Notation''
+Tom Gerou and Linda Lusk. ``Essential Dictionary of Music Notation''
 Alfred Publishing, Van Nuys CA, 1996.  ISBN 0-88284-768-6.
 
 [A concise, alphabetically ordered list of typesetting and music
@@ -257,18 +258,18 @@ Prentice-Hall, 1963.
 
 Donemus. ``Uitgeven van muziek''. Donemus Amsterdam, 1900
 
-George Heussenstamm. The Norton Manual of Music Notation. New York:
+George Heussenstamm. ``The Norton Manual of Music Notation''. New York:
 Norton, 1987.
 
 Erdhard Karkoshka. ``Notation in New Music. Trans. Ruth
 Koenig''. Praeger Publishers, New York, 1972.  (Out of print)
 
-C. Roemer, The Art of Music Copying. Roerick music co., Sherman Oaks
+C. Roemer, ``The Art of Music Copying''. Roerick music co., Sherman Oaks
 (CA), 1973.
 
-Glen Rosecrans. Music Notation Primer. New York: Passantino, 1979.
+Glen Rosecrans. ``Music Notation Primer''. New York: Passantino, 1979.
 
-Kurt Stone. Music Notation in the Twentieth Century. New York: Norton,
+Kurt Stone. ``Music Notation in the Twentieth Century''. New York: Norton,
 1980.  (Out of print)
 
 
@@ -276,7 +277,7 @@ Kurt Stone. Music Notation in the Twentieth Century. New York: Norton,
 =head2 Other stuff
 
 
-Peter S. Langston, ``Unix music tools at Bellcore''.  Software ---
+Peter S. Langston. ``Unix music tools at Bellcore''.  Software ---
 Practice and Experience, Vol. 20(S1), S1/47--S1/61, 1990.
 
 [This paper deals with some command-line tools for music editing and
@@ -287,15 +288,14 @@ your nuclear plant supervisor to use AC/DC for checking the reactor HWN]
 
 =head2 File formats
 
-Howard Wright <Howard.Wright@ed.ac.uk>, how to read and write tab: a
-guide to tab notation,
+Howard Wright <Howard.Wright@ed.ac.uk>, ``how to read and write tab: a
+guide to tab notation''.
 http://wabakimi.carleton.ca/~phacket2/guitar/tabfaq.html
 
 [FAQ (with answers) about TAB, the ASCII variant of Tablature. HWN]
 
-Cindy Grande, NIFF6a Notation Interchange File Format.  Grande
-Software Inc., 1995.  ftp://blackbox.cartah.washington.edu/pub/,
-http://www.jtauber.com/music/encoding/niff/
+Cindy Grande, ``NIFF6a Notation Interchange File Format''.  Grande
+Software Inc., 1995.  http://www.jtauber.com/music/encoding/niff/
 
 [Specs for NIFF, a comprehensive but binary (yuk) format for notation HWN]
 
diff --git a/Documentation/man/Makefile b/Documentation/man/Makefile
new file mode 100644 (file)
index 0000000..67d1357
--- /dev/null
@@ -0,0 +1,15 @@
+
+depth = ../..
+
+include $(depth)/make/Include.make
+include $(depth)/make/Docrules.make
+SECTION=1
+MANGROFF = $(addprefix $(outdir)/, $(addsuffix .$(SECTION),$(basename $(PODFILES) .pod)))
+
+default: $(MANGROFF)
+
+
+INSTALLATION_OUT_FILES=$(MANGROFF)
+INSTALLATION_DIR=$(mandir)/man$(SECTION)
+
+include $(depth)/make/Install_outfiles.make
diff --git a/Documentation/man/convert-mudela.pod b/Documentation/man/convert-mudela.pod
new file mode 100644 (file)
index 0000000..8ba3d04
--- /dev/null
@@ -0,0 +1,49 @@
+=head1 NAME
+
+convert-mudela  - convert mudela to newer versions
+
+=head1 SYNOPSIS
+
+       convert-mudela [options] [files]
+
+=head1 DESCRIPTION
+
+convert-mudela sequentially applies different mudela-conversions to
+upgrade a Mudela input file from FROM_PATCHLEVEL to TO_PATCHLEVEL.
+If no files are given, the standard input and output are used
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<--output>
+
+The output file to write
+
+=item B<--edit> 
+
+Do an inline edit of the input file. override B<--output>
+
+=item B<--show-rules>
+
+shows all known conversions.
+
+=item B<--from>=FROM_PATCHLEVEL
+
+Set the level to convert from. If this is not set, convert-mudela will
+guess this, on the basis of C<\version> strings in the file
+
+=item B<--to>=TO_PATCHLEVEL
+
+Set the goal version of the conversion. It defaults to the latest
+available version.  
+
+=back
+
+=head1 BUGS
+
+Not all language changes are handled. Multiple output options won't work
+
+=head1 AUTHOR
+
+Han-Wen Nienhuys <hanwen@gnu.org>
diff --git a/Documentation/man/lilypond.pod b/Documentation/man/lilypond.pod
new file mode 100644 (file)
index 0000000..8742d2e
--- /dev/null
@@ -0,0 +1,329 @@
+=head1 NAME
+
+lilypond - the GNU music typesetter
+
+=head1 SYNOPSIS
+
+       lilypond [options] [inputfiles]
+
+=head1 DESCRIPTION
+
+LilyPond is the GNU Project music typesetter.  The program generates
+visual or auditive output from a music definition file: it can typeset 
+formatted sheet music to a TeX file and play (mechanical) performances 
+to a MIDI file.
+
+=head1 OPTIONS
+
+=over 5
+
+=item B<-I,--include>=F<FILE>,
+
+add F<FILE> to the search path for input files.
+
+=item B<-M,--midi>
+
+This disables TeX output. If you have a \midi definition, it will do
+the midi output only.
+
+=item B<-d,--debug>,
+
+Turn debugging info on.  GNU LilyPond reads the file F<.dstreamrc>, 
+which lists what functions and classes may produce copious debugging
+output.
+
+=item B<-t,--test>,
+
+Switch on any experimental features.  Not for general public use.
+
+=item B<-w,--warranty>,
+
+Show the warranty with which GNU LilyPond comes. (It comes with B<NO
+WARRANTY>!)
+
+=item B<-o,--output=>F<FILE>,
+
+Set the default output file to F<FILE>.
+
+=item B<-h,--help>,
+
+Show a summary of usage.
+
+=item B<-i,--init=>F<FILE>,
+
+Set init file to F<FILE> (default: F<lily-init.ly>).
+
+=item B<--include, -I>=F<DIRECTORY>,
+
+Add F<DIRECTORY> to the search path for input files.
+
+=item B<--ignore-version, -V>,
+
+Make incompatible mudela version non-fatal.
+
+=item B<--no-postscript, -P>,
+
+Don't generate embedded PostScript (or MetaFont) symbols, but resort to
+less beautiful fixed-size versions.
+
+LilyPond uses PostScript for variable symbols where possible.  (For some 
+of these symbols runtime MetaFont source will be genarated too.  These are 
+not used unless you also include the appropriate  TeX file too.  See 
+F<tex/fetdefs.tex>.)
+
+=back
+
+=head1 FEATURES
+
+This is an overview of the features that GNU LilyPond supports.  For
+details on how to use them, you should consult mudela(5).
+
+=over 5
+
+=item *
+
+ASCII script input, with identifiers (for music reuse),
+customizable notenames, customisable fontset.
+
+=item *
+
+MIDI output lets you check if you have entered the correct notes.
+
+=item *
+
+MIDI to Mudela conversion through the mi2mu program.
+
+=item *
+
+Multiple staffs in one score.  Each staff can have different meters.
+
+=item *
+
+Beams, slurs, ties, chords, super/subscripts (accents and text)
+triplets, general n-plet (triplet, quadruplets, etc.), lyrics,
+transposition dynamics (both absolute and hairpin style).
+
+=item *
+
+Multiple voices within one staff; beams optionally shared
+between voices.  Up to four voices is handled cleanly.
+
+=item *
+
+Multiple scores within one input file.  Each score is output to
+a different file.
+
+=item *
+
+Clef changes, meter changes, cadenza-mode, key changes, repeat bars.
+
+=back
+
+=head1 DISCLAIMER AND COPYING POLICY
+
+GNU LilyPond is copyright 1996-1998 by its authors.  GNU LilyPond is
+distributed under the terms of the GNU General Public License.  GNU LilyPond 
+is provided without any warranty what so ever.
+GNU LilyPond may be freely distributed.  For further information consult 
+the GNU General Public License, from the file F<COPYING>.
+
+=head1 AUTHORS
+
+Please consult the documentation file AUTHORS for more detailed
+information, and small contributions. 
+
+=over 4
+
+=item *
+
+Han-Wen Nienhuys <hanwen@cs.ruu.nl>, http://www.cs.ruu.nl/people/hanwen
+
+=item *
+
+Jan Nieuwenhuizen <jan@digicash.com>,  http://www.digicash.com/~jan.
+
+=back
+
+
+=head1 PROBLEMS
+
+
+There is an extensive list of todoes and bugs.  See F<TODO>.  If you
+have a problem you should try to find out
+
+=over 4
+
+=item *
+
+If the bug has been fixed in a newer release.  
+
+=item *
+
+If the bug has been found earlier, consult F<TODO> and F<BUGS>.
+
+=back 
+
+If you have found a bug, then you should send a bugreport.
+
+=over 4
+
+=item *
+Send a copy of the input which causes the error.
+
+=item *
+Send a description of the platform you use.
+
+=item *
+Send a description of the LilyPond version you use (with
+compile/configure options please).
+
+=item *
+Send a description of the bug itself.
+
+=item *
+Send it to bug-gnu-music@gnu.org (you don't have to subscribe
+to this mailinglist).
+
+=back
+
+It does help if you can find out where the bug comes from: if GNU
+LilyPond bombs out, then please recompile using with debugging info
+turned on, and send gdb stacktrace of the crash.  It also helps if you
+can print the values of the objects.  So if your trace is
+
+       received SIGSEGV 
+       (gdb) backtrace 12
+       #0  Interval::operator+= (this=0x11fffec60..)
+           at ../flower/interval.hh:50
+       #1  0x12005195c in Item::width (this=0x14008a680) at src/item.cc:39
+       #2  0x12008fdbc in itemlist_width (its=0x11fffed58 ..
+         :
+         :
+
+Than it would help if you send a dump of the Interval and the Item
+(use: C<print *this> or use LilyPond C<print()> methods).
+
+
+=head1 FILES
+
+=over 5
+
+=item F<lily-init.ly>
+
+The initialisation file with symbol tables etc.  It
+includes files from the directory F<init/>.
+
+=back
+
+=head1 ENVIRONMENT
+
+B<LILYINCLUDE> an (one) additional directory for finding lilypond data.
+
+=head1 BUGS
+
+Lots of them.  See F<TODO> and F<BUGS>
+
+=head1 SEE ALSO
+
+=over 4
+
+=item internals
+
+On technical details of LilyPond
+
+=item mudela-man
+
+On the input format.  This is a LilyPond-enhanced LaTeX document.
+
+=item MANIFESTO
+
+Goals of the GNU LilyPond project.
+
+=item FAQ
+
+The GNU LilyPond FAQ list
+
+=item http://www.cs.ruu.nl/people/hanwen/lilypond/index.html
+
+GNU LilyPond has her own webpage.  This webpage contains the MIDI, GIF
+and PS files for some standard music files.  It also has the complete
+LilyPond documentation
+
+=back
+
+GNU LilyPond is
+updated very frequently, the latest version is always available at:
+ftp://pcnov095.win.tue.nl/pub/lilypond and
+ftp://alpha.gnu.org/gnu/lilypond/
+
+
+For programs which are part of the GNU music project, the following
+mailing list have been setup:
+
+
+=over 4
+
+=item 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
+
+=item 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
+
+=item 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
+
+=item 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,
+
+
+=back
+
+Announces of new versions will be sent to info-gnu-music and
+gnu-music-discuss.
+
+=head1  REMARKS
+
+GNU LilyPond has no connection with the music package Rosegarden, other
+than the names being similar :-)
+
+=head1 HISTORY
+
+(for a  detailed changelog, see F<NEWS>)
+
+GNU LilyPond's roots lie in MPP, a preprocessor to the rather arcane
+MusiXTeX macro package for TeX.  A friend of mine, Jan Nieuwenhuizen
+wrote the first 44 versions (0.01 to 0.44), then his program caught my
+attention, and I was slowly sucked in to the interesting problem of
+easily producing beautifully printed music.  I contributed some
+code.  We soon realised that MPP's design was too fundamentally broken
+to be repaired, so it was decided to rewrite MPP.  We debated a lot about
+the requirements to an inputformat (fall 1995).  I sat down and started
+with a parser-first, bottom-up rewrite called mpp95 (which totally
+failed, obviously).
+
+After long and hard thinking, I came up with an algorithm for the
+horizontal spacing of multiple staffs (april 1996) I coded it (and did
+not test it).  After starting with this fundamental piece, I slowly
+added the stages which come before spacing, and after.  A half year
+later, I had a first working version, (october 1996).  I announced
+Patchlevel 0.0.7 (or 8) to the mutex list after asking some technical
+details on spacing; it was downloaded approximately 4 times.  Then I
+got the hang of it, and in the subsequent two months, I coded until it
+had doubled in size (pl 23).
+
+Most the other history is described in the NEWS file.  The first large
+scale release (0.1) was done after approximately 78 patchlevels on
+August 1, 1997.
+
diff --git a/Documentation/man/ly2dvi.pod b/Documentation/man/ly2dvi.pod
new file mode 100644 (file)
index 0000000..60968cf
--- /dev/null
@@ -0,0 +1,210 @@
+=head1 NAME
+
+ly2dvi - convert mudela to DVI
+
+=head1 SYNOPSIS
+
+       ly2dvi [options] inputfile[.ly] [....]
+
+=head1 DESCRIPTION
+
+ly2dvi is a shell script which creates input file for LaTeX,
+based on information from the output files from lilypond.
+The script handles multiple files. If a mudela file name is
+specified lilypond is run to make an output (TeX) file.
+
+One or more LaTeX files are created, based on information found
+in the output (TeX) files, and latex is finally run to create
+one or more DVI files.
+
+=head1 OPTIONS
+
+=over 5
+
+=item B<-D,--debug>
+
+Set debug mode. There are two levels - in level one some debug
+info is written, in level two the command C<set -x> is run, which
+echoes every command in the ly2dvi script.
+
+=item B<-O,--orientation=>
+
+Set orientation - portrait is the default.
+(C<-O> landscape produces C<\usepackage[landscape]{article}>)
+
+=item B<-o,--output=>
+
+Set output directory.
+
+=item B<-h,--help>
+
+Print help.
+
+=item B<-k,--keep>
+
+Keep the LaTeX file after the run.
+
+=item B<-K>
+
+Keep LilyPond output after the run.
+
+=item B<-l,--language>
+
+Specify LaTeX language.
+(C<-l norsk> produces C<\usepackage[norsk]{babel}>).
+
+=item B<-p,--papersize=>
+
+Specify papersize.
+(C<-p a4paper> produces C<\usepackage[a4paper]{article}>)
+
+=item B<-s,--separate>
+
+Normally all output files are included into one LaTeX file.
+With this switch all files are run separately, to produce one
+DVI file for each.
+
+=back
+
+=head1 FEATURES
+
+ly2dvi responds to several parameters specified in the mudela
+file. They are overridden by corresponding command line options.
+
+=over 5
+
+=item B<papersize>
+
+Specify papersize.
+
+=item B<orientation>
+
+Set orientation.
+
+=item B<language>
+
+Specify LaTeX language
+
+=item B<paperlinewidth>
+
+Specify the width (pt, mm or cm) of the printed lines.
+
+=back
+
+=head1 ENVIRONMENT
+
+=over 5
+
+=item B<LILYINCLUDE>
+
+Additional directories for input files.
+
+=item B<TMP>
+
+Temporary directory name. Default is /tmp
+
+=back
+
+=head1 FILES
+
+F<titledefs.tex> is inspected for definitions used to extract
+additional text definitions from the mudela file. In the current
+version the following are defined:
+
+=over 5
+
+=item B<title>
+
+The title of the music. Centered on top of the first page.
+
+=item B<subtitle>
+
+Subtitle, centered below the title.
+
+=item B<composer>
+
+Name of the composer, rightflushed below the subtitle.
+
+=item B<arranger>
+
+Name of the arranger, rightflushed below the composer.
+
+=item B<instrument>
+
+Name of the instrument, leftflushed at same level as the composer.
+
+=back
+
+F</usr/local/share/lilyrc /etc/lilyrc $HOME/.lilyrc ./.lilyrc>
+are files to set up default running conditions/variables, Bourne shell
+syntax. All files are parsed, in the shown sequence. The variables are
+overridden by variables in the mudela file, and by command line options.
+In the current version the following are allowed:
+
+=over 5
+
+=item B<ORIENTATION>
+
+Set orientation - portrait is the default.
+
+=item B<LANGUAGE>
+
+Specify LaTeX language.
+
+=item B<OUTPUTDIR>
+
+Set output directory.
+
+=item B<PAPERSIZE>
+
+Specify papersize.
+
+=item B<LILYINCLUDE>
+
+Additional directories for input files.
+
+=item B<TMP>
+
+Temporary directory name.
+
+=back
+
+=head1 SEE ALSO
+
+lilypond(1), tex(1), latex(1)
+
+=head1 AUTHOR
+
+Jan Arne Fagertun <Jan.A.Fagertun@energy.sintef.no>,
+http://www.termo.unit.no/mtf/people/janaf/
+
+=head1 BUGS
+
+If you have found a bug, you should send a bugreport.
+
+=over 4
+
+=item *
+Send a copy of the input which causes the error.
+
+=item *
+Send a description of the platform you use.
+
+=item *
+Send a description of the LilyPond and ly2dvi version you use.
+
+=item *
+Send a description of the bug itself.
+
+=item *
+Send it to bug-gnu-music@gnu.org (you don't have to subscribe
+to this mailinglist).
+
+=back
+
+=head1 REMARKS
+
+Only one papersize is supported, A4. Information on other sizes
+(LaTeX names, horizontal and vertical sizes) should be mailed to
+the author or to the mailing list.
+
diff --git a/Documentation/man/mi2mu.pod b/Documentation/man/mi2mu.pod
new file mode 100644 (file)
index 0000000..6ee3e13
--- /dev/null
@@ -0,0 +1,120 @@
+=head1 NAME
+
+mi2mu - convert MIDI to mudela(5)
+
+=head1 SYNOPSIS
+
+       mi2mu [options] midi-file
+
+=head1 DESCRIPTION
+
+Mi2mu translates a MIDI input file to Mudela (GNU LilyPond source
+format).  Mi2mu is part of the GNU LilyPond music typesetting package.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-b, --no-quantify>,
+
+Write exact durations, e.g.: `a4*385/384'.
+
+=item B<-d, --debug>,
+
+Print lots of debugging stuff.
+
+=item B<-h, --help>,
+
+Show a summary of usage.
+
+=item B<-I, --include>=F<DIR>,
+
+Add DIR to search path.
+
+=item B<-k, --key>=ACC[:MINOR],
+
+Set default key.  ACC > 0 sets number of sharps; ACC < 0 sets number 
+of flats.  A minor key is indicated by ":1".
+
+=item B<-n, --no-silly>,
+
+Assume no plets or double dots, assume smallest (reciprocal) duration 16.
+
+=item B<-o, --output>=F<FILE>,
+
+Set FILE as default output.
+
+=item B<-p, --no-plets>,
+
+Assume no plets.
+
+=item B<-q, --quiet>,
+
+Be quiet.
+
+=item B<-s, --smallest=N>,
+
+Assume no shorter (reciprocal) durations than N.
+
+=item B<-v, --verbose>,
+
+Be verbose.
+
+=item B<-w, --warranty>,
+
+Show the warranty with which mi2mu comes. (It comes with B<NO WARRANTY>!)
+
+=item B<-x, --no-double-dots>,
+
+Assume no double dotted notes.
+
+=back
+
+=head1 FEATURES
+
+This is an overview of the features that Mi2mu supports.
+
+=over 4
+
+=item *
+
+[todo]
+
+=back
+
+=head1
+DISCLAIMER & COPYING POLICY
+
+Mi2mu is copyright 1996, 1997 by its authors. Mi2mu is distributed 
+as part of GNU LilyPond, under the terms of the GNU General Public
+License.  Mi2mu is provided without any warranty what so ever.
+Mi2mu may be freely distributed.  For further information consult
+the GNU General Public License, from the file F<COPYING>.
+
+=head1 AUTHORS
+
+Please consult the documentation file AUTHORS for more detailed
+information, and small contributions. 
+
+=over 4
+
+=item *
+
+Jan Nieuwenhuizen <jan@digicash.com>,  http://www.digicash.com/~jan.
+
+=back
+
+=head1 SEE ALSO
+
+=over 4
+
+=item lilypond(1)
+
+The GNU LilyPond music typesetter.
+
+=item mudela-man
+
+On the input format. This is a LilyPond-enhanced LaTeX document.
+
+=back
+
diff --git a/Documentation/man/mudela-book.pod b/Documentation/man/mudela-book.pod
new file mode 100644 (file)
index 0000000..f44c60b
--- /dev/null
@@ -0,0 +1,58 @@
+=head1 NAME
+
+mudela-book - integrate LaTeX and mudela
+
+=head1 SYNOPSIS
+
+       mudela-book [options] [file]
+
+=head1 DESCRIPTION
+
+If no file is given, input is taken from the standard input
+
+mudela-book runs LilyPond on fragments of mudela in your source file,
+and produces a LaTeXable document, with formatted music.
+
+       \begin{mudela}
+       CONTENTS
+       \end{mudela}
+
+runs LilyPond on CONTENTS, and puts the result back, surrounded by
+\preexample and \postexample commands. The \begin  takes  the
+following options:
+
+=over 4
+
+=item fragment
+
+mudela-book adds some redtape. You
+can substitute voice-contents for CONTENTS in this case.
+
+=item verbatim
+
+CONTENTS is copied into the TeX source enclosed in a verbatim block.
+
+=back
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<--outname>
+
+The name of TeX file to output. If none is given, the output is
+printed on stdout.
+
+=item B<--outdir> 
+
+The directory to output lilypond output and input to
+
+=back
+
+=head1 BUGS
+
+Doesn't handle incorrect input sanely. 
+
+=head1 AUTHOR
+
+Han-Wen Nienhuys <hanwen@gnu.org>
index 8c95b4d1f609f285340d7eb44e4216fcbad8df81..60d906ac77223afab6edcade439c3bdccece924d 100644 (file)
@@ -1,4 +1,4 @@
-% -*-latex-*-
+% -*-tex-*-
 
 % this document should be run through the mudela-book script after lilypond
 % has been installed.  The rules have been precooked into the
@@ -79,21 +79,22 @@ This chapter is a gentle introduction to using LilyPond to typeset
 simple music.
 
 LilyPond is a so called ``batch'' program.  This means, that you use a
-texteditor (such as emacs or vi) to create an input file.  When you
-are done editing your input file, you run LilyPond.  If Lily
-finds any errors in your input file she\footnote{ If computer programs
-could have gender, we're sure that LilyPond is a female computer
-program, so we will refer to the program as a she. This gender-bending
-is not to tease you, dear reader.  We do it in real life as well. In
-the past two years LilyPond has become sort of a baby daughter to us,
-keeping us awake at night, but also providing lots of joy.  We hope
-you do not mind our little aberration from computer-manual tradition.
+text editor (such as \texttt{emacs} or \texttt{vi}) to create an input
+file.  When you are done editing your input file, you save it, and you
+run LilyPond on the file.  If Lily finds any errors in your input file
+then she\footnote{ We're sure that if computer programs could have
+gender, LilyPond would be a female computer program.  So we will refer
+to the program as a she. This gender-bending is not to tease you, dear
+reader.  We do it in real life as well. In the past two years LilyPond
+has become sort of a baby daughter to us, keeping us awake at night,
+but also providing us lots of joy.  We hope you do not mind our little
+aberration from computer-manual tradition.
 % 
 % The name LilyPond is actually sort of a girl's name.  Can you guess which
 % one ?
 %
-} complain.  If everything is well, than she'll generate a file that
-you can process further to view or print it.
+} will complain.  If everything is well, than she'll generate a file, that
+you can process further to view or print.
 
 Using LilyPond to print or view some music is a procedure with four
 steps.  To get you started we'll run down the full procedure for you
@@ -105,19 +106,21 @@ Fire up your favourite editor (if you know none, try \texttt{joe silly.ly}),
 and key in the following text:
 \begin{verbatim}
 \score {
-       <
+        <
         \type Staff = aStaff \melodic { g'2 e'4 }
         \type Lyrics = yell \lyric { Air2 ball!4 }
         >
+        \paper {}
 }
 \end{verbatim}
 
-Save your file as \file{silly.ly}.  The input files for LilyPond have
-the default extension \file{.ly}.
+Save your file as \file{silly.ly}.
+
+%The input files for LilyPond have the default extension \file{.ly}.
 
 \item
 Run LilyPond on your newly created file: enter \verb+lilypond silly+.
-LilyPond will then print all kinds of mumbo jumbo that can safely
+LilyPond will then print all kinds of mumbo jumbo that can safely be
 ignored.  You might see something like this:
 \begin{verbatim}
 GNU LilyPond 0.1.55/FlowerLib 1.1.39
@@ -125,7 +128,7 @@ Parsing ... [/home/hanwen/musix/spacer/init/lily-init.ly[/home/hanwen/
 
         ... stuff left out here ...
 
-                               Documentation/silly.ly]
+                                Documentation/silly.ly]
 Interpreting music ...[1] (time: 0.04 seconds)
 Preprocessing elements... 
 Calculating column positions ... [2]
@@ -137,18 +140,16 @@ warning: Can not solve this casting problem exactly; revert to Word_wrap
 Postprocessing elements...
 TeX output to silly.tex ...
 \end{verbatim}
-  All has gone well; there were some warning but no errors.  The
-  output is a \file{TeX}\footnote{%
-    \file{TeX} is usually spelled as
-  \TeX.  It is batch program for typesetting text, developed by the
-  famous programmer and scientist Donald Knuth to typeset his famous The
-  Art of Computer Programming bookseries.  As you can see \TeX\ can be
-  adapted to do a lot more.  In fact, the document that you are
-  reading was also done with \TeX.} file, and it is called
-  \file{silly.tex}.
+All has gone well; there were some warning but no errors.  The output
+is a TeX file, and it is called \file{silly.tex}.  \file{TeX} is
+usually spelled as \TeX.  It is batch program for typesetting text,
+developed by the great programmer and scientist Donald Knuth to
+typeset his famous The Art of Computer Programming bookseries.  As you
+can see \TeX\ can be adapted to do a lot more.  In fact, the document
+that you are reading now was also done with \TeX.
 \item
   To do something useful with the output you have to run \TeX\ on it
-  first.  type \verb+tex silly+.  The output should resemble this:
+  first.  Run the command \verb+tex silly+.  The output should resemble this:
 \begin{verbatim}
 This is TeX, Version 3.14159 (C version 6.1)
 (silly.tex
@@ -162,17 +163,17 @@ Output written on silly.dvi (1 page, 3084 bytes).
 Transcript written on silly.log.
 \end{verbatim}
   The human translation is ``everything went OK, the result is one
-  page long, and I put it in \file{silly.dvi}''.
+  page long, and I put it in \file{silly.dvi}.''
 
 \item The \file{silly.dvi} file is a description of how a piece of
 text looks when it is printed.  You can view it, or print it.  If you
-are using a Unix system equipped with X-Windows, issue the command
-\file{xdvi silly} to view the result.  If this is not the case,
-consult your local \TeX\ guru on printing and viewing DVI files.  What
-is in your window should look like this:
+are using a Unix system equipped with X-Windows, then you can issue
+the command \file{xdvi silly} to view the result.  If this is not the
+case, consult your local \TeX\ guru on printing and viewing DVI files.
+What is in your window should look like this:
 \begin{mudela}
 \score {
-       <
+        <
         \type Staff = aStaff \melodic { g'2 e'4 }
         \type Lyrics = yell \lyric { Air2 ball!4 }
         >
@@ -185,20 +186,20 @@ about LilyPond.  What you entered into your text editor in step~1. and
 fed to LilyPond is a special kind of file composed of notenames,
 special words and punctation.  The remainder of this document explains
 how to combine these elements to express a piece of music in the
-language that LilyPond understands.  So we try to explain how to use
-LilyPond, and not how LilyPond works; the input language of LilyPond
-is the subject of the document.  For want of a better name we call
-this language Mudela (short for Music Description Language).
+language that LilyPond understands.  In other words, we try to explain
+how to use LilyPond, and not how LilyPond works.  For want of a better
+name we call this language Mudela (short for Music Description
+Language).
 
 This document does not cover all of Mudela.  Due to technical details,
 the precise working of Mudela is coupled to the innards of LilyPond.
 If you really want to know all the details, your best bet would be to
-get the sources to LilyPond and read the parser and scanner
-source\footnote{ They are in \file{lilypond-x.y.z/lily/parser.y},
-\file{lilypond-x.y.z/lily/lexer.l}.  Of course, it would be even
+get the sources to LilyPond and read the parser and scanner source.
+They are in \file{lilypond-x.y.z/lily/parser.y},
+\file{lilypond-x.y.z/lily/lexer.l\footnote{Of course, it would be even
 better if you would improve LilyPond and send the resulting diffs to
-us.  But that would a really different ballpark (And we
-haven't  started with the programming guide yet.)}
+us.  But that would a really different ballpark (And we haven't
+started with the programming guide yet.)}
 
 In the following sections the basic elements of Mudela are presented.
 We don't want to bore you too much with details, so we will leave-out
@@ -215,22 +216,24 @@ right just as it was produced by LilyPond.
 
 For the remainder we will assume that you can carry out steps 1 to 4
 from the above instruction.  We will also assume that you know how
-music notation works, and that you are familiar with terms such as
-``note'', ``clef'', ``slur'' etc.
+music notation works.  If you are not familiar with the English terms
+for music notation, then you should consult XXXX [FIXME], it contains
+a glossary of musical terms.
 
 \section{Music copying versus music definition}
 
 If you have done music copying before, then using LilyPond may seem
-awkward to you in the beginning.  The purpose of LilyPond is usually
+awkward to you in the beginning.  The purpose of LilyPond is informally
 explained by the term ``music typesetter.''
 
-This may give the impression that the program lets you control
-precisely how the music is formatted.  This is not the case: not only
-does the program print musical symbols, LilyPond also tries to make
-esthetic decisions---to be precise, we programmed her to do what we
-find pretty.  You do not have complete control over what is happening.
-On the other hand, good engraving is a very complex trade, so it is a
-Good Thing that you do not have to worry about what is happening.
+This may give the impression that the program is like a drawing tool
+that lets you control precisely how the music is formatted.  This is
+not the case: not only does the program print musical symbols,
+LilyPond also tries to make esthetic decisions---to be precise, we
+programmed her to do what we find pretty.  You do not have complete
+control over what is happening.  On the other hand, good engraving is
+a very complex trade, so it is a Good Thing that you do not have to
+worry about what is happening.
 
 Secondly, LilyPond operates on musical definitions.  This really is
 something different from graphical definitions.  If you copy music by
@@ -239,19 +242,19 @@ means; you just copy the symbols.  With LilyPond such a thing is not
 possible: we expect you to enter the meaning of the score, not the
 score itself.  If put more concretely: you do not enter ``black
 notehead without flag, fourth staff line'', but ``a quarter note,
-pitch $d^2$''.  LilyPond will figure out from the musical info what
+pitch d$^2$''.  LilyPond will figure out from the musical info what
 kind of graphic presentation is needed.
 
 This has some drawbacks: most notably, it is difficult to enter sheet
 music that you cannot read.  On the other hand, any piece of music
-that you enter can be played and transposed automatically.
+once entered can be played and transposed automatically.
 
 
 \section{When you know the notes to print\ldots}
 
 The basic building block of music is the note.  You can have LilyPond
 print a note by specifying its pitch and the duration.  The pitch of
-the central C, also know as c$^1$ is written as \verb+c'+.  A quarter
+the central C, also known as c$^1$, is written as \verb+c'+.  A quarter
 note duration is written as \verb+4+.  So, to print quarter note with
 central C pitch, you enter the following
 \begin[fragment,verbatim,center]{mudela}
@@ -262,11 +265,16 @@ name, and one part for the octave.  The number of apostrophes
 specifies the octave to use, and the letter which note name to use.
 The note names simply are the letters \verb+a+ to \verb+g+.
 
+For example,
+\begin[fragment,verbatim]{mudela}
+  c'4 d'4 e'4 c'4 c''4 d''4 e''4 f''4 g''4 a''4 b''4 c'''4
+\end{mudela}
+
 The duration of a note is specified as a number: a whole note is
 denoted by 1, the half note by 2, the quarter by 4, and so on.  Here
 are some random notes to show how it works
 \begin[fragment,verbatim]{mudela}
-'c8 c8 c'16 c''16 d''64 b'64 c1 c'4 d'4 e'4 f'4 g'4 a'4
+'c8 c8 c'16 c''32 d''64 b'64 c'''2 c1 c'4 d'4 e'4 f'4 g'4 a'4
 \end{mudela}
 
 This gives us already enough material to make simple songs:
@@ -280,31 +288,42 @@ This gives us already enough material to make simple songs:
 There is only one part about pitches that we haven't told you:
 chromatically altered pitches.  The names ``a'' to ``g'' for typing
 pitches are convenient: they are short, pronounceable and they
-resemble the normal vocabulary for pitches.  Enter flats and sharps.
-In english there is no standard terse word for C sharp or C flat.  For
-this reason, we implemented a different, non-english convention for
-entering altered pitches, see table~\ref{notename-tab}: one makes a note sharp by adding the suffix
---is to the name, one makes the a note flat by adding the suffix
---es.  For a double sharp you simply add another --is suffix.  
-
-\begin{table}\caption{Note names}\label{notename-tab}
-\begin{tabular}{ll}
-english        &LilyPond\\
-\hline\\
-c double flat  &ceses\\
-c flat         &ces\\
-c natural      &c\\
-c sharp                &cis\\
-c double sharp &cisis\\
-\end{tabular}
+resemble the normal vocabulary for pitches.
+
+Enter flats and sharps.  In English there is no standard terse word
+for C sharp or C flat.  For this reason, we implemented a different,
+non-english convention for entering altered pitches, see
+table~\ref{notename-tab}: one makes a note sharp by adding the suffix
+``--is'' to the name, one makes the a note flat by adding the suffix
+``--es.''  For a double sharp you simply add another ``--is'' suffix,
+flats ditto.
+
+
+\begin{table}[h]
+  \begin{center}
+    \caption{Defaults note names}\label{notename-tab}
+    \begin{tabular}{ll}
+      english         &LilyPond\\
+      \hline\\
+      c double flat   &ceses\\
+      c flat          &ces\\
+      c natural       &c\\
+      c sharp         &cis\\
+      c double sharp  &cisis\\
+    \end{tabular}
+    
+  \end{center}
 \end{table}
 
-Variations on this convention\footnote{LilyPond actually defaults to
-dutch notenames, with aes, aeses, ees and eeses added} are used in a
-number of germanic languages, notably dutch, german, swedish,
-norwegian.  If you are not comfortable with these names, you can make
-your own names.  Check out the example initialisation files.  A number
-of languages are included.
+Variations on this convention are used in a number of germanic
+languages, notably Dutch, German, Swedish, and Norwegian.  To be
+precise, LilyPond actually defaults to dutch notenames, with aes,
+aeses, ees and eeses added for consistency.
+
+If you are not comfortable with these names, you can make your own
+names.  Included with the example initialisation files are note names
+for different languages, among others English (C sharp is abbreviated
+to cs), Italian, Swedish, Norwegian
 
 \section{Hairy rhythms}
 
@@ -508,10 +527,10 @@ A Mudela file needs some red tape
 \begin[verbatim,center]{mudela}
 \score{
         \melodic {
-               \octave c';
-               c d e c |
-               c d e c |
-               e f g2 |
+                \octave c';
+                c d e c |
+                c d e c |
+                e f g2 |
         }
 }
 \end{mudela}
@@ -521,18 +540,18 @@ A Mudela file needs some red tape
 \begin[verbatim,center]{mudela}
 \score{
         < 
-               \melodic{ 
-                       \octave c'; 
-                       c d e c | c d e c |
-                       e f g2 | e4 f g2
-                       \bar "|.";
-               }
-               \type Lyrics \lyric{ 
-                       Fr\`e-4 re Ja- que
-                       Fr\`e- re Ja- que
-                       Dor- mez vous?2
-                       Dor-4 mez vous?2
-               }
+                \melodic{ 
+                        \octave c'; 
+                        c d e c | c d e c |
+                        e f g2 | e4 f g2
+                        \bar "|.";
+                }
+                \type Lyrics \lyric{ 
+                        Fr\`e-4 re Ja- que
+                        Fr\`e- re Ja- que
+                        Dor- mez vous?2
+                        Dor-4 mez vous?2
+                }
         >
 }
 \end{mudela}
index 7f7640524e046b70e9dbeb3ce71803488ca435b3..43847bb9855b3c4e8c2759ebbfed1dac2a0c730d 100644 (file)
-Francais:US English:Deutsch:UK English:Nederlands:Italiaans
-:system:::systeem:
-accentuation:accentuation:::accent:
-accolade:brace::::
-accord:chord:::akkoord:
-accord de neuvième dominante:chord of the dominant ninth:::dominant akkoord:
-accord de septième dominante:chord of the dominant seventh:::septiem akkoord:
-accord parfait majeur:perfect major chord::::
-accord parfait mineur:perfect minor chord::::
-alto:alto:::alt:
-altération accidentelle:accident; accidental alteration:::toevallig teken:
-altération essentielle:essential alteration::::
-appogiature:appoggiatura::::
-appogiature brève:short appoggiatura::::
-appogiature double:double appoggiatura::::
-appogiature longue:long appoggiatura::::
-appogiature simple:simple appoggiatura::::
-armature [de la clé]:key signature:::toonsoort (voortekens):
-armure [de la clé]:key signature:::toonsoort:
-arpège:arpeggio:::gebroken akoord:
-augmenté (intervalle):augmented (interval):::overmatig interval:
-bariton:baritone:::bariton:
-barre de mesure:bar line:::maatstreep:
-:beam:Balk::waardestreep/balk:
-barre de reprise:repeat:::herhaling:
-basse:bass:::bas:
-blanche:half note:::halve noot:
-bâton de pause:(arbitrary number of bars' rest)::::
-bâton de pause:four-bar rest::::
-bâton de pause:two-bar rest::::
-bécarre:natural sign:::herstellingsteken:
-bémol:flat:::mol:
-cadence:cadence:::cadens:
-cadence harmonique:harmonic cadence:::cadens:
-cadence mélodique:melodic cadence:::cadens:
-:cue-notes:Stichnoten::stichnoten:
-caractère:character::::
-chaîne de trilles:chain of trills:::triller:
-chevron:chevron::::
-chiffrage (chiffres indicateurs):time signature:::maatsoort:
-chiffre inférieur:lower number::::
-chiffre supérieur:upper number::::
-clé:clef:::sleutel:
-clé d'octave:octave line::::
-clé d'ut:middle C clef:::C sleutel, alt sleutel:
-clé de fa:bass clef:::F sleutel:
-clé de sol:treble clef:::G sleutel, viool sleutel:
-comma:comma::::
-comma enharmonique::::
-comma pythagoricien::::
-comma syntonique: : : : : 
-consonance:consonant interval; consonance:::consonant:
-contralto:contralto::::
-contre-temps:contro-time::::
-contre-temps irrégulier:irregular contro-time::::
-contre-temps régulier:regular contro-time::::
-coulé:slur:::binding, bindingsboog:
-courbe rythmique:rythmic curve::::
-:opening angular bracket::::crescendo
-croche:eighth note:::achtste noot:
-:closing angular bracket::::decrescendo
-degré [de la gamme]:degree [of the scale]:::trap [van de toonladder]:
-demi-pause:half rest:::halve rust:
-demi-soupir:eighth rest:::achtste rust:
-demi-ton:semitone:::halve toon:
-demi-ton chromatique:chromatic semitone:::chromatische halve toon:
-demi-ton diatonique:diatonic semitone:::diatonische halve toon:
-diapason:pitch pipe; tuning fork:::stemfluitje; stemvork:
-diminué (intervalle):diminished (interval):::verminderd (interval):
-dissonance:dissonant interval; dissonance:::dissonant interval; dissonant:
-dièse:sharp:::kruis:
-do:C:::C:
-do central:middle C:::centrale C::
-doigté:::::
-doigté de pédale:::::
-dominante:dominant:::dominant:
-double barre:double bar line:::dubbele streep:
-double bémol:double flat:::dubbelmol:
-double croche:sixteenth note:::zestiende noot:
-double dièse:double sharp:::dubbelkruis:
-double triolet:double triplet:::dubbele triool:
-duolet:duplet:::duool:
-durée:duration:::duur, lengte:
-échelle d'octave:octave line::::
-échelle musicale:Musical Ladder::::
-enharmonie:enharmony::::
-espace:space::::
-extension d'intervalle:extension of interval::::
-fa:F::::
-figure de note:kind of note::::
-figure de silence:kind of rest::::
-fioriture::::cadens:cadenza
-forme du mode mineur ancien:ancient form (diatonic minor scale)::::
-forme harmonique:harmonic form (diatonic minor scale)::::
-forme mélodique:melodic form (diatonic minor scale)::::
-gamme:scale:::toonladder:
-gamme chromatique:chromatic scale:::chromatische toonladder:
-gamme diatonique majeure:diatonic major scale:::diatonische majeur toonladder:
-gamme diatonique mineure:diatonic minor scale::::
-gammes enharmoniques:enharmonic scales::::
-gammes relatives:relative scales::::
-genre chromatique:chromatic type::::
-genre diatonique:diatonic type::::
-genre enharmonique:enharmonic type::::
-groupe irrégulier:irregular group::::
-grupetto:turn; gruppetto:::dubbelslag:
-hauteur:pitch:::toonhoogte:
-huitième de soupir:thirty-second rest:::32e rust:
-incise:motive:::motief:
-indication de pédale::::
-indication métronomique:metronomic indication::::
-intervalle:interval:::interval:
-intervalle ascendant:ascending interval::::
-intervalle composé:compound interval::::
-intervalle descendant:descending interval:::dalend interval:
-intervalle harmonique:harmonic interval::::
-intervalle simple:simple interval::::
-intervalles enharmoniques:enharmonic intervals::::
-juste (intervalle):perfect (interval):::rein (interval):
-la:A::::
-liaison:tie:::overbinding:
-liaison rythmique:legato curve::::
-ligne:line::::
-ligne supplémentaire:ledger line:::hulplijntje:
-majeur (intervalle):major (interval):::groot (interval):
-membre de phrase:phrase member::::
-mesure:bar; measure:::maat, maatstreep:
-mesure artificielle:artificial measure::::
-mesure composée:compound measure::::
-mesure incomplète:incomplete measure::::
-mesure irrégulière:irregular measure::::
-mesure simple:simple measure::::
-mezzo-soprano:mezzo-soprano::::
-mi:E::::
-mineur (intervalle):minor (interval)::::
-mode:mode::::
-mode ecclésiastique::::
-mode majeur:major mode::::
-mode mineur:minor mode::::
-modulation:modulation:::modulatie:
-mordant:mordent:::mordent:
-:::::
-mouvement:tempo; movement:::deel:
-mouvement conjoint:conjunct movement::::
-mouvement disjoint:disjunct movement::::
-mouvement lent:slow tempo::::
-mouvement modéré:moderate tempo::::
-mouvement rapide:fast tempo::::
-médiante:mediant::::
-métronome:metronome:::metronoom:
-noire:quarter note:::kwartnoot:
-note:note:::noot:
-note doublement pointée:double dotted note::::
-note modale:modal note::::
-note pointée:dotted note::::
-note tonale:tonal note::::
-notes enharmoniques:enharmonic notes:::enharmonische noot:
-nuance:shading::::
-octave:octave:::octaaf:
-ornement:embellishment; accessory::::
-:part:::partij:
-partition:score:::partituur:
-pause:whole rest::::
-phrase:phrase::::
-phrasé:phrasing::::
-pizzicato:dash over/below::::
-point:dot:::punt:
-point d'orgue:pause::::
-point et liaison combinés:dot and curved line combined::::
-pointillés::::
-portamento:underline over/below::::
-portée:staff:::(noten)balk; partij:
-portées:staves::::
-quadruple croche:sixty-fourth note::::
-quart de soupir:sixteenth rest::::
-quarte:fourth:::kwart:
-quartolet:quadruplet:::kwartool:
-quinte:fifth:::kwint:
-registre:register:::register:
-renversement d'intervalle:inversion of interval:::inversie:
-renvoi:return sign:::herstellingsteken:
-respiration:artificial rest::::
-:double whole note::breve:brevis:breve
-ronde:whole note:::hele noot:
-rythme:rythm:::ritme:
-ré:D::::
-seconde:second::::secunde
-seizième de soupir:sixty-fourth rest::::
-sensible:leading note::::
-septième:seventh:::septiem:septime
-sextolet:sextuplet::::
-si:B::::
-signes indicateurs de nuance:shading signs::::
-silence:rest::::
-sixain:sextuplet:::sextool:
-sixte:sixth::::
-sol:G::::
-soprano:soprano:::sopraan:
-soupir:quarter rest::::
-sous-dominante:subdominant::::
-sous-tonique:subtonic::::
-:dot over/below:::staccato:staccato
-sus-dominante:superdominant::::
-sus-tonique:supertonic::::
-syncope:syncopation; upbeat:::syncope:
-syncope irrégulière:irregular syncopation:::onregelmatige syncope:
-syncope régulière:regular syncopation::::
-temps:beat:::tel:
-temps binaire:binary beat::::
-temps faible:weak beat::::
-temps fort:strong beat::::
-temps ternaire:ternary beat::::
-tempérament mésotonique:meantone tuning::::
-tempérament Ã©gal:tempered tuning:::getempereerde stemming:
-tierce:third:::terts:
-ton:tone:::toon:
-tonalité:tonality:::tonaliteit:
-tonique:tonic::::
-tons relatifs:relative scales::::
-tons voisins:adjacent keys::::
-transposition:transposition::::
-transposition chromatique:chromatic transposition::::
-transposition enharmonique:enharmonic transposition::::
-trille:trill; shake::::
-trille double:double trill::::
-triolet:triplet::::
-triple croche:thirty-second note::::
-triton:tritone::::
-ténor:tenor::::
-tétracorde:tetrachord::::
-unisson:unison::::
-unité de mesure:unit of measure::::
-unité de temps:unit of beat::::
-ut:C::::
-voix:voice:::stem:
-:quarter note::crotchet::
-:quarter rest::crotchet rest::
-:thirty-second note::demisemiquaver::
-:thirty-second rest::demisemiquaver rest::
-:sixty-fourth note::hemidemisemiquaver::
-:sixty-fourth rest::hemidemisemiquaver rest::
-:half note::minim::
-:half rest::minim rest::
-:eighth note::quaver::
-:eighth rest::quaver rest::
-:whole note::semibreve::
-:whole rest::semibreve rest::
-:sixteenth note::semiquaver::
-:sixteenth rest::semiquaver rest:: 
+:engraving:notenstechen::steken::
+Francais:US English:Deutsch:UK English:Nederlands:Italiaans:
+:system:::systeem::
+accentuation:accentuation:::accent::
+accolade:brace:::::
+accord:chord:::akkoord::
+accord de neuvième dominante:chord of the dominant ninth:::dominant akkoord::
+accord de septième dominante:chord of the dominant seventh:::septiem akkoord::
+accord parfait majeur:perfect major chord:::::
+accord parfait mineur:perfect minor chord:::::
+alto:alto:::alt::
+altération accidentelle:accident; accidental alteration:::toevallig teken::
+altération essentielle:essential alteration:::::
+appogiature:appoggiatura:::::
+appogiature brève:short appoggiatura:::::
+appogiature double:double appoggiatura:::::
+appogiature longue:long appoggiatura:::::
+appogiature simple:simple appoggiatura:::::
+armature [de la clé]:key signature:::toonsoort (voortekens)::
+armure [de la clé]:key signature:::toonsoort::
+arpège:arpeggio:::gebroken akoord::
+augmenté (intervalle):augmented (interval):::overmatig interval::
+bariton:baritone:::bariton::
+barre de mesure:bar line:::maatstreep::
+:beam:Balk::waardestreep/balk::
+barre de reprise:repeat:::herhaling::
+basse:bass:::bas::
+blanche:half note:::halve noot::
+bâton de pause:(arbitrary number of bars' rest):::::
+bâton de pause:four-bar rest:::::
+bâton de pause:two-bar rest:::::
+bécarre:natural sign:::herstellingsteken::
+bémol:flat:::mol::
+cadence:cadence:::cadens::
+cadence harmonique:harmonic cadence:::cadens::
+cadence mélodique:melodic cadence:::cadens::
+:cue-notes:Stichnoten::stichnoten::
+caractère:character:::::
+chaîne de trilles:chain of trills:::triller::
+chevron:chevron:::::
+chiffrage (chiffres indicateurs):time signature:::maatsoort::
+chiffre inférieur:lower number:::::
+chiffre supérieur:upper number:::::
+clé:clef:::sleutel::
+clé d'octave:octave line:::::
+clé d'ut:middle C clef:::C sleutel, alt sleutel::
+clé de fa:bass clef:::F sleutel::
+clé de sol:treble clef:::G sleutel, viool sleutel::
+comma:comma:::::
+comma enharmonique:::::
+comma pythagoricien:::::
+comma syntonique: : : : : :
+consonance:consonant interval; consonance:::consonant::
+contralto:contralto:::::
+contre-temps:contro-time:::::
+contre-temps irrégulier:irregular contro-time:::::
+contre-temps régulier:regular contro-time:::::
+coulé:slur:::binding, bindingsboog::
+courbe rythmique:rythmic curve:::::
+:opening angular bracket::::crescendo:
+croche:eighth note:::achtste noot::
+:closing angular bracket::::decrescendo:
+degré [de la gamme]:degree [of the scale]:::trap [van de toonladder]::
+demi-pause:half rest:::halve rust::
+demi-soupir:eighth rest:::achtste rust::
+demi-ton:semitone:::halve toon::
+demi-ton chromatique:chromatic semitone:::chromatische halve toon::
+demi-ton diatonique:diatonic semitone:::diatonische halve toon::
+diapason:pitch pipe; tuning fork:::stemfluitje; stemvork::
+diminué (intervalle):diminished (interval):::verminderd (interval)::
+dissonance:dissonant interval; dissonance:::dissonant interval; dissonant::
+dièse:sharp:::kruis::
+do:C:::C::
+do central:middle C:::centrale C:::
+doigté::::::
+doigté de pédale::::::
+dominante:dominant:::dominant::
+double barre:double bar line:::dubbele streep::
+double bémol:double flat:::dubbelmol::
+double croche:sixteenth note:::zestiende noot::
+double dièse:double sharp:::dubbelkruis::
+double triolet:double triplet:::dubbele triool::
+duolet:duplet:::duool::
+durée:duration:::duur, lengte::
+échelle d'octave:octave line:::::
+échelle musicale:Musical Ladder:::::
+enharmonie:enharmony:::::
+espace:space:::::
+extension d'intervalle:extension of interval:::::
+fa:F:::::
+figure de note:kind of note:::::
+figure de silence:kind of rest:::::
+fioriture::::cadens:cadenza:
+forme du mode mineur ancien:ancient form (diatonic minor scale):::::
+forme harmonique:harmonic form (diatonic minor scale):::::
+forme mélodique:melodic form (diatonic minor scale):::::
+gamme:scale:::toonladder::
+gamme chromatique:chromatic scale:::chromatische toonladder::
+gamme diatonique majeure:diatonic major scale:::diatonische majeur toonladder::
+gamme diatonique mineure:diatonic minor scale:::::
+gammes enharmoniques:enharmonic scales:::::
+gammes relatives:relative scales:::::
+genre chromatique:chromatic type:::::
+genre diatonique:diatonic type:::::
+genre enharmonique:enharmonic type:::::
+groupe irrégulier:irregular group:::::
+grupetto:turn; gruppetto:::dubbelslag::
+hauteur:pitch:::toonhoogte::
+huitième de soupir:thirty-second rest:::32e rust::
+incise:motive:::motief::
+indication de pédale:::::
+indication métronomique:metronomic indication:::::
+intervalle:interval:::interval::
+intervalle ascendant:ascending interval:::::
+intervalle composé:compound interval:::::
+intervalle descendant:descending interval:::dalend interval::
+intervalle harmonique:harmonic interval:::::
+intervalle simple:simple interval:::::
+intervalles enharmoniques:enharmonic intervals:::::
+juste (intervalle):perfect (interval):::rein (interval)::
+la:A:::::
+liaison:tie:::overbinding::
+liaison rythmique:legato curve:::::
+ligne:line:::::
+ligne supplémentaire:ledger line:::hulplijntje::
+majeur (intervalle):major (interval):::groot (interval)::
+membre de phrase:phrase member:::::
+mesure:bar; measure:::maat, maatstreep::
+mesure artificielle:artificial measure:::::
+mesure composée:compound measure:::::
+mesure incomplète:incomplete measure:::::
+mesure irrégulière:irregular measure:::::
+mesure simple:simple measure:::::
+mezzo-soprano:mezzo-soprano:::::
+mi:E:::::
+mineur (intervalle):minor (interval):::::
+mode:mode:::::
+mode ecclésiastique:::::
+mode majeur:major mode:::::
+mode mineur:minor mode:::::
+modulation:modulation:::modulatie::
+mordant:mordent:::mordent::
+::::::
+mouvement:tempo; movement:::deel::
+mouvement conjoint:conjunct movement:::::
+mouvement disjoint:disjunct movement:::::
+mouvement lent:slow tempo:::::
+mouvement modéré:moderate tempo:::::
+mouvement rapide:fast tempo:::::
+médiante:mediant:::::
+métronome:metronome:::metronoom::
+noire:quarter note:::kwartnoot::
+note:note:::noot::
+note doublement pointée:double dotted note:::::
+note modale:modal note:::::
+note pointée:dotted note:::::
+note tonale:tonal note:::::
+notes enharmoniques:enharmonic notes:::enharmonische noot::
+nuance:shading:::::
+octave:octave:::octaaf::
+ornement:embellishment; accessory:::::
+:part:::partij::
+partition:score:::partituur::
+pause:whole rest:::::
+phrase:phrase:::::
+phrasé:phrasing:::::
+pizzicato:dash over/below:::::
+point:dot:::punt::
+point d'orgue:pause:::::
+point et liaison combinés:dot and curved line combined:::::
+pointillés:::::
+portamento:underline over/below:::::
+portée:staff:::(noten)balk; partij::
+portées:staves:::::
+quadruple croche:sixty-fourth note:::::
+quart de soupir:sixteenth rest:::::
+quarte:fourth:::kwart::
+quartolet:quadruplet:::kwartool::
+quinte:fifth:::kwint::
+registre:register:::register::
+renversement d'intervalle:inversion of interval:::inversie::
+renvoi:return sign:::herstellingsteken::
+respiration:artificial rest:::::
+:double whole note::breve:brevis:breve:
+ronde:whole note:::hele noot::
+rythme:rythm:::ritme::
+ré:D:::::
+seconde:second::::secunde:
+seizième de soupir:sixty-fourth rest:::::
+sensible:leading note:::::
+septième:seventh:::septiem:septime:
+sextolet:sextuplet:::::
+si:B:::::
+signes indicateurs de nuance:shading signs:::::
+silence:rest:::::
+sixain:sextuplet:::sextool::
+sixte:sixth:::::
+sol:G:::::
+soprano:soprano:::sopraan::
+soupir:quarter rest:::::
+sous-dominante:subdominant:::::
+sous-tonique:subtonic:::::
+:dot over/below:::staccato:staccato:
+sus-dominante:superdominant:::::
+sus-tonique:supertonic:::::
+syncope:syncopation; upbeat:::syncope::
+syncope irrégulière:irregular syncopation:::onregelmatige syncope::
+syncope régulière:regular syncopation:::::
+temps:beat:::tel::
+temps binaire:binary beat:::::
+temps faible:weak beat:::::
+temps fort:strong beat:::::
+temps ternaire:ternary beat:::::
+tempérament mésotonique:meantone tuning:::::
+tempérament Ã©gal:tempered tuning:::getempereerde stemming::
+tierce:third:::terts::
+ton:tone:::toon::
+tonalité:tonality:::tonaliteit::
+tonique:tonic:::::
+tons relatifs:relative scales:::::
+tons voisins:adjacent keys:::::
+transposition:transposition:::::
+transposition chromatique:chromatic transposition:::::
+transposition enharmonique:enharmonic transposition:::::
+trille:trill; shake:::::
+trille double:double trill:::::
+triolet:triplet:::::
+triple croche:thirty-second note:::::
+triton:tritone:::::
+ténor:tenor:::::
+tétracorde:tetrachord:::::
+unisson:unison:::::
+unité de mesure:unit of measure:::::
+unité de temps:unit of beat:::::
+ut:C:::::
+voix:voice:::stem::
+:quarter note::crotchet:::
+:quarter rest::crotchet rest:::
+:thirty-second note::demisemiquaver:::
+:thirty-second rest::demisemiquaver rest:::
+:sixty-fourth note::hemidemisemiquaver:::
+:sixty-fourth rest::hemidemisemiquaver rest:::
+:half note::minim:::
+:half rest::minim rest:::
+:eighth note::quaver:::
+:eighth rest::quaver rest:::
+:whole note::semibreve:::
+:whole rest::semibreve rest:::
+:sixteenth note::semiquaver:::
+:sixteenth rest::semiquaver rest:: :
index 2b3b52f30ab2339f493946e25ffd65065c025966..98a964793a8351f8b649ebdd542de5c76db404de 100644 (file)
@@ -4,7 +4,7 @@
 ; Forms by Han-Wen Nienhuys
 
 (setq forms-file "vocabulary-data")
-(setq forms-number-of-fields 6)
+(setq forms-number-of-fields 7)
 (setq forms-read-only nil)                 ; to make sure
 (setq forms-field-sep ":")
 (setq forms-multi-line nil)
       (list
        "*** Musical vocabulary ***\n"
        "\nItaliano:          " 6
-       "\nFrancais:           " 1
-       "\nUS English:       " 2
+       "\nFrancais:          " 1
+       "\nUS English:        " 2
        "\nDeutsch:           " 3
-       "\nBritish English:  " 4
-       "\nNederlands:            " 5
+       "\nBritish English:   " 4
+       "\nNederlands:        " 5
+       "\n\nExplanation\n\n" 7
+
        ))
diff --git a/NEWS b/NEWS
index 1c262faf47e1183988aef5a8b01566bd335a9a30..7fc5f9bcb56eb51014ee26443bc551ebd8467b9d 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,53 @@
+pl 59
+       - ly2dvi 0.9.hwn1, -K switch, 
+       - doc: moved manpages in separate directory.
+       - do WWW stuff via make
+       - mutopia-index.py
+       - ly2dvi 0.9 (JAF)
+       - multi platform build fixes
+       - junked embedded switches, embedded MF, obsolete TeX stuff
+       - junked virtual matrix storage: inlined most matrix computation,
+       speed increase of 30%
+       - junked taupindefs,  eglerdefs
+       - rm'd taupin/egler from INSTALL
+       - doc: engraving.bib, colorado.bib
+       - input hierarchy.
+
+pl 58.jcn6
+       - multi-measure rests: moved acknowledge from timing-translator
+       to -grav
+       - slur clipping experimental...
+       - bo to b
+       - always announce multi-measure
+
+pl 58.jcn5
+       - bf: reset plet after reading mmrest
+       - try at not generating moments...
+       - Multi_measure_rest 'symbol'
+
+pl 58.jcn4
+       - try at multi-measure rests: part.ly
+       - bf's: slur get_encompass
+       - bf: slur clipping
+
+pl 58.jcn3
+       - experimental (--test) clipping of too high or tilted slurs
+       - nicer slur control output and ps code
+       - bit thicker and round-capped tuplet bracket
+       - bf: slur.cc: RESIZE_ICE
+
+pl 58.jcn1
+       - varray.hh bezier.cc, slur.cc patches to avoid gcc 2.8.1 ice
+       - some inlining fixes
+       - configure: use -O to enable inlining
+       - included and fixed new make-patch.py
+       - bf: Mutopia.make
+       - bf: offset: operator - ()
+       - ugly hack bezier: do blow_fit twice
+       - bf's: bezier: rotate,translate
+
+***************
 pl 58
        - more *.make hacking
        - bracket fix (AG)
@@ -32,7 +82,7 @@ pl 57
        - solaris/irix patches (AO)
 
 
-pl 56.jcn5
+ pl 56.jcn5
        - bezier and slur: cleaning and fixes
        - bf: removed silly experimental beam feature
 
diff --git a/TODO b/TODO
index 8a8bdbaa23ddab01a78450f45ac268361a7ec61b..4d189db612f0d39aa6c863cb6d6d5d71eb7bc821 100644 (file)
--- a/TODO
+++ b/TODO
@@ -4,17 +4,14 @@ This is an assorted collection of stuff that will be done, might be
 done, or is an idea that I want to think about
 
 Most of the items are marked in the code as well, with full explanation. 
-grep for TODO and ugh/ugr
+grep for TODO and ugh/ug
 
 0.2:
-       * junk embedded mf
-
-
-
 
        * ly2dvi seams to eat accents as in \'el\'egant
 
        * libtoolize flowerlib
+
        * shared lib
 
        * bf: abbrevbeam? 
@@ -37,8 +34,6 @@ grep for TODO and ugh/ugr
        - remove all \multi
        - break-up heavily-nested score blocks
 
-       * --metafont
-
        * disable spaces in TeX stuff
        
        * handle ^C for tmp/file creation.
@@ -120,7 +115,9 @@ STUFF
 
        * AFM for font input?
 
+
 3RD PARTY BUGS:
+
        * tried egcs 1.0.2: failed on lily/stem.cc -> flower/include/interval.hh
          should narrow down and send bug report
 
@@ -153,6 +150,7 @@ PROJECTS
 
        * a musical dictionary. See Documentation/vocabulary-*, other
 languages:
+       - explanation
        - italian
        - german
        - dutch
@@ -193,8 +191,6 @@ languages:
 
        * accidentals per Voice_group
 
-       * Convert all ref/bib stuff into BibTeX.
-
        * Output class, handles : (smallish)
        - help text /(c) notice?
        - version line
@@ -326,7 +322,7 @@ SMALLISH PROJECTS
        * adaptive accidental spacing.
 
        * handle EOF graciously in error messages.
-
+oo
        * caching Item/spanner dimensions.
 
        * centered whole rest
diff --git a/VERSION b/VERSION
index 6b52b51a7f1a5128ba236d70862b143c9431ed77..ca4b0d86624af89135d065a5250de8d50862c77e 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,6 +1,6 @@
 MAJOR_VERSION=0
 MINOR_VERSION=1
-PATCH_LEVEL=58
+PATCH_LEVEL=59
 MY_PATCH_LEVEL=
 
 # use the above to send patches, always empty for released version:
index 3b2d36034dbbbfd533dbdcff36fbe64bd406e79f..b7a8c3a60df934acc485bbb71c4a6d36084f7c16 100644 (file)
@@ -8,6 +8,6 @@ EXTRA_DISTFILES =   install-sh config.sub config.guess ltconfig
 
 include $(depth)/make/Scripts.make
 
-EXECUTABLES=convert-mudela mudela-book
+EXECUTABLES=convert-mudela mudela-book ly2dvi
 
 include $(depth)/make/Executable.make
index dff069ab340af13c7ee6fe47ac5c6ff59eca1c71..56793f1e278f931a9a13234bcea9bb8eb6ba433b 100644 (file)
@@ -31,5 +31,5 @@ fi
 
 ln -sf $lelie/current/lily/out/lilypond bin/lilypond
 ln -sf $lelie/current/mi2mu/out/mi2mu bin/mi2mu
-configure --prefix=/usr --enable-debugging --enable-printing --enable-checking
 
+configure --prefix=/usr --enable-debugging --enable-printing --enable-checking
index 46dfe0faf30ada6f8c86e28ea050710dc5b8ba8e..768a56eb611884b5978494ca4da01b9c1b6579d5 100644 (file)
@@ -74,80 +74,12 @@ def multiple_find(pats, dirnames):
     for d in dirnames:
        l = l + my_find(pats,  d)
     return l
-#!@PYTHON@
-
-# 
-# flower.py -- python flower lib
-# 
-# source file of the GNU LilyPond music typesetter
-# 
-# (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-# 
-
-class File:
-    """silly wrapper for Python file object."""
-    def __init__ (self,nm, mode='r'):
-       if nm:
-           self.file_ = open (nm, mode);
-       elif mode == 'w':
-           self.file_ = sys.stdout
-       else:
-           self.file_ = sys.stdin
-           
-       self.eof_ = 0;
-    def readline (self):
-       l=  self.file_.readline ();
-       if not l:
-           self.eof_ = 1;
-       return l;
-    def write (self, str):
-       self.file_.write (str)
-    def eof (self):
-       return self.eof_
-    def close (self):
-       self.file_.close ()
-    def __del__ (self):
-       self.close ();
 
+def file_exist_b(name):
+    try: 
+       f = open(name)
+    except IOError:
+       return 0
+    f.close ()
+    return 1
 
-
-import fnmatch
-import os
-
-_debug = 0
-
-_prune = ['(*)']
-
-
-def my_find(patterns, dir = os.curdir):
-        list = []
-       try:
-           names = os.listdir(dir)
-       except os.error:
-           names = []
-        names.sort()
-        for name in names:
-                if name in (os.curdir, os.pardir):
-                        continue
-                fullname = os.path.join(dir, name)
-               for pat in patterns:
-                   if fnmatch.fnmatch(name, pat):
-                        list.append(fullname)
-                if os.path.isdir(fullname) and not os.path.islink(fullname):
-                        for p in _prune:
-                                if fnmatch.fnmatch(name, p):
-                                        if _debug: print "skip", `fullname`
-                                        break
-                        else:
-                                if _debug: print "descend into", `fullname`
-                               found = my_find(patterns, fullname)
-                               if found:
-                                   list = list + found
-        return list
-
-def multiple_find(pats, dirnames):
-    from find import find
-    l = []
-    for d in dirnames:
-       l = l + my_find(pats,  d)
-    return l
diff --git a/bin/genheader.py b/bin/genheader.py
new file mode 100644 (file)
index 0000000..9f16663
--- /dev/null
@@ -0,0 +1,136 @@
+#!@PYTHON@
+
+# 
+# genheader.py -- do headers (like these) 
+# 
+# source file of the GNU LilyPond music typesetter
+# 
+# (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+# 
+
+
+
+import posix
+import pwd
+import regex
+import regsub
+import string
+import sys
+import os
+import getopt
+import time
+
+class My_options:
+    def __init__(self):
+       self.commentify = None
+       self.add_hdr_def = 0
+       self.classname = ''
+
+my_options = My_options()
+
+def mail():
+    return os.environ['MAILADDRESS']
+
+def name():
+    return pwd.getpwuid(posix.getuid())[4]
+
+def c_commentify(str):
+    return  '/* ' + regsub.gsub('^','  ', str) + '\n */';
+
+def sh_commentify(str):
+    return regsub.gsub('^', '# ', str)
+
+def tex_commentify(str):
+    return regsub.gsub('^', '% ', str)
+
+def project_str():
+    cwd = posix.getcwd()
+    if regex.search('flower', cwd) <> -1:
+       PROJECT = "the Flower Library"
+    elif regex.search('mf$', cwd) <> -1:
+       PROJECT = "the Feta (defintively not an abbreviation for Font-En-Tja) music font"
+    else:
+       PROJECT = "the GNU LilyPond music typesetter"
+    return PROJECT
+
+def head_str(filename):
+    if my_options.add_hdr_def:
+       what = "declare " 
+    else:
+       what=" implement "
+
+
+    headstr = '\n%s -- %s\n\nsource file of %s\n\n(c) %d %s <%s>\n' \
+             %(filename, what, project_str(), time.localtime (time.time ())[0], name(), mail())
+    return headstr
+
+
+def c_include(filename):
+    startdef= filename;
+    trans = string.maketrans( string.lowercase + '-.', string.uppercase + '__')
+    startdef = string.translate(filename, trans)
+
+   
+    headstr = "\n\n#ifndef %s\n#define %s\n" % (startdef, startdef)
+    terminatestr = "#endif /* %s */\n"  % (startdef);
+
+    return headstr+ '\n\n'+ terminatestr;
+
+
+
+
+
+(options, files) = getopt.getopt(sys.argv[1:], 'tcsh', ['class']) 
+
+for opt in options:
+    o = opt[0]
+    a = opt[1]
+    if o == '-c':
+       my_options.commentify = c_commentify
+    elif o == '-t':
+       my_options.commentify = tex_commentify
+    elif o == '-s':
+       my_options.commentify = sh_commentify
+    elif o == '-h':
+       my_options.add_hdr_def = 1
+    elif o == '--class':
+       my_options.classname = a
+
+
+
+#
+# FIXME:  should create xxx.cc and include/xxx.hh, with implement/declare Xxx
+# in  one run
+if my_options.classname:
+    pass
+       
+def do_file(nm):
+    s = my_options.commentify(head_str(nm)) 
+    if my_options.add_hdr_def:
+       s = s + c_include(nm)
+    return s
+
+
+def extension(ext,nm):
+    ext = '\\.' + ext
+    return regex.search(ext, nm) <> -1
+
+def c_extension(nm):
+    return extension('hh',nm) or extension('cc',nm) \
+          or extension('icc', nm) or extension('tcc',nm)
+def select_commentification(nm):
+    if c_extension (nm):
+       return c_commentify
+    elif extension('py',nm) or extension('pl',nm) or extension('sh',nm):
+       return  sh_commentify
+    elif extension('mf',nm) or extension('tex',nm) or extension('ly',nm):
+       return tex_commentify
+    else: 
+       raise 'help'
+
+for nm in files:
+    if extension('hh', nm) or extension('icc', nm) or  extension('tcc', nm): 
+       my_options.add_hdr_def = 1
+    if my_options.commentify == None:
+       my_options.commentify = select_commentification(nm)
+    print do_file(nm)
index ac70e37209488378b8ab0b85008d61fa334d3073..11c15cfeb623d0ee6087359282485960c0293775 100644 (file)
@@ -8,20 +8,29 @@
 #  Original LaTeX file made by Mats Bengtsson, 17/8 1997
 #
 
-VERSION="0.8"
+VERSION="0.9"
 NAME=ly2dvi.sh
 IDENTIFICATION="$NAME $VERSION" 
 NOW=`date`
 echo "$IDENTIFICATION" 1>&2
 
+KEEP_LILY_OUTPUT=N
+
 # NEWS
 
+#0.9.hwn1
+#       - option to remove output of lily
+
+# 0.9  - Trap Lilypond abort
+#      - Replaced "\usepackage[T1]{fontenc}" with
+#        \usepackage[latin1]{inputenc} (takk, Mats)
+#      - Removed "()" around "\LilyIdString" (Janne didn't want it)
+
 # 0.8  - Trap Lilypond segmentation fault
 #      - Function for cleanup
 #      - Trap line
 #      - More human-readable variables
 #      - Some logics concerning rc-files
-
 # 0.7
 #      - Improved Lilypond error checking
 #      - Output orientation (landscape...). Overrides mudela file
@@ -46,7 +55,7 @@ echo "$IDENTIFICATION" 1>&2
 #      - Handles margins for A4 paper (equal on both sides)
 #      - new option -s (--separate) for one LaTeX run per file,
 #        else all files are run together
-
+#
 # 0.5
 #      - More useful ("two-level") debug.
 #      - The Q&D hack to find file names and not handling \include
@@ -129,7 +138,7 @@ echo "$IDENTIFICATION" 1>&2
 #
 cleanup() {
   $debug_echo "("$LF")("$FN")("$LOGFILE")"
-  if [ "$KEEP" != "Y" ]
+  if [ "$KEEP_LY2DVI_OUTPUT" != "Y" ]
   then
     [ -n "$LF" -a -f "$LF" ]           && rm -f $LF
     [ -n "$LOGFILE" -a -f "$LOGFILE" ] && rm -f $LOGFILE
@@ -172,7 +181,7 @@ then
 fi
 LOGFILE=$TMP/lilylog.$$                        # Logfile for lilypond
 PWIDTH=600;                            # Width of A4 paper!
-PHEIGTH=830;                            # Heigth of A4 paper!
+PHEIGTH=845;                            # Heigth of A4 paper!
 #
 # RC-files ?
 #
@@ -219,7 +228,7 @@ SEPFILE=N
 #
 # "x:" x takes argument
 #
-switches="DO:hkl:o:p:s\?"
+switches="DO:hkl:o:Kp:s\?"
 options=""
 #
 # ugh, "\-" is a hack to support long options
@@ -242,8 +251,12 @@ do
       exit 0
       ;;
     k  )
-      KEEP=Y
+      KEEP_LY2DVI_OUTPUT=Y
+      ;;
+    K  )
+      KEEP_LILY_OUTPUT=Y
       ;;
+    
     l  )
       LANGUAGE=$OPTARG
       ;;
@@ -273,7 +286,7 @@ do
          exit 0
           ;;
         k*|-k*)
-          KEEP=Y
+          KEEP_LY2DVI_OUTPUT=Y
           ;;
         l*|-l*)
           LANGUAGE=`echo $OPTARG | sed -e s/"^.*="//`
@@ -315,7 +328,7 @@ startFile(){
 #
 BN=`basename $File .tex`
 FN=$BN.$$
-if [ "$KEEP" != "Y" ]
+if [ "$KEEP_LY2DVI_OUTPUT" != "Y" ]
 then
   LF=$TMP/$FN.tex
 else
@@ -414,7 +427,8 @@ cat << EOF > $LF
 \nonstopmode
 $LLNG
 \usepackage{geometry}
-\usepackage[T1]{fontenc}
+%\usepackage[T1]{fontenc}
+\usepackage[latin1]{inputenc}
 %\addtolength{\oddsidemargin}{-1cm}
 %\addtolength{\topmargin}{-1cm}
 \setlength{\textwidth}{$TW}
@@ -435,7 +449,7 @@ do
     LLL=`echo $LL | sed -e 's/}.*$//' -e 's/.*{//'`
     if [ "$LLL" != "" ]
     then
-      echo '\'$L'{'$LLL'}%'                                >> $LF
+      echo "\\"$L'{'$LLL'}%'                                >> $LF
     fi
   fi
 done
@@ -449,7 +463,7 @@ EOF
 #
 endFile(){
 cat << EOF >> $LF
-\vfill\hfill{(\LilyIdString)}
+\vfill\hfill{\LilyIdString}
 \end{document}
 EOF
 #
@@ -503,6 +517,9 @@ findInput() {
 #
 # Loop through all files
 #
+
+LILY_OUTPUT_FILES=
+
 for GF in $*
 do
     findInput $GF
@@ -552,7 +569,7 @@ do
     OF=`egrep '^TeX output to ' $LOGFILE | \\
         sed -e 's/TeX output to//' -e 's/\.\.\.//'`
     $debug_echo "==> "$OF
-    STATUS=`egrep -i "error|segmentation" $LOGFILE`
+    STATUS=`egrep -i "error|segmentation|abort" $LOGFILE`
     echo $STATUS
     if [ ! -z "$STATUS" ]
     then
@@ -589,12 +606,20 @@ EOF
       FFile=""
       endFile
     fi
+    LILY_OUTPUT_FILES="$LILY_OUTPUT_FILES $OF"
   done
 done
 if [ $SEPFILE = N ]
 then
   endFile
 fi
+
+
+
+if [ $KEEP_LILY_OUTPUT = N ]
+then
+    rm $LILY_OUTPUT_FILES
+fi
 #
 # OK - finished
 #
index 6600ec2e7dbbbfb7788a110497b1234d64a1b5ef..69e14b0cc22e57a7b1855390cb39dc4dff7f0252 100644 (file)
@@ -19,7 +19,7 @@ import getopt
 import pipes
 
 
-mp_version = '0.3'
+mp_version = '0.51'
 
 class Options:
     def __init__(self):
@@ -34,23 +34,15 @@ def help():
        'Generate a patch to go to this version.\n'
        '  --from=FROM, -f FROM    old is FROM\n'
        '  --to=TO, -t TO          to version TO\n'  
-       
+       '  --dir=DIR, -d TO        directory\n'  
        )
 
 
 
 def untar(fn):
     # os.system('pwd');
-    sys.stderr.write('untarring ' + fn)
-# can't seem to fix errors:
-# gzip: stdout: Broken pipe
-# tar: Child returned status 1
-#   os.system ('tar xzf ' + fn)
-#   sys.stderr.write('\n')
-# ugh, even this does not work, but one error message less :-)
+    sys.stderr.write('untarring ' + fn + '\n')
     os.system ('gzip --quiet -dc ' + fn + '| tar xf - ')
-# so print soothing message:
-    sys.stderr.write('make-patch:ugh: Please ignore error: gzip: stdout: Broken pipe\n');
     sys.stderr.flush()
 
 
@@ -58,12 +50,14 @@ header = 'Generated by make-patch, old = %s, new = %s\n\
 \n\
 usage \n\
 \n\
-       cd lilypond-source-dir; patch -E -p0 < %s\n\
+       cd lilypond-source-dir; patch -E -p1 < %s\n\
 \n\
 Patches do not contain automatically generated files, \n\
 i.e. you should rerun configure\n\n'
 
+# ugh, how to get rid of .tex files generated by lily?
 pats = ['*.lsm', 'configure', '*.txt', 'lilypond.spec']
+
 def remove_automatic(dirnames):
     files = []
     files = files + multiple_find(pats, dirnames)
@@ -71,47 +65,47 @@ def remove_automatic(dirnames):
     for f in files:
        os.remove(f)
 
-def makepatch(fv, tv, patfile_nm):
-    import tempfile
-    prev_cwd = os.getcwd();
-    os.chdir ('/tmp')
-    untar(released_tarball(fv))
-    untar(released_tarball(tv))
-    remove_automatic([dirname(fv), dirname(tv)])
+def makepatch(fromdir, todir, patfile_nm):
 
-    os.chdir(dirname(tv))
-    
-    if not patfile_nm:
-       patfile_nm = '../patch-%s' % version_tuple_to_str(tv)
+    remove_automatic([fromdir, todir])
 
+    os.chdir(todir)
+    
     f = open(patfile_nm, 'w')
     f.write(header %\
-           (version_tuple_to_str(fv), version_tuple_to_str(tv), \
+           (fromdir, todir, \
             os.path.basename(patfile_nm)))
     f.close()
            
     sys.stderr.write('diffing to %s... ' % patfile_nm)
-    os.system('diff -urN ../%s . >> %s' % (dirname(fv), patfile_nm))
-    #os.system('gzip -9f %s' % patfile_nm)
-    os.chdir('/tmp')
-
-    sys.stderr.write('cleaning ... ')
-    os.system('rm -fr %s %s' % (dirname(tv), dirname(fv)))
-    sys.stderr.write('\n')
-    os.chdir(prev_cwd)
-    
+    os.system('pwd')
+    print ('diff -urN ../%s . >> %s' % (fromdir, patfile_nm))
+    os.system('diff -urN ../%s . >> %s' % (fromdir, patfile_nm))
+    os.system('gzip -9f %s' % patfile_nm)
+   
 def main():
+    os.environ['GZIP'] = '-q'
     sys.stderr.write('This is make-patch version %s\n' % mp_version)
     (cl_options, files) = getopt.getopt(sys.argv[1:], 
-                                       'hf:o:t:', ['output=', 'help', 'from=', 'to='])
+       'd:hf:o:t:', ['output=', 'help', 'from=', 'to='])
     outfn = ''
+    srcdir = ''
+
+    # on default, we want to diff tar balls, again :-)
+    from_b=1
+    to_b=1
     for opt in cl_options:
        o = opt[0]
        a = opt[1]
        if o == '--from' or o == '-f':
             options.from_version = version_str_to_tuple(a)
+            from_b=1
        elif o == '--to' or o == '-t':
-           options.to_version = version_str_to_tuple(a)
+            options.to_version = version_str_to_tuple(a)
+            to_b=1
+       elif o == '--dir' or o == '-d':
+           srcdir = a;
+           to_b=0
        elif o== '--help' or o == '-h':
            help()
            return 0;
@@ -124,7 +118,60 @@ def main():
        pn = 'patch-%s' % version_tuple_to_str(options.to_version)
        outfn =  os.path.join(os.getcwd(), pn)
 
-    makepatch(options.from_version, options.to_version, outfn)
+    import tempfile
+    prev_cwd = os.getcwd();
+
+    os.system('rm -rf /tmp/make-patch') 
+    try:
+       os.mkdir ('/tmp/make-patch')
+    except:
+       pass
+       
+    fromdir = dirname(options.from_version)
+    todir =  dirname(options.to_version)
+
+    diffdir = ''
+    if srcdir != '':
+           diffdir = '/tmp/make-patch/' + 'lilypond-%s'\
+               % version_tuple_to_str(options.to_version)
+
+    if from_b != 0 or (from_b == 0 and to_b == 0):
+       os.chdir ('/tmp/make-patch')
+       untar(released_tarball(options.from_version))
+       os.chdir(prev_cwd)
+    else:
+       fromdir = diffdir
+       sys.stderr.write('copying ' + srcdir + ' to ' + diffdir + '\n')
+       # os.system('cp -pr %s %s' % (srcdir, diffdir))
+       os.system('mkdir -p %s '% (diffdir))
+       os.system('tar cf - --exclude out %s | tar -xf - -C %s' 
+         % (srcdir, '/tmp/make-patch'))
+
+    if to_b != 0:
+       os.chdir ('/tmp/make-patch')
+       untar(released_tarball(options.to_version))
+       os.chdir(prev_cwd)
+    else:
+       todir = diffdir
+       sys.stderr.write('copying ' + srcdir + ' to ' + diffdir + '\n')
+       os.system('mkdir -p %s '% (diffdir))
+       # os.system('cp -pr %s %s'  (srcdir, diffdir))%
+       os.system('tar -cf - --exclude out %s | tar -xf - -C %s '
+         % (srcdir, '/tmp/make-patch'))
+
+    os.chdir('/tmp/make-patch')
+    os.chdir(todir)
+    # os.system('rm -f *.aux *.dvi *.midi *.log *.ps *.tex *.ly')
+    os.chdir ('/tmp/make-patch')
+
+    makepatch(fromdir, todir, outfn) 
+
+    os.chdir('/tmp/make-patch')
+    sys.stderr.write('cleaning ... ')
+    os.system('rm -fr %s %s' % (fromdir, todir))
+    sys.stderr.write('\n')
+    os.chdir(prev_cwd)
 
 if __name__ == '__main__':
     main()
+
diff --git a/bin/mutopia-index.py b/bin/mutopia-index.py
new file mode 100644 (file)
index 0000000..a268cde
--- /dev/null
@@ -0,0 +1,68 @@
+
+import sys
+import os
+
+lilypath =''
+try:
+    lilypath = os.environ['LILYPOND_SOURCEDIR'] + '/'
+except KeyError:
+    print 'Please set LILYPOND_SOURCEDIR to the toplevel source, eg LILYPOND_SOURCEDIR=/home/foobar/lilypond-1.2.3/'
+    sys.exit(1)
+
+lilypath = lilypath + '/bin/'
+sys.path.append(lilypath)
+from lilypython import *
+
+
+
+def gen_list(inputs, filename):
+    print "generating HTML list %s\n" % filename
+    list = open(filename, 'w')
+    list.write ('<html><TITLE>Rendered Examples</TITLE>\n'
+     '<body>These example files are taken from the LilyPond distribution.\n'
+     'LilyPond currently only outputs TeX and MIDI. The pictures and\n'
+     'PostScript files were generated using TeX, Ghostscript and some\n'
+     'graphics tools.  The papersize used for these examples is A4.  The GIF\n'
+     'files have been scaled to eliminate aliasing.\n');
+
+    for ex in inputs:
+       print '%s, ' % ex
+       header  = read_mudela_header(ex + '.ly.txt')
+       
+       def read_dict(s, default, h =header):
+               try:
+                   ret = h[s]
+               except KeyError:
+                   ret = default
+               return ret
+       head = read_dict('title', ex)
+       composer = read_dict('composer', '')
+       desc = read_dict('description', '')
+       list.write('<hr>')
+       list.write('<h1>example file: %s</h1>' % head);
+       if composer <> '':
+           list.write('<h2>%s</h2>\n' % composer)
+       if desc <> '':
+           list.write('%s<p>' % desc)
+       list.write ('<ul>')
+       def list_item(filename, desc, l = list):
+           if file_exist_b(filename):
+               l.write ('<li><a href=%s>%s</a>\n' % (filename, desc))
+           
+       list_item(ex + '.ly.txt', 'The input')
+       for pageno in range(1,10):
+           f  = ex + '-page%d.gif' % pageno
+           if not file_exist_b (f):
+               break
+           list_item(f, 'The output (picture, page %d)' % pageno)
+       list_item(ex + '.ps.gz', 'The output (gzipped PostScript)')
+       list_item(ex + '.midi', 'The output (MIDI)')
+       list.write ("</ul>");
+
+    list.write( "</BODY></HTML>");
+    list.close()
+
+allfiles = multiple_find (['*.ly.txt'], '.')
+
+gen_list (sys.argv[1:], 'index.html')
diff --git a/bin/profile-conf.sh b/bin/profile-conf.sh
new file mode 100644 (file)
index 0000000..79dbd73
--- /dev/null
@@ -0,0 +1,2 @@
+
+configure --prefix=~ --enable-profiling --enable-config=optprof --enable-optimise --disable-checking
index dc5198867533f81e4d2fab82a751734b256e029c..57021850f5d8e1ed338920294c6704f39b45216e 100644 (file)
@@ -20,5 +20,3 @@ cat $1 | gs  -q -sDEVICE=ppmraw \
     -sOutputFile="|pnmscale 0.5|ppmtogif > $FILE-page%d.gif" \
     -r200 -dNOPAUSE - -c quit
 
-
-
index 57fdbc39da5f3787410e8498a6630bb9a7c98af7..08f8af85239381b571b35e7bf60ff1ce2dee8699 100644 (file)
@@ -35,6 +35,5 @@ LN = @LN@
 ZIP = @ZIP@
 PERL = @PERL@
 PYTHON = @PYTHON@
-OUTDIR_NAME = @OUTDIR_NAME@
-
+CONFIGSUFFIX = @CONFIGSUFFIX@
 
index 13bf8fd95f400577ca38320837518054d8692c75..5b00c8f99d2a86972e637d761af52248e8b72e3b 100644 (file)
@@ -3,11 +3,11 @@ dnl  Process this file with autoconf to produce a configure script.
 
 
 AC_INIT(flower/choleski.cc)
-AC_CONFIG_HEADER(config.hh:config.hh.in) #ugh flower/out/
+AC_CONFIG_HEADER($CONFIGFILE.hh:config.hh.in) #ugh flower/out/
 AC_CONFIG_AUX_DIR(bin)
 AC_CANONICAL_HOST
 
-OUTDIR_NAME=out
+
 . $srcdir/VERSION
 FULL_VERSION=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_LEVEL
 if test x$MY_PATCH_LEVEL != x; then
@@ -47,12 +47,16 @@ AC_PROG_YACC
 # ugh, ugh
 ac_cv_prog_lex_root=lex.yy
 
+# -O is necessary to get inlining
+OPTIMIZE="-O"
 printing_b=no
 checking_b=yes
 optimise_b=no
 profile_b=no
-
+CONFIGSUFFIX=
 debug_b=yes
+     
+
 
 AC_LANG_CPLUSPLUS
 
@@ -96,6 +100,11 @@ AC_ARG_ENABLE(mf-dir,
      [MFDIR=$enableval],
      [MFDIR=auto])
 
+AC_ARG_ENABLE(config,
+     [  enable-config=FILE            put configure settings in config-FILE.make],
+     [CONFIGSUFFIX=$enableval])
+     
+
 if test "$printing_b" = no; then
     AC_DEFINE(NPRINT)
 fi
@@ -105,7 +114,8 @@ if test "$checking_b" = no; then
 fi
 
 if test "$optimise_b" = yes; then
-    DEFINES="$DEFINES -finline-functions -O2 -DSTRING_UTILS_INLINED"
+    DEFINES="$DEFINES -finline-functions -DSTRING_UTILS_INLINED"
+    OPTIMIZE="-O2"
     AC_DEFINE(STRINGS_UTILS_INLINED)
 fi
 
@@ -132,11 +142,19 @@ else
     ZIP="zip -r -9"
 fi
 
+if test "$CONFIGSUFFIX" != "" ; then
+    CONFIGFILE=config-$CONFIGSUFFIX
+else
+    CONFIGFILE=config
+fi
+     
+
+
 dnl COMPILEINFO="$HOST $host $TARGET $target"
 AUTOGENERATE="This file was automatically generated by configure"
 CPPFLAGS=${CPPFLAGS:-""}       # we don't want -g -O junk
 # CXXFLAGS=${CXXFLAGS:-""}     # we don't want -g -O junk
-CXXFLAGS=$DEFINES
+CXXFLAGS="$DEFINES $OPTIMIZE"
 LDFLAGS=$EXTRA_LIBES
 
 AC_PROG_CXX
@@ -189,7 +207,7 @@ AC_SUBST(MFDIR)
 AC_SUBST(DIR_DATADIR)
 AC_SUBST(absolute_builddir)
 AC_SUBST(EXTRA_LIBES)
-AC_SUBST(OUTDIR_NAME)
+AC_SUBST(CONFIGSUFFIX)
 AC_CHECK_PROGS(BISON, bison, error)
 AC_CHECK_PROGS(FLEX, flex, error)
 AC_CHECK_PROGS(MAKE, make, error)
@@ -262,7 +280,7 @@ touch stamp-h.in
 
 
 # first do Foobar/Makefile then Foobar/include/Makefile
-AC_OUTPUT(config.make)
+AC_OUTPUT($CONFIGFILE.make:config.make.in)
 
 rm -f Makefile
 cp make/Toplevel.make.in ./Makefile
index 749922590d248c2d29427dbc443bf807a0264bf3..111717025e1822504dac1415307572bb947e5bc2 100644 (file)
@@ -1,3 +1,6 @@
+pl 41
+       - matrix fixes; more inlining no virtual methods
+
 pl 40
        - do some Complex number stuff in Offset
        - included axies, offset from lily
index 0c19fcdf017fe219df654fceaaffe4620ef6911f..53f4cca490fe9c4331cedfc0896e02f6cb15722c 100644 (file)
@@ -1,6 +1,6 @@
 MAJOR_VERSION=1
 MINOR_VERSION=1
-PATCH_LEVEL=40
+PATCH_LEVEL=41
 
 # use to send patches, always empty for released version:
 #
index 989a042603ec9f7baf65951435e2b5e888cd5e50..5c803ab0a8af41581ddb0015b8aa7afce8905420 100644 (file)
@@ -81,7 +81,7 @@ Choleski_decomposition::band_matrix_solve (Vector &out, Vector const &rhs) const
 void
 Choleski_decomposition::solve (Vector &x, Vector const &rhs) const
 {
-  if (L.band_b()
+  if (band_b_
     {
       band_matrix_solve (x,rhs);
     }
@@ -145,8 +145,8 @@ Choleski_decomposition::band_matrix_decompose (Matrix const &P)
       Real d = P(i,i) - sum;
       D(i) = d;
     }
-  L.try_set_band();
-  assert (L.band_i() == P.band_i ());
+  L.set_band();
+  band_b_ = true;
 }
 
 
@@ -162,11 +162,14 @@ Choleski_decomposition::Choleski_decomposition (Matrix const & P)
 #ifdef PARANOID
   assert ((P-P.transposed()).norm ()/P.norm () < EPS);
 #endif
-  if  (P.band_b()) 
+  band_b_ = false;
+
+  int b = P.calc_band_i ();
+
+  if (b <= P.dim ()/2)  
     band_matrix_decompose (P);
   else
     full_matrix_decompose (P);
 
 #ifdef PARANOID
   assert ((original()-P).norm () / P.norm () < EPS);
index 5e05c1bb4bd99a9ce8a667664fb862ea51219a10..8389854361dd3aef1926d305f1fa5b2c59efb8e4 100644 (file)
@@ -16,8 +16,8 @@ Full_storage::operator=(Full_storage const &fs)
   OK();
   fs.OK();
   for (int i=0; i<height_i_; i++)
-       for (int j=0; j<width_i_; j++)
-           els_p_p_[i][j]= fs.els_p_p_[i][j];
+    for (int j=0; j<width_i_; j++)
+      els_p_p_[i][j]= fs.els_p_p_[i][j];
 }
 
 
@@ -25,7 +25,6 @@ void
 Full_storage::OK() const
 {
 #ifndef NDEBUG
-
   assert (max_height_i_ >= height_i_ && max_width_i_ >= width_i_);
   assert (height_i_ >= 0 && width_i_ >= 0);
   assert (els_p_p_||!max_height_i_);
@@ -38,7 +37,7 @@ Full_storage::OK() const
 Full_storage::~Full_storage() 
 {
   for (int i=0; i < max_height_i_; i++)
-       delete [] els_p_p_[i];
+    delete [] els_p_p_[i];
   delete[] els_p_p_;
 }
 
@@ -48,56 +47,16 @@ Full_storage::resize (int rows, int cols)
   OK();
   resize_cols (rows);
   resize_rows (cols);
+  band_i_ = rows >? cols;
 }
 
-bool
-Full_storage::mult_ok (int i, int) const
-{
-  return i < height_i_;
-}
-
-
-bool
-Full_storage::trans_ok (int , int j) const
-{
-     return j < width_i_;
-} 
-
-
-
-void
-Full_storage::trans_next (int &i, int &j) const
-{
-  assert (trans_ok (i,j));
-  i++;
-  if (i >= height_i_) 
-    {
-       i=0;
-       j ++;
-    }
-}
-
-
-void
-Full_storage::mult_next (int &i, int &j) const
-{
-  assert (mult_ok (i,j));
-  j++;
-  if (j >= width_i_) 
-    {
-       j=0;
-       i++;
-    }
-}
-
-
 void
 Full_storage::delete_column (int k)
 {
   assert (0 <= k &&k<width_i_);    
   for (int i=0; i< height_i_ ; i++)
-       for (int j=k+1; j <width_i_; j++)
-           els_p_p_[i][j-1]=els_p_p_[i][j];
+    for (int j=k+1; j <width_i_; j++)
+      els_p_p_[i][j-1]=els_p_p_[i][j];
   width_i_--;
 }
 
@@ -107,8 +66,8 @@ Full_storage::delete_row (int k)
 {
   assert (0 <= k &&k<height_i_);
   for (int i=k+1; i < height_i_ ; i++)
-       for (int j=0; j < width_i_; j++)
-           els_p_p_[i-1][j]=els_p_p_[i][j];
+    for (int j=0; j < width_i_; j++)
+      els_p_p_[i-1][j]=els_p_p_[i][j];
   height_i_--;
 }
 
@@ -120,51 +79,58 @@ Full_storage::insert_row (int k)
   assert (0 <= k&& k <=height_i_);
   resize_cols (height_i_+1);
   for (int i=height_i_-1; i > k ; i--)
-       for (int j=0; j <width_i_; j++)
-           els_p_p_[i][j]=els_p_p_[i-1][j];
+    for (int j=0; j <width_i_; j++)
+      els_p_p_[i][j]=els_p_p_[i-1][j];
+
+}
+Array<Real>
+Full_storage::row (int n) const
+{
+  Array<Real> r;
+  for (int j = 0; j < cols(); j++)
+    r.push (elem (n,j));
+  return r;
+}
 
+Array<Real>
+Full_storage::column (int n) const
+{
+  Array<Real> r;
+  for (int i = 0; i < rows(); i++)
+    r.push (elem (i,n));
+  return r;
 }
 
-bool
-Full_storage::try_right_multiply (Matrix_storage * dest, Matrix_storage const * right) const
+void
+Full_storage::set_size (int rows, int cols)
 {
-  if (dest->name() != Full_storage::static_name () ||
-       right->name() != Full_storage::static_name ())
-       return false;
-
-  Full_storage *d_l = (Full_storage*)dest;
-  Full_storage *r_l = (Full_storage*)right;
-  
-  d_l->set_size (height_i_, r_l->width_i_);
-  for (int i=0; i < d_l->height_i_; i++)
-       for (int j = 0; j < d_l->width_i_; j++) 
-         {
-           Real &r (d_l->els_p_p_[i][j]);
-           r=0.0;
-           for (int k = 0; k < width_i_; k++)
-               r += els_p_p_[i][k] * r_l->els_p_p_[k][j];
-           
-         }
-  return true;
-  
-  
+  resize (rows,cols);
 }
-IMPLEMENT_IS_TYPE_B1(Full_storage,Matrix_storage);
+       
+void
+Full_storage::set_size (int rows)
+{
+      
+  resize (rows);
+}
+       
+
+
 void
 Full_storage::resize_cols (int newh)
 {
   if (newh <= max_height_i_) 
     {
-       height_i_=newh;
-       return;
+      height_i_=newh;
+      return;
     }
    
   Real ** newa=new Real*[newh];
   int j=0;
   for (; j < height_i_; j++)
-       newa[j] = els_p_p_[j];
+    newa[j] = els_p_p_[j];
   for (; j < newh; j++)
-       newa[j] = new Real[max_width_i_];
+    newa[j] = new Real[max_width_i_];
   delete[] els_p_p_;
   els_p_p_=newa;
 
@@ -173,34 +139,22 @@ Full_storage::resize_cols (int newh)
 
 
 
-Full_storage::Full_storage (Matrix_storage*m)
-{
-  set_size (m->rows(), m->cols ());
-  if (!m->is_type_b (Full_storage::static_name()))
-       for (int i=0; i<height_i_; i++)
-           for (int j=0; j<width_i_; j++)
-               els_p_p_[i][j]=0.0;
-  for (int i,j=0; m->mult_ok (i,j); m->mult_next (i,j))
-       els_p_p_[i][j] = m->elem (i,j);
-}
-
-
 void
 Full_storage::resize_rows (int neww)
 {
   if (neww <= max_width_i_) 
     {
-       width_i_=neww;
-       return;
+      width_i_=neww;
+      return;
     }
   for (int i=0; i < max_height_i_ ; i++) 
     {
-       Real* newa = new Real[neww];
-       for (int k=0; k < width_i_; k++)
-           newa[k] = els_p_p_[i][k];
+      Real* newa = new Real[neww];
+      for (int k=0; k < width_i_; k++)
+       newa[k] = els_p_p_[i][k];
 
-       delete[] els_p_p_[i];
-       els_p_p_[i] = newa;
+      delete[] els_p_p_[i];
+      els_p_p_[i] = newa;
     }
   width_i_ = max_width_i_ = neww;      
 }
@@ -210,7 +164,5 @@ Full_storage::resize_rows (int neww)
 #endif
 #define INLINE
 
-INLINE
-IMPLEMENT_VIRTUAL_COPY_CONS(Full_storage,Matrix_storage);
 
 #include "full-storage.icc"
index f4b5e2981499438255bd4b0cd5613ff82bfdd012..c6db243ba8e1c0ee6f03fcfbd633ae56086b09b4 100644 (file)
@@ -16,6 +16,8 @@ struct Choleski_decomposition {
   /// lower triangle of Choleski decomposition
   Matrix L;
 
+  bool band_b_;
+
   /// diagonal 
   Vector D;
 
index 45750029168186b4b844bd2e43ea2f9715ec83f3..8fec189c735925c1ecbcd5dde21bb1cb61c4ad27 100644 (file)
 #define FULL_STORAGE_HH
 
 #include "varray.hh"
-#include "matrix-storage.hh"
 #include "real.hh"
 
 /// simplest matrix storage. refer to its baseclass for the doco.
-class Full_storage : public Matrix_storage
+class Full_storage 
 {
   /// height, width
-  int height_i_,width_i_;
+  int height_i_;
+  int width_i_;
   /// maxima.
-  int max_height_i_, max_width_i_;
+  int max_height_i_;
+  int max_width_i_;
     
-    /// the storage
+  /// the storage
   Real** els_p_p_;
 
-  void
-  init() ;
+  void init() ;
      
   bool valid (int i, int j) const ; 
 
@@ -34,35 +34,138 @@ class Full_storage : public Matrix_storage
   void resize_cols (int);
 
 public:
-  virtual int rows() const;
-  virtual int cols() const ;
-    
+  int band_i_;                 // ugh
+
+  /// check invariants
+  void OK() const;
     
-  virtual void resize (int i, int j);
-  virtual void resize (int i);
-  virtual Real& elem (int i,int j);
-  virtual Real elem (int i, int j) const ;
+    /// height of matrix
+  int rows() const;
+
+  /// width of matrix
+  int cols() const;
+
+  /// size if square
   int dim() const;
-  Full_storage (Matrix_storage*);
+      
+  /**  set the size. contents lost.       
+      PRE
+      i >=0, j>=0
+    */
+  void set_size (int rows, int cols) ;
+
+  /**set the size to square dimen. contents lost
+      PRE
+      i>=0
+    */
+  void set_size (int i) ;
+  /**set the size to i.
+
+      keep contents. If enlarged contents unspecified
+        
+      PRE
+      i>=0, j>=0
+    
+    */
+  void resize (int rows, int cols);
+  /**    
+    set the size to square dimen. contents kept
+    Keep contents. If enlarged contents are unspecified
+    
+    PRE
+    i>=0  
+    */
+  void resize (int i);
+  
+    
+  /**
+    access an element.
+
+    Generate an errormessage, if this happens
+    in the 0-part of a sparse matrix.
+    */
+
+  Real& elem (int i,int j);
+
+  /// access a element, no modify
+  Real elem (int i, int j) const;
+
+  Array<Real> row (int i) const ;
+  Array<Real> column (int j) const;
+
+    
+  /**
+    add a row to the matrix before  row k. Contents
+    of added row are unspecified
+
+      0 <= k <= rows()
+    */
+  void insert_row (int k);
+
+    
+  /**
+      delete a row from this matrix.
+
+      PRE
+      0 <= k < rows();
+    */
+  void delete_row (int k);
+  void delete_column (int k);
+
+
+    
+    /**
+      at end of matrix?. when doing loop
+
+      for (i=0; i<h; i++)
+        for (j=0; j<w; j++)
+          ..
+
+    */
+  bool mult_ok (int i, int j) const;
+
+  /**
+      walk through matrix (regular multiply).
+      get next j for row i, or get next row i and reset j.
+      this will make sparse matrix implementation easy.
+    
+      PRE
+      mult_ok (i,j)
+     */
+  void mult_next (int &i, int &j) const;
+
+  /**
+      valid matrix entry. return false if at end of row
+    */
+  bool trans_ok (int i, int j) const;
+
+  /**
+      walk through matrix (transposed multiply).
+      Get next i (for column j)
+    
+      PRE
+      ver_ok (i,j)
+     */
+
+  void trans_next (int &i, int &j) const;
+
   Full_storage();
   Full_storage (int i, int j);
   Full_storage (Full_storage const&);
   Full_storage (int i);
-  void OK() const;
   void operator=(Full_storage const &);
     
-  virtual void insert_row (int k);
-  virtual void delete_row (int k);
-  virtual void delete_column (int k);
     
   ~Full_storage();
-  virtual bool mult_ok (int i, int j) const;
-  virtual void mult_next (int &i, int &j) const ;
-  virtual bool trans_ok (int i, int j) const;
-  virtual void trans_next (int &i, int &j) const;
-  DECLARE_VIRTUAL_COPY_CONS(Full_storage,Matrix_storage);
-  DECLARE_MY_RUNTIME_TYPEINFO;
-  virtual bool try_right_multiply (Matrix_storage * dest, Matrix_storage const *) const;
 };
 
+#ifndef INLINE
+#define INLINE inline
+#endif
+
+#include "full-storage.icc"
+
+
 #endif // FULL_STORAGE_HH
index 9401ff245facd3dc303fca518ea171a39a6d6ace..a1b4c1bf41c2523afcb535b4d05804cfe123ec26 100644 (file)
@@ -15,8 +15,10 @@ INLINE void
 Full_storage::init()
 {
   els_p_p_=0;
+  band_i_ = 0;    
   height_i_=width_i_=max_height_i_=max_width_i_=0;
 }
+
 INLINE bool
 Full_storage::valid (int i, int j) const
 {
@@ -27,7 +29,6 @@ Full_storage::valid (int i, int j) const
 
 INLINE
 Full_storage::Full_storage (Full_storage const&s)
-  : Matrix_storage (s)
 {
   init();
   (*this) = s;
@@ -57,11 +58,13 @@ Full_storage::rows() const
 {
   return height_i_;
 }
+
 INLINE int
 Full_storage::cols() const
 {
   return width_i_;
 }
+
 INLINE int
 Full_storage::dim() const
 {
@@ -88,8 +91,46 @@ Full_storage::Full_storage (int i)
   init();
   set_size (i);
 }
-//INLINE
-//IMPLEMENT_VIRTUAL_COPY_CONS(Full_storage,Matrix_storage);
 
+
+INLINE
+bool
+Full_storage::mult_ok (int i, int ) const
+{
+  return i < height_i_;
+}
+
+INLINE
+bool
+Full_storage::trans_ok (int , int j) const
+{
+  return j < width_i_;
+} 
+
+
+INLINE
+void
+Full_storage::trans_next (int &i, int &j) const
+{
+  assert (trans_ok (i,j));
+  i++;
+  if (i >= height_i_) 
+    {
+      i= (0 >? j - band_i_);
+      j ++;
+    }
+}
+
+INLINE
+void
+Full_storage::mult_next (int &i, int &j) const
+{
+  assert (mult_ok (i,j));
+  j++;
+  if (j >= width_i_) 
+    {
+      j= 0 >? (i - band_i_);
+      i++;
+    }
+}
 #endif // FULL_STORAGE_ICC
index a48f87050c9a1881fda29dc9962262cee63fe14e..7cb3f4c3d49d688a48b679fba7cb17a507075d92 100644 (file)
@@ -13,9 +13,6 @@
 #include "varray.hh"
 #include "real.hh"
 
-// oo, noo!
-#include "virtual-methods.hh"
-
 /** 
 
     base class for interface with matrix storageclasses.  There are no
@@ -33,143 +30,123 @@ class Matrix_storage {
     
 
 public:
-    /// check invariants
-    virtual void OK() const=0;
+  /// check invariants
+  void OK() const;
     
-    /// height of matrix
-    virtual int rows() const = 0;
+  /// height of matrix
+  int rows() const;
 
-    /// width of matrix
-    virtual int cols() const = 0;
+  /// width of matrix
+  int cols() const;
 
-    /// size if square
-    virtual int dim() const =0;
+  /// size if square
+  int dim() const;
       
-    /**  set the size. contents lost.       
-      PRE
-      i >=0, j>=0
-    */
-    virtual void set_size (int rows, int cols) ;
+  /**  set the size. contents lost.       
+       PRE
+       i >=0, j>=0
+  */
+  void set_size (int rows, int cols) ;
 
  
-    /**set the size to square dimen. contents lost
-      PRE
-      i>=0
-    */
-    virtual void set_size (int i) ;
-     /**set the size to i.
-
-      keep contents. If enlarged contents unspecified
+  /**set the size to square dimen. contents lost
+     PRE
+     i>=0
+  */
+  void set_size (int i) ;
+  /**set the size to i.
+
+     keep contents. If enlarged contents unspecified
         
-      PRE
-      i>=0, j>=0
+     PRE
+     i>=0, j>=0
     
-    */
-    virtual void resize (int rows, int cols) = 0;
+  */
+  void resize (int rows, int cols);
  
   /**    
-    set the size to square dimen. contents kept
-    Keep contents. If enlarged contents are unspecified
+        set the size to square dimen. contents kept
+        Keep contents. If enlarged contents are unspecified
     
-    PRE
-    i>=0  
-    */
-    virtual void resize (int i) = 0;
+        PRE
+        i>=0  
+  */
+  void resize (int i);
   
     
-    /**
-    access an element.
+  /**
+     access an element.
 
-    Generate an errormessage, if this happens
-    in the 0-part of a sparse matrix.
-    */
+     Generate an errormessage, if this happens
+     in the 0-part of a sparse matrix.
+  */
 
-    virtual Real& elem (int i,int j) = 0;
+  Real& elem (int i,int j);
 
-    /// access a element, no modify
-    virtual Real elem (int i, int j) const = 0;
+  /// access a element, no modify
+  Real elem (int i, int j) const;
 
-    virtual Array<Real> row (int i) const ;
-    virtual Array<Real> column (int j) const;
+  Array<Real> row (int i) const ;
+  Array<Real> column (int j) const;
 
     
-    /**
-    add a row to the matrix before  row k. Contents
-    of added row are unspecified
+  /**
+     add a row to the matrix before  row k. Contents
+     of added row are unspecified
 
-      0 <= k <= rows()
-    */
-    virtual void insert_row (int k)=0;
+     0 <= k <= rows()
+  */
+  void insert_row (int k);
 
     
-      /**
-      delete a row from this matrix.
-
-      PRE
-      0 <= k < rows();
-    */
-    virtual void delete_row (int k)=0;
-        virtual void delete_column (int k)=0;
-    virtual ~Matrix_storage() { }
-    virtual Matrix_storage *clone() const=0;
+  /**
+     delete a row from this matrix.
 
+     PRE
+     0 <= k < rows();
+  */
+  void delete_row (int k);
+  void delete_column (int k);
+  ~Matrix_storage() { }
 
     
-    /**
-      at end of matrix?. when doing loop
+  /**
+     at end of matrix?. when doing loop
 
-      for (i=0; i<h; i++)
-        for (j=0; j<w; j++)
-          ..
+     for (i=0; i<h; i++)
+     for (j=0; j<w; j++)
+     ..
 
-    */
-    virtual bool mult_ok (int i, int j) const=0;
+  */
+  bool mult_ok (int i, int j) const;
 
-    /**
-      walk through matrix (regular multiply).
-      get next j for row i, or get next row i and reset j.
-      this will make sparse matrix implementation easy.
-    
-      PRE
-      mult_ok (i,j)
-     */
-    virtual void mult_next (int &i, int &j) const  = 0;
-
-    /**
-      valid matrix entry. return false if at end of row
-    */
-    virtual bool trans_ok (int i, int j) const=0;
-
-    /**
-      walk through matrix (transposed multiply).
-      Get next i (for column j)
+  /**
+     walk through matrix (regular multiply).
+     get next j for row i, or get next row i and reset j.
+     this will make sparse matrix implementation easy.
     
-      PRE
-      ver_ok (i,j)
-     */
-
-    virtual void trans_next (int &i, int &j) const  = 0;
+     PRE
+     mult_ok (i,j)
+  */
+  void mult_next (int &i, int &j) const;
+
+  /**
+     valid matrix entry. return false if at end of row
+  */
+  bool trans_ok (int i, int j) const;
+
+  /**
+     walk through matrix (transposed multiply).
+     Get next i (for column j)
     
-    /// generate a "Full_storage" matrix    
-    static Matrix_storage *get_full (int n, int m);
-    static void set_band (Matrix_storage*&, int band);
-    static void set_full (Matrix_storage*&);
-    virtual bool try_right_multiply (Matrix_storage *dest, 
-                                   const Matrix_storage *fact) const ;
-    /**
-      RTTI.
-     */
-    DECLARE_MY_RUNTIME_TYPEINFO;
+     PRE
+     ver_ok (i,j)
+  */
 
+  void trans_next (int &i, int &j) const;
     
-    static Matrix_storage* get_product_result (Matrix_storage *left, 
-                                             Matrix_storage *right);
-    
-    
-    static void set_addition_result (
-       Matrix_storage *&dat, Matrix_storage *right);
-    static void set_product_result (
-       Matrix_storage*&dest, Matrix_storage*left, Matrix_storage*right);
+  /// generate a "Full_storage" matrix    
+  static void set_band (Matrix_storage*&, int band);
 };
 
 #endif // MATRIX_STORAGE_HH
index 321aeaadcf96978735aa3c18e0dd0dc631788b55..660b2d776fd7b1b262dd30adab1c502878b14977 100644 (file)
@@ -10,7 +10,7 @@
 #ifndef MATRIX_HH
 #define MATRIX_HH
 
-#include "matrix-storage.hh"
+#include "full-storage.hh"
 #include "vector.hh"
 #include "offset.hh"
 
@@ -28,13 +28,14 @@ class Matrix {
   friend Matrix operator *(Matrix const &m1, Matrix const &m2);
 
 protected:
-  Matrix_storage *dat;
+  Full_storage *dat_;
   void set (Matrix_storage*);
-  Matrix (Matrix_storage*);
 public:
-  void OK() const { dat->OK(); }
-  int cols() const { return dat->cols (); }
-  int rows() const { return dat->rows (); }
+  void OK() const { dat_->OK(); }
+  void set_band ();
+  int calc_band_i () const;
+  int cols() const { return dat_->cols (); }
+  int rows() const { return dat_->rows (); }
 
   /**  return the size of a matrix. 
     PRE
@@ -49,10 +50,6 @@ public:
     0 <= band_i() <= dim
     */
   int band_i() const;
-  bool band_b() const;
-  void set_full() const;
-  void try_set_band() const;
-  ~Matrix() { delete dat; }
 
   /// set entries to r 
   void fill (Real r);
@@ -83,8 +80,8 @@ public:
     PRE
     0 <= k < rows();
     */
-  void delete_row (int k) { dat->delete_row (k); }
-  void delete_column (int k) { dat->delete_column (k); }
+  void delete_row (int k) { dat_->delete_row (k); }
+  void delete_column (int k) { dat_->delete_column (k); }
 
   /**
     square n matrix, initialised to null
@@ -102,10 +99,10 @@ public:
   void operator=(Matrix const &m);
 
   /// access an element
-  Real operator()(int i,int j) const { return dat->elem (i,j); }
+  Real operator()(int i,int j) const { return dat_->elem (i,j); }
 
   /// access an element
-  Real &operator()(int i, int j) { return dat->elem (i,j); }
+  Real &operator()(int i, int j) { return dat_->elem (i,j); }
 
   /// Matrix multiply with vec (from right)
   Vector operator *(Vector const &v) const;
@@ -142,6 +139,7 @@ public:
 
   operator String() const;
   void print() const;
+  ~Matrix ();
 };
 
 inline Vector
index 03685c1a1a2e19e6582d8dea80f7a8b5b4127a24..428a8fa6b3ca0a9169068b81019f8bed12800c27 100644 (file)
@@ -39,7 +39,7 @@ public:
     Offset o = *this;
     o.x () = - o.x ();
     o.y () = - o.y ();
-    return *this;
+    return o;
   }
   Offset& operator-=(Offset o) {
     x()-=o.x ();
index facc36ac73ccaad7eb2567e2f5516a0d9d518fd3..457c78af04f1ddc6a72b45e412939162f0dd2949 100644 (file)
@@ -27,6 +27,7 @@ struct Scalar : public String {
   bool isnum_b() const;
   operator Real();
   operator int();
+  bool to_bool () const;
 
   /**   perl -like string to bool conversion.
    */
index 02d16885b12fc0629df4f45e04ae096b493009fe..4d369fdbbb8d2c81a0a2ea50cb610207313f7e2f 100644 (file)
@@ -31,18 +31,6 @@ public:
   bool eof() {
     return feof (f);
   }
-  bool eol() {
-    return (peek() == '\n');
-  }
-  char peek() {
-    char c = get();
-    unget (c);
-    return c;
-  }
-  int line(){
-    return line_no;
-  }
-
   char    get() {
     char c;
        
@@ -60,6 +48,18 @@ public:
       line_no--;
     pushback.push (c);
   }
+  char peek() {
+    char c = get();
+    unget (c);
+    return c;
+  }
+  bool eol() {
+    return (peek() == '\n');
+  }
+  int line(){
+    return line_no;
+  }
+
   ~Text_stream(){
     if (!eof()) 
       cerr <<__FUNCTION__<< ": closing unended file";
index 4333bfa6e495fd2be26ec9bb3b70ab4eedce40ff..82106ca8d65846a60a694ba8e582cdaf8b7e9474 100644 (file)
@@ -76,6 +76,13 @@ public:
   Array() 
     { array_p_ = 0; max_ =0; size_ =0; }
 
+  // ugh, get around gcc 2.8.1 ice; see bezier.cc
+  Array (int i) 
+  { 
+    max_ = size_ = i; 
+    array_p_ = new T[i];
+  }
+
 
   /** set the size_ to #s#.
       POST: size() == s.
index 7ad3f655c168ed1a553429655b38714dda3a7016..1d986c53b751c52c8e6ab2c94d6cb81a40f2c1ff 100644 (file)
@@ -16,9 +16,18 @@ class Vector  {
 public:
     void OK() const { dat.OK();}
     int dim() const { return dat.size (); }
+    void fill (Real r) {
+       for (int i=0; i < dim(); i++)
+           dat[i] =r;
+    }
+
     Vector() { }
     Vector (Array<Real> d);
     Vector (Vector const &n);
+
+    Real &operator()(int i) { return dat[i]; }
+    Real operator()(int i) const { return dat[i]; }
+    Real elem (int i) { return dat[i]; }
     Vector (int n) {
        dat.set_size (n);
        fill (0);
@@ -33,10 +42,6 @@ public:
     }
     void del (int i) { dat.del (i); }
     operator String() const;
-    void fill (Real r) {
-       for (int i=0; i < dim(); i++)
-           dat[i] =r;
-    }
 
     void operator +=(Vector v) {
        assert (v.dim() == dim ());
@@ -44,24 +49,12 @@ public:
            dat[i] += v.dat[i];
     }
     
-    void operator /=(Real a) {
-       (*this) *= 1/a;
-    }
-
-    void operator *=(Real a) {
-       for (int i=0; i < dim(); i++)
-           dat[i] *= a;
-    }
-
     void operator -=(Vector v) {
        assert (v.dim() == dim ());
        for (int i=0; i < dim(); i++)
            dat[i] -= v (i);    
     }
 
-    Real &operator()(int i) { return dat[i]; }
-    Real operator()(int i) const { return dat[i]; }
-    Real elem (int i) { return dat[i]; }
     Real operator *(Vector v) const {
        Real ip=0;
        assert (v.dim() == dim ());
@@ -69,13 +62,20 @@ public:
            ip += dat[i] *v (i);
        return ip;
     }
-    Vector operator-() const;
-    Real norm() {
-       return sqrt (norm_sq());
+    void operator *=(Real a) {
+       for (int i=0; i < dim(); i++)
+           dat[i] *= a;
+    }
+    void operator /=(Real a) {
+       (*this) *= 1/a;
     }
+    Vector operator-() const;
     Real norm_sq() {
        return ((*this) * (*this));
     }
+    Real norm() {
+       return sqrt (norm_sq());
+    }
     operator Array<Real>() { return dat; }
     void print() const;
     /// set to j-th element of unit-base
index 762da9e0a803352d3371e1bee3df2d2e32fa8f11..5a6149720c9cd4f56d0eafa28a41ef89914e056d 100644 (file)
@@ -9,15 +9,13 @@
 
 #include "flower-debug.hh"
 #include "matrix.hh"
-#include "matrix-storage.hh"
-
 
 Matrix::operator String() const
 {
   String s;
 #ifndef NPRINT
-  Matrix_storage const * stor_c_l = dat;
-  s=String ("matrix { (")  + dat->name() + ")\n";
+  Full_storage const * stor_c_l = dat_;
+  s=String ("matrix {");
   for (int i=0; i< rows(); i++)
     {
       for (int j = 0; j < cols(); j++) 
@@ -49,7 +47,7 @@ Vector::operator String() const
     {
       s += String (dat[i], "%6f") + String (' ');
     }
-  s+="]";
+  s+="]\n";
 #endif
   return s;
 }
index f7cb37585d973a0a8e7fd36d6465004c62d0ee61..09a7668a05af84a68a1a004b383087db718305e7 100644 (file)
 
 #include "matrix.hh"
 #include "full-storage.hh"
-#include "diagonal-storage.hh"
-
-bool
-Matrix::band_b() const
-{
-  return dat->is_type_b (Diagonal_storage::static_name());
-}
-
-void
-Matrix::set_full() const
-{
-  if (dat->name() != Full_storage::static_name ()) 
-    {
-       Matrix_storage::set_full (((Matrix*)this)->dat);
-    }
-}
-
-void
-Matrix::try_set_band() const
-{
-  if (band_b())
-       return;
-  
-  int b = band_i();
-  if (b > dim()/2)
-       return;
-  // it only looks constant
-  Matrix*self  = (Matrix*)this;
-  Matrix_storage::set_band (self->dat,b);
-}
 
 Real
 Matrix::norm() const
 {
   Real r =0.0;
-  for (int i=0, j=0; dat->mult_ok (i,j); dat->mult_next (i,j))
-       r += sqr (dat->elem (i,j));
+  for (int i=0, j=0; dat_->mult_ok (i,j); dat_->mult_next (i,j))
+    r += sqr (dat_->elem (i,j));
   return sqrt (r);
 }
 
 void
 Matrix::fill (Real r)
 {
-  for (int i=0, j=0; dat->mult_ok (i,j); dat->mult_next (i,j))
-       dat->elem (i,j)=r;
+  for (int i=0, j=0; dat_->mult_ok (i,j); dat_->mult_next (i,j))
+    dat_->elem (i,j)=r;
 }
 
 void
 Matrix::set_diag (Real r)
 {
-  for (int i=0, j=0; dat->mult_ok (i,j); dat->mult_next (i,j))   
-       dat->elem (i,j)=(i==j) ? r: 0.0;
+  for (int i=0, j=0; dat_->mult_ok (i,j); dat_->mult_next (i,j))         
+    dat_->elem (i,j)=(i==j) ? r: 0.0;
 }
 
 void
 Matrix::set_diag (Vector d)
 {
-  for (int i=0, j=0; dat->mult_ok (i,j); dat->mult_next (i,j))   
-       dat->elem (i,j)=(i==j) ? d (i): 0.0;
+  for (int i=0, j=0; dat_->mult_ok (i,j); dat_->mult_next (i,j))         
+    dat_->elem (i,j)=(i==j) ? d (i): 0.0;
 }
 
 void
 Matrix::operator+=(Matrix const &m)
 {
-  Matrix_storage::set_addition_result (dat, m.dat);
   assert (m.cols() == cols ());
   assert (m.rows() == rows ());
-  for (int i=0, j=0; dat->mult_ok (i,j); dat->mult_next (i,j))
-       dat->elem (i,j) += m (i,j);
+  for (int i=0, j=0; dat_->mult_ok (i,j); dat_->mult_next (i,j))
+    dat_->elem (i,j) += m (i,j);
 }
  
 void
 Matrix::operator-=(Matrix const &m)
 {
-  Matrix_storage::set_addition_result (dat, m.dat);
   assert (m.cols() == cols ());
   assert (m.rows() == rows ());
-  for (int i=0, j=0; dat->mult_ok (i,j); dat->mult_next (i,j))
-       dat->elem (i,j) -= m (i,j);
+  for (int i=0, j=0; dat_->mult_ok (i,j); dat_->mult_next (i,j))
+    dat_->elem (i,j) -= m (i,j);
 }
 
 
 void
 Matrix::operator*=(Real a)
 {
-  for (int i=0, j=0; dat->mult_ok (i,j); dat->mult_next (i,j))
-       dat->elem (i,j) *= a;
+  for (int i=0, j=0; dat_->mult_ok (i,j); dat_->mult_next (i,j))
+    dat_->elem (i,j) *= a;
 }
 
 void
 Matrix::operator=(Matrix const &m)
 {
   if (&m == this)
-       return ;
-  delete dat;
-  dat = m.dat->clone();
+    return ;
+  delete dat_;
+  dat_ = new Full_storage (*m.dat_);
 }
 
+
 int
-Matrix::band_i() const
+Matrix::band_i () const
+{
+  return dat_->band_i_;
+}
+
+void
+Matrix::set_band ()
+{
+  dat_->band_i_ = calc_band_i ();
+}
+
+int
+Matrix::calc_band_i() const
 {
-  if (band_b()) 
-    {
-       Diagonal_storage const * diag = (Diagonal_storage*) dat;
-       return diag->band_size_i();
-    }
   int starty = dim();
   while (starty >= 0) 
     {
-       for (int i = starty, j = 0; i < dim(); i++, j++)
-           if (dat->elem (i,j))
-               goto gotcha;
-       for (int i=0, j = starty; j < dim(); i++,j++)
-           if (dat->elem (i,j))
-               goto gotcha;
-       starty --;
+      for (int i = starty, j = 0; i < dim(); i++, j++)
+       if (dat_->elem (i,j))
+         goto gotcha;
+      for (int i=0, j = starty; j < dim(); i++,j++)
+       if (dat_->elem (i,j))
+         goto gotcha;
+      starty --;
     }
-gotcha:
+ gotcha:
   return  starty;
 }
   
 Matrix::Matrix (Matrix const &m)
 {
-  m.OK();
-  
-  dat = m.dat->clone();
+  dat_ = new Full_storage (*m.dat_);
 }
 
 
 Matrix::Matrix (int n, int m)
 {
-  dat = Matrix_storage::get_full (n,m);
+  dat_ = new Full_storage(n,m);
   fill (0);
 }
 
-Matrix::Matrix (Matrix_storage*stor_p)
-{
-  dat = stor_p;
-}
 
 Matrix::Matrix (int n)
 {
-  dat = Matrix_storage::get_full (n,n);
+  dat_= new Full_storage (n,n);
   fill (0);
 }
 
 Matrix::Matrix (Vector v, Vector w)
-{   
-  dat = Matrix_storage::get_full (v.dim(), w.dim ());
-  for (int i=0, j=0; dat->mult_ok (i,j); dat->mult_next (i,j))
-       dat->elem (i,j)=v (i)*w (j);
+{
+  int n = v.dim();
+  int m = w.dim ();
+  dat_= new Full_storage (n,m);
+  for (int i=0; i < n; i++)
+    for (int j=0; j < m ; j++)
+      dat_->elem (i,j)=v (i)*w (j);
 }
 
 
@@ -170,7 +143,7 @@ Matrix::row (int k) const
   
   Vector v (n);
   for (int i=0; i < n; i++)
-       v (i)=dat->elem (k,i);
+    v (i)=dat_->elem (k,i);
 
   return v;
 }
@@ -181,17 +154,17 @@ Matrix::col (int k) const
   int n=rows();
   Vector v (n);
   for (int i=0; i < n; i++)
-       v (i)=dat->elem (i,k);
+    v (i)=dat_->elem (i,k);
   return v;
 }
 
 Vector
 Matrix::left_multiply (Vector const & v) const
 {
-   Vector dest (v.dim());
-  assert (dat->cols()==v.dim ());
-  for (int i=0, j=0; dat->mult_ok (i,j); dat->mult_next (i,j))
-       dest (i)+= dat->elem (j,i)*v (j);
+  Vector dest (v.dim());
+  assert (dat_->cols()==v.dim ());
+  for (int i=0, j=0; dat_->mult_ok (i,j); dat_->mult_next (i,j))
+    dest (i)+= dat_->elem (j,i)*v (j);
   return dest;
 }
 
@@ -199,9 +172,9 @@ Vector
 Matrix::operator *(Vector const & v) const
 {
   Vector dest (rows());
-  assert (dat->cols()==v.dim ());
-  for (int i=0, j=0; dat->mult_ok (i,j); dat->mult_next (i,j))
-       dest (i)+= dat->elem (i,j)*v (j);
+  assert (dat_->cols()==v.dim ());
+  for (int i=0, j=0; dat_->mult_ok (i,j); dat_->mult_next (i,j))
+    dest (i)+= dat_->elem (i,j)*v (j);
   return dest;
 }
 
@@ -217,18 +190,16 @@ operator /(Matrix const& m1,Real a)
   ugh. Only works for square matrices.
  */
 void
-Matrix::transpose()            // delegate to storage?
+Matrix::transpose()
 {
-#if 1
-  for (int i=0, j=0; dat->mult_ok (i,j); dat->mult_next (i,j)) 
+  for (int i=0, j=0; dat_->mult_ok (i,j); dat_->mult_next (i,j)) 
     {
-       if (i >= j)
-           continue;
-       Real r=dat->elem (i,j);
-       dat->elem (i,j) = dat->elem (j,i);
-       dat->elem (j,i)=r;
+      if (i >= j)
+       continue;
+      Real r=dat_->elem (i,j);
+      dat_->elem (i,j) = dat_->elem (j,i);
+      dat_->elem (j,i)=r;
     }
-#endif
 }
 
 Matrix
@@ -251,29 +222,30 @@ Matrix::transposed() const
 Matrix
 operator *(Matrix const &m1, Matrix const &m2)
 {
-  Matrix result (Matrix_storage::get_product_result (m1.dat, m2.dat));
-
+  Matrix result (m1.rows (), m2.cols ());
   result.set_product (m1,m2);
   return result;
 }
 
+
+
 void
 Matrix::set_product (Matrix const &m1, Matrix const &m2)
 {
   assert (m1.cols()==m2.rows ());
   assert (cols()==m2.cols () && rows ()==m1.rows ());
   
-  if (m1.dat->try_right_multiply (dat, m2.dat))
-       return; 
-  
-  for (int i=0, j=0; dat->mult_ok (i,j);
-        dat->mult_next (i,j)) 
-          {
+  for (int i=0; i < rows (); i++)
+    for (int j=0; j <  cols (); j++)
+      {
        Real r=0.0;
-       for (int k = 0; k < m1.cols(); k++)
+       for (int k = 0 >? i - m1.band_i () >? j - m2.band_i ();
+            k < m1.cols(); k++)
+         {
            r += m1(i,k)*m2(k,j);
-       dat->elem (i,j)=r;
-    }
+         }
+       dat_->elem (i,j)=r;
+      }
 }
 
 void
@@ -281,9 +253,9 @@ Matrix::insert_row (Vector v, int k)
 {
   int c = cols();
   assert (v.dim()==cols ());
-  dat->insert_row (k);
+  dat_->insert_row (k);
   for (int j=0; j < c; j++)
-       dat->elem (k,j)=v (j);
+    dat_->elem (k,j)=v (j);
 }
 
 
@@ -294,9 +266,9 @@ Matrix::swap_columns (int c1, int c2)
   int r = rows();
   for (int i=0; i< r; i++) 
     {
-       Real r=dat->elem (i,c1);
-       dat->elem (i,c1) = dat->elem (i,c2);
-       dat->elem (i,c2)=r;
+      Real r=dat_->elem (i,c1);
+      dat_->elem (i,c1) = dat_->elem (i,c2);
+      dat_->elem (i,c2)=r;
     }
 }
 
@@ -307,9 +279,9 @@ Matrix::swap_rows (int c1, int c2)
   int c = cols();
   for (int i=0; i< c; i++) 
     {
-       Real r=dat->elem (c1,i);
-       dat->elem (c1,i) = dat->elem (c2,i);
-       dat->elem (c2,i)=r;
+      Real r=dat_->elem (c1,i);
+      dat_->elem (c1,i) = dat_->elem (c2,i);
+      dat_->elem (c2,i)=r;
     }
 }
 
@@ -321,5 +293,7 @@ Matrix::dim() const
   return rows();
 }
 
-
-
+Matrix::~Matrix ()
+{
+  delete dat_;
+}
index 232967e675d4ea913df6d5833f51f62e5b0057b0..3085f246b5a2d12f0e4a24249adb925f39bcf27f 100644 (file)
@@ -7,7 +7,9 @@
 */
 #include <math.h>
 
+#ifndef STANDALONE
 #include "string.hh"
+#endif
 #include "offset.hh"
 
 
index 2b61b9089f0587fd81de04980cd53b52ce57e6e7..79bfd53d5f954eeeada0810c3462327e3bd6cc5e 100644 (file)
@@ -55,8 +55,13 @@ Scalar::operator int()
   return value_i ();
 }
 
-
 Scalar::operator bool () const
+{
+  return to_bool ();
+}
+
+bool
+Scalar::to_bool () const
 {
   if (!length_i ())
     return false;
index 8f88b14f50c3b3dc6c9948ef9cf818ce13a90da2..fafa47a97e7f111cff3778a38be149984da4fcdb 100644 (file)
@@ -1,4 +1,14 @@
+/*   
+  vector.cc --  implement Vector
+  
+  source file of the Flower Library
+  
+  (c) 1996-98 Han-Wen Nienhuys <hanwen@cs.ruu.nl>
+  
+ */
+
 #include "vector.hh"
+
 Vector::Vector (Array<Real> d)
      : dat (d)
 {
index 401b4d59ce081f0f74a016a26a2cd64e2e5225bb..1e16c2146b8a609d65df95b65503c48571a03396 100644 (file)
@@ -38,16 +38,17 @@ Staff = \translator {
 
 Rhythmic_staff = \translator
 {
-         \type "Engraver_group_engraver";
+       \type "Engraver_group_engraver";
        nolines  = "1";
-         \consists "Pitch_squash_engraver";
+       \consists "Pitch_squash_engraver";
 
-         \consists "Bar_engraver";
-         \consists "Meter_engraver";
-         \consists "Staff_sym_engraver";
-         \consists "Line_group_engraver";
-         \accepts "Voice";
+       \consists "Bar_engraver";
+       \consists "Meter_engraver";
+       \consists "Staff_sym_engraver";
+       \consists "Line_group_engraver";
+       \accepts "Voice";
 }
+
 Voice = \translator {
        \type "Engraver_group_engraver";
        \consists "Dynamic_engraver";
@@ -56,6 +57,7 @@ Voice = \translator {
        \consists "Plet_engraver";
        \consists "Beam_engraver";
        \consists "Abbreviation_beam_engraver";
+       \consists "Multi_measure_rest_engraver";
        \consists "Script_engraver";
        \consists "Rhythmic_column_engraver";
        \consists "Slur_engraver";
index e2ed20408527cfdd4419baf1980b3dab8fa0b417..34bffcc63c2bc12e9d67b0d028e0b14b9a898d55 100644 (file)
@@ -16,6 +16,7 @@ table_eleven  = \symboltables {
                "finger"        "\setfinger{%}" 0.0\pt  0.0\pt  0.0\pt  5.0\pt
                "italic"        "\setitalic{%}" 0.0\pt  0.0\pt  0.0\pt  10.0\pt
                "large" "\setlarge{%}"  0.0\pt  9.50\pt 0.0\pt  12.0\pt
+               "number"        "\setnumber{%}" 0.0\pt  9.50\pt 0.0\pt  12.0\pt
                "roman" "\settext{%}"   0.0\pt  7.5\pt  0.0\pt  10.0\pt
      }
 
index 757778437f7a38ca398b3bb60db752e6193d10c3..d8d64fff07a5823ed99f9ff1c2f4b1f4f77a3c9c 100644 (file)
@@ -16,6 +16,7 @@ table_thirteen  = \symboltables {
                "finger"        "\setfinger{%}" 0.0\pt  0.0\pt  0.0\pt  5.0\pt
                "italic"        "\setitalic{%}" 0.0\pt  0.0\pt  0.0\pt  10.0\pt
                "large" "\setlarge{%}"  0.0\pt  9.50\pt 0.0\pt  12.0\pt
+               "number"        "\setnumber{%}" 0.0\pt  9.50\pt 0.0\pt  12.0\pt
                "roman" "\settext{%}"   0.0\pt  7.5\pt  0.0\pt  10.0\pt
      }
 
index 8ad75392b2efd6b482a22050d99cb7af74f19cdf..c78d4be45a7bc8a74a9429648d6bbf4a1c1c3a9c 100644 (file)
@@ -16,6 +16,7 @@ table_sixteen=
                "finger"        "\setfinger{%}" 0.0\pt  0.0\pt  0.0\pt  4.0\pt
                "italic"        "\setitalic{%}" 0.0\pt  4.\pt   0.0\pt  8.0\pt
                "large" "\setlarge{%}"  0.0\pt  9.50\pt 0.0\pt  10.0\pt
+               "number"        "\setnumber{%}" 0.0\pt  6.0\pt  0.0\pt  8.0\pt
                "roman" "\settext{%}"   0.0\pt  4.0\pt  0.0\pt  8.0\pt
      }
      "dynamics" = \table {
index eee1669ee85583c46123a95b70b0bb423c101206..52068215815a05bcf1c0efbe0abad808b2b73d82 100644 (file)
@@ -17,6 +17,7 @@ table_twenty =
                "finger"        "\setfinger{%}" 0.0\pt  0.0\pt  0.0\pt  5.0\pt
                "italic"        "\setitalic{%}" 0.0\pt  7.5\pt  0.0\pt  10.0\pt
                "large" "\setlarge{%}"  0.0\pt  9.50\pt 0.0\pt  12.0\pt
+               "number"        "\setnumber{%}" 0.0\pt  8.0\pt  0.0\pt  10.0\pt
                "roman" "\settext{%}"   0.0\pt  7.5\pt  0.0\pt  10.0\pt
      }
 
index ace2e1026e85c9aafa3481bf9b2a7d5e1db6a274..93d9bd645a0aaf99e85122759c671f96b9bcc588 100644 (file)
@@ -16,6 +16,7 @@ table_twentysix  = \symboltables {
                "finger"        "\setfinger{%}" 0.0\pt  0.0\pt  0.0\pt  5.0\pt
                "italic"        "\setitalic{%}" 0.0\pt  0.0\pt  0.0\pt  10.0\pt
                "large" "\setlarge{%}"  0.0\pt  9.50\pt 0.0\pt  12.0\pt
+               "number"        "\setnumber{%}" 0.0\pt  8.0\pt  0.0\pt  10.0\pt
                "roman" "\settext{%}"   0.0\pt  7.5\pt  0.0\pt  10.0\pt
      }
 
index 45c1320de0647d00f69863e772e0b5b74dbbdec2..4167e225f98fb4cb2403b6470a1ac5d9f162549c 100644 (file)
@@ -5,21 +5,10 @@
 depth = ..
 #
 
-build = ./$(depth)/lily/$(outdir)/.build
+SUBDIRS=test bugs
 
-# generic stuff/Makefile
-#
-include ./$(depth)/make/Include.make
-#
-
-# list of distribution files:
-# 
-LYFILES = $(wildcard *.ly)
-TEXFILES = $(wildcard *.tex)
-M4FILES = $(wildcard *.m4)
-DISTFILES = Makefile TODO $(LYFILES) $(TEXFILES) $(wildcard *.m4)
-#
+include $(depth)/make/Mutopia.make
 
-OUTFILES = $(addprefix $(outdir)/,$(M4FILES:%.m4=%))
+WWW_examples=twinkle-pop praeludium-fuga-E cadenza twinkle
 
-all: $(OUTFILES)
+include $(depth)/make/WWW.make
diff --git a/input/bugs/Makefile b/input/bugs/Makefile
new file mode 100644 (file)
index 0000000..b03bae7
--- /dev/null
@@ -0,0 +1,9 @@
+# input/Makefile
+
+# subdir level:
+#
+depth = ../..
+#
+
+
+include $(depth)/make/Mutopia.make
diff --git a/input/bugs/beam-bug.ly b/input/bugs/beam-bug.ly
new file mode 100644 (file)
index 0000000..75a8669
--- /dev/null
@@ -0,0 +1,35 @@
+% silly file to test beam stem lengths
+% compare to *ugly* bug in preludes-1: [e'16 c'' g' f']
+% here it's okee ??
+
+one = \melodic{
+       \octave c';
+       [e'8 c'' g' f']
+       \octave c'';
+  [e16-1\f c'-5( g-3 f-2] % [e-1 c'-5 g-3 e-2] 
+       \octave c';
+%            [e'16 c'' g' f']
+       [e'32 c'' g' f']
+       [c32 c] ['b 'b]
+       [c8 c]
+       [e8 g b]
+       [e16 g b] c c c
+       [e32 g b] c
+       [c c c c]
+       c4 c4
+       \onevoice;
+       [e'8 c'' g' f']
+       [e'16 c'' g' f']
+       [e'32 c'' g' f']
+       [c32 c] ['b 'b]
+       [c8 c]
+       [e8 g b]
+       [e16 g b] c
+       [e32 g b] c
+       [c c c c]
+       c4
+}
+
+\score{
+       \one
+}
diff --git a/input/bugs/slur-bug.ly b/input/bugs/slur-bug.ly
new file mode 100644 (file)
index 0000000..6de3788
--- /dev/null
@@ -0,0 +1,9 @@
+% bug
+% excentric slur can't handle this ...
+\score{
+       \melodic{
+               \octave c; 
+               \stemdown; 
+               \[4/5c8( c ''f c c\]1/1 c c c )c |
+       }
+}
diff --git a/input/part.ly b/input/part.ly
new file mode 100644 (file)
index 0000000..39737f2
--- /dev/null
@@ -0,0 +1,50 @@
+part = \melodic{
+       \octave c;
+       c c c c
+       r1*3
+       c4 c c c
+       c c c c
+       c c c c
+       c c c c
+}
+
+a4 = \paper{
+       linewidth= 80.\mm;
+       Staff = \translator {
+               \type "Engraver_group_engraver";
+               defaultclef = violin;
+               \consists "Bar_engraver";
+               \consists "Clef_engraver";
+               \consists "Key_engraver";
+               \consists "Meter_engraver";
+               \consists "Local_key_engraver";
+               \consists "Staff_sym_engraver";
+               \consists "Collision_engraver";
+               \consists "Rest_collision_engraver";
+               \consists "Bar_column_engraver";
+               \consists "Bar_number_engraver";
+               \consists "Separating_line_group_engraver";
+               \consists "Line_group_engraver";
+               \accepts "Voice";
+       }
+}
+
+\score{
+       <
+               \melodic{ 
+                       \property Score.part = 1
+                       \part
+               }
+       >
+       \paper{\a4}
+}
+
+\score{
+       <
+               \melodic{ 
+                       \property Score.part = 0
+                       \part
+               }
+       >
+       \paper{\a4}
+}
diff --git a/input/test/Makefile b/input/test/Makefile
new file mode 100644 (file)
index 0000000..b03bae7
--- /dev/null
@@ -0,0 +1,9 @@
+# input/Makefile
+
+# subdir level:
+#
+depth = ../..
+#
+
+
+include $(depth)/make/Mutopia.make
diff --git a/input/test/abbrev.ly b/input/test/abbrev.ly
new file mode 100644 (file)
index 0000000..c2522e6
--- /dev/null
@@ -0,0 +1,22 @@
+
+\score{\melodic {
+               % default abbreviations
+               c4 c4: c4:32 c4: c4 c2.
+               'a1
+               'a1:32
+               'c4:8 c': 'c4:16 c':
+%              [ 'c8:16 'c 'c 'c ] [ a a a a ]
+%              [ 'c 'f 'b e ] 
+%              [ 'c16:32 'c 'c 'c ] [ a16:32 a a a ]
+%%             % there's still some hairy beam bugfixing todo
+%%             [ c'8:16 g d 'a ]
+%%             [ c'16:32 g d 'a ]
+%%             [ 'c8:32 'f 'b e ]
+               [:32 c16 e]
+               [:32 c16 e]
+               [:16 c8 e]
+               [:16 e4 g]
+               [:16 e2 g]
+               [:16 e1 g]
+
+}}
diff --git a/input/test/beams.ly b/input/test/beams.ly
new file mode 100644 (file)
index 0000000..953bd7c
--- /dev/null
@@ -0,0 +1,96 @@
+
+\header{
+filename =      "beams.ly";
+composer =      "heu";
+enteredby =     "jcn";
+copyright =     "PD";
+
+TestedFeatures =        "beams and beamflags";
+}
+\version "0.1.9";
+
+\score{
+       \melodic { \multi 3 < 
+               { \octave c'; 
+                       \meter 8/4;
+                       \duration8;
+                       \stemup [c c'' a' f']
+                       \duration16;
+                       \stemup [c c'' a' f']
+                       \duration32;
+                       \stemup [c c'' a' f']
+                       \duration64;
+                       \stemup [c c'' a' f']
+                       \duration128;
+                       \stemup [c c'' a' f']
+                       r32
+
+                       \duration 8;
+                       \stemup ['g 'g 'g 'g]
+                       \duration 16;
+                       \stemup ['g 'g 'g 'g]
+                       \duration 32;
+                       \stemup ['g 'g 'g 'g]
+                       \duration 64;
+                       \stemup ['g 'g 'g 'g]
+                       \duration 128;
+                       \stemup ['g 'g 'g 'g]
+                       r32
+               }
+       
+       { \octave c';  
+                       \meter 8/4;
+                       \duration8;
+                       \stemdown [a' 'a c e]
+                       \duration16;
+                       \stemdown [a' 'a c e]
+                       \duration32;
+                       \stemdown [a' 'a c e]
+                       \duration64;
+                       \stemdown [a' 'a c e]
+                       \duration128;
+                       \stemdown [a' 'a c e]
+                       r32
+
+                       \octave c;
+                       \duration 8;
+                       \stemdown [d'' d'' d'' d'']
+                       \duration 16;
+                       \stemdown [d'' d'' d'' d'']
+                       \duration 32;
+                       \stemdown [d'' d'' d'' d'']
+                       \duration 64;
+                       \stemdown [d'' d'' d'' d'']
+                       \duration 128;
+                       \stemdown [d'' d'' d'' d'']
+                       r32
+
+               } >
+               
+               {\duration "last";
+                       % ugh, "duration mode"
+                       
+                       [g8 g] [a a] [b b] [c' c']
+                       
+                       [g16 g ] [a a] [b b] [c' c']
+                       [g32 g] [a a] [b b] [c' c']
+                       
+                       [g64 g ] [c' c' ]
+               }
+               {
+                       \transpose d {
+                       \octave c''';
+                       | [g8 g] [a a] [b b] [c' c']
+                       [g16 g ] [a a] [b b] [c' c']
+                       [g32 g] [a a] [b b] [c' c']
+                       [g64 g]
+                       [c' c']
+                       }
+               }
+       }
+       \paper{
+               gourlay_maxmeasures = 1.;
+       }
+}
+
+
diff --git a/input/test/clefs.ly b/input/test/clefs.ly
new file mode 100644 (file)
index 0000000..7722d99
--- /dev/null
@@ -0,0 +1,17 @@
+\score {
+       \melodic{ \octave c'; 
+         \clef "violin"; c1^"{violin}" \bar "||";
+         \clef "french";c1^"{french}" \bar "||";
+         \clef "soprano";c1^"{soprano}" \bar "||";
+         \clef "mezzosoprano";c1^"{mezzosoprano}" \bar "||";
+         \clef "alto";c1^"{alto}" \bar "||";
+         \clef "tenor";c1^"{tenor}" \bar "||";
+         \clef "baritone";c1^"{baritone}" \bar "||";
+         \clef "varbaritone";c1^"{varbaritone}" \bar "||";
+         \clef "bass";c1^"{bass}" \bar "||";
+         \clef "subbass";c1^"{subbass}" \bar "|.";
+         }
+         \paper{
+         }
+}
+
diff --git a/input/test/collisions.ly b/input/test/collisions.ly
new file mode 100644 (file)
index 0000000..475f2e2
--- /dev/null
@@ -0,0 +1,91 @@
+\header{
+filename =      "collisions.ly";
+description =   "random counterpoint to test collisions";
+enteredby =     "HWN,JCN";
+copyright =     "public domain";
+Tested =        "test the Collision resolution ";
+}
+\version "0.1.9";
+
+
+
+two_voice = \melodic 
+       \multi 2 < 
+         { \stemdown \octave c'; 
+               c4 d e f g2~  g4 a [c8 d e f] c2| }
+         { \stemup
+               g4 f e g ~ g2 g2  c4 g4 g2 } 
+
+       >
+
+two_voice_steminvert = \melodic 
+       \multi 2 <  
+         { 
+               \octave c'; \stemup
+% the f and g on 4th beat are exceptionally ugh.
+               c4 d e f g2 g4 a | }
+         { \stemdown
+               g4 f e g  g2 g2 } 
+
+       >
+
+three_voice = \melodic 
+       \multi 2 <
+       { \stemup 
+               g4 f e f g a g2 }
+       { \stemup \property Voice.hshift = 1 
+               e2  e2  e2  e2 }
+       { \stemdown
+               c4 d e d c d es }
+       >
+
+
+rests = \melodic  
+       \multi 2 <
+       { \stemup
+               | r8 r r r  r r r r 
+               [c' b a g] [f e d c]
+       } 
+       { \stemdown
+               [c8 d e f] [g a b c']
+               r r r r r r r r 
+       }
+       >
+
+restsII = \melodic {
+       \octave c'; 
+       \multi 2 < 
+               { \stemup  g' f' e' d' c' b a g f e d c }
+               { \stemdown r  r  r  r  r  r r r r r r r }
+       >
+       \multi 2 <
+               { \stemup  r r r r r r r r  r  r  r  r }
+               { \stemdown c d e f g a b c' d' e' f' g' }
+       >
+       r8 r4
+       \multi 2 <  r8 r8 >
+       \multi 2 <  r8 r8 r8 >
+       \multi 2 <  r8 r8 r8 r8 >
+       \multi 2 <  r r >
+       \multi 2 <  r r r >
+       \stemup
+       [c''8 r8 c''8 c''8]
+       [c8 r8 c8 c8]
+       \stemdown
+       [c8 r8 c8 c8]
+       [c''8 r8 c''8 c''8]
+}
+
+\score{
+       {  \two_voice  
+       \two_voice_steminvert 
+       \three_voice  
+       \rests 
+       % UGH ! bug!
+       %\restsII 
+       }
+       
+
+       
+%      \midi { \tempo 4:80 }
+}
diff --git a/input/test/denneboom.ly b/input/test/denneboom.ly
new file mode 100644 (file)
index 0000000..b4aa56d
--- /dev/null
@@ -0,0 +1,156 @@
+\header{
+filename =      "denneboom.ly";
+enteredby =     "jcn";
+copyright =     "public domain";
+TestedFeatures = "This file tests silly line shapes";
+}
+
+\include "paper20.ly"
+
+\version "0.1.9";
+
+oden = \lyric{ 
+       O8 |
+       den-8. ne-16 boom,4. o8 | 
+       den-8. ne-16 boom.4.  Wat8 |
+       zijn uw tak-4 ken | 
+       won-8. der-16 schoon4 _8
+}
+
+ikheb = \lyric{
+       Ik8 | 
+       heb u laatst4. in_'t8 |
+       bos8. zien16 staan4 _8 toen8 |
+       zat- en er4. geen8 |
+       kaars-8. jes16 aan.4 _8
+}
+
+ugloeit = \lyric{
+       U8 |
+       gloeit in bar-4. re8 | 
+       win-8. ter-16 tijd,4 r8 als8 |
+       sneeuw op aar-4. de8 | 
+       licht8. ge-16 spreid.4 _8
+}
+
+oboom = \melodic{
+       \octave c';
+       'g8 |
+       c8. c16 c4. d8 | 
+       e8. e16 e4. e8 | 
+       d  e f4 'b | 
+       d8. c16 c4 r8
+}
+
+bos = \melodic{
+       \octave c';
+       g8 | 
+       g e a4. g8 | 
+       g8. f16 f4 r8 f8 |
+       f d g4. f8 | 
+       f8. e16 e4 r8
+}
+
+global = \melodic{ 
+       \meter 3/4;
+       \partial 8;
+       \skip 4*48;
+       \bar "|.";
+}
+melody = \melodic{
+       \oboom
+       \oboom
+       \bos
+       \oboom
+}
+
+$melody_staff = \type Staff = melody <
+       \global
+       \melody
+>
+
+$verse_one = \melodic{
+       \oden
+       \oden
+       \ikheb
+       \oden
+}
+
+$verse_one_staff = \type Lyrics = one <
+       \global
+       \$verse_one
+>
+
+$verse_two = \melodic{
+       \oden
+       \oden
+       \ugloeit
+       \oden
+}
+
+$verse_two_staff = \type Lyrics = two <
+       \global
+       \$verse_two
+>
+
+$denneboom_shape = \paper{ 
+       \paper_twenty
+       indent = 20. \mm;
+       \shape = 70. \mm 20. \mm
+                65. \mm 30. \mm
+                57.5 \mm 45. \mm
+                50. \mm 60. \mm
+                42.5 \mm 75. \mm
+                35. \mm 90. \mm
+                27.5 \mm 105. \mm
+                20. \mm 120. \mm
+                10. \mm 140. \mm
+                65. \mm 30. \mm
+                ;
+       gourlay_maxmeasures = 30.;
+% uhuh, loop if you comment these in
+%              arithmetic_basicspace = 3.8;
+%              arithmetic_multiplier = 8.\pt;
+}
+
+\score{
+       <
+               \$melody_staff
+               \$verse_one_staff
+       >
+       \paper{ 
+% huh?
+%              \$denneboom_shape 
+       \paper_twenty
+       indent = 20. \mm;
+       \shape = 70. \mm 20. \mm
+                65. \mm 30. \mm
+                57.5 \mm 45. \mm
+                50. \mm 60. \mm
+                42.5 \mm 75. \mm
+                35. \mm 90. \mm
+                27.5 \mm 105. \mm
+                20. \mm 120. \mm
+                10. \mm 140. \mm
+%               65. \mm 30. \mm
+                65. \mm 40. \mm
+                ;
+       gourlay_maxmeasures = 30.;
+% uhuh, loop if you comment these in
+               arithmetic_basicspace = 3.8;
+%              arithmetic_multiplier = 8.\pt;
+               arithmetic_multiplier = 7.5\pt;
+       }
+       \midi{ \tempo 4 = 90; }
+}
+
+%{
+\score{
+       <
+               \$melody_staff
+               \$verse_two_staff
+       >
+       \paper{ \$denneboom_shape }
+       \midi{ \tempo 4 = 90; }
+}
+%}
diff --git a/input/test/font-body.ly b/input/test/font-body.ly
new file mode 100644 (file)
index 0000000..19e7078
--- /dev/null
@@ -0,0 +1,53 @@
+\version "0.1.9";
+FontBody=      \melodic{ 
+               \octave c';
+               \bar "|:";
+               \meter 4/4;
+               \multi 2  < { \stemup e'\longa a\breve | }
+               { \stemdown
+               c1 \clef "bass"; ''b \clef "violin"; c' a'
+               c2 \clef "alto"; g c' \clef "violin"; a'
+               } >
+               \stemboth
+               c4 g c' a' \bar ":|";
+               a\ppp-\upbow a\pp-\downbow a\p^\turn a\mp^\fermata |
+               a\mf_\fermata a\f-\stopped a\ff-\open a\fff^\trill|
+               a\fp-\reverseturn a4.\sf a4.\sfz | % a\fz a\rf
+               [c8-\prall c-\mordent] [a'-\prallmordent a'-\prallprall]
+               [c-\upprall a'-\downprall] [a' c] |
+               [c \< d e f] [as' ges' f' e']
+               [cis' dis' c' des'] [cisis' disis' \! ceses' deses'] |
+               \clef "bass";
+                 r1 r2 r4 r8 r16 r32 r64 r128 r128 |
+               \multi 2 < { \stemup r2 r2} {\stemdown c c }>
+               \multi 2 < { \stemup ''c1 } {\stemdown r1}>             
+               \stemboth
+               \clef "violin";
+               e8_. g'8-> e16^^ g'16_^ 
+               e32 _| g'32^| g''32-\ltoe g''32-\lheel
+               e64-\rtoe g'64-\rheel c4... |
+
+               \octave c'';
+               \meter 4/4;
+               \textstyle "finger";
+               c4^"1" d^"2" e^"3" f^"4" g^"5"
+               
+               % Music to the Martians!
+               < bes4^"6" e_"7" c_"8" >
+               a^"0"_"9"
+               
+               a'^\flageolet
+               \textstyle "roman";
+               \meter 1/2; a2 |
+               \meter 3/2; < a1.
+               { s4 \ppp \< s4 \! s4 \fff  s4 \> s4 \! s4\ppp} >
+               |
+               \meter 2/4; a2 |
+               \meter 5/4; a1.. |
+               \meter 6/8; a2. |
+               \meter 7/8; a2.. |
+               \meter 9/8; a1... |
+               \meter 12/8; a1. |
+               \meter 12/4;
+               r1. r2. r4. r8. r16. r32. r64. r64. |
+               }
diff --git a/input/test/font.ly b/input/test/font.ly
new file mode 100644 (file)
index 0000000..0e92c31
--- /dev/null
@@ -0,0 +1,27 @@
+\header{
+title= "The Feta Font";
+subtitle = "proofsheet"; 
+enteredby =     "jcn & hwn";
+copyright =     "public domain";
+description = "This file tests the Feta music font";
+% "(Feta definitively is not an abbreviation of Font-En-TjA)";
+}
+
+\version "0.1.9";
+
+\include "font-body.ly"
+\score{
+       \paper{ 
+           % don't change this.
+           % otherwise 16pt and 20pt layouts differ.
+           linewidth = 12.5 \cm;
+           gourlay_maxmeasures =5.;
+       }
+       \paper{
+           \paper_twenty
+           linewidth = 17.5 \cm;
+           gourlay_maxmeasures =5.;
+           \output "font20.tex";
+       }
+}
+
diff --git a/input/test/font11.ly b/input/test/font11.ly
new file mode 100644 (file)
index 0000000..9530ebe
--- /dev/null
@@ -0,0 +1,22 @@
+
+\header{
+title= "The Feta Font";
+subtitle = "proofsheet"; 
+enteredby =     "jcn & hwn";
+copyright =     "public domain";
+description = "This file tests the Feta music font, 11pt";
+% "(Feta definitively is not an abbreviation of Font-En-TjA)";
+}
+
+
+\include "paper11.ly"
+\include "font-body.ly"
+\score{
+       \FontBody
+       \paper{
+           \paper_eleven
+           linewidth = 17.5 \cm;
+           gourlay_maxmeasures =5.;
+       }
+}
+
diff --git a/input/test/font13.ly b/input/test/font13.ly
new file mode 100644 (file)
index 0000000..d4e2d4d
--- /dev/null
@@ -0,0 +1,22 @@
+
+\header{
+title= "The Feta Font";
+subtitle = "proofsheet"; 
+enteredby =     "jcn & hwn";
+copyright =     "public domain";
+description = "This file tests the Feta music font, 11pt";
+% "(Feta definitively is not an abbreviation of Font-En-TjA)";
+}
+
+
+\include "paper13.ly"
+\include "font-body.ly"
+\score{
+       \FontBody
+       \paper{
+           \paper_thirteen
+           linewidth = 17.5 \cm;
+           gourlay_maxmeasures =5.;
+       }
+}
+
diff --git a/input/test/font16.ly b/input/test/font16.ly
new file mode 100644 (file)
index 0000000..9ba966f
--- /dev/null
@@ -0,0 +1,22 @@
+\header{
+title= "The Feta Font";
+subtitle = "proofsheet"; 
+enteredby =     "jcn & hwn";
+copyright =     "public domain";
+description = "This file tests the Feta music font";
+% "(Feta definitively is not an abbreviation of Font-En-TjA)";
+}
+
+\version "0.1.9";
+\include "font-body.ly"
+
+\score{
+       \FontBody
+       \paper{ 
+           % don't change this.
+           % otherwise 16pt and 20pt layouts differ.
+           linewidth = 12.5 \cm;
+           gourlay_maxmeasures =5.;
+       }
+}
+
diff --git a/input/test/font20.ly b/input/test/font20.ly
new file mode 100644 (file)
index 0000000..e78f752
--- /dev/null
@@ -0,0 +1,20 @@
+\header{
+title= "The Feta font";
+subtitle = "proofsheet"; 
+enteredby =     "jcn";
+copyright =     "public domain";
+description = "This file tests the Feta music-font in the 20pt version";
+TestedFeatures =        
+        "(Feta definitively is not an abbreviation of Font-En-TjA)";
+}
+
+\include "paper20.ly"
+\include "font-body.ly"
+\score{
+       \FontBody
+       \paper{
+           \paper_twenty
+           linewidth = 17.5 \cm;
+           gourlay_maxmeasures =5.;
+       }
+       }
diff --git a/input/test/font26.ly b/input/test/font26.ly
new file mode 100644 (file)
index 0000000..e811da1
--- /dev/null
@@ -0,0 +1,21 @@
+\header{
+title= "The Feta Font";
+subtitle = "proofsheet"; 
+enteredby =     "jcn & hwn";
+copyright =     "public domain";
+description = "This file tests the Feta music font";
+% "(Feta definitively is not an abbreviation of Font-En-TjA)";
+}
+
+\include "paper26.ly"
+\include "font-body.ly"
+
+\score{
+       \FontBody
+       \paper{
+           \paper_twentysix
+           linewidth = 17.5 \cm;
+           gourlay_maxmeasures =5.;
+       }
+}
+
diff --git a/input/test/gourlay.ly b/input/test/gourlay.ly
new file mode 100644 (file)
index 0000000..4e55085
--- /dev/null
@@ -0,0 +1,25 @@
+\header{
+enteredby =     "jcn";
+copyright =     "PD";
+TestedFeatures =        "This file tests some nasty Gourlay spacings";
+}
+
+\version "0.1.9";
+
+%{
+
+This is taken from [Gourlay]'s paper on breaking lines
+
+%}
+
+\score{
+       \melodic \multi 2 < \octave c'';
+               { \stemup; d2 d     | d d | d4 d2. | \break;  c1 }
+               \octave c';
+              { \stemdown; g4 g g g | \[2/3 g2 g2 g2 \] | g4. g8 g2 | c1 }
+               >
+       \paper{
+           linewidth = 8.\cm;
+       }
+}
+
diff --git a/input/test/sleur.ly b/input/test/sleur.ly
new file mode 100644 (file)
index 0000000..9ea0df5
--- /dev/null
@@ -0,0 +1,200 @@
+\header{
+enteredby =     "jcn";
+copyright =     "PD";
+TestedFeatures =        "This file tests Feta embedded slurs"
+        "(Feta definitively is not an abbreviation of Font-En-TjA)";
+}
+
+\version "0.1.9";
+
+shortlong = \melodic{
+       c4()c( c c  |
+       c c c c |
+       c c c c |
+       c c c )c |
+}
+
+dirs = \melodic {
+       \octave c';
+       c'1() g' () c () g () c |
+}
+
+complex = \melodic{
+       \octave c';
+       'c16( 'e( 'g( 'b( d( f( a( c'())))))))c4 c4 |
+       \octave c''';
+       'c16( a( f( d( 'b( 'g( 'e( 'c())))))))c4 c4 |
+}
+
+over = \melodic{
+       \octave c'; 
+
+       e( g' g' )e
+       e( a' a' )e
+       e( b' b' )e
+       e( c'' c'' )e
+       \stemup
+       e( c' c' )e
+       e( d' d' )e
+       e( e' e' )e
+       e( c'' c'' )e
+       \stemboth
+       e( f' b' )e
+       e( b' f' )e
+       e( e'' g' )e
+       e( g' e'' )e
+       \stemup
+       e( d' b )e
+       e( b d' )e
+       e( f' c'' )e
+       e( c'' f )e
+}
+
+under = \melodic{
+       \octave c'; 
+       \stemdown 
+       f'( \stemboth d d \stemdown )f'
+       f'( \stemboth c c \stemdown )f'
+       f'( \stemboth 'b 'b \stemdown )f'
+       f'( \stemboth 'a 'a \stemdown )f'
+       \stemdown
+       f'( a a )f'
+       f'( g g )f'
+       f'( f f )f'
+       f'( 'a 'a )f'
+
+       \stemdown 
+       f'( \stemboth d 'b \stemdown )f'
+       f'( \stemboth 'b d \stemdown )f'
+       f'( \stemboth 'd 'b \stemdown )f'
+       f'( \stemboth 'b 'd \stemdown )f'
+       \stemdown
+       f'( f a )f'
+       f'( a f )f'
+       f'( f 'e )f'
+       f'( 'e f )f'
+}
+
+eccentric = \melodic{
+       \octave c';
+       \stemup
+       \[4/7 f( a' f f f f )f \] |
+       \[4/7 f( f f f f a' )f \] |
+       \stemdown
+       \[4/7 e'( c e' e' e' e' )e' \] |
+       \[4/7 e'( e' e' e' e' c )e' \] |
+}
+
+tiltup = \melodic{
+       \octave c'; 
+       e( c'' c'' )e'
+       \stemup
+       e( c'' c'' )e'
+       \stemboth
+       e( g' e'' )e'
+       \stemup
+       e( c'' f )e'
+       \stemdown 
+       f'( \stemboth 'a 'a \stemdown )f''
+       \stemdown
+       f'( 'a 'a )f''
+}
+
+tiltdown = \melodic{
+       \octave c'; 
+       e'( c'' c'' )e
+       \stemup
+       e'( c'' c'' )e
+       \stemboth
+       e'( g' e'' )e
+       \stemup
+       e'( c'' f )e
+       \stemdown 
+       f''( \stemboth 'a 'a \stemdown )f'
+       \stemdown
+       f''( 'a 'a )f'
+}
+
+broken = \melodic{
+      \octave c'';
+      c c c c()
+      c c c c(
+      c )c c c(
+      c c )c c(
+      )a' a' a' a'()
+      a' a' a' a'()
+      c( c c )c 
+      c( c c )'f 
+      'f( c c )c 
+      'f( c c )'f
+}
+
+blend =        \melodic{
+       \octave c';
+       e( c'' c'' )e
+       \stemup
+       e( c'' c'' )e
+       \stemdown
+       f'( \stemboth 'a 'a \stemdown )f'
+       f'( 'a 'a )f'
+
+       \stemboth
+       e( c'' c'' )e'
+       e'( c'' c'' )e
+       d( d d )d
+
+       \stemdown
+       e( c'' c'' )e'
+       e'( c'' c'' )e
+       d( d d )d
+}
+
+
+bug = \melodic{
+       \octave c';
+       a()g( f )e
+       b'()a'( g' )f'
+       g( f' e' )d'
+       f f( g )a
+       c' () b () c' c'
+}
+
+clipping = \melodic{
+       \octave c';
+       \stemboth
+       c( c''' c''')c
+       c( c''' c )c''
+       c''( c c''' )c
+       \stemdown
+       c( \stemup '''c '''c \stemdown )c
+       c( \stemup '''c c \stemdown )''c
+       ''c( \stemup c '''c \stemdown )c
+}
+
+\score{
+       \melodic{ 
+               % use blend for fast check
+               %\blend
+% {
+               \shortlong
+               \dirs
+               \complex
+               \over
+               \under
+               \eccentric
+               \tiltup
+               \tiltdown
+               \bug
+               \clipping
+% }
+               % use broken with small linewidth
+               %\broken
+       }
+       \paper{ 
+             indent = 0.0\pt;
+               %for broken!
+               %linewidth= 40.\mm;
+               %castingalgorithm = \Wordwrap;
+       }
+}
+
diff --git a/input/test/slurs.ly b/input/test/slurs.ly
new file mode 100644 (file)
index 0000000..3d45dea
--- /dev/null
@@ -0,0 +1,40 @@
+
+\version "0.1.9";
+
+\score{
+       \melodic{\octave c';
+               \duration "last";
+
+               'c4 ~ 'c c'' ~ c'' ~ g ~ c ~
+               d ~ e ~ f ~ g ~
+               a ~ b ~ 'c ~ c
+
+               < c e ( > <)d f> 
+               \octave c'';
+               < c e ( > <)d f>
+               \octave c';
+               < c e ( > <)d' f'>
+               < { c ~ d }
+                 { e ~ f }
+               >
+%      \multi 2 <
+%      { \stemup c'8 ~g ~e( ~c~ [c'~ g' e' )c'] c'' ~ c'' c~c }
+%      { \stemdown c (e g )c'~( [b a g )d]     r2 } 
+%      >
+
+       {
+%              \octave c';
+%              'c16( 'e( 'g( 'b( d( f( a( c'~ )))))))c4 c4 |
+%              \octave c''';
+%              'c16( a( f( d( 'b( 'g( 'e( 'c~ )))))))c4 c4 |
+%              \octave c';
+%              c'1() g' () c () g () c |
+
+               c4()c( c c  |
+               c c c c |
+               c c c c |
+               c c c )c |
+       }
+       }
+       }
+}
diff --git a/input/test/spacing.ly b/input/test/spacing.ly
new file mode 100644 (file)
index 0000000..0c8729b
--- /dev/null
@@ -0,0 +1,70 @@
+\header{
+title= "Spacing";
+subtitle = "proofsheet"; 
+enteredby =     "jcn";
+copyright =     "public domain";
+TestedFeatures =        "This file tests various spacings";
+}
+
+\version "0.1.9";
+
+multipart = \melodic{ 
+    \multi 3 < 
+                { 
+                   c4
+                   c 
+                   c c 
+                }
+                { 
+                   [c8 c] 
+                   [c c] 
+                   [c c] [c c] 
+                }
+                { 
+                   [2/3 c8 c c]1/1 
+                   [2/3 c c c]1/1 
+                   [2/3c c c]1/1 [2/3c c c]1/1 
+                }
+                { 
+                   [2/4 c8 c c c]1/1
+                   [2/4 c c c c]1/1 
+                   [2/4c c c c]1/1 [2/4c c c c]1/1 
+                }
+                { 
+                   [2/5 c8 c c c c]1/1 
+                   [2/5 c c c c c]1/1 
+                   [2/5c c c c c]1/1 [2/5c c c c c]1/1 
+                }
+                { 
+                   [2/6c8 c c c c c]1/1 
+                   [2/6c  c c c c c]1/1 
+                   [2/6c c c c c c]1/1 [2/6c c c c c c]1/1 
+                }
+                { 
+                   [2/7c8 c c c c c c]1/1 
+                   [2/7c c  c c c c c]1/1 
+                   [2/7c c c c c c c]1/1 [2/7c c c c c c c]1/1 
+                }
+            >
+       }
+
+singlepart = \melodic{ 
+       c4 d e f
+       c4 d e [f8 f]
+       c4 d e f8 [f16 f]
+       c4 d e f8 f16 [f32 f]
+       c4 d e f8 f16 f32 [f64 f]
+       c4 c4 c4 c4
+       
+    }
+    
+    \score{
+    \melodic { 
+%      \singlepart 
+       \multipart 
+    }
+    \paper {
+%    linewidth= 18.\cm;
+%      gourlay_maxmeasures = 4.0
+    }
+}
diff --git a/input/test/stem.ly b/input/test/stem.ly
new file mode 100644 (file)
index 0000000..7bf1a4f
--- /dev/null
@@ -0,0 +1,48 @@
+\header{
+title= "Stems and Beams";
+subtitle = "proofsheet"; 
+enteredby =     "jcn";
+copyright =     "public domain";
+TestedFeatures =        "This file tests the length of stems and placement 
+of beams";
+       
+}
+
+\version "0.1.9";
+
+beamintervals = \melodic{
+               \meter 7/4;
+               \stemup;
+               \octave c';
+               [ c8 d ] [ c e ] [ c f ] [ c g ] [ c a ] [ c b ] [ c c' ] |
+               [ c 'b ] [ c 'a ] [ c 'g ] [ c 'f ] [ c 'e ] [ c 'd ] [ c 'c ] |
+               \octave c'';
+               [ c 'b ] [ c 'a ] [ c 'g ] [ c 'f ] [ c 'e ] [ c 'd ] [ c 'c ] |
+               \stemdown;
+               \octave c''';
+               [ c 'b ] [ c 'a ] [ c 'g ] [ c 'f ] [ c 'e ] [ c 'd ] [ c 'c ] |
+               \octave c'';
+               [ c 'b ] [ c 'a ] [ c 'g ] [ c 'f ] [ c 'e ] [ c 'd ] [ c 'c ] |
+               [ c d ] [ c e ] [ c f ] [ c g ] [ c a ] [ c b ] [ c c' ] |
+       }
+
+\score{
+       \melodic{ 
+               \octave c';
+               \stemup;
+               \meter 17/4;
+               'g4 'a 'b c d e f g a b c' d' e' f' g' a' b' |
+               \stemdown
+               b' a' g' f' e' d' c' b a g f e d c 'b 'a 'g |
+               \beamintervals;
+               \transpose d \beamintervals;
+               \transpose e \beamintervals;
+               \transpose f \beamintervals;
+               \transpose g \beamintervals;
+               \transpose a \beamintervals;
+               \transpose b \beamintervals;
+       }
+       \paper{
+               gourlay_maxmeasures = 2.;
+       }
+}
diff --git a/input/test/test-lyrics.ly b/input/test/test-lyrics.ly
new file mode 100644 (file)
index 0000000..4d42f97
--- /dev/null
@@ -0,0 +1,64 @@
+$somewhat_long = \lyric{
+       \textstyle "roman" ;
+       AaaaaaA2
+       BbbbbbB2
+       CcccccC2 
+       DdddddD2
+       EeeeeeE2
+       FfffffF2
+}
+
+$rather_long = \lyric{
+       \textstyle "roman" ;
+       LLLLoooonggggg2 
+       Syyllllaaabbble2 
+       LLLLoooonggggg2 
+       Syyllllllaaabbble2
+       LLLLoooonggggg2 
+       Syyyylllaaabbble2
+}
+
+$quite_long = \lyric{
+       \textstyle "roman" ;
+       LLLLLLLLLooooongggggggg2 
+       Syyyyyyyyyyyyylllllllaaaaaabbble2 
+       LLLLLLLLLooooongggggggg2 
+       Syyyyyyyyyyyyylllllllaaaaaabbble2
+       LLLLLLLLLooooongggggggg2 
+       Syyyyyyyyyyyyylllllllaaaaaabbble2
+}
+
+$somewhat_long_lyrics_staff = \type Lyrics = somewhat <
+       \$somewhat_long
+>
+
+$rather_long_lyrics_staff = \type Lyrics = rather <
+       \$rather_long
+>
+
+$quite_long_lyrics_staff = \type Lyrics = quite <
+       \$quite_long
+>
+
+melody = \melodic{
+       \octave c'; 
+       c4 e4 g4 e4  c4 e4 g4 e4  c4 e4 g4 e4  c4 e4 g4 e4
+       c4 e4 g4 e4  c4 e4 g4 e4  c4 e4 g4 e4  c4 e4 g4 e4
+}
+
+$melodic_staff = \type Staff = mel <
+       \melody
+>
+
+\score
+{
+       <
+               \$melodic_staff
+               \$somewhat_long_lyrics_staff    
+%              \$rather_long_lyrics_staff      
+               \$quite_long_lyrics_staff       
+       >
+       \paper{
+%              castingalgorithm = \Wordwrap;   
+       }
+}
index 4ca3bdac194a54c6ab8e0923d2d2862a52d58890..4b8e1d4472992f95057a7db6f1fe02e54cb069fb 100644 (file)
@@ -8,6 +8,8 @@
 
 #include "bar-grav.hh"
 #include "bar.hh"
+#include "musical-request.hh"
+#include "multi-measure-rest.hh"
 #include "command-request.hh"
 #include "time-description.hh"
 #include "engraver-group.hh"
@@ -44,6 +46,25 @@ Bar_engraver::create_bar ()
     }
 }
 
+void
+Bar_engraver::acknowledge_element (Score_elem_info i)
+{
+  if (!bar_p_ || !i.elem_l_->is_type_b (Multi_measure_rest::static_name ()))
+    return;
+
+#if 0
+  if (!bar_p_ || !i.req_l_ || !i.req_l_->musical () 
+    || !i.req_l_->musical ()->multi_measure ())
+    return;
+
+  // would this be enough?
+  //urg segfault
+  bar_p_->unlink ();
+  delete bar_p_;
+  bar_p_ = 0;
+#endif
+}
+
 void 
 Bar_engraver::do_creation_processing ()
 {
index 8be81c4f61a867bed6f72256e8ae345b6131993a..30e82e05e2ec5616f4674cabd480e55344621d5e 100644 (file)
@@ -26,15 +26,13 @@ Bow::brew_molecule_p () const
 {
   Molecule* mol_p = new Molecule;
   
-  Real dy_f = dy_f_drul_[RIGHT] - dy_f_drul_[LEFT];
-  
-  Real dx_f = width ().length ();
-  dx_f += (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT]);
-  
-  Atom a = paper ()->lookup_l ()->slur (get_controls ());
+  Array<Offset> c = get_controls ();
+  Atom a = paper ()->lookup_l ()->slur (c);
+//  a.translate (Offset (dx_f_drul_[LEFT], dy_f_drul_[LEFT]));
+  a.translate (Offset (dx_f_drul_[LEFT], dy_f_drul_[LEFT] - c[0].y ()));
 
-  a.translate (Offset (dx_f + dx_f_drul_[LEFT], dy_f + dy_f_drul_[LEFT]));
   mol_p->add (a);
+
   return mol_p;
 }
 
index 0c5c56eb2241bf654451f09132ac829c88f97261..0d1a185923be893a1f6285b01b96f221f6f32f7c 100644 (file)
@@ -6,6 +6,7 @@
   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
 */
 
+#include <ctype.h>
 #include "clef-item.hh"
 #include "string.hh"
 #include "molecule.hh"
@@ -55,7 +56,7 @@ Clef_item::read (String t)
   else if (t == "G" || t == "G2" || t == "treble")
     {
       symbol_ = "violin";
-      y_position_i_ == -2;
+      y_position_i_ = -2;
     }
   else if (t == "french" || t == "G1") 
     {
index 28dae424ff33480e0b1553894a055408e4a8a89f..d62fb3ecea720694dae4796d4b9c7a097fdbbbb6 100644 (file)
@@ -26,6 +26,7 @@ public:
 
      
 protected:
+  virtual void acknowledge_element (Score_elem_info);
   virtual void do_creation_processing ();
   virtual void do_removal_processing ();
   virtual bool do_try_request (Request *req_l);
index d69fc9819636bf8eb7e5582932e0d8ad29e0053b..df6b3362cb6cb429dfdf7a7312fd810667ddadea 100644 (file)
@@ -53,9 +53,11 @@ public:
   void calc ();
   Real calc_f (Real height);
   void calc_bezier ();
+  bool calc_clipping ();
   void calc_controls ();
   void calc_default (Real h);
   void calc_return (Real begin_alpha, Real end_alpha);
+  void calc_tangent_controls ();
   bool check_fit_bo ();
   Real check_fit_f ();
   void set (Array<Offset> points, int dir);
index 809bb015ca49c7e8892f1c66d2f583060ab0bf52..9adfb26c096710b52fe32ebd39e48946522f0019 100644 (file)
@@ -133,6 +133,9 @@ struct Midi_track;
 struct Midi_walker;
 struct Mixed_qp;
 struct Molecule;
+struct Multi_measure_rest;
+struct Multi_measure_rest_req;
+struct Multi_measure_rest_engraver;
 struct Music_general_chord;
 struct Musical_script_req;
 struct Music_voice;
index fa4463146e0d5331bd77f298c2a2b4142f22ad91..4e924397b17f12013962e7670d81d3af29cd3904 100644 (file)
@@ -35,7 +35,6 @@ struct Lookup {
   /// round slope to closest TeXslope
   Atom beam (Real&,Real, Real) const;
   Atom ps_beam (Real, Real, Real)const;
-  Atom tex_beam (Real&, Real) const;
 
   Atom streepje (int type) const;
 
index ce4cfe76a4ff820a2afc32a9e9c7cf80afd670bc..646f82638a9cc8ce47ad720d89a20ac6d02640a9 100644 (file)
@@ -24,8 +24,6 @@ extern bool no_paper_global_b;
 extern bool no_timestamps_global_b;
 extern int exit_status_i_;
 extern bool experimental_features_global_b;
-extern bool postscript_global_b;
-extern bool embedded_mf_global_b;
 
 extern String default_outname_base_global;
 extern String default_outname_suffix_global;
diff --git a/lily/include/multi-measure-rest-engraver.hh b/lily/include/multi-measure-rest-engraver.hh
new file mode 100644 (file)
index 0000000..2809343
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+  multi_measure_rest-engraver.hh -- declare Multi_measure_rest_engraver
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1998 Jan Nieuwenhuizen <jan@digicash.com>
+*/
+
+#ifndef MULTI_MEASURE_REST_ENGRAVER_HH
+#define MULTI_MEASURE_REST_ENGRAVER_HH
+
+#include "engraver.hh"
+#include "moment.hh"
+
+/**
+ */
+class Multi_measure_rest_engraver : public Engraver
+{
+public:
+  TRANSLATOR_CLONE(Multi_measure_rest_engraver);
+  DECLARE_MY_RUNTIME_TYPEINFO;
+  Multi_measure_rest_engraver ();
+
+protected:
+  virtual void do_removal_processing ();
+  virtual void do_process_requests ();
+  virtual bool do_try_request (Request*);
+  virtual void do_pre_move_processing ();
+  
+private:
+  bool part_b_;
+  Moment last_mom_;
+  Multi_measure_rest_req* multi_measure_req_l_;
+  Multi_measure_rest* mmrest_p_;
+};
+
+#endif // MULTI_MEASURE_REST_ENGRAVER_HH
diff --git a/lily/include/multi-measure-rest.hh b/lily/include/multi-measure-rest.hh
new file mode 100644 (file)
index 0000000..afaeaf7
--- /dev/null
@@ -0,0 +1,29 @@
+/*   
+  multi-measure-rest.hh -- declare Multi_measure_rest
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1998 Jan Nieuwenhuizen <jan@digicash.com>
+  
+ */
+
+#ifndef MULTI_MEASURE_REST_HH
+#define MULTI_MEASURE_REST_HH
+
+#include "item.hh"
+
+class Multi_measure_rest : public Item 
+{
+public:
+  Multi_measure_rest ();
+  int measures_i_;
+
+  DECLARE_MY_RUNTIME_TYPEINFO;
+
+protected:
+  virtual void do_print () const;
+  virtual Molecule *brew_molecule_p () const;
+};
+
+#endif /* MULTI_MEASURE_REST_HH */
+
index cd822d1ac283c5011e1f947c6ecc07c21e26aaf6..e46153c9f763f89c88c9d2636b31ef985abd74dd 100644 (file)
@@ -40,6 +40,7 @@ public:
   virtual Plet_req* plet() { return 0; }
   virtual Span_dynamic_req * span_dynamic() { return 0; }
   virtual Abbreviation_req* abbrev() { return 0; }
+  virtual Multi_measure_rest_req* multi_measure() { return 0; }
   REQUESTMETHODS(Musical_req, musical);
 };
 
@@ -84,7 +85,6 @@ struct Abbreviation_req : public Musical_req {
 class Blank_req  : public Spacing_req, Rhythmic_req  {
 public:
   REQUESTMETHODS(Spacing_req, spacing);
-    
 };
 
 /// Put a text above or below (?) this staff.
@@ -156,7 +156,14 @@ public:
   REQUESTMETHODS(Rest_req,rest);
 };
 
-
+/**
+ Part: typeset a measure with the number of measures rest
+ Score: typeset all individual measures ass full rests
+ */
+class Multi_measure_rest_req : public Rhythmic_req  {
+public:
+  REQUESTMETHODS(Multi_measure_rest_req, multi_measure);
+};
 
 /**
   Requests to start or stop something.
index c73ccdd83fdf2b9b4c4b42116fb1fbcba735a963..4c0c431bcf457c181181e9bc3dad6e05aff72507 100644 (file)
@@ -18,6 +18,7 @@
 class Timing_engraver : public Timing_translator, public Engraver
 {   
 protected:
+  virtual void acknowledge_element (Score_elem_info i);
   virtual void fill_staff_info (Staff_info&);
   virtual Engraver * engraver_l () { return Engraver::engraver_l (); }
 public:
index cd8248aaf0a313f2149d557e59e8f7124aa0a568..02da3a2488f3480e4a966a898d987b1dcf927a45 100644 (file)
@@ -32,5 +32,7 @@ protected:
   virtual void do_process_requests();
   virtual void do_pre_move_processing();
   virtual void do_post_move_processing();
+
+  bool mmrest_b_;
 };
 #endif // TIMING_TRANSLATOR_HH
index f1cfebfdd2089a239ebeb34e8d7658234561b8b8..4ff8adcc20e460a6ae833d6271567059e856a6d1 100644 (file)
@@ -12,7 +12,7 @@
 #include "main.hh"
 
 /*
-  MAy be this also should go into a library
+  May be this also should go into a library
  */
 
 const int MAXITER=100;         // qlpsolve.hh
@@ -113,10 +113,6 @@ Ineq_constrained_qp::constraint_solve (Vector start) const
   if (!dim())
     return Vector (0);
 
-  // experimental
-  if (quad_.dim() > 10)
-    quad_.try_set_band();
-
   Active_constraints act (this);
   act.OK();
 
index 5b0054084d6c6d5a2965dccc77a701916b152ae3..b0212b2f91ed18920e3d3b1f5f6737e0ad29ec07 100644 (file)
@@ -149,31 +149,26 @@ Lookup::flag (int j, Direction d) const
 Atom
 Lookup::slur (Array<Offset> controls) const
 {
-  assert (postscript_global_b);
   assert (controls.size () == 8);
 
   String ps = "\\embeddedps{\n";
   
-#if 1
-  for (int i = 1; i < 4; i++)
-    ps += String_convert::double_str (controls[i].x ()) + " "
-      + String_convert::double_str (controls[i].y ()) + " ";
+  Real dx = controls[3].x () - controls[0].x ();
+  Real dy = controls[3].y () - controls[0].y ();
 
-  Real dx = controls[3].x ();
-  Real dy = controls[3].y ();
   for (int i = 5; i < 8; i++)
-    ps += String_convert::double_str (controls[i].x () - dx) + " "
-      + String_convert::double_str (controls[i].y () - dy) + " ";
-#else
-  // this would be nice
-  for (int i = 1; i < 4; i++)
     ps += String_convert::double_str (controls[i].x ()) + " "
       + String_convert::double_str (controls[i].y ()) + " ";
 
-  for (int i = 5; i < 8; i++)
+  ps += String_convert::double_str (controls[4].x ()) + " "
+    + String_convert::double_str (controls[4].y ()) + " ";
+
+  for (int i = 1; i < 4; i++)
     ps += String_convert::double_str (controls[i].x ()) + " "
       + String_convert::double_str (controls[i].y ()) + " ";
-#endif
+
+  ps += String_convert::double_str (controls[0].x ()) + " "
+    + String_convert::double_str (controls[0].y ()) + " ";
 
   ps += " draw_slur}";
 
@@ -199,41 +194,20 @@ Lookup::streepje (int type) const
 Atom
 Lookup::hairpin (Real &wid, bool decresc, bool continued) const
 {
-  bool embedded_b = postscript_global_b;
   String embed;
   Atom ret;  
   Real height = paper_l_->get_var ("barsize") / 6;
-  if (embedded_b)
-    {
-      embed = "\\embeddedps{\n" ;
-      embed += String (wid) + " " 
+  embed = "\\embeddedps{\n" ;
+  embed += String (wid) + " " 
        + String (height) + " " 
-       + String (continued ? height/2 : 0) + 
-       + " draw_"  + String(decresc ? "de" : "") + "cresc}\n";
-      ret.tex_ = embed;
-    }
-  else
-    {
-      if (wid > 32 * 6 PT)
-       {
-         warning (_("Crescendo too long (") + print_dimen (wid) 
-                  +_( ") shrinking (ugh)"));
-         wid = 32*6 PT;
-       }
-      int idx = int (rint (wid / 6 PT));
-      if (!idx) idx ++;
-      wid = idx*6 PT;
-      String idxstr = (decresc)? "decrescendosym" : "crescendosym";
-      ret=(*symtables_p_)("param")->lookup (idxstr);
-      
-      Array<String> a;
-      a.push (idx);
-      ret.tex_ = substitute_args (ret.tex_, a);
-    }
-  
+    + String (continued ? height/2 : 0) + 
+    + " draw_"  + String(decresc ? "de" : "") + "cresc}\n";
+  ret.tex_ = embed;
+
+
   ret.dim_.x () = Interval (0,wid);
   ret.dim_.y () = Interval (-2*height,2*height);
-//  ret.translate_axis (ret.dim_[Y_AXIS][DOWN], Y_AXIS);
+
   return ret;
 }
 
@@ -308,8 +282,15 @@ Lookup::vbrace (Real &y) const
 Atom
 Lookup::vbracket (Real &y) const
 {
+  Atom psbracket;
+  psbracket.tex_ = String ("\\embeddedps{ ") + y + " draw_bracket}";
+  psbracket.dim_[Y_AXIS] = Interval (-y/2,y/2);
+  psbracket.dim_[X_AXIS] = Interval (0,4 PT);
+  return psbracket;
   Atom bracket = (*symtables_p_)("param")->lookup ("bracket");
   Interval ydims = bracket.dim_[Y_AXIS];
+
+  
   Real min_y = ydims[LEFT];
   Real max_y = ydims[RIGHT];
   Real step = 1.0 PT;
index 4be0a9a367bd363bbdaf00f817d8c0732ed73dc4..743b8e6a9ebb4f454a419213acfbea798c5197c0 100644 (file)
@@ -26,9 +26,8 @@ Sources* source_global_l = 0;
 bool no_paper_global_b = false;
 bool no_timestamps_global_b = false;
 
-bool embedded_mf_global_b = false;
 bool experimental_features_global_b = false;
-bool postscript_global_b = true;
+
 int exit_status_i_;
 
 void destill_inname (String &name_str_r);
@@ -42,7 +41,7 @@ Long_option_init theopts[] = {
   {1, "init", 'i'},
   {1, "include", 'I'},
   {0, "no-paper", 'M'},
-  {0, "no-postscript", 'P'},
+
   {0, "no-timestamps", 'T'},
   {0, "ignore-version", 'V'},
   {0,0,0}
@@ -65,7 +64,7 @@ usage ()
     "  -t, --test             switch on experimental features\n"
     "  -M, --no-paper         produce midi output only\n"
     "  -V, --ignore-version   ignore mudela version\n"
-    "  -P, --no-postscript    don't use PostScript\n"
+
     "  -T, --no-timestamps    don't timestamp the output\n"
     "\n"
     "GNU LilyPond was compiled with the following settings:\n")
@@ -212,9 +211,6 @@ main (int argc, char **argv)
        case 'V':
          version_ignore_b = true;
          break;
-       case 'P':
-         postscript_global_b = false;
-         break;
        case 'd':
          set_debug (true);
          break;
diff --git a/lily/multi-measure-rest-engraver.cc b/lily/multi-measure-rest-engraver.cc
new file mode 100644 (file)
index 0000000..d7e78c4
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+  multi_measure_rest-engraver.cc -- implement Multi_measure_rest_engraver
+
+  (c) 1998 Jan Nieuwenhuizen <jan@digicash.com>
+*/
+
+#include "proto.hh"
+#include "musical-request.hh"
+#include "multi-measure-rest.hh"
+#include "multi-measure-rest-engraver.hh"
+#include "score-column.hh"
+
+IMPLEMENT_IS_TYPE_B1 (Multi_measure_rest_engraver, Engraver);
+ADD_THIS_TRANSLATOR (Multi_measure_rest_engraver);
+
+Multi_measure_rest_engraver::Multi_measure_rest_engraver ()
+{
+  last_mom_ = 0;
+  multi_measure_req_l_ = 0;
+  mmrest_p_ = 0;
+}
+
+bool
+Multi_measure_rest_engraver::do_try_request (Request* req_l)
+{
+  if (!req_l->musical () || !req_l->musical ()->multi_measure ())
+    return false;
+
+  multi_measure_req_l_ = req_l->musical ()->multi_measure ();
+  last_mom_ = now_moment () + multi_measure_req_l_->duration_.length ();
+
+  return true;
+}
+
+void
+Multi_measure_rest_engraver::do_removal_processing ()
+{
+  if (mmrest_p_)
+    {
+      typeset_element (mmrest_p_);
+      mmrest_p_ = 0;
+    }
+}
+
+void
+Multi_measure_rest_engraver::do_process_requests ()
+{
+  if (mmrest_p_ || !multi_measure_req_l_)
+    return;
+
+  mmrest_p_ = new Multi_measure_rest;
+
+  Scalar prop = get_property ("part");
+  if (prop.isnum_b ()) 
+    part_b_ = prop.to_bool ();
+
+//  if (!part_b_)
+//    return;
+
+  int measures_i = (int)multi_measure_req_l_->duration_.plet_.iso_i_;
+  if (part_b_)
+    mmrest_p_->measures_i_ = measures_i;
+
+  announce_element (Score_elem_info (mmrest_p_, multi_measure_req_l_));
+
+  multi_measure_req_l_ = 0;
+}
+
+void
+Multi_measure_rest_engraver::do_pre_move_processing ()
+{
+  if (!mmrest_p_)
+    return;
+
+  typeset_element (mmrest_p_);
+  mmrest_p_ = 0;
+
+  if (part_b_)
+    return;
+
+  if (last_mom_ <= now_moment () + Moment (1))
+    multi_measure_req_l_ = 0;
+}
+
diff --git a/lily/multi-measure-rest.cc b/lily/multi-measure-rest.cc
new file mode 100644 (file)
index 0000000..a018c53
--- /dev/null
@@ -0,0 +1,59 @@
+/*   
+  multi-measure-rest.cc --  implement Multi_measure_rest
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1998 Jan Nieuwenhuizen <jan@digicash.com>
+  
+ */
+
+#include "multi-measure-rest.hh"
+#include "debug.hh"
+#include "paper-def.hh"
+#include "lookup.hh"
+#include "dimen.hh"
+#include "rest.hh"
+#include "script.hh"
+#include "text-def.hh"
+#include "molecule.hh"
+
+IMPLEMENT_IS_TYPE_B1 (Multi_measure_rest, Item);
+
+Multi_measure_rest::Multi_measure_rest ()
+{
+  measures_i_ = 0;
+}
+
+void
+Multi_measure_rest::do_print () const
+{
+  DOUT << "measures_i_ " << measures_i_;
+}
+
+Molecule*
+Multi_measure_rest::brew_molecule_p () const
+{
+  /*
+   [TODO]                                     3
+     * make real multi-measure rest symbol: |---|
+     * make two,four,eight-measure-rest symbols
+   */
+
+  Atom s (paper ()->lookup_l ()->rest (0, 0));
+  Molecule* mol_p = new Molecule ( Atom (s));
+  Real interline_f = paper ()->interline_f ();
+  mol_p->translate_axis (interline_f, Y_AXIS);
+
+  if (measures_i_)
+    {
+      Text_def text;
+      text.text_str_ = measures_i_;
+      text.style_str_ = "number";
+      Atom s = text.get_atom (paper (), UP);
+      s.translate_axis (3.0 * interline_f, Y_AXIS);
+      mol_p->add (s);
+    }
+
+  return mol_p;
+}
+
index a4e114684447252f1eb32fcb471205ec553ec4ac..0def2d2f518da02bdaa886a62bfc1311e866ed9c 100644 (file)
 
 
 
-IMPLEMENT_IS_TYPE_B1(Musical_req,Request);
+IMPLEMENT_IS_TYPE_B1 (Musical_req,Request);
 void
-Musical_req::do_print() const{}
+Musical_req::do_print () const{}
 void
-Tie_req::do_print() const{}
+Tie_req::do_print () const{}
 
 
 /* *************** */
@@ -27,19 +27,19 @@ Tie_req::do_print() const{}
 
 
 
-IMPLEMENT_IS_TYPE_B1(Span_req,Musical_req);
+IMPLEMENT_IS_TYPE_B1 (Span_req,Musical_req);
 
 void
-Span_req::do_print() const
+Span_req::do_print () const
 {
 #ifndef NPRINT
   DOUT << spantype ;
 #endif
 }
 
-IMPLEMENT_IS_TYPE_B1(Spacing_req,Request);
+IMPLEMENT_IS_TYPE_B1 (Spacing_req,Request);
 
-Spacing_req::Spacing_req()
+Spacing_req::Spacing_req ()
 {
   next = 0;
   distance = 0;
@@ -47,7 +47,7 @@ Spacing_req::Spacing_req()
 }
 
 void
-Spacing_req::do_print() const
+Spacing_req::do_print () const
 {
 #ifndef NPRINT
   DOUT << "next " << next << "dist " << distance << "strength\n";
@@ -62,7 +62,7 @@ Abbreviation_req::Abbreviation_req ()
 }
 
 void
-Abbreviation_req::do_print() const
+Abbreviation_req::do_print () const
 {
 #ifndef NPRINT
   DOUT << "type " << type_i_ << "\n";
@@ -70,16 +70,16 @@ Abbreviation_req::do_print() const
 }
 
 
-IMPLEMENT_IS_TYPE_B2(Blank_req,Spacing_req,Rhythmic_req);
+IMPLEMENT_IS_TYPE_B2 (Blank_req,Spacing_req,Rhythmic_req);
 
 void
-Blank_req::do_print() const
+Blank_req::do_print () const
 {
-  Spacing_req::do_print();
+  Spacing_req::do_print ();
 }
 /* *************** */
 
-Melodic_req::Melodic_req()
+Melodic_req::Melodic_req ()
 {
   notename_i_ = 0;
   octave_i_ = 0;
@@ -89,8 +89,8 @@ Melodic_req::Melodic_req()
 void
 Melodic_req::transpose (Melodic_req const * delta)
 {
-  int old_pitch = pitch();
-  int delta_pitch = delta->pitch();
+  int old_pitch = pitch ();
+  int delta_pitch = delta->pitch ();
   octave_i_ += delta->octave_i_;
   notename_i_ += delta->notename_i_;
   while  (notename_i_ >= 7)
@@ -99,22 +99,22 @@ Melodic_req::transpose (Melodic_req const * delta)
        octave_i_ ++;
     }
 
-  int new_pitch = pitch();
+  int new_pitch = pitch ();
   int delta_acc = new_pitch - old_pitch - delta_pitch;
 
   accidental_i_ -= delta_acc;
   if (abs (accidental_i_) > 2)
     {
-       delta->warning (_("transposition makes accidental larger than 2"));
+       delta->warning (_ ("transposition makes accidental larger than 2"));
     }
 }
 
-IMPLEMENT_IS_TYPE_B1(Melodic_req,Musical_req);
+IMPLEMENT_IS_TYPE_B1 (Melodic_req,Musical_req);
 
 bool
 Melodic_req::do_equal_b (Request*r) const
 {
-  Melodic_req* m= r->musical()->melodic ();
+  Melodic_req* m= r->musical ()->melodic ();
   return !compare (*m, *this);
 }
 
@@ -135,7 +135,7 @@ Melodic_req::compare (Melodic_req const &m1 , Melodic_req const&m2)
 }
 
 void
-Melodic_req::do_print() const
+Melodic_req::do_print () const
 {
 #ifndef NPRINT
   DOUT << "notename: " << notename_i_
@@ -144,7 +144,7 @@ Melodic_req::do_print() const
 }
 
 int
-Melodic_req::height() const
+Melodic_req::height () const
 {
   return  notename_i_ + octave_i_*7;
 }
@@ -155,7 +155,7 @@ Melodic_req::height() const
 static Byte pitch_byte_a[  ] = { 0, 2, 4, 5, 7, 9, 11 };
 
 int
-Melodic_req::pitch() const
+Melodic_req::pitch () const
 {
   return  pitch_byte_a[ notename_i_ % 7 ] + accidental_i_ + octave_i_ * 12;
 }
@@ -164,13 +164,13 @@ Melodic_req::pitch() const
 int
 Rhythmic_req::compare (Rhythmic_req const &r1, Rhythmic_req const &r2)
 {
-  return (r1.duration() - r2.duration ());
+  return (r1.duration () - r2.duration ());
 }
 
 bool
 Rhythmic_req::do_equal_b (Request*r) const
 {
-  Rhythmic_req* rh = r->musical()->rhythmic ();
+  Rhythmic_req* rh = r->musical ()->rhythmic ();
 
   return !compare (*this, *rh);
 }
@@ -181,26 +181,26 @@ Rhythmic_req::set_duration (Duration d)
   duration_ = d;
 }
 
-Rhythmic_req::Rhythmic_req()
+Rhythmic_req::Rhythmic_req ()
 {
 }
 
 
-IMPLEMENT_IS_TYPE_B1(Rhythmic_req,Musical_req);
+IMPLEMENT_IS_TYPE_B1 (Rhythmic_req,Musical_req);
 
 void
-Rhythmic_req::do_print() const
+Rhythmic_req::do_print () const
 {
 #ifndef NPRINT
-  DOUT << "duration { " <<duration_.str() << "}";
+  DOUT << "duration { " <<duration_.str () << "}";
 #endif
 }
 
 
 Moment
-Rhythmic_req::duration() const
+Rhythmic_req::duration () const
 {
-  return duration_.length();
+  return duration_.length ();
 }
 /* *************** */
 
@@ -212,13 +212,13 @@ Lyric_req::Lyric_req (Text_def* def_p)
 }
 
 
-IMPLEMENT_IS_TYPE_B2(Lyric_req,Musical_req,Rhythmic_req);
+IMPLEMENT_IS_TYPE_B2 (Lyric_req,Musical_req,Rhythmic_req);
 
 void
-Lyric_req::do_print() const
+Lyric_req::do_print () const
 {
-  Rhythmic_req::do_print();
-  Text_req::do_print();
+  Rhythmic_req::do_print ();
+  Text_req::do_print ();
 }
 
 /* *************** */
@@ -229,45 +229,55 @@ Note_req::do_equal_b (Request*r) const
 }
 
 
-Note_req::Note_req()
+Note_req::Note_req ()
 {
   forceacc_b_ = false;
 }
 
-IMPLEMENT_IS_TYPE_B2(Note_req,Melodic_req,Rhythmic_req);
+IMPLEMENT_IS_TYPE_B2 (Note_req,Melodic_req,Rhythmic_req);
 
 void
-Note_req::do_print() const
+Note_req::do_print () const
 {
 #ifndef NPRINT
-  Melodic_req::do_print();
+  Melodic_req::do_print ();
   if (forceacc_b_)
     {
        DOUT << " force accidental\n";
     }
-  Rhythmic_req::do_print();
+  Rhythmic_req::do_print ();
 #endif
 }
 /* *************** */
 
-IMPLEMENT_IS_TYPE_B1(Rest_req,Rhythmic_req);
+IMPLEMENT_IS_TYPE_B1 (Rest_req, Rhythmic_req);
 
 void
-Rest_req::do_print() const
+Rest_req::do_print () const
 {
-      Rhythmic_req::do_print();
+      Rhythmic_req::do_print ();
 }
 
 /* *************** */
 
-IMPLEMENT_IS_TYPE_B1(Beam_req,Span_req);
+IMPLEMENT_IS_TYPE_B1 (Multi_measure_rest_req, Rhythmic_req);
 
-Beam_req::Beam_req()
+void
+Multi_measure_rest_req::do_print () const
+{
+      Rhythmic_req::do_print ();
+}
+
+/* *************** */
+
+IMPLEMENT_IS_TYPE_B1 (Beam_req,Span_req);
+
+Beam_req::Beam_req ()
 {
 }
 
 void
-Beam_req::do_print() const
+Beam_req::do_print () const
 {
 }
 
@@ -285,13 +295,13 @@ Abbreviation_beam_req::do_print () const
 {
 }
 
-IMPLEMENT_IS_TYPE_B1(Slur_req,Span_req);
+IMPLEMENT_IS_TYPE_B1 (Slur_req,Span_req);
 void
-Slur_req::do_print() const
+Slur_req::do_print () const
 {
 }
 
-IMPLEMENT_IS_TYPE_B1(Plet_req,Span_req);
+IMPLEMENT_IS_TYPE_B1 (Plet_req,Span_req);
 
 Plet_req::Plet_req ()
 {
@@ -308,11 +318,11 @@ Plet_req::do_print () const
 bool
 Span_req:: do_equal_b (Request*r) const
 {
-  Span_req * s = r->span();
+  Span_req * s = r->span ();
   return spantype == s->spantype;
 }
 
-Span_req::Span_req()
+Span_req::Span_req ()
 {
   spantype = NOSPAN;
 }
@@ -321,7 +331,7 @@ Span_req::Span_req()
 Script_req::Script_req (Script_req const&s)
 {
   dir_ = s.dir_;
-  scriptdef_p_ = s.scriptdef_p_ ? s.scriptdef_p_->clone() : 0;
+  scriptdef_p_ = s.scriptdef_p_ ? s.scriptdef_p_->clone () : 0;
 }
 
 /*
@@ -332,47 +342,47 @@ Script_req::Script_req (Script_req const&s)
 bool
 Script_req::do_equal_b (Request*r) const
 {
-  Script_req * s = r->script();
+  Script_req * s = r->script ();
 
   return  scriptdef_p_->equal_b (*s->scriptdef_p_);
 }
 
-Script_req::Script_req()
+Script_req::Script_req ()
 {
   dir_ = CENTER;
   scriptdef_p_ = 0;
 }
 
 
-IMPLEMENT_IS_TYPE_B1(Script_req,Request);
+IMPLEMENT_IS_TYPE_B1 (Script_req,Request);
 
 void
-Script_req::do_print() const
+Script_req::do_print () const
 {
 #ifndef NPRINT
   DOUT << " dir " << dir_ ;
-  scriptdef_p_->print();
+  scriptdef_p_->print ();
 #endif
 }
 
 void
-Musical_script_req::do_print() const
+Musical_script_req::do_print () const
 {
-  Script_req::do_print();
+  Script_req::do_print ();
 }
 
 
-IMPLEMENT_IS_TYPE_B2(Musical_script_req,Musical_req, Script_req);
+IMPLEMENT_IS_TYPE_B2 (Musical_script_req,Musical_req, Script_req);
 
 
-Script_req::~Script_req()
+Script_req::~Script_req ()
 {
   delete scriptdef_p_;
 }
 /* *************** */
 
 
-Text_req::~Text_req()
+Text_req::~Text_req ()
 {
   delete tdef_p_;
   tdef_p_ = 0;
@@ -386,54 +396,54 @@ Text_req::Text_req (Text_req const& src)
 
 Text_req::Text_req (int dir_i, Text_def* tdef_p)
 {
-  dir_ = Direction(dir_i);
+  dir_ = Direction (dir_i);
   tdef_p_ = tdef_p;
 }
 
 
-IMPLEMENT_IS_TYPE_B1(Text_req,Musical_req);
+IMPLEMENT_IS_TYPE_B1 (Text_req,Musical_req);
 
 void
-Text_req::do_print() const
+Text_req::do_print () const
 {
 #ifndef NPRINT
   DOUT << " dir " << dir_ ;
-  tdef_p_->print();
+  tdef_p_->print ();
 #endif
 }
 
 /* *************** */
 
 
-IMPLEMENT_IS_TYPE_B1(Skip_req,Musical_req);
+IMPLEMENT_IS_TYPE_B1 (Skip_req,Musical_req);
 
 void
-Skip_req::do_print() const
+Skip_req::do_print () const
 {
 #ifndef NPRINT
 
-  DOUT << "duration: " << duration();
+  DOUT << "duration: " << duration ();
 #endif
 }
 
 
 
-IMPLEMENT_IS_TYPE_B1(Dynamic_req,Musical_req);
+IMPLEMENT_IS_TYPE_B1 (Dynamic_req,Musical_req);
 
 void
-Dynamic_req::do_print() const
+Dynamic_req::do_print () const
 {
-  Musical_req::do_print();
+  Musical_req::do_print ();
 }
 
 
-IMPLEMENT_IS_TYPE_B1(Absolute_dynamic_req,Musical_req);
+IMPLEMENT_IS_TYPE_B1 (Absolute_dynamic_req,Musical_req);
 
 void
-Absolute_dynamic_req::do_print() const
+Absolute_dynamic_req::do_print () const
 {
 #ifndef NPRINT
-  Dynamic_req::do_print();
+  Dynamic_req::do_print ();
   DOUT << " loudness " <<loudness_str ();
 #endif
 }
@@ -473,35 +483,35 @@ Absolute_dynamic_req::loudness_str () const
   if (s.empty_b ())
     {
       s = "mf";
-      warning (String (_("Never heard of dynamic scale "))
-              + loudness_ + _(" assuming mf"));
+      warning (String (_ ("Never heard of dynamic scale "))
+              + loudness_ + _ (" assuming mf"));
     }
   return s;
 }
 
 
-Absolute_dynamic_req::Absolute_dynamic_req()
+Absolute_dynamic_req::Absolute_dynamic_req ()
 {
   loudness_ = MF;
 }
 
 
-Span_dynamic_req::Span_dynamic_req()
+Span_dynamic_req::Span_dynamic_req ()
 {
   dynamic_dir_  = CENTER;
 }
 
 
-IMPLEMENT_IS_TYPE_B1(Span_dynamic_req,Musical_req);
+IMPLEMENT_IS_TYPE_B1 (Span_dynamic_req,Musical_req);
 
 void
-Span_dynamic_req::do_print() const
+Span_dynamic_req::do_print () const
 {
 #ifndef NPRINT
-  Span_req::do_print();
+  Span_req::do_print ();
   DOUT << "softer/louder: " <<dynamic_dir_;
 #endif
 }
 
 
-IMPLEMENT_IS_TYPE_B1(Tie_req,Musical_req);
+IMPLEMENT_IS_TYPE_B1 (Tie_req,Musical_req);
index aaaf7201b2c5a1fdc39f4e25ff3621a7ab1bdef1..d267732e97f6afa301a0e438c4f254fbfdd7c624 100644 (file)
@@ -191,6 +191,15 @@ My_lily_parser::get_rest_element (String s,  Duration * duration_p)
       skip_p->set_spot (here_input());
       velt_p->add (skip_p);
     }
+  else if ((duration_p->plet_.type_i_ == 1) && (duration_p->plet_.iso_i_ > 1))
+    {
+      Multi_measure_rest_req* m = new Multi_measure_rest_req;
+      plet_.iso_i_ = 1;
+      default_duration_.plet_.iso_i_ = 1;
+      m->duration_ = *duration_p;
+      m->set_spot (here_input());
+      velt_p->add (m);
+    }
   else
     {
       Rest_req * rest_req_p = new Rest_req;
index e53985fa4e6ada010850302abe8c29069887d481..02033ab93ead58102b8260c1404a895c4a52fd90 100644 (file)
@@ -227,8 +227,7 @@ Paper_score::tex_output ()
 
   if (experimental_features_global_b)
     tex_out << "\\turnOnExperimentalFeatures%\n";
-  if (postscript_global_b)
-    tex_out << "\\turnOnPostScript%\n";
+  tex_out << "\\turnOnPostScript%\n";
   super_elem_l_->output_all ();
   tex_out << "\n\\EndLilyPondOutput";
   outputter_l_ = 0;
index 3e8cbdfe26d5eb40667d4bd5a07fc1bb4297f792..69b49cde0add34b8360f15db61214583ee725714 100644 (file)
@@ -183,10 +183,7 @@ Slur::get_encompass_offset_arr () const
       first = 0;
       left_x = spanned_drul_[LEFT]->width ().length ();
       left_x -= 2 * notewidth;
-//      left_y = 0;
-      Stem* stem = encompass_arr_[last]->stem_l_;
-      left_y = stem->dir_ == dir_ ? stem->stem_end_f ()
-       : stem->stem_begin_f () + 0.5 * dir_;
+      left_y = encompass_arr_[last]->stem_l_->height ()[dir_];
       dy = 0;
     }
   if (encompass_arr_.top () != spanned_drul_[RIGHT])
@@ -195,8 +192,15 @@ Slur::get_encompass_offset_arr () const
       dy = 0;
     }
 
+#define RESIZE_ICE
+#ifndef RESIZE_ICE
   Array<Offset> notes;
   notes.push (Offset (0,0));
+#else
+  int n = last - first + 2;
+  Array<Offset> notes (n);
+  notes[0] = Offset (0,0);
+#endif
   for (int i = first; i < last; i++)
     {
       Stem* stem = encompass_arr_[i]->stem_l_;
@@ -213,25 +217,27 @@ Slur::get_encompass_offset_arr () const
 
       x -= left_x;
 
-      Real y = stem->dir_ == dir_ ? stem->stem_end_f ()
-       : stem->stem_begin_f () + 0.5 * dir_;
+      Real y = stem->height ()[dir_];
 
       /*
        leave a gap: slur mustn't touch head/stem
        */
-      y += 2.5 * dir_;
+      y += 2.5 * internote * dir_;
 
-      // ugh: huh?
       if (dir_ == DOWN)
-       y += 1.5 * dir_;
+       y += 1.5 * internote * dir_;
 
-      y *= internote;
       y -= left_y;
 
+#ifndef RESIZE_ICE
       notes.push (Offset (x, y));
     }
-
   notes.push (Offset (dx, dy));
+#else
+      notes[i - first + 1] = Offset (x, y);
+    }
+  notes[n - 1] = Offset (dx, dy);
+#endif
 
   return notes;
 }
index e513e27407c92fb4de40c972ab87c02ef1e6f766..db27da7950fc1ab5d5de11d4e7c3f17516dd079f 100644 (file)
@@ -253,6 +253,11 @@ Spring_spacer::make_matrices (Matrix &quad, Vector &lin, Real &c) const
 
       c += sqr (i->space_f_);
     }
+  // experimental
+  if (quad.dim() > 10)
+    quad.set_band();
+  
+
 }
 
 void
@@ -268,7 +273,6 @@ void
 Spring_spacer::make_constraints (Mixed_qp& lp) const
 {
   int dim=cols_.size();
-  int last_rank = cols_.top ().pcol_l_->rank_i ();
   
   for (int j=0; j < dim -1; j++)
     {
index 6283f753ce93da2deb6156b0b08218ea9c7d7776..0a1de1398db3f52a51b4791ad92fafbbbd411262 100644 (file)
 #include "string-convert.hh"
 #include "main.hh"
 
-Atom
-Lookup::beam_element (int sidx, int widx, Real slope) const
-{
-  String name = String("slope");
-  Atom bs=(*symtables_p_)("beamslopes")->lookup (name);
-
-  Array<String> args;
-  args.push (sidx);
-  args.push (widx);
-  bs.tex_ = substitute_args (bs.tex_,args);
-  int w = 2 << widx;
-  Real width = w PT;
-  bs.dim_.x() = Interval (0,width);
-  bs.dim_.y() = Interval (0,width*slope);
-  return bs;
-}
-
 
 Atom
 Lookup::rule_symbol (Real height, Real width) const
@@ -57,10 +40,8 @@ Lookup::rule_symbol (Real height, Real width) const
 Atom 
 Lookup::beam(Real &slope, Real width, Real y_thick) const
 {
-  Atom a( postscript_global_b
-         ? ps_beam (slope, width, y_thick)
-         : tex_beam (slope, width));
   
+  Atom a( ps_beam (slope, width, y_thick));
   Real slope_y =slope * width; 
   Real min_y = (0 <? slope_y )- y_thick/2;
   Real max_y = (0 >? slope_y) + y_thick/2;
@@ -92,74 +73,8 @@ Lookup::ps_beam (Real slope, Real width, Real y_thickness)const
     name[i]=  'x';
 
 
-  String mf = "\\embeddedmf{" + name + "}{\n";
-  mf += "input feta-beum;\n";
-  mf += "drawbeam(" + width_str + "," + slope_str + "," + thick_str + ");\n";
-  mf += "end.\n";
-  mf += "}\n";
 
   Atom s;
   s.tex_ = ps;
-  if (embedded_mf_global_b)
-    s.tex_ += mf;
-  
   return s;
 }
-
-Atom
-Lookup::tex_beam (Real &slope, Real width) const
-{
-  const Real MAX_SLOPE = 0.6;
-  const Real SLOPES = 20.0;
-  int sidx = 0;
-  if (abs (slope) > MAX_SLOPE)
-    {
-      WARN << _("beam too steep (") << slope << ")\n";
-      slope = sign (slope) * MAX_SLOPE;
-    }
-
-  sidx = int (rint (slope / MAX_SLOPE *  SLOPES));
-  slope = MAX_SLOPE * sidx / SLOPES;
-
-  Interval xdims = (*symtables_p_)("beamslopes")->lookup ("slope").dim_[X_AXIS];
-  Real min_wid = xdims[LEFT];
-  Real max_wid = xdims[RIGHT];
-  assert(max_wid > 0);
-  int widths = intlog2 (int (max_wid/min_wid)) + 1;
-
-  if (width < min_wid)
-    {
-      WARN<<_("Beam too narrow. (") << print_dimen (width) <<")\n";
-      width = min_wid;
-    }
-
-  Real elemwidth = max_wid;
-
-  int widx  =widths - 1;
-  Molecule m;
-  while (elemwidth > width)
-    {
-      widx --;
-      elemwidth /= 2.0;
-    }
-  Real overlap = elemwidth/4;
-  Real last_x = width - elemwidth;
-  Real x = overlap;
-  Atom elem (beam_element (sidx * widths, widx, slope));
-  m.add (elem);
-  while (x < last_x)
-    {
-      Atom a(elem);
-      a.translate (Offset (x-overlap, (x-overlap)*slope));
-      m.add (a);
-      x += elemwidth - overlap;
-    }
-  Atom a(elem);
-  a.translate (Offset (last_x, (last_x) * slope));
-  m.add (a);
-
-  Atom ret;
-  ret.tex_ = m.TeX_string();
-
-  return ret;
-}
index 9b5ea11d9c341573c21af749fcf340b45f1adb57..8da02d6161559f88ff3d146d5bbaf3f58f93c13b 100644 (file)
@@ -8,8 +8,17 @@
 #include "score-grav.hh"
 #include "timing-grav.hh"
 #include "command-request.hh"
+#include "score-elem-info.hh"
+#include "multi-measure-rest.hh"
 
-
+void
+Timing_engraver::acknowledge_element (Score_elem_info i)
+{
+  if (!i.elem_l_->is_type_b (Multi_measure_rest::static_name ()))
+    return;
+  if (((Multi_measure_rest*)i.elem_l_->item ())->measures_i_)
+    mmrest_b_ = true;
+}
 
 void
 Timing_engraver::fill_staff_info (Staff_info &inf)
index f294431972b42557dfe6cd93a87ebecf3facd15d..de93a9206f402a3cd11e2b065a0f832171825b8c 100644 (file)
 #include "command-request.hh"
 #include "translator-group.hh"
 #include "global-translator.hh"
+#include "multi-measure-rest.hh"
 
 Timing_translator::Timing_translator ()
 {
   default_grouping_ = Rhythmic_grouping (MInterval (0, 1), 4); // ugh
+  mmrest_b_ = false;
 }
 
 bool
@@ -113,8 +115,9 @@ Timing_translator::do_pre_move_processing()
   Global_translator *global_l =
     daddy_trans_l_->ancestor_l (100)->global_l (); // ugh 100.
 
-  if (!time_.cadenza_b_)
+  if (!time_.cadenza_b_ && !mmrest_b_)
     global_l->add_moment_to_process (time_.next_bar_moment ());
+//  mmrest_b_ = false;
 }
 
 IMPLEMENT_IS_TYPE_B1(Timing_translator, Translator);
diff --git a/make/Docrules.make b/make/Docrules.make
new file mode 100644 (file)
index 0000000..e66b3c8
--- /dev/null
@@ -0,0 +1,44 @@
+# special rules for the documentation section.
+# There are too many to add to the general rules
+
+.SUFFIXES: .pod .txt .1  .html
+
+pod2html=pod2html
+pod2groff=pod2man --center="LilyPond documentation" --section="0"\
+       --release="LilyPond $(VERSION)" $< > $@
+
+$(outdir)/%.gif: %.xpm
+       xpmtoppm $< | ppmtogif > $@
+
+$(outdir)/%.dvi: $(outdir)/%.mudtex
+       latex '\nonstopmode \input $<'
+       mv $(notdir $@) $(outdir)
+
+$(outdir)/%.mudtex: %.doc
+       $(depth)/bin/out/mudela-book --noindex --outdir=$(outdir)/ --outname=$(notdir $@) $<
+
+$(outdir)/%.txt: $(outdir)/%.1
+       troff -man -Tascii $< | grotty -b -u -o > $@
+
+$(depth)/%.txt: $(outdir)/%.txt
+       cp $< $@
+
+
+#  perl 5.003/4
+POD2HTML5004=$(POD2HTML) --noindex --infile $< --outfile=$@;  sh $(depth)/bin/add-URLs.sh $@
+
+POD2HTML5003=$(POD2HTML) $< ; mv $(notdir $@) $(outdir)/
+
+
+do_pod2html=$(POD2HTML5003)
+
+
+$(outdir)/%.html: %.pod $(depth)/VERSION
+       $(do_pod2html) 
+
+$(outdir)/%.5: %.pod
+       $(pod2groff)
+
+$(outdir)/%.1: %.pod
+       $(pod2groff)
+
diff --git a/make/Install_outfiles.make b/make/Install_outfiles.make
new file mode 100644 (file)
index 0000000..e3da0a9
--- /dev/null
@@ -0,0 +1,16 @@
+
+
+
+localinstall: localinstall-files
+
+localinstall-files: $(INSTALLATION_OUT_FILES)
+       $(INSTALL) -d $(INSTALLATION_DIR)
+       $(INSTALL) -m 644 $(INSTALLATION_OUT_FILES) $(INSTALLATION_DIR)
+
+localuninstall: localuninstall-files
+
+localuninstall-files:
+       for i in $(notdir $(INSTALLATION_OUT_FILES)) ; do \
+               rm -f $(INSTALLATION_DIR)/$$i; \
+       done
+       -rmdir $(INSTALLATION_DIR)
index 52b9e556375b2a98f31249a7fee41e4b50799a12..c50099ce3132d55d53718eec2885f023a0fd4b4e 100644 (file)
@@ -15,14 +15,16 @@ depth = ..
 
 # identify module:
 #
-NAME = make
 SUBDIRS = 
 
 # two outdir files are distributed, since they make sense to have without running 
 # configure and make.
+
+LSMENTRY=$(outdir)/lilypond.lsm
+RPMSPEC=$(outdir)/lilypond.spec 
 IN_FILES = $(wildcard *.in)
 EXTRA_DISTFILES = $(IN_FILES)
-OUT_DISTFILES=$(outdir)/lilypond.spec $(outdir)/lilypond.lsm $(outdir)/lelievijver.lsm
+OUT_DISTFILES= $(outdir)/lelievijver.lsm $(LSMENTRY) $(RPMSPEC)
 #
 
 # generic variables:
@@ -32,13 +34,10 @@ include ./$(depth)/make/Files.make
 include ./$(depth)/make/Targets.make
 include ./$(depth)/make/Rules.make
 
+default: $(RPMSPEC) $(LSMENTRY)
 
-local-maintainerclean:
-       rm lilypond.spec $(wildcard *.lsm)
-
-spec: $(outdir)/lilypond.spec
 
-rpmdocs=$(addprefix Documentation/out/, $(notdir $(shell ls $(depth)/Documentation/$(outdir)/*.txt)))\
+rpmdocs=$(addprefix Documentation/out/, $(notdir $(shell  find $(depth)/Documentation/ -name '*.txt' ))) \
        BUGS TODO NEWS DEDICATION ANNOUNCE README
 rpmmudocs=$(addprefix Documentation/, $(notdir $(shell ls $(depth)/Documentation/*.doc)))
 rpmdvis=$(rpmmudocs:.doc=.dvi)
@@ -51,7 +50,7 @@ sed-date=sed 's!@DATE@!${date}!g'
 sed-examples = sed 's!@EXAMPLE_LYS@!${rpmexamples} ${rpmmudocs}!g'
 sed-docs=sed 's!@TEXT_DOCS@!${rpmdocs}!g'
 
-$(outdir)/lilypond.spec: lilypond.spec.in $(depth)/VERSION
+$(outdir)/%.spec: %.spec.in $(depth)/VERSION
        cat $< | $(sed-version) | $(sed-docs) | $(sed-examples) > $@
 
 $(outdir)/%.lsm: %.lsm.in $(depth)/VERSION
diff --git a/make/Manual.make b/make/Manual.make
new file mode 100644 (file)
index 0000000..2914e59
--- /dev/null
@@ -0,0 +1,16 @@
+MANFILES = lilypond convert-mudela mi2mu mudela-book
+MANGROFF = $(addprefix $(outdir)/, $(addsuffix .$(SECTION)))
+
+
+
+localinstall: $(MANGROFFS)
+       $(INSTALL) -d $(mandir)/man$(SECTION)
+       $(INSTALL) -m 644 $(MANGROFFS) $(mandir)/man$(SECTION)
+
+
+localuninstall:
+       (cd  $(mandir)/man$(SECTION)/; rm -f $(MANGROFF))
+
+
+
+
index ec12e0599ae4016c59e162b59546af5c89399e1f..1da745a5b671c8d03ad3eea3195d3bc8192bff6a 100644 (file)
@@ -5,10 +5,26 @@ include $(depth)/make/Include.make
 LYFILES = $(wildcard *.ly)
 TEXFILES = $(wildcard *.tex)
 M4FILES = $(wildcard *.m4)
-DISTFILES = Makefile $(LYFILES) $(TEXFILES) $(wildcard *.m4)
+DISTFILES = Makefile $(EXTRA_DISTFILES) $(LYFILES) $(TEXFILES) $(wildcard *.m4)
 #
 
 OUTFILES = $(addprefix $(outdir)/,$(M4FILES:%.m4=%))
 
 all: $(OUTFILES)
 
+
+
+name-stem= $(notdir $(basename $<))
+
+$(outdir)/%.gif: $(outdir)/%.ps
+       sh $(depth)/bin/ps-to-gifs.sh $<
+       mv $(name-stem)-page*.gif $(outdir)/
+       touch $@
+
+$(outdir)/%.ly.txt: %.ly
+       ln -f $< $@
+
+$(outdir)/%.dvi: %.ly
+       (cd $(outdir); \
+       LILYINCLUDE="..:$$LILYINCLUDE" ly2dvi ../$< )
+
index f886422b03e72f8c5620b5013301898f75199893..4e4d335a77ffabf8227b77e467ebf1c232424d83 100644 (file)
@@ -44,7 +44,14 @@ $(outdir)/%: %.m4
 %.dep:
        touch $@
 
+%.gz: %
+       gzip -c9 $< > $@
+
 
 $(depth)/%.txt: check-doc-deps
        rm -f $@
        ln `find ${depth}/Documentation -name $@ -print|head -1 ` .
+
+$(outdir)/%.ps: $(outdir)/%.dvi
+       dvips -o $@ $<
+
diff --git a/make/WWW.make b/make/WWW.make
new file mode 100644 (file)
index 0000000..58379ae
--- /dev/null
@@ -0,0 +1,11 @@
+
+
+ly_examples=$(addprefix $(outdir)/, $(addsuffix .ly.txt, $(examples)))
+ps_examples=$(addprefix $(outdir)/, $(addsuffix .ps.gz, $(examples)))
+gif_examples=$(addprefix $(outdir)/, $(addsuffix .gif, $(examples)))
+
+
+
+WWW:  $(ly_examples) $(ps_examples) $(gif_examples)
+       (cd $(outdir); $(PYTHON) ../$(depth)/bin/mutopia-index.py $(examples))
+
index 96adf5b0bdafb1ed1a9fc3c66a986bb6f9fb20af..10fd44ffe7da73a5ee969db36bfb32e145829b2a 100644 (file)
@@ -3,7 +3,7 @@ Version: @TOPLEVEL_VERSION@
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
-Source0: alpha.gnu.org:/gnu/lilypond/development/lilypond-@TOPLEVEL_VERSION@.tar.gz
+Source0: pcnov095.win.tue.nl:/pub/lilypond/development/lilypond-@TOPLEVEL_VERSION@.tar.gz
 Summary: A program for typesetting music.
 URL: http://www.cs.ruu.nl/~hanwen/lilypond
 Packager: Han-Wen Nienhuys <hanwen@stack.nl>
@@ -36,12 +36,14 @@ make prefix="$RPM_BUILD_ROOT/usr" install
 %doc Documentation/out/lelie_logo.gif
 /usr/bin/convert-mudela
 /usr/bin/mudela-book
+/usr/bin/ly2dvi
 /usr/bin/lilypond
-/usr/lib/libflower.so
 /usr/bin/mi2mu
+# /usr/lib/libflower.so
 /usr/man/man1/mi2mu.1
 /usr/man/man1/lilypond.1
 /usr/man/man1/mudela-book.1
+/usr/man/man1/ly2dvi.1
 /usr/man/man1/convert-mudela.1
 /usr/lib/texmf/texmf/tex/lilypond/
 /usr/lib/texmf/texmf/fonts/source/public/lilypond
index ea9fa54c6527f9dd8c86016ceb49ba7aa263142a..1fde0e32e44a5f43042b71e65581ba575c3ad1f9 100644 (file)
@@ -38,6 +38,7 @@ else:
 %      input feta-eindelijk;
 %      input feta-klef;
 %      input feta-toevallig;
-       input feta-schrift;
-%      input feta-slag;
+%      input feta-schrift;
+%      input feta-schrift;
+       input feta-haak;
 fi
index 186a9ddeac758897d6cc0b75d5aa5e0874cae322..76bd6bd4c70ae21be9d1eff1c88372d3cb52bc91 100644 (file)
@@ -1,5 +1,6 @@
 input feta-macros;
 input feta-params;
+input feta-autometric;
 
 save code;
 code :=0;
@@ -39,13 +40,34 @@ def draw_bracket( expr height_sharp, width_sharp) =
        filldraw z5{dir(180+alpha)}..{left}z1--z2--z3..{up}z4{right}
                ..{dir(alpha)}z6..cycle;
 
-       labels(1,2,3,4,5,6);
+%      % try control points to do this in ps
+%      currentpicture:=currentpicture shifted (-x5/2,(x5-x4)/2);
+%
+%      s7 := 0.4*(x5-x1);
+%      x7 = x1 + s7 * cosd(0);
+%      y7 = y1 + s7 * sind(0);
+%
+%      s8 := -0.25*(x5-x1);
+%      x8 := x5 + s8 * cosd(alpha);
+%      y8 := y5 + s8 * sind(alpha);
+%
+%      s9 := 0.5*(x5-x4);
+%      x9 := x4 + s9 * cosd(0);
+%      y9 := y4 + s9 * sind(0);
+%
+%      s10 := -0.15*(x5-x4);
+%      x10 := x5 + s10 * cosd(alpha);
+%      y10 := y5 + s10 * sind(alpha);
+%
+%      draw z5..controls z8 and z7..z1--z2--z3..{up}z4
+%              ..controls z9 and z10..z6..cycle;
+%
+%      labels(1,2,3,4,5,6,7,8,9,10);
        addto currentpicture also currentpicture yscaled -1;
 endchar;
 enddef;
 
-
-% for h :=  staffsize# step 1 pt# until (2 * staffsize#):
+% for h :=  staffsize# step 1 pt# until (1.1 * staffsize#):
 for h :=  staffsize# step 1 pt# until (7 * staffsize#):
        draw_bracket(h, 2interline# );
 endfor
index 018f98af670f879e402d0dddd45a9bb97f74bff7..46c474af9586b9484ca17b4ddb6f95b87027966f 100644 (file)
@@ -10,7 +10,12 @@ depth = ../..
 SUBDIRS = 
 # 
 
+
 # generic stuff/Makefile
 #
 include ./$(depth)/make/Mutopia.make
 #
+
+examples=scsii-menuetto wtk1-fugue2 preludes-2
+
+include $(depth)/make/WWW.make
index 0137e2994608f1a2b6334be361f63f4430592988..c67daf25f0edb82d82ba209d612ed7d6fe89b64f 100644 (file)
@@ -9,6 +9,10 @@ depth = ..
 #
 SUBDIRS = J.S.Bach Coriolan
 EXTRA_DISTFILES +=  TODO
+
+examples=standje gallina
+
+
 #
 # generic stuff/Makefile
 #
diff --git a/mutopia/TODO b/mutopia/TODO
new file mode 100644 (file)
index 0000000..e282e81
--- /dev/null
@@ -0,0 +1,9 @@
+       - more composers > 70y +
+       - (more) free composers
+       - beethoven's coriolan
+       - more composers > 70y +
+       - (more) free composers
+       - beethoven's coriolan
+       - more composers > 70y +
+       - (more) free composers
+       - beethoven's coriolan
index 822a0b27d9d8a351e6a21f241a038900e3a64611..85707a128222e09107526341f595c9a76e48a587 100644 (file)
@@ -1,6 +1,6 @@
 \header{
 filename =      "los-toros-oboe.ly";
-title =                 "La Feria\normalsize\\[2ex]Los Toros";
+title =                 "La Feria\\normalsize\\[2ex]Los Toros";
 opus =          "";
 composer =      "Paul Lac\\^ome d'Estalenx (1838-1920)";
 enteredby =     "jcn";
index 4f89904b66ea9de8e1e516bd1b83d88a30f55721..367d4f6ebcb64b86802759ef76a54d01c648d4b9 100644 (file)
@@ -44,7 +44,4 @@ include ./$(depth)/make/Targets.make
 include ./$(depth)/make/Rules.make
 #
 
-EXECUTABLES=bow
-include $(depth)/make/Executable.make
-
 
index bb85ea3e6d5a1a5fa871ac6a2f939d85538031f4..02d5adbc44725051820d8031954fc0485aa28144 100644 (file)
 
 typedef void *Paper_def;
 
+bool experimental_features_global_b = true;
+
 #include "bezier.hh"
 #include "bezier.cc"
 #include "offset.cc"
 
+
 struct Point
 {
   Real x, y;
@@ -62,8 +65,11 @@ bow (Point* points, int n, int d)
   Array<Offset> notes;
   for (int i = 0; i < n; i++)
     notes.push (Offset (points[i].x, points[i].y));
-//  cout << "pickup pencircle scaled 8pt#;\n";
+#if 1
+  cout << "pickup pencircle scaled 8pt#;\n";
+#else
   cout << "pickup pencircle scaled 2pt#;\n";
+#endif
   for (int i = 0; i < n; i++)
     cout << "drawdot (" << notes[i].x () << ", " << notes[i].y () << ");\n";
   Bezier_bow b (0);
@@ -104,108 +110,40 @@ main ()
   bow ((Point[6]){ 0,0, 20,0, 40,0, 60,0, 80,0, 100,40 }, 6, 1);
   bow ((Point[2]){ 0,0, 20,0 }, 2, 1);
   bow ((Point[2]){ 0,0, 20,-10 }, 2, 1);
-#endif
   bow ((Point[6]){ 0,0, 20,0, 40,0, 60,0, 80,0, 100,100 }, 6, 1);
-  cout << "\\end\n";
-  return 0;
-}
 
-// vim:sw=2 makeprg=g++\ -g\ bow.cc\ -o\ bow
-#include <iostream.h>
-#define PT
+  bow ((Point[6]){ 0,0, 20,-10, 40,20, 60,-20, 80,20, 100,0 }, 6, 1);
+  bow ((Point[6]){ 0,0, 20,-10, 40,20, 60,-20, 80,20, 100,0 }, 6, -1);
+  bow ((Point[6]){ 0,0, 20,20, 40,0, 60,40, 80,20, 100,50 }, 6, 1);
+  bow ((Point[6]){ 0,0, 20,20, 40,0, 60,40, 80,20, 100,50 }, 6, -1);
+  bow ((Point[6]){ 0,0, 20,20, 40,0, 60,40, 80,20, 100,100 }, 6, -1);
 
-// mmm
-#define STANDALONE
+  bow ((Point[6]){ 0,-10, 20,-20, 40,0, 60,-40, 80,-20, 100,-50 }, 6, 1);
 
-#include <math.h>
+  bow ((Point[6]){ 0,10, 20,20, 40,0, 60,40, 80,20, 100,50 }, 6, -1);
+#endif
 
-typedef void *Paper_def;
+  //clipping
+#if 0
+  bow ((Point[6]){ 0,0, 20,60, 40,0, 60,0, 80,0, 100,1 }, 6, 1);
 
-#include "bezier.hh"
-#include "bezier.cc"
-#include "mat.hh"
+  bow ((Point[6]){ 0,1, 20,0, 40,0, 60,0, 80,60, 100,0 }, 6, 1);
+  bow ((Point[6]){ 0,0, 20,20, 40,40, 60,60, 80,140, 100,100 }, 6, 1);
+  bow ((Point[6]){ 0,0, 20,20, 40,40, 60,60, 80,20, 100,100 }, 6, -1);
+  bow ((Point[6]){ 0,0, 20,-20, 40,-40, 60,-60, 80,-20, 100,-100 }, 6, 1);
+  bow ((Point[6]){ 0,0, 20,-20, 40,-40, 60,-60, 80,-140, 100,-100 }, 6, -1);
+#endif
 
-struct Point
-{
-  Real x, y;
-};
+   // bugs
+//  bow ((Point[6]){ 0,0, 20,0, 40,0, 60,0, 80,40, 100,1 }, 6, 1);
+//  bow ((Point[6]){ 0,0, 20,0, 40,0, 60,0, 80,-40, 100,1 }, 6, -1);
+//  bow ((Point[6]){ 0,0, 20,40, 40,0, 60,0, 80,0, 100,1 }, 6, 1);
+//  bow ((Point[6]){ 0,0, 20,-40, 40,0, 60,0, 80,0, 100,1 }, 6, -1);
 
-void
-out (Bezier_bow& b)
-{
-  cout << "save dx,dy,x,y;\n";
-  for (int i = 0; i < 4; i++)
-      cout << "z" << i + 1 << " = (" << b.control_[i].x ()
-       << ", " << b.control_[i].y () << ");\n";
-  for (int i = 1; i < 3; i++)
-      cout << "z" << i + 4 << " = (" << b.return_[i].x ()
-       << ", " << b.return_[i].y () << ");\n";
-//  cout << "pickup pencircle scaled 0.5pt#;\n";
-//  cout << "draw z2--z3; draw (50,0)-- 0.5[z2,z3];\n";
-  cout << "pickup pencircle scaled 4pt#;\n";
-  for (int i = 0; i < 4; i++)
-    cout << "drawdot z" << i + 1 << ";\n";
-//  cout << "pickup pencircle scaled 0.4pt#;\n";
-  cout << "pickup pencircle scaled 1.6pt#;\n";
-  cout << "path boogje;\n";
-//  cout << "boogje=z1..controls z2 and z3..z4..controls z5 and z6..cycle;\n";
-  cout << "boogje=z1..controls z2 and z3..z4;\n";
-  cout << "dx=x4-x1;\n";
-  cout << "dy=y4-y1;\n";
-  cout << "draw boogje;\n";
-  cout << "pickup pencircle scaled 0.4pt#;\n";
-  cout << "boogje:=z4..controls z5 and z6..z1;\n";
-  cout << "draw boogje;\n";
-//  cout << "filldraw boogje;\n";
-  cout << "showit; shipit;clearit;\n";
-}
-
-void
-bow (Point* points, int n, int d)
-{
-  Array<Offset> notes;
-  for (int i = 0; i < n; i++)
-    notes.push (Offset (points[i].x, points[i].y));
-  cout << "pickup pencircle scaled 8pt#;\n";
-  for (int i = 0; i < n; i++)
-    cout << "drawdot (" << notes[i].x () << ", " << notes[i].y () << ");\n";
-  Bezier_bow b (0);
-  b.set (notes, d);
-  b.calc ();
-  out (b);
-  return;
-}
+  bow ((Point[6]){ 0,0, 20,-40, 40,0, 60,20, 80,20, 100,40 }, 6, -1);
+  bow ((Point[6]){ 0,0, 20,-20, 40,-20, 60,-20, 80,-80, 100,-40 }, 6, -1);
 
-int
-main ()
-{
-  //cout.unsetf(ios::scientific);
-  cout.setf(ios::fixed);
-#if 1
-  bow ((Point[6]){ 0,0, 20,0, 40,0, 60,0, 80,0, 100,1 }, 6, 1);
-  bow ((Point[6]){ 0,0, 20,0, 40,30, 60,30, 80,0, 100,1 }, 6, 1);
-  bow ((Point[6]){ 0,0, 20,0, 40,0, 60,0, 80,10, 100,1 }, 6, 1);
-  bow ((Point[6]){ 0,0, 20,0, 40,0, 60,0, 80,40, 100,1 }, 6, 1);
-  bow ((Point[6]){ 0,0, 20,0, 40,0, 60,40, 80,0, 100,1 }, 6, 1);
-  bow ((Point[6]){ 0,10, 20,20, 40,0, 60,40, 80,20, 100,50 }, 6, 1);
-  bow ((Point[6]){ 0,10, 20,20, 40,0, 60,40, 80,20, 100,50 }, 6, -1);
-  bow ((Point[6]){ 0,10, 20,20, 40,0, 60,40, 80,20, 100,100 }, 6, -1);
-  bow ((Point[9]){ 0,0, 20,0, 40,-80, 60,0, 80,0, 100,0, 120,0, 140,0, 160,-1 }, 9, -1);
-  bow ((Point[9]){ 0,0, 40,0, 80,180, 120,0, 160,0, 200,0, 240,0, 280,0, 320,1 }, 9, 1);
-  bow ((Point[9]){ 
-  {0, 0}, 
-  {19.10645980317711, 1}, 
-  {29.402919606354207, 28}, 
-  {55.389379409531308, 1}, 
-  {73.530839212708514, 1}, 
-  {91.672299015885727, 1}, 
-  {111.35901367452229, 1}, 
-  {131.04572833315891, 1}, 
-  {145.76744299179552, 0}
-  }, 
-  9, 1);
-#endif
-  bow ((Point[6]){ 0,0, 20,0, 40,0, 60,0, 80,0, 100,40 }, 6, 1);
+  bow ((Point[6]){ 0,0, 20,20, 40,40, 60,60, 80,140, 100,100 }, 6, 1);
   cout << "\\end\n";
   return 0;
 }
index b7ba27d28119305e1ac1d8201932fe0746a12fb7..f7fd285720512a8172d0597ac3ba555a92f0e926 100644 (file)
@@ -3,7 +3,6 @@
 
 \def\fetsixteendefs{%
   \font\feta = feta16
-  \font\vetfont = feta-beams16
   \font\fetanummer = feta-nummer8
   \font\dynfont = feta-din10 scaled \magstep 1
   \font\bracefont = feta-braces16
@@ -13,7 +12,6 @@
 
 \def\fettwentydefs{%
   \font\feta = feta20
-  \font\vetfont = feta-beams20
   \font\fetanummer = feta-nummer10
   \font\dynfont = feta-din10 scaled \magstep 2
   \font\bracefont = feta-braces20
@@ -23,7 +21,6 @@
 
 \def\fettwentysixdefs{%
   \font\feta = feta26
-  \font\vetfont = feta-beams26
   \font\fetanummer = feta-nummer12
   \font\dynfont = feta-din10 scaled \magstep 3
   \font\bracefont = feta-braces16
@@ -33,7 +30,6 @@
 
 \def\fetthirteendefs{%
   \font\feta = feta13
-  \font\vetfont = feta-beams26
   \font\fetanummer = feta-nummer5
   \font\dynfont = feta-din10 scaled \magstep 0
   \font\bracefont = feta-braces16
@@ -43,7 +39,6 @@
 
 \def\fetelevendefs{%
   \font\feta = feta11
-  \font\vetfont = feta-beams26
   \font\fetanummer = feta-nummer5
   \font\dynfont = feta-din10        % scaled \magstep-1
   \font\bracefont = feta-braces16
index 9ff22292d5a55c4b4e6e8a05168916dff2201ed3..59e4d4e857e788e75f62999ea25a2a78e4964096 100644 (file)
@@ -96,39 +96,122 @@ def
  /lily_distance {
         1 copy mul exch 1 copy mul add sqrt
  } bind def
- /draw_plet
-        {
-                staffrulethickness setlinewidth
-                /dir exch def
-                /plet_dy exch def
-                /plet_dx exch def
-               staffheight 2 div /plet_gapx exch def
-               plet_dy plet_dx div plet_gapx mul /plet_gapy exch def
-               staffheight 4 div dir mul /plet_h exch def
-%
-               0 0 moveto
-                0 plet_h lineto 
-               plet_dx plet_gapx sub 2 div 
-                       plet_dy plet_gapy sub 2 div plet_h add lineto
-               plet_dx plet_gapx add 2 div 
-                       plet_dy plet_gapy add 2 div plet_h add moveto
-               plet_dx plet_dy plet_h add lineto
-               plet_dx plet_dy lineto
-               stroke
-        }
-        bind def
- staffheight 2 div /slurhtlimit exch def
+staffrulethickness 1.2 mul /plet_t exch def
+/draw_plet
+{
+       plet_t setlinewidth
+       true setstrokeadjust
+       1 setlinecap
+       1 setlinejoin
+       /dir exch def
+       /plet_dy exch def
+       /plet_dx exch def
+       staffheight 2 div /plet_gapx exch def
+       plet_dy plet_dx div plet_gapx mul /plet_gapy exch def
+       staffheight 4 div dir mul /plet_h exch def
+%
+       0 0 moveto
+       0 plet_h lineto 
+       plet_dx plet_gapx sub 2 div 
+               plet_dy plet_gapy sub 2 div plet_h add lineto
+       plet_dx plet_gapx add 2 div 
+               plet_dy plet_gapy add 2 div plet_h add moveto
+       plet_dx plet_dy plet_h add lineto
+       plet_dx plet_dy lineto
+       stroke
+} bind def
+staffheight 2 div /slurhtlimit exch def
 /draw_slur
 {
        staffrulethickness setlinewidth
-       0 0 moveto
-       rcurveto
-       rcurveto
+       moveto
+       curveto
+       lineto
+       curveto
        gsave
        fill
        grestore
        stroke
        } bind def
+%
+staffheight 4 div /interline exch def
+%
+/bracket_traject
+{
+  /traject_ds exch def
+  /traject_alpha exch def
+  traject_ds traject_alpha sin mul add
+  exch
+  traject_ds traject_alpha cos mul add
+  exch
+} bind def
+%
+interline 2 div /bracket_b exch def
+interline 2 mul /bracket_w exch def
+staffrulethickness /stafflinethickness 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
+%
+/half_bracket
+{
+%6
+       0 0
+%5a
+       bracket_b bracket_v add bracket_h bracket_t sub bracket_u add
+       bracket_alpha bracket_v -0.15 mul bracket_traject
+%5b
+       1 bracket_h
+       0 bracket_v 0.5 mul bracket_traject
+%5c
+       0 bracket_h
+%4a
+       bracket_b bracket_h bracket_t sub
+       0 bracket_v 0.4 mul bracket_traject
+%4b
+       bracket_b bracket_v add bracket_h bracket_t sub bracket_u add
+       bracket_alpha bracket_v -0.25 mul bracket_traject
+%4c
+       bracket_b bracket_v add bracket_h bracket_t sub bracket_u add
+%3
+       bracket_b bracket_h bracket_t sub
+%2
+       bracket_b 0
+%1
+       0 0
+} bind def
+%
+/draw_half_bracket {
+       moveto
+       lineto
+       lineto
+       curveto
+       curveto
+       lineto
+       gsave
+       fill
+       grestore
+} bind def
+%
+/draw_bracket
+{
+       2 div bracket_b add /bracket_h exch def
+       bracket_t setlinewidth
+       true setstrokeadjust
+       1 setlinecap
+       1 setlinejoin
+       half_bracket
+       20 copy
+       1 -1 scale
+       draw_half_bracket
+       stroke
+       1 -1 scale
+% ugh, ugh:
+       0.05 0 translate
+       draw_half_bracket
+       stroke
+} bind def
 }}
 
 \def\turnOnExperimentalFeatures{%
index d73f989630ac2d21dfc130883e3730684cb4ff3e..a5bc3c4fde1b60f892834c690b70229c2225bfad 100644 (file)
@@ -78,7 +78,7 @@
         \font\smalltextfont=cmr8
         \font\boldfont=cmbx10
         \font\textmusic=cmmi12
-       \font\largefont=cmbx12
+        \font\largefont=cmbx12
 }
 \def\cmrsixteen{
         \font\smalltextfont=cmr6
@@ -87,7 +87,7 @@
         \font\italicfont=cmti9
         \font\textmusic=cmmi10
         \font\boldfont=cmbx8
-       \font\largefont=cmbx10
+        \font\largefont=cmbx10
 }
 \def\cmreleven{
         \font\smalltextfont=cmr5
@@ -96,7 +96,7 @@
         \font\italicfont=cmti6
         \font\textmusic=cmmi8
         \font\boldfont=cmbx6
-       \font\largefont=cmbx8
+        \font\largefont=cmbx8
 }
 
 \def\cmrthirteen{
         \font\italicfont=cmti7
         \font\textmusic=cmmi9
         \font\boldfont=cmbx7
-       \font\largefont=cmbx9
+        \font\largefont=cmbx9
 }
 \def\musixsixteendefs{
         \sixteenfonts
 \input dyndefs
 \input fetdefs
 
-%\input taupindefs
-%\input eglerdefs
 
 
 \def\emptybar{}
 \def\setdynamic#1{\dynfont #1}
 \def\setfinger#1{\fingerfont #1}
 \def\setlarge#1{\largefont #1}
+\def\setnumber#1{\fetanummer #1}
 
 % the interline symbol. Redefine to remove it.
 \def\defaultlineseparator{\vbox{\mussepline\vskip -5pt\mussepline}}