From c844072722a39a5fcd20372b0497d9130bd41dd7 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Tue, 12 May 1998 11:19:50 +0200 Subject: [PATCH] release: 0.1.63 --- AUTHORS.txt | 4 +- Documentation/Makefile | 26 +- Documentation/PATCHES.pod | 8 +- Documentation/index.pod | 9 +- Documentation/man/Makefile | 2 +- Documentation/man/ly2dvi.pod | 45 ++- Documentation/mutopia.pod | 19 +- Documentation/other-packages.pod | 4 +- Documentation/tex/Makefile | 9 +- Documentation/tex/colorado.bib | 483 +++++++++++++---------- Documentation/tex/engraving.bib | 268 ++++++------- Documentation/tex/fonts.doc | 8 +- Documentation/tex/mudela.doc | 106 ++++- Documentation/topweb.pod | 6 +- Documentation/vocabulary-data | 1 + INSTALL.txt | 12 +- NEWS | 79 ++++ PATCHES.txt | 24 +- TODO | 35 +- VERSION | 2 +- bin/conflily.sh | 1 + bin/convert-mudela.pl | 9 + bin/doos-dist.sh | 28 ++ bin/ls-latex.py | 6 +- bin/ly2dvi.sh | 332 ++++++++++++++-- bin/make-examples.sh | 2 +- bin/make-patch.py | 4 +- bin/release.py | 2 +- bin/rpm-dist.sh | 35 ++ bin/show-latest.pl | 8 +- configure | 15 +- configure.in | 3 + init/a4.ly | 4 + init/bar-numbering.ly | 21 + init/book-fragment.ly | 2 +- init/lily-init.ly | 2 +- init/no-tape.ly | 2 +- init/paper.ly | 9 + init/paper11.ly | 2 + init/paper13.ly | 3 + init/paper20.ly | 7 +- init/paper26.ly | 4 +- init/params.ly | 46 ++- init/score-bar-numbering.ly | 19 + init/simple-init.ly | 5 +- init/table20.ly | 8 +- input/Makefile | 2 +- input/bugs/Makefile | 5 + input/bugs/a.ly | 6 +- input/bugs/beam-bug.ly | 4 +- input/bugs/slur-bug.ly | 2 +- input/coriolan-alto.ly | 6 +- input/keys.ly | 2 +- input/kortjakje.ly | 10 +- input/minimal.ly | 52 +++ input/multi.ly | 2 +- input/pedal.ly | 10 +- input/praeludium-fuga-E.ly | 10 +- input/rhythm.ly | 2 +- input/scales.ly | 14 +- input/scripts.ly | 20 +- input/test/Makefile | 5 +- input/test/beams.ly | 12 +- input/test/broken.ly | 6 +- input/test/collisions.ly | 2 +- input/test/denneboom.ly | 6 +- input/test/font-body.ly | 6 +- input/test/font.ly | 2 +- input/test/font16.ly | 2 +- input/test/gourlay.ly | 2 +- input/test/knee.ly | 7 + input/test/sleur.ly | 48 +-- input/test/slur-damping.ly | 11 + input/test/slurs.ly | 10 +- input/test/spacing.ly | 2 +- input/test/stem.ly | 34 +- input/test/title.ly | 34 ++ input/tril.ly | 2 +- input/twinkle-pop.ly | 2 +- input/twinkle.ly | 14 +- lib/include/input.hh | 1 + lib/include/source-file.hh | 10 +- lib/include/warn.hh | 3 +- lib/input.cc | 91 +++-- lib/source-file.cc | 82 +++- lib/template.cc | 8 +- lib/warn.cc | 5 + lily/VERSION | 2 +- lily/atom.cc | 49 ++- lily/beam.cc | 113 ++++-- lily/break.cc | 4 +- lily/identifier.cc | 212 ++++++---- lily/include/beam.hh | 2 + lily/include/cf-basic.hh | 13 + lily/include/cf-string.hh | 1 + lily/include/identifier.hh | 87 ++-- lily/include/key.hh | 3 +- lily/include/lily-proto.hh | 1 + lily/include/my-lily-lexer.hh | 6 +- lily/include/my-lily-parser.hh | 4 +- lily/include/note-column.hh | 2 + lily/include/note-head.hh | 1 + lily/include/paper-def.hh | 16 +- lily/include/scope.hh | 25 ++ lily/include/stem-info.hh | 2 + lily/include/stem.hh | 7 + lily/include/text-item.hh | 3 +- lily/key.cc | 50 ++- lily/lexer.ll | 50 ++- lily/lyric-grav.cc | 12 + lily/my-lily-lexer.cc | 40 +- lily/my-lily-parser.cc | 71 +++- lily/note-column.cc | 9 + lily/paper-def.cc | 44 ++- lily/parser.yy | 227 ++++++----- lily/plet-spanner.cc | 14 +- lily/scope.cc | 48 +++ lily/score.cc | 6 +- lily/slur.cc | 25 +- lily/spring-spacer.cc | 8 +- lily/stem-grav.cc | 5 +- lily/stem-info.cc | 48 ++- lily/stem.cc | 6 +- lily/template1.cc | 26 ++ lily/tie.cc | 15 + make/Docrules.make | 12 +- make/Makefile | 10 +- make/Mutopia.make | 3 +- make/Rules.make | 5 +- make/Targets.make | 27 +- make/Toplevel.make.in | 22 +- make/Variables.make | 9 +- make/WWW.make | 2 +- make/lilypond.spec.in | 2 +- make/out/lelievijver.lsm | 8 +- make/out/lilypond.lsm | 8 +- make/out/lilypond.spec | 4 +- make/rpmrc.in | 6 + mf/Makefile | 7 +- mi2mu/template9.cc | 25 ++ mutopia/Coriolan/Makefile | 2 +- mutopia/Coriolan/clarinetti-part.ly | 2 +- mutopia/Coriolan/clarinetti.ly | 2 +- mutopia/Coriolan/clarinetto-1.ly | 2 +- mutopia/Coriolan/clarinetto-2.ly | 4 +- mutopia/Coriolan/contrabasso.ly | 10 +- mutopia/Coriolan/coriolan.ly | 2 +- mutopia/Coriolan/corni-part.ly | 2 +- mutopia/Coriolan/corni.ly | 6 +- mutopia/Coriolan/corno-1.ly | 2 +- mutopia/Coriolan/corno-2.ly | 2 +- mutopia/Coriolan/fagotti-part.ly | 2 +- mutopia/Coriolan/fagotti.ly | 2 +- mutopia/Coriolan/fagotto-1.ly | 2 +- mutopia/Coriolan/fagotto-2.ly | 4 +- mutopia/Coriolan/flauti-part.ly | 2 +- mutopia/Coriolan/flauti.ly | 2 +- mutopia/Coriolan/flauto-1.ly | 2 +- mutopia/Coriolan/flauto-2.ly | 2 +- mutopia/Coriolan/global.ly | 2 +- mutopia/Coriolan/oboe-1.ly | 2 +- mutopia/Coriolan/oboe-2.ly | 6 +- mutopia/Coriolan/oboi-part.ly | 2 +- mutopia/Coriolan/oboi.ly | 2 +- mutopia/Coriolan/part-paper.ly | 3 +- mutopia/Coriolan/timpani.ly | 6 +- mutopia/Coriolan/trombe-part.ly | 2 +- mutopia/Coriolan/trombe.ly | 2 +- mutopia/Coriolan/trombo-1.ly | 2 +- mutopia/Coriolan/trombo-2.ly | 6 +- mutopia/Coriolan/viola.ly | 2 +- mutopia/Coriolan/violino-1.ly | 4 +- mutopia/Coriolan/violino-2.ly | 4 +- mutopia/Coriolan/violoncello.ly | 10 +- mutopia/J.S.Bach/Makefile | 6 +- mutopia/J.S.Bach/allemande-alto.ly | 53 +++ mutopia/J.S.Bach/allemande-cello.ly | 53 +++ mutopia/J.S.Bach/allemande-urtext.ly | 67 ++++ mutopia/J.S.Bach/courante-alto.ly | 53 +++ mutopia/J.S.Bach/courante-cello.ly | 53 +++ mutopia/J.S.Bach/courante-urtext.ly | 68 ++++ mutopia/J.S.Bach/menuetto-alto.ly | 102 +++++ mutopia/J.S.Bach/menuetto-cello.ly | 103 +++++ mutopia/J.S.Bach/menuetto-urtext.ly | 154 ++++++++ mutopia/J.S.Bach/prelude-alto.ly | 50 +++ mutopia/J.S.Bach/prelude-cello.ly | 50 +++ mutopia/J.S.Bach/prelude-urtext.ly | 103 +++++ mutopia/J.S.Bach/preludes-1.ly | 68 ++-- mutopia/J.S.Bach/preludes-2.ly | 90 ++--- mutopia/J.S.Bach/preludes-3.ly.m4 | 1 + mutopia/J.S.Bach/preludes-4.ly | 96 ++--- mutopia/J.S.Bach/preludes-5.ly | 77 ++-- mutopia/J.S.Bach/preludes-6.ly | 10 +- mutopia/J.S.Bach/sarabande-alto.ly | 52 +++ mutopia/J.S.Bach/sarabande-cello.ly | 52 +++ mutopia/J.S.Bach/sarabande-urtext.ly | 83 ++++ mutopia/J.S.Bach/scs-paper.ly | 8 + mutopia/J.S.Bach/scsii-alto.ly | 9 + mutopia/J.S.Bach/scsii-cello.ly | 9 + mutopia/J.S.Bach/scsii-menuetto.ly | 99 ----- mutopia/J.S.Bach/solo-cello-suite-ii.ly | 26 ++ mutopia/J.S.Bach/wtk1-fugue1.ly | 42 +- mutopia/J.S.Bach/wtk1-fugue2.ly | 28 +- mutopia/J.S.Bach/wtk1-prelude1.ly | 72 ++-- mutopia/Makefile | 2 +- mutopia/W.A.Mozart/Makefile | 21 + {input => mutopia/W.A.Mozart}/cadenza.ly | 14 +- mutopia/W.A.Mozart/horn-concerto-3.ly | 290 ++++++++++++++ mutopia/W.A.Mozart/out/dummy.dep | 0 mutopia/gallina.ly | 2 +- mutopia/los-toros-oboe.ly | 376 ++++++++---------- mutopia/ltor.ly | 361 ----------------- mutopia/standchen-16.ly | 2 +- mutopia/standchen-20.ly | 2 +- mutopia/standchen-easy.ly | 158 ++++---- mutopia/standchen.ly | 210 +++++----- tex/lilyponddefs.tex | 42 +- tex/titledefs.tex | 26 +- vimrc | 24 ++ 219 files changed, 4747 insertions(+), 2319 deletions(-) create mode 100644 bin/doos-dist.sh create mode 100644 bin/rpm-dist.sh create mode 100644 init/a4.ly create mode 100644 init/bar-numbering.ly create mode 100644 init/paper.ly create mode 100644 init/score-bar-numbering.ly create mode 100644 input/minimal.ly create mode 100644 input/test/knee.ly create mode 100644 input/test/slur-damping.ly create mode 100644 input/test/title.ly create mode 100644 lily/include/cf-basic.hh create mode 100644 lily/include/cf-string.hh create mode 100644 lily/include/scope.hh create mode 100644 lily/scope.cc create mode 100644 make/rpmrc.in create mode 100644 mutopia/J.S.Bach/allemande-alto.ly create mode 100644 mutopia/J.S.Bach/allemande-cello.ly create mode 100644 mutopia/J.S.Bach/allemande-urtext.ly create mode 100644 mutopia/J.S.Bach/courante-alto.ly create mode 100644 mutopia/J.S.Bach/courante-cello.ly create mode 100644 mutopia/J.S.Bach/courante-urtext.ly create mode 100644 mutopia/J.S.Bach/menuetto-alto.ly create mode 100644 mutopia/J.S.Bach/menuetto-cello.ly create mode 100644 mutopia/J.S.Bach/menuetto-urtext.ly create mode 100644 mutopia/J.S.Bach/prelude-alto.ly create mode 100644 mutopia/J.S.Bach/prelude-cello.ly create mode 100644 mutopia/J.S.Bach/prelude-urtext.ly create mode 100644 mutopia/J.S.Bach/sarabande-alto.ly create mode 100644 mutopia/J.S.Bach/sarabande-cello.ly create mode 100644 mutopia/J.S.Bach/sarabande-urtext.ly create mode 100644 mutopia/J.S.Bach/scs-paper.ly create mode 100644 mutopia/J.S.Bach/scsii-alto.ly create mode 100644 mutopia/J.S.Bach/scsii-cello.ly delete mode 100644 mutopia/J.S.Bach/scsii-menuetto.ly create mode 100644 mutopia/J.S.Bach/solo-cello-suite-ii.ly create mode 100644 mutopia/W.A.Mozart/Makefile rename {input => mutopia/W.A.Mozart}/cadenza.ly (88%) create mode 100644 mutopia/W.A.Mozart/horn-concerto-3.ly create mode 100644 mutopia/W.A.Mozart/out/dummy.dep delete mode 100644 mutopia/ltor.ly create mode 100644 vimrc diff --git a/AUTHORS.txt b/AUTHORS.txt index ae928060c5..cca297b7b4 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -61,7 +61,7 @@ CONTRIBUTORS -6/Apr/98 LilyPond 0.1.62 1 +6/Apr/98 LilyPond 0.1.63 1 @@ -127,6 +127,6 @@ AUTHORS(1) LilyPond documentation AUTHORS(1) -6/Apr/98 LilyPond 0.1.62 2 +6/Apr/98 LilyPond 0.1.63 2 diff --git a/Documentation/Makefile b/Documentation/Makefile index fc2341ae54..c3cf69814f 100644 --- a/Documentation/Makefile +++ b/Documentation/Makefile @@ -22,12 +22,12 @@ include ./$(depth)/make/Docrules.make # -TEXTFILES = $(OUTPODFILES:.pod=.txt) +TEXTFILES = $(OUTPODFILES:.pod=$(DOTTEXT)) GROFFFILES = $(OUTPODFILES:.pod=.1) HTMLFILES = $(OUTPODFILES:.pod=.html) -default: all do-doc +default: do-doc # # list of distribution files: @@ -41,20 +41,32 @@ EXTRA_DISTFILES = $(XPMS) vocabulary-data vocabulary-forms.el automake.urgh\ gnu-music-history # don't do DVI files. They can only be made if lily is installed -do-doc: $(TEXTFILES) +do-doc: ugh-mutopia $(TEXTFILES) +readme-topfiles: + cd $(depth); for i in $(README_TOPFILES); do \ + ln -f $$i Documentation/$(outdir); done -$(outdir)/%.txt: $(depth)/% - -rm $@ +$(outdir)/%$(DOTTEXT): $(depth)/%$(DOTTEXT) + rm -f $@ ln $< $@ README_TOPFILES=NEWS DEDICATION TODO ANNOUNCE-0.1 -README_TXTFILES=$(addprefix $(outdir)/,$(addsuffix .txt, $(README_TOPFILES))) +README_TXTFILES=$(addprefix $(outdir)/,$(addsuffix $(DOTTEXT), $(README_TOPFILES))) -local-WWW: $(HTMLFILES) $(README_TXTFILES) $(giffiles) +#local-WWW: $(HTMLFILES) $(README_TXTFILES) $(giffiles) +local-WWW: $(HTMLFILES) readme-topfiles $(README_TXTFILES) $(giffiles) # generic targets and rules: # include $(depth)/make/Targets.make include $(depth)/make/Rules.make +# ugh +check-doc-deps: + @echo hi + +doc: do-doc + +ugh-mutopia: $(outdir)/mutopia.1 + troff -man -Tascii $< | grotty -b -u -o > $(outdir)/mutopia$(DOTTEXT) diff --git a/Documentation/PATCHES.pod b/Documentation/PATCHES.pod index 45089c039f..723bd87573 100644 --- a/Documentation/PATCHES.pod +++ b/Documentation/PATCHES.pod @@ -18,13 +18,17 @@ make your fix/add your code =item * +Add changes to NEWS, and add yourself to Documentation/AUTHORS.pod + +=item * + generate a patch, =item * e-mail your patch to one of the mailing lists gnu-music-discuss@gnu.org or bug-gnu-music@gnu.org -(or if you're a bit shy, to the maintainer). + =back @@ -129,6 +133,6 @@ Then, make a patch as shown above. =head1 MAINTAINER -Han-Wen Nienhuys +Han-Wen Nienhuys Just keep on sending those patches! diff --git a/Documentation/index.pod b/Documentation/index.pod index 8b6ddc24d7..438075e961 100644 --- a/Documentation/index.pod +++ b/Documentation/index.pod @@ -14,7 +14,8 @@ version this was. =over 4 =item * - + The announcement of 0.1 DEDICATION The TODO list. =item * - The Change log is run, which echoes every command in the ly2dvi script. -=item B<-H,--headers=> +=item B<-F,--headers=> + +Name of additional LaTeX headers file. This is included in the +tex file at the end of the headers, last line before \begin{document} + +=item B<-H,--Heigth=> + +Set paper heigth (points). Used together with width and LaTeX name of +papersize in case of papersize unknown to ly2dvi. + +=item B<-F,--headers=> Name of additional LaTeX headers file. This is included in the tex file at the end of the headers, last line before \begin{document} @@ -47,8 +57,16 @@ Switch off page numbering. =item B<-O,--orientation=> -Set orientation - portrait is the default. -(C<-O> landscape produces C<\usepackage[landscape]{article}>) +Set orientation landscape - obsolete, use C<-L> instead. + +=item B<-W,--Width=> + +Set paper width (points). Used together with heigth and LaTeX name of +papersize in case of papersize unknown to ly2dvi. + +=item B<-d,--dependencies> + +Tell lilypond to make dependencies file. =item B<-h,--help> @@ -70,7 +88,7 @@ Set output directory. =item B<-p,--papersize=> Specify papersize. -(C<-p a4paper> produces C<\usepackage[a4paper]{article}>) +(C<-p a4> produces C<\usepackage[a4paper]{article}>) =item B<-s,--separate> @@ -105,7 +123,7 @@ Specify the width (pt, mm or cm) of the printed lines. =item B -Specify papersize. +Specify name of papersize. =back @@ -183,12 +201,20 @@ Set output directory. =item B -Specify papersize. +Specify name of papersize. + +=item B + +Specify paperheight (points - an inch is 72.27, a cm is 28.453 points). =item B Temporary directory name. +=item B + +Specify paperwidth (points - an inch is 72.27, a cm is 28.453 points). + =back =head1 SEE ALSO @@ -226,7 +252,12 @@ to this mailinglist). =head1 REMARKS -Only one papersize is supported, A4. Information on other sizes +Many papersizes are now supported. Information on other sizes (LaTeX names, horizontal and vertical sizes) should be mailed to the author or to the mailing list. +Supported papersizes are: + +a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, archA, archB, archC, archD, +archE, b0, b1, b2, b3, b4, b5, flsa, flse, halfletter, ledger, legal, +letter, note diff --git a/Documentation/mutopia.pod b/Documentation/mutopia.pod index 8b179a7863..57c0f30002 100644 --- a/Documentation/mutopia.pod +++ b/Documentation/mutopia.pod @@ -36,18 +36,21 @@ call The Mutopia Project. =head1 STATUS -This project is still in its vapourware stage, so don't ask questions -unless you want to put in effort into The GNU Music project. - -Just as an aside, the LilyPond package includes the following music: +This project is still in its infancy: we have very little amount of +music available. The music is partly downloadable from the website. +All of it is included in the source archive of LilyPond. =over 4 =item * J.S. Bach, Das Wohltemperierte Clavier I: C major Prelude & Fugue, C -minor fugue. Solo cello suites: suite II, menuetto (alto version). -Six small preludes: some preludes. +minor fugue. Solo cello suites: suite II. Six small preludes: some +preludes. + +=item * + +W. A. Mozart, Horn concerto 3, solo part + cadenza. =item * @@ -57,4 +60,8 @@ F. Schubert, St\"andchen (Serenade) "Leise flehen meine Lieder" Tarquinio Merula, La Gallina a 2 violini +=item * + +Paul Lacome d'Estalenx, La Feria, Los Toros (oboe 1) + =back diff --git a/Documentation/other-packages.pod b/Documentation/other-packages.pod index b8b754be83..5d5d5872cd 100644 --- a/Documentation/other-packages.pod +++ b/Documentation/other-packages.pod @@ -64,7 +64,7 @@ After quarrels, MusiXTeX has been split into two branches: Daniel Taupin's now maintains the branch that still carries the name MusiXTeX. -=item OpusTeX, http://www.inf.ethz.ch/personal/achermann/ +=item OpusTeX, http://www.inf.ethz.ch/personal/acherman/misc.html Andreas Egler's branch is now called OpusTeX. @@ -202,7 +202,7 @@ publishing, called "Berlioz". The music font by Adobe. -=item Haskore, http://haskell.systemscz.cs.yale.edu/haskore/onlinetutorial/index.html +=item Haskore, http://haskell.systemsz.cs.yale.edu/haskore/onlinetutorial/index.html A programming system for music, based on Haskell, a functional programming language. It outputs MIDI, CSound, NeXTStep MusicKit and diff --git a/Documentation/tex/Makefile b/Documentation/tex/Makefile index 34befe747b..e9f4cb59f2 100644 --- a/Documentation/tex/Makefile +++ b/Documentation/tex/Makefile @@ -11,8 +11,11 @@ EXTRA_DISTFILES= $(BIBFILES) $(DOCFILES) dvi: $(DVIFILES) -local-WWW: $(OUTDOCFILES:.doc=.ps.gz) $(addprefix $(outdir)/, $(BIBFILES)) - ls-latex --title 'LaTeX documents about LilyPond' --extension .ps.gz $(BIBFILES) $(DOCFILES) > $(outdir)/index.html +local-WWW: $(OUTDOCFILES:.doc=.ps.gz) $(addprefix $(outdir)/, $(BIBFILES:.bib=.html)) + ls-latex --title 'LaTeX documents about LilyPond' $(BIBFILES) $(DOCFILES) > $(outdir)/index.html $(outdir)/%.bib: %.bib - ln $< $@ + ln -f $< $@ + +$(outdir)/%.html: %.bib + bib2html $< $@ diff --git a/Documentation/tex/colorado.bib b/Documentation/tex/colorado.bib index 1ce4165e24..890592063e 100644 --- a/Documentation/tex/colorado.bib +++ b/Documentation/tex/colorado.bib @@ -1,453 +1,536 @@ % % TITLE=University of Colorado Engraving music bibliography -% AUTHOR=Alyssa Lamb +% AUTHOR=Alyssa Lamb (edited & converted to bibtex by HWN) % -@Book { + +% TODO: fix the labelling. + +@Book {6, author ={Jacob, Archibald}, -year={ 1947}, +year={1947}, title = {Musical handwriting : or, How to put music on paper : A handbook for all musicians, professional and amateur}, -address ={ London} +address ={London}, publisher ={Oxford University Press}, -subject = { Musical notation}, +note = {Musical notation}, } -@Book { -author ={Brandt, Carl, and Roemer, Clinton}, +@Book {15, +author ={Carl Brandt and Clinton Roemer}, title = {Standardized Chord Symbol Notation}, -address={Sherman Oaks, CA} -publisher={Roerick Music Co.} +address={Sherman Oaks, CA}, +publisher={Roerick Music Co.}, } -@Book { +@Book {22, 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}, +publisher={Carl Fischer, Inc.}, +address= {New York}, +note = {Musical notation --Handbooks, manuals}, } -@Book { +@Book {31, title = {Music Printing & Publishing}, -editedby={ Donald W. Krummel \& Stanley Sadie}, -author = {?} +editors ={Donald W. Krummel \& Stanley Sadie}, + +author = {?}, year = {1990}, -series={ The Norton/Grove Handbooks in Music.} -publisher={W.W. Norton} +series={The Norton/Grove Handbooks in Music.}, +publisher={W.W. Norton}, } -@Book { +@Book {40, author={Foss, Hubert}, title = {Music Printing}, series = {Practical Printing and Binding}, -address={ London}, -publisher={ Oldhams Press Ltd., Long Acre.} +address={London}, +publisher={Oldhams Press Ltd., Long Acre}, } -@Book { +@Book {48, author = {Steele, Robert}, year = {1903}, title = {The Earliest English Music Printing}, -address={ London}, +address={London}, } -@Book { +@Book {54, author={Austin, Ernest}, title = {The Story of Music Printing}, -address={ London}, -publisher={Lowe and Brydone Printers, Ltd.} +address={London}, +publisher={Lowe and Brydone Printers, Ltd.}, } } -@Book { +@Book {63, +author={?}, title = {Pictoral History of Music Printing}, -address={E;lhardt, Indiana} -publisher={H. and A. Selmer, Inc.} +address={E;lhardt, Indiana}, +publisher={H. and A. Selmer, Inc.}, } -@Book { +@Book {69, author = {Scholderer, Victor}, year = {1963}, title = {Johann Gutenberg}, -address={ London}, -publisher={ British Museum}, +address={London}, +publisher={British Museum}, } -@Book{ +@Book {77, author = {Wintermitz, Emmanuel}, year = {1955}, title = {Musical Autographs from Monteverdi to Hindemith}, -address={Princeton} +address={Princeton}, publisher={Princeton University Press}, } -@Book{ +@Book {85, author = {Wolf, Johannes}, year = {1919}, title = {Handbuch der Notationskunde}, address={Leipzig}, -publisher={ Breitkopf & Hartel.} +publisher={Breitkopf & Hartel} } -@Book{ + +@Book {92, 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}. +address={London}, } -@Book{ -author={Chrsander, F.} -year={18??} +@Book {100, +author={Chrsander, F.}, +year={18??}, title={A Sketch of the HIstory of Music printing, from the 15th to the 16th century}, } -@Book{ + +@Book {105, author = {Squire, W}, year = {1897}, title = {Notes on Early Music Printing}, -, title = {Bibliographica}, -, iii, 99. +journal = {Bibliographica}, +volume={ iii, 99}, } -@Book{ +@Article{113, author = {Meyer, K. and O'Meara, J}, year = {1935}, title = {The Printing of Music, 1473-1934}, -, title = {The Dolphin}, -, ii, p.171-207. - -@Book{ +journal = {The Dolphin}, +volume={ ii}, +pages={ 171--207}, +} +%% 4th ver., +@Article {120, author = {Pattison, B}, year = {1939}, title = {Notes on Early Music Printing}, -,title = {The Library}, -, 4th ver., xix, p.389-421. +journal = {The Library}, + +volume={xix}, +pages={389-421}, } -@Book{ +@Book {128, 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).} +address={Toledo, Ohio}, +note={(exhibition catalogue, the Toledo Museum of Art)}, } -@Book{ +@Book {136, author = {King, H}, year = {1964}, title = {Four Hundred Years of Music Printing}, -London. +address={London}, } -@Book{ -Gamble, W. 1923 (Rev. 1971). title = {Music Engraving and Pinting, Historical And Technical Treatise}, -Londond. +%(Rev. 1971). +@Book {143, +author={Gamble, W}, +year={ 1923}, +title = {Music Engraving and Pinting, Historical And Technical Treatise}, +address={London}, +} -Deutsch, O.F. 1946 (Rev.1961). title = {Music Publishers' Numbers}, -London. +%(Rev.1961). +@Book{150, +author={Deutsch, O.F.}, +year ={1946}, +title = {Music Publishers' Numbers}, +address={London}, } -@Book{ +@Book {151, author = {Marco, G.A}, year = {1962}, title = {The Earliest Music Printers of Continental Europe: a Checklist of Facsimiles Illustrating Their Work}, -Charlottesville, Virginia. +address={Charlottesville, Virginia}, } -@Book{ +@Article {158, author = {Kinkeldey, O}, year = {1932}, title = {Music And Music Printing in Incunabula}, -, title = {Papers of the Bibliographical Society of America}, -, xxvi, p.89-118. +journal = {Papers of the Bibliographical Society of America}, +volume={ xxvi}, +pages={89-118}, } -@Book{ +@Book {166, author = {Oldman, C.B}, year = {1934}, title = {Collecting Musical First Editions}, -London. -Also in: Carter, J. 1934. title = {New Paths in Book Collecting}, -London. +address={London}, +} + +@Book{170, +author={Carter, J}, +year={1934}, +title = {New Paths in Book Collecting}, +address={London}, +} -Krummel, D.W. 1958-9. title = {Graphic Analysis in Application to Early American Engraved Music}, -, title = {Notes}, -, xvi, p.213. +@Book {179, +author={Krummel, D.W.}, +year={1958}, +month={9}, +title = {Graphic Analysis in Application to Early American Engraved Music}, +journal = {Notes}, +volume={xvi}, +pages={213}, } -@Book{ +@Book {189, author = {Krummel, D.W}, year = {1971}, title = {Oblong Format in Early Music Books}, -, title = {The Library}, -, 5th ser., xxvi, p.312. +journal = {The Library}, +volume={5th ser., xxvi}, +pages={312}, } -@Book{ +@Book {198, 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 {204, +author={Rastall, Richard}, +year={1982}, + title = {The notation of Western music : an introduction}, +address={New York, N.Y.}, +publisher={St. Martin's Press}, +note = {Musical notation}, } -@Book{ +@Book {215, author = {Tappelot, Willy}, year = {1947}, title = {La Notation Musicale}, -Paris: Neuchatel. +address={Paris}, +publisher={Neuchatel}, } -@Book{ +@Book {223, author = {Williams, C.F. Abdy}, year = {1903}, title = {The Story of Notation}, -New York: Charles Scribner's Sons. +address={New York}, +publisher={Charles Scribner's Sons}, } -@Book{ +@Book {231, author = {Rosenthal, Carl A}, year = {1967}, title = {A Practical Guide to Music Notation}, -New York: MCA Music. - -
    } - -@Book{ -Apel, Willi. 1953. title = {The notation of polyphonic music, 900-1600.}, -Cambridge, Mass.: Mediaeval Academy of America. -subject = {Musical notation}, +address={New York}, +publisher={MCA Music}, } -@Book{ - +@Book {239, +author={Apel, Willi}, +year={1953}, +title = {The notation of polyphonic music, 900-1600}, +address={Cambridge, Mass}, +institution={Mediaeval Academy of America}, +note = {Musical notation}, +} -Berger, Anna Maria Busse. 1993. title = {Mensuration and proportion signs : origins and evolution}, -Oxford, England: Clarendon Press; New York: Oxford University Press . +@Book {248, +author={Berger, Anna Maria Busse}, +year={1993}, +title = {Mensuration and proportion signs : origins and evolution}, +address={Oxford, England}, +publisher={Clarendon Press}, +scnd_address={New York}, +scnd_publisher={Oxford University Press }, } -@Book{ -Parrish, Carl. 1957. title = {The notation of medieval music}, -New York : Norton. -subject = {Musical notation}, +@Book {258, +author={Parrish, Carl}, +year={1957}, + title = {The notation of medieval music}, +address={New York}, +publisher={Norton}, +note = {Musical notation}, } -@Book{ +@Book {269, author = {Parrish, Carl}, year = {1946}, -title = { The Notation of Medieval Music}, -New York: Carl Fischer, Inc. +title = {The Notation of Medieval Music}, +address={New York}, +publisher={Carl Fischer, Inc.}, } -@Book{ +@Book {277, author = {Patch, Harry}, year = {1949}, -title = { Genesis of a Music}, -Madison: University of Wisconsin Press. +title = {Genesis of a Music}, +address={Madison}, +publisher={University of Wisconsin Press}, } -@Book{ -Cage, John. 1969. title = {Notations}, -New York: Something Else Press. -subject = { Music, Manuscripts, Facsimiles}, +@Book {285, +author={Cage, John}, +year={ 1969}, + title = {Notations}, +address={New York}, +publisher={Something Else Press}, +note = {Music, Manuscripts, Facsimiles. -(Facsimiles of holographs from the Foundation for Contemporary Performance Arts, with text by 269 composers, but rearranged using title = {chance operations.}, -) -} +Facsimiles of holographs from the Foundation for Contemporary +Performance Arts, with text by 269 composers, but rearranged using +chance operations.,V)} }, -@Book{ +@Book {295, author = {Gaburo, Virginia}, year = {1977}, title = {Notation}, -publisher= {Lingua Press: La Jolla, California}. -subject = { A Lecture about notation, new ideas about}, - - +address={publisher= {Lingua Press}, +publisher={La Jolla, California}}, +note = {A Lecture about notation, new ideas about}, } -@Book{ +@Book {306, author = {Risatti, Howard}, year = {1975}, title = {New Music Vocabulary}, -Urbana, Illinois: University of Illinois Press. -subject = { A Guide to Notational Signs for Contemporary Music}, +address={Urbana, Illinois}, +publisher={University of Illinois Press}, +note = {A Guide to Notational Signs for Contemporary Music}, } -@Book{ +@Book {317, author = {Boehm, Laszlo}, year = {1961}, -Modern Music Notation. New York: G. Schirmer, Inc. +title={Modern Music Notation}, +address={New York}, +publisher={G. Schirmer, Inc.}, } -@Book{ +@Book {325, author = {Cowell, Henry}, year = {1930}, title = {New Musical Resources}, -New York: Alfred A. Knopf, Inc. +address={New York}, +publisher={Alfred A. Knopf, Inc.}, +} +@Article {333, author = {Cowell, Henry}, year = {1927}, title = {Our Inadequate Notation}, -,title = {Modern Music}, -, Vol. 4, No. 3. +journal = {Modern Music}, +volume={4}, +number={3}, } -@Book{ +@Book {342, 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. +volume={73}, +number={3}, +month={August}, +pages={347(52)}, +note={Some reflection upon notation and proportion in Monteverdi's mass and vespers}, } -@Book{ +@Book {353, 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{ - +number={50}, +month={July-Dec}, +pages={21(26)}, +note={Proportional notation in the music of Schutz and his contemporaries in the 17th Century}, +} +@Book {362, author = {Monelle, Raymond}, year = {1989}, title = {Comparative Literature}, -v41, n3, Summer, p252(18) +volume={41}, number={3}, +month={Summer}, +pages={252(18)}, -Music notation and the poetic foot. +note={Music notation and the poetic foot}, } -@Book{ +@Book {373, author = {Pinegar, Sandra}, year = {1993}, title = {Current Musicology}, -n53, July, p99(10) -The seeds of notation and music paleography. +number={53}, +month={July}, +pages={99(10)}, +note={The seeds of notation and music paleography.}, +} +@Book {382, author = {Smith, Norman E}, year = {1990}, title = {Current Musicology}, -n45-47, Jan-Dec, p283(22) - -The notation of fractio modi. +number={45-47}, +month={Jan-Dec}, +pages={283(22)}, +note={The notation of fractio modi.}, } -@Book{ +@Book {392, author = {Treitler, Leo}, year = {1992}, title = {The Journal of Musicology}, -v10, n2, Spring, p131(61) +volume={10}, +number={2}, +month={Spring}, +pages={131(61)}, -The title = {unwritten}, -and title = {written transmission}, -of medieval chant and the start-up of musical notation. +note={ The unwritten and 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... +Notational practice developed in medieval music to address the written tradition for chant which interacted with the unwritten vocal tradition.}, } -@Book{ +@Book {407, 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... +volume={75}, +number={2}, +month={May}, +pages={161(19)}, +note={The Babylonian musical notation and the Hurrian melodic texts. +A new way of deciphering the ancient Babylonian musical notation. +} } -@Book{ +@Book {418, author = {Brown, Earle}, year = {1986}, title = {Musical Quarterly}, -v72, Spr, p180(22) - -The notation and performance of new music. +volume={72}, +month={Spring}, +pages={180(22)}, +note={The notation and performance of new music.}, } -@Book{ +@Book {426, 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}, +volume={51}, +number={2}, +month={Dec}, +pages={657(7)}, +journal={New periodicals}, +note={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 Music Notation News}, } -@Book{ +@Book {441, author = {Fuller, David}, year = {1989}, title = {The Journal of Musicology}, -v7, n1, Wntr, p21(8) - +volume={7}, +number={1}, +month={Winter}, +pages={21(8)}, +note={ Notes and inegales unjoined: defending a definition. (written-out inequalities in music notation). -} +}}, -@Book{ +@Book {454, author = {Jones, David Evan}, year = {1990}, title = {Perspectives of New Music}, - - +note={ Speech extrapolated. (includes notation) - +} } -@Book{ +@Book {464, author = {Lependorf, Jeffrey}, year = {1989}, -I>Perspectives of New Music v27, n2, Summer, p232(20) - -Contemporary notation for the shakuhachi: a primer for composers. (Tradition and Renewal in the Music of Japan) +journal={Perspectives of New Music}, +volume={27}, + number={2}, +month={Summer}, +pages={232(20)}, +note={ +Contemporary notation for the shakuhachi: a primer for composers. (Tradition and Renewal in the Music of Japan) }, } -@Book{ +@Book {478, 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). -} +volume={74}, number={4}, +month={November}, +pages={639(2)}, -@Book{ -
      -Francois, Jean-Charles.title = {Perspectives of New Music}, -v30, n1, Wntr, p6(15) +note={Equal Temperament Music Notation: The Ailler-Brennink +Chromatic Notation. Results and Conclusions of the Music Notation +Refor by the Chroma Foundation (book reviews). }, +} -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 {491, +author={Francois, Jean-Charles}, +title = {Perspectives of New Music}, +volume={30}, number={1}, month={Winter}, pages={6(15)}, +year={1992}, } +%title={Writing without representation, and unreadable notation.}, +%author={Jean-Charles Francois.} +%note={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{ +@Book {501, 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) +volume={27}, number={1}, month={Winter}, pages={70(14)}, +note={A design for music editing and printing software based on notational syntax. (computer music) }, +} diff --git a/Documentation/tex/engraving.bib b/Documentation/tex/engraving.bib index 1da420396f..be4c54c42e 100644 --- a/Documentation/tex/engraving.bib +++ b/Documentation/tex/engraving.bib @@ -9,18 +9,10 @@ ALTeditor = {}, title = {The Notation of Western Music: an Introduction}, - publisher = {J. M. Dent \6& Sons London}, + publisher = {J. M. Dent \& Sons London}, year = {1983}, - 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 = {}, + note = {Interesting account of the evolution and origin of common notation starting from neumes, and ending with modern innovations HWN}, + } @Book{ross, @@ -35,7 +27,7 @@ address = {}, edition = {}, month = {}, - comment = {This is about engraving, i.e. professional typesetting. It contains + note = {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}, @@ -48,20 +40,17 @@ 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}, + note = {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}, + note = {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}, @@ -73,26 +62,8 @@ -@Book{, - ALTauthor = {}, - ALTeditor = {}, - title = {}, - publisher = {}, - year = {}, - key = {}, - volume = {}, - number = {}, - series = {}, - address = {}, - edition = {}, - month = {}, - note = {}, - annote = {}, -} - - -@Book {, +@Book {weaner93, year = {1993}, title = {Standard Music Notation Practice}, author = {Maxwell Weaner and Walter Boelke}, @@ -103,8 +74,8 @@ -@Book {, - comment = {Sound (boring) review of the various hairy rhythmic notations used by avant-garde composers HWN}, +@Book {read78, + note = {Sound (boring) review of the various hairy rhythmic notations used by avant-garde composers HWN}, year = {1978}, title = {Modern Rhythmic Notation}, author = {Gardner Read}, @@ -112,42 +83,23 @@ } -@Book {, - comment = {This is as close to the ``standard'' reference work for music notation issues as one is likely to get. MB}, +@Book {read-notation, + note = {(Out of print) 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 = {}, - OPTseries = {}, - OPTaddress = {}, - OPTedition = {}, - OPTmonth = {}, - OPTnote = {}, - OPTannote = {} -} - -@Book {, +@Book {hader48, 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 + note = {Hader was the chief-engraver of the Waldheim-Eberle music publishers. This book contains the most important rules on engraving (according to [Chlapik])}, @@ -155,26 +107,27 @@ -@Booklet {, - comment = {Pamphlet explaining some fine points in music font design HWN}, +@Booklet {mpa96, + note = {Pamphlet explaining some fine points in music font design HWN}, year = {1996}, title = {Standard music notation specifications for computer programming. }, month = {December}, + author ={mpa}, publisher = {MPA}, } -@TechReport{, - comment = {Rules on formatting music formulated for use in computers. Mainly distilled from [Ross] HWN}, - year = {1988}, - title = {Music Formatting Guidelines,}, +@TechReport{roush88, + note = {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}, + number = {OSU-CISRC-3/88-TR10}, + institution = {Department of Computer and Information Science, The Ohio State University}, } -@PhdThesis {, +@PhdThesis {byrd85, year = {1985}, title = {Music Notation by Computer}, author = {Donald Byrd}, @@ -182,7 +135,7 @@ } -@Article {, +@Article {byrd74, year = {1974}, title = {A System for Music Printing by Computer}, author = {Donald Byrd}, @@ -192,8 +145,8 @@ } -@Book {, - comment = {If I remember correctly, this was concerned more with an input language than with the typography. SP}, +@Book {smith73, + note = {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}, @@ -203,7 +156,7 @@ } -@PhdThesis {, +@PhdThesis {gomber75, year = {1975}, title = {A Computer-Oriented System for Music Printing}, author = {David A Gomberg}, @@ -211,26 +164,25 @@ } -@Book {, - comment = {Annual editions since 1985, many containing surveys of music typesetting technology. SP}, +@Book {CASR, + note = {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}, + author = {Walter B Hewlett and Eleanor Selfridge-Field}, totalentry = {Menlo Park, CA: Center for Computer Assisted Research in the Humanities}, } -@Book {, +@Book {gomberg, title = {A Computer-oriented System for Music Printing}, - author = {David A. Gomberg; }, - + 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}, +@TechReport {gourlay87-spacing, + note = {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}, @@ -239,28 +191,28 @@ } -@TechReport {, - comment = {A brief overview of MusiCopy HWN}, +@TechReport {parish87, + note = {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}, + author = {Allen Parish and Wael A. Hegazy and John S. Gourlay and 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}, +@TechReport {gourlay87-formatting, + note = {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}, + title = {Computer Formatting of Music}, + author = {John S. Gourlay and A. Parrish and D. Roush and F. Sola and 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}, +@TechReport {hegazy87, + note = {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}, @@ -269,8 +221,8 @@ } -@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}, +@TechReport {hegazy87-breaking, + note = {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}, @@ -279,8 +231,8 @@ } -@TechReport {, - comment = {User manual of MusiCopy. Includes an impressive example piece. HWN}, +@TechReport {roush87, + note = {User manual of MusiCopy. Includes an impressive example piece. HWN}, year = {1987}, title = {Using MusiCopy}, author = {Dean K. Roush}, @@ -289,8 +241,8 @@ } -@TechReport {, - comment = {Placement of balls, stems, dots which occur at the same moment ("Simultaneity") HWN}, +@TechReport {parrish87, + note = {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}, @@ -300,8 +252,8 @@ } -@TechReport {, - comment = {Overview of a procedure for generating slurs HWN}, +@TechReport {sola87, + note = {Overview of a procedure for generating slurs HWN}, year = {1987}, title = {Computer Design of Musical Slurs, Ties and Phrase Marks,}, author = {F. Sola}, @@ -310,9 +262,9 @@ } -@TechReport {, +@TechReport {sola87-beams, institution={ Department of Computer and Information Science, The Ohio State University}, - comment = {Calculating beam slopes HWN}, + note = {Calculating beam slopes HWN}, year = {1987}, title = {Design of Musical Beams,}, author = {F. Sola and D. Roush}, @@ -320,8 +272,8 @@ } -@Article {, - comment = {This paper describes the MusiCopy musicsetting system and an input language to go with it. HWN}, +@Article {gourlay86, + note = {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}, @@ -334,40 +286,43 @@ -@Article {, - comment = {A description of Lime internals (which resemble older (before 0.0.68pre) LilyPond data structures somewhat) HWN}, +@Article {haken93, + note = {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}, + 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}, +@InProceedings{haken95, 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}, + booktitle = { International Computer Music Conference}, + address={Banff}, + month={Sept}, pages = {118-119}, + note = {This describes an algorithm which uses springs between adjacent columns. This algorithm is a "subclass" of the LilyPond algorithm. HWN}, } -@Article {, - comment = {This paper provides a shallow overview of the algorithm used in LIME for spacing individual lines. HWN}, +@Article {blostein91, + note = {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}, + journal = {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}, +@Article {rader96, + note = {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}, @@ -377,24 +332,26 @@ 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}, +@PhdThesis {page88, + note = {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}, +@MastersThesis{roelofs91, + note = {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.)}, + school={Erasmus Universiteit Rotterdam}, + number={45327}, + translation = {``An automated system for printing music'' Master's Thesis Managerial Computer Science.}, } -@Article {, +@Article {filgueiras93, year = {1993}, title = {Representation and manipulation of music documents in SceX}, author = {Miguel Filgueiras and Jos\'e Paulo Leal}, @@ -405,11 +362,11 @@ } -@Article {, - comment = {A paper on a TROFF preprocessor to typeset music. The output shown is not very sophisticated, and contains some typographical atrocities HWN}, +@Article {foxley87, + note = {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, }, + author = {Eric Foxley }, journal={ Software --- Practice and Experience, }, volume={ 17}, number={8}, pages = {485-502}, @@ -417,22 +374,22 @@ } -@Book {, +@Book {filgueiras96, year = {1996}, title = {Implementing a Symbolic Music Processing System}, author = {Miguel Filgueiras}, totalentry = {LIACC, Universidade do Porto, 1996; submitted}, } -@Book {, +@Book {filgueiras?, 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}, +@Book {gerou96, + note = {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}, @@ -442,8 +399,8 @@ } -@Book {, - comment = {An clearly written book for the casually interested reader. It shows some of the conventions and difficulties in printing music HWN}, +@Book {chlapik87, + note = {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}, @@ -452,17 +409,17 @@ } -@Book {, - comment = {Webpages about engraving (designed with finale users in mind) (sic) HWN}, +@Article {colorado-web, + author ={Alyssa Lamb}, + note = {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}, + HTML={http://obenamots.cc.colorado.edu/Musicpress/engraving.html}, + year={1996} } - - -@Book {, +@Book {donato63, year = {1963}, author = {Anthony Donato}, title ={ Preparing Music Manuscript}, @@ -471,7 +428,7 @@ } -@Book {, +@Book {donemes1900, year = {1900}, title = {Uitgeven van muziek}, author = {Donemus}, @@ -479,7 +436,7 @@ } -@Book {, +@Book {Heussenstamm87, year = {1987}, title = {The Norton Manual of Music Notation}, author = {George Heussenstamm}, @@ -488,7 +445,7 @@ } -@Book {, +@Book {Karkoshka72, year = {1972}, title = {Notation in New Music; a critical guide to interpretation and realisation}, author = {Erdhard Karkoshka}, @@ -499,7 +456,7 @@ } -@Book {, +@Book {Roemer73, year = {1973}, title = {The Art of Music Copying}, author = {Clinton Roemer}, @@ -508,7 +465,7 @@ } -@Book {, +@Book {Rosecrans79, year = {1979}, title = {Music Notation Primer}, author = {Glen Rosecrans}, @@ -517,7 +474,7 @@ } -@Book {, +@Book {Stone80, year = {1980}, title = {Music Notation in the Twentieth Century}, author = {Kurt Stone}, @@ -528,8 +485,8 @@ } -@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}, +@Book {Langston90, + note = {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}, @@ -541,27 +498,28 @@ -@URL {, - comment = {FAQ (with answers) about TAB, the ASCII variant of Tablature. HWN}, +@Article {tablature-web, + note = {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}, + HTML={ http://wabakimi.carleton.ca/~phacket2/guitar/tabfaq.html}, } -@URL {, - comment = {Specs for NIFF, a comprehensive but binary (yuk) format for notation HWN}, +@Article {niff-web, + note = {Specs for NIFF, a comprehensive but binary (yuk) format for notation HWN}, year = {1995}, title = {NIFF6a Notation Interchange File Format}, - author = {Cindy Grande, }, + author = {Cindy Grande}, publisher={Grande Software Inc.}, - url={http://www.jtauber.com/music/encoding/niff/}, + HTML={http://www.jtauber.com/music/encoding/niff/}, } -@URL {, +@Article {smdl-web, + author={unknown}, title = {SMDL, Standard Musical Description Language}, - url={ftp://ftp.ornl.gov/pub/sgml/wg8/smdl/10743.pdf}, + HTML={ftp://ftp.ornl.gov/pub/sgml/wg8/smdl/10743.pdf}, note={ISO/IEC DIS 10743}, } diff --git a/Documentation/tex/fonts.doc b/Documentation/tex/fonts.doc index 200e4bcdd6..c66fa3bfbd 100644 --- a/Documentation/tex/fonts.doc +++ b/Documentation/tex/fonts.doc @@ -236,8 +236,8 @@ outcome of the applied recipy. If, in a complicated case, the result "doesn't look good", they will ignore the rules and draw their own beams, based on experience. -\item The exact rules probably even don't "really exsist" but in the -minds of good engravers, in the form of experience +\item The exact rules probably don't "really exist" but in the minds + of good engravers, in the form of experience \end{itemize} We'll propose to do a least-squares solve. This seems to be the best @@ -245,8 +245,8 @@ way to calculate the slope for a computerised engraver such as Lily. It would be nice to have some rules to catch and handle "ugly" cases, though. In general, the slope of the beam should mirror the pitches -of the notes. If this "can't be done" because there simply is no -uniform "trend", it would probably be best to set the slope to zero. +of the notes. If this can't be done because there simply is no +uniform trend, it would probably be best to set the slope to zero. \subsection{Quantising} diff --git a/Documentation/tex/mudela.doc b/Documentation/tex/mudela.doc index 9ffc13a0ba..0690a64818 100644 --- a/Documentation/tex/mudela.doc +++ b/Documentation/tex/mudela.doc @@ -4,12 +4,12 @@ % has been installed. The rules have been precooked into the % Documentation/Rules.make file; do % -% make out/introduction.dvi +% make out/mudela.dvi % % or % -% mudela-book --outdir=out/ --outname=introduction.mudtex introduction.doc -% latex '\nonstopmode \input out/introduction.mudtex' +% mudela-book --outdir=out/ --outname=mudela.mudtex mudela.doc +% latex '\nonstopmode \input out/mudela.mudtex' % Hoi Tim, hier staan wat 'enge' commando's (die dingen met een '\' % zoals \documentclass en \def\mudela...). @@ -180,6 +180,8 @@ What is in your window should look like this: \end{mudela} \end{enumerate} +[talk about ly2dvi] + The remainder of this document is not about \TeX, and mostly not even 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, @@ -261,8 +263,16 @@ c'4 \end{mudela} The pitch \verb+c'+ actually consists of two parts: one for the note 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+. +specifies the octave to use if you are above central c. If you want +the octaves below central c, use the comma, eg, \verb+c,,+ (The comma +is meant to represent a ``sunken'' apostrophe). The letter specifies +which note name to use. The note names simply are the letters +\verb+a+ to \verb+g+. + +By convention, the \verb+a'+ concert pitch is the tone that is used to +tune instruments. The exact frequency of this tone has wandered: in +Baroque time it was 335 Hz, most textbooks will tell you it is 440 Hz, +and a lot of orchestras nowadays tune at 441.5 Hz. For example, \begin{mudela}[fragment,verbatim] @@ -273,7 +283,7 @@ 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{mudela}[fragment,verbatim] -'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 +c,8 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: @@ -300,7 +310,8 @@ flats ditto. \begin{table}[h] \begin{center} - \caption{Defaults note names}\label{notename-tab} + \caption{Default note names}\label{notename-tab} + \begin{tabular}{ll} english &LilyPond\\ \hline\\ @@ -324,9 +335,76 @@ 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} +\section{[chords]} + +Up till so far we have only considered music that was rather simple. +All the music had notes going in one direction, from left to right, +the one following the other. You might be wondering if this is all +Lily could do, or whether is possible to stack notes as well (creating +\emph{chords}). Rest assured: we designed LilyPond with the goal mind +that she must handle any notation construct that can be expressed +conveniently. Of course, we did not leave out chords. + +In mudela you can form a chord of several notes, by enclosing them in +pointed parentheses, ie, $\langle$ and $\rangle$, for example a +D-major chord can be described by +\begin{mudela}[fragment,verbatim] + +\end{mudela} +Recall what was said in the previous section about flats and sharps: +the \texttt{fis} is an f sharp. Chords can be entered in the music in +same places that notes can. As an example we give a snippet of +``twinkle twinkle little star'' in chords. The chords may seem, well, +unconventional, but they mostly serve to show how chords work +\begin{mudela}[verbatim, fragment] + c''4 c''4 + + + +\end{mudela} + +\section{Shortcuts} + +If you have typed the last example in to a mudela file, you will have +noticed that the input has lots of repetitions. You probably made +some little errors with the right amount of \texttt{'}'s as well. For +these reasons, saving keystrokes and preventing errors, mudela has +some handy shortcuts. You don't have to type the duration, if it the +same as the last duration entered. This saves a considerable number +of keystrokes, and thus it reduces the potential for errors. The +previous example can be reduced to +\begin{verbatim} + c''4 c'' + + + +\end{verbatim} + +[WARNING: relative octaves are still experimental!] + +The need for quotes can also be reduced: most of the pitch intervals +in traditional music are small. Therefore, it makes sense to leave +out the quotes when the interval is small. This is called the +relative mode for octaves. You can switch it on by entering +\verb+\octave relative+. From then on, the pitch of a note will be +the closest to the last one, Thus, you can enter a scale without using +octavation quotes: +\begin{mudela}[fragment,verbatim] + \octave relative; + c d e f g a b c +\end{mudela} + +The twinkle twinkle example reduces to the following input. +\begin{verbatim} + \octave relative; + c'4 c + + + +\end{verbatim} + +\section{Finishing touch} -\section{Handy input} \chapter{Features} @@ -359,7 +437,7 @@ c c' c'' Prefixing the pitch with a quote \verb+'+ produces a note by one octave lower \begin{mudela}[fragment,verbatim,center] -a 'a ''a +a a, a,, \end{mudela} \section{Slurs and Ties} @@ -458,7 +536,7 @@ a2 s-"diminuendo" | a \section{Commands} \begin{mudela}[fragment,verbatim,center] -\clef "bass"; 'c +\clef "bass"; c, \end{mudela} and a clef-change @@ -472,7 +550,7 @@ and a clef-change \begin{mudela}[fragment,verbatim,center] \key fis cis; -'g 'a 'b cis d e fis g' +g, a, b, cis d e fis g' \end{mudela} Note how Mudela allows you to convey a musical message @@ -513,7 +591,7 @@ and similarly voices \begin{mudela}[fragment,verbatim,center] < { \voiceone c g c g } - { \voicetwo 'c2 'g2 } + { \voicetwo c,2 g,2 } > \end{mudela} @@ -803,7 +881,7 @@ is a A-1 pitched crotchet. The ' signifies an octave change. A-1 is 440 Hz concert-pitch. \verb+c'+ is also known as the central c. More examples: \begin{mudela}[fragment,verbatim] - 'a % 110 + a, % 110 a % 220 A % 110, uppercase octavates down a' % 440 diff --git a/Documentation/topweb.pod b/Documentation/topweb.pod index e917dc6780..3c1b47a61c 100644 --- a/Documentation/topweb.pod +++ b/Documentation/topweb.pod @@ -34,14 +34,14 @@ and the ftp site. =over 4 =item * - short examples of what LilyPond can do: MIDI, PS, .gif and input. =item * - examples of what LilyPond can do with real music: MIDI, PS, .gif and input @@ -61,7 +61,7 @@ top_of_NEWS =over 4 =item * - All of the LilyPond documentation. a, + - class Scope + - .bib updates + - key robustifiction for extreme octaves + - ly2dvi 0.11 + - energy "normalisation" removed. + +pl 62.jcn8 + - beam: knee input/test/knee.ly + - vimrc init for lily + - errors display column number too + - scsii: bf's, new: allemande, courante + - looked at lyric lengthen "mir________." (eerste weigering) + - beam: knee [c \stemdown c' \stemup 'c] + - expressions parsed at identifier_init + - bf: slur/stem/whole x-adjust: + * use note-col width iso mean note-witdth + * note-column:width () + - now string variables in paper too -> mudelapapersize + - paper_def: real dict -> identifier dict + - My_lily_lexer: identifier dict stack + - init paper and a4 stuff + - \include \string + - all rvalues from parser var pool -> access rvalue as \rvalue + - string variables + - ly2dvi 0.10.jcn1 + * mudelapiece, mudelaopus (ugh, fix) + * textheight + - more titledefs + - bf: table 20 typeface widths + - bf: toplevel/*.txt + - bf: ugly Documentation/mutopia fix (should rename dir to Mutopia/ ?) + - bf: make examples + - www.digicash.com/~jan/lilypond + - make website fixes + - ambiguity fixes in .ly's + - bf: relative-octave warning + - relative-octave: guess if ambiguous + - ambiguity warning for relative mode + - scsii: prelude + - bf: slur gap + - bf's: scsii: menuetto + - .txt -> $(DOTTEXT) + - make website fixes + - .txt fixes + - bf: typo make-patch + - bf: *dist.sh cleanup + - bf: release.py + - bf: make/Targets doc (removed .txt extension) + - rpm-dist.sh + - make doos dist fixes + - doos-dist.sh windoze dist script + -- removed useless spacing hack at spring-spacer.cc:692 + - bf: los-toros: do multi-bar rests (setting SkipBars = 1) + - scsii-menuetto.ly -> menuetto-urtext.ly, -cello.ly and -alto.ly + - bf: \octave c'; for relative-octaves + - bf: Documentation make + +********* pl 62 - no-touch hak. - bfs: multi measure rests diff --git a/PATCHES.txt b/PATCHES.txt index 47ec147291..424a9b2332 100644 --- a/PATCHES.txt +++ b/PATCHES.txt @@ -16,11 +16,13 @@ ABSTRACT o make your fix/add your code + o Add changes to NEWS, and add yourself to + Documentation/AUTHORS.pod + o generate a patch, o e-mail your patch to one of the mailing lists gnu- - music-discuss@gnu.org or bug-gnu-music@gnu.org (or if - you're a bit shy, to the maintainer). + music-discuss@gnu.org or bug-gnu-music@gnu.org GENERATING A PATCH In VERSION, set TOPLEVEL_MY_PATCH_LEVEL: @@ -56,12 +58,10 @@ PREREQUISITES o All items mentioned in INSTALL. You're not going to send a patch that you haven't even built, right? - o GNU Diff - -28/Apr/98 LilyPond 0.1.62 1 +12/May/98 LilyPond 0.1.63 1 @@ -70,6 +70,8 @@ PREREQUISITES PATCHES(1) LilyPond documentation PATCHES(1) + o GNU Diff + o Python (version 1.4 or newer). You can of course make a patch by hand, which would go something like: @@ -122,12 +124,10 @@ SYNCHRONISE i.e. configure and files generated by configure. -MAINTAINER - Han-Wen Nienhuys -28/Apr/98 LilyPond 0.1.62 2 +12/May/98 LilyPond 0.1.63 2 @@ -136,10 +136,10 @@ MAINTAINER PATCHES(1) LilyPond documentation PATCHES(1) - Just keep on sending those patches! - - +MAINTAINER + Han-Wen Nienhuys + Just keep on sending those patches! @@ -193,6 +193,6 @@ PATCHES(1) LilyPond documentation PATCHES(1) -28/Apr/98 LilyPond 0.1.62 3 +12/May/98 LilyPond 0.1.63 3 diff --git a/TODO b/TODO index 076258f3c5..51b540901c 100644 --- a/TODO +++ b/TODO @@ -7,6 +7,14 @@ Most of the items are marked in the code as well, with full explanation. grep for TODO and ugh/ugr/urg 0.2: + * w32 blurb + + * make sure all ex's have a mudela-version + + * notes almost touch barline: whitespace at the begin of the bar + should be at fixed at at least (about) one interline. + hack at spring-spacer.cc:662 doen't work anymore + * do rest-collisions for Multi_measure_rests as well. * split error/warning in error/warning/non_fatal_error @@ -16,7 +24,9 @@ grep for TODO and ugh/ugr/urg * deps for ly2dvi - * depracate \duration + * document use of ly2dvi more prominently + + * deprecate \duration * clean up abbrev/plet/beam/abbrevbeam/duration mess in parser. @@ -34,16 +44,24 @@ grep for TODO and ugh/ugr/urg * move all hard-coded constants and staffheight dependent to runtime, i.e. init/params.ly. e.g.: stem length params, beam positions + * fix variable define/lookup parser global<->paper + * fix position of bar number * fix position of brace in conjunction with bracket + * fix title/instrument placements; see input/test/title.ly + + * rename + - plet -> tuplet + - grav -> engraver + - measure -> bar + - abbreviation-beam -> (measured/unmeasured) tremolo + * libtoolize flowerlib * shared lib - * bf: abbrevbeam? - * robustify Beam (in case of no stems, 32nd notes) * check for groff / troff/ nroff et @@ -52,7 +70,6 @@ grep for TODO and ugh/ugr/urg - configure.in - clean-fonts.sh - * nicen examples: - remove all \multi - break-up heavily-nested score blocks @@ -84,13 +101,13 @@ grep for TODO and ugh/ugr/urg * the tenuto script is too long and too thin * the bracket is ugly (wings are too parabolic, should be more circular) - * better hshift (dots, distance, head dependent) * stem len adjustable STUFF * convert-mudela: + - automatically add a \version if not present. - better parsing - make smarter - fix convert-mudela -e *.ly ; @@ -103,6 +120,10 @@ STUFF * give Items/Spanners access to unbroken originals + * generalised scopes for Parser/identifiers. + + * speed up PS code. + * scoping for properties { c4 @@ -152,8 +173,6 @@ STUFF * xdvi: PS in magnifying glass. - * Fix profiling. gprof bugreport? - * GNU patch 2.1: hardcoded limit of 1024 to the linelength * GNU diff 2.7: diff -rN does not see a new directory with empty file @@ -256,7 +275,6 @@ languages: - Move all Score_elems, into libmutype.a * Documentation - - Doc Mutopia (Music To The People) - Doc (C) stuff of sheet music - a better format? SGML? TeX? Info? - a tutorial @@ -310,7 +328,6 @@ languages: * markers - INPUTLANGUAGE * c4 4 4 4 for c4 c4 c4 c4? diff --git a/VERSION b/VERSION index 71356ecbb7..c63ff42d3c 100644 --- a/VERSION +++ b/VERSION @@ -1,6 +1,6 @@ MAJOR_VERSION=0 MINOR_VERSION=1 -PATCH_LEVEL=62 +PATCH_LEVEL=63 MY_PATCH_LEVEL= # use the above to send patches, always empty for released version: diff --git a/bin/conflily.sh b/bin/conflily.sh index 0ca024ad8f..0f4fda05d8 100755 --- a/bin/conflily.sh +++ b/bin/conflily.sh @@ -14,6 +14,7 @@ fi # # current=`basename \`pwd\`` +# (cd ..; rm -f current) (cd ..; rm -f current 2>&1 > /dev/null) (cd ..; ln -s $current current) # diff --git a/bin/convert-mudela.pl b/bin/convert-mudela.pl index e4979d35d6..f4bc9a53b5 100755 --- a/bin/convert-mudela.pl +++ b/bin/convert-mudela.pl @@ -170,6 +170,14 @@ sub convert_0_1_9_to_0_1_10 s/Grandstaff/Grand_staff/; } +sub convert_0_1_10_to_0_1_14 +{ + while ( /([ \n\t\]\[<>()])\'+[a-zA-Z]/ ) + { + s/([ \n\t\[<>()\]])\'(\'*[a-zA-Z]+)/$1$2,/g; + } + +} ############################################################### sub last_conversion @@ -220,6 +228,7 @@ my %minor_conversions = ("0.0.50" => \&no_conv, ,"0.1.8" => \&convert_0_1_7_to_0_1_8 ,"0.1.9" => \&convert_0_1_8_to_0_1_9 ,"0.1.10" => \&convert_0_1_9_to_0_1_10 + , "0.1.14" => \&convert_0_1_10_to_0_1_14 ); diff --git a/bin/doos-dist.sh b/bin/doos-dist.sh new file mode 100644 index 0000000000..baef3fc923 --- /dev/null +++ b/bin/doos-dist.sh @@ -0,0 +1,28 @@ +#!/bin/sh +# doos-dist.sh --- make a windoze distribution + +latest=lilypond-`show-latest -p` +{ cd $LILYPOND_SOURCEDIR; cd ..; +export LILYPOND_ROOTDIR=`pwd` } + +if [ ! -e $LILYPOND_ROOTDIR/doos/zip ]; then + doo mkdir -p $LILYPOND_ROOTDIR/doos/zip +fi + +set -x + +cd $LILYPOND_ROOTDIR/doos || exit 1 + +rm -rf lilypond-* + +tar xzf $LILYPOND_ROOTDIR/releases/$latest.tar.gz || exit 1 +cd $latest + +export PATH=/usr/doos/bin:$PATH +configure --host=i386-pc-linux --target=i386-pc-cygwin32 --prefix=/usr --enable-debugging --enable-printing --enable-checking + +make +make doosdist + +ln out/$latest.exe.zip $LILYPOND_ROOTDIR/doos/zip + diff --git a/bin/ls-latex.py b/bin/ls-latex.py index 13b413fc7b..ef9977a207 100644 --- a/bin/ls-latex.py +++ b/bin/ls-latex.py @@ -65,7 +65,7 @@ def bib_header (fn): if bib_title_re.search (s) == -1: raise 'huh?' header.title = bib_title_re.group (1) - header.outfile = fn + header.outfile = regsub.gsub ( '\.bib$', '.html' , fn) return header @@ -97,7 +97,7 @@ def print_html_head (l,o,h): import getopt (cl_options, files) = getopt.getopt(sys.argv[1:], - 'e:h', ['help', 'prefix=' ,'extension=' + 'e:h', ['help', 'prefix=' , 'title=']) tex = '' @@ -107,8 +107,6 @@ title = '' for opt in cl_options: o = opt[0] a = opt[1] - if o == '--extension' or o == '-e': - ext = a if o == '--prefix' or o == '-p': pre = a if o == '--title' or o == '-t': diff --git a/bin/ly2dvi.sh b/bin/ly2dvi.sh index 2f048fb4da..3b502f2922 100755 --- a/bin/ly2dvi.sh +++ b/bin/ly2dvi.sh @@ -5,17 +5,45 @@ # Written by Jan Arne Fagertun # Sat Nov 22 22:26:43 CET 1997 # +# $Id: ly2dvi.sh,v 1.16 1998/05/08 21:18:34 janaf Exp $ +# # Original LaTeX file made by Mats Bengtsson, 17/8 1997 # -VERSION="0.10" +VERSION="0.11.hwn1" NAME=ly2dvi.sh IDENTIFICATION="$NAME $VERSION" NOW=`date` echo "$IDENTIFICATION" 1>&2 +# TODO: +# prevent orphaned "Lily is here" strings + # NEWS +#0.11.hwn1 +# - height vs heigth +# - robustification: give \nonstopmode as LaTeX arg; no hanging if no TeX file. +# - robustification: notice failed cp. + +#0.11 +# - more papersizes (thanks Han-Wen) - don't expect LaTeX to accept all... +# - -W,--Width= : set paper width (points) +# - -H,--Height= : set paper height (points) +# - -H and -W is used only when an unknown papersize is to be specified, +# and has to be combined with a papersize option known to LaTeX +#NB! - -F,--headers= : name of additional LaTeX headers input file. +#NB! Changed from -H to -F +# - -d,--dependencies : passed to lilypond + + +#0.10.jcn1 +# - HEIGHT -> HEIGHT +# - vertical margins (for a4), same on both sides +# - textheight from lilypond output file (mudelapapertextheight) +# - piece titling +# - mudelapiece, mudelaopus +# #0.10 # - -K,--keeplilypond : Keep lilypond output files (default delete) # - -k,--keeply2dvi : Keep ly2dvi output files (default delete) @@ -24,10 +52,10 @@ echo "$IDENTIFICATION" 1>&2 # - Could not reinsert "\usepackage[T1]{fontenc}" because # "los-toros" won't work with it # - Ekstra LaTeX headers from input file - #0.9.hwn1 # - option to remove output of lily -# 0.9 - Trap Lilypond abort +# 0.9 +# - Trap Lilypond abort # - Replaced "\usepackage[T1]{fontenc}" with # \usepackage[latin1]{inputenc} (takk, Mats) # - Removed "()" around "\LilyIdString" (Janne didn't want it) @@ -40,7 +68,7 @@ echo "$IDENTIFICATION" 1>&2 # - Improved Lilypond error checking # - Output orientation (landscape...). Overrides mudela file # variable orientation="landscape"; -# - Paper width and heigth put into variables (only A4!) +# - Paper width and height put into variables (only A4!) # - Adjusted top margin to default..... # #TODO @@ -170,16 +198,19 @@ Usage: $0 [options] file[s] Options: -D,--debug set debug mode - -H,--headers= name of additional LaTeX headers file + -F,--headers= name of additional LaTeX headers file + -H,--Height= set paper height (points) (see manual page) -K,--keeplilypond keep lilypond output files -L,--landscape set landscape orientation -N,--nonumber switch off page numbering - -O,--orientation= set orientation (landscape or portrait (default)) - -o,--output= set output directory + -O,--orientation= set orientation (obsolete - use -L instead) + -W,--Width= set paper width (points) (see manual page) + -d,--dependencies tell lilypond make a dependencies file -h,--help this help text -k,--keeply2dvi keep ly2dvi output files -l,--language= give LaTeX language (babel) - -p,--papersize= give LaTeX papersize (eg. a4paper) + -o,--output= set output directory + -p,--papersize= give LaTeX papersize (eg. a4) -s,--separate run all files separately through LaTeX files may be (a mix of) input to or output from lilypond(1) @@ -198,10 +229,151 @@ then $debug_echo $IDENTIFICATION": temporary directory "$TMP" not found, set to /tmp" TMP=/tmp fi -LOGFILE=$TMP/lilylog.$$ # Logfile for lilypond -PWIDTH=600; # Width of A4 paper! -PHEIGTH=845; # Heigth of A4 paper! +LOGFILE=$TMP/lilylog.$$ # Logfile for lilypond +PAPERSIZE=a4 # Default papersize name +PWIDTH=597 # Default paperwidth +PHEIGHT=845 # Default paperheight PNUM="%" # Page numbering on +LILYOPTS="" # Options to lilypond +# +setPaperZize() { +case "$PAPERSIZE" in + a0*) + PWIDTH=2389 + PHEIGHT=3381 + PAPERSIZE=a0paper + ;; + a1|a1p*) + PWIDTH=1690 + PHEIGHT=2389 + PAPERSIZE=a1paper + ;; + a2*) + PWIDTH=1194 + PHEIGHT=1690 + PAPERSIZE=a2paper + ;; + a3*) + PWIDTH=845 + PHEIGHT=1194 + PAPERSIZE=a3paper + ;; + a4*) + PWIDTH=597 + PHEIGHT=845 + PAPERSIZE=a4paper + ;; + a5*) + PWIDTH=423 + PHEIGHT=597 + PAPERSIZE=a5paper + ;; + a6*) + PWIDTH=298 + PHEIGHT=423 + PAPERSIZE=a6paper + ;; + a7*) + PWIDTH=211 + PHEIGHT=298 + PAPERSIZE=a7paper + ;; + a8*) + PWIDTH=305 + PHEIGHT=211 + PAPERSIZE=a8paper + ;; + a9*) + PWIDTH=105 + PHEIGHT=305 + PAPERSIZE=a9paper + ;; + a10*) + PWIDTH=74 + PHEIGHT=105 + PAPERSIZE=a10paper + ;; + b0*) + PWIDTH=2847 + PHEIGHT=4023 + PAPERSIZE=b0paper + ;; + b1*) + PWIDTH=2012 + PHEIGHT=2847 + PAPERSIZE=b1paper + ;; + b2*) + PWIDTH=1423 + PHEIGHT=2012 + PAPERSIZE=b2paper + ;; + b3*) + PWIDTH=1006 + PHEIGHT=1423 + PAPERSIZE=b3paper + ;; + b4*) + PWIDTH=712 + PHEIGHT=1006 + PAPERSIZE=b4paper + ;; + b5*) + PWIDTH=503 + PHEIGHT=712 + PAPERSIZE=b5paper + ;; + archA) + PWIDTH=650 + PHEIGHT=867 + ;; + archB) + PWIDTH=867 + PHEIGHT=1301 + ;; + archC) + PWIDTH=1301 + PHEIGHT=1734 + ;; + archD) + PWIDTH=1734 + PHEIGHT=2602 + ;; + archE) + PWIDTH=2602 + PHEIGHT=3469 + ;; + flsa|flse) + PWIDTH=614 + PHEIGHT=940 + ;; + halfletter) + PWIDTH=397 + PHEIGHT=614 + ;; + ledger) + PWIDTH=1229 + PHEIGHT=795 + ;; + legal) + PWIDTH=614 + PHEIGHT=1012 + ;; + letter) + PWIDTH=614 + PHEIGHT=795 + ;; + note) + PWIDTH=542 + PHEIGHT=723 + ;; + *) + echo "" + echo $0": unknown papersize -- "$PAPERSIZE + echo "" + ;; +esac +} # # RC-files ? # @@ -233,7 +405,7 @@ fi if [ -z "$MU_DEF" ] then MU_DEF="mudelatitle mudelasubtitle mudelacomposer \ - mudelaarranger mudelainstrument" + mudelaopus mudelaarranger mudelapiece mudelainstrument" fi # @@ -249,7 +421,7 @@ SEPFILE=N # # "x:" x takes argument # -switches="DH:KLNO:hkl:o:p:s\?" +switches="DF:H:KLNO:W:dhkl:o:p:s\?" options="" # # ugh, "\-" is a hack to support long options @@ -264,9 +436,12 @@ do [ $debug_echo = echo ] && set -x debug_echo=echo ;; - H ) + F ) LATEXHF=$OPTARG ;; + H ) + PHEIGHT=$OPTARG + ;; K ) KEEP_LILY_OUTPUT=Y ;; @@ -279,6 +454,12 @@ do N ) PNUM="\pagestyle{empty}" ;; + W ) + PWIDTH=$OPTARG + ;; + d ) + LILYOPTS=$LILYOPTS" -d" + ;; h ) help; exit 0 @@ -306,6 +487,15 @@ do -) $debug_echo "long option: \`$OPTARG'" case "$OPTARG" in + He*|-He*) + PHEIGHT=`echo $OPTARG | sed -e s/"^.*="//` + ;; + W*|-W*) + PWIDTH=`echo $OPTARG | sed -e s/"^.*="//` + ;; + dep*|-dep*) + LILYOPTS=$LILYOPTS" -d" + ;; d*|-d*) [ $debug_echo = echo ] && set -x debug_echo=echo @@ -363,6 +553,31 @@ then exit 1 fi # +# +mudelaDefs(){ +# Include \def\mudela-definitions +# +for L in $MU_DEF +do + SS=$1 + # LL=`egrep '^\\\\def.'$L'{' $OF` + LL=`egrep '^\\\\def.'$L'{' $File` + if [ "$LL" = "" ] + then + LL=`egrep '^\\\\def.'$L'{' $OF` + fi + if [ "$LL" != "" ] + then + ##{ + LLL=`echo $LL | sed -e 's/}.*$//' -e 's/.*{//'` + ##}{ + if [ "$LLL" != "" ] + then + echo "$SS\\"$L'{'$LLL'}%' >> $LatF + fi + fi +done +} startFile(){ # # LaTeX file name @@ -387,6 +602,7 @@ eval `sed -n \\ -e 's/\\\\def\\\\mudelalatexheaders{\([^}]*\).*$/fLHF=\1;/p' \\ -e 's/\\\\def\\\\mudelaorientation{\([^}]*\).*$/fORI=\1;/p' \\ -e 's/\\\\def\\\\mudelapaperlinewidth{\([^}]*\).*$/TWN=\1;/p' \\ + -e 's/\\\\def\\\\mudelapapertextheight{\([^}]*\).*$/THN=\1;/p' \\ -e 's/\\\\def\\\\mudelapapersize{\([^}]*\).*$/fPSZ=\1;/p' \\ $File` # @@ -406,6 +622,7 @@ then fi if [ -n "$PAPERSIZE" ] then + setPaperZize PAPEROPT=$PAPERSIZE fi # @@ -460,12 +677,38 @@ then fi TWp=`echo $TW | sed -e 's/\..*$//'` PWp=$PWIDTH +# +# Find textheight +# +if [ -n "$THN" ] +then + TH=$THN + case $TH in + *mm) + ;; + *cm) + ;; + *pt) + ;; + *) + TH=$TH"pt" + ;; + esac + $debug_echo "Text height = "$TH +fi +THp=`echo $TH | sed -e 's/\..*$//'` +PHp=$PHEIGHT if [ "$ORIENTATION" = "landscape" ] then - PWp=$PHEIGTH + PWp=$PHEIGHT + PHp=$PWIDTH fi -MARG=`expr $PWp - $TWp` -MARG=`expr $MARG / 2`"pt" +HMARG=`expr $PWp - $TWp` +HMARG=`expr $HMARG / 2`"pt" +$debug_echo "Text left = "$HMARG +VMARG=`expr $PHp - $THp` +VMARG=`expr $VMARG / 2`"pt" +$debug_echo "Text top = "$VMARG # # Geometry: /var/lib/texmf/latex/geometry/geometry.dvi # @@ -477,7 +720,7 @@ cat << EOF > $LatF % Automatically generated from $IF, $NOW \documentclass$PAPER{article} -\nonstopmode + $LLNG \usepackage{geometry} \usepackage[latin1]{inputenc} @@ -485,34 +728,35 @@ $LLNG $PNUM %\addtolength{\oddsidemargin}{-1cm} %\addtolength{\topmargin}{-1cm} -\setlength{\textwidth}{$TW} -%\geometry{width=$TW, left=$MARG, top=1cm} -\geometry{width=$TW, left=$MARG} +%\setlength{\textwidth}{$TW} +%\setlength{\textheight}{$TH} +%\geometry{width=$TW, left=$HMARG, top=1cm} +%\geometry{width=$TW, left=$HMARG} +%\geometry{height=$TH, top=$VMARG} +% \geometry{body={$PWp pt, $PHp pt}, width=$TW, top=$HMARG, height=$TH, top=$VMARG} +\geometry{width=$TW, top=$HMARG, height=$TH, top=$VMARG} \input lilyponddefs \input titledefs $LLHF \begin{document} EOF -# -# Include \def\mudela-definitions -# -for L in $MU_DEF -do - LL=`egrep '^\\\\def.'$L'{' $OF` - if [ "$LL" != "" ] - then - LLL=`echo $LL | sed -e 's/}.*$//' -e 's/.*{//'` - if [ "$LLL" != "" ] - then - echo "\\"$L'{'$LLL'}%' >> $LatF - fi - fi -done -# +mudelaDefs cat << EOF >> $LatF \makelilytitle EOF } +nextFile(){ +cat << EOF >> $LatF +\def\theopus{}% +\def\thepiece{}% +EOF +mudelaDefs "\\def" +cat << EOF >> $LatF +\def\theopus{\mudelaopus}% ugh +\def\thepiece{\mudelapiece}% +\makelilypiecetitle +EOF +} # # Conclusion # @@ -524,7 +768,7 @@ EOF # # Run LaTeX # -latex $LatF || exit 5 +latex '\nonstopmode \input '$LatF || exit 5 # # Rename dvi file # @@ -532,7 +776,9 @@ if [ -f $FN.dvi ] then RESULT=$BN.dvi [ -n "$OUTPUTDIR" ] && RESULT="$OUTPUTDIR/$RESULT" - cp $FN.dvi $RESULT + + cp $FN.dvi $RESULT || exit 5 + fi # # Output some info @@ -599,10 +845,12 @@ do then $debug_echo $IDENTIFICATION": Mudela file not found." TW=15.5cm + TH=25cm fi else $debug_echo $IDENTIFICATION": Mudela file name not found." TW=15.5cm + TH=25cm fi else # @@ -614,9 +862,9 @@ do # Run lilypond # Grab output file names # - $debug_echo "lilypond "$IF + $debug_echo "lilypond "$LILYOPTS $IF - lilypond $IF 2>&1 | tee $LOGFILE + lilypond $LILYOPTS $IF 2>&1 | tee $LOGFILE OF=`egrep '^TeX output to ' $LOGFILE | \\ sed -e 's/TeX output to//' -e 's/\.\.\.//'` $debug_echo "==> "$OF @@ -648,6 +896,8 @@ do then FFile=$File startFile + else + nextFile fi cat << EOF >> $LatF \input{$File} diff --git a/bin/make-examples.sh b/bin/make-examples.sh index 620a28a7dd..1da09acd95 100755 --- a/bin/make-examples.sh +++ b/bin/make-examples.sh @@ -1,7 +1,7 @@ #!/bin/sh # make-examples -examples="twinkle-pop wtk1-fugue2 standchen-16 standchen-20 wtk1-prelude1 toccata-fuga-E scsii-menuetto cadenza gallina twinkle collisions font font20 scales rhythm multi spacing beams stem" +examples="twinkle-pop wtk1-fugue2 standchen-16 standchen-20 wtk1-prelude1 toccata-fuga-E prelude-cello menuetto-cello menuetto-alto cadenza gallina twinkle collisions font font20 scales rhythm multi spacing beams sleur stem" pss=$(echo $examples | sed "s/[^ ][^ ]*/out\\/&.ps/g") # cd ~/lelie/current/Documentation/out diff --git a/bin/make-patch.py b/bin/make-patch.py index d72c672e0a..9909bf9b73 100755 --- a/bin/make-patch.py +++ b/bin/make-patch.py @@ -55,7 +55,9 @@ Patches do not contain automatically generated files, \n\ i.e. you should rerun autoconf and configure\n\n' # ugh, how to get rid of .tex files generated by lily? -pats = ['*.lsm', 'configure', '*.txt', '.dstreamrc', 'lilypond.spec'] +# pats = ['*.lsm', 'configure', '*.txt', '.dstreamrc', 'lilypond.spec'] +pats = ['*.lsm', 'configure', '*.txt', '.dstreamrc', 'lilypond.spec', + 'AUTHORS', 'INSTALL', 'PATCHES'] def remove_automatic(dirnames): files = [] diff --git a/bin/release.py b/bin/release.py index fa6a9c4035..731a2ee2ea 100755 --- a/bin/release.py +++ b/bin/release.py @@ -35,7 +35,7 @@ os.link(released_tarball(cur_ver), tarball(cur_ver)) os.system('python ' + lilydirs.topdir + '/bin/make-patch.py'); pn = 'patch-%s' % version_tuple_to_str(cur_ver) -os.system('gzip -9 ' + pn) +# os.system('gzip -9 ' + pn) pn = pn + '.gz' rel_pn = lilydirs.release_dir + '../patches/' + pn; diff --git a/bin/rpm-dist.sh b/bin/rpm-dist.sh new file mode 100644 index 0000000000..a10b49f13a --- /dev/null +++ b/bin/rpm-dist.sh @@ -0,0 +1,35 @@ +#!/bin/sh +# rpm-dist.sh --- make an rpm distribution + +latest=lilypond-`show-latest -p` +{ cd $LILYPOND_SOURCEDIR; cd ..; +export LILYPOND_ROOTDIR=`pwd` } + +icon=lelie_icon.gif +rpmrc=$LILYPOND_SOURCEDIR/make/out/rpmrc +spec=$LILYPOND_SOURCEDIR/make/out/lilypond.spec + +if [ ! -e $LILYPOND_ROOTDIR/releases/$icon ]; then + make -C $LILYPOND_ROOTDIR/current/Documentation gifs + ln $LILYPOND_ROOTDIR/current/Documentation/out/$icon $LILYPOND_ROOTDIR/releases +fi + +# urg +user=`whoami` +if [ "x$user" != "xroot" ]; then + echo only root wants to build RPMs + exit 2 +fi + +if [ ! -e $LILYPOND_ROOTDIR/redhat/BUILD ]; then + mkdir -p $LILYPOND_ROOTDIR/redhat/BUILD + mkdir -p $LILYPOND_ROOTDIR/redhat/RPMS/i386 + mkdir -p $LILYPOND_ROOTDIR/redhat/SRPMS +fi + +set -x +cd $LILYPOND_ROOTDIR/redhat || exit 1 +rm -rf lilypond-* + +rpm -ba --rcfile $rpmrc $spec + diff --git a/bin/show-latest.pl b/bin/show-latest.pl index 1c3d14dd0e..2b2c994d00 100755 --- a/bin/show-latest.pl +++ b/bin/show-latest.pl @@ -1,8 +1,10 @@ #!@PERL@ # -*-Perl-*- - -$reldir="/home/hanwen/musix/releases"; +$LILYPOND_SOURCEDIR="$ENV{LILYPOND_SOURCEDIR}"; +$LILYPOND_ROOTDIR=`cd $LILYPOND_SOURCEDIR/..; pwd`; +chop ($LILYPOND_ROOTDIR); +$reldir="$LILYPOND_ROOTDIR/releases"; use FileHandle; use Getopt::Long; @@ -35,7 +37,7 @@ my $last= (pop @versions); if ( $opt_print ) { - print $last; + print $last . "\n"; } if ( $opt_latest) { diff --git a/configure b/configure index ce55c05563..b1d2e2802b 100755 --- a/configure +++ b/configure @@ -1785,6 +1785,9 @@ if test $BISON != "error"; then fi fi +if test "$INSTALL" = "bin/install-sh"; then + export INSTALL="\$\(depth\)/bin/install-sh" +fi # ugh autoconf if $CXX --version | grep '2\.[78]' > /dev/null || @@ -1799,7 +1802,7 @@ else fi echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6 -echo "configure:1803: checking how to run the C++ preprocessor" >&5 +echo "configure:1806: checking how to run the C++ preprocessor" >&5 if test -z "$CXXCPP"; then if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1812,12 +1815,12 @@ ac_link='${CXX-g++} -o conftest $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $L cross_compiling=$ac_cv_prog_cxx_cross CXXCPP="${CXX-g++} -E" cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1821: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1824: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then : @@ -1837,17 +1840,17 @@ echo "$ac_t""$CXXCPP" 1>&6 ac_safe=`echo "FlexLexer.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for FlexLexer.h""... $ac_c" 1>&6 -echo "configure:1841: checking for FlexLexer.h" >&5 +echo "configure:1844: checking for FlexLexer.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1851: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1854: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* diff --git a/configure.in b/configure.in index 73ab40b1f5..6baa1002a9 100644 --- a/configure.in +++ b/configure.in @@ -268,6 +268,9 @@ if test $BISON != "error"; then fi fi +if test "$INSTALL" = "bin/install-sh"; then + export INSTALL="\$\(depth\)/bin/install-sh" +fi # ugh autoconf changequote(<<, >>)dnl diff --git a/init/a4.ly b/init/a4.ly new file mode 100644 index 0000000000..e42ee40984 --- /dev/null +++ b/init/a4.ly @@ -0,0 +1,4 @@ +% a4.ly + +hsize = 210.0 \mm; +vsize = 296.9 \mm; diff --git a/init/bar-numbering.ly b/init/bar-numbering.ly new file mode 100644 index 0000000000..e642545548 --- /dev/null +++ b/init/bar-numbering.ly @@ -0,0 +1,21 @@ +% bar-numbering.ly +% +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"; +} diff --git a/init/book-fragment.ly b/init/book-fragment.ly index 01762e927e..e8b9f0c1af 100644 --- a/init/book-fragment.ly +++ b/init/book-fragment.ly @@ -1,6 +1,6 @@ % Toplevel initialisation file. -\version "0.1.10"; +\version "0.1.14"; \include "declarations.ly" diff --git a/init/lily-init.ly b/init/lily-init.ly index 81fec7443f..a617abfd57 100644 --- a/init/lily-init.ly +++ b/init/lily-init.ly @@ -1,6 +1,6 @@ % Toplevel initialisation file. -\version "0.1.13"; +\version "0.1.14"; \include "declarations.ly"; diff --git a/init/no-tape.ly b/init/no-tape.ly index b38ed08471..9952b43729 100644 --- a/init/no-tape.ly +++ b/init/no-tape.ly @@ -1,6 +1,6 @@ % Toplevel initialisation file. -\version "0.1.10"; +\version "0.1.14"; \include "declarations.ly" diff --git a/init/paper.ly b/init/paper.ly new file mode 100644 index 0000000000..8585b8af9a --- /dev/null +++ b/init/paper.ly @@ -0,0 +1,9 @@ +% paper.ly + +linewidth20 = \hsize - 2.5 * \staffheight; +textheight20 = \vsize - 7.0 * \staffheight; +linewidth = \staffheight/20.0 * \linewidth20; +textheight = \staffheight/20.0 * \textheight20; + +indent = \linewidth / 14.0; + diff --git a/init/paper11.ly b/init/paper11.ly index 4ad47c88ac..2f2d86a5d4 100644 --- a/init/paper11.ly +++ b/init/paper11.ly @@ -4,7 +4,9 @@ paper_eleven = \paper { staffheight = 11.0\pt; + % a4 paper linewidth = 15.0 \cm; + textheight = 15.0 \cm; % ugh see table11 for sizes quartwidth = 3.63\pt; diff --git a/init/paper13.ly b/init/paper13.ly index 6642832691..9c1a5d1e64 100644 --- a/init/paper13.ly +++ b/init/paper13.ly @@ -4,7 +4,9 @@ paper_thirteen = \paper { staffheight = 13.0\pt; + % a4 paper linewidth = 15.0 \cm; + textheight = 18.0 \cm; % ugh see table13 for sizes quartwidth = 4.29\pt; @@ -16,5 +18,6 @@ paper_thirteen = \paper { \symboltables { \table_thirteen } \include "params.ly"; + \include "a4.ly"; } diff --git a/init/paper20.ly b/init/paper20.ly index 0375e79def..38247adf4a 100644 --- a/init/paper20.ly +++ b/init/paper20.ly @@ -4,11 +4,12 @@ paper_twenty = \paper { staffheight = 20.0\pt; - linewidth = 17.0 \cm; + % where to get papersize (e.g. a5, letter) + papersize = "a4"; % ugh see table20 for sizes - quartwidth = 6.61\pt; - wholewidth = 9.90\pt; + quartwidth = 6.61\pt + wholewidth = 9.90\pt basicspace = 8.\pt; arithmetic_basicspace = 2.; diff --git a/init/paper26.ly b/init/paper26.ly index 1e38b8bec8..357e9c2b34 100644 --- a/init/paper26.ly +++ b/init/paper26.ly @@ -4,7 +4,7 @@ paper_twentysix = \paper { staffheight = 20.0\pt; - linewidth = 17.0 \cm; + papersize = "a4"; % ugh see table26 for sizes notewidth = 8.59\pt @@ -16,5 +16,7 @@ paper_twentysix = \paper { \symboltables { \table_twenty } \include "params.ly"; + linewidth = linewidth20; + textheight = textheight20; } diff --git a/init/params.ly b/init/params.ly index f6313c648b..8e9b2e2d90 100644 --- a/init/params.ly +++ b/init/params.ly @@ -1,38 +1,44 @@ % params.ly % generic paper parameters -interline = staffheight / 4.0; -internote = interline / 2.0; -staffline = interline / 10.0; +paperfile = \papersize + ".ly"; +\include \paperfile; +\include "paper.ly"; -beam_thickness = 0.48 * (interline - staffline); -interbeam = (2.0 * interline - beam_thickness) / 2.0; -interbeam4 = (3.0 * interline - beam_thickness) / 3.0; +interline = \staffheight / 4.0; +internote = \interline / 2.0; +staffline = \interline / 10.0; + +beam_thickness = 0.48 * (\interline - \staffline); +interbeam = (2.0 * \interline - \beam_thickness) / 2.0; +interbeam4 = (3.0 * \interline - \beam_thickness) / 3.0; % OSU: suggested gap = ss / 5; -slur_x_gap = interline / 5.0; -slur_x_minimum = 2.0 * interline; -tie_x_minimum = slur_x_minimum; -tie_x_gap = slur_x_gap; +slur_x_gap = \interline / 5.0; +slur_x_minimum = 2.0 * \interline; +slur_slope_damping = 0.3; +tie_x_minimum = \slur_x_minimum; +tie_x_gap = \slur_x_gap; +tie_slope_damping = 0.3; % ugh: rename to bow (in bezier.cc and fonts.doc too...) -slur_thickness = 1.8 * staffline; -slur_height_limit = staffheight; -slur_ratio = 1.0 / 3.0; +% slur_thickness = 1.8 * \staffline; +slur_thickness = 1.4 * \staffline; +slur_height_limit = \staffheight; +% mmm, try bit flatter slurs +% slur_ratio = 1.0 / 3.0; +slur_ratio = 0.3; slur_clip_ratio = 1.2; -slur_clip_height = 3.0 * staffheight; +slur_clip_height = 3.0 * \staffheight; slur_clip_angle = 100.0; slur_rc_factor = 2.4; % ugh -notewidth = (quartwidth + wholewidth) / 2.0; +notewidth = (\quartwidth + \wholewidth) / 2.0; % ugh -barsize = staffheight; -rulethickness = staffline; - -% mmm -indent = linewidth / 14.0; +barsize = \staffheight; +rulethickness = \staffline; % uhm unitspace = 22.\pt; diff --git a/init/score-bar-numbering.ly b/init/score-bar-numbering.ly new file mode 100644 index 0000000000..3e47d6ec89 --- /dev/null +++ b/init/score-bar-numbering.ly @@ -0,0 +1,19 @@ +Score = \translator { + \type Score_engraver; + + \consists "Timing_engraver"; + \consists "Bar_column_engraver"; + \consists "Bar_number_engraver"; + \consists "Span_score_bar_engraver"; + \consists "Score_priority_engraver"; + \consists "Priority_horizontal_align_engraver"; + \consists "Vertical_align_engraver"; + + + \accepts "Staff_group"; + \accepts "Staff"; + \accepts "Rhythmic_staff"; + \accepts "Lyrics"; + \accepts "Grand_staff"; +} + diff --git a/init/simple-init.ly b/init/simple-init.ly index 9d878ca7bb..3b39cc6c1a 100644 --- a/init/simple-init.ly +++ b/init/simple-init.ly @@ -2,10 +2,11 @@ Gourlay = 1.0 \include "nederlands.ly" -\include "paper16.ly" +\include "paper20.ly" default_paper = \paper{ - \paper_sixteen + \paper_twenty } +\maininput diff --git a/init/table20.ly b/init/table20.ly index 5206821581..0ee27d15b3 100644 --- a/init/table20.ly +++ b/init/table20.ly @@ -12,13 +12,13 @@ table_twenty = % index TeXstring, xmin xmax ymin ymax "style" = \table { - "bold" "\setbold{%}" 0.0\pt 7.50\pt 0.0\pt 8.0\pt + "bold" "\setbold{%}" 0.0\pt 5.50\pt 0.0\pt 8.0\pt "dynamic" "\setdynamic{%}" 0.0\pt 0.0\pt 0.0\pt 10.0\pt "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 + "italic" "\setitalic{%}" 0.0\pt 5.5\pt 0.0\pt 10.0\pt + "large" "\setlarge{%}" 0.0\pt 6.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 + "roman" "\settext{%}" 0.0\pt 5.0\pt 0.0\pt 10.0\pt } "dynamics" = \table { diff --git a/input/Makefile b/input/Makefile index b74c0c32a3..07f36f84d1 100644 --- a/input/Makefile +++ b/input/Makefile @@ -9,6 +9,6 @@ SUBDIRS=test bugs include $(depth)/make/Mutopia.make -examples=twinkle-pop praeludium-fuga-E cadenza twinkle +examples=twinkle-pop praeludium-fuga-E twinkle include $(depth)/make/WWW.make diff --git a/input/bugs/Makefile b/input/bugs/Makefile index b03bae72a4..a221caa99d 100644 --- a/input/bugs/Makefile +++ b/input/bugs/Makefile @@ -7,3 +7,8 @@ depth = ../.. include $(depth)/make/Mutopia.make + +examples= #beam-bug slur-bug #why would we want to demo Lily's errors? + +include $(depth)/make/WWW.make + diff --git a/input/bugs/a.ly b/input/bugs/a.ly index 1c1d75b157..0c6c3698f5 100644 --- a/input/bugs/a.ly +++ b/input/bugs/a.ly @@ -5,7 +5,7 @@ TestedFeatures = "This file tests Feta embedded slurs" "(Feta definitively is not an abbreviation of Font-En-TjA)"; } -\version "0.1.10"; +\version "0.1.14"; shortlong = \melodic{ \octave c'; @@ -36,8 +36,8 @@ broken = \melodic{ a' a' a' a'() c( c c )c c( c c )'f - 'f( c c )c - 'f( c c )'f + f,( c c )c + f,( c c )'f } \score{ diff --git a/input/bugs/beam-bug.ly b/input/bugs/beam-bug.ly index 75a8669be5..571d981736 100644 --- a/input/bugs/beam-bug.ly +++ b/input/bugs/beam-bug.ly @@ -10,7 +10,7 @@ one = \melodic{ \octave c'; % [e'16 c'' g' f'] [e'32 c'' g' f'] - [c32 c] ['b 'b] + [c32 c] ['b b,] [c8 c] [e8 g b] [e16 g b] c c c @@ -21,7 +21,7 @@ one = \melodic{ [e'8 c'' g' f'] [e'16 c'' g' f'] [e'32 c'' g' f'] - [c32 c] ['b 'b] + [c32 c] ['b b,] [c8 c] [e8 g b] [e16 g b] c diff --git a/input/bugs/slur-bug.ly b/input/bugs/slur-bug.ly index 6de3788161..474bf96c23 100644 --- a/input/bugs/slur-bug.ly +++ b/input/bugs/slur-bug.ly @@ -4,6 +4,6 @@ \melodic{ \octave c; \stemdown; - \[4/5c8( c ''f c c\]1/1 c c c )c | + \[4/5c8( c f,, c c\]1/1 c c c )c | } } diff --git a/input/coriolan-alto.ly b/input/coriolan-alto.ly index 656491bab3..7013335d91 100644 --- a/input/coriolan-alto.ly +++ b/input/coriolan-alto.ly @@ -16,7 +16,7 @@ TestedFeatures: % (maybe even sooner :-) % -\version "0.1.10"; +\version "0.1.14"; alto1 = \melodic{ \meter 4/4; @@ -42,7 +42,7 @@ alto1 = \melodic{ } alto2 = \melodic{ - \octave 'c ; + \octave c, ; \textstyle "italic"; % this should be a \dynamic, rather than text [ c8 c8_"cresc. \ \ - \ \ \ \ - \ \ \ \ - \ \ \ \ @@ -63,7 +63,7 @@ alto2 = \melodic{ % the c4 and c2, however are really 16th... % we-ll say "simile" for now... % - \octave 'c ; + \octave c, ; \type Voice="altodivisi2" { \stemdown as4: as4: as2} diff --git a/input/keys.ly b/input/keys.ly index 5ea9c767f7..30ec969af8 100644 --- a/input/keys.ly +++ b/input/keys.ly @@ -1,4 +1,4 @@ -\version "0.1.10"; +\version "0.1.14"; blah = \melodic{ diff --git a/input/kortjakje.ly b/input/kortjakje.ly index e3cac3ecf2..573fb58e66 100644 --- a/input/kortjakje.ly +++ b/input/kortjakje.ly @@ -11,7 +11,7 @@ copyright = "public domain"; Tested Features: example file with comments %} -\version "0.1.10"; +\version "0.1.14"; % the % is a comment. @@ -48,14 +48,14 @@ begeleiding = \melodic{ \octave c'; % default octave: 1 below the first octave. %%% theme - 'c4 % ' before note means one octave lower. + c,4 % ' before note means one octave lower. % Similarly: ' after means one higher. - c e c f c e c d 'b c 'a 'f 'g 'c2 | + c e c f c e c d b, c a, f, g, c,2 | \octave c ; - e4 'g d 'g c 'g 'b 'g e 'g d 'g c 'g 'b 'g + e4 g, d g, c g, b, g, e g, d g, c g, b, g, %%%% var 1 r8 e8() c4 r8 e8() c4 r8 f8() c4 r8 e8() c4 - r8 d8() 'b4 r8 c8() 'a4 r8 'a8() 'f4 r8 'e8() 'c4 + r8 d8() b,4 r8 c8() a,4 r8 a,8() f,4 r8 e,8() c,4 } \score{ diff --git a/input/minimal.ly b/input/minimal.ly new file mode 100644 index 0000000000..58ba75e4af --- /dev/null +++ b/input/minimal.ly @@ -0,0 +1,52 @@ +\notenames { + c = \melodic_request { -1 0 0 } +} + +%default_paper = \paper{ +paper_minimal = \paper{ + bla = 0.0; + blo = 0.0; + + castingalgorithm = 0.0; + linewidth = 15.0\cm; + staffsize = 20.0\pt; + interline = \linewidth / 14.0; + notewidth = \interline; + internote = \interline / 2.0; + + arithmetic_basicspace = 1.0; + arithmetic_multiplier = 1.0; + geometric = 0.0; + + Score = \translator { + \type Score_engraver; + \consists "Note_head_engraver" ; + } + + bli = "hi"; + + \symboltables { + \texid "\input lilyponddefs \musixtwentydefs" + "balls" = \table { + "2" "\\quartball" 0.00\pt 3.63\pt -1.51\pt 1.51\pt + "2l" "\\quartledger" -1.65\pt 8.26\pt -0.50\pt 0.50\pt + } + "param" = \table { + "fill" "\hbox{}" +% "rule" "\rulesym{%}{%}" + } + } +} + +default_paper = \paper{ + \paper_minimal +} + +\score{ +% \melodic_request { -1 0 0 } + \melodic{ c'' } + \paper{ + bla = 0.0; + } +} + diff --git a/input/multi.ly b/input/multi.ly index 27542ccc8b..acc7015351 100644 --- a/input/multi.ly +++ b/input/multi.ly @@ -21,7 +21,7 @@ construct to get multiple staffs, it's cleaner %} -\version "0.1.10"; +\version "0.1.14"; \score{ \melodic diff --git a/input/pedal.ly b/input/pedal.ly index bdf20beb9d..8232e0ac75 100644 --- a/input/pedal.ly +++ b/input/pedal.ly @@ -24,7 +24,7 @@ % \lbheel \lbheel \lfheel \lftoe % \rbheel \rbtoe \rfheel \rftoe -\version "0.1.10"; +\version "0.1.14"; \score{ \melodic { @@ -34,10 +34,10 @@ \octave c; % silly chord testing... % these should be stacked... -% < 'c-\ltoe 'e-\lheel > < c'-\rtoe e'-\rheel> -% < 'c-\lheel 'e-\ltoe > < c'-\rheel e'-\rtoe> | - < 'c-\ltoe-\lheel 'e > < c'-\rtoe-\rheel e' > - < 'c-\lheel-\ltoe 'e > < c'-\rheel-\rtoe e' > | +% < c,-\ltoe e,-\lheel > < c'-\rtoe e'-\rheel> +% < c,-\lheel e,-\ltoe > < c'-\rheel e'-\rtoe> | + < c,-\ltoe-\lheel e, > < c'-\rtoe-\rheel e' > + < c,-\lheel-\ltoe e, > < c'-\rheel-\rtoe e' > | % 46 [d16-\lfheel e-\rbtoe fis-\ltoe e-\rbtoe] diff --git a/input/praeludium-fuga-E.ly b/input/praeludium-fuga-E.ly index 0b4525b396..6c590f3cb3 100644 --- a/input/praeludium-fuga-E.ly +++ b/input/praeludium-fuga-E.ly @@ -19,7 +19,7 @@ * organ staff... %} -\version "0.1.10"; +\version "0.1.14"; noShift = { \property Voice.hshift = 0 } Shift = { \property Voice.hshift = 1 } @@ -77,9 +77,9 @@ praeludium_pedal = \melodic { \clef bass; % 13 - r4 'fis4-\ltoe 'e4.-\lheel e8-\rheel | + r4 fis,4-\ltoe e,4.-\lheel e8-\rheel | fis4.-\rtoe fis8-\rtoe fis4-\rtoe [e8-\ltoe a8-\rtoe] | - dis4-\ltoe gis4-\rtoe [cis8-\ltoe 'b!8-\lheel 'ais8-\rtoe 'gis8-\ltoe] | + dis4-\ltoe gis4-\rtoe [cis8-\ltoe b,!8-\lheel ais,8-\rtoe gis,8-\ltoe] | % 16 } @@ -152,9 +152,9 @@ fuga2_pedal = \melodic { % 15 dis4.-\ltoe e8-\rtoe cis4 | - 'b4.-\lheel [cis8-\ltoe dis8-\rtoe e8-\rheel] | + b,4.-\lheel [cis8-\ltoe dis8-\rtoe e8-\rheel] | fis4.-\rtoe [e8-\rheel dis8-\rtoe cis8-\ltoe] | - dis4-\rtoe e4-\rheel 'e4-\ltoe | + dis4-\rtoe e4-\rheel e,4-\ltoe | % 19 } diff --git a/input/rhythm.ly b/input/rhythm.ly index 2ceedaa4f9..5e24efffe3 100644 --- a/input/rhythm.ly +++ b/input/rhythm.ly @@ -7,7 +7,7 @@ TestedFeatures = "multiple meters, beaming, unsynced bars, userdefd engravers"; -\version "0.1.10"; +\version "0.1.14"; ritme = \melodic{ %\octave ; \partial 8; diff --git a/input/scales.ly b/input/scales.ly index 3736895648..78391cf07e 100644 --- a/input/scales.ly +++ b/input/scales.ly @@ -12,10 +12,10 @@ copyright = "public domain"; % scales with accents. % -\version "0.1.10"; +\version "0.1.14"; blah = \melodic { \meter 6/8; - \octave 'c ; + \octave c, ; \clef "bass"; c4. d \octave c ; @@ -31,24 +31,24 @@ blah = \melodic { |[6/9 a a a a a a a a \! a ]1/1 | \octave c'' ; - [6/9'c->-.-\fermata \< 'g->-.-\fermata + [6/9'c->-.-\fermata \< g,->-.-\fermata d->-.-\fermata a->-.-\fermata e'->-.-\fermata b'-. f''-. c'''->-.-\fermata \! g'''->-.-\fermata \> ]1/1 [6/9 g'''->-.-\fermata c'''->-.-\fermata f''->-.-\fermata b'->-.-\fermata e'->-.-\fermata - a->-.-\fermata d->-.-\fermata 'g->-.-\fermata \! - 'c->-.-\fermata ]1/1 + a->-.-\fermata d->-.-\fermata g,->-.-\fermata \! + c,->-.-\fermata ]1/1 \octave c; - [6/9'c->-.-\fermata \< 'g->-.-\fermata d->-.-\fermata + [6/9'c->-.-\fermata \< g,->-.-\fermata d->-.-\fermata a->-.-\fermata e'->-.-\fermata b'-. f''-. c'''->-.-\fermata \! g'''->-.-\fermata \> ]1/1 [6/9 g'''->-.-\fermata c'''->-.-\fermata f''->-.-\fermata b'->-.-\fermata e'->-.-\fermata a->-.-\fermata d->-.-\fermata - 'g->-.-\fermata \! 'c->-.-\fermata ]1/1 + g,->-.-\fermata \! c,->-.-\fermata ]1/1 \octave c' ; \octave c' ; [2/3 c g d' ]1/1 diff --git a/input/scripts.ly b/input/scripts.ly index 19c6751e26..956a089f7b 100644 --- a/input/scripts.ly +++ b/input/scripts.ly @@ -1,47 +1,47 @@ -\version "0.1.10"; +\version "0.1.14"; blah = \melodic { \octave c'; - 'c4 ->-.-\fermata-"text" + c,4 ->-.-\fermata-"text" c ->-.-\fermata-"text" c' ->-.-\fermata-"text" c'' ->-.-\fermata-"text" - 'd ->-.-\fermata-"text" + d, ->-.-\fermata-"text" d ->-.-\fermata-"text" d' ->-.-\fermata-"text" d'' ->-.-\fermata-"text" - 'c ^>^.^\fermata^"text" + c, ^>^.^\fermata^"text" c ^>^.^\fermata^"text" c' ^>^.^\fermata^"text" c'' ^>^.^\fermata^"text" - 'd ^>^.^\fermata^"text" + d, ^>^.^\fermata^"text" d ^>^.^\fermata^"text" d' ^>^.^\fermata^"text" d'' ^>^.^\fermata ^"text" - 'c _>_._\fermata _"text" + c, _>_._\fermata _"text" c _>_._\fermata _"text" c' _>_._\fermata _"text" c'' _>_._\fermata _"text" - 'd _>_._\fermata _"text" + d, _>_._\fermata _"text" d _>_._\fermata _"text" d' _>_._\fermata _"text" d'' _>_._\fermata _"text" \stemup - 'b-. c-. d-. e-. f-. g-. a-. b-. c'-. + b,-. c-. d-. e-. f-. g-. a-. b-. c'-. \stemdown a-. b-. c'-. d'-. e'-. f'-. g'-. a'-. b'-. \stemup - 'b-> c-> d-> e-> f-> g-> a-> b-> c'-> + b,-> c-> d-> e-> f-> g-> a-> b-> c'-> \stemup - 'b---. c---. d---. e---. f---. g---. a---. b---. c'---. + b,---. c---. d---. e---. f---. g---. a---. b---. c'---. \stemboth \meter 4/4; diff --git a/input/test/Makefile b/input/test/Makefile index 9fa614ef2e..c06a326f62 100644 --- a/input/test/Makefile +++ b/input/test/Makefile @@ -5,9 +5,8 @@ depth = ../.. # - -examples = font20 - include $(depth)/make/Mutopia.make +examples=font20 denneboom spacing + include $(depth)/make/WWW.make diff --git a/input/test/beams.ly b/input/test/beams.ly index ff1f127511..9e84886ea1 100644 --- a/input/test/beams.ly +++ b/input/test/beams.ly @@ -6,7 +6,7 @@ copyright = "PD"; TestedFeatures = "beams and beamflags"; } -\version "0.1.10"; +\version "0.1.14"; \score{ < @@ -41,11 +41,11 @@ TestedFeatures = "beams and beamflags"; \melodic { \octave c'; \meter 8/4; - \stemdown [a'8 'a c e] - \stemdown [a'16 'a c e] - \stemdown [a'32 'a c e] - \stemdown [a'64 'a c e] - \stemdown [a'128 'a c e] + \stemdown [a'8 a, c e] + \stemdown [a'16 a, c e] + \stemdown [a'32 a, c e] + \stemdown [a'64 a, c e] + \stemdown [a'128 a, c e] r32 \octave c; diff --git a/input/test/broken.ly b/input/test/broken.ly index 17a90a08b2..54a6565f53 100644 --- a/input/test/broken.ly +++ b/input/test/broken.ly @@ -5,7 +5,7 @@ TestedFeatures = "This file tests Feta embedded slurs" "(Feta definitively is not an abbreviation of Font-En-TjA)"; } -\version "0.1.10"; +\version "0.1.14"; shortlong = \melodic{ c4()c( c c | @@ -25,8 +25,8 @@ broken = \melodic{ a' a' a' a'() c( c c )c c( c c )'f - 'f( c c )c - 'f( c c )'f + f,( c c )c + f,( c c )'f } \score{ diff --git a/input/test/collisions.ly b/input/test/collisions.ly index ba1be97c6c..fa3106ebc2 100644 --- a/input/test/collisions.ly +++ b/input/test/collisions.ly @@ -5,7 +5,7 @@ enteredby = "HWN,JCN"; copyright = "public domain"; Tested = "test the Collision resolution "; } -\version "0.1.10"; +\version "0.1.14"; diff --git a/input/test/denneboom.ly b/input/test/denneboom.ly index f870302100..8e955b22e9 100644 --- a/input/test/denneboom.ly +++ b/input/test/denneboom.ly @@ -7,7 +7,7 @@ TestedFeatures = "This file tests silly line shapes"; \include "paper20.ly" -\version "0.1.10"; +\version "0.1.14"; oden = \lyric{ O8 | @@ -35,10 +35,10 @@ ugloeit = \lyric{ oboom = \melodic{ \octave c'; - 'g8 | + g,8 | c8. c16 c4. d8 | e8. e16 e4. e8 | - d e f4 'b | + d e f4 b, | d8. c16 c4 r8 } diff --git a/input/test/font-body.ly b/input/test/font-body.ly index b2b222c341..3ca03b6f8c 100644 --- a/input/test/font-body.ly +++ b/input/test/font-body.ly @@ -1,11 +1,11 @@ -\version "0.1.10"; +\version "0.1.14"; FontBody= \melodic{ \octave c'; \bar "|:"; \meter 4/4; \multi 2 < { \stemup e'\longa a\breve | } { \stemdown - c1 \clef "bass"; ''b \clef "violin"; c' a' + c1 \clef "bass"; b,, \clef "violin"; c' a' c2 \clef "alto"; g c' \clef "violin"; a' } > \stemboth @@ -20,7 +20,7 @@ FontBody= \melodic{ \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}> + \multi 2 < { \stemup c,,1 } {\stemdown r1}> \stemboth \clef "violin"; e8_. g'8-> e16^^ g'16_^ diff --git a/input/test/font.ly b/input/test/font.ly index 6ae34c8633..1047e9883e 100644 --- a/input/test/font.ly +++ b/input/test/font.ly @@ -7,7 +7,7 @@ description = "This file tests the Feta music font"; % "(Feta definitively is not an abbreviation of Font-En-TjA)"; } -\version "0.1.10"; +\version "0.1.14"; \include "font-body.ly" \score{ diff --git a/input/test/font16.ly b/input/test/font16.ly index 1507d2c66e..bc8c5a1c77 100644 --- a/input/test/font16.ly +++ b/input/test/font16.ly @@ -7,7 +7,7 @@ description = "This file tests the Feta music font"; % "(Feta definitively is not an abbreviation of Font-En-TjA)"; } -\version "0.1.10"; +\version "0.1.14"; \include "font-body.ly" \score{ diff --git a/input/test/gourlay.ly b/input/test/gourlay.ly index f57627fde5..6c627538da 100644 --- a/input/test/gourlay.ly +++ b/input/test/gourlay.ly @@ -4,7 +4,7 @@ copyright = "PD"; TestedFeatures = "This file tests some nasty Gourlay spacings"; } -\version "0.1.10"; +\version "0.1.14"; %{ diff --git a/input/test/knee.ly b/input/test/knee.ly new file mode 100644 index 0000000000..502d255bb3 --- /dev/null +++ b/input/test/knee.ly @@ -0,0 +1,7 @@ +\version "0.1.14"; +\score{ + \melodic{ + \octave relative; + [c16 \stemdown c'' \stemboth c,, d] + } +} diff --git a/input/test/sleur.ly b/input/test/sleur.ly index 3026613cae..508ba0226a 100644 --- a/input/test/sleur.ly +++ b/input/test/sleur.ly @@ -5,13 +5,13 @@ TestedFeatures = "This file tests Feta embedded slurs" "(Feta definitively is not an abbreviation of Font-En-TjA)"; } -\version "0.1.10"; +\version "0.1.14"; shortlong = \melodic{ c4()c( c c | c c c c | c c c c | - \break; + \break c c c )c | } @@ -22,9 +22,9 @@ dirs = \melodic { complex = \melodic{ \octave c'; - 'c16( 'e( 'g( 'b( d( f( a( c'())))))))c4 c4 | + c,16( e,( g,( b,( d( f( a( c'())))))))c4 c4 | \octave c'''; - 'c16( a( f( d( 'b( 'g( 'e( 'c())))))))c4 c4 | + c,16( a( f( d( b,( g,( e,( c,())))))))c4 c4 | } over = \melodic{ @@ -56,24 +56,24 @@ under = \melodic{ \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' + 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' + 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' + 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' + f'( f e, )f' + f'( e, f )f' } eccentric = \melodic{ @@ -96,9 +96,9 @@ tiltup = \melodic{ \stemup e( c'' f )e' \stemdown - f'( \stemboth 'a 'a \stemdown )f'' + f'( \stemboth a, a, \stemdown )f'' \stemdown - f'( 'a 'a )f'' + f'( a, a, )f'' } tiltdown = \melodic{ @@ -111,9 +111,9 @@ tiltdown = \melodic{ \stemup e'( c'' f )e \stemdown - f''( \stemboth 'a 'a \stemdown )f' + f''( \stemboth a, a, \stemdown )f' \stemdown - f''( 'a 'a )f' + f''( a, a, )f' } broken = \melodic{ @@ -126,8 +126,8 @@ broken = \melodic{ a' a' a' a'() c( c c )c c( c c )'f - 'f( c c )c - 'f( c c )'f + f,( c c )c + f,( c c )'f } blend = \melodic{ @@ -137,8 +137,8 @@ blend = \melodic{ f'( c'' c'' )f' e( c'' c'' )e \stemdown - f'( \stemboth 'a 'a \stemdown )f' - f'( 'a 'a )f' + f'( \stemboth a, a, \stemdown )f' + f'( a, a, )f' \stemboth e( c'' c'' )e' @@ -168,9 +168,9 @@ clipping = \melodic{ 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 + c( \stemup c,,, c,,, \stemdown )c + c( \stemup c,,, c \stemdown )''c + c,,( \stemup c c,,, \stemdown )c } \score{ diff --git a/input/test/slur-damping.ly b/input/test/slur-damping.ly new file mode 100644 index 0000000000..663487904a --- /dev/null +++ b/input/test/slur-damping.ly @@ -0,0 +1,11 @@ +% test damping + +\score{ + \melodic{ + \octave relative; + c'()b' ~ 'b c + c c c c + c c c c + c c c c + } +} diff --git a/input/test/slurs.ly b/input/test/slurs.ly index 14dedf18fe..8574c0f750 100644 --- a/input/test/slurs.ly +++ b/input/test/slurs.ly @@ -1,12 +1,12 @@ -\version "0.1.10"; +\version "0.1.14"; \score{ \melodic{\octave c'; - 'c4 ~ 'c c'' ~ c'' ~ g ~ c ~ + c,4 ~ c, c'' ~ c'' ~ g ~ c ~ d ~ e ~ f ~ g ~ - a ~ b ~ 'c ~ c + a ~ b ~ c, ~ c < c e ( > <)d f> \octave c''; @@ -23,9 +23,9 @@ { % \octave c'; -% 'c16( 'e( 'g( 'b( d( f( a( c'~ )))))))c4 c4 | +% c,16( e,( g,( b,( d( f( a( c'~ )))))))c4 c4 | % \octave c'''; -% 'c16( a( f( d( 'b( 'g( 'e( 'c~ )))))))c4 c4 | +% c,16( a( f( d( b,( g,( e,( c,~ )))))))c4 c4 | % \octave c'; % c'1() g' () c () g () c | diff --git a/input/test/spacing.ly b/input/test/spacing.ly index 710df30c48..88e7eb85d4 100644 --- a/input/test/spacing.ly +++ b/input/test/spacing.ly @@ -6,7 +6,7 @@ copyright = "public domain"; TestedFeatures = "This file tests various spacings"; } -\version "0.1.10"; +\version "0.1.14"; multipart = \melodic{ \multi 3 < diff --git a/input/test/stem.ly b/input/test/stem.ly index 8cd604af5f..60d6700600 100644 --- a/input/test/stem.ly +++ b/input/test/stem.ly @@ -8,39 +8,39 @@ of beams"; } -\version "0.1.10"; +\version "0.1.14"; beamintervals = \melodic{ \meter 7/4; - \stemup; + \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 ] | + [ 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; + [ 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 ] | + [ 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 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; + \stemup \meter 17/4; - 'g4 'a 'b c d e f g a b c' d' e' f' g' a' b' | + g,4 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; + 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/title.ly b/input/test/title.ly new file mode 100644 index 0000000000..cae3d93f9f --- /dev/null +++ b/input/test/title.ly @@ -0,0 +1,34 @@ +\header{ +filename = "title.ly"; +title = "Title"; +subtitle = "Subtitle"; +composer= "Composer (xxxx-yyyy)"; +opus = "Opus 0"; +arranger = "Arranger"; +copyright = "public domain"; +enteredby = "jcn"; +source = "urtext"; +piece = "Piece I"; +instrument= "Instrument"; +} + +\score{ + \melodic{ + \octave relative; + c' d e f f e d c \break + c d e f f e d c + } +} + +\header{ +piece = "Piece II"; +opus = "Opus 1"; +} + +\score{ + \melodic{ + f' e d c c d e f \break + f e d c c d e f + } +} + diff --git a/input/tril.ly b/input/tril.ly index 6e9c55bf2f..d4d5f8e261 100644 --- a/input/tril.ly +++ b/input/tril.ly @@ -5,7 +5,7 @@ TestedFeatures = "This file tests trills" "(Feta definitively is not an abbreviation of Font-En-TjA)"; } -\version "0.1.10"; +\version "0.1.14"; \score{ \melodic{ diff --git a/input/twinkle-pop.ly b/input/twinkle-pop.ly index fb57977c30..fd070478e7 100644 --- a/input/twinkle-pop.ly +++ b/input/twinkle-pop.ly @@ -12,7 +12,7 @@ copyright = "public domain"; Tested Features lyrics and chords %} -\version "0.1.10"; +\version "0.1.14"; melodie = \melodic { \clef"violin"; diff --git a/input/twinkle.ly b/input/twinkle.ly index 17d3515621..5e5127f077 100644 --- a/input/twinkle.ly +++ b/input/twinkle.ly @@ -15,7 +15,7 @@ copyright = "public domain"; Tested Features: lyrics, interleaving lyrics and staffs %} -\version "0.1.10"; +\version "0.1.14"; melody = \melodic{ \clef violin; @@ -35,7 +35,7 @@ melody = \melodic{ accompany = \melodic { \clef "bass"; - \octave 'c; + \octave c,; c4 c' | e' c' | f' c' | e' c' | d' b | c' a | f g | c2 | @@ -55,15 +55,15 @@ global = \melodic { tekst = \lyric{ Al-4 tijd is Kort- jak- je ziek,2 -% midden4 in_de week maar 's_zon- dags niet.2 +% midden4 in_de week maar s,_zon- dags niet.2 % ugly hack: insertion of empty syllables creates columns on extra % moments. The net result is more spacing. % - midden8 _8 in_de8 _8 week4 maar 's_zon- dags niet.2 - 's_Zon-4 dags gaat ze naar de kerk,2 + midden8 _8 in_de8 _8 week4 maar s,_zon- dags niet.2 + s,_Zon-4 dags gaat ze naar de kerk,2 met4 een boek vol zil- ver werk.2 Al-4 tijd is Kort- jak- je ziek,2 - midden8 _8 in_de8 _8 week4 maar 's_zon- dags niet.2 + midden8 _8 in_de8 _8 week4 maar s,_zon- dags niet.2 } %{ @@ -75,7 +75,7 @@ tekst. Mogen wij ook af en toe ergens op afgeven? hegedraagjetekst = \lyric{ Al-4 tijd zuigt Bill Gates mijn piek,2 "\TeX"4 is slecht- ser dan mu- ziek.2 - 's_Zon-4 dags gaat het door een raam,2 + s,_Zon-4 dags gaat het door een raam,2 Weet4 dat ik me er- voor schaam.2 Al-4 tijd zuigt Bill Gates mijn piek,2 "\TeX"4 is slecht- ser dan mu- ziek.2 diff --git a/lib/include/input.hh b/lib/include/input.hh index 767a2e76b8..ac0780b21d 100644 --- a/lib/include/input.hh +++ b/lib/include/input.hh @@ -21,6 +21,7 @@ class Input { public: void warning (String) const; // should use member func? + void non_fatal_error (String) const; void error (String) const; void message (String) const; void set_spot (Input const &); diff --git a/lib/include/source-file.hh b/lib/include/source-file.hh index d5346be5f7..ccf80eeded 100644 --- a/lib/include/source-file.hh +++ b/lib/include/source-file.hh @@ -8,6 +8,7 @@ #include "proto.hh" #include "string.hh" +#include "interval.hh" class istream; @@ -28,7 +29,13 @@ public: int length_i () const; virtual int line_i (char const* pos_ch_c_l ) const; String name_str () const; - String file_line_no_str (char const* ch_c_l ) const; + String file_line_column_str (char const* ch_c_l ) const; + +protected: + Slice line_slice (char const* pos_ch_C) const; + String line_str (char const* pos_ch_C) const; + int column_i (char const* pos_ch_C) const; + int position_i (char const* pos_ch_C) const; private: String name_str_; @@ -37,3 +44,4 @@ private: }; #endif // SOURCE_FILE_HH // + diff --git a/lib/include/warn.hh b/lib/include/warn.hh index a65c4aa19a..27bc4ff759 100644 --- a/lib/include/warn.hh +++ b/lib/include/warn.hh @@ -1,5 +1,5 @@ /* - warn.hh -- declare + warn.hh -- declare Error message functions source file of the LilyPond music typesetter @@ -14,4 +14,5 @@ void warning (String message_str ); void error (String message_str); +void non_fatal_error (String); #endif // WARN_HH diff --git a/lib/input.cc b/lib/input.cc index c50b3b7335..46ddcb2ca6 100644 --- a/lib/input.cc +++ b/lib/input.cc @@ -1,9 +1,9 @@ /* - input.cc -- implement Input + input.cc -- implement Input - source file of the LilyPond music typesetter + source file of the LilyPond music typesetter - (c) 1997--1998 Han-Wen Nienhuys + (c) 1997--1998 Han-Wen Nienhuys */ #include "proto.hh" #include "input.hh" @@ -13,63 +13,94 @@ Input::Input (Source_file*s, char const *cl) { - source_file_l_=s; - defined_ch_C_=cl; + source_file_l_=s; + defined_ch_C_=cl; } Input::Input () { - source_file_l_ = 0; - defined_ch_C_ = 0; + source_file_l_ = 0; + defined_ch_C_ = 0; } Input::Input (Input const &s) { - source_file_l_ = s.source_file_l_; - defined_ch_C_ = s.defined_ch_C_; + source_file_l_ = s.source_file_l_; + defined_ch_C_ = s.defined_ch_C_; } void Input::set_spot (Input const &i) { - *this = i; + *this = i; } +/* + Produce almost GNU-compliant error message. Lily used to be rather + GNU-compliant in this too, but correcting mudela is such a breeze if + you('re edidor) know(s) the error column too (there's no GNU standard + on columns, is there?). + + Format: + + [file:line:column:][warning:]message + + */ void Input::message (String message_str) const { - String str = ""; - - if (source_file_l_) - { - str += location_str () + String (": "); - } - - str += message_str; - if (source_file_l_) - { - str += ":\n"; - str += source_file_l_->error_str (defined_ch_C_); - } - cerr << str << endl; + String str; + + /* + marked "Work in prgress" in GNU iostream + libg++ 2.7.2.8 + libstdc++ 2.8.1 + + why not just return always -1 (unknown), + iso breaking the interface? + + int col = cerr.rdbuf ()->column (); + + */ + + // well, we don't want to loose first warning... + int col = 1; + if (col > 0) + str += "\n"; + + if (source_file_l_) + str += location_str () + String (": "); + + str += message_str; + if (source_file_l_) + { + str += ":\n"; + str += source_file_l_->error_str (defined_ch_C_); + } + cerr << str << endl; } void Input::warning (String message_str) const { - message (_ ("warning: ") + message_str); + message (_ ("warning: ") + message_str); } void Input::error (String s) const { - message (_ ("error: ")+ s); + message (_ ("error: ")+ s); } +void +Input::non_fatal_error (String s) const +{ + message (_ ("Non fatal error: ")+ s); +} String Input::location_str () const { - if (source_file_l_) - return source_file_l_->file_line_no_str (defined_ch_C_); - else - return _ ("(location unknown)"); + if (source_file_l_) + return source_file_l_->file_line_column_str (defined_ch_C_); + else + return _("(location unknown)"); } diff --git a/lib/source-file.cc b/lib/source-file.cc index c14dcccd6f..7a7470119d 100644 --- a/lib/source-file.cc +++ b/lib/source-file.cc @@ -48,13 +48,13 @@ Source_file::istream_l () } String -Source_file::file_line_no_str (char const *context_ch_C) const +Source_file::file_line_column_str (char const *context_ch_C) const { if (!ch_C ()) return _ ("(unknown)"); else - return name_str () + ": " - + String (line_i (context_ch_C)); + return name_str () + ":" + String (line_i (context_ch_C)) + + ":" + String (position_i (context_ch_C)); } String @@ -70,14 +70,14 @@ Source_file::~Source_file () delete storage_p_; } -String -Source_file::error_str (char const* pos_ch_C) const +Slice +Source_file::line_slice (char const* pos_ch_C) const { - char const* data_ch_C = ch_C (); - char const * eof_C_ = data_ch_C + length_i (); if (!in_b (pos_ch_C)) - return _ ("(position unknown)"); + return Slice (0,0); + char const* data_ch_C = ch_C (); + char const * eof_C_ = data_ch_C + length_i (); if (pos_ch_C == eof_C_) pos_ch_C --; @@ -97,22 +97,63 @@ Source_file::error_str (char const* pos_ch_C) const break; } - // String (char const* p, int length) is missing!? - String line_str ((Byte const*)begin_ch_C, end_ch_C - begin_ch_C); + return Slice (begin_ch_C - data_ch_C, end_ch_C - data_ch_C); +} - int error_col_i = 0; - char const* scan_ch_C = begin_ch_C; - while (scan_ch_C < pos_ch_C) - if (*scan_ch_C++ == '\t') - error_col_i = (error_col_i / 8 + 1) * 8; +String +Source_file::line_str (char const* pos_ch_C) const +{ + if (!in_b (pos_ch_C)) + return ""; + + Slice line = line_slice (pos_ch_C); + char const* data_ch_C = ch_C (); + return String ((Byte const*)data_ch_C + line.min (), line.length ()); +} + +int +Source_file::position_i (char const* pos_ch_C) const +{ + if (!in_b (pos_ch_C)) + return 0; + + char const* data_ch_C = ch_C (); + return pos_ch_C - (line_slice (pos_ch_C).min () + data_ch_C); +} + +int +Source_file::column_i (char const* pos_ch_C) const +{ + if (!in_b (pos_ch_C)) + return 0; + + int pos_i = position_i (pos_ch_C); + String line = line_str (pos_ch_C); + + int col_i = 0; + for (int i = 0; i < pos_i; i++) + if (line[i] == '\t') + col_i = (col_i / 8 + 1) * 8; else - error_col_i++; + col_i++; - String str = line_str.left_str (pos_ch_C - begin_ch_C) + return col_i; +} + +String +Source_file::error_str (char const* pos_ch_C) const +{ + if (!in_b (pos_ch_C)) + return _ ("(position unknown)"); + + int pos_i = position_i (pos_ch_C); + String line = line_str (pos_ch_C); + String context = line.left_str (pos_i) + String ('\n') - + String (' ', error_col_i) - + line_str.cut (pos_ch_C - begin_ch_C, INT_MAX); // String::mid should take 0 arg.. - return str; + + String (' ', column_i (pos_ch_C)) + + line.cut (pos_i, INT_MAX); + + return context; } bool @@ -121,7 +162,6 @@ Source_file::in_b (char const* pos_ch_C) const return (pos_ch_C && (pos_ch_C >= ch_C ()) && (pos_ch_C <= ch_C () + length_i ())); } - int Source_file::line_i (char const* pos_ch_C) const { diff --git a/lib/template.cc b/lib/template.cc index 6c117a2a60..b9638cea0c 100644 --- a/lib/template.cc +++ b/lib/template.cc @@ -12,8 +12,14 @@ #include "cursor.tcc" #include "list.tcc" -#if !defined(__CYGWIN32__) && __GNUC_MINOR__ < 8 +// #if!defined(__CYGWIN32__) && __GNUC_MINOR__ < 8 +// it seems irix (-Dsgi ?) and sunos (-Dsparc ?) + +// see comments in lily/template1.cc mi2mu/template9.cc + +#if (defined(__linux__) && (__GNUC_MINOR__ < 8)) LIST_INSTANTIATE (void *); #endif POINTERLIST_INSTANTIATE (Source_file); + diff --git a/lib/warn.cc b/lib/warn.cc index 743af06d6a..afdbd97f4f 100644 --- a/lib/warn.cc +++ b/lib/warn.cc @@ -9,6 +9,11 @@ error (String s) exit (1); } +void +non_fatal_error (String s) +{ + cerr << _ ("error: ") << s << "\n"; +} void warning (String m) diff --git a/lily/VERSION b/lily/VERSION index eb481f9509..d173a2d56b 100644 --- a/lily/VERSION +++ b/lily/VERSION @@ -1,5 +1,5 @@ MAJOR_VERSION=0 MINOR_VERSION=1 -PATCH_LEVEL=61 +PATCH_LEVEL=63 MY_PATCH_LEVEL= diff --git a/lily/atom.cc b/lily/atom.cc index 8c5c2f80e4..eba9660c92 100644 --- a/lily/atom.cc +++ b/lily/atom.cc @@ -12,6 +12,34 @@ #include "string.hh" #include "varray.hh" #include "debug.hh" +#include "main.hh" + +inline bool +Atom::check_infinity_b ()const +{ + bool ridiculous = false; +#ifndef NDEBUG + + /* infinity checks. */ + for (int a = X_AXIS; a < NO_AXES; a++) + { + Axis ax = (Axis)a; + if (abs (off_[ax]) >= 100 CM) + { + warning (_("ridiculous dimension ") + axis_name_str (ax) + ", " + +print_dimen(off_[ax])); + + if (experimental_features_global_b) + assert (false); + + ((Atom*)this)->off_[ax] = 0.0; + ridiculous = true; + } + } +#endif + return ridiculous; +} + void Atom::print() const @@ -57,27 +85,6 @@ Atom::str() const } -bool -Atom::check_infinity_b ()const -{ - bool ridiculous = false; -#ifndef NDEBUG - - /* infinity checks. */ - for (int a = X_AXIS; a < NO_AXES; a++) - { - Axis ax = (Axis)a; - if (abs (off_[ax]) >= 100 CM) - { - warning (_("ridiculous dimension ") + axis_name_str (ax) + ", " - +print_dimen(off_[ax])); - ((Atom*)this)->off_[ax] = 0.0; - ridiculous = true; - } - } -#endif - return ridiculous; -} String Atom::TeX_string() const { diff --git a/lily/beam.cc b/lily/beam.cc index e792aeddbd..f60d230e75 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -14,7 +14,6 @@ * centre beam symbol * less hairy code * redo grouping - * (future) knee: ([\stem 1; c8 \stem -1; c8] */ #include @@ -43,6 +42,7 @@ IMPLEMENT_IS_TYPE_B1 (Beam, Spanner); Beam::Beam () { slope_f_ = 0; + solved_slope_f_ = 0; left_y_ = 0; damping_i_ = 1; quantisation_ = NORMAL; @@ -167,16 +167,28 @@ Beam::set_default_dir () } while (flip(&d) != DOWN); /* - [Ross] states that the majority of the notes dictates the direction (and not the mean of "center distance") + + But is that because it really looks better, or because he + wants to provide some real simple hands-on rules. + + We have our doubts. */ + + // fixme. make runtime. + // majority + // dir_ = (count[UP] > count[DOWN]) ? UP : DOWN; + + // mean centre distance dir_ = (total[UP] > total[DOWN]) ? UP : DOWN; for (int i=0; i dir_ = dir_; + Stem *s = stems_[i]; + s->beam_dir_ = dir_; + if (!s->dir_forced_b_) + s->dir_ = dir_; } } @@ -213,7 +225,6 @@ Beam::solve_slope () } else { - Real leftx = sinfo[0].x_; Least_squares l; for (int i=0; i < sinfo.size (); i++) @@ -238,7 +249,7 @@ Beam::solve_slope () left_y_ *= dir_; slope_f_ *= dir_; - + solved_slope_f_ = slope_f_; /* This neat trick is by Werner Lemberg, damped = tanh (slope_f_) corresponds with some tables in [Wanske] @@ -247,10 +258,6 @@ Beam::solve_slope () slope_f_ = 0.6 * tanh (slope_f_) / damping_i_; quantise_dy (); - - Real sl = slope_f_ * paper ()->internote_f (); - paper ()->lookup_l ()->beam (sl, 20 PT, 1 PT); - slope_f_ = sl / paper ()->internote_f (); } void @@ -287,10 +294,10 @@ Beam::quantise_dy () allowed_fraction[2] = (beam_f + staffline_f); - Interval iv = quantise_iv (allowed_fraction, interline_f, dy_f); - quanty_f = (dy_f - iv.min () <= iv.max () - dy_f) - ? iv.min () - : iv.max (); + Interval iv = quantise_iv (allowed_fraction, interline_f, dy_f); + quanty_f = (dy_f - iv.min () <= iv.max () - dy_f) + ? iv.min () + : iv.max (); slope_f_ = (quanty_f / dx_f) / internote_f * sign (slope_f_); @@ -424,16 +431,53 @@ void Beam::set_stemlens () { Real staffline_f = paper ()->rule_thickness (); + Real interbeam_f = paper ()->interbeam_f (multiple_i_); + Real internote_f = paper ()->internote_f (); + Real beam_f = paper ()->beam_thickness_f (); + + // enge floots + Real epsilon_f = staffline_f / 8; + + /* + + Damped and quantised slopes, esp. in monotone scales such as + + [c d e f g a b c] + + will soon produce the minimal stem-length for one of the extreme + stems, which is wrong (and ugly). The minimum stemlength should + be kept rather small, in order to handle extreme beaming, such as + + [c c' 'c] %assuming no knee + + correctly. + To avoid these short stems for normal cases, we'll correct for + the loss in slope, if necessary. + + [TODO] + ugh, another hack. who's next? + Writing this all down, i realise (at last) that the Right Thing to + do is to assign uglyness to slope and stem-lengths and then minimise + the total uglyness of a beam. + Steep slopes are ugly, shortened stems are ugly, lengthened stems + are ugly. + How to do this? + + */ + + Real dx_f = stems_.top ()->hpos_f () - stems_[0]->hpos_f (); + Real damped_slope_dy_f = (solved_slope_f_ - slope_f_) * dx_f / 2; + if (abs (damped_slope_dy_f) <= epsilon_f) + damped_slope_dy_f = 0; Real x0 = stems_[0]->hpos_f (); - Real dy = 0; - // ugh, rounding problems! (enge floots) - Real epsilon = staffline_f / 8; - do + Real dy_f = 0; + // urg + for (int jj = 0; jj < 10; jj++) { - left_y_ += dy * dir_; - quantise_left_y (dy); - dy = 0; + left_y_ += dy_f * dir_; + quantise_left_y (dy_f); + dy_f = 0; for (int i=0; i < stems_.size (); i++) { Stem *s = stems_[i]; @@ -441,13 +485,34 @@ Beam::set_stemlens () continue; Real x = s->hpos_f () - x0; - s->set_stemend (left_y_ + slope_f_ * x); + // urg move this to stem-info + Real sy = left_y_ + slope_f_ * x; + if (dir_ != s->dir_) + sy -= dir_ * (beam_f / 2 + + (s->mult_i_ - 1) * interbeam_f) / internote_f; + s->set_stemend (sy); Real y = s->stem_end_f () * dir_; Stem_info info (s); + if (y > info.maxy_f_) + dy_f = dy_f ? info.miny_f_ - y; + { + // when all too short, normal stems win.. + if (dy_f < -epsilon_f) + warning ( _("Weird beam shift, check your knees.")); + dy_f = dy_f >? info.miny_f_ - y; + } } - } while (abs (dy) > epsilon); + if (dy_f && damped_slope_dy_f + && (sign (dy_f) == sign (damped_slope_dy_f))) + dy_f += damped_slope_dy_f; + damped_slope_dy_f = 0; + if (abs (dy_f) <= epsilon_f) + { + DOUT << "Beam::set_stemlens: " << jj << " iterations\n"; + break; + } + } test_pos++; test_pos %= 4; diff --git a/lily/break.cc b/lily/break.cc index 42db7970f5..cc5c6f92a4 100644 --- a/lily/break.cc +++ b/lily/break.cc @@ -177,9 +177,9 @@ Break_algorithm::solve () const Array h= do_solve (); if (approx_stats_.count_i_) - *mlog << _ ("\nApproximated: ") << approx_stats_.str () << "\n"; + *mlog << _ ("\n(Approximated: ") << approx_stats_.str () << ")\n"; if (exact_stats_.count_i_) - *mlog << _ ("Calculated exactly: ") << exact_stats_.str () << "\n"; + *mlog << _ ("(Calculated exactly: ") << exact_stats_.str () << ")\n"; *mlog << _ ("Time: ") << String (timer.read (), "%.2f") << _ (" seconds\n"); return h; diff --git a/lily/identifier.cc b/lily/identifier.cc index 82156417d1..69b3ca1c40 100644 --- a/lily/identifier.cc +++ b/lily/identifier.cc @@ -22,116 +22,180 @@ IMPLEMENT_IS_TYPE_B(Identifier); +Identifier::Identifier (int code) +{ + token_code_i_ = code; + accessed_b_ = 0; + init_b_ = 0; +} + + + +Identifier::Identifier (Identifier const&s) + : Input (s) +{ + token_code_i_ = s.token_code_i_; + accessed_b_ = s.accessed_b_; + init_b_ = s.init_b_; +} + Identifier::~Identifier() { } void -Identifier::error (String expect) +Identifier::error (String expect) const { String e (_("Wrong identifier type: ")); e += String (name()) + _("(expected ") + expect + ")"; ::error (e); } -Identifier::Identifier (int code) +String +Identifier::str () const { - token_code_i_ = code; - accessed_b_ = 0; - init_b_ = 0; + return do_str (); +} + +String +Identifier::do_str () const +{ + return ""; } void -Identifier::print() const +Identifier::print () const { DOUT << "identifier "; - do_print(); + do_print (); +} +void +Identifier::do_print () const +{ } /* ugh. */ -#define DEFAULT_PRINT(Class, Content_type, accessor) \ +/* UGH MEMORY LEAK! */ +#define DEFAULT_PRINT(Class, accessor) \ void \ -Class::do_print() const { \ - ((Class*)this)->accessor()->print(); \ -} \ -class Class - +Class ## _identifier::do_print () const { \ + Class *cl = ((Class ## _identifier *)this)->accessor();\ + cl->print (); \ + delete cl; \ +} -DEFAULT_PRINT(Script_id, General_script_def, script); -DEFAULT_PRINT(Lookup_id, Lookup, lookup); -DEFAULT_PRINT(Translator_id, Translator, translator); -DEFAULT_PRINT(Symtables_id, Symtables, symtables); -DEFAULT_PRINT(Music_id,Music , music); -DEFAULT_PRINT(Request_id, Request, request); -DEFAULT_PRINT(Score_id, Score, score); -DEFAULT_PRINT(Midi_def_id,Midi_def, mididef); -DEFAULT_PRINT(Paper_def_id,Paper_def, paperdef); -void -Duration_id::do_print() const -{} +DEFAULT_PRINT(General_script_def, script); +DEFAULT_PRINT(Lookup, lookup); +DEFAULT_PRINT(Translator, translator); +DEFAULT_PRINT(Symtables, symtables); +DEFAULT_PRINT(Music, music); +DEFAULT_PRINT(Request, request); +DEFAULT_PRINT(Score, score); +DEFAULT_PRINT(Midi_def, mididef); +DEFAULT_PRINT(Paper_def, paperdef); -void -Real_id::do_print() const -{ - DOUT << *data_p_<< "\n"; +/* ugh. */ +#define DUMMY_STR(Class) \ +String \ +Class ## _identifier::do_str () const { \ + return String (#Class); \ } -void -Int_id::do_print() const -{ - DOUT << *data_p_<< "\n"; + + +DUMMY_STR(General_script_def); +DUMMY_STR(Lookup); +DUMMY_STR(Translator); +DUMMY_STR(Symtables); +DUMMY_STR(Music); +DUMMY_STR(Request); +DUMMY_STR(Score); +DUMMY_STR(Midi_def); +DUMMY_STR(Paper_def); +DUMMY_STR(Duration); + +#define STRING_PRINT(Class) \ +void \ +Class ## _identifier::do_print () const\ +{\ + DOUT << do_str () << "\n";\ +}\ + + +STRING_PRINT(Duration); +STRING_PRINT(Real); +STRING_PRINT(int); +STRING_PRINT(String); + +#define DEFAULT_STR(Class) \ +String \ +Class ## _identifier::do_str () const\ +{\ + return String (*data_p_);\ } +DEFAULT_STR(int); +DEFAULT_STR(Real); +DEFAULT_STR(String); + + +/* + fucking C++ blows me. + */ -#define DEFAULT_ACCESSOR(Idclass, Class, accessor)\ +#define DEFAULT_ACCESSOR(Class, accessor)\ Class*\ -Idclass::accessor () {\ - accessed_b_ = true;\ +Class ## _identifier::accessor () const {\ + ((Class ## _identifier*)this)->accessed_b_ = true;\ return new Class (*data_p_);\ } -#define VIRTUAL_ACCESSOR(Idclass, Class, accessor)\ +#define VIRTUAL_ACCESSOR(Class, accessor)\ Class*\ -Idclass::accessor () {\ - accessed_b_ = true;\ +Class ## _identifier::accessor () const{\ + ((Class ## _identifier*)this)->accessed_b_ = true;\ return (Class*)data_p_->clone();\ } -#define IMPLEMENT_ID_CLASS(Idclass, Class, accessor) \ - IMPLEMENT_IS_TYPE_B1(Idclass,Identifier)\ - Idclass::~Idclass() { delete data_p_; }\ - Idclass::Idclass (Class*st, int code):Identifier (code) { data_p_ = st; }\ - -IMPLEMENT_ID_CLASS(Duration_id, Duration, duration); -IMPLEMENT_ID_CLASS(Translator_id, Translator, translator); -IMPLEMENT_ID_CLASS(Int_id, int, intid); -IMPLEMENT_ID_CLASS(Real_id, Real, real); -IMPLEMENT_ID_CLASS(Script_id, General_script_def, script); -IMPLEMENT_ID_CLASS(Lookup_id, Lookup, lookup); -IMPLEMENT_ID_CLASS(Symtables_id, Symtables, symtables); -IMPLEMENT_ID_CLASS(Music_id, Music, music); -IMPLEMENT_ID_CLASS(Score_id, Score, score); -IMPLEMENT_ID_CLASS(Request_id, Request, request); -IMPLEMENT_ID_CLASS(Midi_def_id, Midi_def, mididef); -IMPLEMENT_ID_CLASS(Paper_def_id, Paper_def, paperdef); - -Identifier::Identifier (Identifier const&s) - : Input (s) -{ - assert (false); -} +#define IMPLEMENT_ID_CLASS(Class, accessor) \ + IMPLEMENT_IS_TYPE_B1(Class ## _identifier,Identifier)\ + Class ## _identifier::~Class ## _identifier() { delete data_p_; }\ + Class ## _identifier::Class ## _identifier (Class*st, int code):Identifier (code) { data_p_ = st; }\ +Class ## _identifier::Class ## _identifier (Class ## _identifier const &s) \ +: Identifier (s)\ +{\ + data_p_ = s.accessor ();\ +} + + +IMPLEMENT_ID_CLASS(Duration, duration); +IMPLEMENT_ID_CLASS(Translator, translator); +IMPLEMENT_ID_CLASS(int, intid); +IMPLEMENT_ID_CLASS(Real, real); +IMPLEMENT_ID_CLASS(String, string); +IMPLEMENT_ID_CLASS(General_script_def, script); +IMPLEMENT_ID_CLASS(Lookup, lookup); +IMPLEMENT_ID_CLASS(Symtables, symtables); +IMPLEMENT_ID_CLASS(Music, music); +IMPLEMENT_ID_CLASS(Score, score); +IMPLEMENT_ID_CLASS(Request, request); +IMPLEMENT_ID_CLASS(Midi_def, mididef); +IMPLEMENT_ID_CLASS(Paper_def, paperdef); + +VIRTUAL_ACCESSOR(Music, music); +VIRTUAL_ACCESSOR(Request, request); +VIRTUAL_ACCESSOR(Translator, translator); +VIRTUAL_ACCESSOR(General_script_def, script); + +DEFAULT_ACCESSOR(Duration, duration); +DEFAULT_ACCESSOR(int, intid); +DEFAULT_ACCESSOR(Real, real); +DEFAULT_ACCESSOR(String, string); +DEFAULT_ACCESSOR(Lookup, lookup); +DEFAULT_ACCESSOR(Symtables, symtables); +DEFAULT_ACCESSOR(Score, score); +DEFAULT_ACCESSOR(Midi_def, mididef); +DEFAULT_ACCESSOR(Paper_def, paperdef); -DEFAULT_ACCESSOR(Duration_id, Duration, duration); -VIRTUAL_ACCESSOR(Translator_id,Translator, translator); -DEFAULT_ACCESSOR(Int_id, int, intid); -DEFAULT_ACCESSOR(Real_id, Real, real); -VIRTUAL_ACCESSOR(Script_id, General_script_def, script); -DEFAULT_ACCESSOR(Lookup_id, Lookup, lookup); -DEFAULT_ACCESSOR(Symtables_id, Symtables, symtables); -VIRTUAL_ACCESSOR(Music_id, Music, music); -DEFAULT_ACCESSOR(Score_id, Score, score); -VIRTUAL_ACCESSOR(Request_id, Request, request); -DEFAULT_ACCESSOR(Midi_def_id, Midi_def, mididef); -DEFAULT_ACCESSOR(Paper_def_id, Paper_def, paperdef); diff --git a/lily/include/beam.hh b/lily/include/beam.hh index 5294d719d0..e4bad88c1c 100644 --- a/lily/include/beam.hh +++ b/lily/include/beam.hh @@ -25,6 +25,8 @@ public: Link_array stems_; /// the slope of the beam in posns / point (dimension) Real slope_f_; + /// the slope as solved; not quantised or damped + Real solved_slope_f_; /// position of leftmost end of beam Real left_y_; diff --git a/lily/include/cf-basic.hh b/lily/include/cf-basic.hh new file mode 100644 index 0000000000..d201ece057 --- /dev/null +++ b/lily/include/cf-basic.hh @@ -0,0 +1,13 @@ +/* + cf-basic.hh -- declare + + source file of the GNU LilyPond music typesetter + + (c) 1998 Han-Wen Nienhuys + + */ + +#ifndef CF_BASIC_HH +#define CF_BASIC_HH +#endif /* CF_BASIC_HH */ + diff --git a/lily/include/cf-string.hh b/lily/include/cf-string.hh new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/lily/include/cf-string.hh @@ -0,0 +1 @@ + diff --git a/lily/include/identifier.hh b/lily/include/identifier.hh index b7365e5650..85a398ae0e 100644 --- a/lily/include/identifier.hh +++ b/lily/include/identifier.hh @@ -12,8 +12,8 @@ #include "input.hh" #include "virtual-methods.hh" -#define IDACCESSOR( Input_staff, staff)\ -virtual Input_staff * staff () { error (#Input_staff); return 0; } +#define IDACCESSOR(Class, accessor)\ +virtual Class * accessor () const { error (#Class + String ("_identifier")); return 0; } /** A declarable data structure in mudela. @@ -24,53 +24,62 @@ struct Identifier : public Input { bool init_b_; bool accessed_b_; int token_code_i_; - + Identifier (Identifier const&); Identifier (int code) ; virtual ~Identifier() ; + void print() const; DECLARE_MY_RUNTIME_TYPEINFO; - void error (String); + void error (String) const; + String str () const; IDACCESSOR(Translator, translator) - IDACCESSOR(Music, music) - IDACCESSOR(General_script_def, script) - IDACCESSOR(Symtables, symtables) - IDACCESSOR(Midi_def, mididef) - IDACCESSOR(Paper_def, paperdef) - IDACCESSOR(Lookup,lookup) - IDACCESSOR(Real,real) - IDACCESSOR(Request, request) - IDACCESSOR(Score, score) - IDACCESSOR(int, intid) - IDACCESSOR(Duration, duration) + IDACCESSOR(Music, music) + IDACCESSOR(General_script_def, script) + IDACCESSOR(Symtables, symtables) + IDACCESSOR(Midi_def, mididef) + IDACCESSOR(Paper_def, paperdef) + IDACCESSOR(Lookup,lookup) + IDACCESSOR(Real,real) + IDACCESSOR(String,string) + IDACCESSOR(Request, request) + IDACCESSOR(Score, score) + IDACCESSOR(int, intid) + IDACCESSOR(Duration, duration) + VIRTUAL_COPY_CONS (Identifier, Identifier); - protected: - virtual void do_print() const=0; -private: - Identifier (Identifier const&); +protected: + virtual void do_print () const; + virtual String do_str () const; }; -#define DECLARE_ID_CLASS(Idclass, Class, accessor) \ -struct Idclass : Identifier {\ +#define DECLARE_ID_CLASS(Class, accessor) \ +struct Class ## _identifier : Identifier {\ Class *data_p_; \ - DECLARE_MY_RUNTIME_TYPEINFO; \ - Idclass (Class*st, int code);\ - virtual Class* accessor ();\ - ~Idclass();\ - virtual void do_print() const; \ + DECLARE_MY_RUNTIME_TYPEINFO; \ + Class ## _identifier (Class ## _identifier const&);\ + Class ## _identifier (Class*st, int code);\ + VIRTUAL_COPY_CONS (Class ## _identifier, Identifier);\ + virtual Class* accessor () const;\ + ~Class ## _identifier();\ + virtual void do_print () const; \ + virtual String do_str () const; \ }\ -DECLARE_ID_CLASS(Translator_id, Translator, translator); -DECLARE_ID_CLASS(Duration_id, Duration, duration); -DECLARE_ID_CLASS(Real_id, Real, real); -DECLARE_ID_CLASS(Script_id, General_script_def, script); -DECLARE_ID_CLASS(Lookup_id, Lookup, lookup); -DECLARE_ID_CLASS(Symtables_id, Symtables, symtables); -DECLARE_ID_CLASS(Music_id, Music, music); -DECLARE_ID_CLASS(Int_id, int, intid); -DECLARE_ID_CLASS(Score_id, Score, score); -DECLARE_ID_CLASS(Request_id, Request, request); -DECLARE_ID_CLASS(Paper_def_id,Paper_def, paperdef); -DECLARE_ID_CLASS(Midi_def_id,Midi_def, mididef); -#endif // IDENTIFIER_ +DECLARE_ID_CLASS(Translator, translator); +DECLARE_ID_CLASS(Duration, duration); +DECLARE_ID_CLASS(Real, real); +DECLARE_ID_CLASS(String, string); +DECLARE_ID_CLASS(General_script_def, script); +DECLARE_ID_CLASS(Lookup, lookup); +DECLARE_ID_CLASS(Symtables, symtables); +DECLARE_ID_CLASS(Music, music); +DECLARE_ID_CLASS(int, intid); +DECLARE_ID_CLASS(Score, score); +DECLARE_ID_CLASS(Request, request); +DECLARE_ID_CLASS(Paper_def, paperdef); +DECLARE_ID_CLASS(Midi_def, mididef); + +#endif // IDENTIFIER_HH + diff --git a/lily/include/key.hh b/lily/include/key.hh index da03799193..5875f84e6b 100644 --- a/lily/include/key.hh +++ b/lily/include/key.hh @@ -27,7 +27,8 @@ class Key { /** for each octave a key. Has to be private since octave 0 isn't member 0. */ - Array octaves; + Array octaves_; + int octave_to_index (int) const; public: bool multi_octave_b_; diff --git a/lily/include/lily-proto.hh b/lily/include/lily-proto.hh index 9f47f8834e..49f234b8e1 100644 --- a/lily/include/lily-proto.hh +++ b/lily/include/lily-proto.hh @@ -179,6 +179,7 @@ struct Rhythmic_head; struct Rhythmic_grouping_req; struct Rhythmic_req; struct Single_malt_grouping_item; +struct Scope; struct Separating_group_spanner; struct Score; struct Score_column; diff --git a/lily/include/my-lily-lexer.hh b/lily/include/my-lily-lexer.hh index 8aa5319c28..b0bccca7f5 100644 --- a/lily/include/my-lily-lexer.hh +++ b/lily/include/my-lily-lexer.hh @@ -30,14 +30,14 @@ class My_lily_lexer : public Includable_lexer { int scan_bare_word (String); int scan_escaped_word (String); - bool post_quotes_b_; char escaped_char(char) const; public: String main_input_str_; void * lexval_l; + Scope * toplevel_scope_p_; Notename_table *note_tab_p_; - Dictionary *identifier_p_dict_p_; + Array scope_l_arr_; Keyword_table * keytable_p_; int errorlevel_i_; @@ -52,7 +52,7 @@ public: void pop_state(); void LexerError (char const *); My_lily_lexer(); - void set_identifier (String,Identifier*i); + void set_identifier (String str, Identifier* i, bool unique_b = true); ~My_lily_lexer(); int yylex(); void print_declarations (bool init_b) const; diff --git a/lily/include/my-lily-parser.hh b/lily/include/my-lily-parser.hh index 8c751af072..c68d4ea4c7 100644 --- a/lily/include/my-lily-parser.hh +++ b/lily/include/my-lily-parser.hh @@ -66,8 +66,8 @@ public: void remember_spot(); Input pop_spot(); - Paper_def*default_paper(); - Midi_def*default_midi(); + Paper_def*default_paper_p(); + Midi_def*default_midi_p(); void do_yyparse(); void parser_error (String); void clear_notenames(); diff --git a/lily/include/note-column.hh b/lily/include/note-column.hh index 960349f403..dfcc1cc7ab 100644 --- a/lily/include/note-column.hh +++ b/lily/include/note-column.hh @@ -34,6 +34,8 @@ public: Link_array rest_l_arr_; Interval_t head_positions_interval() const; + Interval width () const; + void translate_rests(int dy); DECLARE_MY_RUNTIME_TYPEINFO; diff --git a/lily/include/note-head.hh b/lily/include/note-head.hh index 2a18dff662..6ed35ce263 100644 --- a/lily/include/note-head.hh +++ b/lily/include/note-head.hh @@ -33,6 +33,7 @@ public: */ Note_head (); static int compare (Note_head * const &a, Note_head *const &b) ; + protected: virtual Interval do_width () const; virtual void do_pre_processing(); diff --git a/lily/include/paper-def.hh b/lily/include/paper-def.hh index d2728d42f3..ea7b9d39e3 100644 --- a/lily/include/paper-def.hh +++ b/lily/include/paper-def.hh @@ -34,25 +34,21 @@ Input_engraver should be in here. */ -class Paper_def : public Music_output_def { +class Paper_def : public Music_output_def +{ Lookup *lookup_p_; - Dictionary *real_vars_p_; + Scope* scope_p_; static int default_count_i_; + protected: VIRTUAL_COPY_CONS(Paper_def,Music_output_def); + public: virtual ~Paper_def (); DECLARE_MY_RUNTIME_TYPEINFO; Array shape_int_a_; - /** - Set or overwrite a variable - */ - void set_var (String, Real); - /** - Read a variable. Crash if it doesn't exist. - */ Real get_var (String) const; void reinit (); Paper_def (); @@ -97,6 +93,8 @@ public: Real arithmetic_spacing (Moment mom,Real constant) const; virtual int get_next_default_count () const; String TeX_output_settings_str () const; + // urg + friend int yyparse (void*); }; #endif // Paper_def_HH diff --git a/lily/include/scope.hh b/lily/include/scope.hh new file mode 100644 index 0000000000..799e480ac0 --- /dev/null +++ b/lily/include/scope.hh @@ -0,0 +1,25 @@ +/* + scope.hh -- declare Scope + + source file of the GNU LilyPond music typesetter + + (c) 1998 Han-Wen Nienhuys + + */ + +#ifndef SCOPE_HH +#define SCOPE_HH + +#include "dictionary.hh" +#include "lily-proto.hh" + +class Scope : public Dictionary { +public: + void print () const; + Scope (); + Scope (Scope const &); + ~Scope (); +}; + +#endif /* SCOPE_HH */ + diff --git a/lily/include/stem-info.hh b/lily/include/stem-info.hh index 83ebeaf74b..06a6cb2918 100644 --- a/lily/include/stem-info.hh +++ b/lily/include/stem-info.hh @@ -15,8 +15,10 @@ struct Stem_info { Real x_; int dir_; + int beam_dir_; Real idealy_f_; Real miny_f_; + Real maxy_f_; int mult_i_; Stem_info (); diff --git a/lily/include/stem.hh b/lily/include/stem.hh index e9e5cac4c4..aa6f1b44ca 100644 --- a/lily/include/stem.hh +++ b/lily/include/stem.hh @@ -69,7 +69,14 @@ public: /// maximum number of beams int mult_i_; + /// direction stem (that's me) Direction dir_; + + /// is direction explicitely specified? + bool dir_forced_b_; + + /// direction of the beam + Direction beam_dir_; /* *************** */ Stem (); diff --git a/lily/include/text-item.hh b/lily/include/text-item.hh index 5d9546409b..581446cfd4 100644 --- a/lily/include/text-item.hh +++ b/lily/include/text-item.hh @@ -27,9 +27,10 @@ public: virtual ~Text_item (); DECLARE_MY_RUNTIME_TYPEINFO; -protected: +//protected: // ugh: so, are we a text-def, or can this vary? General_script_def* tdef_p_; +protected: virtual Interval symbol_height () const; diff --git a/lily/key.cc b/lily/key.cc index 9e8b9d40c5..46a8ce55ac 100644 --- a/lily/key.cc +++ b/lily/key.cc @@ -12,7 +12,7 @@ #include "key.hh" #include "debug.hh" -const int OCTAVES=14; // ugh.. +const int NUMBER_OF_OCTAVES=14; // ugh.. const int ZEROOCTAVE=7; @@ -41,48 +41,76 @@ Octave_key::clear () Key::Key() { multi_octave_b_ = false; - octaves.set_size (OCTAVES); + octaves_.set_size (NUMBER_OF_OCTAVES); +} + +int +Key::octave_to_index (int o) const +{ + int i = o + ZEROOCTAVE; + if (i < 0) + { + warning ("Don't have that many octaves (" + String (o) + ")"); + i = 0; + } + if (i >= NUMBER_OF_OCTAVES) + { + warning ("Don't have that many octaves (" + String (o) + ")"); + i = NUMBER_OF_OCTAVES -1; + } + return i; } Octave_key& Key::oct (int i) { - return octaves[i+ZEROOCTAVE]; + + return octaves_[octave_to_index (i)]; } void Octave_key::set (int i, int a) { - assert (a > -3 && a < 3); + if (a <= -3) + { + warning ("Underdone accidentals (" + String (a)+ ")"); + a = -2; + } + if (a >= 3) + { + warning ("Overdone accidentals (" + String (a) + ")"); + a = 2; + } accidental_i_arr_[i]=a; } void Key::set (int o, int n , int a) { - octaves[o + ZEROOCTAVE].set (n,a); + int i = octave_to_index (o); + octaves_[i].set (n,a); } void Key::set (int n, int a) { - for (int i= 0; i < OCTAVES ; i++) - octaves[i].set (n,a); + for (int i= 0; i < NUMBER_OF_OCTAVES ; i++) + octaves_[i].set (n,a); } void Key::clear () { - for (int i= 0; i < OCTAVES ; i++) - octaves[i].clear (); + for (int i= 0; i < NUMBER_OF_OCTAVES ; i++) + octaves_[i].clear (); } void Key::print () const { - for (int i= 0; i < OCTAVES ; i++) + for (int i= 0; i < NUMBER_OF_OCTAVES ; i++) { DOUT << "octave " << i - ZEROOCTAVE << " Octave_key { "; - octaves[i].print (); + octaves_[i].print (); DOUT << "}\n"; } } diff --git a/lily/lexer.ll b/lily/lexer.ll index 7e09d03e58..aefb42336e 100644 --- a/lily/lexer.ll +++ b/lily/lexer.ll @@ -38,7 +38,6 @@ void strip_trailing_white (String&); void strip_leading_white (String&); - #define start_quote() \ yy_push_state (quote);\ yylval.string = new String @@ -144,6 +143,27 @@ TELP \\\] new_input (s,source_global_l); yy_pop_state (); } +\\{BLACK}*;?{WHITE} { /* got the include identifier */ + String s = YYText () + 1; + strip_trailing_white (s); + if (s.length_i () && (s[s.length_i () - 1] == ';')) + s = s.left_str (s.length_i () - 1); + DOUT << "#include `\\" << s << "'\n"; + Identifier * id = lookup_identifier (s); + if (id) + { + String* s_p = id->string (); + DOUT << "#include `" << *s_p << "\'\n"; + new_input (*s_p, source_global_l); + delete s_p; + yy_pop_state (); + } + else + { + String msg ("Undefined identifier: `" + s + "'"); + LexerError (msg.ch_C ()); + } +} \"[^"]* { // backup rule cerr << "missing end quote" << endl; exit (1); @@ -176,18 +196,7 @@ TELP \\\] exit (1); } { - {ALPHAWORD}/\' { - post_quotes_b_ = true; - return scan_bare_word (YYText ()); - } - \'+ { - yylval.i = YYLeng (); - if (post_quotes_b_) { - post_quotes_b_ = false; - return POST_QUOTES; - } else - return PRE_QUOTES; - } + {ALPHAWORD} { return scan_bare_word (YYText ()); @@ -375,9 +384,11 @@ My_lily_lexer::scan_escaped_word (String str) DOUT << "(notename)\n"; yylval.melreq = mel_l; mel_l->set_spot (Input (source_file_l (), here_ch_C ())); - return NOTENAME_ID; + return NOTENAME_IDENTIFIER; } } + if (check_debug) + print_declarations (true); String msg ("Unknown escaped string: `" + str + "'"); LexerError (msg.ch_C ()); DOUT << "(string)"; @@ -396,7 +407,7 @@ My_lily_lexer::scan_bare_word (String str) DOUT << "(notename)\n"; yylval.melreq = mel_l; mel_l->set_spot (Input (source_file_l (), here_ch_C ())); - return NOTENAME_ID; + return NOTENAME_IDENTIFIER; } } @@ -416,8 +427,12 @@ My_lily_lexer::lyric_state_b () const return YY_START == lyrics; } +/* + urg, belong to String(_convert) + and should be generalised + */ void -strip_trailing_white (String&s) +strip_leading_white (String&s) { int i=0; for (; i < s.length_i (); i++) @@ -428,7 +443,7 @@ strip_trailing_white (String&s) } void -strip_leading_white (String&s) +strip_trailing_white (String&s) { int i=s.length_i (); while (i--) @@ -437,3 +452,4 @@ strip_leading_white (String&s) s = s.left_str (i+1); } + diff --git a/lily/lyric-grav.cc b/lily/lyric-grav.cc index f90dcde52c..9c4cb14629 100644 --- a/lily/lyric-grav.cc +++ b/lily/lyric-grav.cc @@ -12,6 +12,7 @@ #include "paper-def.hh" #include "lookup.hh" #include "paper-def.hh" +#include "main.hh" Lyric_engraver::Lyric_engraver() { @@ -55,6 +56,17 @@ Lyric_engraver::do_pre_move_processing() { if (lyric_item_p_) { + /* + urg. should check-out deriving from staff/line spanner + */ + if (experimental_features_global_b) + { + if (lyric_item_p_->tdef_p_->static_name () == Text_def::static_name ()) + { + Text_def* t = (Text_def*)lyric_item_p_->tdef_p_; + t->text_str_ += "\\hrule 1mm 10mm 20mm"; + } + } typeset_element (lyric_item_p_); lyric_item_p_ =0; } diff --git a/lily/my-lily-lexer.cc b/lily/my-lily-lexer.cc index fc6cae778d..b1c484b639 100644 --- a/lily/my-lily-lexer.cc +++ b/lily/my-lily-lexer.cc @@ -20,6 +20,7 @@ #include "source-file.hh" #include "parseconstruct.hh" #include "main.hh" +#include "scope.hh" static Keyword_ent the_key_tab[]={ {"accepts", ACCEPTS}, @@ -72,9 +73,9 @@ static Keyword_ent the_key_tab[]={ My_lily_lexer::My_lily_lexer() { keytable_p_ = new Keyword_table (the_key_tab); - identifier_p_dict_p_ = new Dictionary; + toplevel_scope_p_ = new Scope; + scope_l_arr_.push (toplevel_scope_p_); errorlevel_i_ = 0; - post_quotes_b_ = false; note_tab_p_ = new Notename_table; } @@ -87,10 +88,10 @@ My_lily_lexer::lookup_keyword (String s) Identifier* My_lily_lexer::lookup_identifier (String s) { - if (!identifier_p_dict_p_->elt_b (s)) - return 0; - - return (*identifier_p_dict_p_)[s]; + for (int i = scope_l_arr_.size (); i--; ) + if (scope_l_arr_[i]->elt_b (s)) + return (*scope_l_arr_[i])[s]; + return 0; } void @@ -107,41 +108,34 @@ My_lily_lexer::start_main_input () } void -My_lily_lexer::set_identifier (String name_str, Identifier*i) +My_lily_lexer::set_identifier (String name_str, Identifier* i, bool unique_b) { Identifier *old = lookup_identifier (name_str); if (old) { - old->warning(_("redeclaration of \\") + name_str); + if (unique_b) + old->warning(_("redeclaration of \\") + name_str); delete old; } - (*identifier_p_dict_p_)[name_str] = i; + (*scope_l_arr_.top ())[name_str] = i; } My_lily_lexer::~My_lily_lexer() { delete keytable_p_; + delete toplevel_scope_p_ ; + - for (Assoc_iter - ai (*identifier_p_dict_p_); ai.ok(); ai++) - { - DOUT << "deleting: " << ai.key()<<'\n'; - delete ai.val(); - } delete note_tab_p_; - delete identifier_p_dict_p_; } + void My_lily_lexer::print_declarations (bool init_b) const { - for (Assoc_iter ai (*identifier_p_dict_p_); - ai.ok(); ai++) + for (int i=scope_l_arr_.size (); i--; ) { - if (ai.val()->init_b_ == init_b) - { - DOUT << ai.key() << '='; - ai.val()->print (); - } + DOUT << "Scope no. " << i << "\n"; + scope_l_arr_[i]->print (); } } diff --git a/lily/my-lily-parser.cc b/lily/my-lily-parser.cc index cb1666207b..eb380bbd4c 100644 --- a/lily/my-lily-parser.cc +++ b/lily/my-lily-parser.cc @@ -16,6 +16,9 @@ #include "parser.hh" #include "header.hh" #include "file-results.hh" +#include "midi-def.hh" +#include "paper-def.hh" +#include "identifier.hh" My_lily_parser::My_lily_parser (Sources * source_l) { @@ -177,9 +180,52 @@ My_lily_parser::get_melodic_req (Melodic_req* melodic, int quotes) { set_nearest (melodic); int d = melodic->pitch () - last_melodic_->pitch (); + int shift = 0; if (quotes && (sign (d) == sign (quotes))) - quotes -= sign (quotes); - melodic->octave_i_ += quotes; + shift -= sign (quotes); + if (!quotes && (abs (d) == 6)) + { + String str = _("Octave ambiguity; assuming "); + /* + [TODO] + figure this out. + + If the distance is exactly*) half an octave, there is + no nearest pitch. In that case, we'll try to guess what + composer/ typist meant. + Firstly, we'll do this by comparing the 'notename distance': + + f b' % name-distance: f g a b: 3 + + is surely a shorter notename distance than + + f 'b % name-distance: b c d e f: 4 + + (should we give a warning at all, or can we safely assume + this is a positive interval up?) + + *) It is conceivable that, musically speaking, the interval + with the greater pitch-distance is thought to be smaller? + + */ + + int name_delta = melodic->notename_i_ - last_melodic_->notename_i_; + int name_near = abs (name_delta) % 7; + int name_wrap = (7 - abs (name_delta)) % 7; + if (name_near != name_wrap) + shift = name_near < name_wrap ? sign (name_delta) : -sign (name_delta); + else if (sign (last_melodic_->accidental_i_) + != sign (melodic->accidental_i_)) + shift = last_melodic_->accidental_i_ - melodic->accidental_i_; + else + shift = -1; + String name_str = notename_str (melodic); + str += shift > 0 ? name_str + "'" : "'" + name_str; + if (sign (d) == sign (shift)) + shift = 0; + melodic->warning (str); + } + melodic->octave_i_ += quotes + shift; } else { @@ -193,17 +239,12 @@ My_lily_parser::get_melodic_req (Melodic_req* melodic, int quotes) if (e) { int d = melodic->pitch () - last_melodic_->pitch (); - String str = _("Interval bigger than quart"); + String str = _("Interval greater than quart"); int n = 1 + (abs (d) - 1) / 12; String quote_str ('\'', n); -#if 0 - str += d < 0 ? _(", prepend: ") : _(", append: "); - str += quote_str; -#else str += _(", relative: "); String name_str = notename_str (melodic); str += d < 0 ? quote_str + name_str : name_str + quote_str; -#endif melodic->warning (str); } } @@ -418,3 +459,17 @@ My_lily_parser::add_notename (String s, Melodic_req * m_p) lexer_p_->add_notename (s, m_p); } +Paper_def* +My_lily_parser::default_paper_p () +{ + Identifier *id = lexer_p_->lookup_identifier ("default_paper"); + return id ? id->paperdef () : new Paper_def ; +} + +Midi_def* +My_lily_parser::default_midi_p () +{ + Identifier *id = lexer_p_->lookup_identifier ("default_midi"); + return id ? id->mididef () : new Midi_def ; +} + diff --git a/lily/note-column.cc b/lily/note-column.cc index c82d2c42c2..e528b9e956 100644 --- a/lily/note-column.cc +++ b/lily/note-column.cc @@ -43,6 +43,15 @@ Note_column::head_positions_interval() const } +Interval +Note_column::width () const +{ + if (head_l_arr_.size ()) + return head_l_arr_[0]->width (); + else + return Interval (0,0); +} + void Note_column::do_pre_processing() { diff --git a/lily/paper-def.cc b/lily/paper-def.cc index dbb99fd730..fc867d6ac4 100644 --- a/lily/paper-def.cc +++ b/lily/paper-def.cc @@ -17,18 +17,20 @@ #include "assoc-iter.hh" #include "score-grav.hh" #include "p-score.hh" +#include "identifier.hh" #include "main.hh" +#include "scope.hh" Paper_def::Paper_def () { lookup_p_ = 0; - real_vars_p_ = new Dictionary; + scope_p_ = new Scope; } Paper_def::~Paper_def () { - delete real_vars_p_; + delete scope_p_; delete lookup_p_; } @@ -36,28 +38,28 @@ Paper_def::Paper_def (Paper_def const&s) : Music_output_def (s) { lookup_p_ = s.lookup_p_? new Lookup (*s.lookup_p_) : 0; - lookup_p_->paper_l_ = this; - real_vars_p_ = new Dictionary (*s.real_vars_p_); -} - -void -Paper_def::set_var (String s, Real r) -{ - real_vars_p_->elem (s) = r; + if (lookup_p_) + { + lookup_p_->paper_l_ = this; + } + scope_p_ = new Scope (*s.scope_p_); } Real Paper_def::get_var (String s) const { - if (! real_vars_p_->elt_b (s)) + if (!scope_p_->elt_b (s)) error (_ ("unknown paper variable `") + s+"'"); - return real_vars_p_->elem (s); + Real * p = scope_p_->elem (s)->real (); + Real r = *p; + delete p; + return r; } Interval Paper_def::line_dimensions_int (int n) const { - if (!shape_int_a_.size ()) + if (!shape_int_a_.size ()) if (n) return Interval (0, linewidth_f ()); else @@ -178,10 +180,14 @@ Paper_def::print () const #ifndef NPRINT Music_output_def::print (); DOUT << "Paper {"; - lookup_p_->print (); - for (Assoc_iter i (*real_vars_p_); i.ok (); i++) + if (lookup_p_) + lookup_p_->print (); + for (Assoc_iter i (*scope_p_); i.ok (); i++) { - DOUT << i.key () << "= " << i.val () << "\n"; + DOUT << i.key () << "= "; +// i.val ()->print (); +// urg + DOUT << i.val ()->str () << "\n"; } DOUT << "}\n"; #endif @@ -200,8 +206,9 @@ String Paper_def::TeX_output_settings_str () const { String s ("\n "); - for (Assoc_iter i (*real_vars_p_); i.ok (); i++) - s += String ("\\def\\mudelapaper") + i.key () + "{" + i.val () + "}\n"; + for (Assoc_iter i (*scope_p_); i.ok (); i++) + s += String ("\\def\\mudelapaper") + i.key () + + "{" + i.val ()->str () + "}\n"; s += lookup_p_->texsetting + "% (Tex id)\n"; return s; } @@ -213,3 +220,4 @@ Paper_def::get_next_default_count () const { return default_count_i_ ++; } + diff --git a/lily/parser.yy b/lily/parser.yy index 871e5d97be..94a20a8921 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -38,10 +38,11 @@ #include "change-translator.hh" #include "file-results.hh" #include "mudela-version.hh" +#include "scope.hh" // mmm -Mudela_version oldest_version ("0.1.8"); -Mudela_version version ("0.1.13"); +Mudela_version oldest_version ("0.1.14"); +Mudela_version version ("0.1.14"); // needed for bison.simple's malloc() and free() @@ -191,7 +192,7 @@ yylex (YYSTYPE *s, void * v_l) %type dots %token DIGIT -%token NOTENAME_ID +%token NOTENAME_IDENTIFIER %token DURATION_IDENTIFIER %token IDENTIFIER %token MELODIC_REQUEST_IDENTIFIER @@ -201,6 +202,7 @@ yylex (YYSTYPE *s, void * v_l) %token SCRIPT_IDENTIFIER %token COMMAND_IDENTIFIER %token REAL_IDENTIFIER +%token STRING_IDENTIFIER %token TRANS_IDENTIFIER %token INT_IDENTIFIER %token SCORE_IDENTIFIER @@ -211,8 +213,7 @@ yylex (YYSTYPE *s, void * v_l) %token DURATION RESTNAME %token STRING %token UNSIGNED -%token POST_QUOTES -%token PRE_QUOTES + %type output_def %type
      mudela_header mudela_header_body @@ -220,12 +221,12 @@ yylex (YYSTYPE *s, void * v_l) %type open_request_parens close_request_parens %type open_abbrev_parens %type open_plet_parens close_plet_parens -%type post_quotes pre_quotes +%type sub_quotes sup_quotes %type simple_element music_elt full_element lyrics_elt command_elt %type abbrev_type %type int unsigned %type script_dir -%type identifier_init +%type identifier_init simple_identifier_init %type explicit_steno_duration notemode_duration %type entered_notemode_duration explicit_duration %type dinterval @@ -243,14 +244,16 @@ yylex (YYSTYPE *s, void * v_l) %type Voice Voice_body %type Chord Chord_body %type paper_block paper_body -%type dim real real_expression -%type real_add_expression real_mult_expression real_primary +%type dim real +%type real_mult_expression real_primary %type unit %type abbrev_command_req %type post_request structured_post_request %type plet_fraction %type command_req verbose_command_req %type script_req dynamic_req +%type string +%type string_primary %type score_block score_body %type shape_array %type