From 93f43e1adaa513ab73dfec6bacfec9577c11f11f Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Sat, 29 Dec 2001 23:58:43 +0100 Subject: [PATCH] release: 1.4.10 ========= * drum-pitch updates * Bugfix in German Chords (thanks Rune) * lilypond-book updates from 1.5 * dotsDown identifier * Resurrected bibliography stuff * Move bar checking into iterator so skip-typesetting can be used to find failed bar-checks. * Between barlines span-bar patch, version from lily 1.5 * Bugfix: showStaffSwitch should be a voice property. 1.4.9.j --- CHANGES | 46 +- Documentation/bibliography/GNUmakefile | 15 +- Documentation/bibliography/colorado.bib | 246 ++- .../bibliography/computer-notation.bib | 16 +- Documentation/bibliography/html-long.bst | 1373 +++++++++++++++++ Documentation/header.html.in | 2 +- Documentation/topdocs/index.tely | 8 - Documentation/user/refman.itely | 46 +- Documentation/windows/gs-profile.sh | 10 +- Documentation/windows/installing.texi | 152 +- Documentation/windows/lily-gs.sh | 43 + Documentation/windows/lily-miktex.sh | 0 Documentation/windows/lily-python.sh | 0 Documentation/windows/post-gs.sh | 0 Documentation/windows/post-lily.sh | 0 Documentation/windows/post-miktex.sh | 0 Documentation/windows/post-python.sh | 0 Documentation/windows/python-wrapper.sh | 0 Documentation/windows/tex-wrapper.sh | 0 VERSION | 4 +- buildscripts/bib2html.py | 86 ++ buildscripts/lilypond-profile.sh | 2 +- input/no-notation/bar-check.ly | 12 + input/regression/breathing-sign.ly | 6 +- input/regression/collisions.ly | 4 +- input/regression/non-empty-text.ly | 7 +- input/regression/stanza-number.ly | 2 +- lily/bar-check-iterator.cc | 68 + lily/collision.cc | 216 ++- lily/command-request.cc | 9 +- lily/dot-column-engraver.cc | 1 - lily/dot-column.cc | 6 +- lily/include/stem.hh | 1 + lily/include/timing-translator.hh | 3 - lily/parser.yy | 8 +- lily/span-bar.cc | 103 +- lily/stanza-number-engraver.cc | 2 +- lily/stem.cc | 59 +- lily/text-engraver.cc | 16 +- lily/timing-engraver.cc | 9 - lily/timing-translator.cc | 33 - ly/drumpitch.ly | 21 +- ly/german-chords.ly | 2 +- ly/property.ly | 15 +- make/out/lilypond.lsm | 8 +- make/out/lilypond.redhat.spec | 4 +- make/out/lilypond.suse.spec | 4 +- mf/GNUmakefile | 2 + mf/feta-eindelijk.mf | 54 +- mf/feta-generic.mf | 6 +- mf/feta-macros.mf | 26 +- mf/feta-test16.mf | 2 +- po/fr.po | 783 +++------- scm/grob-description.scm | 7 +- scm/translator-property-description.scm | 4 +- scripts/abc2ly.py | 2 +- scripts/etf2ly.py | 2 +- scripts/lilypond-book.py | 70 +- scripts/ly2dvi.py | 2 +- 59 files changed, 2579 insertions(+), 1049 deletions(-) create mode 100644 Documentation/bibliography/html-long.bst delete mode 100644 Documentation/windows/lily-miktex.sh delete mode 100644 Documentation/windows/lily-python.sh delete mode 100644 Documentation/windows/post-gs.sh delete mode 100644 Documentation/windows/post-lily.sh delete mode 100644 Documentation/windows/post-miktex.sh delete mode 100644 Documentation/windows/post-python.sh delete mode 100644 Documentation/windows/python-wrapper.sh delete mode 100644 Documentation/windows/tex-wrapper.sh create mode 100644 buildscripts/bib2html.py create mode 100644 input/no-notation/bar-check.ly create mode 100644 lily/bar-check-iterator.cc diff --git a/CHANGES b/CHANGES index a9ee54d0bb..569457d2e5 100644 --- a/CHANGES +++ b/CHANGES @@ -1,12 +1,29 @@ + +1.4.9.uu2 +========= + +* drum-pitch updates + +* Bugfix in German Chords (thanks Rune) + +* lilypond-book updates from 1.5 + +* dotsDown identifier + +* Resurrected bibliography stuff + +* Move bar checking into iterator so skip-typesetting can be used to +find failed bar-checks. + +* Between barlines span-bar patch, version from lily 1.5 + +* Bugfix: showStaffSwitch should be a voice property. + 1.4.9.jcn3 ========== * Really included .cvsignore. -* Included Han-Wen's uu1 windows fixes. - -* Bugfix: lilypond-profile.sh: append to GS_FONTPATH, GS_LIB. - * Added Cygwin setup.hint * Removed tex, python wrappers and postinstalls to go with Cywgin's @@ -16,8 +33,25 @@ * ly2dvi: Don't accept filenames with spaces (+ fix). -1.4.9 -===== +1.4.9.mb1 +========= + +* Documentation fix, papersize + +* Allow for font markup in stanza numbers. + +* Bugfix: textNonEmpty works again + +* \breathe: Use feta font comma by default + +1.4.9.hwn1 +========== + +* Various windows bugfixes + +* Backport of 1.5 collision code + +* Collision bugfix: do not merge whole notes. 1.4.8.moh2 ========== diff --git a/Documentation/bibliography/GNUmakefile b/Documentation/bibliography/GNUmakefile index 78e0c3c730..1e1ddfb782 100644 --- a/Documentation/bibliography/GNUmakefile +++ b/Documentation/bibliography/GNUmakefile @@ -3,19 +3,16 @@ depth=../.. OUT_BIB_FILES = $(addprefix $(outdir)/, $(BIB_FILES)) -BIB_FILES= $(wildcard *.bib) -EXTRA_DIST_FILES= $(BIB_FILES) +BIB_FILES= $(wildcard *.bib) + +EXTRA_DIST_FILES= $(BIB_FILES) $(wildcard *.bst) + STEPMAKE_TEMPLATES=tex documentation LOCALSTEPMAKE_TEMPLATES=lilypond ly -export BIBINPUTS:=$(shell pwd)//$(PATHSEP)$(BIBINPUTS) include $(depth)/make/stepmake.make -dvi: $(DVI_FILES) $(OUT_BIB_FILES) - -ps: $(PS_FILES) - # urg default: @@ -24,7 +21,7 @@ OUTGENHTMLS = $(addprefix $(outdir)/, $(GENHTMLS:%=%.html)) local-WWW: $(addprefix $(outdir)/, $(BIB_FILES:.bib=.html)) $(PYTHON) $(step-bindir)/ls-latex.py --title 'References on Music Notation' \ - $(YO_FILES) $(OUTYO_FILES:.yo=.latex) $(BIB_FILES) $(DOC_FILES) $(TEX_FILES) \ + $(BIB_FILES) $(DOC_FILES) $(TEX_FILES) \ | sed "s!$(outdir)/!!g" > $(outdir)/index.html $(outdir)/%.bib: %.bib @@ -33,7 +30,7 @@ $(outdir)/%.bib: %.bib $(MAKE) footify $(outdir)/%.html: %.bib - -$(BIBTEX2HTML) $(BIBTEX2HTML_FLAGS) + $(PYTHON) $(depth)/buildscripts/bib2html.py -o $@ $< $(footify) $@ local-clean: diff --git a/Documentation/bibliography/colorado.bib b/Documentation/bibliography/colorado.bib index 6d7cf51200..b9ac8df280 100644 --- a/Documentation/bibliography/colorado.bib +++ b/Documentation/bibliography/colorado.bib @@ -3,19 +3,16 @@ % AUTHOR=Alyssa Lamb (edited & converted to bibtex by HWN) % - -% TODO: fix the labelling. - -@Book {6, +@Book {jacob47:_music, 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}, publisher ={Oxford University Press}, note = {subject: Musical notation}, } -@Book {15, +@Book{brandt:_stand_chord_symbol_notat, author ={Carl Brandt and Clinton Roemer}, title = {Standardized Chord Symbol Notation}, address={Sherman Oaks, CA}, @@ -23,19 +20,19 @@ note ={subject: musical notation}, } -@Book {22, +@Book{johnson46:_how, author = {Johnson, Harold M}, - year = {1946}, + 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}, note = {subject: Musical notation --Handbooks, manuals}, } -@Book {31, +@Book{sadie90:_music_print_publis, title = {Music Printing & Publishing}, author ={Donald W. Krummel \& Stanley Sadie}, - year = {1990}, + year = 1990, publisher= {Macmillan Press}, note ={subject: musical notation}, } @@ -43,7 +40,7 @@ %series={The Norton/Grove Handbooks in Music.}, % publisher={W.W. Norton}, -@Book {40, +@Book{foss:_music_print, author={Foss, Hubert}, title = {Music Printing}, series = {Practical Printing and Binding}, @@ -52,15 +49,15 @@ note ={subject: musical notation}, } -@Book {48, +@Book{steele03:_earlies_englis_music_print, author = {Steele, Robert}, - year = {1903}, + year = 1903, title = {The Earliest English Music Printing}, address={London}, note= {subject: history of music printing and engraving}, } -@Book {54, +@Book{austin:_story_music_print, author={Austin, Ernest}, title = {The Story of Music Printing}, address={London}, @@ -71,7 +68,7 @@ -@Book {63, +@Book{?:_pictor_histor_music_print, author={?}, title = {Pictoral History of Music Printing}, address={Elhardt, Indiana}, @@ -80,9 +77,9 @@ } -@Book {77, +@Book{wintermitz55:_music_autog_montev_hindem, author = {Wintermitz, Emmanuel}, - year = {1955}, + year = 1955, title = {Musical Autographs from Monteverdi to Hindemith}, address={Princeton}, publisher={Princeton University Press}, @@ -91,16 +88,16 @@ } -@Book {92, +@Book{novello47:_some_accoun_method_music_print, author = {Novello, A}, - year = {1847}, + 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}, note={ subject: history of music printing and engraving}, } -@Book {100, +@Book{chrsander18:_sketc_histor_music, author={Chrsander, F.}, year={18??}, title={A Sketch of the HIstory of Music printing, from the 15th to the 16th century}, @@ -109,18 +106,18 @@ @Article {squire1897, author = {Squire, W}, - year = {1897}, + year = 1897, title = {Notes on Early Music Printing}, journal = {Bibliographica}, volume={iii}, - number={99}, + number=99, note={ subject: history of music printing and engraving}, } -@Article{113, +@Article{meyer35:_print_music, author = {Meyer, K. and O'Meara, J}, - year = {1935}, + year = 1935, title = {The Printing of Music, 1473-1934}, journal = {The Dolphin}, volume={ ii}, @@ -129,9 +126,9 @@ } %% 4th ver., -@Article {120, +@Article{pattison39:_notes_early_music_print, author = {Pattison, B}, - year = {1939}, + year = 1939, title = {Notes on Early Music Printing}, journal = {The Library}, note={subject: history of music printing and engraving}, @@ -139,9 +136,9 @@ pages={389-421}, } -@Book {136, +@Book{king64:_four_hundr_years_music_print, author = {King, H}, - year = {1964}, + year = 1964, title = {Four Hundred Years of Music Printing}, address={London}, note={ subject: history of music printing and engraving}, @@ -149,25 +146,25 @@ %(Rev.1961). -@Book{150, +@Book{deutsch46:_music_number, author={Deutsch, O.F.}, - year ={1946}, + year =1946, title = {Music Publishers' Numbers}, address={London}, note={ subject: history of music printing and engraving}, } -@Book {151, +@Book{marco62:_earlies_music_print_contin_europ, author = {Marco, G.A}, - year = {1962}, + year = 1962, title = {The Earliest Music Printers of Continental Europe: a Checklist of Facsimiles Illustrating Their Work}, address={Charlottesville, Virginia}, note={ subject: history of music printing and engraving}, } -@Article {158, +@Article{kinkeldey32:_music_and_music_print_incun, author = {Kinkeldey, O}, - year = {1932}, + year = 1932, title = {Music And Music Printing in Incunabula}, journal = {Papers of the Bibliographical Society of America}, volume={ xxvi}, @@ -175,52 +172,52 @@ note={ subject: history of music printing and engraving}, } -@Book {166, +@Book{oldman34:_collec_music_first_edition, author = {Oldman, C.B}, - year = {1934}, + year = 1934, title = {Collecting Musical First Editions}, address={London}, note={ subject: history of music printing and engraving}, } -@Book{170, +@Book{carter34:_new_paths_book_collec, author={Carter, J}, - year={1934}, + year=1934, title = {New Paths in Book Collecting}, address={London}, note={ subject: history of music printing and engraving}, } -@Book {179, +@Book{krummel58:_graph_analy_applic_early_americ_engrav_music, author={Krummel, D.W.}, - year={1958}, - month={9}, + year=1958, + month=9, title = {Graphic Analysis in Application to Early American Engraved Music}, journal = {Notes}, volume={xvi}, - pages={213}, + pages=213, note={ subject: history of music printing and engraving}, } -@Book {189, +@Book{krummel71:_oblon_format_early_music_books, author = {Krummel, D.W}, - year = {1971}, + year = 1971, title = {Oblong Format in Early Music Books}, journal = {The Library}, volume={5th ser., xxvi}, - pages={312}, + pages=312, note={ subject: history of music printing and engraving}, } -@Book {198, +@Book{king73:_anniv_music_print, author = {King, A.H}, - year = {1973}, + year = 1973, title = {The 50th Anniversary of Music Printing}, } -@Book {204, +@Book{rastall82:_wester, author={Rastall, Richard}, - year={1982}, + year=1982, title = {The notation of Western music : an introduction}, address={New York, N.Y.}, publisher={St. Martin's Press}, @@ -229,36 +226,36 @@ } -@Book {215, +@Book{tappolet47:_la_notat_music, author = {Tappolet, Willy}, - year = {1947}, + year = 1947, title = {La Notation Musicale}, address={Paris}, note={subject: general notation}, publisher={Neuch\^atel}, } -@Book {223, +@Book{williams03:_story_notat, author = {Williams, C.F. Abdy}, - year = {1903}, + year = 1903, title = {The Story of Notation}, address={New York}, publisher={Charles Scribner's Sons}, note={subject: general notation}, } -@Book {239, +@Book{apel53, author={Apel, Willi}, - year={1953}, + year=1953, title = {The notation of polyphonic music, 900-1600}, address={Cambridge, Mass}, institution={Mediaeval Academy of America}, note = {Musical notation}, } -@Book {248, +@Book{berger93:_mensur, author={Berger, Anna Maria Busse}, - year={1993}, + year=1993, title = {Mensuration and proportion signs : origins and evolution}, address={Oxford, England}, publisher={Clarendon Press}, @@ -267,9 +264,9 @@ note={subject: early notation}, } -@Book {258, +@Book{parrish57, author={Parrish, Carl}, - year={1957}, + year=1957, title = {The notation of medieval music}, address={New York}, publisher={Norton}, @@ -278,27 +275,27 @@ } -@Book {269, +@Book{parrish46:_notat_mediev_music, author = {Parrish, Carl}, - year = {1946}, + year = 1946, title = {The Notation of Medieval Music}, address={New York}, publisher={Carl Fischer, Inc.}, note={subject: early notation}, } -@Book {277, +@Book{patch49:_genes_music, author = {Patch, Harry}, - year = {1949}, + year = 1949, title = {Genesis of a Music}, address={Madison}, publisher={University of Wisconsin Press}, note={subject: early notation}, } -@Book {285, +@Book{cage69:_notat, author={Cage, John}, - year={1969}, + year=1969, title = {Notations}, address={New York}, publisher={Something Else Press}, @@ -308,18 +305,18 @@ Performance Arts, with text by 269 composers, but rearranged using chance operations.,V)} }, -@Book {295, +@Book{gaburo77:_notat, author = {Gaburo, Virginia}, - year = {1977}, + year = 1977, title = {Notation}, address={publisher= {Lingua Press}, publisher={La Jolla, California}}, note = {A Lecture about notation, new ideas about}, } -@Book {306, +@Book{risatti75:_new_music_vocab, author = {Risatti, Howard}, - year = {1975}, + year = 1975, title = {New Music Vocabulary}, address={Urbana, Illinois}, publisher={University of Illinois Press}, @@ -328,71 +325,71 @@ -@Book {325, +@Book{cowell30:_new_music_resour, author = {Cowell, Henry}, - year = {1930}, + year = 1930, title = {New Musical Resources}, address={New York}, publisher={Alfred A. Knopf, Inc.}, note={subject: 20th century notation}, } -@Article {333, +@Article{cowell27:_our_inadeq_notat, author = {Cowell, Henry}, - year = {1927}, + year = 1927, title = {Our Inadequate Notation}, journal = {Modern Music}, - volume={4}, - number={3}, + volume=4, + number=3, note={subject: 20th century notation}, } -@Book {342, +@Book{bowers92:_music_letter, author = {Bowers, Roger}, - year = {1992}, + year = 1992, title = {Music & Letters}, - volume={73}, - number={3}, + volume=73, + number=3, month={August}, pages={347(52)}, note={Some reflection upon notation and proportion in Monteverdi's mass and vespers}, } -@Book {353, +@Book{brainard92:_curren_music, author = {Brainard, Paul}, - year = {1992}, + year = 1992, title = {Current Musicology}, - number={50}, + 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, +@Book{monelle89:_compar_liter, author = {Monelle, Raymond}, - year = {1989}, + year = 1989, title = {Comparative Literature}, - volume={41}, number={3}, + volume=41, number=3, month={Summer}, pages={252(18)}, note={Music notation and the poetic foot}, } -@Book {373, +@Book{pinegar93:_curren_music, author = {Pinegar, Sandra}, - year = {1993}, + year = 1993, title = {Current Musicology}, - number={53}, + number=53, month={July}, pages={99(10)}, note={The seeds of notation and music paleography.}, } -@Book {382, +@Book{smith90:_curren_music, author = {Smith, Norman E}, - year = {1990}, + year = 1990, title = {Current Musicology}, number={45-47}, month={Jan-Dec}, @@ -400,12 +397,12 @@ note={The notation of fractio modi.}, } -@Book {392, +@Book{treitler92:_journ_music, author = {Treitler, Leo}, - year = {1992}, + year = 1992, title = {The Journal of Musicology}, - volume={10}, - number={2}, + volume=10, + number=2, month={Spring}, pages={131(61)}, @@ -415,12 +412,12 @@ Notational practice developed in medieval music to address the written tradition for chant which interacted with the unwritten vocal tradition.}, } -@Book {407, +@Book{west94:_music_letter, author = {West, M.L}, - year = {1994}, + year = 1994, title = {Music & Letters}, - volume={75}, - number={2}, + volume=75, + number=2, month={May}, pages={161(19)}, note={The Babylonian musical notation and the Hurrian melodic texts. @@ -429,22 +426,22 @@ } } -@Book {418, +@Book{brown86:_music_quart, author = {Brown, Earle}, - year = {1986}, + year = 1986, title = {Musical Quarterly}, - volume={72}, + volume=72, month={Spring}, pages={180(22)}, note={The notation and performance of new music.}, } -@Book {426, +@Book{eggleston94:_notes, author = {Eggleston, Suzanne}, - year = {1994}, + year = 1994, title = {Notes}, - volume={51}, - number={2}, + volume=51, + number=2, month={Dec}, pages={657(7)}, journal={New periodicals}, @@ -454,45 +451,44 @@ } -@Book {441, - +@Book{fuller89:_journ_music, author = {Fuller, David}, - year = {1989}, + year = 1989, title = {The Journal of Musicology}, - volume={7}, - number={1}, + volume=7, + number=1, month={Winter}, pages={21(8)}, note={ Notes and inegales unjoined: defending a definition. (written-out inequalities in music notation). }}, -@Book {454, +@Book{jones90:_persp_new_music, author = {Jones, David Evan}, - year = {1990}, + year = 1990, title = {Perspectives of New Music}, note={Speech extrapolated. (includes notation)} } -@Book {464, +@Book{lependorf89, author = {Lependorf, Jeffrey}, - year = {1989}, + year = 1989, journal={Perspectives of New Music}, - volume={27}, - number={2}, + volume=27, + title = {?}, + 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) }, + note={Contemporary notation for the shakuhachi: a primer for composers. (Tradition and Renewal in the Music of Japan) }, } -@Book {478, +@Book{rastall93:_music_letter, author = {Rastall, Richard}, - year = {1993}, + year = 1993, title = {Music & Letters}, - volume={74}, number={4}, + volume=74, number=4, month={November}, pages={639(2)}, @@ -516,12 +512,12 @@ title={Writing without representation, and unreadable notation.}, } -@Book {501, +@Book{hamel89, author = {Hamel, Keith A}, - year = {1989}, + year = 1989, journal = {Perspectives of New Music}, - volume={27}, - number={1}, + volume=27, + number=1, month={Winter}, pages={70(14)}, title={A design for music editing and printing software based on notational syntax}, diff --git a/Documentation/bibliography/computer-notation.bib b/Documentation/bibliography/computer-notation.bib index 00a3e9cd8d..b368d6fc30 100644 --- a/Documentation/bibliography/computer-notation.bib +++ b/Documentation/bibliography/computer-notation.bib @@ -534,18 +534,14 @@ surprising that LilyPond is more mature. pages={47--61}, } - - @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}, - HTML={http://www.guitartabs.cc/tabfaq.shtml} -% HTML={http://wabakimi.carleton.ca/~phacket2/guitar/tabfaq.html}, + url={http://www.guitartabs.cc/tabfaq.shtml}, } - @Article {niff-web, note = {Specs for NIFF, a reasonably comprehensive but binary (yuk) format for notation HWN}, @@ -557,7 +553,6 @@ surprising that LilyPond is more mature. ftp = {ftp://blackbox.cartah.washington.edu} } - @Article {smdl-web, author={unknown}, title = {SMDL, Standard Musical Description Language}, @@ -655,3 +650,12 @@ general rules, similar to\cite{parrish87-simultaneities}}, note = {Placement of accidentals crystallised in an enormous set of rules. Same remarks as for \cite{grover89-twovoices} applies} } + +@TechReport{droettboom00:_study_notat_descr_languag, + author = {Michael Droettboom}, + title = {Study of music Notation Description Languages}, + year = 2000, +url= {http://gigue.peabody.jhu.edu/~mdboom/format.pdf}, +annote ={Author compares GUIDO and lilypond. LilyPond wins on practical issues as usability and availability of tools, GUIDO wins on implementation simplicity.} +} + diff --git a/Documentation/bibliography/html-long.bst b/Documentation/bibliography/html-long.bst new file mode 100644 index 0000000000..85a6163586 --- /dev/null +++ b/Documentation/bibliography/html-long.bst @@ -0,0 +1,1373 @@ +% BibTeX bibliography style `html-long' +% spits out HTML-formatted bibliography in place of bbl output +% by David Kotz dfk@cs.dartmouth.edu +% $Id: html-long.bst,v 1.1 1999/03/11 22:00:27 dfk Exp dfk $ +% modified from +% BibTeX standard bibliography style `alpha' + % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09. + % Copyright (C) 1985, all rights reserved. + % Copying of this file is authorized only if either + % (1) you make absolutely no changes to your copy, including name, or + % (2) if you do make changes, you name it something other than + % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst. + % This restriction helps ensure that all standard styles are identical. + % The file btxbst.doc has the documentation for this style. + +% DFK added abstract, comment, earlier, keyword, later, URL +ENTRY + { abstract + address + author + booktitle + chapter + comment + earlier + edition + editor + howpublished + institution + journal + key + keyword + later + month + note + number + organization + pages + private + publisher + school + series + title + type + URL + volume + year + } + {} + { label extra.label sort.label } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +% DFK changed to use cite$ for the label +% DFK changed to HTML, and use URL to make cite key a link +FUNCTION {output.bibitem} +{ newline$ + URL empty$ + { "
" * cite$ * ":
" * write$ + } + { "
" * cite$ * ":
" * write$ + } + if$ + newline$ + "
" write$ newline$ + "" + before.all 'output.state := +} + +% DFK changed to HTML +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ + earlier empty$ + 'skip$ + { "
" write$ newline$ + "See also earlier version " * earlier * "." * write$ newline$ + } + if$ + later empty$ + 'skip$ + { "
" write$ newline$ + "See also later version " * later * "." * write$ newline$ + } + if$ + "
" write$ newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +% DFK changed to HTML +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "" swap$ * "" * } + if$ +} + +% DFK added for HTML strong emphasis +FUNCTION {strong} +{ duplicate$ empty$ + { pop$ "" } + { "" swap$ * "" * } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +% DFK added this, to strip {} and ~ from titles and authors +% It's not a great idea, because it will screw up in math mode and some +% special characters... but it makes most things much prettier. +FUNCTION {author.title.purify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "{" = + t #1 #1 substring$ "}" = or + 'skip$ + { t #1 #1 substring$ "~" = + { " " * } + { t #1 #1 substring$ * } + if$ + } + if$ + t #2 global.max$ substring$ 't := + } + while$ +} + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names author.title.purify } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { ", editors" * } + { ", editor" * } + if$ + } + if$ +} + +% DFK added strong, so it will be bold. +FUNCTION {format.title} +{ title empty$ + { "" } + { title "t" change.case$ author.title.purify strong } + if$ +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {format.date} +{ year empty$ + { month empty$ + { "" } + { "there's a month but no year in " cite$ * warning$ + month + } + if$ + } + { month empty$ + 'year + { month " " * year * } + if$ + } + if$ +} + +% DFK changed emphasize to strong +FUNCTION {format.btitle} +{ title author.title.purify strong +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { " " } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { "volume" volume tie.or.space.connect + series empty$ + 'skip$ + { " of " * series emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} + +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { output.state mid.sentence = + { "number" } + { "Number" } + if$ + number tie.or.space.connect + series empty$ + { "there's a number but no series in " cite$ * warning$ } + { " in " * series * } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { edition "l" change.case$ " edition" * } + { edition "t" change.case$ " edition" * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { "pages" pages n.dashify tie.or.space.connect } + { "page" pages tie.or.space.connect } + if$ + } + if$ +} + +FUNCTION {format.vol.num.pages} +{ volume field.or.null + number empty$ + 'skip$ + { "(" number * ")" * * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ":" * pages n.dashify * } + if$ + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { "chapter" } + { type "l" change.case$ } + if$ + chapter tie.or.space.connect + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { editor empty$ + { "In " booktitle emphasize * } + { "In " format.editors * ", " * booktitle emphasize * } + if$ + } + if$ +} + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { "Technical Report" } + 'type + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + if$ +} + +FUNCTION {format.article.crossref} +{ key empty$ + { journal empty$ + { "need key or journal for " cite$ * " to crossref " * crossref * + warning$ + "" + } + { "In {\em " journal * "\/}" * } + if$ + } + { "In " key * } + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {format.crossref.editor} +{ editor #1 "{vv~}{ll}" format.name$ + editor num.names$ duplicate$ + #2 > + { pop$ " et al." * } + { #2 < + 'skip$ + { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { " et al." * } + { " and " * editor #2 "{vv~}{ll}" format.name$ * } + if$ + } + if$ + } + if$ +} + +FUNCTION {format.book.crossref} +{ volume empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + "In " + } + { "Volume" volume tie.or.space.connect + " of " * + } + if$ + editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { series empty$ + { "need editor, key, or series for " cite$ * " to crossref " * + crossref * warning$ + "" * + } + { "{\em " * series * "\/}" * } + if$ + } + { key * } + if$ + } + { format.crossref.editor * } + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {format.incoll.inproc.crossref} +{ editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { booktitle empty$ + { "need editor, key, or booktitle for " cite$ * " to crossref " * + crossref * warning$ + "" + } + { "In {\em " booktitle * "\/}" * } + if$ + } + { "In " key * } + if$ + } + { "In " format.crossref.editor * } + if$ + " \cite{" * crossref * "}" * +} + + +% DFK added +% top of stack is the string we want to be a quoted paragraph +FUNCTION {format.quotedParagraph} +{ duplicate$ empty$ + { skip$ } + { "

" swap$ * "

" *} + if$ +} + + +% DFK added, to support comment, private, keyword, etc +% next-to-top is field name (eg, "Comment") +% top is field value (eg, value of comment) +% both are popped; resulting top is either empty, +% or string describing field +FUNCTION {format.dfkfield} +{ duplicate$ empty$ + { pop$ pop$ "" } + { swap$ + " " swap$ * ": " * swap$ * } + if$ +} + +% DFK added +FUNCTION {dfk.stuff} +{ new.block + "Abstract" abstract format.dfkfield format.quotedParagraph write$ newline$ + "Keyword" keyword format.dfkfield format.quotedParagraph write$ newline$ + "Comment" comment format.dfkfield format.quotedParagraph write$ newline$ +} + +% DFK: added a call to dfk.stuff in all entry-type functions below + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { journal emphasize "journal" output.check + format.vol.num.pages output + format.date "year" output.check + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {booklet} +{ output.bibitem + format.authors output + new.block + format.title "title" output.check + howpublished address new.block.checkb + howpublished output + address output + format.date output + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.chapter.pages "chapter and pages" output.check + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.chapter.pages output + new.sentence + publisher "publisher" output.check + address output + format.edition output + format.date "year" output.check + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.pages output + address empty$ + { organization publisher new.sentence.checkb + organization output + publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + new.sentence + organization output + publisher output + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + author empty$ + { organization empty$ + 'skip$ + { organization output.nonnull + address output + } + if$ + } + { format.authors output.nonnull } + if$ + new.block + format.btitle "title" output.check + author empty$ + { organization empty$ + { address new.block.checka + address output + } + 'skip$ + if$ + } + { organization address new.block.checkb + organization output + address output + } + if$ + format.edition output + format.date output + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + "Master's thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + title howpublished new.block.checkb + format.title output + howpublished new.block.checka + howpublished output + format.date output + new.block + note output + fin.entry + dfk.stuff + empty.misc.check +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + new.block + format.btitle "title" output.check + new.block + "PhD thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {proceedings} +{ output.bibitem + editor empty$ + { organization output } + { format.editors output.nonnull } + if$ + new.block + format.btitle "title" output.check + format.bvolume output + format.number.series output + address empty$ + { editor empty$ + { publisher new.sentence.checka } + { organization publisher new.sentence.checkb + organization output + } + if$ + publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + new.sentence + editor empty$ + 'skip$ + { organization output } + if$ + publisher output + } + if$ + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + format.tr.number output.nonnull + institution "institution" output.check + address output + format.date "year" output.check + new.block + note output + fin.entry + dfk.stuff +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + note "note" output.check + format.date output + fin.entry + dfk.stuff +} + +FUNCTION {default.type} { misc } + +MACRO {jan} {"January"} + +MACRO {feb} {"February"} + +MACRO {mar} {"March"} + +MACRO {apr} {"April"} + +MACRO {may} {"May"} + +MACRO {jun} {"June"} + +MACRO {jul} {"July"} + +MACRO {aug} {"August"} + +MACRO {sep} {"September"} + +MACRO {oct} {"October"} + +MACRO {nov} {"November"} + +MACRO {dec} {"December"} + +MACRO {acmcs} {"ACM Computing Surveys"} + +MACRO {acta} {"Acta Informatica"} + +MACRO {cacm} {"Communications of the ACM"} + +MACRO {ibmjrd} {"IBM Journal of Research and Development"} + +MACRO {ibmsj} {"IBM Systems Journal"} + +MACRO {ieeese} {"IEEE Transactions on Software Engineering"} + +MACRO {ieeetc} {"IEEE Transactions on Computers"} + +MACRO {ieeetcad} + {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} + +MACRO {ipl} {"Information Processing Letters"} + +MACRO {jacm} {"Journal of the ACM"} + +MACRO {jcss} {"Journal of Computer and System Sciences"} + +MACRO {scp} {"Science of Computer Programming"} + +MACRO {sicomp} {"SIAM Journal on Computing"} + +MACRO {tocs} {"ACM Transactions on Computer Systems"} + +MACRO {tods} {"ACM Transactions on Database Systems"} + +MACRO {tog} {"ACM Transactions on Graphics"} + +MACRO {toms} {"ACM Transactions on Mathematical Software"} + +MACRO {toois} {"ACM Transactions on Office Information Systems"} + +MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} + +MACRO {tcs} {"Theoretical Computer Science"} + +READ + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +INTEGERS { et.al.char.used } + +FUNCTION {initialize.et.al.char.used} +{ #0 'et.al.char.used := +} + +EXECUTE {initialize.et.al.char.used} + +FUNCTION {format.lab.names} +{ 's := + s num.names$ 'numnames := + numnames #1 > + { numnames #4 > + { #3 'namesleft := } + { numnames 'namesleft := } + if$ + #1 'nameptr := + "" + { namesleft #0 > } + { nameptr numnames = + { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { "{\etalchar{+}}" * + #1 'et.al.char.used := + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + numnames #4 > + { "{\etalchar{+}}" * + #1 'et.al.char.used := + } + 'skip$ + if$ + } + { s #1 "{v{}}{l{}}" format.name$ + duplicate$ text.length$ #2 < + { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } + 'skip$ + if$ + } + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.key.organization.label} +{ author empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + { key #3 text.prefix$ } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.organization.label} +{ editor empty$ + { key empty$ + { organization empty$ + { cite$ #1 #3 substring$ } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + { key #3 text.prefix$ } + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {calc.label} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "proceedings" = + 'editor.key.organization.label + { type$ "manual" = + 'author.key.organization.label + 'author.key.label + if$ + } + if$ + } + if$ + duplicate$ + year field.or.null purify$ #-1 #2 substring$ + * + 'label := + year field.or.null purify$ #-1 #4 substring$ + * + sortify 'sort.label := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { nameptr #1 > + { " " * } + 'skip$ + if$ + s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't := + nameptr numnames = t "others" = and + { "et al" * } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.organization.sort} +{ author empty$ + { organization empty$ + { key empty$ + { "to sort, need author, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.organization.sort} +{ editor empty$ + { organization empty$ + { key empty$ + { "to sort, need editor, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { editor sort.format.names } + if$ +} + +FUNCTION {presort} +{ calc.label + sort.label + " " + * + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.organization.sort + { type$ "manual" = + 'author.organization.sort + 'author.sort + if$ + } + if$ + } + if$ + * + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * +% DFK throw away stuff above and use cite$ for sort key + pop$ + cite$ + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} + +SORT + +STRINGS { longest.label last.sort.label next.extra } + +INTEGERS { longest.label.width last.extra.num } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #0 int.to.chr$ 'last.sort.label := + "" 'next.extra := + #0 'longest.label.width := + #0 'last.extra.num := +} + +FUNCTION {forward.pass} +{ last.sort.label sort.label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + sort.label 'last.sort.label := + } + if$ +} + +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + label extra.label * 'label := + label width$ longest.label.width > + { label 'longest.label := + label width$ 'longest.label.width := + } + 'skip$ + if$ + extra.label 'next.extra := +} + +EXECUTE {initialize.longest.label} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + +% DFK removed code about et.al.char +% DFK changed to HTML +FUNCTION {begin.bib} +{ "" write$ newline$ + " Bibliography " write$ newline$ + "" write$ newline$ + "
" write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +% DFK changed to HTML +FUNCTION {end.bib} +{ newline$ + "
" write$ newline$ + "" write$ newline$ + "" write$ newline$ +} + +EXECUTE {end.bib} diff --git a/Documentation/header.html.in b/Documentation/header.html.in index 7e33d9b002..27ca0159f7 100644 --- a/Documentation/header.html.in +++ b/Documentation/header.html.in @@ -50,7 +50,7 @@ which substitutes some @AT_VARIABLES@ as well. GNU/Linux binaries
- Windows binaries
+ Windows
Source code
diff --git a/Documentation/topdocs/index.tely b/Documentation/topdocs/index.tely index 5442ceb1fc..4c017920a0 100644 --- a/Documentation/topdocs/index.tely +++ b/Documentation/topdocs/index.tely @@ -42,14 +42,6 @@ Public License, so you can use, modify and redistribute the program with almost no restrictions. -is actively developed. Experimental, development releases have -an odd version number (e.g. 1.5.7), while stable releases have -(e.g. 1.4.7) should be unchanging and bug-free. Unless you have special -needs, you should use the stable version. You can access the websites of -the stable version @uref{http://lilypond.org/stable, here}. The website -of the development series are @uref{http://lilypond.org/development, -here} - LilyPond has a development version and a stable version. This webpage is for the @b{stable} release. This means that it won't change much, diff --git a/Documentation/user/refman.itely b/Documentation/user/refman.itely index 25e1c229de..c1ba7b0148 100644 --- a/Documentation/user/refman.itely +++ b/Documentation/user/refman.itely @@ -7,7 +7,10 @@ @c before saving changes -@ + +@c NOTE: if you're submitting a patch, please make sure that the doco +@c also compiles without errors. +@c thanks --hwn @macro refbugs @strong{BUGS} @@ -769,6 +772,7 @@ shortcuts. + @c . {Bar lines} @node Bar lines @subsection Bar lines @@ -1178,7 +1182,9 @@ Note that the skip does not produce any output, not even transparent output. @refbugs - Currently, only tick marks are supported, not comma style breath marks. + The current layout of the default comma style breath marks + could be improved and more optional symbols should be added to the + font. @c . {Tempo} @@ -2458,16 +2464,30 @@ automatically incremented. The grob is @internalsref{RehearsalMark} in @internalsref{Score} context. See @code{input/test/boxed-molecule.ly} if you need boxes around the marks. + + @node Bar numbers @subsection Bar numbers -Bar numbers (grob: @internalsref{BarNumber}) are printed at the start of the -line. See @code{input/test/boxed-molecule.ly} for boxed bar numbers. + +@cindex bar numbers +@cindex measure numbers +@cindex currentBarNumber + +Bar numbers are @internalsref{BarNumber} grobs. They are printed at the +start of the line. The number itself is a property that can be set by +modifying the @code{currentBarNumber} property, i.e. +@example + \property Score.currentBarNumber = #217 +@end example + +If you want boxed bar numbers, see the example file +@code{input/test/boxed-molecule.ly}. @refbugs It is not possible to have bar numbers printed at regular intervals -only. + @node Instrument names @subsection Instrument names @@ -3466,19 +3486,19 @@ details, see the file @file{scm/font.scm}. @cindex @code{papersize} To change the paper size, you must first set the -@code{papersize} variable at top level. Set it to +@code{papersize} paper variable variable. Set it to the strings @code{a4}, @code{letter}, or @code{legal}. After this specification, you must set the font as described above. If you want the default font, then use the 20 point font. @example - papersize = "a4" + \paper @{papersize = "a4" @} \include "paper16.ly" @end example The file @code{paper16.ly} will now include a file named @file{a4.ly}, which will set the paper variables @code{hsize} and @code{vsize} (used by -@code{ly2dvi}) +Lilypond and @code{ly2dvi}) @c . {Line break} @node Line break @@ -3910,6 +3930,16 @@ A bar check is entered using the bar symbol, @code{|}: \time 3/4 c2 e4 | g2. @end example +@cindex skipTypesetting + +Failed bar checks are most often caused by entering incorrect +durations. Incorrect durations often completely garble up the score, +especially if it is polyphonic, so you should start correcting the score +by scanning for failed bar checks and incorrect durations. To speed up +this process, you can use @code{skipTypesetting} (See @ref{Skipping +corrected music})). Bar + + @c . {Point and click} @node Point and click @subsection Point and click diff --git a/Documentation/windows/gs-profile.sh b/Documentation/windows/gs-profile.sh index 3e533b1f71..b3342f8baa 100644 --- a/Documentation/windows/gs-profile.sh +++ b/Documentation/windows/gs-profile.sh @@ -2,21 +2,17 @@ # /etc/profile.d/gs-profile.sh -- Check for GhostScript gs550="/usr/windows/gstools/gs5.50" -gs650="/usr/windows/gs/gs6.50" +gs650="/usr/windows/gs/gs6.50/bin" # Maybe read registry, but that may be hairy? # # $ regtool get \\HKLM\\Software\\CLASSES\\psfile\\shell\\open\\command\\ # "C:\GSTOOLS\GSVIEW\gsview32.exe" "%1" -## we set GS_LIB although the registry keys have been set. - if [ -e "$gs550/gswin32.exe" ]; then PATH="$gs550:$PATH" - GS_LIB="$gs550/lib:"${GS_LIB:=""} fi -if [ -e "$gs650/bin/gswin32.exe" ]; then - PATH="$gs650/bin:$PATH" - GS_LIB="$gs650/lib:"${GS_LIB:=""} +if [ -e "$gs650/gswin32.exe" ]; then + PATH="$gs650:$PATH" fi diff --git a/Documentation/windows/installing.texi b/Documentation/windows/installing.texi index 9103183970..daf83226b1 100644 --- a/Documentation/windows/installing.texi +++ b/Documentation/windows/installing.texi @@ -6,54 +6,40 @@ @end html +@html + +@end html + @node Top @top @chapter WINDOWS - Installing GNU LilyPond on Windows -This document explains how to install the binary release for windows -on a Microsoft Windows 95, 98, NT or 2000 machine. +This document explains how to install the binary release for windows on +a Microsoft Windows 95, 98, NT or 2000 machine. Please follow the +instructions carefully. If it doesn't work for you, please send a +bugreport, following the guidelines in the section on bugreports below. -This release is a free extra service of the developers to assist windows -users. When reporting problems, please keep in mind that we (the developers) -do not use Windows. In fact, if you know something about Windows, and -are able to write code, please send us code that works better (see -@uref{compiling.html,compiling}). @section Windows binary setup -Apart from LilyPond itself, you need Cygwin, GUILE, Python and a TeX -installation, but all this software be installed by running setup.exe: - -@table @asis -@item LilyPond -Download and run -@c let's do http, so that people read the README -@uref{http://www.lilypond.org/gnu-windows/setup.exe, setup.exe} -to install LilyPond. - -This will install the minimal set of cygwin tools needed to run -LilyPond. Make sure to install in the default place, @file{c:/cygwin}, -and install everything. - -As of version 1.3.150, you also have the option to install MiKTeX and -GSView from this installer, which is recommended. If you choose to -install these by hand (see below), make sure to install them -@strong{before} you install LilyPond, otherwise your LilyPond setup will -be broken. - -If you already have cygwin installed, don't worry: nothing will be -installed twice. To expand on this minimal set, click -@uref{http://sources.redhat.com/cygwin/setup.exe,here}, or visit a -Cygwin @uref{http://sources.redhat.com/cygwin/mirrors.html,mirror site}. -@end table +All the software you need is installed by downloading and running +@uref{http://www.lilypond.org/gnu-windows/setup.exe, setup.exe}. You +will be asked some questions. If you are unsure just click "Next". Do +not change the default install directory @file{c:/cygwin}. +This installs LilyPond, and Cygwin, GUILE, Python, MiKTeX and GSView. If +you already have some of that software under @file{c:/cygwin}, then +don't worry: nothing will be installed twice. -@section Windows running setup +If you want to install any of this software by hand, do this +@strong{before} you run @file{setup.exe}, otherwise your LilyPond setup +may not work. -If you're lucky, after running @file{setup.exe} you're all set up. +@section Testing LilyPond -Open a LilyPond shell (or any bash shell), and type +Open a LilyPond shell (To open a a lilypond shell, click the "GNU +LilyPond" icon), and type @quotation @example @@ -61,7 +47,7 @@ lilypond --help @end example @end quotation -If you don't see something similar to +You should see something similar to @quotation @example @@ -79,25 +65,84 @@ Options: @end example @end quotation -you should try adding @file{/usr/lilypond-x.y.z/bin} to your @var{PATH}, -do: +Then, prepare a file called @file{foo.ly}, by issuing +@example +notepad foo.ly +@end example +Enter the following into the file +@example -@quotation +\score @{ \notes @{ c4 ( ) c4 @} @} + +@end example +Close the file and save it. Run the following command a few times (at +least three times) until it says @code{PS output to `foo.ps', DVI output +to `foo.dvi'}. @example -PATH=/usr/lilypond-1.4.2/bin:$PATH + +ly2dvi -P foo + @end example -@end quotation +You can now view the file using the following command +@example + +gsview32 foo.ps -and try again. +@end example +If this works, then you can head to the +@uref{../../user/out-www/lilypond/Tutorial.html,Tutorial} to start using +LilyPond. -@subsection Trouble + + +@section Removing LilyPond + +Start @file{setup.exe}, click Next, select "Install from Local +Directory". Then click next until you reach "Select packages to +install". Click "View". Now, for every package, click on the recycle +icon until it says "Uninstall". Then, click Next. + +(If you find this too tedious, you can also simply remove +@file{c:/cygwin}. This also removes the @file{/home/} directories under +cygwin (i.e. @file{C:\CYGWIN\HOME}, so make sure that you bring +important files in safety first.) + +@section Troubleshooting For problems and solutions see @uref{http://lilypond.org/wiki?TroubleshootingWindows,Troubleshooting Windows} +@section Bugreports + +We can only help you with a problem if you give a full, detailed +bugreport. A bugreport includes + +@itemize @bullet +@item A @emph{precise} description of the problem. +@item A full description of your platform (machine type, operating +system) +@item All version numbers of relevant software you run. Specifically, we +want to see the output of the following commands: +@example + python --version + lilypond --version + ly2dvi --version + gswin32 --version +@end example +@item If ly2dvi fails, then please run it as follows and include the + output in the +@example + ly2dvi --verbose MY-FILE +@end example +@end itemize + +You can also check out +@uref{http://lilypond.org/wiki/?TroubleshootingWindows} for more +instructions on how to make a bug report. +@ignore @subsection Additional software LilyPond needs a number of software packages to be really useful. These @@ -141,11 +186,8 @@ Click @uref{ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/gs650/gs650w32.exe @uref{ftp://ftp.cs.wisc.edu/ghost/ghostgum,ftp.cs.wisc.edu}. or visit the @uref{http://www.cs.wisc.edu/~ghost/,Ghostscript, Ghostview and GSview site}. - @end table - - [TODO: @@ -154,9 +196,6 @@ emacs-on-cygwin setup. ] - -@ignore - guile -v Guile 1.4.1 @@ -188,4 +227,19 @@ in each corner. @end ignore +@ignore +@c irrelevant. + +If you want to install more of cygwnTo expand on this minimal set, +@section If you already have MikTeX, GSView or +If you already have cygwin installed, don't worry: nothing will be +installed twice. To expand on this minimal set, click +@uref{http://sources.redhat.com/cygwin/setup.exe,here}, or visit a +Cygwin @uref{http://sources.redhat.com/cygwin/mirrors.html,mirror site}. + + +This will install the minimal set of cygwin tools needed to run +LilyPond. Make sure to install in the default place, @file{c:/cygwin}, +and install everything. +@end ignore diff --git a/Documentation/windows/lily-gs.sh b/Documentation/windows/lily-gs.sh index e69de29bb2..c8c9bd4ad6 100644 --- a/Documentation/windows/lily-gs.sh +++ b/Documentation/windows/lily-gs.sh @@ -0,0 +1,43 @@ +#!@SHELL@ +# /etc/profile.d/lily-gs.sh -- Check for GhostScript and GSView + + +gs550="/usr/windows/gstools/gs5.50" +gs650="/usr/windows/gs/gs6.50/bin" + +gsview26="/usr/windows/gstools/gsview" +gsview36="/usr/windows/Ghostgum/GSview" + +# Maybe read registry, but that may be hairy? +# +# $ regtool get \\HKLM\\Software\\CLASSES\\psfile\\shell\\open\\command\\ +# "C:\GSTOOLS\GSVIEW\gsview32.exe" "%1" + + + +## we set GS_LIB although the registry keys have been set. +## + +if [ -e "$gs550/gswin32.exe" ]; then + PATH="$gs550:$PATH" + GS_LIB='C:\cygwin\usr\windows\gs\gs5.50\lib' +fi + +if [ -e "$gs650/gswin32.exe" ]; then + PATH="$gs650:$PATH" + GS_LIB='C:\cygwin\usr\windows\gs\gs6.50\lib' +fi + +if [ -e "$gsview26/gsview32.exe" ]; then + PATH="$gsview26:$PATH" +fi + +if [ -e "$gsview36/gsview32.exe" ]; then + PATH="$gsview36:$PATH" +fi + + + + +export GS_LIB +export PATH diff --git a/Documentation/windows/lily-miktex.sh b/Documentation/windows/lily-miktex.sh deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/Documentation/windows/lily-python.sh b/Documentation/windows/lily-python.sh deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/Documentation/windows/post-gs.sh b/Documentation/windows/post-gs.sh deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/Documentation/windows/post-lily.sh b/Documentation/windows/post-lily.sh deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/Documentation/windows/post-miktex.sh b/Documentation/windows/post-miktex.sh deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/Documentation/windows/post-python.sh b/Documentation/windows/post-python.sh deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/Documentation/windows/python-wrapper.sh b/Documentation/windows/python-wrapper.sh deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/Documentation/windows/tex-wrapper.sh b/Documentation/windows/tex-wrapper.sh deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/VERSION b/VERSION index c6aa1fa3ed..90f3301b7f 100644 --- a/VERSION +++ b/VERSION @@ -1,8 +1,8 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=4 -PATCH_LEVEL=9 -MY_PATCH_LEVEL=jcn4 +PATCH_LEVEL=10 +MY_PATCH_LEVEL= # use the above to send patches: MY_PATCH_LEVEL is always empty for a # released version. diff --git a/buildscripts/bib2html.py b/buildscripts/bib2html.py new file mode 100644 index 0000000000..37bc4694fd --- /dev/null +++ b/buildscripts/bib2html.py @@ -0,0 +1,86 @@ +#!@PYTHON@ +import os +import sys +import getopt +import tempfile +import string + +# usage: +def usage (): + print 'usage: %s [-s style] [-o ] BIBFILES...'; + + + +(options, files) = getopt.getopt(sys.argv[1:], 's:o:', []) + +output = 'bib.html' +style = 'long' +for (o,a) in options: + if o == '-h' or o == '--help': + usage () + sys.exit (0) + elif o == '-s' or o == '--style': + style = a + elif o == '-o' or o == '--output': + output = a + else: + raise 'unknown opt ', o + + +if style not in ['alpha','index','long','longp','long-pario','short','short-pario','split']: + sys.stderr.write ("Unknown style \`%s'\n" % style) + +tempfile = tempfile.mktemp ('bib2html') + +if not files: + usage () + sys.exit (2) + + +def strip_extension (f, ext): + (p, e) = os.path.splitext (f) + if e == ext: + e = '' + return p + e + +nf = [] +for f in files: + nf.append (strip_extension(f, '.bib')) + +files = string.join (nf,',') + +open(tempfile + '.aux', 'w').write (r''' +\relax +\citation{*} +\bibstyle{html-%(style)s} +\bibdata{%(files)s}''' % vars ()) + +cmd = "bibtex %s" % tempfile; + +sys.stdout.write ("Invoking `%s'\n" % cmd) +os.system (cmd) + + +#TODO: do tex -> html on output + +bbl =open (tempfile + '.bbl').read () + +open (output, 'w').write (bbl) + + +def cleanup (tempfile): + for a in ['aux','bbl', 'blg']: + os.unlink (tempfile + '.' + a) + +cleanup(tempfile) + + + + + + + + + + + diff --git a/buildscripts/lilypond-profile.sh b/buildscripts/lilypond-profile.sh index 335ca158a2..e23206fe27 100755 --- a/buildscripts/lilypond-profile.sh +++ b/buildscripts/lilypond-profile.sh @@ -12,7 +12,7 @@ datadir="@datadir@" # For direct ps output fonts -GS_FONTPATH="$datadir/afm:$datadir/pfa:"${GS_FONTPATH:=""} +GS_FONTPATH="$datadir/afm:$datadir/pfa" # For direct ps output: ps/lilyponddefs.ps GS_LIB="$datadir/ps:"${GS_LIB:=""} diff --git a/input/no-notation/bar-check.ly b/input/no-notation/bar-check.ly new file mode 100644 index 0000000000..c8a706a201 --- /dev/null +++ b/input/no-notation/bar-check.ly @@ -0,0 +1,12 @@ + +\header { + +texidoc = "skipTypesetting doesn't affect bar checks." + +} + +\score { \notes { + \property Score.skipTypesetting = ##t + c4 c4 + | + c4 c4 }} diff --git a/input/regression/breathing-sign.ly b/input/regression/breathing-sign.ly index 5ad99b6e82..a663a8a001 100644 --- a/input/regression/breathing-sign.ly +++ b/input/regression/breathing-sign.ly @@ -21,7 +21,11 @@ two measures all have the same distance from each other: < \context Voice = two { \stemDown es4 \breathe bes es } \context Voice = one { \stemUp g4 as g } > | - es8 d es f g4 \breathe | +% Change to wedge: + \property Voice.BreathingSign \override #'text = #"scripts-upbow" + es8 d es f g8 \breathe f | +% Revert to old layout: + \property Voice.BreathingSign \override #'molecule-callback = #Breathing_sign::brew_molecule es8 d \breathe es f g f | es2 r4 \bar "||" } diff --git a/input/regression/collisions.ly b/input/regression/collisions.ly index 89332dee95..560ec56141 100644 --- a/input/regression/collisions.ly +++ b/input/regression/collisions.ly @@ -13,8 +13,8 @@ Tested = "test the Collision resolution " twovoice = \context Staff \notes < - \context Voice=i { \stemDown c4 d e f g2~ g4 a [c8 d e f] c2| } - \context Voice=ii { \stemUp g4 f e g ~ g2 g2 c4 g4 g2 } + \context Voice=i { \stemDown e1 c4 d e f g2~ g4 a [c8 d e f] c2| } + \context Voice=ii { \stemUp e1 g4 f e g ~ g2 g2 c4 g4 g2 } > twovoicesteminvert = \context Staff \notes < diff --git a/input/regression/non-empty-text.ly b/input/regression/non-empty-text.ly index d3eee8bedc..43c81652d8 100644 --- a/input/regression/non-empty-text.ly +++ b/input/regression/non-empty-text.ly @@ -7,11 +7,12 @@ textNonEmpty is used to respect the horizontal size of text. " } \score { \notes { -\property Voice.TextScript \override #'no-spacing-rods = ##f -c4_"very wide and long text" c4 +c2_"very wide and long text" c | \break +\fatText % short for \property Voice.textNonEmpty = ##t +c_"very wide and long text" c } \paper { - linewidth = -1.0 + linewidth = 3.\cm } } diff --git a/input/regression/stanza-number.ly b/input/regression/stanza-number.ly index bd56fc5ad5..55991ad5a2 100644 --- a/input/regression/stanza-number.ly +++ b/input/regression/stanza-number.ly @@ -7,7 +7,7 @@ texidoc = "Stanza numbers may differ for the first and following systems." < \context LyricsVoice \lyrics { \property LyricsVoice . stanza = "first" -\property LyricsVoice . stz = "2nd" +\property LyricsVoice . stz = #'("2" (super "nd")) Foo1 Bar1 } \notes { c''1 \break c''1 }>} diff --git a/lily/bar-check-iterator.cc b/lily/bar-check-iterator.cc new file mode 100644 index 0000000000..2903547193 --- /dev/null +++ b/lily/bar-check-iterator.cc @@ -0,0 +1,68 @@ +/* + bar-check-iterator.cc -- implement Bar_check_iterator + + source file of the GNU LilyPond music typesetter + + (c) 2001 Han-Wen Nienhuys + + */ + +#include "simple-music-iterator.hh" +#include "command-request.hh" +#include "translator-group.hh" + +/* + Check bar checks. We do this outside the engravers so that you can + race through the score using skipTypesetting to correct durations. + */ +class Bar_check_iterator : Simple_music_iterator +{ +public: + VIRTUAL_COPY_CONS(Bar_check_iterator); + virtual void process (Moment); + Bar_check_iterator( ); + static SCM constructor_cxx_function; +}; + +IMPLEMENT_CTOR_CALLBACK (Bar_check_iterator); + +Music * get_barcheck () +{ + Music *bc = new Music; + bc->set_mus_property ("iterator-ctor", Bar_check_iterator::constructor_cxx_function); + return bc; +} + +Bar_check_iterator::Bar_check_iterator() +{ +} + +void +Bar_check_iterator::process (Moment m) +{ + if (m == Moment (0)) + { + Translator_group *tr = report_to_l (); + + SCM mp = tr->get_property (ly_symbol2scm ("measurePosition")); + SCM sync= tr->get_property (ly_symbol2scm ("barCheckNoSynchronize")); + + Moment * where =unsmob_moment (mp); + if (where && *where) + { + music_l_->origin ()->warning (_f ("barcheck failed at: %s", + where->str ())); + + + if (!to_boolean (sync)) + { + tr = tr->where_defined (ly_symbol2scm("measurePosition")); + Moment zero; + tr->set_property (ly_symbol2scm ("measurePosition"), zero.smobbed_copy ()); + } + } + } + Simple_music_iterator::process(m); + +} + diff --git a/lily/collision.cc b/lily/collision.cc index 5b6b815aa6..545b1712ff 100644 --- a/lily/collision.cc +++ b/lily/collision.cc @@ -13,7 +13,7 @@ #include "paper-def.hh" #include "axis-group-interface.hh" #include "item.hh" - +#include "stem.hh" MAKE_SCHEME_CALLBACK (Collision,force_shift_callback,2); @@ -37,6 +37,165 @@ Collision::force_shift_callback (SCM element_smob, SCM axis) return gh_double2scm (0.0); } + + + + +void +check_meshing_chords (Grob*me, + Drul_array< Array < Real > > *offsets, + Drul_array< Array < Slice > > const &extents, + Drul_array > const &clash_groups) + +{ + if (!extents[UP].size () || ! extents[DOWN].size ()) + return ; + + + Grob *cu =clash_groups[UP][0]; + Grob *cd =clash_groups[DOWN][0]; + + Grob * nu_l= Note_column::first_head (cu); + Grob * nd_l = Note_column::first_head (cd); + + + + /* + this case (distant half collide), + + | + x | + | x + | + + the noteheads may be closer than this case (close half collide) + + | + | + x + x + | + | + + */ + + bool close_half_collide = false; + bool distant_half_collide = false; + bool full_collide = false; + + /* + TODO: + + filter out the 'o's in this configuration, since they're no part + in the collision. + + | + x|o + x|o + x + + + */ + Array ups = Stem::note_head_positions (Note_column::stem_l (cu)); + Array dps = Stem::note_head_positions (Note_column::stem_l (cd)); + + /* + they're too far apart to collide. + + */ + + if (ups[0] > dps.top () + 1) + return ; + + bool touch = (ups[0] - dps.top () >= 0); + + bool merge_possible = (ups[0] >= dps[0]) && (ups.top () >= dps.top ()); + + merge_possible = merge_possible && + Rhythmic_head::balltype_i (nu_l) == Rhythmic_head::balltype_i (nd_l); + + merge_possible = merge_possible && Rhythmic_head::balltype_i (nu_l) != 0; + + if (!to_boolean (me->get_grob_property ("merge-differently-dotted"))) + merge_possible = merge_possible && Rhythmic_head::dot_count (nu_l) == Rhythmic_head::dot_count (nd_l); + + int i = 0, j=0; + while (i < ups.size () && j < dps.size ()) + { + if (abs (ups[i] - dps[j]) == 1) + { + merge_possible = false; + if (ups[i] > dps[j]) + close_half_collide = true; + else + distant_half_collide = true; + } + else if (ups[i]==dps[j]) + full_collide = true; + else if (ups[i] >dps[0] && ups[i] < dps.top ()) + merge_possible = false; + else if (dps[j] >ups[0] && dps[j] < ups.top ()) + merge_possible = false; + + if (ups[i] < dps[j]) + i++; + else if (ups[i] > dps[j]) + j++; + else + { + i++; + j++; + } + } + + Drul_array center_note_shifts; + center_note_shifts[LEFT] = 0.0; + center_note_shifts[RIGHT] = 0.0; + + + Real shift_amount = 1; + + if (touch) + shift_amount *= -1; + + /* + for full collisions, the right hand head may obscure dots, so + make sure the dotted heads go to the right. + */ + if ((Rhythmic_head::dot_count (nu_l) > Rhythmic_head::dot_count (nd_l) + && full_collide)) + shift_amount = 1; + + /* + TODO: these numbers are magic; should devise a set of grob props + to tune this behavior. */ + + if (merge_possible) + shift_amount *= 0.0; + else if (close_half_collide && !touch) + shift_amount *= 0.52; + else if (distant_half_collide && !touch) + shift_amount *= 0.4; + else if (distant_half_collide || close_half_collide || full_collide) + shift_amount *= 0.5; + /* + we're meshing. + */ + else if (Rhythmic_head::dot_count (nu_l) || Rhythmic_head::dot_count (nd_l)) + shift_amount *= 0.1; + else + shift_amount *= 0.25; + + Direction d = UP; + do + { + for (int i=0; i < clash_groups[d].size (); i++) + (*offsets)[d][i] += d * shift_amount; + } + while ((flip (&d))!= UP); +} + + /* TODO: make callback of this. @@ -146,6 +305,15 @@ Collision::automatic_shift (Grob *me) } } while ((flip (&d))!= UP); + + /* + do horizontal shifts of each direction + + | + x|| + x|| + x| + */ do { @@ -161,49 +329,13 @@ Collision::automatic_shift (Grob *me) } while ((flip (&d))!= UP); - /* - if the up and down version are close, and can not be merged, move - all of them again. */ - if (extents[UP].size () && extents[DOWN].size ()) - { - Grob *cu_l =clash_groups[UP][0]; - Grob *cd_l =clash_groups[DOWN][0]; + /* + Check if chords are meshing + */ - /* - TODO. - */ - Grob * nu_l= Note_column::first_head (cu_l); - Grob * nd_l = Note_column::first_head (cd_l); - - int downpos = Note_column::head_positions_interval (cd_l)[BIGGER]; - int uppos = Note_column::head_positions_interval (cu_l)[SMALLER]; - - bool merge = - downpos == uppos - && Rhythmic_head::balltype_i (nu_l) == Rhythmic_head::balltype_i (nd_l); - - - if (!to_boolean (me->get_grob_property ("merge-differently-dotted"))) - merge = merge && Rhythmic_head::dot_count (nu_l) == Rhythmic_head::dot_count (nd_l); - - /* - notes are close, but can not be merged. Shift - */ - if (abs (uppos - downpos) < 2 && !merge) - do - { - for (int i=0; i < clash_groups[d].size (); i++) - { - if(Rhythmic_head::dot_count (nu_l) > Rhythmic_head::dot_count (nd_l)) - offsets[d][i] += d * 0.5; - else - offsets[d][i] -= d * 0.5; - } - } - while ((flip (&d))!= UP); - } - + check_meshing_chords (me, &offsets, extents, clash_groups); + do { for (int i=0; i < clash_groups[d].size (); i++) diff --git a/lily/command-request.cc b/lily/command-request.cc index aac1ebe576..40db9473b0 100644 --- a/lily/command-request.cc +++ b/lily/command-request.cc @@ -10,13 +10,6 @@ #include "debug.hh" #include "musical-request.hh" -bool -Barcheck_req::do_equal_b (Request const *r) const -{ - Barcheck_req const*b = dynamic_cast (r); - return b; -} - Tempo_req::Tempo_req () { set_mus_property ("duration", Duration (2,0).smobbed_copy ()); @@ -101,7 +94,7 @@ Mark_req::do_equal_b (Request const * r) const ADD_MUSIC (Articulation_req); -ADD_MUSIC (Barcheck_req); + ADD_MUSIC (Break_req); ADD_MUSIC (Breathing_sign_req); ADD_MUSIC (Busy_playing_req); diff --git a/lily/dot-column-engraver.cc b/lily/dot-column-engraver.cc index 9dec1242c2..a3adcb527f 100644 --- a/lily/dot-column-engraver.cc +++ b/lily/dot-column-engraver.cc @@ -66,7 +66,6 @@ Dot_column_engraver::acknowledge_grob (Grob_info info) { dotcol_ = new Item (get_property ("DotColumn")); - Dot_column::set_interface (dotcol_); announce_grob (dotcol_, 0); } diff --git a/lily/dot-column.cc b/lily/dot-column.cc index 4ae84934f6..a0cdf524f3 100644 --- a/lily/dot-column.cc +++ b/lily/dot-column.cc @@ -16,11 +16,9 @@ #include "axis-group-interface.hh" #include "stem.hh" -void -Dot_column::set_interface (Grob* me) -{ -} + MAKE_SCHEME_CALLBACK (Dot_column,force_shift_callback,2); + SCM Dot_column::force_shift_callback (SCM element_smob, SCM axis) { diff --git a/lily/include/stem.hh b/lily/include/stem.hh index 40d26e6c13..40be13a826 100644 --- a/lily/include/stem.hh +++ b/lily/include/stem.hh @@ -35,6 +35,7 @@ public: static int heads_i (Grob *) ; static bool invisible_b (Grob *) ; static Interval head_positions (Grob *) ; + static Array note_head_positions (Grob *); static Real get_default_stem_end_position (Grob*me) ; static void position_noteheads (Grob*); static Real stem_end_position (Grob*) ; diff --git a/lily/include/timing-translator.hh b/lily/include/timing-translator.hh index 122f8d0d80..9c8667be1a 100644 --- a/lily/include/timing-translator.hh +++ b/lily/include/timing-translator.hh @@ -20,12 +20,9 @@ class Timing_translator : public virtual Translator public: VIRTUAL_COPY_CONS (Translator); Timing_translator (); - Music *check_; protected: virtual void initialize (); - virtual bool try_music (Music *req_l); - virtual void process_music (); virtual void stop_translation_timestep (); virtual void start_translation_timestep (); diff --git a/lily/parser.yy b/lily/parser.yy index 464826db50..0f92f6c5f2 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -1066,6 +1066,11 @@ command_element: $$-> set_spot (THIS->here_input ()); $1-> set_spot (THIS->here_input ()); } + | '|' { + extern Music * get_barcheck(); + $$ = get_barcheck (); + $$->set_spot (THIS->here_input ()); + } | BAR STRING { Music *t = set_property_music (ly_symbol2scm ("whichBar"), $2); @@ -1160,9 +1165,6 @@ shorthand_command_req: | hyphen_req { $$ = $1; } - | '|' { - $$ = new Barcheck_req; - } | '~' { $$ = new Tie_req; } diff --git a/lily/span-bar.cc b/lily/span-bar.cc index 476d028e2a..3597e6018d 100644 --- a/lily/span-bar.cc +++ b/lily/span-bar.cc @@ -42,44 +42,29 @@ MAKE_SCHEME_CALLBACK (Span_bar,brew_molecule,1); * lines is evaluated as 0, which results in a solid span bar line * with faulty y coordinate. */ + + +/* + This routine was originally by Juergen Reuter, but it was a on the + bulky side. Rewritten by Han-Wen. + */ SCM Span_bar::brew_molecule (SCM smobbed_me) { Grob *me = unsmob_grob (smobbed_me); SCM first_elt = me->get_grob_property ("elements"); - Grob *first_staff_bar = unsmob_grob (gh_car (first_elt)); - Grob *last_staff_bar = 0; - // compute common refpoint of elements & last_staff_bar + // compute common refpoint of elements Grob *refp = me; - for (SCM elts = first_elt; - gh_pair_p (elts); - elts = gh_cdr (elts)) - { - SCM smobbed_staff_bar = gh_car (elts); - Grob *staff_bar = unsmob_grob (smobbed_staff_bar); - refp = staff_bar->common_refpoint (refp, Y_AXIS); - last_staff_bar = staff_bar; - } - - // determine refp->extent, but ignore lyrics etc. above and below - Interval refp_extent; - refp_extent[LEFT] = - first_staff_bar->relative_coordinate (refp, (Axis)Y_AXIS) - - 0.5 * (first_staff_bar->extent (refp, Y_AXIS)[UP] - - first_staff_bar->extent (refp, Y_AXIS)[DOWN]); - refp_extent[RIGHT] = - last_staff_bar->relative_coordinate (refp, (Axis)Y_AXIS) + - 0.5 * (last_staff_bar->extent (refp, Y_AXIS)[UP] - - last_staff_bar->extent (refp, Y_AXIS)[DOWN]); - - // global yoffs correction (compensate centering around refp) - Real yoffs = 0.5 * (refp_extent[LEFT] - refp_extent[RIGHT]); - - // evaluate glyph - Span_bar::evaluate_glyph(me); - SCM glyph = me->get_grob_property (ly_symbol2scm ("glyph")); + for (SCM elts = first_elt; gh_pair_p (elts); elts = gh_cdr (elts)) + { + SCM smobbed_staff_bar = gh_car (elts); + Grob *staff_bar = unsmob_grob (smobbed_staff_bar); + refp = staff_bar->common_refpoint (refp, Y_AXIS); + } + Span_bar::evaluate_glyph(me); + SCM glyph = me->get_grob_property ("glyph"); /* glyph may not be a string, when ME is killed by Hara Kiri in @@ -87,48 +72,36 @@ Span_bar::brew_molecule (SCM smobbed_me) */ if (!gh_string_p (glyph)) return SCM_EOL; - + String glyph_str = ly_scm2string (glyph); // compose span_bar_mol - Molecule span_bar_mol = Molecule::Molecule (); - Interval prev_extent; - for (SCM elts = first_elt; - gh_pair_p (elts); - elts = gh_cdr (elts)) - { - SCM smobbed_staff_bar = gh_car (elts); - Grob *staff_bar = unsmob_grob (smobbed_staff_bar); - Interval ext = staff_bar->extent (refp, Y_AXIS); - - if (ext.empty_b ()) - continue; - - if (!prev_extent.empty_b ()) { + Molecule span_bar_mol; - Interval l; - l[LEFT] = prev_extent[UP]; - l[RIGHT] = ext[DOWN]; - - //SCM smobbed_staff_bar = gh_car (elts); - //Grob *staff_bar = unsmob_grob (smobbed_staff_bar); - SCM smobbed_interstaff_bar_molecule = - Bar::compound_barline (staff_bar, glyph_str, l.length()). - smobbed_copy (); - - Molecule *interstaff_bar_mol = - unsmob_molecule (smobbed_interstaff_bar_molecule); - - yoffs += prev_extent.length (); // skip staff bar - yoffs += 0.5 * (l[RIGHT] - l[LEFT]); // compensate interstaff bar centering - interstaff_bar_mol->translate_axis (yoffs, Y_AXIS); - yoffs += 0.5 * (l[RIGHT] - l[LEFT]); + Interval prev_extent; + for (SCM elts = first_elt; gh_pair_p (elts); elts = gh_cdr (elts)) + { + SCM smobbed_staff_bar = gh_car (elts); + Grob *staff_bar = unsmob_grob (smobbed_staff_bar); + Interval ext = staff_bar->extent (refp, Y_AXIS); + if (ext.empty_b ()) + continue; - span_bar_mol.add_molecule (*interstaff_bar_mol); + if (!prev_extent.empty_b ()) + { + Interval l(prev_extent [UP], + ext[DOWN]); + + Molecule interbar + = Bar::compound_barline (staff_bar, glyph_str, l.length()); + interbar.translate_axis (l.center (), Y_AXIS); + span_bar_mol.add_molecule (interbar); + } + prev_extent = ext; } - prev_extent = ext; - } + span_bar_mol.translate_axis (- me->relative_coordinate (refp, Y_AXIS), Y_AXIS); + return span_bar_mol.smobbed_copy (); } diff --git a/lily/stanza-number-engraver.cc b/lily/stanza-number-engraver.cc index 5d4b0a5e01..0c7c2b22e3 100644 --- a/lily/stanza-number-engraver.cc +++ b/lily/stanza-number-engraver.cc @@ -49,7 +49,7 @@ Stanza_number_engraver::acknowledge_grob (Grob_info i) // TODO - if (gh_string_p (s)) + if (gh_string_p (s) || gh_pair_p (s)) /* diff --git a/lily/stem.cc b/lily/stem.cc index 1e229e1f0f..84bf2f3faa 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -51,21 +51,6 @@ Stem::beam_count (Grob*me,Direction d) return 0; } -Interval -Stem::head_positions (Grob*me) -{ - if (!heads_i (me)) - { - Interval iv; - return iv; - } - - Drul_array e (extremal_heads (me)); - - return Interval (Staff_symbol_referencer::position_f (e[DOWN]), - Staff_symbol_referencer::position_f (e[UP])); -} - Real Stem::chord_start_f (Grob*me) @@ -196,6 +181,32 @@ Stem::extremal_heads (Grob*me) return exthead; } + +static int +icmp (int const &a, int const &b) +{ + return a-b; +} + +Array +Stem::note_head_positions (Grob *me) +{ + Array ps ; + for (SCM s = me->get_grob_property ("heads"); gh_pair_p (s); s = gh_cdr (s)) + { + Grob * n = unsmob_grob (gh_car (s)); + int p = int (Staff_symbol_referencer::position_f (n)); + + ps.push (p); + } + + ps.sort (icmp); + return ps; +} + + + + void Stem::add_head (Grob*me, Grob *n) { @@ -347,6 +358,24 @@ Stem::flag_i (Grob*me) return (gh_number_p (s)) ? gh_scm2int (s) : 2; } + + +Interval +Stem::head_positions (Grob*me) +{ + if (!heads_i (me)) + { + Interval iv; + return iv; + } + + Drul_array e (extremal_heads (me)); + + return Interval (Staff_symbol_referencer::position_f (e[DOWN]), + Staff_symbol_referencer::position_f (e[UP])); +} + + void Stem::position_noteheads (Grob*me) { diff --git a/lily/text-engraver.cc b/lily/text-engraver.cc index 7757efcfad..8f5e3b3c76 100644 --- a/lily/text-engraver.cc +++ b/lily/text-engraver.cc @@ -128,12 +128,16 @@ Text_engraver::create_grobs () text->set_grob_property ("text", r->get_mus_property ("text")); SCM nonempty = get_property ("textNonEmpty"); - if (to_boolean (nonempty)) - /* - empty text: signal that no rods should be applied. - */ - text->set_grob_property ("no-spacing-rods" , SCM_BOOL_F); - + if (gh_boolean_p (nonempty)) + if (gh_scm2bool (nonempty)) + /* + empty text: signal that no rods should be applied. + Default nowadays. + */ + text->set_grob_property ("no-spacing-rods" , SCM_BOOL_F); + else + text->set_grob_property ("no-spacing-rods" , SCM_BOOL_T); + announce_grob (text, r); texts_.push (text); } diff --git a/lily/timing-engraver.cc b/lily/timing-engraver.cc index ba462c1673..bbd807e5c1 100644 --- a/lily/timing-engraver.cc +++ b/lily/timing-engraver.cc @@ -20,7 +20,6 @@ class Timing_engraver : public Timing_translator, public Engraver protected: virtual void start_translation_timestep (); virtual void stop_translation_timestep (); - virtual void process_music (); public: VIRTUAL_COPY_CONS (Translator); }; @@ -61,11 +60,3 @@ Timing_engraver::stop_translation_timestep () } -/* - ugh. Translator doesn't do process_music (). - */ -void -Timing_engraver::process_music () -{ - Timing_translator::process_music (); -} diff --git a/lily/timing-translator.cc b/lily/timing-translator.cc index aa48828530..4b6758292f 100644 --- a/lily/timing-translator.cc +++ b/lily/timing-translator.cc @@ -14,42 +14,10 @@ #include "global-translator.hh" #include "multi-measure-rest.hh" -/* - TODO: change the rest of lily, so communication with - Timing_translator is only done through properties. This means the - class declaration can go here. */ - -bool -Timing_translator::try_music (Music*r) -{ - if (dynamic_cast (r)) - { - check_ = r; - return true; - } - return false; -} - -void -Timing_translator::process_music () -{ - if (check_ && measure_position ()) - { - check_->origin ()->warning (_f ("barcheck failed at: %s", - measure_position ().str ())); - Moment zero; - - if (!to_boolean (get_property ("barCheckNoSynchronize"))) - daddy_trans_l_->set_property ("measurePosition", zero.smobbed_copy ()); - } -} - void Timing_translator::stop_translation_timestep () { - check_ = 0; - Translator *t = this; Global_translator *global_l =0; do @@ -130,7 +98,6 @@ Timing_translator::measure_position () const void Timing_translator::start_translation_timestep () { - check_ =00; Translator *t = this; Global_translator *global_l =0; do diff --git a/ly/drumpitch.ly b/ly/drumpitch.ly index b55e8bb1f4..c70b18e0fe 100644 --- a/ly/drumpitch.ly +++ b/ly/drumpitch.ly @@ -47,7 +47,7 @@ (mutehiconga cghm ,(make-pitch 0 1 0)) (openhiconga cgho ,(make-pitch 0 1 1)) (hiconga cgh ,(make-pitch 0 2 -1)) - (openloconga cglo ,(make-pitch 0 1 2)) + (openloconga cglo ,(make-pitch 0 1 2)) (loconga cgl ,(make-pitch 0 2 0)) (hitimbale timh ,(make-pitch 0 3 0)) (lotimbale timl ,(make-pitch 0 3 1)) @@ -116,7 +116,7 @@ #(define timbales `( (losidestick cross ,#f ,(make-pitch -1 6 0)) (lotimbale default ,#f ,(make-pitch -1 6 0)) - (cowbell triangle ,#f ,(make-pitch 0 0 0)) + (cowbell triangle ,#f ,(make-pitch 0 2 0)) (hisidestick cross ,#f ,(make-pitch 0 1 0)) (hitimbale default ,#f ,(make-pitch 0 1 0)) )) @@ -137,20 +137,23 @@ (hibongo default ,#f ,(make-pitch 0 1 0)) )) -#(define guiro `( - (shortguiro default "staccato",(make-pitch 0 0 0)) - (longguiro default "tenuto" ,(make-pitch 0 0 0)) - (guiro default ,#f ,(make-pitch 0 0 0)) - )) -#(define triangle `( +#(define percussion `( (opentriangle cross "open" ,(make-pitch 0 0 0)) (mutetriangle cross "stopped" ,(make-pitch 0 0 0)) (triangle cross ,#f ,(make-pitch 0 0 0)) + (shortguiro default "staccato",(make-pitch 0 0 0)) + (longguiro default "tenuto" ,(make-pitch 0 0 0)) + (guiro default ,#f ,(make-pitch 0 0 0)) + (cowbell triangle ,#f ,(make-pitch 0 0 0)) + (claves default ,#f ,(make-pitch 0 0 0)) + (tambourine default ,#f ,(make-pitch 0 0 0)) + (cabasa cross ,#f ,(make-pitch 0 0 0)) + (maracas default ,#f ,(make-pitch 0 0 0)) + (handclap default ,#f ,(make-pitch 0 0 0)) )) - \pitchnames #(append (map (lambda (x) (cons (car x) (caddr x))) drum-pitch-names) (map (lambda (x) (cons (cadr x) (caddr x))) drum-pitch-names) diff --git a/ly/german-chords.ly b/ly/german-chords.ly index cb741eba14..1964278c65 100644 --- a/ly/german-chords.ly +++ b/ly/german-chords.ly @@ -14,7 +14,7 @@ (list 7 (+ (if german-Bb 0 1) (caddr pitch))) (cdr pitch) ))) - (cons + (list (list-ref '("C" "D" "E" "F" "G" "A" "H" "B") (car dopitch)) (accidental->text-super (cadr dopitch)) ) diff --git a/ly/property.ly b/ly/property.ly index 1ebe98c918..abea886454 100644 --- a/ly/property.ly +++ b/ly/property.ly @@ -18,6 +18,13 @@ tieUp = \property Voice.Tie \override #'direction = #1 tieDown = \property Voice.Tie \override #'direction = #-1 tieBoth = \property Voice.Tie \revert #'direction + +dotsUp = \property Voice.Dots \override #'direction = #1 +dotsDown = \property Voice.Dots \override #'direction = #-1 +dotsBoth = \property Voice.Dots \revert #'direction + + + dynamicUp = { \property Voice.DynamicText \override #'direction = #1 \property Voice.DynamicLineSpanner \override #'direction = #1 @@ -84,18 +91,21 @@ voiceOne = { \stemUp \slurUp \tieUp + \dotsUp } voiceTwo = { \stemDown \slurDown \tieDown + \dotsDown } voiceThree = { \stemUp \slurUp \tieUp + \dotsUp \shiftOn } @@ -103,6 +113,7 @@ voiceFour = { \stemDown \slurDown \tieDown + \dotsDown \shiftOn } @@ -147,8 +158,8 @@ autoBeamOn = \property Voice.noAutoBeaming = ##f emptyText = \property Voice.textNonEmpty = ##f fatText = \property Voice.textNonEmpty = ##t -showStaffSwitch = \property PianoStaff.followVoice = ##t -hideStaffSwitch = \property PianoStaff.followVoice = ##f +showStaffSwitch = \property Voice.followVoice = ##t +hideStaffSwitch = \property Voice.followVoice = ##f % To remove a Volta bracet or some other graphical object, diff --git a/make/out/lilypond.lsm b/make/out/lilypond.lsm index 67127499c7..a33184f58c 100644 --- a/make/out/lilypond.lsm +++ b/make/out/lilypond.lsm @@ -1,15 +1,15 @@ Begin3 Title: LilyPond -Version: 1.4.9 -Entered-date: 20NOV01 +Version: 1.4.10 +Entered-date: 29DEC01 Description: @BLURB@ Keywords: music notation typesetting midi fonts engraving Author: hanwen@cs.uu.nl (Han-Wen Nienhuys) janneke@gnu.org (Jan Nieuwenhuizen) Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys) Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert - 1000k lilypond-1.4.9.tar.gz + 1000k lilypond-1.4.10.tar.gz Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/ - 1000k lilypond-1.4.9.tar.gz + 1000k lilypond-1.4.10.tar.gz Copying-policy: GPL End diff --git a/make/out/lilypond.redhat.spec b/make/out/lilypond.redhat.spec index d98202de42..49c8993248 100644 --- a/make/out/lilypond.redhat.spec +++ b/make/out/lilypond.redhat.spec @@ -1,11 +1,11 @@ %define info yes Name: lilypond -Version: 1.4.9 +Version: 1.4.10 Release: 1 License: GPL Group: Applications/Publishing -Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.4.9.tar.gz +Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.4.10.tar.gz Summary: Create and print music notation URL: http://www.cs.uu.nl/~hanwen/lilypond BuildRoot: /tmp/lilypond-install diff --git a/make/out/lilypond.suse.spec b/make/out/lilypond.suse.spec index 41e5b2ccaa..d3475368a1 100644 --- a/make/out/lilypond.suse.spec +++ b/make/out/lilypond.suse.spec @@ -14,11 +14,11 @@ Distribution: SuSE Linux 7.0 (i386) Name: lilypond -Version: 1.4.9 +Version: 1.4.10 Release: 2 Copyright: GPL Group: Applications/Publishing -Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.4.9.tar.gz +Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.4.10.tar.gz # music notation software for.. ? Summary: A program for printing sheet music. URL: http://www.lilypond.org/ diff --git a/mf/GNUmakefile b/mf/GNUmakefile index 0c34abafe0..46156dedea 100644 --- a/mf/GNUmakefile +++ b/mf/GNUmakefile @@ -67,3 +67,5 @@ local-clean: rm -f *.tfm *.log + +out/feta-test16.dvi: feta-eindelijk.mf diff --git a/mf/feta-eindelijk.mf b/mf/feta-eindelijk.mf index fadde1ec0e..42fc2ccc00 100644 --- a/mf/feta-eindelijk.mf +++ b/mf/feta-eindelijk.mf @@ -27,13 +27,17 @@ save stem, ball_crook_stem, ball_crook_balldiam, flare; % stem#:=1/8*staff_space#; stem# = 1/5staff_space#; + +%% +%% DOCME: what is FLARE, what is STEM +%% % flare# = 2/3staff_space#; flare# = 2/3staff_space# - 1/8stafflinethickness#; define_pixels(stem,flare); ball_crook_stem = stem; -ball_crook_balldiam =flare; +ball_crook_balldiam = flare; save block_rest_y, block_rest_x; @@ -175,6 +179,54 @@ fet_beginchar("Quarter rest","2","quartrest"); fet_endchar; + +% +% Draw a (rest) crook, starting at thickness STEM in point A, +% ending a ball W to the left, diameter BALLDIAM +% ypart of the center of the ball is BALLDIAM/4 lower than ypart A +% + + +% +% TODO: this is rather ugly, the bulb is too circular, making for +% abrupt change in direction (z5r{right}), which gives a strange bend +% since y1r == y5r. +% +% Also, the crook-bulb change gives a sharp concave corner, probably not +% good either. +% + +def balled_crook(expr a, w, balldiam, stem) = +begingroup; + save x,y; + save valley_pen_angle; + + penpos1(balldiam/2,-90); + penpos2(balldiam/2,0); + penpos3(balldiam/2,90); + penpos4(balldiam/2,180); + x4r=xpart a-w; y3r=ypart a+balldiam/4; + x1l=x2l=x3l=x4l; + y1l=y2l=y3l=y4l; + valley_pen_angle := 250; +% valley_pen_angle := 247; +% x5l=x4r+9/8balldiam - 0.5 * stem * (xpart (dir(250))); + x5 =x4r+9/8balldiam; + + y5r=y1r; + penpos5(0.95 stem,valley_pen_angle); + + penpos6(stem,260); + x6l=xpart a; y6l=ypart a; + +% fill z1r{right} .. z2r .. z3r .. z4r .. z1r .. z5r +% .. z6r -- z6l .. z5l .. z1l .. z4l .. z3l .. z2l .. cycle; + penstroke z1e..z2e..z3e..z4e..z1e..z5e{right}..z6e; + penlabels(1,2,3,4,5,6); +endgroup; +enddef; + + def rest_crook(expr a, w) = balled_crook(a, w, ball_crook_balldiam, ball_crook_stem) enddef; diff --git a/mf/feta-generic.mf b/mf/feta-generic.mf index 391eb7f6be..7fb0a77dc6 100644 --- a/mf/feta-generic.mf +++ b/mf/feta-generic.mf @@ -38,11 +38,11 @@ if test = 0: input feta-custodes; else: % input feta-bolletjes; -& input feta-banier; -% input feta-eindelijk; +% input feta-banier; + input feta-eindelijk; % input feta-klef; % input feta-toevallig; - input feta-schrift; +% input feta-schrift; % input feta-haak; % %input feta-timesig; % input feta-pendaal; diff --git a/mf/feta-macros.mf b/mf/feta-macros.mf index 814c82a16d..5a3dccc517 100644 --- a/mf/feta-macros.mf +++ b/mf/feta-macros.mf @@ -10,7 +10,7 @@ if test>1: makegrid(0pt,0pt for i:=-4.8pt step .2pt until 4.8pt: ,i endfor) (0pt,0pt for i:=-4.8pt step .2pt until 4.8pt: ,i endfor); fi - enddef; +enddef; def treq = tracingequations := tracingonline := 1; @@ -168,30 +168,6 @@ def brush(expr a,w,b,v) = endgroup; enddef; -% -% Draw a (rest) crook, starting at thickness STEM in point A, -% ending a ball W to the left, diameter BALLDIAM -% ypart of the center of the ball is BALLDIAM/4 lower than ypart A -% -def balled_crook(expr a, w, balldiam, stem) = -begingroup; - save x,y; - penpos1(balldiam/2,-90); - penpos2(balldiam/2,0); - penpos3(balldiam/2,90); - penpos4(balldiam/2,180); - x4r=xpart a-w; y3r=ypart a+balldiam/4; - x1l=x2l=x3l=x4l; - y1l=y2l=y3l=y4l; - penpos5(stem,250); - x5=x4r+9/8balldiam; y5r=y1r; - penpos6(stem,260); - x6l=xpart a; y6l=ypart a; - penstroke z1e..z2e..z3e..z4e..z1e..z5e{right}..z6e; - penlabels(1,2,3,4,5,6); -endgroup; -enddef; - def y_mirror_char = currentpicture := currentpicture yscaled -1; set_char_box(charbp, charwd, charht, chardp); diff --git a/mf/feta-test16.mf b/mf/feta-test16.mf index 3d2ed3cea2..fca9e837ff 100644 --- a/mf/feta-test16.mf +++ b/mf/feta-test16.mf @@ -7,7 +7,7 @@ staffsize#:=16pt#; test:=1; % smoked cheese -% test := -1; +%test := -1; % dem piksels. diff --git a/po/fr.po b/po/fr.po index feffb80143..6c4ca25b63 100644 --- a/po/fr.po +++ b/po/fr.po @@ -1,74 +1,74 @@ -# it.po -- GNU LilyPond's french language file -# Laurent Martelli , 1998. +# Messages français pour lilypond. +# Copyright (C) 2001 Free Software Foundation, Inc. +# Michel Robitaille , 1996. # -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: lilypond 1.3.18\n" +"Project-Id-Version: lilypond 1.4.9\n" "POT-Creation-Date: 2001-09-09 17:30+0200\n" -"PO-Revision-Date: 1999-12-28 00:32 +1\n" -"Last-Translator: Laurent Martelli \n" -"Language-Team: \n" +"PO-Revision-Date: 2001-11-30 12:00-0500\n" +"Last-Translator: Michel Robitaille \n" +"Language-Team: French \n" "MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" #: ly2dvi.py:106 msgid "Generate .dvi with LaTeX for LilyPond" -msgstr "" +msgstr "Générer un fichier .dvi à l'aide de LaTeX pour LilyPond" #: data-file.cc:118 input.cc:85 ly2dvi.py:191 midi-parser.cc:100 mup2ly.py:93 #: update-lily.py:118 warn.cc:23 msgid "warning: " -msgstr "avertissement: " +msgstr "AVERTISSEMENT: " #: input.cc:90 ly2dvi.py:206 ly2dvi.py:639 ly2dvi.py:657 ly2dvi.py:848 #: mup2ly.py:98 mup2ly.py:188 update-lily.py:123 update-lily.py:211 warn.cc:9 #: warn.cc:17 msgid "error: " -msgstr "erreur: " +msgstr "Erreur: " #: ly2dvi.py:207 mup2ly.py:100 update-lily.py:125 -#, fuzzy msgid "Exiting ... " -msgstr "Ligne ..." +msgstr "Fin d'exécution... " #: ly2dvi.py:265 mup2ly.py:158 update-lily.py:183 -#, fuzzy, c-format +#, c-format msgid "Usage: %s [OPTION]... FILE" -msgstr "Usage: %s [OPTION... [FICHIER]" +msgstr "Usage: %s [OPTION]... FICHIER" #: ly2dvi.py:269 main.cc:120 main.cc:149 mup2ly.py:162 update-lily.py:187 msgid "Options:" -msgstr "Options: " +msgstr "Options:" #: ly2dvi.py:273 main.cc:124 main.cc:172 mup2ly.py:168 update-lily.py:191 -#, fuzzy, c-format +#, c-format msgid "Report bugs to %s" -msgstr "Rapporter les bugs " +msgstr "Rapporter toutes anomalies à %s" #: ly2dvi.py:306 mup2ly.py:185 update-lily.py:208 #, c-format msgid "Invoking `%s'" -msgstr "" +msgstr "Invocation de `%s'" #: ly2dvi.py:310 mup2ly.py:188 update-lily.py:211 #, c-format msgid "command exited with value %d" -msgstr "" +msgstr "fin de la commande avec l'état %d" #: ly2dvi.py:312 mup2ly.py:190 update-lily.py:213 msgid "(ignored)" -msgstr "" +msgstr "(ignoré)" #: ly2dvi.py:322 -#, fuzzy, c-format +#, c-format msgid "Cleaning %s..." -msgstr "Cration des voix..." +msgstr "Nettoyage de %s..." #: ly2dvi.py:337 mup2ly.py:214 update-lily.py:237 -#, fuzzy, c-format +#, c-format msgid "no such setting: %s" -msgstr "Pas d'instrument tel: `%s'" +msgstr "" #: ly2dvi.py:350 main.cc:113 msgid "write Makefile dependencies for every input file" @@ -80,26 +80,24 @@ msgstr "cette aide" #: ly2dvi.py:352 main.cc:111 main.cc:116 msgid "DIR" -msgstr "REP" +msgstr "RÉP" #: ly2dvi.py:352 -#, fuzzy msgid "add DIR to LilyPond's search path" -msgstr "ajoute REP au chemin de recherche" +msgstr "ajouter le RÉPERTOIRE au chemin de recherche de LilyPond" #: ly2dvi.py:353 #, c-format msgid "keep all output, and name the directory %s.dir" -msgstr "" +msgstr "conserver toutes les sortie et nommer le répertoire %s.dir" #: ly2dvi.py:354 msgid "don't run LilyPond" -msgstr "" +msgstr "ne pas exécuter LilyPond" #: ly2dvi.py:355 main.cc:114 -#, fuzzy msgid "produce MIDI output only" -msgstr "produit seulement la sortie MIDI" +msgstr "produire une sortie MIDI seulement" #: ly2dvi.py:356 ly2dvi.py:357 main.cc:99 main.cc:112 main.cc:115 msgid "FILE" @@ -107,23 +105,23 @@ msgstr "FICHIER" #: ly2dvi.py:356 msgid "write ouput to FILE" -msgstr "" +msgstr "produire la sortie dans le FICHIER" #: ly2dvi.py:357 msgid "find pfa fonts used in FILE" -msgstr "" +msgstr "repérer les fontes pfa utilisées dans le FICHIER" #: ly2dvi.py:359 msgid "generate PostScript output" -msgstr "" +msgstr "générer une sortie PostScript" #: ly2dvi.py:360 msgid "KEY=VAL" -msgstr "" +msgstr "CLÉ=VALEUR" #: ly2dvi.py:360 msgid "change global setting KEY to VAL" -msgstr "" +msgstr "modifier le paramètre globale de la CLÉ à VAL" #: ly2dvi.py:361 main.cc:119 mup2ly.py:1120 update-lily.py:255 msgid "verbose" @@ -131,36 +129,36 @@ msgstr "" #: ly2dvi.py:362 main.cc:105 main.cc:118 mup2ly.py:1121 update-lily.py:256 msgid "print version number" -msgstr "afficher le numro de version" +msgstr "afficher le numéro de version" #: ly2dvi.py:363 main.cc:107 main.cc:120 mup2ly.py:1122 update-lily.py:258 msgid "show warranty and copyright" msgstr "" #: ly2dvi.py:385 ly2dvi.py:580 ly2dvi.py:605 -#, fuzzy, c-format +#, c-format msgid "Running %s..." -msgstr "Cration des voix..." +msgstr "Exécution de %s..." #: ly2dvi.py:398 -#, fuzzy, c-format +#, c-format msgid "Analyzing %s..." -msgstr "Cration des voix..." +msgstr "Analyse de %s..." #: ly2dvi.py:454 #, c-format msgid "no lilypond output found for %s" -msgstr "" +msgstr "aucune sortie n'a été trouvée pour %s" #: ly2dvi.py:496 -#, fuzzy, c-format +#, c-format msgid "invalid value: %s" -msgstr "caractres illgal: `%c'" +msgstr "valeur invalide: %s" #: ly2dvi.py:639 -#, fuzzy, c-format +#, c-format msgid "not a PostScript file: `%s'" -msgstr "impossible d'ouvrir le fichier: `%s'" +msgstr "n'est pas un fichier PostScript: `%s'" #: ly2dvi.py:657 #, c-format @@ -168,42 +166,42 @@ msgid "getopt says: `%s'" msgstr "" #: ly2dvi.py:824 scores.cc:44 -#, fuzzy, c-format +#, c-format msgid "dependencies output to `%s'..." -msgstr "Sortie papier vers %s..." +msgstr "" #: ly2dvi.py:835 -#, fuzzy, c-format +#, c-format msgid "%s output to `%s'..." -msgstr "Sortie de Lily vers %s..." +msgstr "" #: includable-lexer.cc:49 lily-guile.cc:139 ly2dvi.py:837 #: midi-score-parser.cc:24 scores.cc:136 scores.cc:142 #, c-format msgid "can't find file: `%s'" -msgstr "ne peut pas trouver le fichier: `%s'" +msgstr "ne peut repérer le fichier: `%s'" #: ly2dvi.py:848 msgid "no files specified on command line." -msgstr "" +msgstr "aucun fichier spéficié sur la ligne de commande." #: mup2ly.py:51 msgid "Convert mup to ly" -msgstr "" +msgstr "Conversion de mup vers ly" #: mup2ly.py:166 #, c-format msgid "%s is far from completed. Not all constructs are recognised." -msgstr "" +msgstr "%s est loin d'être complet. Tous les construits n'ont pas été reconnus." #: mup2ly.py:964 -#, fuzzy, c-format +#, c-format msgid "no such context: %s" -msgstr "Pas d'instrument tel: `%s'" +msgstr "pas de tel contexte: %s" #: mup2ly.py:1115 msgid "debug" -msgstr "" +msgstr "débug" #: mup2ly.py:1116 msgid "define macro NAME [optional expansion EXP]" @@ -211,39 +209,39 @@ msgstr "" #: main.cc:115 mup2ly.py:1118 msgid "write output to FILE" -msgstr "" +msgstr "produire la sortie dans le FICHIER" #: mup2ly.py:1119 msgid "only pre-process" -msgstr "" +msgstr "pré-traitement seulement" #: mup2ly.py:1200 -#, fuzzy, c-format +#, c-format msgid "Processing `%s'..." -msgstr "Traitement..." +msgstr "Traitement de `%s'..." #: mup2ly.py:1219 -#, fuzzy, c-format +#, c-format msgid "Writing `%s'..." -msgstr "Ligne ..." +msgstr "Écriture de `%s'..." #: update-lily.py:51 msgid "Fetch and rebuild from latest source package" -msgstr "" +msgstr "Repérer et reconstruire depuis les sources du dernier package" #: update-lily.py:223 -#, fuzzy, c-format +#, c-format msgid "Cleaning `%s'..." -msgstr "Cration des voix..." +msgstr "Nettoyage de `%s'..." #: update-lily.py:243 #, c-format msgid "unpack and build in DIR [%s]" -msgstr "" +msgstr "dépaqueter et construire dan le RÉPERTOIRE [%s]" #: update-lily.py:244 msgid "execute COMMAND, subtitute:" -msgstr "" +msgstr "exécuter la COMMANDE de substitution:" #: update-lily.py:245 msgid "%b: build root" @@ -252,12 +250,11 @@ msgstr "" #: update-lily.py:246 #, c-format msgid "%n: package name" -msgstr "" +msgstr "%n: nom du package" #: update-lily.py:247 -#, fuzzy msgid "%r: release directory" -msgstr "ne peut pas trouver ou crer `%s'" +msgstr "" #: update-lily.py:248 msgid "%t: tarball" @@ -265,12 +262,12 @@ msgstr "" #: update-lily.py:249 msgid "%v: package version" -msgstr "" +msgstr "%v: version du package" #: update-lily.py:252 #, c-format msgid "keep all output, and name the directory %s" -msgstr "" +msgstr "conserver toutes les sorties et nommer le répertoire %s" #: update-lily.py:253 msgid "upon failure notify EMAIL[,EMAIL]" @@ -286,9 +283,9 @@ msgid "fetch and build URL [%s]" msgstr "" #: update-lily.py:365 -#, fuzzy, c-format +#, c-format msgid "Listing `%s'..." -msgstr "Ligne ..." +msgstr "Listage de `%s'..." #: update-lily.py:426 #, c-format @@ -301,29 +298,28 @@ msgid "relax, %s is up to date" msgstr "" #: update-lily.py:435 update-lily.py:448 -#, fuzzy, c-format +#, c-format msgid "Fetching `%s'..." -msgstr "Cration des voix..." +msgstr "" #: update-lily.py:457 -#, fuzzy, c-format +#, c-format msgid "Building `%s'..." -msgstr "Cration des voix..." +msgstr "" #: data-file.cc:54 -#, fuzzy msgid "EOF in a string" -msgstr "EOF dans une chane" +msgstr "Fin de fichier (EOF) dans la chaîne" #: getopt-long.cc:145 #, c-format msgid "option `%s' requires an argument" -msgstr "l'option `%s' requiert un argument" +msgstr "L'option `%s' requiert un argument" #: getopt-long.cc:149 #, c-format msgid "option `%s' doesn't allow an argument" -msgstr "l'option `%s' n'accepte pas d'argument" +msgstr "L'option `%s' ne requiert pas un argument" #: getopt-long.cc:153 #, c-format @@ -333,12 +329,11 @@ msgstr "option non reconnue: `%s'" #: getopt-long.cc:160 #, c-format msgid "invalid argument `%s' to option `%s'" -msgstr "argument `%s' invalide pour l'option `%s'" +msgstr "argument invalide `%s' pour l'option `%s'" #: input.cc:96 -#, fuzzy msgid "non fatal error: " -msgstr "Erreur non fatale: " +msgstr "pas une erreur fatale: " #: input.cc:104 source-file.cc:63 source-file.cc:156 msgid "position unknown" @@ -346,47 +341,45 @@ msgstr "position inconnue" #: mapped-file-storage.cc:74 msgid "can't map file" -msgstr "impossible de mapper le fichier" +msgstr "" #: lilypond-stream.cc:111 mapped-file-storage.cc:87 paper-stream.cc:45 #: scores.cc:48 simple-file-storage.cc:44 text-stream.cc:23 #, c-format msgid "can't open file: `%s'" -msgstr "impossible d'ouvrir le fichier: `%s'" +msgstr "ne peut ouvrir le fichier: `%s'" #: simple-file-storage.cc:56 -#, fuzzy, c-format +#, c-format msgid "Huh? Got %d, expected %d characters" -msgstr "Hein? %d caractres reus, %d attendus" +msgstr "" #: text-stream.cc:10 msgid "" -msgstr "" +msgstr "" #: warn.cc:36 -#, fuzzy msgid "programming error: " -msgstr "Erreur de programmation: " +msgstr "erreur de programmation: " #: warn.cc:36 -#, fuzzy msgid " (Continuing; cross thumbs)" -msgstr " (je continure; croisez les doigts)" +msgstr " (Poursuite; croisons les doigts)" #: afm.cc:59 -#, fuzzy, c-format +#, c-format msgid "can't find character number: %d" -msgstr "impossible de trouver le caractres numro %d" +msgstr "ne peut repérer le numéro de caractère: %d" #: afm.cc:74 -#, fuzzy, c-format +#, c-format msgid "can't find character called: `%s'" -msgstr "impossible de trouver le caractres appel `%s'" +msgstr "ne peut repérer le caractère portant le nom: `%s'" #: afm.cc:124 #, c-format msgid "Error parsing AFM file: `%s'" -msgstr "" +msgstr "Erreur d'analyse syntaxique du fichier AFM: `%s'" #: all-font-metrics.cc:95 #, c-format @@ -396,37 +389,34 @@ msgstr "" #: all-font-metrics.cc:97 #, c-format msgid "does not match: `%s'" -msgstr "" +msgstr "ne concorde pas: `%s'" #: all-font-metrics.cc:102 -msgid "" -" Rebuild all .afm files, and remove all .pk and .tfm files. Rerun with -V " -"to show font paths." +msgid " Rebuild all .afm files, and remove all .pk and .tfm files. Rerun with -V to show font paths." msgstr "" #: all-font-metrics.cc:167 -#, fuzzy, c-format +#, c-format msgid "can't find font: `%s'" -msgstr "ne peut pas trouver le fichier: `%s'" +msgstr "ne peut repérer la fonte: `%s'" #: all-font-metrics.cc:168 -#, fuzzy msgid "Loading default font" -msgstr "Impossible de trouver la police `%s', chargement la police par dfaut" +msgstr "Chargement de la fonte par défaut" #: all-font-metrics.cc:183 -#, fuzzy, c-format +#, c-format msgid "can't find default font: `%s'" -msgstr "Impossible de trouver la fonte par dfaut `%s', abandon." +msgstr "ne peut reprérer la fonte par défaut: `%s'" #: all-font-metrics.cc:184 includable-lexer.cc:51 scores.cc:137 -#, fuzzy, c-format +#, c-format msgid "(search path: `%s')" -msgstr "chemin de recherche= %s" +msgstr "(chemin de recherche: `%s')" #: all-font-metrics.cc:185 msgid "Giving up" -msgstr "" +msgstr "Abandon" #: auto-change-iterator.cc:43 change-iterator.cc:59 #: part-combine-music-iterator.cc:97 @@ -434,51 +424,46 @@ msgid "Can't switch translators, I'm there already" msgstr "" #: beam-engraver.cc:91 beam-engraver.cc:124 -#, fuzzy msgid "can't find start of beam" -msgstr "impossible de trouver le caractres numro %d" +msgstr "" #: beam-engraver.cc:158 -#, fuzzy msgid "already have a beam" -msgstr "Il y a dj une barre" +msgstr "" #: beam-engraver.cc:222 -#, fuzzy msgid "unterminated beam" -msgstr "Barre non termine" +msgstr "" #: beam-engraver.cc:260 chord-tremolo-engraver.cc:195 -#, fuzzy msgid "stem must have Rhythmic structure" -msgstr "La tige doit avoir une structure rythmique." +msgstr "" #: beam-engraver.cc:272 msgid "stem doesn't fit in beam" -msgstr "la tige ne rentre pas dans la barre" +msgstr "" #: beam-engraver.cc:273 msgid "beam was started here" -msgstr "la barre a commenc ici" +msgstr "" #: beam.cc:86 -#, fuzzy msgid "beam has less than two stems" -msgstr "barre avec moins de deux tiges" +msgstr "" #: beam.cc:637 msgid "weird beam vertical offset" msgstr "" #: break-align-item.cc:136 -#, fuzzy, c-format +#, c-format msgid "unknown spacing pair `%s', `%s'" -msgstr "traducteur inconnu `%s'" +msgstr "" #: change-iterator.cc:21 #, c-format msgid "can't change `%s' to `%s'" -msgstr "impossible de changer `%s' en `%s'" +msgstr "" #. #. We could change the current translator's id, but that would make @@ -505,41 +490,36 @@ msgstr "" #: chord.cc:376 #, c-format msgid "invalid subtraction: not part of chord: %s" -msgstr "soustraction invalide: ne fait pas partie de l'accord: %s" +msgstr "" #: chord.cc:405 #, c-format msgid "invalid inversion pitch: not part of chord: %s" -msgstr "renversement invalide: ne fait pas partie de l'accord: %s" +msgstr "" #: collision.cc:127 -#, fuzzy msgid "Too many clashing notecolumns. Ignoring them." -msgstr "Trop de colonnes de notes superposes. Je les ignore." +msgstr "" #: dimensions.cc:13 msgid "NaN" msgstr "" #: dynamic-engraver.cc:197 span-dynamic-performer.cc:86 -#, fuzzy msgid "can't find start of (de)crescendo" -msgstr "ne peut pas trouver un (de)crescendo la fin" +msgstr "" #: dynamic-engraver.cc:222 -#, fuzzy msgid "already have a crescendo" -msgstr "Il y a dj une barre" +msgstr "" #: dynamic-engraver.cc:223 -#, fuzzy msgid "already have a decrescendo" -msgstr "Il y a dj une barre" +msgstr "" #: dynamic-engraver.cc:317 -#, fuzzy msgid "unterminated (de)crescendo" -msgstr "crescendo non termin" +msgstr "" #: extender-engraver.cc:97 msgid "unterminated extender" @@ -562,9 +542,8 @@ msgid "No feasible line breaking found" msgstr "" #: grace-iterator.cc:43 -#, fuzzy msgid "no Grace context available" -msgstr "pas une vrai variable" +msgstr "" #: grace-position-engraver.cc:96 msgid "Unattached grace notes. Attaching to last musical column." @@ -575,9 +554,8 @@ msgid "decrescendo too small" msgstr "" #: hairpin.cc:94 -#, fuzzy msgid "crescendo too small" -msgstr "trop petit" +msgstr "" #: hyphen-engraver.cc:90 msgid "unterminated hyphen" @@ -616,7 +594,7 @@ msgstr "" #: line-of-score.cc:267 msgid "Calculating column positions..." -msgstr "Calcul de la position des colonnes..." +msgstr "" #: lyric-phrasing-engraver.cc:284 msgid "lyrics found without any matching notehead" @@ -646,23 +624,20 @@ msgid "use output format EXT (scm, ps, tex or as)" msgstr "" #: main.cc:110 -#, fuzzy msgid "FIELD" -msgstr "FICHIER" +msgstr "" #: main.cc:110 msgid "write header field to BASENAME.FIELD" msgstr "" #: main.cc:111 -#, fuzzy msgid "add DIR to search path" -msgstr "ajoute REP au chemin de recherche" +msgstr "" #: main.cc:112 -#, fuzzy msgid "use FILE as init file" -msgstr "utilise FICHIER comme fichier d'initialisation" +msgstr "" #: main.cc:116 msgid "prepend DIR to dependencies" @@ -676,29 +651,24 @@ msgstr "" #. No version number or newline here. It confuses help2man #. #: main.cc:137 -#, fuzzy, c-format +#, c-format msgid "Usage: %s [OPTION]... FILE..." -msgstr "Usage: %s [OPTION]... [FICHIER]..." +msgstr "Usage: %s [OPTION]... FICHIER..." #: main.cc:139 msgid "Typeset music and or play MIDI from FILE" msgstr "" #: main.cc:143 -#, fuzzy msgid "" "LilyPond is a music typesetter. It produces beautiful sheet music\n" "using a high level description file as input. LilyPond is part of \n" "the GNU Project.\n" msgstr "" -"Lilypond est un formateur de musique. Il produit de belle\n" -"paritions partir de description de gaut niveau en entre. Lilypond\n" -"fait partie du projet GNU.\n" #: main.cc:153 -#, fuzzy msgid "This binary was compiled with the following options:" -msgstr "Cet excutable a t compil avec les options suivantes:" +msgstr "Ce binaire a été compilé avec les options suivantes:" #: main.cc:56 main.cc:180 #, c-format @@ -711,12 +681,11 @@ msgstr "" #: main.cc:63 main.cc:187 main.cc:199 #, c-format msgid "Copyright (c) %s by" -msgstr "Copyright (c) %s par" +msgstr "Copyright (c) %s écrit par" #: main.cc:197 -#, fuzzy msgid "GNU LilyPond -- The music typesetter" -msgstr "GNU LilyPond -- Il tipografo musicale del progetto GNU" +msgstr "" #: main.cc:72 main.cc:205 msgid "" @@ -736,9 +705,9 @@ msgid "" msgstr "" #: midi-item.cc:139 -#, fuzzy, c-format +#, c-format msgid "no such instrument: `%s'" -msgstr "Pas d'instrument tel: `%s'" +msgstr "" #: midi-item.cc:228 msgid "silly duration" @@ -749,9 +718,9 @@ msgid "silly pitch" msgstr "" #: music-output-def.cc:115 -#, fuzzy, c-format +#, c-format msgid "can't find `%s' context" -msgstr "ne peut pas trouver `%s'" +msgstr "ne peut repérer le contexte `%s'" #: music.cc:232 msgid "ly_get_mus_property (): Not a Music" @@ -802,36 +771,35 @@ msgid "Junking request: `%s'" msgstr "" #: paper-def.cc:109 -#, fuzzy, c-format +#, c-format msgid "paper output to `%s'..." -msgstr "Sortie papier vers %s..." +msgstr "" #: lilypond-stream.cc:93 paper-outputter.cc:85 performance.cc:99 msgid ", at " -msgstr ", " +msgstr ", à " #: paper-outputter.cc:232 -#, fuzzy, c-format +#, c-format msgid "writing header field `%s' to `%s'..." -msgstr "impossible d'ouvrir le fichier: `%s'" +msgstr "" #: paper-score.cc:80 msgid "Preprocessing elements..." -msgstr "" +msgstr "Pré-traitement des éléments..." #: paper-score.cc:114 msgid "Outputting Score, defined at: " msgstr "" #: paper-stream.cc:41 -#, fuzzy, c-format +#, c-format msgid "can't create directory: `%s'" -msgstr "ne peut pas trouver ou crer `%s'" +msgstr "" #: paper-stream.cc:55 -#, fuzzy msgid "Error syncing file (disk full?)" -msgstr ")" +msgstr "" #. #. We could change the current translator's id, but that would make @@ -850,22 +818,20 @@ msgid "none of these in my family: `%s'" msgstr "" #: percent-repeat-engraver.cc:117 -#, fuzzy msgid "Don't know how to handle a percent repeat of this length." -msgstr "ne sait pas traiter les cls vides" +msgstr "" #: percent-repeat-iterator.cc:53 msgid "no one to print a percent" msgstr "" #: performance.cc:51 -#, fuzzy msgid "Track ... " -msgstr "Piste ... " +msgstr "" #: performance.cc:83 msgid "Creator: " -msgstr "Auteur: " +msgstr "Créateur: " #: performance.cc:113 #, c-format @@ -875,23 +841,21 @@ msgstr "" #: performance.cc:168 #, c-format msgid "MIDI output to `%s'..." -msgstr "" +msgstr "Sortie MIDI vers `%s'..." #: phrasing-slur-engraver.cc:119 -#, fuzzy msgid "unterminated phrasing slur" -msgstr "Barre non termine" +msgstr "" #: phrasing-slur-engraver.cc:134 -#, fuzzy msgid "can't find start of phrasing slur" -msgstr "impossible de trouver le caractres numro %d" +msgstr "" #: piano-pedal-engraver.cc:142 piano-pedal-engraver.cc:154 #: piano-pedal-performer.cc:87 -#, fuzzy, c-format +#, c-format msgid "can't find start of piano pedal: `%s'" -msgstr "ne peut pas trouver le fichier: `%s'" +msgstr "" #: pitch.cc:25 msgid "Pitch arguments out of range" @@ -905,9 +869,9 @@ msgid "" msgstr "" #: property-engraver.cc:145 -#, fuzzy, c-format +#, c-format msgid "Wrong type for property: %s, type: %s, value found: %s, type: %s" -msgstr "Mauvais type pour la valeur de la proprit" +msgstr "" #: rest-collision.cc:194 msgid "too many colliding rests" @@ -918,14 +882,13 @@ msgid "too many notes for rest collision" msgstr "" #: scm-option.cc:63 -#, fuzzy msgid "Scheme options:" -msgstr "Options: " +msgstr "" #: score-engraver.cc:188 -#, fuzzy, c-format +#, c-format msgid "unbound spanner `%s'" -msgstr "traducteur inconnu `%s'" +msgstr "" #: score.cc:78 msgid "Interpreting music..." @@ -941,18 +904,18 @@ msgid "Errors found/*, not processing score*/" msgstr "" #: score.cc:112 -#, fuzzy, c-format +#, c-format msgid "elapsed time: %.2f seconds" -msgstr "temps ecoul: %.2f secondes" +msgstr "" #: scores.cc:106 msgid "Score contains errors; will not process it" msgstr "" #: scores.cc:152 -#, fuzzy, c-format +#, c-format msgid "Now processing: `%s'" -msgstr "chane d'chappement inconnue: `\\%s'" +msgstr "" #: script-engraver.cc:66 #, c-format @@ -971,9 +934,8 @@ msgstr "" #. How to shut up this warning, when Voice_devnull_engraver has #. eaten start request? #: slur-engraver.cc:144 -#, fuzzy msgid "can't find start of slur" -msgstr "impossible de trouver le caractres numro %d" +msgstr "" #: slur.cc:48 msgid "Putting slur over rest. Ignoring." @@ -989,24 +951,20 @@ msgid "Adding note head to incompatible stem (type = %d)" msgstr "" #: stem.cc:116 -#, fuzzy msgid "Weird stem size; check for narrow beams" -msgstr "dcallage de barre bizarre, check your knees" +msgstr "" #: text-spanner-engraver.cc:94 -#, fuzzy msgid "can't find start of text spanner" -msgstr "impossible de trouver le caractres numro %d" +msgstr "" #: text-spanner-engraver.cc:114 -#, fuzzy msgid "already have a text spanner" -msgstr "Il y a dj une barre" +msgstr "" #: text-spanner-engraver.cc:169 -#, fuzzy msgid "unterminated text spanner" -msgstr "Barre non termine" +msgstr "" #: text-spanner.cc:121 msgid "Text_spanner too small" @@ -1023,19 +981,19 @@ msgid "%s: TFM file has %u parameters, which is more than the %u I can handle" msgstr "" #: tfm.cc:77 -#, fuzzy, c-format +#, c-format msgid "can't find ascii character: %d" -msgstr "ne peut pas trouver le caractre ascii `%d'" +msgstr "" #. How to shut up this warning, when no notes appeared because #. they were suicided by Thread_devnull_engraver? #: tie-engraver.cc:220 tie-performer.cc:173 msgid "No ties were created!" -msgstr "Aucune liaison n'a t cre" +msgstr "" #: tie-engraver.cc:240 msgid "lonely tie" -msgstr "liaison solitaire" +msgstr "" #: time-scaled-music-iterator.cc:25 msgid "no one to print a tuplet start bracket" @@ -1047,44 +1005,42 @@ msgid "barcheck failed at: %s" msgstr "" #: translator-ctors.cc:40 -#, fuzzy, c-format +#, c-format msgid "unknown translator: `%s'" -msgstr "traducteur inconnu `%s'" +msgstr "traducteur inconnu: `%s'" #: translator-def.cc:99 msgid "Program has no such type" msgstr "" #: translator-def.cc:105 -#, fuzzy, c-format +#, c-format msgid "Already contains: `%s'" -msgstr "Contient dj un `%s'" +msgstr "Contient déjà: `%s'" #: translator-def.cc:106 -#, fuzzy, c-format +#, c-format msgid "Not adding translator: `%s'" -msgstr "traducteur inconnu `%s'" +msgstr "" #: translator-def.cc:224 -#, fuzzy, c-format +#, c-format msgid "can't find: `%s'" -msgstr "ne peut pas trouver `%s'" +msgstr "" #: translator-group.cc:146 #, c-format msgid "can't find or create `%s' called `%s'" -msgstr "ne peut pas trouver ou crer `%s' nomm `%s'" +msgstr "" #: translator-group.cc:231 -#, fuzzy, c-format +#, c-format msgid "can't find or create: `%s'" -msgstr "ne peut pas trouver ou crer `%s'" +msgstr "" #: translator-group.cc:414 #, c-format -msgid "" -"Can't find property type-check for `%s'. Perhaps you made a typing error? " -"Doing assignment anyway." +msgid "Can't find property type-check for `%s'. Perhaps you made a typing error? Doing assignment anyway." msgstr "" #: translator-group.cc:428 @@ -1112,7 +1068,7 @@ msgstr "" #: parser.yy:121 #, c-format msgid "Expecting %d arguments" -msgstr "" +msgstr "%d arguements attendus" #: parser.yy:423 msgid "Identifier should have alphabetic characters only" @@ -1143,29 +1099,25 @@ msgid "Expecting musical-pitch value" msgstr "" #: parser.yy:1409 -#, fuzzy msgid "Must have duration object" -msgstr "Positionne la plus petite dure (?)" +msgstr "" #: parser.yy:1418 parser.yy:1426 -#, fuzzy msgid "Have to be in Lyric mode for lyrics" -msgstr "il fayt tre en mode Parole pour les paroles" +msgstr "" #: parser.yy:1579 parser.yy:1636 #, c-format msgid "not a duration: %d" -msgstr "pas une dure: %d" +msgstr "" #: parser.yy:1645 -#, fuzzy msgid "Have to be in Note mode for notes" -msgstr "il faut tre en mode Note pour les notes" +msgstr "" #: parser.yy:1731 -#, fuzzy msgid "Have to be in Chord mode for chords" -msgstr "il faut tre en mode Accord pour les accords" +msgstr "" #: parser.yy:1911 msgid "need integer number arg" @@ -1173,16 +1125,16 @@ msgstr "" #: lexer.ll:174 msgid "EOF found inside a comment" -msgstr "EOF trouv dans un commentaire" +msgstr "" #: lexer.ll:188 msgid "\\maininput disallowed outside init files" msgstr "" #: lexer.ll:212 -#, fuzzy, c-format +#, c-format msgid "wrong or undefined identifier: `%s'" -msgstr "indentifiant non dfini: `%s'" +msgstr "" #. backup rule #: lexer.ll:221 @@ -1192,7 +1144,7 @@ msgstr "" #. backup rule #: lexer.ll:243 lexer.ll:247 msgid "white expected" -msgstr "blanche attendue" +msgstr "" #: lexer.ll:256 msgid "Can't evaluate Scheme in safe mode" @@ -1203,24 +1155,24 @@ msgid "Brace found at end of lyric. Did you forget a space?" msgstr "" #: lexer.ll:457 -#, fuzzy, c-format +#, c-format msgid "invalid character: `%c'" -msgstr "caractres illgal: `%c'" +msgstr "" #: lexer.ll:538 #, c-format msgid "unknown escaped string: `\\%s'" -msgstr "chane d'chappement inconnue: `\\%s'" +msgstr "" #: lexer.ll:617 #, c-format msgid "Oldest supported input version: %s" -msgstr "Plus ancienne version supporte: %s" +msgstr "" #: lexer.ll:629 -#, fuzzy, c-format +#, c-format msgid "incorrect lilypond version: %s (%s, %s)" -msgstr "version de mudela incorrecte: %s (%s, %s)" +msgstr "version de lilypond incorrecte: %s (%s, %s)" #: lexer.ll:630 msgid "Consider converting the input with the convert-ly script" @@ -1232,14 +1184,14 @@ msgid "#32 in quarter: %d" msgstr "" #: lilypond-score.cc:108 -#, fuzzy, c-format +#, c-format msgid "LY output to `%s'..." -msgstr "Sortie de Lily vers %s..." +msgstr "" #: lilypond-score.cc:119 -#, fuzzy, c-format +#, c-format msgid "track %d:" -msgstr "piste " +msgstr "piste %d:" #: lilypond-score.cc:155 msgid "Processing..." @@ -1247,7 +1199,7 @@ msgstr "Traitement..." #: lilypond-score.cc:164 msgid "Creating voices..." -msgstr "Cration des voix..." +msgstr "Création des voies..." #: lilypond-score.cc:168 msgid "track " @@ -1255,15 +1207,15 @@ msgstr "piste " #: lilypond-score.cc:177 msgid "NOT Filtering tempo..." -msgstr "PAS de filtrage du tempo..." +msgstr "" #: lilypond-score.cc:186 msgid "NOT Quantifying columns..." -msgstr "PAS de quantification des colonnes..." +msgstr "" #: lilypond-score.cc:190 msgid "Quantifying columns..." -msgstr "Quantification des colonnes..." +msgstr "" #: lilypond-score.cc:223 msgid "Settling columns..." @@ -1274,28 +1226,27 @@ msgid "% MIDI copyright:" msgstr "" #: lilypond-staff.cc:210 -#, fuzzy msgid "% MIDI instrument:" -msgstr "Pas d'instrument tel: `%s'" +msgstr "" #: lilypond-stream.cc:37 #, c-format msgid "lily indent level: %d" -msgstr "Niveau d'indentation de lily: %d" +msgstr "" #. Maybe better not to translate these? #: lilypond-stream.cc:83 msgid "% Creator: " -msgstr "% Auteur: " +msgstr "" #: lilypond-stream.cc:88 msgid "% Automatically generated" -msgstr "% Gnr automatiquement" +msgstr "% automatiquement généré" #: lilypond-stream.cc:97 #, c-format msgid "% from input file: " -msgstr "% dal file di input: " +msgstr "" #: main.cc:94 msgid "write exact durations, e.g.: a4*385/384" @@ -1303,7 +1254,7 @@ msgstr "" #: main.cc:95 msgid "enable debugging output" -msgstr "" +msgstr "autoriser la mise au point de sortie" #: main.cc:97 msgid "ACC[:MINOR]" @@ -1318,9 +1269,8 @@ msgid "don't output tuplets, double dots or rests, smallest is 32" msgstr "" #: main.cc:99 -#, fuzzy msgid "set FILE as default output" -msgstr " -o, --output=FILE set FILE come output di default\n" +msgstr "" #: main.cc:100 msgid "don't output tuplets" @@ -1328,7 +1278,7 @@ msgstr "" #: main.cc:101 msgid "be quiet" -msgstr "mode silencieux" +msgstr "" #: main.cc:102 msgid "don't output rests or skips" @@ -1339,9 +1289,8 @@ msgid "DUR" msgstr "" #: main.cc:103 -#, fuzzy msgid "set smallest duration" -msgstr "Positionne la plus petite dure (?)" +msgstr "" #: main.cc:104 msgid "don't timestamp the output" @@ -1358,12 +1307,11 @@ msgstr "" #: main.cc:115 #, c-format msgid "Usage: %s [OPTION]... [FILE]" -msgstr "Usage: %s [OPTION... [FICHIER]" +msgstr "Usage: %s [OPTION]... [FICHIER]" #: main.cc:117 -#, fuzzy msgid "Translate MIDI-file to lilypond" -msgstr "Traduction du fichier MIDI en mudela" +msgstr "Traduire un fichier-MIDI en format lilypond" #: main.cc:131 #, c-format @@ -1392,31 +1340,27 @@ msgstr "" #: midi-parser.cc:64 msgid "zero length string encountered" -msgstr "chane de taille vide rencontre" +msgstr "" #: midi-score-parser.cc:44 msgid "MIDI header expected" -msgstr "entte MIDI attendue" +msgstr "En-tête MIDI attendue" #: midi-score-parser.cc:49 -#, fuzzy msgid "invalid header length" -msgstr "Taille d'entte invalide" +msgstr "longueur invalide d'en-tête" #: midi-score-parser.cc:52 -#, fuzzy msgid "invalid MIDI format" -msgstr "vnement MIDI invalide" +msgstr "format MIDI invalide" #: midi-score-parser.cc:55 -#, fuzzy msgid "invalid number of tracks" -msgstr "Nombre de pistes invalide" +msgstr "nombre invalide de pistes" #: midi-score-parser.cc:58 -#, fuzzy msgid "can't handle non-metrical time" -msgstr "temps non mtrique" +msgstr "" #: midi-track-parser.cc:68 #, c-format @@ -1425,15 +1369,15 @@ msgstr "" #: midi-track-parser.cc:124 msgid "invalid running status" -msgstr "" +msgstr "état d'exécution invalide" #: midi-track-parser.cc:328 msgid "unimplemented MIDI meta-event" -msgstr "meta-vnement MIDI non implment" +msgstr "méta-événement MIDI non implanté" #: midi-track-parser.cc:333 msgid "invalid MIDI event" -msgstr "vnement MIDI invalide" +msgstr "événement MIDI invalide" #: midi-track-parser.cc:348 msgid "MIDI track expected" @@ -1441,275 +1385,4 @@ msgstr "piste MIDI attendue" #: midi-track-parser.cc:353 msgid "invalid track length" -msgstr "taille de piste invalide" - -#, fuzzy -#~ msgid "Fetching `%'s..." -#~ msgstr "Cration des voix..." - -#, fuzzy -#~ msgid "Lily output to %s..." -#~ msgstr "Sortie de Lily vers %s..." - -#~ msgid "Wrong type for property value" -#~ msgstr "Mauvais type pour la valeur de la proprit" - -#, fuzzy -#~ msgid "not enough fields in Dstream init" -#~ msgstr "Pas assez de champs dans l'initialisation de Dstream." - -#, fuzzy -#~ msgid "floating point exception" -#~ msgstr "Exceptions de virgule flottante" - -#, fuzzy -#~ msgid "can't set mem-checking!" -#~ msgstr "impossible de positionner mem-checking" - -#, fuzzy -#~ msgid "Dependency file left in `%s'" -#~ msgstr "impossible d'ouvrir le fichier: `%s'" - -#, fuzzy -#~ msgid "Report bugs to bug-gnu-music@gnu.org" -#~ msgstr "Rapporter les bugs " - -#, fuzzy -#~ msgid "Usage: ly2dvi [OPTION]... FILE\n" -#~ msgstr "Usage: %s [OPTION... [FICHIER]" - -#, fuzzy -#~ msgid "wrong identifier type, expected: `%s'" -#~ msgstr "Mauvais type d'indentifiant: " - -#~ msgid "Automatically generated" -#~ msgstr "Gnr automatiquement" - -#, fuzzy -#~ msgid "Wrong type for property" -#~ msgstr "Mauvais type pour la valeur de la proprit" - -#, fuzzy -#~ msgid "unknown clef type" -#~ msgstr "type de cl inconnu" - -#~ msgid "Aborting" -#~ msgstr "Annulation" - -#, fuzzy -#~ msgid "lost in time:" -#~ msgstr "perdu dans le temps" - -#, fuzzy -#~ msgid "No key name, assuming `C'" -#~ msgstr "Pas de nom de cl: Do assum" - -#, fuzzy -#~ msgid "out of tune:" -#~ msgstr "hors de la tonalit" - -#~ msgid "unknown paper variable: `%s'" -#~ msgstr "variable papier inconnue: `%s'" - -#~ msgid "not a real variable" -#~ msgstr "pas une vrai variable" - -#~ msgid "Debug output disabled. Compiled with NPRINT." -#~ msgstr "Messages de deboggage dsactivs. Compil avec NPRINT." - -#~ msgid "No Beam to end" -#~ msgstr "Pas de barre la fin (No beam to end)" - -#~ msgid "No beam to end" -#~ msgstr "Pas de barre la fin (No beam to end)" - -#~ msgid "0 lines" -#~ msgstr "0 ligne" - -#~ msgid "1 line (of %.0f columns)" -#~ msgstr "1 ligne (de %.0f colonnes)" - -#~ msgid "%d lines (with an average of %.1f columns)" -#~ msgstr "%d lignes (avec une moyenne de %.f colonnes)" - -#~ msgid "score does not have any columns" -#~ msgstr "la partition n'a aucune colonne" - -#, fuzzy -#~ msgid "approximated %s" -#~ msgstr "approximativement %s" - -#, fuzzy -#~ msgid "calculated %s exactly" -#~ msgstr "calcul %s exactement" - -#~ msgid "No abbreviation beam to end" -#~ msgstr "Pas de barre d'abrviation la fin" - -#~ msgid "Already have an abbreviation beam" -#~ msgstr "Il y a dj une barre d'abrviation" - -#~ msgid "Unfinished abbreviation beam" -#~ msgstr "Barre d'abrviation non termine" - -#~ msgid "Too many crescendi here" -#~ msgstr "Trop de crescendi ici" - -#~ msgid "%s expected" -#~ msgstr "%s attendu" - -#~ msgid "Can not find file `%s'" -#~ msgstr "Ne peut pas trouver le fichier `%s'" - -#~ msgid "can't find" -#~ msgstr "pas trouv" - -#~ msgid "Can't open `%s'\n" -#~ msgstr "Ne peut pas ouvrir `%s'\n" - -#~ msgid "Search path %s\n" -#~ msgstr "Chemin de recherche %s\n" - -#~ msgid " elements. " -#~ msgstr " lments. " - -#~ msgid "time: %.2f seconds" -#~ msgstr "dure: %.2f secondes" - -#~ msgid "cadenza" -#~ msgstr "cadence" - -#~ msgid "partial measure must be non-negative" -#~ msgstr "mesure partielle ne peut pas tre ngative" - -#~ msgid "partial measure too large" -#~ msgstr "mesure partielle trop grande" - -#~ msgid "Will ignore \\relative for transposed music" -#~ msgstr "\\relative sera ignor pour la musique transpose" - -#~ msgid "ugh, this measure is too long" -#~ msgstr "oops, cette mesure est trop longue" - -#~ msgid "breakpoint: %d" -#~ msgstr "point d'arrt: %d" - -#~ msgid "generating stupido solution" -#~ msgstr "gnration de solutions stupides" - -#~ msgid "More than one music block" -#~ msgstr "Plus d'un bloc de musique" - -#~ msgid "can't abbreviate" -#~ msgstr "ne peut pas abrger" - -#~ msgid "Invalid midi format" -#~ msgstr "Format MIDI invalide" - -#~ msgid "can't handle %s" -#~ msgstr "ne peut pas traiter %s" - -#~ msgid "Parsing...\n" -#~ msgstr "Analyse...\n" - -#, fuzzy -#~ msgid "enable debugging output " -#~ msgstr " -D, --debug abilita l'output di debugging\n" - -#, fuzzy -#~ msgid "don't timestamp the output " -#~ msgstr "" -#~ " -T, --no-timestamps non inserisce marcatori temporali nell'output\n" - -#~ msgid " -a, --about about LilyPond\n" -#~ msgstr " -a, --about cos' LilyPond\n" - -#~ msgid " -h, --help this help\n" -#~ msgstr " -h, --help questo help\n" - -#~ msgid " -f, --output-format=X use output format X\n" -#~ msgstr " -f, --output-format=X usa il formato dell'ouput X\n" - -#~ msgid " -o, --output=FILE set FILE as default output base\n" -#~ msgstr "" -#~ " -o, --output=FILE indica FILE come base di default per l'output\n" - -#~ msgid " -V, --ignore-version ignore mudela version\n" -#~ msgstr " -V, --ignore-version ignora la versione di mudela\n" - -#~ msgid "GNU LilyPond is Free software, see --warranty" -#~ msgstr "GNU LilyPond Free software, vedi --warranty" - -#~ msgid " -D, --debug enable debugging output\n" -#~ msgstr " -D, --debug abilita l'output di debugging\n" - -#, fuzzy -#~ msgid " -p, --no-tuplets assume no tuplets\n" -#~ msgstr " -p, --no-plets assume che non ci siano gruppetti\n" - -#~ msgid " -q, --quiet be quiet\n" -#~ msgstr " -q, --quiet sii silenzioso\n" - -#~ msgid "" -#~ " -s, --smallest=N assume no shorter (reciprocal) durations than N\n" -#~ msgstr "" -#~ " -s, --smallest=N assume che non ci siano durate (reciproche) " -#~ "inferiori a N\n" - -#~ msgid " -v, --verbose be verbose\n" -#~ msgstr " -v, --verbose sii loquace\n" - -#, fuzzy -#~ msgid "Midi2ly, translate midi to mudela" -#~ msgstr "Mi2mu, tradice midi in mudela" - -#~ msgid "of" -#~ msgstr "de" - -#~ msgid "please fix me" -#~ msgstr "corrigez moi, s'il vous plait" - -#~ msgid "stem at %s doesn't fit in beam" -#~ msgstr "Queue %s ne rentre pas dans la barre" - -#~ msgid "No stem direction set. Ignoring column in clash." -#~ msgstr "." - -#~ msgid "\\relative mode changed here, old value: " -#~ msgstr "\\mode relatif chang ici, valeur prcdante: " - -#~ msgid "ignoring zero duration added to column at %s" -#~ msgstr "dure nulle ajoute la colonne %s ignore" - -#~ msgid "script needs stem direction" -#~ msgstr "scipt a besoin de direction de la queue" - -#~ msgid "unconnected column: %d" -#~ msgstr "colonne non connecte: %d" - -#~ msgid "" -#~ "Staff_side::get_position_f(): somebody forgot to set my direction, " -#~ "returning -20" -#~ msgstr "" -#~ "taff_side::get_position_f(): quelqu'un a oubli de positionner ma " -#~ "direction, je retourne -20" - -#~ msgid "have to be in Note mode for @chords" -#~ msgstr "il faut tre en mode Note pour @chords" - -#~ msgid "" -#~ "LilyPond is the GNU Project music typesetter. This program can print\n" -#~ "beautiful sheet music from a music definition file. It can also play\n" -#~ "mechanical performances to a MIDI file. Features include multiple\n" -#~ "staffs, meters, clefs, keys, lyrics, versatile input language, cadenzas,\n" -#~ "beams, slurs, triplets, named chords, transposing, formatting scores, \n" -#~ "part extraction. It includes a nice font of musical symbols.\n" -#~ msgstr "" -#~ "Lilypond est le formateur de musique du projet GNU. Ce programme peut\n" -#~ "imprimer de belles partitions de musiques partir d'un fichier de\n" -#~ "dfinition de musique. Il peut aussi jouer automaiquement le morceau\n" -#~ "vers un fichier midi. Ses caractristiques incluent plusieurs portes,\n" -#~ "mtre, cls, tonalits, paroles, language d'entre polyvalent, cadences,\n" -#~ "barres, liaison, triplets, accords nomms, transposition, formattage des\n" -#~ "paritions, extraction de parties. Il inclue une jolie police de symbol\n" -#~ "musicaux.\n" +msgstr "longueur de piste invalide" diff --git a/scm/grob-description.scm b/scm/grob-description.scm index 059f564213..344fd3fc3a 100644 --- a/scm/grob-description.scm +++ b/scm/grob-description.scm @@ -115,10 +115,13 @@ (BreathingSign . ( (break-align-symbol . Breathing_sign) (breakable . #t ) - (molecule-callback . ,Breathing_sign::brew_molecule) + (molecule-callback . ,Text_item::brew_molecule) + (lookup . name) + (font-family . music) + (text . "scripts-rcomma") (Y-offset-callbacks . (,Breathing_sign::offset_callback)) (visibility-lambda . ,begin-of-line-invisible) - (meta . ,(grob-description "BreathingSign" break-aligned-interface)) + (meta . ,(grob-description "BreathingSign" break-aligned-interface text-interface font-interface)) )) (Clef . ( diff --git a/scm/translator-property-description.scm b/scm/translator-property-description.scm index 5900032c1b..f8392da1e8 100644 --- a/scm/translator-property-description.scm +++ b/scm/translator-property-description.scm @@ -291,7 +291,7 @@ help with debugging large scores.") (translator-property-description 'squashedPosition integer? " Vertical position of squashing for Pitch_squash_engraver.") (translator-property-description 'staffsFound list? "list of all staff-symbols found.") -(translator-property-description 'stanza string? "Stanza `number' to print at start of a verse. Use in LyricsVoice context.") +(translator-property-description 'stanza markup? "Stanza `number' to print at start of a verse. Use in LyricsVoice context.") (translator-property-description 'stemLeftBeamCount integer? " @@ -300,7 +300,7 @@ Overrides automatic beaming. The value is only used once, and then it is erased. .") (translator-property-description 'stemRightBeamCount integer? "idem, for the right side.") -(translator-property-description 'stz string? "Abbreviated form for a stanza, see also Stanza property.") +(translator-property-description 'stz markup? "Abbreviated form for a stanza, see also Stanza property.") (translator-property-description 'textNonEmpty boolean? " If set to true then text placed above or below the staff is not assumed to have zero width. @code{\fatText} and @code{\emptyText} are predefined diff --git a/scripts/abc2ly.py b/scripts/abc2ly.py index af8cbf877c..eac86759a2 100644 --- a/scripts/abc2ly.py +++ b/scripts/abc2ly.py @@ -1271,7 +1271,7 @@ This program converts ABC music files (see http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) To LilyPond input. -Report bugs to bug-gnu-music@gnu.org +Report bugs to bug-lilypond@gnu.org Written by Han-Wen Nienhuys , Laura Conrad , Roy Rankin diff --git a/scripts/etf2ly.py b/scripts/etf2ly.py index 36976017a4..4219f1d8df 100644 --- a/scripts/etf2ly.py +++ b/scripts/etf2ly.py @@ -1101,7 +1101,7 @@ Enigma Transport Format is a format used by Coda Music Technology's Finale product. This program will convert a subset of ETF to a ready-to-use lilypond file. -Report bugs to bug-gnu-music@gnu.org +Report bugs to bug-lilypond@gnu.org Written by Han-Wen Nienhuys """) diff --git a/scripts/lilypond-book.py b/scripts/lilypond-book.py index caf8efc2fc..e4fa395d2b 100644 --- a/scripts/lilypond-book.py +++ b/scripts/lilypond-book.py @@ -51,13 +51,22 @@ program_version = '@TOPLEVEL_VERSION@' if program_version == '@' + 'TOPLEVEL_VERSION' + '@': program_version = '1.4.9' -# +# if set, LILYPONDPREFIX must take prevalence +# if datadir is not set, we're doing a build and LILYPONDPREFIX +datadir = '@datadir@' + +if os.environ.has_key ('LILYPONDPREFIX') : + datadir = os.environ['LILYPONDPREFIX'] +else: + datadir = '@datadir@' + +while datadir[-1] == os.sep: + datadir= datadir[:-1] + # Try to cater for bad installations of LilyPond, that have # broken TeX setup. Just hope this doesn't hurt good TeX # setups. Maybe we should check if kpsewhich can find # feta16.{afm,mf,tex,tfm}, and only set env upon failure. -# -datadir = '@datadir@' environment = { 'MFINPUTS' : datadir + '/mf:', 'TEXINPUTS': datadir + '/tex:' + datadir + '/ps:.:', @@ -66,6 +75,13 @@ environment = { 'GS_LIB' : datadir + '/ps', } +# tex needs lots of memory, more than it gets by default on Debian +non_path_environment = { + 'extra_mem_top' : '1000000', + 'extra_mem_bottom' : '1000000', + 'pool_size' : '250000', +} + def setup_environment (): for key in environment.keys (): val = environment[key] @@ -73,7 +89,10 @@ def setup_environment (): val = val + os.pathsep + os.environ[key] os.environ[key] = val - + for key in non_path_environment.keys (): + val = non_path_environment[key] + print '%s=%s' % (key,val) + os.environ[key] = val include_path = [os.getcwd()] @@ -132,6 +151,16 @@ class LatexPaper: self.m_geo_x_marginparsep = None self.__body = None def set_geo_option(self, name, value): + + if type(value) == type(""): + m = re.match ("([0-9.]+)(cm|in|pt|mm|em|ex)",value) + if m: + unit = m.group (2) + num = string.atof(m.group (1)) + conv = dimension_conversion_dict[m.group(2)] + + value = conv(num) + if name == 'body' or name == 'text': if type(value) == type(""): self.m_geo_textwidth = value @@ -194,9 +223,9 @@ class LatexPaper: elif name[-5:] == 'paper': self.m_papersize = name else: - pass + pass # what is _set_dimen ?? /MB - #self._set_dimen('m_geo_'+name, value) + #self._set_dimen('m_geo_'+name, value) def __setattr__(self, name, value): if type(value) == type("") and \ dimension_conversion_dict.has_key (value[-2:]): @@ -307,6 +336,7 @@ def pt2pt(x): dimension_conversion_dict ={ 'mm': mm2pt, + 'cm': lambda x: mm2pt(10*x), 'in': in2pt, 'em': em2pt, 'ex': ex2pt, @@ -371,9 +401,9 @@ output_dict= { 'output-verbatim': "\\begin{verbatim}%s\\end{verbatim}", 'output-default-post': "\\def\postLilypondExample{}\n", 'output-default-pre': "\\def\preLilypondExample{}\n", - 'usepackage-graphics': '\\usepackage{graphicx}\n', - 'output-eps': '\\noindent\\parbox{\\lilypondepswidth{%(fn)s.eps}}{\includegraphics[width=\\lilypondepswidth{%(fn)s.eps}]{%(fn)s.eps}}', - 'output-tex': '\\preLilypondExample \\input %(fn)s.tex \\postLilypondExample\n', + 'usepackage-graphics': '\\usepackage{graphics}\n', + 'output-eps': '\\noindent\\parbox{\\lilypondepswidth{%(fn)s.eps}}{\includegraphics{%(fn)s.eps}}', + 'output-tex': '{\\preLilypondExample \\input %(fn)s.tex \\postLilypondExample\n}', 'pagebreak': r'\pagebreak', }, 'texi' : {'output-lilypond': """@lilypond[%s] @@ -426,15 +456,15 @@ def output_verbatim (body): re_dict = { 'latex': {'input': r'(?m)^[^%\n]*?(?P\\mbinput{?([^}\t \n}]*))', 'include': r'(?m)^[^%\n]*?(?P\\mbinclude{(?P[^}]+)})', - 'option-sep' : ', *', + 'option-sep' : ',\s*', 'header': r"\\documentclass\s*(\[.*?\])?", 'geometry': r"^(?m)[^%\n]*?\\usepackage\s*(\[(?P.*)\])?\s*{geometry}", 'preamble-end': r'(?P\\begin{document})', 'verbatim': r"(?s)(?P\\begin{verbatim}.*?\\end{verbatim})", 'verb': r"(?P\\verb(?P.).*?(?P=del))", - 'lilypond-file': r'(?m)^[^%\n]*?(?P\\lilypondfile(\[(?P.*?)\])?\{(?P.+)})', - 'lilypond' : r'(?m)^[^%\n]*?(?P\\lilypond(\[(?P.*?)\])?{(?P.*?)})', - 'lilypond-block': r"(?sm)^[^%\n]*?(?P\\begin(\[(?P.*?)\])?{lilypond}(?P.*?)\\end{lilypond})", + 'lilypond-file': r'(?m)^[^%\n]*?(?P\\lilypondfile\s*(\[(?P.*?)\])?\s*\{(?P.+)})', + 'lilypond' : r'(?m)^[^%\n]*?(?P\\lilypond\s*(\[(?P.*?)\])?\s*{(?P.*?)})', + 'lilypond-block': r"(?sm)^[^%\n]*?(?P\\begin\s*(\[(?P.*?)\])?\s*{lilypond}(?P.*?)\\end{lilypond})", 'def-post-re': r"\\def\\postLilypondExample", 'def-pre-re': r"\\def\\preLilypondExample", 'usepackage-graphics': r"\usepackage{graphics}", @@ -456,8 +486,12 @@ re_dict = { 'verb': r"""(?P@code{.*?})""", 'lilypond-file': '(?m)^(?!@c)(?P@lilypondfile(\[(?P.*?)\])?{(?P[^}]+)})', 'lilypond' : '(?m)^(?!@c)(?P@lilypond(\[(?P.*?)\])?{(?P.*?)})', +# pyton2.2b2 barfs on this 'lilypond-block': r"""(?m)^(?!@c)(?P(?s)(?P@lilypond(\[(?P.*?)\])?\s(?P.*?)@end lilypond\s))""", - 'option-sep' : ', *', + +# 1.5.2 barfs on this. +# 'lilypond-block': r"""(?m)^(?!@c)(?P@lilypond(\[(?P.*?)\])?\s(?P.*?)@end lilypond\s)""", + 'option-sep' : ',\s*', 'intertext': r',?\s*intertext=\".*?\"', 'multiline-comment': r"(?sm)^\s*(?!@c\s+)(?P@ignore\s.*?@end ignore)\s", 'singleline-comment': r"(?m)^.*?(?P(?P@c.*$\n+))", @@ -500,8 +534,8 @@ def bounding_box_dimensions(fname): str = fd.read () s = re.search('%%BoundingBox: ([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)', str) if s: - return (int(s.group(3))-int(s.group(1)), - int(s.group(4))-int(s.group(2))) + return (int (s.group (3) - s.group (1) + 0.5), + int (s.group (4) - s.group (2) + 0.5)) else: return (0,0) @@ -614,7 +648,7 @@ def scan_latex_preamble(chunks): idx = idx + 1 continue m = get_re ('header').match(chunks[idx][1]) - if m.group (1): + if m <> None and m.group (1): options = re.split (',[\n \t]*', m.group(1)[1:-1]) else: options = [] @@ -628,8 +662,8 @@ def scan_latex_preamble(chunks): m = re.match("(\d\d)pt", o) if m: paperguru.m_fontsize = int(m.group(1)) - break + while chunks[idx][0] != 'preamble-end': if chunks[idx] == 'ignore': idx = idx + 1 diff --git a/scripts/ly2dvi.py b/scripts/ly2dvi.py index 1857dcef5d..f00531f78c 100644 --- a/scripts/ly2dvi.py +++ b/scripts/ly2dvi.py @@ -442,7 +442,7 @@ def analyse_lilypond_output (filename, extra): # search only the first 10k s = s[:10240] - for x in ('textheight', 'linewidth', 'papersize', 'orientation'): + for x in extra_fields: m = re.search (r'\\def\\lilypondpaper%s{([^}]*)}'%x, s) if m: set_setting (extra, x, m.group (1)) -- 2.39.5