]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 1.4.10 release/1.4.10
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sat, 29 Dec 2001 22:58:43 +0000 (23:58 +0100)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sat, 29 Dec 2001 22:58:43 +0000 (23:58 +0100)
=========

* 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

59 files changed:
CHANGES
Documentation/bibliography/GNUmakefile
Documentation/bibliography/colorado.bib
Documentation/bibliography/computer-notation.bib
Documentation/bibliography/html-long.bst [new file with mode: 0644]
Documentation/header.html.in
Documentation/topdocs/index.tely
Documentation/user/refman.itely
Documentation/windows/gs-profile.sh
Documentation/windows/installing.texi
Documentation/windows/lily-gs.sh
Documentation/windows/lily-miktex.sh [deleted file]
Documentation/windows/lily-python.sh [deleted file]
Documentation/windows/post-gs.sh [deleted file]
Documentation/windows/post-lily.sh [deleted file]
Documentation/windows/post-miktex.sh [deleted file]
Documentation/windows/post-python.sh [deleted file]
Documentation/windows/python-wrapper.sh [deleted file]
Documentation/windows/tex-wrapper.sh [deleted file]
VERSION
buildscripts/bib2html.py [new file with mode: 0644]
buildscripts/lilypond-profile.sh
input/no-notation/bar-check.ly [new file with mode: 0644]
input/regression/breathing-sign.ly
input/regression/collisions.ly
input/regression/non-empty-text.ly
input/regression/stanza-number.ly
lily/bar-check-iterator.cc [new file with mode: 0644]
lily/collision.cc
lily/command-request.cc
lily/dot-column-engraver.cc
lily/dot-column.cc
lily/include/stem.hh
lily/include/timing-translator.hh
lily/parser.yy
lily/span-bar.cc
lily/stanza-number-engraver.cc
lily/stem.cc
lily/text-engraver.cc
lily/timing-engraver.cc
lily/timing-translator.cc
ly/drumpitch.ly
ly/german-chords.ly
ly/property.ly
make/out/lilypond.lsm
make/out/lilypond.redhat.spec
make/out/lilypond.suse.spec
mf/GNUmakefile
mf/feta-eindelijk.mf
mf/feta-generic.mf
mf/feta-macros.mf
mf/feta-test16.mf
po/fr.po
scm/grob-description.scm
scm/translator-property-description.scm
scripts/abc2ly.py
scripts/etf2ly.py
scripts/lilypond-book.py
scripts/ly2dvi.py

diff --git a/CHANGES b/CHANGES
index a9ee54d0bbe8136c1252596667114184f2358b93..569457d2e51361a96d9974d5e2186db7475a4e90 100644 (file)
--- 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
 
 * 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
 ==========
index 78e0c3c7306f2a5d9cd0a9839bfa79ec18b10a80..1e1ddfb7829364f2de15df13c8e6bc71e4cac71a 100644 (file)
@@ -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:
index 6d7cf5120046978627ee79843bcc7b681330d35a..b9ac8df280ca43826508349c3d94e13aaf5f74b8 100644 (file)
@@ -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},
        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},
        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},
 }
 
 
-@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},
 
 @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},
 
 }
 %% 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},
        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},
 
 
 %(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},
        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},
 
 }
 
-@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},
        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},
 
 }
 
-@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},
        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},
 
 
 
-@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},
        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)},
 
        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. 
 }
 }
 
-@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},
 
 }
 
-@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)},
 
        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},
index 00a3e9cd8dae108f2822eb86d59b3b92caf20c22..b368d6fc30e7ae663b528254eeda051f35582797 100644 (file)
@@ -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 (file)
index 0000000..85a6163
--- /dev/null
@@ -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$
+    { "<DT> <A NAME=" quote$ * cite$ * quote$ * 
+       "> " * cite$ * ":</A> </DT>" * write$
+    }
+    { "<DT><A NAME=" quote$ * cite$ * quote$ * " HREF=" * quote$ * 
+       URL * quote$ * "> " * cite$ * ":</A></DT>" * write$
+    }
+  if$
+  newline$
+  "<DD>" write$ newline$
+  ""
+  before.all 'output.state :=
+}
+
+% DFK changed to HTML
+FUNCTION {fin.entry}
+{ add.period$
+  write$
+  newline$
+  earlier empty$
+       'skip$
+       { "<br>" write$ newline$
+         "See also earlier version <A HREF=" quote$ * "#" * earlier * quote$ *
+               ">" * earlier * "</A>." * write$ newline$
+       }
+  if$
+  later empty$
+       'skip$
+       { "<br>" write$ newline$
+         "See also later version <A HREF=" quote$ * "#" * later * quote$ *
+               ">" * later * "</A>." * write$ newline$
+       }
+  if$
+  "</DD>" 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$ "" }
+    { "<EM>" swap$ * "</EM>" * }
+  if$
+}
+
+% DFK added for HTML strong emphasis
+FUNCTION {strong}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "<STRONG>" swap$ * "</STRONG>" * }
+  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&nbsp;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 <
+    { "&nbsp;" }
+    { " " }
+  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&nbsp;al." * }
+    { #2 <
+       'skip$
+       { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+           { " et&nbsp;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$ }
+    { "<P><QUOTE> " swap$ * "  </QUOTE></P>" *}
+  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$ 
+          "<strong> " swap$ * ":</strong> " * 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}
+{ "<HTML>" write$ newline$
+  "<HEAD><TITLE> Bibliography </TITLE></HEAD>" write$ newline$
+  "<BODY BGCOLOR=#EEEEEE>" write$ newline$
+  "<DL>" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+% DFK changed to HTML
+FUNCTION {end.bib}
+{ newline$
+  "</DL>" write$ newline$
+  "</BODY>" write$ newline$
+  "</HTML>" write$ newline$
+}
+
+EXECUTE {end.bib}
index 7e33d9b00241b072ca3a8e17e77bc2ec55dbb7dd..27ca0159f73d131ddaccdff281af77eaf0f5c617 100644 (file)
@@ -50,7 +50,7 @@ which substitutes some @AT_VARIABLES@ as well.
       </td></tr>
       <tr><td><font size="-1">
        <a href="@TOP@Documentation/topdocs/out-www/INSTALL.html#download-binaries">GNU/Linux binaries</a><br>
-       <a href="@TOP@Documentation/windows/out-www/installing.html">Windows binaries</a><br>
+       <a href="@TOP@Documentation/windows/out-www/installing.html">Windows</a><br>
        <a href="@TOP@Documentation/topdocs/out-www/INSTALL.html#download-source">Source code</a><br>
       </font></td></tr>
       <tr><td bgcolor="#e8e8ff">
index 5442ceb1fc5e0174e25db5a3dfa051918e81c9f5..4c017920a080854d1775b92ead02cf8270891eeb 100644 (file)
@@ -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,
index 25e1c229def1e6e93239b98e135dd9939845d4b6..c1ba7b01482feb9885513a4449960ded2d101c3f 100644 (file)
@@ -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
index 3e533b1f71f3bbfe3722852c0b451a2614b83ff2..b3342f8baa1960ba77b41249f1d56120d6b1193d 100644 (file)
@@ -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
index 910318397052469c310970b79541c3e60e9f78bf..daf83226b198ecd7a33757951d483da4b9ddc9ba 100644 (file)
@@ -6,54 +6,40 @@
 <!--- @@WEB-TITLE@@=Windows Installation --->
 @end html
 
+@html
+<!--- @@WEB-TITLE@@=Windows Installation --->
+@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
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c8c9bd4ad697da53378757bf6f4048a24f23d8fc 100644 (file)
@@ -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 (file)
index e69de29..0000000
diff --git a/Documentation/windows/lily-python.sh b/Documentation/windows/lily-python.sh
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/Documentation/windows/post-gs.sh b/Documentation/windows/post-gs.sh
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/Documentation/windows/post-lily.sh b/Documentation/windows/post-lily.sh
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/Documentation/windows/post-miktex.sh b/Documentation/windows/post-miktex.sh
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/Documentation/windows/post-python.sh b/Documentation/windows/post-python.sh
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/Documentation/windows/python-wrapper.sh b/Documentation/windows/python-wrapper.sh
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/Documentation/windows/tex-wrapper.sh b/Documentation/windows/tex-wrapper.sh
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/VERSION b/VERSION
index c6aa1fa3ed08ff977cbd141424b85a118ff8baba..90f3301b7f1b55a45e2af48f95ec0ad5aee381ca 100644 (file)
--- 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 (file)
index 0000000..37bc469
--- /dev/null
@@ -0,0 +1,86 @@
+#!@PYTHON@
+import os
+import sys
+import getopt
+import tempfile
+import string
+
+# usage:
+def usage ():
+    print 'usage: %s [-s style] [-o <outfile>] 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)
+
+
+
+
+
+
+
+
+
+
+
index 335ca158a25bf9cb3051aed10c4ff2f28995dc06..e23206fe27fb6f1ce55fdb15e2aff94e362cb40d 100755 (executable)
@@ -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 (file)
index 0000000..c8a706a
--- /dev/null
@@ -0,0 +1,12 @@
+
+\header {
+
+texidoc = "skipTypesetting doesn't affect bar checks."
+
+}
+
+\score { \notes {
+       \property Score.skipTypesetting = ##t
+       c4 c4
+       |
+       c4 c4 }}
index 5ad99b6e825535b1c9cf174c7fb0833b3611e124..a663a8a001aa44b4399237726c47879c1f29ffb0 100644 (file)
@@ -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 "||"
   }
index 89332dee95dacc3ada55b3c879395351207dc547..560ec561417d248d5ee2319fd6419a0eb2aa31ca 100644 (file)
@@ -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 <  
index d3eee8bedce9bc19272745a0274cd9f6f97b47be..43c81652d8c176354ead6c51d3df0b969b9011a6 100644 (file)
@@ -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
   }
 }
index bd56fc5ad590ad69260f6248a605412dae03282c..55991ad5a29ee7a0cfcae85986f9c92345ca8e76 100644 (file)
@@ -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 (file)
index 0000000..2903547
--- /dev/null
@@ -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 <hanwen@cs.uu.nl>
+
+ */
+
+#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);
+
+}
+    
index 5b6b815aa6bb18ab210c275ae82fdaf2d84993ac..545b1712ff52bf94c9cb97c13f424ebe5f6425d2 100644 (file)
@@ -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<Link_array<Grob> > 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<int> ups = Stem::note_head_positions (Note_column::stem_l (cu));
+  Array<int> 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<Real> 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++)
index aac1ebe576fc16d628f3f26a10c83293197bc40f..40db9473b05b175e51f42a68131d55d2e9f1e60e 100644 (file)
 #include "debug.hh"
 #include "musical-request.hh"
 
-bool
-Barcheck_req::do_equal_b (Request const *r) const
-{
-  Barcheck_req  const*b = dynamic_cast<Barcheck_req const*> (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);
index 9dec1242c2d72a58a45375d5721ab87183885e66..a3adcb527fccd09638086c25d02a98e30538a000 100644 (file)
@@ -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);
        }
 
index 4ae84934f63b51338980c4c3ce73846d1151fd66..a0cdf524f3790b7592a57657a280c798b2294b74 100644 (file)
 #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)
 {
index 40d26e6c1305e54aa0f2122ce9f4a94c48020802..40be13a826cbda91cfb602725f5e14251a29b1e5 100644 (file)
@@ -35,6 +35,7 @@ public:
   static int heads_i (Grob *) ;
   static bool invisible_b (Grob *) ;
   static Interval head_positions (Grob *) ;
+  static Array<int> note_head_positions (Grob *);  
   static Real get_default_stem_end_position (Grob*me) ;
   static void position_noteheads (Grob*);
   static Real stem_end_position (Grob*) ;
index 122f8d0d80ebf9876ebc5d2185e7a581d3272e2e..9c8667be1a7854f18421eeb22671569bacd35801 100644 (file)
@@ -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 ();
 
index 464826db50514df95a9304a7a8122798f9d4825e..0f92f6c5f28ce44472750c3da3f71f19fe951412 100644 (file)
@@ -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;
        }
index 476d028e2af0d2008d05f0c77023752c224efe58..3597e6018d33b2464ffcd526d6c37a4561d19279 100644 (file)
@@ -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 ();
 }
 
index 5d4b0a5e0109cc1aecdf241d69d867a3f5f43342..0c7c2b22e3e75c4ee14971f7b0b1b9a5baed5f6a 100644 (file)
@@ -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))
        
 
        /*
index 1e229e1f0f8c3415191cf0c3d666ac025a95a249..84bf2f3faadd82d0642e178b2e65acca074a55c9 100644 (file)
@@ -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<Grob*> 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<int>
+Stem::note_head_positions (Grob *me)
+{
+  Array<int> 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<Grob*> 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)
 {
index 7757efcfadcb818ec72ff0ba2dd4a1e5c3fe30b9..8f5e3b3c7659d54c73f58736af68c1a04c821dc3 100644 (file)
@@ -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);
     }
index ba462c16739e30e746a78f6dda43df3052db7d43..bbd807e5c1bde34693eb32da10355ec3f0b8f1d0 100644 (file)
@@ -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 ();
-}
index aa4882853075520b62e236629e93fe3c5c039e8e..4b6758292f0c574ec7bc87d596ec02a2f0bcf31f 100644 (file)
 #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<Barcheck_req*> (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
index b55e8bb1f48e2858004efb23e473e084dc7eabc0..c70b18e0fea90c9117b133f98dfb9130334e541b 100644 (file)
@@ -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))
 #(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))
  ))
        (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)
index cb741eba1442e72b071ca5876ba3e9e6ce9a7f3c..1964278c65eafa740dffae630c604200561a7529 100644 (file)
@@ -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))
      )
index 1ebe98c91876529c64a9cd37f12cfd44ad48d666..abea886454f45fc21518a96d43179673a6f887b3 100644 (file)
@@ -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,
index 67127499c7a62f51f429f1e132d8c3bdd9a05911..a33184f58cb284e52b755caef9e8f63c5db6ef69 100644 (file)
@@ -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
index d98202de4244a426e3312866f16f16119ee256da..49c8993248007681f9926085f0618bcd8e54257d 100644 (file)
@@ -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
index 41e5b2ccaa5e8a4a20d78887762ed63cf0cfcb86..d3475368a1dba9236122b80a107b9b5af268fceb 100644 (file)
 
 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/
index 0c34abafe0353af1960a5215abc31a990c9c46c7..46156dedea51a6db412d8fe9d9524cfba4351512 100644 (file)
@@ -67,3 +67,5 @@ local-clean:
        rm -f *.tfm *.log
 
 
+
+out/feta-test16.dvi: feta-eindelijk.mf
index fadde1ec0e0e30be85e22c3d3baefbfd0bce2e54..42fc2ccc00724853176f8a1ffd1fce7ecbc57521 100644 (file)
@@ -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;
index 391eb7f6bec17e7a9ef9540d035672bef8079f7b..7fb0a77dc6c8713501cf4091a042fe20bd49b96f 100644 (file)
@@ -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;
index 814c82a16dbc77649a3197b3903c33285a72fc17..5a3dccc517f9c7d8c88311bc70cf00238b05708e 100644 (file)
@@ -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);
index 3d2ed3cea24a5753346a70045d28856d0e9be4d3..fca9e837ff8660de526a07bc8b5206489778fd9d 100644 (file)
@@ -7,7 +7,7 @@ staffsize#:=16pt#;
 test:=1;
 
 % smoked cheese
-% test := -1;
+%test := -1;
 
 
 % dem piksels.
index feffb8014308cbe619c00a100eaf3eef51dc2138..6c4ca25b6392725314c2b1189b55cca229520ec0 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -1,74 +1,74 @@
-# it.po -- GNU LilyPond's french language file
-# Laurent Martelli <laurent@linuxfan.com>, 1998.
+# Messages français pour lilypond.
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# Michel Robitaille <robitail@IRO.UMontreal.CA>, 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 <laurent@linuxfan.com>\n"
-"Language-Team: \n"
+"PO-Revision-Date: 2001-11-30 12:00-0500\n"
+"Last-Translator: Michel Robitaille <robitail@IRO.UMontreal.CA>\n"
+"Language-Team: French <traduc@traduc.org>\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 "<stdin>"
-msgstr ""
+msgstr "<stdin>"
 
 #: 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"
index 059f564213e41100a8b97352493abd243a70c404..344fd3fc3a2f6bcc345f09e4401284f7f7872455 100644 (file)
        (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 . (
index 5900032c1b5ddef1f702180a7ba829b4e06febcf..f8392da1e8d98d3cf26c5dc2e9d62fa9dc97842a 100644 (file)
@@ -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
index af8cbf877c8b810b10e0b4813c2416e22859dfc9..eac86759a21c1cfda5e4d0129734ab6553de4d9a 100644 (file)
@@ -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 <hanwen@cs.uu.nl>, Laura Conrad
 <lconrad@laymusic.org>, Roy Rankin <Roy.Rankin@@alcatel.com.au>
index 36976017a4240744ac4547d1bc61d8f66d257760..4219f1d8df054b35bdfa51bf31e58c7effe756ef 100644 (file)
@@ -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 <hanwen@cs.uu.nl>
 """)
index caf8efc2fc9cb92dbe947bde15698509d287b5a3..e4fa395d2b4fa46f9da157ff37fd7e8fa87f91e3 100644 (file)
@@ -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<match>\\mbinput{?([^}\t \n}]*))',
                  'include': r'(?m)^[^%\n]*?(?P<match>\\mbinclude{(?P<filename>[^}]+)})',
-                 'option-sep' : ', *',
+                 'option-sep' : ',\s*',
                  'header': r"\\documentclass\s*(\[.*?\])?",
                  'geometry': r"^(?m)[^%\n]*?\\usepackage\s*(\[(?P<options>.*)\])?\s*{geometry}",
                  'preamble-end': r'(?P<code>\\begin{document})',
                  'verbatim': r"(?s)(?P<code>\\begin{verbatim}.*?\\end{verbatim})",
                  'verb': r"(?P<code>\\verb(?P<del>.).*?(?P=del))",
-                 'lilypond-file': r'(?m)^[^%\n]*?(?P<match>\\lilypondfile(\[(?P<options>.*?)\])?\{(?P<filename>.+)})',
-                 'lilypond' : r'(?m)^[^%\n]*?(?P<match>\\lilypond(\[(?P<options>.*?)\])?{(?P<code>.*?)})',
-                 'lilypond-block': r"(?sm)^[^%\n]*?(?P<match>\\begin(\[(?P<options>.*?)\])?{lilypond}(?P<code>.*?)\\end{lilypond})",
+                 'lilypond-file': r'(?m)^[^%\n]*?(?P<match>\\lilypondfile\s*(\[(?P<options>.*?)\])?\s*\{(?P<filename>.+)})',
+                 'lilypond' : r'(?m)^[^%\n]*?(?P<match>\\lilypond\s*(\[(?P<options>.*?)\])?\s*{(?P<code>.*?)})',
+                 'lilypond-block': r"(?sm)^[^%\n]*?(?P<match>\\begin\s*(\[(?P<options>.*?)\])?\s*{lilypond}(?P<code>.*?)\\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>@code{.*?})""",
                 'lilypond-file': '(?m)^(?!@c)(?P<match>@lilypondfile(\[(?P<options>.*?)\])?{(?P<filename>[^}]+)})',
                 'lilypond' : '(?m)^(?!@c)(?P<match>@lilypond(\[(?P<options>.*?)\])?{(?P<code>.*?)})',
+# pyton2.2b2 barfs on this
                 'lilypond-block': r"""(?m)^(?!@c)(?P<match>(?s)(?P<match>@lilypond(\[(?P<options>.*?)\])?\s(?P<code>.*?)@end lilypond\s))""",
-                 'option-sep' : ', *',
+
+# 1.5.2 barfs on this. 
+# 'lilypond-block': r"""(?m)^(?!@c)(?P<match>@lilypond(\[(?P<options>.*?)\])?\s(?P<code>.*?)@end lilypond\s)""",
+                 'option-sep' : ',\s*',
                  'intertext': r',?\s*intertext=\".*?\"',
                  'multiline-comment': r"(?sm)^\s*(?!@c\s+)(?P<code>@ignore\s.*?@end ignore)\s",
                  'singleline-comment': r"(?m)^.*?(?P<match>(?P<code>@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
index 1857dcef5dbf7700bd8d9b19e29a22e8090b1d20..f00531f78c249859802c30ca53f632ed297c7c4d 100644 (file)
@@ -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))