+
+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
==========
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:
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
$(MAKE) footify
$(outdir)/%.html: %.bib
- -$(BIBTEX2HTML) $(BIBTEX2HTML_FLAGS)
+ $(PYTHON) $(depth)/buildscripts/bib2html.py -o $@ $<
$(footify) $@
local-clean:
% 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},
}
%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},
-@Book {63,
+@Book{?:_pictor_histor_music_print,
author={?},
title = {Pictoral History of Music Printing},
address={Elhardt, Indiana},
}
-@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},
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},
ftp = {ftp://blackbox.cartah.washington.edu}
}
-
@Article {smdl-web,
author={unknown},
title = {SMDL, Standard Musical Description Language},
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.}
+}
+
--- /dev/null
+% 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 al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names author.title.purify }
+ if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+% DFK added strong, so it will be bold.
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ author.title.purify strong }
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+% DFK changed emphasize to strong
+FUNCTION {format.btitle}
+{ title author.title.purify strong
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { " " }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "In {\em " journal * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "In {\em " booktitle * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ }
+ { "In " format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+
+% DFK added
+% top of stack is the string we want to be a quoted paragraph
+FUNCTION {format.quotedParagraph}
+{ duplicate$ empty$
+ { skip$ }
+ { "<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}
</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">
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,
@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}
+
@c . {Bar lines}
@node Bar lines
@subsection Bar lines
@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}
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
@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
\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
# /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
<!--- @@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
@end example
@end quotation
-If you don't see something similar to
+You should see something similar to
@quotation
@example
@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
@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:
]
-
-@ignore
-
guile -v
Guile 1.4.1
@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
+#!@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
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.
--- /dev/null
+#!@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)
+
+
+
+
+
+
+
+
+
+
+
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:=""}
--- /dev/null
+
+\header {
+
+texidoc = "skipTypesetting doesn't affect bar checks."
+
+}
+
+\score { \notes {
+ \property Score.skipTypesetting = ##t
+ c4 c4
+ |
+ c4 c4 }}
< \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 "||"
}
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 <
"
}
\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
}
}
< \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 }>}
--- /dev/null
+/*
+ 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);
+
+}
+
#include "paper-def.hh"
#include "axis-group-interface.hh"
#include "item.hh"
-
+#include "stem.hh"
MAKE_SCHEME_CALLBACK (Collision,force_shift_callback,2);
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.
}
}
while ((flip (&d))!= UP);
+
+ /*
+ do horizontal shifts of each direction
+
+ |
+ x||
+ x||
+ x|
+ */
do
{
}
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++)
#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 ());
ADD_MUSIC (Articulation_req);
-ADD_MUSIC (Barcheck_req);
+
ADD_MUSIC (Break_req);
ADD_MUSIC (Breathing_sign_req);
ADD_MUSIC (Busy_playing_req);
{
dotcol_ = new Item (get_property ("DotColumn"));
- Dot_column::set_interface (dotcol_);
announce_grob (dotcol_, 0);
}
#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)
{
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*) ;
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 ();
$$-> 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);
| hyphen_req {
$$ = $1;
}
- | '|' {
- $$ = new Barcheck_req;
- }
| '~' {
$$ = new Tie_req;
}
* 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
*/
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 ();
}
// TODO
- if (gh_string_p (s))
+ if (gh_string_p (s) || gh_pair_p (s))
/*
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)
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)
{
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)
{
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);
}
protected:
virtual void start_translation_timestep ();
virtual void stop_translation_timestep ();
- virtual void process_music ();
public:
VIRTUAL_COPY_CONS (Translator);
};
}
-/*
- ugh. Translator doesn't do process_music ().
- */
-void
-Timing_engraver::process_music ()
-{
- Timing_translator::process_music ();
-}
#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
void
Timing_translator::start_translation_timestep ()
{
- check_ =00;
Translator *t = this;
Global_translator *global_l =0;
do
(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)
(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))
)
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
\stemUp
\slurUp
\tieUp
+ \dotsUp
}
voiceTwo = {
\stemDown
\slurDown
\tieDown
+ \dotsDown
}
voiceThree = {
\stemUp
\slurUp
\tieUp
+ \dotsUp
\shiftOn
}
\stemDown
\slurDown
\tieDown
+ \dotsDown
\shiftOn
}
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,
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
%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
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/
rm -f *.tfm *.log
+
+out/feta-test16.dvi: feta-eindelijk.mf
% 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;
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;
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;
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;
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);
test:=1;
% smoked cheese
-% test := -1;
+%test := -1;
% dem piksels.
-# 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"
#: 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"
#: 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"
#: 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
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]"
#: 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"
#: 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"
#: 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]"
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
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
#: 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"
#: 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
#: 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
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
#: 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"
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."
msgstr ""
#: hairpin.cc:94
-#, fuzzy
msgid "crescendo too small"
-msgstr "trop petit"
+msgstr ""
#: hyphen-engraver.cc:90
msgid "unterminated hyphen"
#: 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"
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"
#. 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
#: 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 ""
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"
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"
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
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
#: 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"
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"
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..."
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
#. 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."
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"
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"
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
#: parser.yy:121
#, c-format
msgid "Expecting %d arguments"
-msgstr ""
+msgstr "%d arguements attendus"
#: parser.yy:423
msgid "Identifier should have alphabetic characters only"
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"
#: 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
#. 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"
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"
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..."
#: lilypond-score.cc:164
msgid "Creating voices..."
-msgstr "Cration des voix..."
+msgstr "Création des voies..."
#: lilypond-score.cc:168
msgid "track "
#: 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..."
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"
#: main.cc:95
msgid "enable debugging output"
-msgstr ""
+msgstr "autoriser la mise au point de sortie"
#: main.cc:97
msgid "ACC[:MINOR]"
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"
#: main.cc:101
msgid "be quiet"
-msgstr "mode silencieux"
+msgstr ""
#: main.cc:102
msgid "don't output rests or skips"
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"
#: 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
#: 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
#: 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"
#: 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"
(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 . (
(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? "
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
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>
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>
""")
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:.:',
'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]
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()]
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
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:]):
dimension_conversion_dict ={
'mm': mm2pt,
+ 'cm': lambda x: mm2pt(10*x),
'in': in2pt,
'em': em2pt,
'ex': ex2pt,
'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]
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}",
'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+))",
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)
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 = []
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
# 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))