]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'master' into lilypond/translation
authorFrancisco Vila <francisco.vila@hispalinux.es>
Mon, 21 Feb 2011 07:14:44 +0000 (08:14 +0100)
committerFrancisco Vila <francisco.vila@hispalinux.es>
Mon, 21 Feb 2011 07:14:44 +0000 (08:14 +0100)
50 files changed:
Documentation/changes.tely
Documentation/contributor/introduction.itexi
Documentation/contributor/issues.itexi
Documentation/essay/colorado.bib
Documentation/essay/computer-notation.bib
Documentation/essay/engravingbib.bib
Documentation/essay/literature.itely
Documentation/essay/texi-long.bst
Documentation/notation/input.itely
Documentation/notation/pitches.itely
Documentation/web/texi-web.bst
input/regression/autobeam-start-at-beginning-of-measure-in-3-4.ly [new file with mode: 0644]
input/regression/lyrics-bar.ly
input/regression/modal-transforms.ly [new file with mode: 0644]
input/regression/prefatory-separation.ly [new file with mode: 0644]
input/regression/repeat-slash-mixed.ly [new file with mode: 0644]
input/regression/repeat-slash-multi.ly [new file with mode: 0644]
input/regression/stem-length-estimation.ly
lily/axis-group-interface.cc
lily/context.cc
lily/double-percent-repeat-engraver.cc [new file with mode: 0644]
lily/include/axis-group-interface.hh
lily/include/context.hh
lily/include/percent-repeat-item.hh
lily/include/spanner.hh
lily/multi-measure-rest.cc
lily/page-breaking.cc
lily/page-layout-problem.cc
lily/percent-repeat-engraver.cc
lily/percent-repeat-item.cc
lily/percent-repeat-iterator.cc
lily/skyline.cc
lily/slash-repeat-engraver.cc
lily/spanner.cc
ly/engraver-init.ly
ly/music-functions-init.ly
make/website.make
po/de.po
po/el.po
po/es.po
po/fr.po
po/it.po
scm/auto-beam.scm
scm/define-event-classes.scm
scm/define-grobs.scm
scm/define-music-properties.scm
scm/define-music-types.scm
scm/lily.scm
scm/modal-transforms.scm [new file with mode: 0644]
scm/music-functions.scm

index f2a4b4c797748f1a19e97c064ded1bcdd1401890..002f6a89cf094a54f6707a1e4deea9468e588602 100644 (file)
@@ -61,6 +61,36 @@ which scares away people.
 
 @end ignore
 
+@item
+A minimal composer toolkit of modal transformations is provided.
+A motif may be @notation{transposed}, @notation{inverted} and/or
+converted to its @notation{retrograde} within any scale.
+
+@lilypond
+pentatonicScale = \relative a' { a c d f g }
+motif = \relative c'' { d8 c f,4 <a f'> <a f'> }
+
+\new Staff <<
+  {
+    \partial 4
+    \pentatonicScale
+    \motif
+    \modalTranspose c a, \pentatonicScale \motif
+    \modalInversion d'' a' \pentatonicScale \motif
+    \retrograde \motif
+  }
+  {
+    \partial 4
+    s4^"pentatonic scale"
+    s1
+    s1^"motif"
+    s1^"transposition"
+    s1^"inversion"
+    s1^"retrograde"
+  }
+>>
+@end lilypond
+
 @item
 Black mensural notation has minimal support.
 
index cf7e2b7978f432bc6fdd844231e9eb01157f8be1..61905d060af075b5da19421ff26d17ae80b3d4d1 100644 (file)
@@ -124,6 +124,12 @@ They might not be able to help you with all problems, but we find
 that new contributors often get stuck with something that could be
 solved/explained with 2 or 3 sentences from a mentor.
 
+@item
+If you have been working on a task much longer than was originally
+estimated, stop and ask your mentor.  There may have been a
+miscommunication, or there may be some time-saving tips that could
+vastly simply your task.
+
 @item
 Send patches to your mentor for initial comments.
 
index 09c62552b77d392214cc2ed19fd3882c4ac3c4a9..5ea4b952d349831514013941d66746f47e8455cd 100644 (file)
@@ -11,6 +11,7 @@ miscellaneous development tasks.
 * Bug Squad checklists::
 * Issue classification::
 * Adding issues to the tracker::
+* Patch handling::
 * Summary of project status::
 @end menu
 
@@ -328,8 +329,8 @@ More information is available from in
 
 @item
 Issues to verify: try to reproduce the bug with the latest
-version; if you cannot reproduce the bug, mark the item
-@qq{Verified} (i.e. @qq{the fix has been verified to work}).
+official GUB version; if you cannot reproduce the bug, mark the
+item @qq{Verified} (i.e. @qq{the fix has been verified to work}).
 
 @example
 @uref{http://code.google.com/p/lilypond/issues/list?can=7}
@@ -340,34 +341,17 @@ build system or fundamental architecture changes; there is no way
 for you to verify these.  Leave those issues alone; somebody else
 will handle them.
 
-@end itemize
-
-
-@ignore
-@c try omitting from daily tasks for now. -gp
-
-Once every @strong{two weeks} or so:
-
-@itemize
-
 @item
 Check for any incorrectly-classified items in the tracker.  This
 generally just means looking at the grid to see any items without
 a Type or Priority.
 
-@item
-Check for any items with @code{label:patch}.  If it's been more
-than a week since the last action on the issue, send an email to
--devel to remind them about it.  If the patch was withdrawn for
-more work, then remove the @code{patch} label.
-
-@example
-@uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:patch}
-@end example
-
 @end itemize
 
 
+@ignore
+@c try omitting from daily tasks for now. -gp
+
 @subheading Irregular maintenance
 
 @warning{These tasks are a lot of work; gathering more volunteers
@@ -545,6 +529,9 @@ Issues that only affect specific operating systems.
 
 @subheading Patch (optional)
 
+Normal Bug Squad members should not add or modify Patch issues;
+leave them to the Patch Meister.
+
 @itemize
 
 @item
@@ -652,8 +639,6 @@ follow the guidelines for @rweb{Bug reports}.}
 In order to assign labels to issues, Bug Squad members should log
 in to their google account before adding an item.
 
-@subsubheading Normal issues
-
 @enumerate
 
 @item
@@ -720,18 +705,41 @@ email should contain a link to the issue you just added.
 @end enumerate
 
 
-@subsubheading Patch reminders
+
+@node Patch handling
+@section Patch handling
 
 @warning{This is not a Bug Squad responsibility; we have a
 separate person handling this task.}
 
-There is a special category of issues: reminders of an existing
-patch.  These should be added if a patch has been sent to a
-lilypond mailing list (generally @code{lilypond-devel}, but they
-sometimes appear on @code{bug-lilypond} as well) and has had no
-discussion for at least @strong{3 days}.  Do not add issues for
-patches under active discussion.
+There is a single Patch Meister, and a number of Patch Helpers
+(rename this?).  The list of known patches awaiting review is:
+
+@example
+@uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:patch&sort=patch}
+@end example
+
+
+@subheading Helpers: adding patches
+
+The primary duty is to add patches to the google tracker; we have
+a bad track record of losing patches in email.  Patches generally
+come to the @code{lilypond-devel} mailing list, but are sometimes
+sent to @code{bug-lilypond}, @code{lilypond-users}, or
+@code{frogs} mailing list instead.
+
+@itemize
+@item
+Unless a patch is clearly in response to an existing issue, add a
+new issue with the @code{Patch-new} label and a link to the patch
+(either on the mailing list archives or the codereview url).
 
+Issue numbers are cheap; losing developers because they got fed up
+with us losing their hard work is expensive.
+
+@c if we enter patches immediately, I don't think this is relevant.
+@ignore
+@item
 Before adding a patch-reminder issue, do a quick check to see if
 it was pushed without sending any email.  This can be checked for
 searching for relevant terms (from the patch subject or commit
@@ -740,12 +748,85 @@ message) on the webgit page:
 @example
 @uref{http://git.savannah.gnu.org/gitweb/?p=lilypond.git}
 @end example
+@end ignore
 
+@item
+If the patch is clearly in response to an existing issue, then
+update that issue with the @code{Patch-new} label and a link to
+the patch (either on the mailing list archives or the codereview
+url).
+
+@item
 After adding the issue, please send a response email to the same
-group(s) that the initial patch was sent to.  If the initial email
-was sent to multiple mailing lists (such as both @code{bugs} and
-@code{devel}), then reply to all those mailing lists as well.  The
-email should contain a link to the issue you just added.
+group(s) that the initial patch was sent to.
+
+If the initial email was sent to multiple mailing lists (such as
+both @code{bugs} and @code{devel}), then reply to all those
+mailing lists as well.  The email should contain a link to the
+issue you just added.
+
+@end itemize
+
+@subheading Helpers: @code{Patch-review} label
+
+The secondary duty is to do make sure that every issue in the
+tracker with a @code{Patch-review} label has passed these
+@qq{obvious} tests:
+
+@itemize
+@item
+Applies automatically to git master.
+
+It's ok to have offsets, but not conflicts.
+
+@item
+Regtest comparison looks ok; no unexpected changes.
+
+@item
+Descriptive subject line.
+
+Avoid subjects like @qq{fixes 123}; instead write @qq{Doc: discuss
+stacking-dir for BassFigureAlignment (fix 123)}.
+
+@item
+Compiles docs from scratch.  Only check this if you have reason to
+suspect it might not work.
+
+@item
+(maybe)
+
+Check code indentation and style.  This should be easier post-GOP
+when we have a better-defined code style.
+
+@end itemize
+
+
+@subheading Patch Meister
+
+The Patch Meister will:
+
+@itemize
+
+@item
+send @qq{countdown} emails to
+@code{lilypond-devel} when patches appear to be ready.
+
+@item
+send general requests to review patches, or even nasty requests to
+review patches.
+
+@item
+downgrade patches from @code{Patch-review} to
+@code{Patch-needs_work} as appropriate.
+
+@item
+downgrade patches from @code{Patch-needs_work} to
+@code{Patch-abandoned} if no actions have been taken in four
+weeks.
+
+@end itemize
+
+
 
 
 @node Summary of project status
index 692388c9fc062c614ec6cea4c92478f466addbb0..614e0cfc302249e0640b2d9e7e17307b6089a187 100644 (file)
@@ -3,7 +3,7 @@
 % author =Alyssa Lamb (edited & converted to bibtex by HWN)
 %
 
-@Book {jacob47:_music,
+@Book{jacob47,
   author = {Jacob, Archibald},
   year = 1947,
   title = {Musical handwriting : or, How to put music on paper : A handbook for all musicians, professional and amateur},
@@ -12,7 +12,7 @@
   note = {subject: Musical notation},
 }
 
-@Book{brandt:_stand_chord_symbol_notat,
+@Book{brandt,
   author = {Carl Brandt and Clinton Roemer},
   title = {Standardized Chord Symbol Notation},
   address = {Sherman Oaks, CA},
@@ -20,7 +20,7 @@
   note = {subject: musical notation},
 }
 
-@Book{johnson46:_how,
+@Book{johnson46,
   author = {Johnson, Harold M},
   year = 1946,
   title = {How to write music manuscript an exercise-method handbook for the  music student, copyist, arranger, composer, teacher},
@@ -29,7 +29,7 @@
   note = {subject: Musical notation --Handbooks, manuals},
 }
 
-@Book{sadie90:_music_print_publis,
+@Book{sadie90,
   title = {Music Printing & Publishing},
   author = {Donald W. Krummel \& Stanley Sadie},
   year = 1990,
@@ -37,7 +37,7 @@
   note = {subject: musical notation},
 }
 
-@Book{foss:_music_print,
+@Book{foss,
   author = {Foss, Hubert},
   title = {Music Printing},
   series = {Practical Printing and Binding},
@@ -46,7 +46,7 @@
   note = {subject: musical notation},
 }
 
-@Book{steele03:_earlies_englis_music_print,
+@Book{steele03,
   author = {Steele, Robert},
   year = 1903,
   title = {The Earliest English Music Printing},
@@ -54,7 +54,7 @@
   note = {subject: history of music printing and engraving},
 }
 
-@Book{austin:_story_music_print,
+@Book{austin,
   author = {Austin, Ernest},
   title = {The Story of Music Printing},
   address = {London},
@@ -62,7 +62,7 @@
   note = {subject: history of music printing and engraving},
 }
 
-@Book{unknown_author:_pictor_histor_music_print,
+@Book{unknown_author,
   author = {unknown author},
   title = {Pictorial History of Music Printing},
   address = {Elhardt, Indiana},
@@ -70,7 +70,7 @@
   note = {subject: history of music printing and engraving},
 }
 
-@Book{wintermitz55:_music_autog_montev_hindem,
+@Book{wintermitz55,
   author = {Wintermitz, Emmanuel},
   year = 1955,
   title = {Musical Autographs from Monteverdi to Hindemith},
@@ -79,7 +79,7 @@
   note = {subject: history of music printing and engraving},
 }
 
-@Book{novello47:_some_accoun_method_music_print,
+@Book{novello47,
 
   author = {Novello, A},
   year = 1847,
   note = {subject: history of music printing and engraving},
 }
 
-@Book{chrsander18:_sketc_histor_music,
+@Book{chrsander18,
   author = {Chrsander, F.},
   year = {18??},
   title = {A Sketch of the HIstory of Music printing, from the 15th to the 16th century},
   note = {subject: history of music printing and engraving},
 }
 
-@Article {squire1897,
+@Article{squire1897,
   author = {Squire, W},
   year = 1897,
   title = {Notes on Early Music Printing},
   note = {subject: history of music printing and engraving},
 }
 
-@Article{meyer35:_print_music,
+@Article{meyer35,
   author = {Meyer, K. and O'Meara, J},
   year = 1935,
   title = {The Printing of Music, 1473-1934},
 }
 
 % 4th ver.,
-@Article{pattison39:_notes_early_music_print,
+@Article{pattison39,
   author = {Pattison, B},
   year = 1939,
   title = {Notes on Early Music Printing},
   pages = {389-421},
 }
 
-@Book{king64:_four_hundr_years_music_print,
+@Book{king64,
   author = {King, H},
   year = 1964,
   title = {Four Hundred Years of Music Printing},
 }
 
 %(Rev.1961).
-@Book{deutsch46:_music_number,
+@Book{deutsch46,
   author = {Deutsch, O.F.},
   year = 1946,
   title = {Music Publishers' Numbers},
   note = {subject: history of music printing and engraving},
 }
 
-@Book{marco62:_earlies_music_print_contin_europ,
+@Book{marco62,
   author = {Marco, G.A},
   year = 1962,
   title = {The Earliest Music Printers of Continental Europe: a Checklist of Facsimiles Illustrating Their Work},
   note = {subject: history of music printing and engraving},
 }
 
-@Article{kinkeldey32:_music_and_music_print_incun,
+@Article{kinkeldey32,
   author = {Kinkeldey, O},
   year = 1932,
   title = {Music And Music Printing in Incunabula},
   note = {subject: history of music printing and engraving},
 }
 
-@Book{oldman34:_collec_music_first_edition,
+@Book{oldman34,
   author = {Oldman, C.B},
   year = 1934,
   title = {Collecting Musical First Editions},
   note = {subject: history of music printing and engraving},
 }
 
-@Book{carter34:_new_paths_book_collec,
+@Book{carter34,
   author = {Carter, J},
   year = 1934,
   title = {New Paths in Book Collecting},
   note = {subject: history of music printing and engraving},
 }
 
-@Book{krummel58:_graph_analy_applic_early_americ_engrav_music,
+@Book{krummel58,
   author = {Krummel, D.W.},
   year = 1958,
   month = 9,
   note = {subject: history of music printing and engraving},
 }
 
-@Book{krummel71:_oblon_format_early_music_books,
+@Book{krummel71,
   author = {Krummel, D.W},
   year = 1971,
   title = {Oblong Format in Early Music Books},
   note = {subject: history of music printing and engraving},
 }
 
-@Book{king73:_anniv_music_print,
+@Book{king73,
   author = {King, A.H},
   year = 1973,
   title = {The 50th Anniversary of Music Printing},
 }
 
-@Book{rastall82:_wester,
+@Book{rastall82,
   author = {Rastall, Richard},
   year = 1982,
   title = {The notation of Western music : an introduction},
   note = {Musical notation},
 }
 
-@Book{tappolet47:_la_notat_music,
+@Book{tappolet47,
   author = {Tappolet, Willy},
   year = 1947,
   title = {La Notation Musicale},
   publisher = {Neuchâtel},
 }
 
-@Book{williams03:_story_notat,
+@Book{williams03,
   author = {Williams, C.F. Abdy},
   year = 1903,
   title = {The Story of Notation},
   note = {Musical notation},
 }
 
-@Book{berger93:_mensur,
+@Book{berger93,
   author = {Berger, Anna Maria Busse},
   year = 1993,
   title = {Mensuration and proportion signs : origins and evolution},
   note = {Musical notation},
 }
 
-@Book{parrish46:_notat_mediev_music,
+@Book{parrish46,
   author = {Parrish, Carl},
   year = 1946,
   title = {The Notation of Medieval Music},
   note = {subject: early notation},
 }
 
-@Book{patch49:_genes_music,
+@Book{patch49,
   author = {Patch, Harry},
   year = 1949,
   title = {Genesis of a Music},
   note = {subject: early notation},
 }
 
-@Book{cage69:_notat,
+@Book{cage69,
   author = {Cage, John},
   year = 1969,
   title = {Notations},
   chance operations.,V)},
 }
 
-@Book{gaburo77:_notat,
+@Book{gaburo77,
   author = {Gaburo, Virginia},
   year = 1977,
   title = {Notation},
   note = {A Lecture about notation, new ideas about},
 }
 
-@Book{risatti75:_new_music_vocab,
+@Book{risatti75,
   author = {Risatti, Howard},
   year = 1975,
   title = {New Music Vocabulary},
   note = {A Guide to Notational Signs for Contemporary Music},
 }
 
-@Book{cowell30:_new_music_resour,
+@Book{cowell30,
   author = {Cowell, Henry},
   year = 1930,
   title = {New Musical Resources},
   note = {subject: 20th century notation},
 }
 
-@Article{cowell27:_our_inadeq_notat,
+@Article{cowell27,
   author = {Cowell, Henry},
   year = 1927,
   title = {Our Inadequate Notation},
   note = {subject: 20th century notation},
 }
 
-@Book{bowers92:_music_letter,
+@Book{bowers92,
   author = {Bowers, Roger},
   year = 1992,
   title = {Music & Letters},
   note = {Some reflection upon notation and proportion in Monteverdi's mass and vespers},
 }
 
-@Book{brainard92:_curren_music,
+@Book{brainard92,
   author = {Brainard, Paul},
   year = 1992,
   title = {Current Musicology},
   note = {Proportional notation in the music of Schutz and his contemporaries in the 17th Century},
 }
 
-@Book{monelle89:_compar_liter,
+@Book{monelle89,
   author = {Monelle, Raymond},
   year = 1989,
   title = {Comparative Literature},
   note = {Music notation and the poetic foot},
 }
 
-@Book{pinegar93:_curren_music,
+@Book{pinegar93,
   author = {Pinegar, Sandra},
   year = 1993,
   title = {Current Musicology},
   note = {The seeds of notation and music paleography.},
 }
 
-@Book{smith90:_curren_music,
+@Book{smith90,
   author = {Smith, Norman E},
   year = 1990,
   title = {Current Musicology},
   note = {The notation of fractio modi.},
 }
 
-@Book{treitler92:_journ_music,
+@Book{treitler92,
   author = {Treitler, Leo},
   year = 1992,
   title = {The Journal of Musicology},
   Notational practice developed in medieval music to address the written tradition for chant which interacted with the unwritten vocal tradition.},
 }
 
-@Book{west94:_music_letter,
+@Book{west94,
   author = {West, M.L},
   year = 1994,
   title = {Music & Letters},
   A new way of deciphering the ancient Babylonian musical notation.}
 }
 
-@Book{brown86:_music_quart,
+@Book{brown86,
   author = {Brown, Earle},
   year = 1986,
   title = {Musical Quarterly},
   note = {The notation and performance of new music.},
 }
 
-@Book{eggleston94:_notes,
+@Book{eggleston94,
   author = {Eggleston, Suzanne},
   year = 1994,
   title = {Notes},
   contents of each listed periodical. Includes Music Notation News},
 }
 
-@Book{fuller89:_journ_music,
+@Book{fuller89,
   author = {Fuller, David},
   year = 1989,
   title = {The Journal of Musicology},
   note = {Notes and inegales unjoined: defending a definition. (written-out inequalities in music notation).}
 },
 
-@Book{jones90:_persp_new_music,
+@Book{jones90,
   author = {Jones, David Evan},
   year = 1990,
   title = {Perspectives of New Music},
   note = {Contemporary notation for the shakuhachi: a primer for composers. (Tradition and Renewal in the Music of Japan)},
 }
 
-@Book{rastall93:_music_letter,
+@Book{rastall93,
   author = {Rastall, Richard},
   year = 1993,
   title = {Music & Letters},
   Refor by the Chroma Foundation (book reviews).},
 }
 
-@Article {Francois92,
+@Article{francois92,
   author = {Francois, Jean-Charles},
   journal = {Perspectives of New Music},
   volume = {30},
index 3f5f71c62c531001bdf6e073519a411478790775..547a990c81b50c649d79f4c01989651f207cf191 100644 (file)
@@ -6,7 +6,7 @@
 @String{CitH = {Computing and the Humanities}}
 @String{CMJ = {Computer Music Journal}}
 
-@Book {smith73,
+@Book{smith73,
   year = {1973},
   title = {Editing and Printing Music by Computer},
   author = {Leland Smith},
@@ -17,7 +17,7 @@
 music-printing system SCORE}
 }
 
-@Article {byrd74,
+@Article{byrd74,
   year = {1974},
   title = {A System for Music Printing by Computer},
   author = {Donald Byrd},
@@ -39,14 +39,14 @@ music-printing system SCORE}
 }
 
 % Gomberg
-@PhdThesis {gomber75,
+@PhdThesis{gomberg75,
   year = {1975},
   title = {A Computer-Oriented System for Music Printing},
   author = {David A. Gomberg},
   school = {Washington University},
 }
 
-@Book {gomberg,
+@Book{gomberg77,
   title = {A Computer-oriented System for Music Printing},
   author = {David A.  Gomberg},
   journal = CitH,
@@ -59,7 +59,7 @@ music-printing system SCORE}
   computer algorithms."}
 }
 
-@TechReport{Ornstein83,
+@TechReport{ornstein83,
   author = {Ornstein, Severo M. and John Turner Maxwell III},
   title = {Mockingbird: A Composer's Amanuensis},
   institution = {Xerox Palo Alto Research Center},
@@ -69,7 +69,7 @@ music-printing system SCORE}
   year = {1983}
 }
 
-@Article{Ornstein84,
+@Article{ornstein84,
   author = {Ornstein, Severo M. and John Turner Maxwell III},
   title = {Mockingbird: A Composer's Amanuensis},
   journal = {Byte},
@@ -81,7 +81,7 @@ for music composition}
 }
 
 % byrd
-@PhdThesis {byrd85,
+@PhdThesis{byrd85,
   year = {1985},
   title = {Music Notation by Computer},
   author = {Donald Byrd},
@@ -204,14 +204,14 @@ representation. HWN},
   editors = {Genevois \& Orlarey}
 }
 
-@Book {CASR,
+@Book{casr,
   note = {Annual editions since 1985, many containing surveys of music typesetting technology. SP},
   title = {Directory of Computer Assisted Research in Musicology},
   author = {Walter B Hewlett and Eleanor Selfridge-Field},
   totalentry = {Menlo Park, CA: Center for Computer Assisted Research in the Humanities},
 }
 
-@Book{selfridge-field97:_beyon_midi,
+@Book{selfridge-field97,
   title = {Beyond MIDI: the handbook of musical codes},
   editor = {Eleanor Selfridge-Field},
   publisher = {MIT Press},
@@ -219,8 +219,8 @@ representation. HWN},
   note = {A description of various music interchange formats.}
 }
 
-@InProceedings{hoos98:_guido_music_notat_format,
-  title = {The {GUIDO} Music Notation Format---A Novel Approach
+@InProceedings{hoos98,
+  title = {The GUIDO Music Notation Format---A Novel Approach
 for Adequately Representing Score-level Music},
   author = {H. H. Hoos and K. A. Hamel and K. Renz and J. Kilian},
   booktitle = {Proceedings of International Computer Music Conference},
@@ -228,7 +228,7 @@ for Adequately Representing Score-level Music},
   pages = {451--454},
 }
 
-@Article {blostein91,
+@Article{blostein91,
   note = {This paper provides a overview of the algorithm used in LIME
   for spacing individual lines. HWN},
   year = {1991},
@@ -241,7 +241,7 @@ for Adequately Representing Score-level Music},
   pages = {88-99},
 }
 
-@Article {haken93,
+@Article{haken93,
   year = {1993},
   title = {The Tilia Music Representation: Extensibility, Abstraction, and Notation Contexts for the Lime Music Editor},
   author = {Lippold Haken and Dorothea Blostein},
@@ -277,7 +277,7 @@ relating to this interactive editor HWN},
 adjacent columns.},
 }
 
-@InProceedings{bouzaiene98:_une,
+@InProceedings{bouzaiene98,
   author = {Nabil Bouzaiene and Loïc Le Gall and Emmanuel Saint-James},
   title = {Une bibliothèque pour la notation  musicale baroque},
   booktitle = {EP '98},
@@ -299,7 +299,7 @@ adjacent columns.},
 %
 % MusiCopy
 %
-@TechReport {gourlay87-spacing,
+@TechReport{gourlay87-spacing,
 annote = {Algorithm for generating spacing in one line of (polyphonic) music, tailored for use with MusiCopy. LilyPond uses a variant of it.},
   year = {1987},
   title = {Spacing a Line of Music,},
@@ -308,16 +308,16 @@ annote = {Algorithm for generating spacing in one line of (polyphonic) music, ta
   institution = {Department of Computer and Information Science, The Ohio State University},
 }
 
-@TechReport {parish87,
-  annote = {A brief overview of {MusiCopy}},
+@TechReport{parish87,
+  annote = {A brief overview of MusiCopy},
   year = {1987},
-  title = {{MusiCopy}: An automated Music Formatting System},
+  title = {MusiCopy: An automated Music Formatting System},
   author = {Allen Parish and Wael A. Hegazy and John S. Gourlay and Dean K. Roush and F. Javier Sola},
   totalentry = {OSU-CISRC-10/87-TR29},
   institution = {Department of Computer and Information Science, The Ohio State University},
 }
 
-@TechReport {gourlay87-formatting,
+@TechReport{gourlay87-formatting,
   note = {This paper discusses the development of algorithms for the
 formatting of musical scores (from abstract). It also appeared at
 PROTEXT III, Ireland 1986},
@@ -330,9 +330,9 @@ and D. Roush and F. Sola and Y. Tien},
 The Ohio State University},
 }
 
-@TechReport {hegazy87,
+@TechReport{hegazy87,
   year = {1987},
-  title = {On the Implementation of the {MusiCopy} Language Processor,},
+  title = {On the Implementation of the MusiCopy Language Processor,},
   author = {Wael A. Hegazy},
   number = {OSU-CISRC-10/87-TR34},
   institution= {Department of Computer and Information Science, The Ohio State University},
@@ -354,7 +354,7 @@ the input: the elements of the input are partially complete graphic
 objects.},
 }
 
-@TechReport {hegazy87-breaking-tr,
+@TechReport{hegazy87-breaking-tr,
   annote = {This generalizes \TeX's breaking algorithm to music. It also
 appeared in Document Manipulation and Typography, J.C. van Vliet (ed)
 1988},
@@ -365,7 +365,7 @@ appeared in Document Manipulation and Typography, J.C. van Vliet (ed)
   institution= {Department of Computer and Information Science, The Ohio State University,},
 }
 
-@InProceedings{hegazy88:_optim,
+@InProceedings{hegazy88,
   author = {Wael A. Hegazy and John S. Gourlay},
   booktitle = {Proceedings of the International Conference on
 Electronic Publishing, Document Manipulation and Typography. Nice (France)},
@@ -377,16 +377,16 @@ Electronic Publishing, Document Manipulation and Typography. Nice (France)},
   title = {Optimal line breaking in music},
 }
 
-@TechReport {roush87,
+@TechReport{roush87,
   note = {User manual of MusiCopy.},
   year = {1987},
-  title = {Using {MusiCopy}},
+  title = {Using MusiCopy},
   author = {Dean K. Roush},
   number = {OSU-CISRC-18/87-TR31},
   institution= {Department of Computer and Information Science, The Ohio State University},
 }
 
-@TechReport {parrish87-simultaneities,
+@TechReport{parrish87-simultaneities,
   note = {This note discusses
   placement of balls, stems, dots which occur at the same moment
   ("Simultaneity")},
@@ -397,7 +397,7 @@ Electronic Publishing, Document Manipulation and Typography. Nice (France)},
   number = {OSU-CISRC-10/87-TR28},
 }
 
-@TechReport {sola87,
+@TechReport{sola87,
   note = {Overview of a procedure for generating slurs},
   year = {1987},
   title = {Computer Design of Musical Slurs, Ties and Phrase Marks,},
@@ -406,7 +406,7 @@ Electronic Publishing, Document Manipulation and Typography. Nice (France)},
   number = {OSU-CISRC-10/87-TR32},
 }
 
-@Article {gourlay86,
+@Article{gourlay86,
   note = {This paper describes the MusiCopy musicsetting system and an input language to go with it.},
   year = {1986},
   title = {A language for music printing},
@@ -417,7 +417,7 @@ Electronic Publishing, Document Manipulation and Typography. Nice (France)},
   pages = {388--401},
 }
 
-@TechReport {sola87-beams,
+@TechReport{sola87-beams,
   institution= {Department of Computer and Information Science, The Ohio
 State University},
   note = {Calculating beam slopes HWN},
@@ -427,7 +427,7 @@ State University},
   number = {OSU-CISRC-10/87-TR30},
 }
 
-@PhdThesis {page88,
+@PhdThesis{page88,
   note = {Don't ask Stephen for a copy. Write to the Bodleian Library, Oxford, or to the British Library, instead. SP},
   year = {1988},
   title = {Computer Tools for Music Information Retrieval},
@@ -477,10 +477,10 @@ general rules, similar to [parrish87-simultaneities]},
 rules.  Same remarks as for [grover89-twovoices] applies},
 }
 
-@PhdThesis{mueller90:_inter_bearb_musik,
+@PhdThesis{mueller90,
   author = {Giovanni Müller},
   title = {Interaktive Bearbeitung konventioneller Musiknotation},
-  school = {Eidgenössischen Technischen Hochschule Zürich},
+  school = {Eidgenössische Technische Hochschule Zürich},
   year = 1990,
   note = {This is about engraver-quality typesetting with computers.  It
 accepts the axiom that notation is too difficult to generate
@@ -500,7 +500,7 @@ WYSIWYG editor that allows one to tweak everything.},
   translation = {``An automated system for printing music'' Master's Thesis Managerial Computer Science.},
 }
 
-@Article {filgueiras93,
+@Article{filgueiras93,
   year = {1993},
   title = {Representation and manipulation of music documents in SceX},
   author = {Miguel Filgueiras and José Paulo Leal},
@@ -510,7 +510,7 @@ WYSIWYG editor that allows one to tweak everything.},
   url= {http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.17.1480},
 }
 
-@Article {foxley87,
+@Article{foxley87,
   note = {A paper on a simple TROFF preprocessor to typeset music.},
   year = {1987},
   title = {Music --- A language for typesetting music scores},
@@ -521,7 +521,7 @@ WYSIWYG editor that allows one to tweak everything.},
   pages = {485-502},
 }
 
-@Article {Langston90,
+@Article{langston90,
   note = {This paper deals with some command-line
   tools for music editing and playback.},
   year = {1990},
@@ -533,30 +533,30 @@ WYSIWYG editor that allows one to tweak everything.},
   pages = {47--61},
 }
 
-@Book {filgueiras96,
+@Book{filgueiras96,
   year = {1996},
   title = {Implementing a Symbolic Music Processing System},
   author = {Miguel Filgueiras},
   totalentry = {LIACC, Universidade do Porto, 1996; submitted},
 }
 
-@Book {filgueiras?,
+@Book{filgueiras,
   title = {Some Music Typesetting Algorithms},
   author = {Miguel Filgueiras},
   totalentry = {Miguel Filgueiras. ``Some Music Typesetting Algorithms''. LIACC, Universidade do Porto, forthcoming},
 }
 
-@Article {colorado-web,
+@Article{colorado-web,
   author = {Alyssa Lamb},
   note = {Webpages about engraving (designed with finale
 users in mind) (sic) HWN},
   institution = {The University of Colorado},
-  title = {The University of Colorado Music Engraving page.},
+  title = {The University of Colorado Music Engraving page},
   HTML= {http://www.cc.colorado.edu/Dept/MU/Musicpress/},
   year = {1996}
 }
 
-@Article {tablature-web,
+@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},
@@ -564,7 +564,7 @@ users in mind) (sic) HWN},
   url= {http://www.guitartabs.cc/tabfaq.shtml},
 }
 
-@Article {niff-web,
+@Article{niff-web,
   note = {Specs for NIFF, a reasonably comprehensive but binary
   format for notation HWN},
   year = {1995},
@@ -575,7 +575,7 @@ users in mind) (sic) HWN},
   ftp = {ftp://blackbox.cartah.washington.edu}
 }
 
-@Article {smdl-web,
+@Article{smdl-web,
   author = {International Organization for Standardization (ISO)},
   title = {Information Technology - Document Description and Processing Languages - Standard Music Description Language (SMDL)},
   pdf = {ftp://ftp.ornl.gov/pub/sgml/wg8/smdl/10743.pdf},
@@ -586,7 +586,7 @@ definition, but no support for notation / performance whatsoever (They
 basically say: "You can embed a NIFF or MIDI file")},
 }
 
-@Article {rader96,
+@Article{rader96,
   note = {Describes a system called MusicEase, and explains that it
   uses "constraints" (which go unexplained) to automatically position
   various elements.},
@@ -601,14 +601,14 @@ basically say: "You can embed a NIFF or MIDI file")},
   pages = {61--69},
 }
 
-@MastersThesis{gall97:_creat,
+@MastersThesis{gall97,
   author = {Loïc Le Gall},
   title = {Création d'une police adaptée à la notation musicale baroque},
   school = {École Estienne},
   year = 1997,
 }
 
-@TechReport{droettboom00:_study_notat_descr_languag,
+@TechReport{droettboom00,
   author = {Michael Droettboom},
   title = {Study of music Notation Description Languages},
   year = 2000,
@@ -618,7 +618,7 @@ issues as usability and availability of tools, GUIDO wins on
 implementation simplicity.},
 }
 
-@PhdThesis{gieseking01:_code_gener_noten,
+@PhdThesis{gieseking01,
   author = {Martin Gieseking},
   title = {Code-basierte Generierung interaktiver Notengraphik},
   school = {Universität Osnabrück},
@@ -626,7 +626,7 @@ implementation simplicity.},
   isbn = {ISBN 3-923486-30-8}
 }
 
-@Book{hewlett01:_virtual_score,
+@Book{hewlett01,
   editor = {Walter B. Hewlett and Eleanor Selfridge-Field},
   title = {The Virtual Score; representation, retrieval and restoration},
   publisher = {MIT Press},
@@ -634,14 +634,14 @@ implementation simplicity.},
   year = 2001
 }
 
-@PhdThesis{renz02:_algor_guido,
+@PhdThesis{renz02,
   author = {Kai Renz},
   title = {Algorithms and data structures for a music notation system based on GUIDO music notation},
   school = {Universität Darmstadt},
   year = 2002
 }
 
-@InBook{powell02:_music,
+@InBook{powell02,
   author = {Steven Powell},
   title = {Music engraving today},
   publisher = {Brichtmark},
@@ -649,7 +649,7 @@ implementation simplicity.},
   note = {A "How Steven uses Finale" manual.}
 }
 
-@InProceedings{nienhuys03:_lilyp,
+@InProceedings{nienhuys03,
   author = {Han-Wen Nienhuys and Jan Nieuwenhuizen},
   title = {LilyPond, a system for automated music engraving},
   booktitle = {XIV Colloquium on Musical Informatics},
index 0bdad499df19b0a7a8117fc0b261a6852fda689c..f419af4e658594a75b9bea75dda27f7f16aabbb9 100644 (file)
@@ -6,7 +6,7 @@
 % AUTHOr =Han-Wen Nienhuys
 %
 
-@Book{banter,
+@Book{banter87,
   author = {Harald Banter},
   title = {Akkord Lexikon},
   publisher = {Schott's Söhne},
@@ -18,7 +18,7 @@
   address = {Mainz, Germany},
 }
 
-@Book{rastall,
+@Book{rastall83,
   author = {Richard Rastall},
   ALTeditor = {},
   title = {The Notation of Western Music: an
@@ -28,7 +28,7 @@
   note = {Interesting account of the evolution and origin of common notation starting from neumes, and ending with modern innovations HWN},
 }
 
-@Book{ignatzek95:_jazzm_klavier,
+@Book{ignatzek95,
   author = {Klaus Ignatzek},
   title = {Die Jazzmethode für Klavier 1},
   publisher = {Schott},
@@ -36,7 +36,7 @@
   note = {This book contains a system for denoting chords that is used in LilyPond.}
 }
 
-@Book{mcgrain,
+@Book{mcgrain91,
   author = {Mark Mc Grain},
   title = {Music notation},
   year = 1991,
@@ -48,7 +48,7 @@ content has nothing you won't find in other books like [read] or
 [heussenstamm].   }
 }
 
-@Book{ross,
+@Book{ross87,
   author = {Ted Ross},
   title = {Teach yourself the art of music engraving and processing},
   publisher = {Hansen House},
@@ -60,7 +60,7 @@ content has nothing you won't find in other books like [read] or
   address = {Miami, Florida},
 }
 
-@Book {read78,
+@Book{read78,
   note = {Sound (boring) review of the various hairy rhythmic notations used by avant-garde composers HWN},
   year = {1978},
   title = {Modern Rhythmic Notation},
@@ -68,7 +68,7 @@ content has nothing you won't find in other books like [read] or
   publisher = {Indiana University Press},
 }
 
-@Book {read-notation,
+@Book{read79,
   note = {This is as close to the ``standard''
 reference work for music notation issues as one is likely to get.},
   title = {Music Notation: a Manual of Modern Practice},
@@ -79,7 +79,7 @@ reference work for music notation issues as one is likely to get.},
   address = {New York},
 }
 
-@Book {weaner93,
+@Book{weaner93,
   year = {1993},
   title = {Standard Music Notation Practice},
   author = {Maxwell Weaner and Walter Boelke},
@@ -88,7 +88,7 @@ reference work for music notation issues as one is likely to get.},
   address = {New York}
 }
 
-@Book {wanske,
+@Book{wanske88,
   annote = {I. A very thorough overview of engraving practices of various
 craftsmen. It includes detailed specs of characters, dimensions
 etc. II. a thorough overview of a anonymous (by now antiquated)
@@ -103,7 +103,7 @@ Notenstichs zum EDV-gesteuerten Notensatz},
   isbn = {ISBN 3-7957-2886-x},
 }
 
-@Book {hader48,
+@Book{hader48,
   year = {1948},
   title = {Aus der Werkstatt eines Notenstechers},
   author = {Karl Hader},
@@ -117,7 +117,7 @@ contains a few compactly formulated rules on musical orthography. Out
 of print.}
 }
 
-@Book{gamble23:_music_engrav,
+@Book{gamble23,
   author = {William Gamble},
   title = {Music Engraving and printing.  Historical and Technical Treatise},
   publisher = {Sir Isaac Pitman & Sons, ltd.},
@@ -131,7 +131,7 @@ illusions.  It is available as reprint from Da Capo Press, New York
 (1971).}
 }
 
-@Booklet {mpa96,
+@Booklet{mpa96,
   note = {Pamphlet explaining a few  fine points in music font design HWN},
   year = {1996},
   title = {Standard music notation specifications for computer programming.},
@@ -140,7 +140,7 @@ illusions.  It is available as reprint from Da Capo Press, New York
   publisher = {MPA},
 }
 
-@Book {donato63,
+@Book{donato63,
   year = {1963},
   author = {Anthony Donato},
   title = {Preparing Music Manuscript},
@@ -148,7 +148,7 @@ illusions.  It is available as reprint from Da Capo Press, New York
   publisher = {Prentice-Hall},
 }
 
-@Book {Karkoshka72,
+@Book{karkoshka72,
   year = {1972},
   title = {Notation in New Music; a critical guide to interpretation and realisation},
   author = {Erdhard Karkoshka},
@@ -158,7 +158,7 @@ illusions.  It is available as reprint from Da Capo Press, New York
   note = {(Out of print)},
 }
 
-@Book {Roemer84,
+@Book{roemer84,
   year = {1984},
   title = {The Art of Music Copying},
   author = {Clinton Roemer},
@@ -169,7 +169,7 @@ which specializes in methods used in the commercial field. },
   edition = {2nd},
 }
 
-@Book {Rosecrans79,
+@Book{rosecrans79,
   year = {1979},
   title = {Music Notation Primer},
   author = {Glen Rosecrans},
@@ -178,7 +178,7 @@ which specializes in methods used in the commercial field. },
   note = {Heussenstamm writes: Limited in scope, similar to [Roemer84]}
 }
 
-@Book {donemus1982,
+@Book{donemus82,
   year = {1982},
   title = {Uitgeven van muziek},
   subtitle = {Handleiding voor componisten en copiisten},
@@ -198,7 +198,7 @@ material for modern pieces.}
 }
 
 @Book{schirmer90,
-  author = {{G. Schirmer, Inc.}},
+  author = {Schirmer},
   title = {The G. Schirmer Manual of Style and Usage},
   address = {New York},
   publisher = {The G. Schirmer Publications Department},
@@ -210,7 +210,7 @@ notation books. It also gives a good idea of what is necessary to bring
 printouts to publication quality. It can be ordered from the rental department.},
 }
 
-@Book {Stone80,
+@Book{stone80,
   year = {1980},
   title = {Music Notation in the Twentieth Century},
   author = {Kurt Stone},
@@ -219,7 +219,7 @@ printouts to publication quality. It can be ordered from the rental department.}
   note = {Heussenstamm writes: The most important book on notation in recent years.},
 }
 
-@Book {Heussenstamm87,
+@Book{heussenstamm87,
   year = {1987},
   title = {The Norton Manual of Music Notation},
   author = {George Heussenstamm},
@@ -228,7 +228,7 @@ printouts to publication quality. It can be ordered from the rental department.}
   note = {Hands-on instruction book for copying (ie. handwriting) music.  Fairly complete. HWN}
 }
 
-@Book {gerou96,
+@Book{gerou96,
   note = {A cheap, concise, alphabetically ordered list of typesetting and music (notation) issues with a rather simplistic attitude but in most cases "good-enough" answers JCN},
   year = {1996},
   title = {Essential Dictionary of Music Notation},
@@ -238,7 +238,7 @@ printouts to publication quality. It can be ordered from the rental department.}
   isbn = {ISBN 0-88284-768-6},
 }
 
-@Book {chlapik87,
+@Book{chlapik87,
   note = {An clearly written book for the casually interested
 reader. It shows some of the conventions and difficulties in
 printing music HWN},
@@ -249,7 +249,7 @@ printing music HWN},
   isbn = {ISBN 3-9000 035-96-2},
 }
 
-@Book {barksdale57,
+@Book{barksdale57,
   author = {Barksdale, A},
   year = {1957},
   title = {The Printed Note: 500 Years of Music Printing and Engraving},
@@ -259,7 +259,7 @@ printing music HWN},
   publisher = {The Toledo Museum of Art},
 }
 
-@Book {wolf19,
+@Book{wolf19,
   author = {Wolf, Johannes},
   year = {1919},
   title = {Handbuch der Notationskunde},
@@ -268,7 +268,7 @@ printing music HWN},
   note = {Very thorough treatment (in two volumes) of the history of music notation},
 }
 
-@Book {rosenthal67,
+@Book{rosenthal67,
   author = {Rosenthal, Carl A},
   year = {1967},
   title = {A Practical Guide to Music Notation},
@@ -277,7 +277,7 @@ printing music HWN},
   note = {Heussenstamm writes: Informative in terms of traditional notation.  Does not concern score preparation}
 }
 
-@Book {Boehm61,
+@Book{boehm61,
   author = {Boehm, Laszlo},
   year = {1961},
   title = {Modern Music Notation},
@@ -286,7 +286,7 @@ printing music HWN},
   note = {Heussenstamm writes: A handy compact reference book in basic notation.}
 }
 
-@Book{button20:_system_music_notat,
+@Book{button20,
   author = {Button, H. Elliot},
   title = {System in Musical Notation},
   publisher = {Novello and co.},
@@ -294,7 +294,7 @@ printing music HWN},
   address = {London}
 }
 
-@Book{johnson46:_how,
+@Book{johnson46,
   author = {Johnson, Harold},
   title = {How to write music manuscript},
   publisher = {Carl Fischer, Inc.},
@@ -302,7 +302,7 @@ printing music HWN},
   address = {New York}
 }
 
-@Book{tyboni94:_noter_handb_i_tradit_noter,
+@Book{tyboni94,
   author = {Börje Tyboni},
   title = {Noter Handbok I Traditionell Notering},
   publisher = {Gehrmans Musikförlag},
@@ -311,7 +311,7 @@ printing music HWN},
   note = {Swedish book on music notation.}
 }
 
-@Book{jaschinski00:_notat,
+@Book{jaschinski00,
   editor = {Andreas Jaschinski},
   title = {Notation},
   publisher = {Bärenreiter Verlag},
index 2be07164f4d99b87cf05d33cc0134723123e964b..dcd7ac7610b8057c69a6ed346bcc2d551e7bab6d 100644 (file)
@@ -84,15 +84,15 @@ practices.
 @node Long literature list
 @section Long literature list
 
-@subheading Colorado
+@subheading University of Colorado Engraving music bibliography
 
 @include colorado.itexi
 
-@subheading Computer notation
+@subheading Computer notation bibliography
 
 @include computer-notation.itexi
 
-@subheading Engraving
+@subheading Engraving bibliography
 
 @include engravingbib.itexi
 
index a2406481d50e9ab0dea9b75fbf4e25b0c0b98d7d..13320d46bac5e4f5d7601650f31ec084a08df0da 100644 (file)
@@ -1,23 +1,7 @@
-% 18/aug/2010:
-%    - changed into texi-long.bst by Graham Percival for GNU LilyPond
-%    - only a minimum of changes were made; some html remains in
-%      this file, but it does not appear in our output
-% BibTeX bibliography style `html-long'
-%   spits out texinfo-formatted bibliography in place of bbl output
-% by David Kotz dfk@cs.dartmouth.edu
-% $Id: html-long.bst,v 1.4 2005/07/21 21:29:50 hjunes Exp $
-%    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.
+% This template file was written by Phil Holmes to replace the one used for the bibliogrphy
+% on the LilyPond project.  18 Feb 2011
 
-% DFK added abstract, comment, earlier, keyword, later, URL
+% This section lists the possible fields, although not all are handled by the template
 ENTRY
   { abstract
     address
@@ -52,212 +36,23 @@ ENTRY
   {}
   { 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 :=
-}
-
+% s and t came from the original.  The other strings are self explanatory
 STRINGS { s t }
+STRINGS { ThesisType ReportType }
 
-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 texinfo, and use URL to make cite key a link
-FUNCTION {output.bibitem}
-{ newline$
-  URL empty$
-    { "@item @code{[" cite$ * "]} " * write$ newline$
-    }
-    { "" quote$ * cite$ * quote$ * " HREF=" * quote$ *
-       URL * quote$ * "> " * cite$ * ":</A></DT>" * write$
-    }
-  if$
-  newline$
-%  "" 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$
-%  "" 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 texinfo
-FUNCTION {emphasize}
-{ duplicate$ empty$
-    { pop$ "" }
-    { "@emph{" swap$ * "}" * }
-  if$
-}
-
-% DFK added for texinfo strong emphasis
-FUNCTION {strong}
-{ duplicate$ empty$
-    { pop$ "" }
-    { "@strong{" swap$ * "}" * }
-  if$
-}
-
+% from the original
 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$
-}
-
+% This was simply copied and pasted from the original
 FUNCTION {format.names}
 { 's :=
   #1 'nameptr :=
   s num.names$ 'numnames :=
   numnames 'namesleft :=
     { namesleft #0 > }
-    { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+    % This line was changed: the {ff{ } } entry outputs the first name without allowing bibtex to use
+    % a ~ to replace the spaces where it thinks fit.  The downside is that we lose hyphens...
+    { s nameptr "{ff{ } }{vv }{ll}{, jj}" format.name$ 't :=
       nameptr #1 >
        { namesleft #1 >
            { ", " * t * }
@@ -266,7 +61,7 @@ FUNCTION {format.names}
                'skip$
              if$
              t "others" =
-               { " et&nbsp;al." * }
+               { " et al." * }
                { " and " * t * }
              if$
            }
@@ -281,55 +76,51 @@ FUNCTION {format.names}
 }
 
 FUNCTION {format.authors}
+% This is a very common construct.  It means "if the author is empty, process the lines in the first pair
+% of braces {}.  Otherwise process the lines in the second pair.  So if it's empty, an empty string is
+% stacked.
 { author empty$
     { "" }
-    { author format.names  author.title.purify }
+    % If it's not empty, it formats author (and stacks the result) and then checks whether editor is empty
+    { author format.names
+      editor empty$
+        % If editor is empty, it appends an empty string (the * is a postfix operator meaning append this
+        % string to the top entry on the stack
+        { "" * }
+        % Otherwise it appends a period, parenthesis.
+        { ". (" * }
+      if$
+    }
   if$
 }
 
-FUNCTION {format.editors}
+FUNCTION {format.editor}
 { editor empty$
     { "" }
-    { editor format.names author.title.purify
+    { editor format.names
       editor num.names$ #1 >
        { ", editors" * }
        { ", editor" * }
       if$
+      author empty$
+        { "" * }
+        { ")" * }
+      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 {output.bibitem}
+{ newline$
+  "@item " write$ newline$
 }
 
-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.edition}
+{ edition empty$
+    { "" }
+    { edition " edition, " * }
+  if$
 }
 
 FUNCTION {format.date}
@@ -349,1024 +140,256 @@ FUNCTION {format.date}
   if$
 }
 
-% DFK changed emphasize to strong
-FUNCTION {format.btitle}
-{ title author.title.purify strong
-}
-
-FUNCTION {tie.or.space.connect}
-{ duplicate$ text.length$ #3 <
-    { "&nbsp;" }
-    { " " }
-  if$
-  swap$ * *
-}
-
-FUNCTION {either.or.check}
-{ empty$
-    'pop$
-    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
-  if$
-}
-
-FUNCTION {format.bvolume}
-{ volume empty$
+FUNCTION {format.address}
+{ address empty$
     { "" }
-    { "volume" volume tie.or.space.connect
-      series empty$
-       'skip$
-       { " of " * series emphasize * }
-      if$
-      "volume and number" number either.or.check
+    { address
+    year empty$
+      { "" * }
+      { ", " * }
+    if$
     }
   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$
-       }
+FUNCTION {format.publisher}
+{
+  publisher empty$
+    { "" }
+    { publisher
+      address empty$
+        { year empty$
+            { "" * }
+            { ", " * }
+          if$
+        }
+        { ", " * }
       if$
     }
-    { "" }
   if$
 }
 
-FUNCTION {format.edition}
-{ edition empty$
+FUNCTION {format.note}
+{ note empty$
     { "" }
-    { output.state mid.sentence =
-       { edition "l" change.case$ " edition" * }
-       { edition "t" change.case$ " edition" * }
-      if$
+    { note
+      add.period$
     }
   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$
+FUNCTION {format.title}
+{ title empty$
     { "" }
-    { pages multi.page.check
-       { "pages" pages n.dashify tie.or.space.connect }
-       { "page" pages tie.or.space.connect }
+    { "@strong{" title * "}" *
+    journal empty$
+    {
+      volume empty$
+        { "" * }
+        { ", " * }
       if$
     }
+    { "" * }
+    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$
+FUNCTION {format.number}
+{
+  % ReportType is set by us when we call the correct function for the bibliography type
+  ReportType empty$
+  {
+    volume empty$
+      {number empty$
+        { "" }
+        { "Number " number * ". " * }
       if$
+      }
+      { "" }
+    if$
     }
-  if$
-  pages empty$
-    'skip$
-    { duplicate$ empty$
-       { pop$ format.pages }
-       { ":" * pages n.dashify * }
+    { ReportType
+      number empty$
+        { ", " * }
+        { " " * number * ", " * institution * ", " * }
       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$
+FUNCTION {format.volume}
+{ journal empty$
+  {
+    volume empty$
+      { "" }
+      { "volume " volume * }
+    if$
+  }
+  { "" }
+  if$
+}
+
+FUNCTION {format.journal}
+{ journal empty$
+  { "" write$ }
+  { "@emph{" journal * "}" *
+    write$
+    volume empty$
+      { "" }
+      { ", " volume * }
+    if$
+    write$
+    number empty$
+      { "" }
+      { "(" number * ")" * }
+    if$
+    write$
+    pages empty$
+      { "" }
+      { ":" pages * }
+    if$
+    write$
+    year empty$
+      { "" }
+      { ", " }
+    if$
+    write$
+ }
+  if$
+}
+
+FUNCTION {format.series}
+{ series empty$
+    { "" }
+    { series
+      % This is an inbuilt function that adds a period when appropriate.
+      add.period$
+      " " *
     }
   if$
 }
 
-FUNCTION {format.in.ed.booktitle}
+FUNCTION {format.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 * "}" *
-  " [" * crossref * "]" *
-}
-
-FUNCTION {format.crossref.editor}
-{ editor #1 "{vv~}{ll}" format.name$
-  editor num.names$ duplicate$
-  #2 >
-    { pop$ " et&nbsp;al." * }
-    { #2 <
-       'skip$
-       { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-           { " et&nbsp;al." * }
-           { " and " * editor #2 "{vv~}{ll}" format.name$ * }
-         if$
-       }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.book.crossref}
-{ volume empty$
-    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
-      "In "
-    }
-    { "Volume" volume tie.or.space.connect
-      " of " *
-    }
-  if$
-  editor empty$
-  editor field.or.null author field.or.null =
-  or
-    { key empty$
-       { series empty$
-           { "need editor, key, or series for " cite$ * " to crossref " *
-             crossref * warning$
-             "" *
-           }
-           { "{\em " * series * "\/}" * }
-         if$
-       }
-       { key * }
-      if$
-    }
-    { format.crossref.editor * }
-  if$
-%  " \cite{" * crossref * "}" *
-  " [" * 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 * }
+    { "In @emph{" booktitle * "}, " *
+      pages empty$
+        { "" * }
+        { "pages " * pages * ", " * }
       if$
     }
-    { "In " format.crossref.editor * }
   if$
-%  " \cite{" * crossref * "}" *
-  " [" * 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
-    }
+FUNCTION {format.thesis}
+{ ThesisType empty$
+    { "" }
+    { ThesisType school * ", " *}
   if$
-  new.block
-  note output
-  fin.entry
-  dfk.stuff
 }
 
+% This is the function that runs the formatting code.  It's called when the biblio type is @Book
 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$
+  format.authors write$
+  format.editor write$
+  "." write$ newline$
+  format.title write$
+  format.volume write$
+  "." write$ newline$
+  format.number write$
+  format.journal
+  format.series write$
+  format.publisher write$
+  format.address write$
+  format.edition write$
+  format.booktitle write$
+  format.thesis write$
+  format.date write$
+  "." write$ newline$
+  format.note write$
+  newline$
+  newline$
+  newline$
+  newline$
 }
 
-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 :=
+% All the following functions are called for the other biblio types. This is @article
+FUNCTION {article}
+{
+  % And we just call the book function
+  book
 }
 
-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 {booklet}
+{
+  book
 }
 
-FUNCTION {sort.format.title}
-{ 't :=
-  "A " #2
-    "An " #3
-      "The " #4 t chop.word
-    chop.word
-  chop.word
-  sortify
-  #1 global.max$ substring$
+FUNCTION {PhDThesis}
+{
+  % This sets the string ThesisType to be equal to "PhD Thesis"
+  "PhD thesis, " 'ThesisType :=
+  book
+  % And this sets it back to an empty string
+  "" 'ThesisType :=
 }
 
-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 {TechReport}
+{
+  "Technical Report" 'ReportType :=
+  book
+  "" 'ReportType :=
 }
 
-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 {InProceedings}
+{
+  book
 }
 
-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 {MastersThesis}
+{
+  "Master's thesis, " 'ThesisType :=
+  book
+  "" 'ThesisType :=
 }
 
-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 {InBook}
+{
+  book
 }
 
+% Haven't dug too deeply into this, but it seems to set the sort key
 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$
+{ 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 }
+% The entry point for processing
 
-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}
+% Read the .bib file
+READ
 
-ITERATE {forward.pass}
+% Work through the entries, calling the presort function
+ITERATE {presort}
 
-REVERSE {reverse.pass}
+% Sort the entries
+SORT
 
-% DFK removed code about et.al.char
-% DFK changed to texinfo
+% This could go higher with all the other functions, but it _has_ to be above the call
 FUNCTION {begin.bib}
 { "@c bib -> itexi intro" write$ newline$
   "@itemize" write$ newline$
 }
 
+% Run the begin.bib function
 EXECUTE {begin.bib}
 
-EXECUTE {init.state.consts}
-
+% For each bibliogrpahy entry call the relevant function (e.g. book, article, booklet, etc.)
 ITERATE {call.type$}
 
-% DFK changed to texinfo
 FUNCTION {end.bib}
 { newline$
   "@end itemize" write$ newline$
@@ -1374,3 +397,4 @@ FUNCTION {end.bib}
 }
 
 EXECUTE {end.bib}
+% And that's it.
index 1ef43544237ac75af708688016130c7cd0949494..50f61545fef1bcdc93fd19099ab167cc348aa02a 100644 (file)
@@ -1113,6 +1113,7 @@ structure while leaving the notation untouched.
 @menu
 * Using variables::
 * Using tags::
+* Using global settings::
 @end menu
 
 @node Using variables
@@ -1331,6 +1332,33 @@ than one tagged section at the same place.
 
 @end ignore
 
+@node Using global settings
+@unnumberedsubsubsec Using global settings
+
+@cindex include-settings
+
+Global settings can be incuded from a separate file:
+
+@example
+lilypond -dinclude-settings=MY_SETTINGS.ly MY_SCORE.ly
+@end example
+
+Groups of settings such as page size, font or type face can be stored
+in separate files. This allows different editions from the same score
+as well as standard settings to be applied to many scores, simply by
+specifying the proper settings file.
+
+This technique also works well with the use of style sheets, as
+discussed in @rlearning{Style sheets}.
+
+@seealso
+Learning Manual:
+@rlearning{Organizing pieces with variables},
+@rlearning{Style sheets}.
+
+Notation Reference:
+@ref{Including LilyPond files}.
+
 @node Text encoding
 @subsection Text encoding
 
index 0db01c8bde5c920d332110d69302589e87cffb24..78a222794d195e9ceae5c812971e5f6b2357a824 100644 (file)
@@ -594,6 +594,7 @@ This section discusses how to modify pitches.
 @menu
 * Octave checks::
 * Transpose::
+* Modal transformations::
 @end menu
 
 @node Octave checks
@@ -788,6 +789,7 @@ see @ref{Instrument transpositions}.
 @seealso
 Notation Reference:
 @ref{Relative octave entry},
+@ref{Modal transformations},
 @ref{Instrument transpositions}.
 
 Snippets:
@@ -811,6 +813,170 @@ The relative conversion will not affect @code{\transpose},
 To use relative mode within transposed music, an additional
 @code{\relative} must be placed inside @code{\transpose}.
 
+@node Modal transformations
+@unnumberedsubsubsec Modal transformations
+
+@cindex modal transformations
+@cindex transformations, modal
+@cindex operations, modal
+
+In a musical composition that is based on a scale, a motif is
+frequently transformed in various ways.  It may be
+@notation{transposed} to start at different places in the scale, it
+may be @notation{inverted} around a pivot point in the scale, and/or
+it may be converted to its @notation{retrograde} (written backwards).
+
+@warning{Any note that does not lie within the given scale will be
+left untransformed.}
+
+@subsubheading Modal transposition
+
+@cindex modal transposition
+@cindex transposition, modal
+@cindex operation, transposition
+@funindex \modalTranspose
+@funindex modalTranspose
+
+A motif can be transposed within a given scale with:
+
+@example
+\modalTranspose @var{from-pitch} @var{to-pitch} @var{scale} @var{motif}
+@end example
+
+The notes of @var{motif} are shifted within the @var{scale} by the
+number of scale degrees given by the interval between @var{to-pitch}
+and @var{from-pitch}:
+
+@lilypond[verbatim,quote]
+diatonicScale = \relative c' { c d e f g a b }
+motif = \relative c' { c8 d e f g a b c }
+
+\new Staff {
+  \motif
+  \modalTranspose c f \diatonicScale \motif
+  \modalTranspose c b, \diatonicScale \motif
+}
+@end lilypond
+
+An ascending scale of any length and with any intervals may be
+specified:
+
+@lilypond[verbatim,quote]
+pentatonicScale = \relative c' { ges aes bes des ees }
+motif = \relative c' { ees8 des ges,4 <ges' bes,> <ges bes,> }
+
+\new Staff {
+  \motif
+  \modalTranspose ges ees' \pentatonicScale \motif
+}
+@end lilypond
+
+When used with a chromatic scale @code{\modalTranspose} has a
+similar effect to @code{\transpose}, but with the ability to
+specify the names of the notes to be used:
+
+@lilypond[verbatim,quote]
+chromaticScale = \relative c' { c cis d dis e f fis g gis a ais b }
+motif = \relative c' { c8 d e f g a b c }
+
+\new Staff {
+  \motif
+  \transpose c f \motif
+  \modalTranspose c f \chromaticScale \motif
+}
+@end lilypond
+
+@subsubheading Modal inversion
+
+@cindex modal inversion
+@cindex inversion, modal
+@cindex operation, inversion
+@funindex \modalInversion
+@funindex modalInversion
+
+A motif can be inverted within a given scale around a given pivot
+note and transposed in a single operation with:
+
+@example
+\modalInversion @var{around-pitch} @var{to-pitch} @var{scale} @var{motif}
+@end example
+
+The notes of @var{motif} are placed the same number of scale degrees
+from the @var{around-pitch} note within the @var{scale}, but in the
+opposite direction, and the result is then shifted within the
+@var{scale} by the number of scale degrees given by the interval between
+@var{to-pitch} and @var{around-pitch}.
+
+So to simply invert around a note in the scale use the same value for
+@var{around-pitch} and @var{to-pitch}:
+
+@lilypond[verbatim,quote]
+octatonicScale = \relative c' { ees f fis gis a b c d }
+motif = \relative c' { c8. ees16 fis8. a16 b8. gis16 f8. d16 }
+
+\new Staff {
+  \motif
+  \modalInversion fis' fis' \octatonicScale \motif
+}
+@end lilypond
+
+To invert around a pivot between two notes in the scale, invert around
+one of the notes and then transpose by one scale degree.  The two notes
+specified can be interpreted as bracketing the pivot point:
+
+@lilypond[verbatim,quote]
+scale = \relative c' { c g' }
+motive = \relative c' { c c g' c, }
+
+\new Staff {
+  \motive
+  \modalInversion c' g' \scale \motive
+}
+@end lilypond
+
+
+@subsubheading Retrograde transformation
+
+@cindex retrograde transformation
+@cindex transformation, retrograde
+@cindex operation, retrograde
+@funindex \retrograde
+@funindex retrograde
+
+A motif can be reversed to produce its retrograde:
+
+@lilypond[verbatim,quote]
+motif = \relative c' { c8. ees16( fis8. a16 b8.) gis16 f8. d16 }
+
+\new Staff {
+  \motif
+  \retrograde \motif
+}
+@end lilypond
+
+The combined operation of inversion and retrograde produce the
+retrograde-inversion:
+
+@lilypond[verbatim,quote]
+octatonicScale = \relative c' { ees f fis gis a b c d }
+motif = \relative c' { c8. ees16 fis8. a16 b8. gis16 f8. d16 }
+
+\new Staff {
+  \motif
+  \retrograde \modalInversion c' c' \octatonicScale \motif
+}
+@end lilypond
+
+@seealso
+Notation Reference:
+@ref{Transpose}.
+
+@knownissues
+Manual ties inside @code{\retrograde} will be broken and
+generate warnings.  Some ties can be generated automatically
+by enabling @ref{Automatic note splitting}.
+
+
 @node Displaying pitches
 @subsection Displaying pitches
 
@@ -2791,5 +2957,3 @@ Internals Reference:
 @rinternals{Pitch_squash_engraver},
 @rinternals{Voice},
 @rinternals{RhythmicStaff}.
-
-
index 32fe613e9c7e7e11282e5cc4ae8269bb39e4b858..290c8614e192b15a0a84953be8e608041cdb5fd9 100644 (file)
@@ -266,7 +266,7 @@ FUNCTION {format.names}
                'skip$
              if$
              t "others" =
-               { " et&nbsp;al." * }
+               { " et al." * }
                { " and " * t * }
              if$
            }
@@ -354,9 +354,10 @@ FUNCTION {format.btitle}
 { title author.title.purify strong
 }
 
+% PEH - the 2 same lines below are because I replaced &nbsp; with a space
 FUNCTION {tie.or.space.connect}
 { duplicate$ text.length$ #3 <
-    { "&nbsp;" }
+    { " " }
     { " " }
   if$
   swap$ * *
@@ -543,11 +544,11 @@ FUNCTION {format.crossref.editor}
 { editor #1 "{vv~}{ll}" format.name$
   editor num.names$ duplicate$
   #2 >
-    { pop$ " et&nbsp;al." * }
+    { pop$ " et al." * }
     { #2 <
        'skip$
        { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-           { " et&nbsp;al." * }
+           { " et al." * }
            { " and " * editor #2 "{vv~}{ll}" format.name$ * }
          if$
        }
diff --git a/input/regression/autobeam-start-at-beginning-of-measure-in-3-4.ly b/input/regression/autobeam-start-at-beginning-of-measure-in-3-4.ly
new file mode 100644 (file)
index 0000000..5675abe
--- /dev/null
@@ -0,0 +1,19 @@
+\version "2.13.51"
+
+\header {
+
+  texidoc = "
+3/4 beaming has special rules, that are hardcoded in the autobeam
+routines.  When the beaming is changed, beams should start at the
+beginning of the measure.  In this case, the measure should be beamed
+in two.
+"
+}
+
+\relative c' {
+    \time 3/4
+    \set Timing.baseMoment = #(ly:make-moment 1 8)
+    \set Timing.beatStructure = #'(3 3)
+    \set Timing.beamExceptions = #'()
+    c8 c c c c c
+}
index a5067687e9770b2b9063799873d606a91c5687c8..f4d3c1d8d79b2aa0038a6cc438bd3211988dfbd4 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.13.48"
+\version "2.13.51"
 
 \header{
 texidoc="
@@ -12,26 +12,28 @@ lyrics do not collide with barlines.
 }
 
 <<
-    \new Staff \with
-    {
-%      \remove "Bar_engraver"  
-       }
-    {
+    \new Staff {
        b1 \bar "|:" b1 \bar ":|"
     }
     \context Lyrics \with {
        \consists "Bar_engraver"
        \consists "Separating_line_group_engraver"
-       \override BarLine #'bar-extent = #'(-2 . 2)
     } \lyricmode {
          looooooooooooooooooooooooooooooooooong1 syllable
       }
     \lyrics {
-       no Bar_Engraver_Bar_Engraver_Bar_Engraver 
+       no Bar_Engraver_Bar_Engraver_Bar_Engraver
+    }
+    \new Staff {
+       b1 b1
     }
-    \new Staff \with {
-%              \remove "Bar_engraver"  
-    } { b1 b1 }
 >>
-       
+\layout {
+  \context {
+    \Lyrics
+      \override VerticalAxisGroup #'nonstaff-nonstaff-spacing #'minimum-distance = #4
+      \override LyricText #'Y-offset = #-0.7
+      \override BarLine #'bar-extent = #'(-2 . 2)
+  }
+}
 
diff --git a/input/regression/modal-transforms.ly b/input/regression/modal-transforms.ly
new file mode 100644 (file)
index 0000000..9070601
--- /dev/null
@@ -0,0 +1,34 @@
+\version "2.13.51"
+\header {
+    texidoc = "\modalTranspose, \retrograde and \modalInversion work
+for an octatonic motif."
+}
+
+cOctatonicScale = {
+  c' d' ees' f'
+  ges' aes' a' b'
+}
+motif = {
+  c'8. ees'16 ges'8. a'16
+  b'8. aes'16 f'8. d'16
+}
+
+\score {
+  \new Staff {
+    \time 4/4
+    <<
+      {
+        \motif
+        \modalTranspose c' f' \cOctatonicScale \motif
+        \retrograde \motif
+        \modalInversion aes' b' \cOctatonicScale \motif
+      }
+      {
+        s1-"Octatonic motif" |
+        s1-"motif transposed from c to f" |
+        s1-"motif in retrograde" |
+        s1-"motif inverted around aes to b" |
+      }
+    >>
+  }
+}
diff --git a/input/regression/prefatory-separation.ly b/input/regression/prefatory-separation.ly
new file mode 100644 (file)
index 0000000..7b00427
--- /dev/null
@@ -0,0 +1,27 @@
+\version "2.13.51"
+
+\header {
+
+  texidoc = "Prefatory items maintain sufficient separation from
+  musical notation for readability, even in tight spacing.
+  The notes should remain generally on the correct side of the
+  time signature, key signature and barlines.  A key change to
+  G major should be legible."
+
+}
+
+\new Staff <<
+  \relative c''' {
+    \key f \major
+    es4 c c c \bar "||" \noBreak
+    \key g \major
+    <gis cis,>4 r2. \bar "|."
+    } \\
+  \relative c' {
+    R1
+    r4 cis a a
+  }
+>>
+\layout {
+  line-width = 5\cm % impossibly narrow to induce tight spacing
+}
diff --git a/input/regression/repeat-slash-mixed.ly b/input/regression/repeat-slash-mixed.ly
new file mode 100644 (file)
index 0000000..a474504
--- /dev/null
@@ -0,0 +1,18 @@
+\version "2.13.51"
+
+\header {
+  texidoc = "Beat repeats for patterns containing mixed durations use
+a double percent symbol."
+}
+
+\relative c' {
+  \repeat percent 4 {
+    c8. <d f>16
+  }
+  \repeat percent 2 {
+    \times 2/3 {
+      r8 d e
+    }
+    c4
+  }
+}
diff --git a/input/regression/repeat-slash-multi.ly b/input/regression/repeat-slash-multi.ly
new file mode 100644 (file)
index 0000000..dd67040
--- /dev/null
@@ -0,0 +1,11 @@
+\version "2.13.51"
+
+\header {
+  texidoc = "Beat repeats for patterns containing identical durations
+shorter than an eighth note use multiple slashes."
+}
+
+\relative c' {
+  \repeat percent 2 { c16 d e f }
+  \repeat percent 4 { c32 e g e }
+}
index 18697f726b6a3a2b5b04ec2d971f528000481966..43b87d62e0d5a14d5c10ba4a81b7107d2e06b4d4 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.13.36"
+\version "2.13.51"
 
 \header {
   texidoc = "Stems with overridden 'length should not confuse height estimation.
@@ -16,6 +16,7 @@ This example should fit snugly on one page.
 \paper {
   #(set-paper-size "a6")
   tagline = ##f
+  indent = #0
   system-system-spacing = #'((padding . 1.2))
   oddHeaderMarkup = \markup \on-the-fly #assert-single-page \null
 }
index 25952d6783d026593379f480bd3a8d4cc0ba14b3..520d024516a5f350eee316028114e2684f61ab90 100644 (file)
@@ -90,7 +90,7 @@ Axis_group_interface::relative_group_extent (vector<Grob*> const &elts,
 }
 
 Interval
-Axis_group_interface::cached_pure_height (Grob *me, int start, int end)
+Axis_group_interface::sum_partial_pure_heights (Grob *me, int start, int end)
 {
   Interval iv = begin_of_line_pure_height (me, start);
   iv.unite (rest_of_line_pure_height (me, start, end));
@@ -99,27 +99,47 @@ Axis_group_interface::cached_pure_height (Grob *me, int start, int end)
 }
 
 Interval
-Axis_group_interface::rest_of_line_pure_height (Grob *me, int start, int end)
+Axis_group_interface::part_of_line_pure_height (Grob *me, bool begin, int start, int end)
 {
+  Spanner *sp = dynamic_cast<Spanner*> (me);
+  SCM cache_symbol = begin
+    ? ly_symbol2scm ("begin-of-line-pure-height")
+    : ly_symbol2scm ("rest-of-line-pure-height");
+  SCM cached = sp->get_cached_pure_property (cache_symbol, start, end);
+  if (scm_is_pair (cached))
+    return robust_scm2interval (cached, Interval (0, 0));
+
   SCM adjacent_pure_heights = me->get_property ("adjacent-pure-heights");
+  Interval ret;
+
+  if (!scm_is_pair (adjacent_pure_heights))
+    ret = Interval (0, 0);
+  else
+    {
+      SCM these_pure_heights = begin
+       ? scm_car (adjacent_pure_heights)
+       : scm_cdr (adjacent_pure_heights);
 
-  if (!scm_is_pair (adjacent_pure_heights)
-      || !scm_is_vector (scm_cdr (adjacent_pure_heights)))
-    return Interval (0, 0);
+      if (scm_is_vector (these_pure_heights))
+       ret = combine_pure_heights (me, these_pure_heights, start, end);
+      else
+       ret = Interval (0, 0);
+    }
 
-  return combine_pure_heights (me, scm_cdr (adjacent_pure_heights), start, end);
+  sp->cache_pure_property (cache_symbol, start, end, ly_interval2scm (ret));
+  return ret;
 }
 
 Interval
 Axis_group_interface::begin_of_line_pure_height (Grob *me, int start)
 {
-  SCM adjacent_pure_heights = me->get_property ("adjacent-pure-heights");
-
-  if (!scm_is_pair (adjacent_pure_heights)
-      || !scm_is_vector (scm_car (adjacent_pure_heights)))
-    return Interval (0, 0);
+  return part_of_line_pure_height (me, true, start, start + 1);
+}
 
-  return combine_pure_heights (me, scm_car (adjacent_pure_heights), start, start+1);
+Interval
+Axis_group_interface::rest_of_line_pure_height (Grob *me, int start, int end)
+{
+  return part_of_line_pure_height (me, false, start, end);
 }
 
 Interval
@@ -260,7 +280,7 @@ Axis_group_interface::relative_pure_height (Grob *me, int start, int end)
      we can assume additivity and cache things nicely. */
   Grob *p = me->get_parent (Y_AXIS);
   if (p && Align_interface::has_interface (p))
-    return Axis_group_interface::cached_pure_height (me, start, end);
+    return Axis_group_interface::sum_partial_pure_heights (me, start, end);
 
   Grob *common = unsmob_grob (me->get_object ("pure-Y-common"));
   extract_grob_set (me, "pure-relevant-grobs", elts);
index 5dd6cf10ba5aef813d736d2dd50b726bf029428d..4dbb6e5657721e436dc4f52227d24409c62a53e8 100644 (file)
@@ -772,3 +772,13 @@ melisma_busy (Context *tr)
 
   return busy;
 }
+
+bool
+check_repeat_count_visibility (Context const *context, SCM count)
+{
+  SCM proc = context->get_property ("repeatCountVisibility");
+  return (ly_is_procedure (proc)
+         && to_boolean (scm_call_2 (proc,
+                                    count,
+                                    context->self_scm ())));
+}
diff --git a/lily/double-percent-repeat-engraver.cc b/lily/double-percent-repeat-engraver.cc
new file mode 100644 (file)
index 0000000..ad64657
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+  This file is part of LilyPond, the GNU music typesetter.
+
+  Copyright (C) 2011 Neil Puttock <n.puttock@gmail.com>
+
+  LilyPond is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  LilyPond is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "engraver.hh"
+#include "global-context.hh"
+#include "international.hh"
+#include "item.hh"
+#include "side-position-interface.hh"
+#include "stream-event.hh"
+#include "warn.hh"
+
+#include "translator.icc"
+
+class Double_percent_repeat_engraver : public Engraver
+{
+public:
+  TRANSLATOR_DECLARATIONS (Double_percent_repeat_engraver);
+
+protected:
+  Stream_event *percent_event_;
+
+  // moment (global time) where percent started
+  Moment start_mom_;
+
+  DECLARE_TRANSLATOR_LISTENER (double_percent);
+
+  void process_music ();
+};
+
+Double_percent_repeat_engraver::Double_percent_repeat_engraver ()
+{
+  percent_event_ = 0;
+}
+
+IMPLEMENT_TRANSLATOR_LISTENER (Double_percent_repeat_engraver, double_percent);
+void
+Double_percent_repeat_engraver::listen_double_percent (Stream_event *ev)
+{
+  if (!percent_event_)
+    {
+      Moment meas_len (robust_scm2moment (get_property ("measureLength"),
+                                         Moment (1)));
+      start_mom_ = now_mom () + meas_len;
+      get_global_context ()->add_moment_to_process (start_mom_);
+      percent_event_ = ev;
+    }
+  else
+    ASSIGN_EVENT_ONCE (percent_event_, ev);
+}
+
+void
+Double_percent_repeat_engraver::process_music ()
+{
+  if (percent_event_ && now_mom ().main_part_ == start_mom_.main_part_)
+    {
+      Item *double_percent = make_item ("DoublePercentRepeat",
+                                       percent_event_->self_scm ());
+
+      SCM count = percent_event_->get_property ("repeat-count");
+      if (count != SCM_EOL && to_boolean (get_property ("countPercentRepeats"))
+         && check_repeat_count_visibility (context (), count))
+       {
+         Item *double_percent_counter
+           = make_item ("DoublePercentRepeatCounter",
+                        percent_event_->self_scm ());
+
+         SCM text = scm_number_to_string (count, scm_from_int (10));
+         double_percent_counter->set_property ("text", text);
+
+         Side_position_interface::add_support (double_percent_counter,
+                                               double_percent);
+         double_percent_counter->set_parent (double_percent, Y_AXIS);
+         double_percent_counter->set_parent (double_percent, X_AXIS);
+       }
+      // forbid breaks on a % line
+      context ()->get_score_context ()->set_property ("forbidBreak",
+                                                     SCM_BOOL_T);
+      percent_event_ = 0;
+    }
+}
+
+ADD_TRANSLATOR (Double_percent_repeat_engraver,
+               /* doc */
+               "Make double measure repeats.",
+
+               /* create */
+               "DoublePercentRepeat "
+               "DoublePercentRepeatCounter ",
+
+               /* read */
+               "countPercentRepeats "
+               "measureLength "
+               "repeatCountVisibility ",
+
+               /* write */
+               "forbidBreak "
+               );
index fba715489da32b7443c2877a2eb950e3f5452fdb..fa662020967bfbe57f6234c2ef9cded251b94225 100644 (file)
@@ -48,9 +48,10 @@ struct Axis_group_interface
                                         Grob *common, Axis);
   static Interval relative_pure_height (Grob *me, int start, int end);
   static Interval combine_pure_heights (Grob *me, SCM, int, int);
-  static Interval cached_pure_height (Grob *me, int, int);
+  static Interval sum_partial_pure_heights (Grob *me, int, int);
   static Interval begin_of_line_pure_height (Grob *me, int);
   static Interval rest_of_line_pure_height (Grob *me, int, int);
+  static Interval part_of_line_pure_height (Grob *me, bool begin, int, int);
 
   static Skyline_pair skyline_spacing (Grob *me, vector<Grob*> elements);
   static void add_element (Grob *me, Grob *);
index 3806c957e8cee47cbf4e14a8354593ff8073d23f..4121f84c7836de7ac9aab17cb91286c9f62bafc7 100644 (file)
@@ -154,6 +154,9 @@ Moment measure_position (Context const *context);
 Moment measure_position (Context const *context, Duration const *dur);
 Rational measure_length (Context const *context);
 int measure_number (Context const *context);
+
+bool check_repeat_count_visibility (Context const *context, SCM count);
+
 void set_context_property_on_children (Context *trans, SCM sym, SCM val);
 
 /* Shorthand for creating and broadcasting stream events. */
@@ -168,4 +171,3 @@ SCM nested_property_revert_alist (SCM alist, SCM prop_path);
 SCM evict_from_alist (SCM, SCM, SCM);
 
 #endif /* CONTEXT_HH */
-
index 1bc02fe15549595a3c01ccb3a1c371200d2ac956..a9e59e35f512f1fc711d27993f71dc5c33cffab5 100644 (file)
@@ -30,7 +30,7 @@ public:
   DECLARE_SCHEME_CALLBACK (beat_slash, (SCM));
   DECLARE_SCHEME_CALLBACK (double_percent, (SCM));
   static Stencil x_percent (Grob *, int);
-  static Stencil brew_slash (Grob *);
+  static Stencil brew_slash (Grob *, int);
 };
 
 #endif /* PERCENT_REPEAT_ITEM_HH */
index 834c1c8e6e4b5c440f0cd3439ea873e1eb4cc2c5..43468754edb5077d7e4973021a50f3b6fb5fe2b2 100644 (file)
@@ -78,7 +78,12 @@ public:
   DECLARE_GROB_INTERFACE();
   virtual System *get_system () const;
 
+  SCM get_cached_pure_property (SCM sym, int start, int end);
+  void cache_pure_property (SCM sym, int start, int end, SCM value);
+
 protected:
+  SCM pure_property_cache_;
+
   void set_my_columns ();
   virtual Grob *clone () const;
   virtual void do_break_processing ();
index 60b5c03c6602957605585054ab442edb37c13c13..9628402a5ecec1ce899d4ef1d4ea57002b7529af 100644 (file)
@@ -63,6 +63,7 @@ Multi_measure_rest::percent (SCM smob)
   Spanner *sp = dynamic_cast<Spanner *> (me);
 
   Stencil r = Percent_repeat_item_interface::x_percent (me, 1);
+  r.translate_axis (-r.extent (X_AXIS).center (), X_AXIS);
 
   // ugh copy & paste.
 
index d5f71297b8390f4219969660a39c348c45f6c22b..4e386b81832186cf48f7014f0b879b025cb616db 100644 (file)
   discarded after a call to set_current_breakpoints, since that Line_division
   refers to a subset of chunks which might be different from the current
   subset of chunks under consideration.
+
+  HOW TO WRITE A PAGE BREAKING ALGORITHM
+  All page breakers supported by this class work more-or-less in the same way.
+  First, they request a particular number of systems by saying
+    set_current_breakpoints (0, last_break_position (), system_count)
+  (never mind what the first two arguments do, I'll get to them later).
+  Alternatively, you can do
+    set_to_ideal_line_configuration (0, last_break_position ()),
+  and the number of systems will be automatically chosen according to what
+  the line breaker wants.
+
+  If there are multiple scores, there will be many different ways to achieve
+  a certain number of lines.  You can see how many alternatives are available
+  with current_configuration_count ().  For every i from 0 to
+  current_configuration_count ()-1, you can see the line division of the
+  corresponding configuration with current_configuration (i), or you can try
+  out various page configurations with one of the space_systems_xxx or
+  pack_systems_xxx functions.  The first argument to each of these functions
+  is the configuration index.
+
+  When you're done trying out configurations and you've picked the one
+  you want, do
+    break_into_pieces (0, last_break_position (), line_division_that_you_want);
+    return make_pages (systems_per_page, systems ());
+  where systems_per_page is a vector of numbers telling how many systems are
+  on each page.  You can get your systems_per_page vector by looking inside
+  the Page_spacing_results that are returned by space_systems_xxx or
+  pack_systems_xxx.
+
+  A note on performance: set_current_breakpoints is EXPONENTIALLY SLOW unless
+  you constrain it by giving it a lower or an upper bound on the configurations
+  it looks for.  Optimal_page_breaking, for example, works by trying
+  out a bunch of configurations, increasing the system count by one, trying
+  again and so on.  Each time we increase the system count, we assume that the
+  best new configurations are going to be elementwise larger than the
+  best configuration for the previous system count (in other words, we're going
+  to get a new configuration just by adding an extra line to sone score
+  and leaving the rest the same).  Therefore, we pass the best previous line
+  division as an lower bound to set_current_breakpoints.
+
+  Now you should be in a position to understand Optimal_page_breaking::solve.
+  Go ahead and read that before finding out, in the next paragraph,
+  what the first two arguments to set_current_breakpoints do.
+
+  "BREAKS"
+  Sometimes, it's useful to run this whole page-breaking machinery on a subset
+  of the book.  To do this, you can mark certain "breaks" in the book (a poor
+  choice of name, perhaps, since a "break" here is different from a page break)
+  and you can run page breaking between any two breaks.  You mark your breaks
+  by providing a Break_predicate (and, if you want, a Prob_break_predicate)
+  to Page_breaking's constructor.  You then choose a subset of your book
+  by passing the starting and ending breaks to set_current_breakpoints.  You
+  can see an example of this in Page_turn_page_breaking, where there is a break
+  everywhere that a page turn is allowed.
 */
 
 #include "page-breaking.hh"
index 54624304d540f60b85367e2bdf54be296b415ef3..c0af4dae1e0dd54b6cebdfb4e03edd3c285eef87 100644 (file)
@@ -658,6 +658,19 @@ Page_layout_problem::read_spacing_spec (SCM spec, Real* dest, SCM sym)
 Real
 Page_layout_problem::get_fixed_spacing (Grob *before, Grob *after, int spaceable_index, bool pure, int start, int end)
 {
+  Spanner *after_sp = dynamic_cast<Spanner*> (after);
+  SCM cache_symbol = (is_spaceable (before) && is_spaceable (after))
+    ? ly_symbol2scm ("spaceable-fixed-spacing")
+    : ly_symbol2scm ("loose-fixed-spacing");
+  if (pure)
+    {
+      // The result of this function doesn't depend on "end," so we can reduce the
+      // size of the cache by ignoring it.
+      SCM cached = after_sp->get_cached_pure_property (cache_symbol, start, 0);
+      if (scm_is_number (cached))
+       return robust_scm2double (cached, 0.0);
+    }
+
   SCM spec = Page_layout_problem::get_spacing_spec (before, after, pure, start, end);
   Real ret = -infinity_f;
   Real stretchability = 0;
@@ -681,6 +694,11 @@ Page_layout_problem::get_fixed_spacing (Grob *before, Grob *after, int spaceable
            ret = max (ret, scm_to_double (forced));
        }
     }
+
+  // Cache the result.  As above, we ignore "end."
+  if (pure)
+    after_sp->cache_pure_property (cache_symbol, start, 0, scm_from_double (ret));
+    
   return ret;
 }
 
index 5757f8b8ab9779df8ff439327570bba82d3328b1..1b437b28224b302d60ade8126f28b6e395101354 100644 (file)
 */
 
 
-#include "score-engraver.hh"
-
-#include "bar-line.hh"
+#include "engraver.hh"
 #include "global-context.hh"
 #include "international.hh"
 #include "item.hh"
-#include "misc.hh"
-#include "repeated-music.hh"
 #include "side-position-interface.hh"
 #include "spanner.hh"
 #include "stream-event.hh"
 
 #include "translator.icc"
 
-/*
-* TODO: Create separate Double_percent_repeat_engraver? 
-* Or, at least move double percent handling to Slash_repeat_engraver
-*/
-
 class Percent_repeat_engraver : public Engraver
 {
   void typeset_perc ();
-  bool check_count_visibility (SCM count);
+
 public:
   TRANSLATOR_DECLARATIONS (Percent_repeat_engraver);
   
 protected:
   Stream_event *percent_event_;
 
-  /// moment (global time) where percent started.
-  Moment stop_mom_;
+  // moment (global time) where percent started
   Moment start_mom_;
-
-  enum Repeat_sign_type
-    {
-      UNKNOWN,
-      MEASURE,
-      DOUBLE_MEASURE,
-    };
-  Repeat_sign_type repeat_sign_type_;
+  // moment (global time) where percent should end
+  Moment stop_mom_;
 
   Spanner *percent_;
   Spanner *percent_counter_;
 
-  
   Grob *first_command_column_;
   Moment command_moment_;
-  
-protected:
+
   virtual void finalize ();
   DECLARE_TRANSLATOR_LISTENER (percent);
 
-  void stop_translation_timestep ();
   void start_translation_timestep ();
+  void stop_translation_timestep ();
   void process_music ();
 };
 
@@ -91,7 +73,8 @@ Percent_repeat_engraver::start_translation_timestep ()
 {
   if (now_mom ().main_part_ != command_moment_.main_part_)
     {
-      first_command_column_ = unsmob_grob (get_property ("currentCommandColumn"));
+      first_command_column_
+       = unsmob_grob (get_property ("currentCommandColumn"));
       command_moment_ = now_mom ();
     }
 
@@ -100,7 +83,6 @@ Percent_repeat_engraver::start_translation_timestep ()
       if (percent_)
        typeset_perc ();
       percent_event_ = 0;
-      repeat_sign_type_ = UNKNOWN;
     }
 }
 
@@ -111,97 +93,50 @@ Percent_repeat_engraver::listen_percent (Stream_event *ev)
   if (!percent_event_)
     {
       Moment body_length = get_event_length (ev);
-      Moment meas_len (robust_scm2moment (get_property ("measureLength"),
-                                         Moment (1)));
-      if (meas_len == body_length)
-       {
-         repeat_sign_type_ = MEASURE;
-         start_mom_ = now_mom ();
-         stop_mom_ = now_mom () + body_length;
-         get_global_context ()->add_moment_to_process (stop_mom_);
-       }
-      else if (Moment (2) * meas_len == body_length)
-       {
-         repeat_sign_type_ = DOUBLE_MEASURE;
-         start_mom_ = now_mom () + meas_len;
-         stop_mom_ = now_mom () + body_length; /* never used */
-         get_global_context ()->add_moment_to_process (start_mom_);
-       }
-      else
-       {
-         /*
-           don't warn about percent repeats: slash repeats are not
-           exactly 1 or 2 measures long.
-         */
-         return;
-       }
+      start_mom_ = now_mom ();
+      stop_mom_ = now_mom () + body_length;
+      get_global_context ()->add_moment_to_process (stop_mom_);
       percent_event_ = ev;
     }
   else
-    /* print a warning: no assignment happens because
-       percent_event_ != 0 */
-    ASSIGN_EVENT_ONCE (percent_event_, ev);
+    {
+      /*
+       print a warning: no assignment happens because
+       percent_event_ != 0
+      */
+      ASSIGN_EVENT_ONCE (percent_event_, ev);
+    }
 }
 
 void
 Percent_repeat_engraver::process_music ()
 {
-  if (percent_event_ && now_mom ().main_part_ == start_mom_.main_part_)
+  if (percent_event_
+      && now_mom ().main_part_ == start_mom_.main_part_)
     {
-      if (repeat_sign_type_ == MEASURE)
-       {
-         if (percent_)
-           typeset_perc ();
-         
-         percent_ = make_spanner ("PercentRepeat", percent_event_->self_scm ());
-
-         Grob *col = first_command_column_;
-         percent_->set_bound (LEFT, col);
-
-         SCM count = percent_event_->get_property ("repeat-count");
-         if (count != SCM_EOL && to_boolean (get_property ("countPercentRepeats"))
-             && check_count_visibility (count))
-           {
-             percent_counter_
-               = make_spanner ("PercentRepeatCounter", percent_event_->self_scm ());
-
-             SCM text = scm_number_to_string (count, scm_from_int (10));
-             percent_counter_->set_property ("text", text);
-             percent_counter_->set_bound (LEFT, col);
-             Side_position_interface::add_support (percent_counter_,
-                                                   percent_);
-             percent_counter_->set_parent (percent_, Y_AXIS);
-           }
-         else
-           percent_counter_ = 0;
-       }
-      else if (repeat_sign_type_ == DOUBLE_MEASURE)
+      if (percent_)
+       typeset_perc ();
+
+      percent_ = make_spanner ("PercentRepeat", percent_event_->self_scm ());
+
+      Grob *col = first_command_column_;
+      percent_->set_bound (LEFT, col);
+
+      SCM count = percent_event_->get_property ("repeat-count");
+      if (count != SCM_EOL && to_boolean (get_property ("countPercentRepeats"))
+         && check_repeat_count_visibility (context (), count))
        {
-         Item *double_percent = make_item ("DoublePercentRepeat", percent_event_->self_scm ());
-
-         SCM count = percent_event_->get_property ("repeat-count");
-         if (count != SCM_EOL && to_boolean (get_property ("countPercentRepeats"))
-             && check_count_visibility (count))
-           {
-             Item *double_percent_counter = make_item ("DoublePercentRepeatCounter",
-                                                       percent_event_->self_scm ());
-
-             SCM text = scm_number_to_string (count,
-                                              scm_from_int (10));
-             double_percent_counter->set_property ("text", text);
-
-             Side_position_interface::add_support (double_percent_counter,
-                                                   double_percent);
-             double_percent_counter->set_parent (double_percent, Y_AXIS);
-             double_percent_counter->set_parent (double_percent, X_AXIS);
-           }
-         
-         /* forbid breaks on a % line. Should forbid all breaks, really. */
-         context ()->get_score_context ()->set_property ("forbidBreak", SCM_BOOL_T);
-
-         /* No more processing needed. */
-         repeat_sign_type_ = UNKNOWN;
+         percent_counter_ = make_spanner ("PercentRepeatCounter",
+                                          percent_event_->self_scm ());
+
+         SCM text = scm_number_to_string (count, scm_from_int (10));
+         percent_counter_->set_property ("text", text);
+         percent_counter_->set_bound (LEFT, col);
+         Side_position_interface::add_support (percent_counter_, percent_);
+         percent_counter_->set_parent (percent_, Y_AXIS);
        }
+      else
+       percent_counter_ = 0;
     }
 }
 
@@ -219,29 +154,16 @@ Percent_repeat_engraver::finalize ()
 void
 Percent_repeat_engraver::typeset_perc ()
 {
-  if (percent_)
-    {
-      Grob *col = first_command_column_;
+  Grob *col = first_command_column_;
 
-      percent_->set_bound (RIGHT, col);
-      percent_ = 0;
-
-      if (percent_counter_)
-       percent_counter_->set_bound (RIGHT, col);
-      percent_counter_ = 0;
-    }
-}
+  percent_->set_bound (RIGHT, col);
+  percent_ = 0;
 
-bool
-Percent_repeat_engraver::check_count_visibility (SCM count)
-{
-  SCM proc = get_property ("repeatCountVisibility");
-  return (ly_is_procedure (proc) && to_boolean (scm_call_2 (proc,
-                                                           count,
-                                                           context ()->self_scm ())));
+  if (percent_counter_)
+    percent_counter_->set_bound (RIGHT, col);
+  percent_counter_ = 0;
 }
 
-
 void
 Percent_repeat_engraver::stop_translation_timestep ()
 {
@@ -249,20 +171,17 @@ Percent_repeat_engraver::stop_translation_timestep ()
 
 ADD_TRANSLATOR (Percent_repeat_engraver,
                /* doc */
-               "Make whole bar and double bar repeats.",
+               "Make whole measure repeats.",
                
                /* create */
-               "DoublePercentRepeat "
-               "DoublePercentRepeatCounter "
                "PercentRepeat "
                "PercentRepeatCounter ",
 
                /* read */
                "countPercentRepeats "
                "currentCommandColumn "
-               "measureLength "
                "repeatCountVisibility ",
 
                /* write */
-               "forbidBreak "
+               ""
                );
index 337df4505866894e67436d4a107e3ebd6136da20..1e97753feecd95414538f4847f9613aac0d41b92 100644 (file)
 */
 
 #include "percent-repeat-item.hh"
+
 #include "item.hh"
-#include "lookup.hh"
 #include "font-interface.hh"
+#include "lookup.hh"
+#include "stream-event.hh"
 
 Stencil
-Percent_repeat_item_interface::brew_slash (Grob *me)
+Percent_repeat_item_interface::brew_slash (Grob *me, int count)
 {
   Real slope = robust_scm2double (me->get_property ("slope"), 1);
   Real wid = 2.0 / slope;
@@ -32,7 +34,14 @@ Percent_repeat_item_interface::brew_slash (Grob *me)
     todo: check out if in staff-rule thickness normally.
   */
   Real thick = robust_scm2double (me->get_property ("thickness"), 1);
-  Stencil m = Lookup::repeat_slash (wid, slope, thick);
+  Stencil slash = Lookup::repeat_slash (wid, slope, thick);
+  Stencil m = slash;
+
+  Real slash_neg_kern =
+    robust_scm2double (me->get_property ("slash-negative-kern"), 1.6);
+  for (int i = count - 1; i--;)
+    m.add_at_edge (X_AXIS, RIGHT, slash, -slash_neg_kern);
+
   m.translate_axis (-m.extent (Y_AXIS).center (), Y_AXIS);
   return m;
 }
@@ -40,16 +49,11 @@ Percent_repeat_item_interface::brew_slash (Grob *me)
 Stencil
 Percent_repeat_item_interface::x_percent (Grob *me, int count)
 {
-  Stencil m;
-  Stencil s = brew_slash (me);
+  Stencil m = brew_slash (me, count);
 
   Real dot_neg_kern =
     robust_scm2double (me->get_property ("dot-negative-kern"), 0.75);
-  Real slash_neg_kern =
-    robust_scm2double (me->get_property ("slash-negative-kern"), 1.6);
 
-  for (int i = count; i--;)
-    m.add_at_edge (X_AXIS, RIGHT, s, -slash_neg_kern);
   Stencil d1 = Font_interface::get_default_font (me)->find_by_name ("dots.dot");
   Stencil d2 = d1;
   d1.translate_axis (0.5, Y_AXIS);
@@ -58,7 +62,6 @@ Percent_repeat_item_interface::x_percent (Grob *me, int count)
   m.add_at_edge (X_AXIS, LEFT, d1, -dot_neg_kern);
   m.add_at_edge (X_AXIS, RIGHT, d2, -dot_neg_kern);
 
-  m.translate_axis (- m.extent (X_AXIS).center (), X_AXIS);
   return m;
 }
 
@@ -68,6 +71,7 @@ Percent_repeat_item_interface::double_percent (SCM grob)
 {
   Grob *me = unsmob_grob (grob);
   Stencil m = x_percent (me, 2);
+  m.translate_axis (-m.extent (X_AXIS).center (), X_AXIS);
   return m.smobbed_copy ();
 }
 
@@ -76,18 +80,24 @@ SCM
 Percent_repeat_item_interface::beat_slash (SCM grob)
 {
   Grob *me = unsmob_grob (grob);
-  Stencil m = brew_slash (me);
+  Stream_event *cause = unsmob_stream_event (me->get_property ("cause"));
+  int count = robust_scm2int (cause->get_property ("slash-count"), 1);
+
+  Stencil m;
+  if (count == 0)
+    m = x_percent (me, 2);
+  else
+    m = brew_slash (me, count);
 
   return m.smobbed_copy ();
 }
 
 ADD_INTERFACE (Percent_repeat_item_interface,
               "Repeats that look like percent signs.",
-              
+
               /* properties */
               "dot-negative-kern "
               "slash-negative-kern "
               "slope "
               "thickness "
               );
-
index 845bd729b6150b18df889daea65e3753ce9eb074..d8295535575535d0e05cd9b4ff47cc39f45d2e4e 100644 (file)
@@ -18,6 +18,7 @@
   along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 
+#include "context.hh"
 #include "input.hh"
 #include "repeated-music.hh"
 #include "sequential-iterator.hh"
@@ -41,20 +42,40 @@ Percent_repeat_iterator::Percent_repeat_iterator ()
 SCM
 Percent_repeat_iterator::get_music_list () const
 {
-  /* TODO: Distinction between percent, double-percent and slash */
   Music *mus = get_music ();
   Music *child = Repeated_music::body (mus);
   SCM length = child->get_length ().smobbed_copy ();
   SCM child_list = SCM_EOL;
+  Moment measure_len = measure_length (get_outlet ());
+  Moment music_len = robust_scm2moment (length, Moment (0));
+
+  string event_type;
+  SCM slash_count = SCM_EOL;
+
+  if (measure_len == music_len)
+    event_type = "PercentEvent";
+  else if (measure_len * Moment (2) == music_len)
+    event_type = "DoublePercentEvent";
+  else
+    {
+      slash_count
+       = scm_call_1 (ly_lily_module_constant ("calc-repeat-slash-count"),
+                     child->self_scm ());
+      event_type = "RepeatSlashEvent";
+    }
 
   int repeats = scm_to_int (mus->get_property ("repeat-count"));
   for (int i = repeats; i > 1; i--)
   {
-    Music *percent = make_music_by_name (ly_symbol2scm ("PercentEvent"));
+    Music *percent = make_music_by_name (ly_symbol2scm (event_type.c_str ()));
     percent->set_spot (*mus->origin ());
     percent->set_property ("length", length);
     if (repeats > 1)
-      percent->set_property ("repeat-count", scm_from_int (i));
+      {
+       percent->set_property ("repeat-count", scm_from_int (i));
+       if (event_type == "RepeatSlashEvent")
+         percent->set_property ("slash-count", slash_count);
+      }
 
     child_list = scm_cons (percent->unprotect (), child_list);
   }
index 608155ea3d26cfa1ef6ff3c605e443463cf8c306..fe30291f78812d90aa07494414972639241aaef4 100644 (file)
@@ -239,6 +239,10 @@ empty_skyline (list<Building> *const ret)
   ret->push_front (Building (-infinity_f, -infinity_f, -infinity_f, infinity_f));
 }
 
+/*
+  Given Building 'b' with starting wall location 'start', extend each side
+  with a sloped roofline of width 'horizon_padding'; put the skyline in 'ret'
+*/
 static void
 single_skyline (Building b, Real start, Real horizon_padding, list<Building> *const ret)
 {
@@ -330,7 +334,8 @@ Skyline::internal_build_skyline (list<Box> *boxes, Real horizon_padding, Axis ho
     {
       list<Building> result;
       single_skyline (Building (boxes->front (), horizon_padding, horizon_axis, sky),
-                     boxes->front ()[horizon_axis][LEFT], horizon_padding, &result);
+                     boxes->front ()[horizon_axis][LEFT] - horizon_padding,
+                     horizon_padding, &result);
       return result;
     }
 
@@ -443,7 +448,8 @@ Skyline::Skyline (Box const &b, Real horizon_padding, Axis horizon_axis, Directi
 {
   sky_ = sky;
   Building front (b, horizon_padding, horizon_axis, sky);
-  single_skyline (front, b[horizon_axis][LEFT], horizon_padding, &buildings_);
+  single_skyline (front, b[horizon_axis][LEFT] - horizon_padding,
+                 horizon_padding, &buildings_);
 }
 
 void
@@ -477,7 +483,8 @@ Skyline::insert (Box const &b, Real horizon_padding, Axis a)
     return;
 
   my_bld.splice (my_bld.begin (), buildings_);
-  single_skyline (Building (b, horizon_padding, a, sky_), b[a][LEFT], horizon_padding, &other_bld);
+  single_skyline (Building (b, horizon_padding, a, sky_), b[a][LEFT] - horizon_padding,
+                 horizon_padding, &other_bld);
   internal_merge_skyline (&other_bld, &my_bld, &buildings_);
 }
 
index 26a64f9380d8d461d254c79c401c1a914937cece..0db3ceffb3c334a7ba1ba5fd57f162e0151ae46f 100644 (file)
   along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include "bar-line.hh"
-#include "global-context.hh"
-#include "international.hh"
 #include "item.hh"
-#include "misc.hh"
-#include "repeated-music.hh"
-#include "score-engraver.hh"
-#include "spanner.hh"
+#include "engraver.hh"
 #include "stream-event.hh"
-#include "warn.hh"
 
 #include "translator.icc"
 
-/**
-   This acknowledges repeated music with "percent" style.  It typesets
-   a slash sign.
+/*
+  This acknowledges repeated music with "percent" style.  It typesets
+  a slash sign or double percent sign.
 */
 class Slash_repeat_engraver : public Engraver
 {
@@ -42,7 +35,7 @@ public:
 protected:
   Stream_event *slash_;
 protected:
-  DECLARE_TRANSLATOR_LISTENER (percent);
+  DECLARE_TRANSLATOR_LISTENER (repeat_slash);
   void process_music ();
 };
 
@@ -51,21 +44,11 @@ Slash_repeat_engraver::Slash_repeat_engraver ()
   slash_ = 0;
 }
 
-IMPLEMENT_TRANSLATOR_LISTENER (Slash_repeat_engraver, percent);
+IMPLEMENT_TRANSLATOR_LISTENER (Slash_repeat_engraver, repeat_slash);
 void
-Slash_repeat_engraver::listen_percent (Stream_event *ev)
+Slash_repeat_engraver::listen_repeat_slash (Stream_event *ev)
 {
-  /*todo: separate events for percent and slash */
-  Moment meas_length
-    = robust_scm2moment (get_property ("measureLength"), Moment (0));
-  
-  if (get_event_length (ev) < meas_length)
     ASSIGN_EVENT_ONCE (slash_, ev);
-  
-  /*
-    don't warn if nothing happens: this can happen if there are whole
-    measure repeats.
-   */
 }
 
 void
@@ -73,7 +56,11 @@ Slash_repeat_engraver::process_music ()
 {
   if (slash_)
     {
-      make_item ("RepeatSlash", slash_->self_scm ());
+      SCM count = slash_->get_property ("slash-count");
+      if (scm_to_int (count) == 0)
+       make_item ("DoubleRepeatSlash", slash_->self_scm ());
+      else
+       make_item ("RepeatSlash", slash_->self_scm ());
       slash_ = 0;
     }
 }
@@ -83,10 +70,11 @@ ADD_TRANSLATOR (Slash_repeat_engraver,
                "Make beat repeats.",
 
                /* create */
+               "DoubleRepeatSlash "
                "RepeatSlash ",
 
                /* read */
-               "measureLength ",
+               "",
 
                /* write */
                ""
index 3887797d9098fcae8675319b058999cc7ac2e36c..f3d13c84f9879a5878a6dc9739528842b94e8205 100644 (file)
@@ -226,12 +226,14 @@ Spanner::Spanner (SCM s)
 {
   break_index_ = 0;
   spanned_drul_.set (0, 0);
+  pure_property_cache_ = SCM_UNDEFINED;
 }
 
 Spanner::Spanner (Spanner const &s)
   : Grob (s)
 {
   spanned_drul_.set (0, 0);
+  pure_property_cache_ = SCM_UNDEFINED;
 }
 
 Real
@@ -327,6 +329,8 @@ Spanner::get_broken_left_end_align () const
 void
 Spanner::derived_mark () const
 {
+  scm_gc_mark (pure_property_cache_);
+
   Direction d = LEFT;
   do
     if (spanned_drul_[d])
@@ -454,6 +458,29 @@ Spanner::kill_zero_spanned_time (SCM grob)
   return SCM_UNSPECIFIED;
 }
 
+SCM
+Spanner::get_cached_pure_property (SCM sym, int start, int end)
+{
+  // The pure property cache is indexed by (name start . end), where name is
+  // a symbol, and start and end are numbers referring to the starting and
+  // ending column ranks of the current line.
+  if (scm_hash_table_p (pure_property_cache_) == SCM_BOOL_F)
+    return SCM_UNDEFINED;
+
+  SCM key = scm_cons (sym, scm_cons (scm_from_int (start), scm_from_int (end)));
+  return scm_hash_ref (pure_property_cache_, key, SCM_UNDEFINED);
+}
+
+void
+Spanner::cache_pure_property (SCM sym, int start, int end, SCM val)
+{
+  if (scm_hash_table_p (pure_property_cache_) == SCM_BOOL_F)
+    pure_property_cache_ = scm_c_make_hash_table (17);
+
+  SCM key = scm_cons (sym, scm_cons (scm_from_int (start), scm_from_int (end)));
+  scm_hash_set_x (pure_property_cache_, key, val);
+}
+
 ADD_INTERFACE (Spanner,
               "Some objects are horizontally spanned between objects.  For"
               " example, slurs, beams, ties, etc.  These grobs form a subtype"
index 92c8398f34c56ebeb95b30999664e2b51041f26b..28c7c9706f09b042de8b02f442eb9ff946bbe52c 100644 (file)
@@ -243,6 +243,7 @@ multiple voices on the same staff."
   \consists "New_fingering_engraver"
 
   \consists "Chord_tremolo_engraver"
+  \consists "Double_percent_repeat_engraver"
   \consists "Percent_repeat_engraver"
   \consists "Slash_repeat_engraver"
   \consists "Part_combine_engraver"
index fc49725f07d395cf4eec1832db6b9283a96f3a55..34261c114b2d7f3e9606fa50c2d4f95bb0e7d869 100644 (file)
@@ -214,14 +214,14 @@ clef =
 
 compoundMeter =
 #(define-music-function (parser location args) (pair?)
-  (_i "Create compound time signatures. The argument is a Scheme list of 
-lists. Each list describes one fraction, with the last entry being the 
-denominator, while the first entries describe the summands in the 
-enumerator. If the time signature consists of just one fraction, 
+  (_i "Create compound time signatures. The argument is a Scheme list of
+lists. Each list describes one fraction, with the last entry being the
+denominator, while the first entries describe the summands in the
+enumerator. If the time signature consists of just one fraction,
 the list can be given directly, i.e. not as a list containing a single list.
-For example, a time signature of (3+1)/8 + 2/4 would be created as 
-@code{\\compoundMeter #'((3 1 8) (2 4))}, and a time signature of (3+2)/8 
-as @code{\\compoundMeter #'((3 2 8))} or shorter 
+For example, a time signature of (3+1)/8 + 2/4 would be created as
+@code{\\compoundMeter #'((3 1 8) (2 4))}, and a time signature of (3+2)/8
+as @code{\\compoundMeter #'((3 2 8))} or shorter
 @code{\\compoundMeter #'(3 2 8)}.")
   (let* ((mlen (calculate-compound-measure-length args))
          (beat (calculate-compound-base-beat args))
@@ -462,13 +462,29 @@ makeClusters =
    (_i "Display chords in @var{arg} as clusters.")
    (music-map note-to-cluster arg))
 
+modalInversion =
+#(define-music-function (parser location around to scale music)
+    (ly:music? ly:music? ly:music? ly:music?)
+    (_i "Invert @var{music} about @var{around} using @var{scale} and
+transpose from @var{around} to @var{to}.")
+    (let ((inverter (make-modal-inverter around to scale)))
+      (change-pitches music inverter)
+      music))
+
+modalTranspose =
+#(define-music-function (parser location from to scale music)
+    (ly:music? ly:music? ly:music? ly:music?)
+    (_i "Transpose @var{music} from pitch @var{from} to pitch @var{to}
+using @var{scale}.")
+    (let ((transposer (make-modal-transposer from to scale)))
+      (change-pitches music transposer)
+      music))
+
 musicMap =
 #(define-music-function (parser location proc mus) (procedure? ly:music?)
    (_i "Apply @var{proc} to @var{mus} and all of the music it contains.")
    (music-map proc mus))
 
-
-
 %% noPageBreak and noPageTurn are music functions (not music indentifiers),
 %% because music identifiers are not allowed at top-level.
 noPageBreak =
@@ -780,6 +796,12 @@ resetRelativeOctave =
 
      reference-note))
 
+retrograde =
+#(define-music-function (parser location music)
+    (ly:music?)
+    (_i "Return @var{music} in reverse order.")
+    (retrograde-music music))
+
 revertTimeSignatureSettings =
 #(define-music-function
    (parser location time-signature)
index 7d6ed7cb84f1d6e107e6514d7526b2f27362ec50..0f1d10849a10513df10bdc2d818a1a52ff804741 100644 (file)
@@ -119,12 +119,18 @@ website-css:
 
 website-pictures:
        mkdir -p $(OUT)/website/pictures
-       cp $(PICTURES)/* $(OUT)/website/pictures
-       ln -sf website/pictures $(OUT)/pictures
+       if [ -d $(PICTURES) ]; \
+       then \
+               cp $(PICTURES)/* $(OUT)/website/pictures ; \
+               ln -sf website/pictures $(OUT)/pictures  ;\
+       fi
 
 website-examples:
        mkdir -p $(OUT)/website/ly-examples
-       cp $(EXAMPLES)/* $(OUT)/website/ly-examples
+       if [ -d $(EXAMPLES) ]; \
+       then \
+               cp $(EXAMPLES)/* $(OUT)/website/ly-examples ; \
+       fi
 
 web-post:
        $(WEB_POST) $(OUT)/website
index 44a76a3f6fce11f2983f3a18b0351067b0d21c85..0377990af30d092357e9080c7906cf26c933650b 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -3,16 +3,16 @@
 # This file is distributed under the same license as the lilypond package.
 # Erwin Dieterich <bamse@gmx.de>, 1999
 # Roland Stigge <stigge@antcom.de>, 2003, 2004, 2005, 2006, 2007
-#
-# Till Paala <till.rettig@gmx.de>, 2007, 2008, 2009, 2010.
+# Till Paala <till.rettig@gmx.de>, 2007, 2008, 2009, 2010, 2011.
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 2.13.42\n"
+"Project-Id-Version: lilypond 2.13.48\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
 "POT-Creation-Date: 2010-12-06 22:30+0100\n"
-"PO-Revision-Date: 2010-12-18 21:09+0200\n"
+"PO-Revision-Date: 2011-02-12 20:51+0200\n"
 "Last-Translator: Till Paala <till.rettig@gmx.de>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
+"Language: de\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -3161,6 +3161,9 @@ msgid ""
 "which will produce the closest match to @var{target-val} when\n"
 "applied to function @var{getter}."
 msgstr ""
+"Finde den Index zwischen @var{start} und @var{end} (eine ganze Zahl),\n"
+"die den nächstmöglichen Treffer für @var{target-val} findet,\n"
+"wenn auf die Funktion @var{getter} angewandt."
 
 #: lily-library.scm:821
 #, scheme-format
index 0b9873755f3e9333ec48a3f7c6a375ddcc99f4cc..62b018a9955413a3cb1506cbc6eb2f36c53de0de 100644 (file)
--- a/po/el.po
+++ b/po/el.po
@@ -1,21 +1,21 @@
 # Greek translation for lilypond.
 # Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2009, 2010 Free Software Foundation, Inc.
 # This file is distributed under the same license as the lilypond package.
-# Michael Kotsarinis <mk73628@gmail.com>, 2010
-#
+# Michael Kotsarinis <mk73628@gmail.com>, 2010, 2011.
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond-2.13.42\n"
+"Project-Id-Version: lilypond-2.13.48\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
 "POT-Creation-Date: 2010-12-06 22:30+0100\n"
-"PO-Revision-Date: 2010-12-13 22:22+0200\n"
+"PO-Revision-Date: 2011-02-14 09:29+0200\n"
 "Last-Translator: Michael Kotsarinis <mk73628@gmail.com>\n"
 "Language-Team: Greek <team@lists.gnome.gr>\n"
+"Language: el\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Language: \n"
-"Plural-Forms: plurals=2; plural=(n!=1)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.6.1\n"
 "X-Poedit-Language: Greek\n"
 "X-Poedit-Country: GREECE\n"
 
index 566cad0a47374dbcd7988c8603fa538a4e19e033..3e01893523f7adf34a9b040cab352e559d2275c7 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -1,21 +1,22 @@
-# translation of lilypond-2.13.42.po to Español
+# translation of lilypond-2.13.48.po to Español
 # Spanish translation of GNU Lilypond - http://lilypond.org
-# Copyright (C) 2002, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
 #
 # This file is distributed under the same license as the lilypond package.
 #
 # Quique <quique@sindominio.net>, 2002, 2004.
 # Daniel Tonda <daniel dot tonda (at) gmail dot com>, 2006.
-# Francisco Vila <francisco.vila@hispalinux.es>, 2007, 2008, 2009, 2010.
+# Francisco Vila <francisco.vila@hispalinux.es>, 2007, 2008, 2009, 2010, 2011.
 # This file is distributed under the same license as the lilypond package.
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond-2.13.42\n"
+"Project-Id-Version: lilypond-2.13.48\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
 "POT-Creation-Date: 2010-12-06 22:30+0100\n"
-"PO-Revision-Date: 2010-12-13 01:12+0100\n"
+"PO-Revision-Date: 2011-02-11 11:21+0100\n"
 "Last-Translator: Francisco Vila <francisco.vila@hispalinux.es>\n"
 "Language-Team: Spanish <es@li.org>\n"
+"Language: es\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -398,7 +399,7 @@ msgstr "Eliminar la propiedad de «callbacks», despreciar XY-extent-callback."
 
 #: convertrules.py:2358
 msgid "Use grob closures iso. XY-offset-callbacks."
-msgstr "Utilizar las cerraduras de grob iso. XY-offset-callbacks."
+msgstr "Utilizar cerraduras de grob en lugar de XY-offset-callbacks."
 
 #: convertrules.py:2420
 msgid "foobar -> foo-bar for \\paper, \\layout"
@@ -1181,7 +1182,7 @@ msgstr "ALT[:MENOR]"
 
 #: midi2ly.py:882
 msgid "quantise note starts on DUR"
-msgstr "cuantizar los comienzos de las notras sobre DUR"
+msgstr "cuantizar los comienzos de las notras sobre DURACIÓN"
 
 #: midi2ly.py:885
 msgid "DUR*NUM/DEN"
@@ -2728,7 +2729,7 @@ msgstr "no se encuentra el indicador «%s»"
 #: stem.cc:658
 #, c-format
 msgid "flag stroke `%s' not found"
-msgstr "no se encuentra el impacto «%s» de indicador"
+msgstr "no se encuentra la forma del glifo del corchete «%s»"
 
 #: system.cc:197
 #, c-format
index 112b599cc29af10eb79f8147337c365e420e76a2..6e276050c4f407e6c84409a1a42baf48645cb6bd 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -3,16 +3,17 @@
 # French translation of GNU/lilypond - http//lilypond.org
 # Copyright © 2004 Free Software Foundation, Inc.
 # Michel Robitaille <robitail@IRO.UMontreal.CA>, 1996-2007.
-# Jean-Charles Malahieude <lilyfan@orange.fr>, 2007-2010
+# Jean-Charles Malahieude <lilyfan@orange.fr>, 2007-2011
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 2.13.42\n"
+"Project-Id-Version: lilypond 2.13.48\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
 "POT-Creation-Date: 2010-12-06 22:30+0100\n"
-"PO-Revision-Date: 2010-12-11 18:02+0100\n"
+"PO-Revision-Date: 2011-02-13 15:12+0100\n"
 "Last-Translator: Jean-Charles Malahieude <lilyfan@orange.fr>\n"
 "Language-Team: French <traduc@traduc.org>\n"
+"Language: fr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -214,7 +215,7 @@ msgstr "Interchanger < > et << >>"
 #: convertrules.py:1349
 msgid "attempting automatic \\figures conversion.  Check results!"
 msgstr ""
-"tentative de convertir automatiquement les \\figures. \n"
+"tentative de convesion automatique des \\figures. \n"
 "Résultats à vérifier !"
 
 #: convertrules.py:1400
@@ -239,7 +240,7 @@ msgid ""
 "\n"
 "as a substitution text."
 msgstr ""
-"Un \\outputproperty a été localisé ;\n"
+"Un \\outputproperty a été détecté ;\n"
 "éditer manuellement, en utilisant\n"
 "\n"
 "  \\applyoutput #(outputproperty-compatibility %s '%s <GROB PROPRIÉTÉ VALEUR>)\n"
@@ -402,7 +403,7 @@ msgstr "Utilisation des clôtures de grob comme avec XY-offset-callbacks."
 
 #: convertrules.py:2420
 msgid "foobar -> foo-bar for \\paper, \\layout"
-msgstr "foobar -> foo-bar pour \\paper et \\layout"
+msgstr "taratata -> tara-tata pour \\paper et \\layout"
 
 #: convertrules.py:2530
 msgid "deprecate \\tempo in \\midi"
@@ -427,7 +428,7 @@ msgid ""
 "\n"
 "%s"
 msgstr ""
-"Utiliser désormais \n"
+"Utiliser dorénavant \n"
 "\n"
 "%s"
 
@@ -708,7 +709,7 @@ msgstr ""
 
 #: convertrules.py:3080
 msgid "Rename vertical spacing grob properties."
-msgstr "Renommage des propriétés d'objet d'espacement vertical."
+msgstr "Renommage des propriétés d'objet en matière d'espacement vertical."
 
 #: convertrules.py:3096
 msgid "Remove \\paper variables head-separation and foot-separation."
@@ -779,7 +780,7 @@ msgstr "reprise vide détectée"
 #: musicexp.py:848
 #, python-format
 msgid "Grace note with no following music: %s"
-msgstr "Apoggiature non suivie de musique :%s"
+msgstr "Apoggiature non suivie de musique : %s"
 
 #: musicexp.py:1010
 #, python-format
@@ -810,7 +811,7 @@ msgstr ""
 #: musicxml.py:520
 #, python-format
 msgid "Unable to find instrument for ID=%s\n"
-msgstr "Aucun instrument ne correspond à l'ID=%s\n"
+msgstr "Aucun instrument ne correspond à l'ID %s\n"
 
 #: abc2ly.py:1373 convert-ly.py:87 lilypond-book.py:122 midi2ly.py:860
 #, python-format
@@ -1186,7 +1187,7 @@ msgstr "Convertir %s au format source LilyPond.\n"
 
 #: midi2ly.py:866
 msgid "print absolute pitches"
-msgstr "Afficher des tons absolus"
+msgstr "Afficher des hauteurs absolues"
 
 #: midi2ly.py:868 midi2ly.py:883
 msgid "DUR"
@@ -1198,7 +1199,7 @@ msgstr "Quantifier les durées de note d'après DUR"
 
 #: midi2ly.py:872
 msgid "print explicit durations"
-msgstr "ÉcriT des durées explicites"
+msgstr "Écrit des durées explicites"
 
 #: midi2ly.py:876
 msgid "set key: ALT=+sharps|-flats; MINOR=1"
@@ -1259,7 +1260,7 @@ msgstr ""
 
 #: musicxml2ly.py:864
 msgid "Unable to extract key signature!"
-msgstr "Impossible de trouver l'armure."
+msgstr "Impossible de déterminer l'armure."
 
 #: musicxml2ly.py:891
 #, python-format
@@ -1377,7 +1378,7 @@ msgstr ""
 #: musicxml2ly.py:2694
 msgid "use lxml.etree; uses less memory and cpu time"
 msgstr ""
-"utilise lxml.etree pour consommer moins de mémoire \n"
+"utilise lxml.etree pour consommer moins de mémoire\n"
 "et de temps processeur."
 
 #: musicxml2ly.py:2700
@@ -1398,7 +1399,7 @@ msgstr "LANG"
 
 #: musicxml2ly.py:2716
 msgid "use LANG for pitch names, e.g. 'deutsch' for note names in German"
-msgstr "utilise une autre définition liguistique (LANG), p.ex. deutsch l'allemand"
+msgstr "utilise une autre définition linguistique (LANG), p.ex. deutsch l'allemand"
 
 #: musicxml2ly.py:2722
 msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc."
@@ -1431,7 +1432,9 @@ msgstr "la partie %s n'est pas mentionnée dans part-list"
 
 #: musicxml2ly.py:2893
 msgid "Input is compressed, extracting raw MusicXML data from stdin"
-msgstr "Le fichier d'entrée est compressé. Extraction des données MusicXML brutes"
+msgstr ""
+"Le fichier d'entrée est compressé.\n"
+"Extraction des données MusicXML brutes à partir de stdin"
 
 #: musicxml2ly.py:2896
 #, python-format
@@ -1490,7 +1493,7 @@ msgstr "argument « %s » invalide pour l'option « %s »"
 #: warn.cc:59
 #, c-format
 msgid "success: %s"
-msgstr "Succès de %s"
+msgstr "%s mené(e) à terme avec succès"
 
 #: warn.cc:86 grob.cc:617 input.cc:97
 #, c-format
@@ -1536,7 +1539,7 @@ msgstr "l'argument \\applycontext n'est pas une procédure"
 #: auto-change-iterator.cc:74 change-iterator.cc:72
 #, c-format
 msgid "cannot change, already in translator: %s"
-msgstr "modification impossible, c'est déjà dans le traducteur : %s"
+msgstr "modification impossible, c'est déjà dans le translateur : %s"
 
 #: axis-group-engraver.cc:94
 msgid "Axis_group_engraver: vertical group already has a parent"
@@ -1554,7 +1557,7 @@ msgstr "retrait de ce groupe vertical"
 msgid "an outside-staff object should have a direction, defaulting to up"
 msgstr ""
 "un objet externe à la portée devrait avoir un positionnement.\n"
-"Placé par défaut au dessus."
+"Placé par défaut au-dessus."
 
 #: bar-check-iterator.cc:84
 #, c-format
@@ -1563,11 +1566,11 @@ msgstr "échec du contrôle de mesure (barcheck) à : %s"
 
 #: beam-engraver.cc:147
 msgid "already have a beam"
-msgstr "lien déjà présent"
+msgstr "ligature déjà présente"
 
 #: beam-engraver.cc:230
 msgid "unterminated beam"
-msgstr "lien non terminé"
+msgstr "ligature non terminée"
 
 #: beam-engraver.cc:266 chord-tremolo-engraver.cc:150
 msgid "stem must have Rhythmic structure"
@@ -1575,25 +1578,25 @@ msgstr "la hampe doit avoir une structure Rythmic"
 
 #: beam-engraver.cc:274
 msgid "stem does not fit in beam"
-msgstr "la hampe ne s'insère pas dans le lien"
+msgstr "la hampe ne s'insère pas dans la ligature"
 
 #: beam-engraver.cc:275
 msgid "beam was started here"
-msgstr "le lien a débuté ici"
+msgstr "la ligature a débuté ici"
 
 #: beam-quanting.cc:314
 msgid "no feasible beam position"
-msgstr "nulle part où positionner le lien"
+msgstr "nulle part où positionner une ligature"
 
 #: beam.cc:171
 msgid "removing beam with no stems"
-msgstr "suppression du lien ayant moins de deux hampes"
+msgstr "suppression d'une ligature ayant moins de deux hampes"
 
 #: beam.cc:1116
 msgid "no viable initial configuration found: may not find good beam slope"
 msgstr ""
 "pas de configuration initiale viable repérée : \n"
-"la pente du lien pourrait être inesthétique."
+"la pente de la ligature pourrait être inesthétique."
 
 #: break-alignment-interface.cc:206
 #, c-format
@@ -1659,7 +1662,7 @@ msgstr "impossible de trouver un saut de ligne qui satisfasse aux contraintes"
 
 #: context-property.cc:42
 msgid "need symbol arguments for \\override and \\revert"
-msgstr "nécessite des arguments symboliques pour \\override et \\revert"
+msgstr "\\override et \\revert requièrent des arguments symboliques"
 
 #: context.cc:149
 #, c-format
@@ -1730,11 +1733,11 @@ msgstr "impossible de trouver le début de l'épisème"
 
 #: episema-engraver.cc:137
 msgid "unterminated episema"
-msgstr "émisème non terminé"
+msgstr "épisème non terminé"
 
 #: extender-engraver.cc:170 extender-engraver.cc:179
 msgid "unterminated extender"
-msgstr "prolongation non terminée"
+msgstr "prolongation ou extenseur non terminé"
 
 #: font-config-scheme.cc:152 font-config.cc:55
 #, c-format
@@ -1775,7 +1778,7 @@ msgstr "initialisation à zéro"
 #: general-scheme.cc:542 output-ps.scm:48
 msgid "Found infinity or nan in output. Substituting 0.0"
 msgstr ""
-"La sortie contient l'infini ou une valeur non numérique. \n"
+"La sortie contient l'infini ou une valeur non numérique.\n"
 "Substitution par 0.0"
 
 #: glissando-engraver.cc:105
@@ -1818,7 +1821,7 @@ msgstr "Impossible d'appliquer « \\~ » à des têtes ayant la même hauteur"
 #: grob-interface.cc:68
 #, c-format
 msgid "Unknown interface `%s'"
-msgstr "Interface inconnue « %s »"
+msgstr "Interface inconnue « %s »"
 
 #: grob-interface.cc:79
 #, c-format
@@ -1876,7 +1879,7 @@ msgstr "position inconnue"
 #: key-signature-interface.cc:78
 #, c-format
 msgid "No glyph found for alteration: %s"
-msgstr "Pas de glyphe pour l'altération : %s"
+msgstr "Pas de glyphe pour l'altération « %s »"
 
 #: key-signature-interface.cc:88
 msgid "alteration not found"
@@ -1952,7 +1955,7 @@ msgstr "erreur à la fin du fichier (EOF) : %s"
 #: lily-parser-scheme.cc:82
 #, c-format
 msgid "Changing working directory to: `%s'"
-msgstr "Modification du répertoire de travail pour « %s »"
+msgstr "Modification du répertoire de travail pour « %s »"
 
 #: lily-parser-scheme.cc:99
 #, c-format
@@ -2084,7 +2087,7 @@ msgid ""
 "dump header field FIELD to file\n"
 "named BASENAME.FIELD"
 msgstr ""
-"écrire le champ d'en-tête CHAMP dans le\n"
+"écrire le champ d'entête CHAMP dans le\n"
 "fichier nommé BASENAME.CHAMP"
 
 #: main.cc:160
@@ -2191,17 +2194,17 @@ msgstr "impossible de chrooter vers : %s : %s"
 #: main.cc:375
 #, c-format
 msgid "cannot change group id to: %d: %s"
-msgstr "impossible de changer l'identifiant de groupe en %d : %s"
+msgstr "impossible de changer l'identifiant de groupe en %d : %s"
 
 #: main.cc:381
 #, c-format
 msgid "cannot change user id to: %d: %s"
-msgstr "impossible de changer l'identifiant utilisateur en %d : %s"
+msgstr "impossible de changer l'identifiant utilisateur en %d : %s"
 
 #: main.cc:387
 #, c-format
 msgid "cannot change working directory to: %s: %s"
-msgstr "impossible de changer le répertoire de travail en %s : %s"
+msgstr "impossible de changer le répertoire de travail en %s : %s"
 
 #: main.cc:628
 #, c-format
@@ -2219,7 +2222,7 @@ msgstr "les étiquettes de marque doivent être des objets de type \"markup\""
 
 #: mensural-ligature-engraver.cc:96
 msgid "ligature with less than 2 heads -> skipping"
-msgstr "ligature avec moins de 2 tête -> escamotage"
+msgstr "ligature avec moins de 2 têtes -> escamotage"
 
 #: mensural-ligature-engraver.cc:123
 msgid "cannot determine pitch of ligature primitive -> skipping"
@@ -2267,11 +2270,11 @@ msgstr "cas inattendu et non interprétable"
 
 #: mensural-ligature.cc:152
 msgid "Mensural_ligature: unexpected case fall-through"
-msgstr "Mensural_ligature: cas inattendu et non interprétable"
+msgstr "Mensural_ligature : cas inattendu et non interprétable"
 
 #: mensural-ligature.cc:203
 msgid "Mensural_ligature: (join_right == 0)"
-msgstr "Mensural_ligature: (joint_right == 0)"
+msgstr "Mensural_ligature : (joint_right == 0)"
 
 #: midi-item.cc:92
 #, c-format
@@ -2286,7 +2289,7 @@ msgstr "impossible d'ouvrir le fichier en écriture : %s : %s"
 #: midi-stream.cc:55
 #, c-format
 msgid "cannot write to file: `%s'"
-msgstr "impossible d'écrire dans le fichier « %s »"
+msgstr "impossible d'écrire dans le fichier « %s »"
 
 #: minimal-page-breaking.cc:40 paper-score.cc:122
 msgid "Calculating line breaks..."
@@ -2303,7 +2306,9 @@ msgstr "Envoi d'un non-événement au contexte"
 #: music.cc:151
 #, c-format
 msgid "octave check failed; expected \"%s\", found: \"%s\""
-msgstr "Échec de vérification d'octave. Aurait dû être \"%s\", \"%s\" obtenu"
+msgstr ""
+"Échec de vérification d'octave.\n"
+"Aurait dû être \"%s\", \"%s\" obtenu"
 
 #: music.cc:219
 msgid "(normalized pitch)"
@@ -2351,7 +2356,7 @@ msgstr "impossible de superposer une note et un silence sur une même hampe"
 #: note-head.cc:76
 #, c-format
 msgid "none of note heads `%s' or `%s' found"
-msgstr "tête de note « %s » ou « %s » non trouvé(e)"
+msgstr "tête de note « %s » ou « %s » non trouvée"
 
 #: note-heads-engraver.cc:76
 msgid "NoteEvent without pitch"
@@ -2394,7 +2399,7 @@ msgstr "Index de caractère invalide"
 #: open-type-font.cc:319 pango-font.cc:187
 #, c-format
 msgid "FT_Get_Glyph_Name () error: %s"
-msgstr "FT_Get_Glyph_Name () erreur : %s"
+msgstr "Erreur FT_Get_Glyph_Name () : %s"
 
 #. find out the ideal number of pages
 #: optimal-page-breaking.cc:60
@@ -2413,7 +2418,7 @@ msgstr "Répartition de la musique sur %d pages..."
 #: optimal-page-breaking.cc:91
 #, c-format
 msgid "Fitting music on %d or %d pages..."
-msgstr "Répartition de la musique sur %d ou %d pages..."
+msgstr "Répartition de la musique sur %d à %d pages..."
 
 #: optimal-page-breaking.cc:101 optimal-page-breaking.cc:155
 #, c-format
@@ -2470,7 +2475,9 @@ msgstr "staff-affinities devraient aller en ordre décroissant"
 #: page-turn-page-breaking.cc:168
 #, c-format
 msgid "page-turn-page-breaking: breaking from %d to %d"
-msgstr "Saut de page et tourne (page-turn-page-breaking) : coupure de %d à %d"
+msgstr ""
+"Saut de page et tourne (page-turn-page-breaking) :\n"
+"coupure entre %d et %d"
 
 #: page-turn-page-breaking.cc:217
 msgid "cannot fit the first page turn onto a single page.  Consider setting first-page-number to an even number."
@@ -2514,13 +2521,13 @@ msgid ""
 "Glyph has no name, but font supports glyph naming.\n"
 "Skipping glyph U+%0X, file %s"
 msgstr ""
-"Le glyphe n'a pas de nom, mais la fonte prend en charge le nommage de glyphes.\n"
+"Le glyphe n'a pas de nom alors que la fonte prend en charge leur nommage.\n"
 "Glyphe U+%0X ignoré dans le fichier %s"
 
 #: pango-font.cc:241
 #, c-format
 msgid "no PostScript font name for font `%s'"
-msgstr "« %s » n'est pas un fichier PostScript"
+msgstr "« %s » n'est pas un fichier de fonte PostScript"
 
 #: pango-font.cc:290
 msgid "FreeType face has no PostScript font name"
@@ -2539,7 +2546,7 @@ msgstr "l'option -dpreview n'est pas opérationnelle avec le moteur %s"
 #: paper-column-engraver.cc:233
 msgid "forced break was overridden by some other event, should you be using bar checks?"
 msgstr ""
-"Un saut explicite a été outrepassé par un autre événement. \n"
+"Un saut explicite a été outrepassé par un autre événement.\n"
 "Positionnez quelques contrôles de mesure (bar check) pour vérifier."
 
 #: paper-outputter-scheme.cc:41
@@ -2637,7 +2644,7 @@ msgstr "répertoire inexistant : %s pour %s"
 #: relocate.cc:94
 #, c-format
 msgid "%s=%s (prepend)\n"
-msgstr "%s=%s (préfixage)\n"
+msgstr "%s=%s (ajout)\n"
 
 #: relocate.cc:124
 #, c-format
@@ -2751,7 +2758,7 @@ msgstr "encodage Scheme : "
 #: slur-engraver.cc:93
 #, c-format
 msgid "direction of %s invalid: %d"
-msgstr "la direction de %s n'est pas valide : %d"
+msgstr "l'orientation de %s n'est pas valide : %d"
 
 #: slur-engraver.cc:162
 msgid "unterminated slur"
@@ -2851,7 +2858,9 @@ msgstr "Chiffrage de mesure inhabituel : %d/%d"
 #: time-signature.cc:94
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
-msgstr "symbole de chiffrage de mesure « %s » inconnu ; retour à un style numérique"
+msgstr ""
+"symbole de chiffrage de mesure « %s » inconnu ;\n"
+"retour à un style numérique"
 
 #: translator-ctors.cc:65
 #, c-format
@@ -2881,7 +2890,9 @@ msgstr "Événement %s précédent ici"
 #: ttf.cc:481 ttf.cc:530
 #, c-format
 msgid "font index %d too large for font `%s', using index 0"
-msgstr "index %d trop grand pour la fonte « %s » ; réindexé sur 0"
+msgstr ""
+"index %d trop grand pour la fonte « %s » ;\n"
+"réindexé sur 0"
 
 #: ttf.cc:513 ttf.cc:565
 msgid "font index must be non-negative, using index 0"
@@ -3018,11 +3029,11 @@ msgstr "absence de guillemet fermant"
 
 #: lexer.ll:485
 msgid "Brace found at end of lyric.  Did you forget a space?"
-msgstr "Accolade repérée à la fin d'une parole. Manquerait-il un espace ?"
+msgstr "Accolade repérée à la fin d'une parole. Manquerait-il une espace ?"
 
 #: lexer.ll:595
 msgid "Brace found at end of markup.  Did you forget a space?"
-msgstr "Accolade repérée à la fin d'un \"markup\". Manquerait-il un espace ?"
+msgstr "Accolade repérée à la fin d'un \"markup\". Manquerait-il une espace ?"
 
 #: lexer.ll:699
 #, c-format
@@ -3039,7 +3050,7 @@ msgstr "chaîne d'échappement inconnue : « \\%s »"
 msgid "file too old: %s (oldest supported: %s)"
 msgstr ""
 "%s est plus qu'obsolète ;\n"
-"le plus ancien pouvant être supporté est %s"
+"le plus ancien pouvant être supporté est %s"
 
 #: lexer.ll:925 lexer.ll:926
 msgid "consider updating the input with the convert-ly script"
@@ -3075,23 +3086,23 @@ msgstr "Conversion à ~a..."
 #: backend-library.scm:178
 #, scheme-format
 msgid "Writing header field `~a' to `~a'..."
-msgstr "écriture du champ d'en-tête « ~a » dans « ~a »..."
+msgstr "écriture du champ d'entête « ~a » dans « ~a »..."
 
 #: backend-library.scm:228
 #, scheme-format
 msgid "missing stencil expression `~S'"
-msgstr "absence d'expression stencil ~S"
+msgstr "absence d'expression stencil « ~S »"
 
 #: chord-entry.scm:50
 #, scheme-format
 msgid "Spurious garbage following chord: ~A"
-msgstr "Information incompréhensible à la suite de l'accord ~A"
+msgstr "Information incompréhensible à la suite de l'accord « ~A »"
 
 #: define-context-properties.scm:31 define-grob-properties.scm:21
 #: define-music-properties.scm:21
 #, scheme-format
 msgid "symbol ~S redefined"
-msgstr "symbole ~S redéfini"
+msgstr "symbole « ~S » redéfini"
 
 #: define-event-classes.scm:78
 msgid "All classes must be the last in their matrilineal line."
@@ -3258,12 +3269,12 @@ msgstr "Écriture du graphique « ~a »..."
 #: layout-beam.scm:38
 #, scheme-format
 msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
-msgstr "Erreur de définition du lien : attendait (~S,~S), ~S trouvé."
+msgstr "Erreur de définition de ligature : attendait (~S,~S), ~S trouvé."
 
 #: layout-beam.scm:52
 #, scheme-format
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
-msgstr "Erreur de définition du lien : attendait ~S 0, repéré ~S."
+msgstr "Erreur de définition de ligature : attendait ~S 0, repéré ~S."
 
 #: lily-library.scm:747
 msgid ""
@@ -3454,7 +3465,7 @@ msgstr "~S n'est pas un objet de \\layout {}"
 #: paper.scm:308
 #, scheme-format
 msgid "Unknown paper size: ~a"
-msgstr "Format de papier inconnue : ~a"
+msgstr "Format de papier inconnu : ~a"
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
index a607a7b2795294661c1423b2425ca7e41825ff3a..f6992ad6309ad052bdda40fe81d3e12fb81b40f3 100644 (file)
--- a/po/it.po
+++ b/po/it.po
 # GNU LilyPond's Italian language file.
+# This file is distributed under the same license as the lilypond package.
 # Copyright (C) 1998 Free Software Foundation, Inc.
 #
 # Tineke de Munnik <jantien@xs4all.nl>, 1998.
 # Maurizio Umberto Puxeddu <umbpux@tin.it>, 1999
+# Federico Bruni <fedelogy@gmail.com>, 2010-2011, 2011.
+#
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 1.6.0\n"
+"Project-Id-Version: lilypond 2.13.48\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
-"POT-Creation-Date: 2008-02-14 15:55+0100\n"
-"PO-Revision-Date: 1998-05-30 00:17:12+0200\n"
-"Last-Translator: Maurizio Umberto Puxeddu <umbpux@tin.it>\n"
+"POT-Creation-Date: 2010-12-06 22:30+0100\n"
+"PO-Revision-Date: 2011-02-20 17:07+0100\n"
+"Last-Translator: Federico Bruni <fedelogy@gmail.com>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
+"Language: it\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+#: book_base.py:24
+#, python-format
+msgid "file not found: %s"
+msgstr "file non trovato: %s"
+
+#: book_base.py:161
+msgid "Output function not implemented"
+msgstr "Funzione di output non implementata"
+
+#: book_latex.py:156
+msgid "cannot find \\begin{document} in LaTeX document"
+msgstr "impossibile trovare \\begin{document} nel documento LaTeX"
+
+#: book_snippets.py:517
+#, python-format
+msgid "deprecated ly-option used: %s=%s"
+msgstr "opzione ly-option deprecata: %s=%s"
+
+#: book_snippets.py:519
+#, python-format
+msgid "compatibility mode translation: %s=%s"
+msgstr "traduzione in modalità compatibile: %s=%s"
+
+#: book_snippets.py:522
+#, python-format
+msgid "deprecated ly-option used: %s"
+msgstr "opzione ly-option deprecata: %s"
+
+#: book_snippets.py:524
+#, python-format
+msgid "compatibility mode translation: %s"
+msgstr "traduzione in modalità compatibile: %s"
+
+#: book_snippets.py:542
+#, python-format
+msgid "ignoring unknown ly option: %s"
+msgstr "l'opzione ly sconosciuta viene ignorata: %s"
+
+#: book_snippets.py:728
+#, python-format
+msgid "Opening filter `%s'\n"
+msgstr "Apertura del filtro «%s»\n"
+
+#: book_snippets.py:748
+#, python-format
+msgid "`%s' failed (%d)"
+msgstr "«%s» fallito (%d)"
+
+#: book_snippets.py:749
+msgid "The error log is as follows:"
+msgstr "Il registro dell'errore è il seguente:"
+
 #: convertrules.py:12
 #, python-format
 msgid "Not smart enough to convert %s"
-msgstr ""
+msgstr "Non abbastanza intelligente per convertire %s"
 
 #: convertrules.py:13
 msgid "Please refer to the manual for details, and update manually."
-msgstr ""
+msgstr "Si consulti il manuale per i dettagli e si aggiorni manualmente."
 
 #: convertrules.py:14
 #, python-format
 msgid "%s has been replaced by %s"
-msgstr ""
+msgstr "%s è stato sostituito da %s"
 
-#: convertrules.py:24 musicexp.py:16 convert-ly.py:47 lilypond-book.py:82
-#: warn.cc:48 input.cc:90
-#, fuzzy, c-format, python-format
+#: convertrules.py:24 lilylib.py:78 musicexp.py:17 convert-ly.py:64 warn.cc:66
+#: input.cc:109
+#, c-format, python-format
 msgid "warning: %s"
-msgstr "attenzione: "
+msgstr "attenzione: %s"
 
-#: convertrules.py:33 convertrules.py:103
+#: convertrules.py:49 convertrules.py:99
 msgid "\\header { key = concat + with + operator }"
-msgstr ""
+msgstr "\\header { chiave = concat + con + operatore }"
 
-#: convertrules.py:48
-#, fuzzy, python-format
+#: convertrules.py:58
+#, python-format
 msgid "deprecated %s"
-msgstr "approssimato: %s:"
+msgstr "%s è deprecato"
 
-#: convertrules.py:61
+#: convertrules.py:70
 msgid "deprecated \\textstyle, new \\key syntax"
-msgstr ""
+msgstr "\\textstyle deprecato, nuova sintassi per \\key"
 
-#: convertrules.py:80 convertrules.py:2124 convertrules.py:2337
-#: convertrules.py:2512 convertrules.py:2889
+#: convertrules.py:86 convertrules.py:1905 convertrules.py:2084
+#: convertrules.py:2236 convertrules.py:2566 convertrules.py:2862
 msgid "bump version for release"
-msgstr ""
+msgstr "aumentare il numero di versione per il rilascio"
 
-#: convertrules.py:99
+#: convertrules.py:103
 msgid "new \\header format"
-msgstr ""
+msgstr "nuovo formato di \\header"
 
-#: convertrules.py:133
+#: convertrules.py:132
 msgid "\\translator syntax"
-msgstr ""
+msgstr "sintassi di \\translator"
 
-#: convertrules.py:211
+#: convertrules.py:184
 msgid "\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative"
-msgstr ""
+msgstr "\\repeat NUMERO Alternativa Musicale -> \\repeat FOLDSTR Alternativa Musicale"
 
-#: convertrules.py:254 convertrules.py:828 convertrules.py:1584
-#: convertrules.py:2685
+#: convertrules.py:216 convertrules.py:699 convertrules.py:1383
+#: convertrules.py:2378
 #, python-format
 msgid "deprecate %s"
-msgstr ""
+msgstr "%s è deprecato"
 
-#: convertrules.py:361
+#: convertrules.py:290
 #, python-format
 msgid "deprecate %s "
-msgstr ""
+msgstr "%s è deprecato "
 
-#: convertrules.py:384
+#: convertrules.py:319
 msgid "new \\notenames format"
-msgstr ""
+msgstr "nuovo formato di \\notenames"
 
-#: convertrules.py:404
+#: convertrules.py:337
 msgid "new tremolo format"
-msgstr ""
+msgstr "nuovo formato di tremolo"
 
-#: convertrules.py:417
+#: convertrules.py:342
 msgid "Staff_margin_engraver deprecated, use Instrument_name_engraver"
-msgstr ""
+msgstr "Staff_margin_engraver è deprecato, usare Instrument_name_engraver"
 
-#: convertrules.py:536
+#: convertrules.py:395
 msgid "change property definiton case (eg. onevoice -> oneVoice)"
-msgstr ""
+msgstr "cambiare le maiuscole della definizione di proprietà (es: onevoice -> oneVoice)"
 
-#: convertrules.py:544
+#: convertrules.py:457
 msgid "new \\textscript markup text"
-msgstr ""
+msgstr "nuovo testo di marcatura \\textscript"
 
-#: convertrules.py:638
-#, fuzzy, python-format
+#: convertrules.py:530
+#, python-format
 msgid "identifier names: %s"
-msgstr "Il nome dell'identificatore è una parola chiave (`%s')"
+msgstr "nomi dell'identificatore: %s"
 
-#: convertrules.py:679
+#: convertrules.py:569
 msgid "point-and-click argument changed to procedure."
-msgstr ""
+msgstr "l'argomento point-and-click è stato cambiato in procedura."
 
-#: convertrules.py:739
+#: convertrules.py:611
 msgid "semicolons removed"
-msgstr ""
+msgstr "punti e virgola eliminati"
 
 #. 40 ?
-#: convertrules.py:795
+#: convertrules.py:654
 #, python-format
 msgid "%s property names"
-msgstr ""
+msgstr "nomi della proprietà %s"
 
-#: convertrules.py:865
+#: convertrules.py:724
 msgid "automaticMelismata turned on by default"
-msgstr ""
+msgstr "automaticMelismata attivato per impostazione predefinita"
 
-#: convertrules.py:1131 convertrules.py:1893 convertrules.py:2166
-#: convertrules.py:2472
-#, fuzzy, python-format
+#: convertrules.py:963 convertrules.py:1682 convertrules.py:1942
+#: convertrules.py:2189
+#, python-format
 msgid "remove %s"
-msgstr "Genero le voci..."
+msgstr "elimina %s"
 
-#: convertrules.py:1164 convertrules.py:1173
+#: convertrules.py:1001 convertrules.py:1005
 msgid "cluster syntax"
-msgstr ""
+msgstr "sintassi dei cluster"
 
-#: convertrules.py:1182
+#: convertrules.py:1014
 msgid "new Pedal style syntax"
-msgstr ""
+msgstr "nuova sintassi di stile del Pedale"
 
-#: convertrules.py:1451
+#: convertrules.py:1273
 msgid ""
 "New relative mode,\n"
 "Postfix articulations, new text markup syntax, new chord syntax."
 msgstr ""
+"Nuovo modo relativo.\n"
+"Articolazioni suffisse, nuova sintassi di marcatura del testo, nuova sintassi degli accordi."
 
-#: convertrules.py:1475
+#: convertrules.py:1286
 msgid "Remove - before articulation"
-msgstr ""
+msgstr "Elimina - prima dell'articolazione"
 
-#: convertrules.py:1515
+#: convertrules.py:1324
 #, python-format
 msgid "%s misspelling"
-msgstr ""
-
-#: convertrules.py:1521
-msgid "attempting automatic \\figures conversion.  Check results!"
-msgstr ""
+msgstr "errore di digitazione in %s"
 
-#: convertrules.py:1550
+#: convertrules.py:1346
 msgid "Swap < > and << >>"
-msgstr ""
+msgstr "Scambia < > e << >>"
+
+#: convertrules.py:1349
+msgid "attempting automatic \\figures conversion.  Check results!"
+msgstr "tentativo di conversione automatica di \\figures.  Controllare i risultati!"
 
-#: convertrules.py:1576
+#: convertrules.py:1400
 msgid "Use Scheme code to construct arbitrary note events."
+msgstr "Usa il codice di Scheme per costruire eventi arbitrari della nota."
+
+#: convertrules.py:1407
+msgid ""
+"use symbolic constants for alterations,\n"
+"remove \\outputproperty, move ly:verbose into ly:get-option"
 msgstr ""
+"usa costanti simboliche per le alterazioni,\n"
+"togli \\outproperty, sostituisci ly:verbose con ly:get-option"
 
-#: convertrules.py:1609
+#: convertrules.py:1432
 #, python-format
 msgid ""
 "\\outputproperty found,\n"
@@ -170,8 +236,14 @@ msgid ""
 "\n"
 "as a substitution text."
 msgstr ""
+"Trovato \\outputproperty,\n"
+"Modificalo manualmente con\n"
+"\n"
+"  \\applyoutput #(outputproperty-compatibility %s '%s <VALORE DELLA PROPRIETÀ DEL GROB>)\n"
+"\n"
+"come testo sostitutivo."
 
-#: convertrules.py:1623
+#: convertrules.py:1446
 msgid ""
 "The alteration field of Scheme pitches was multiplied by 2\n"
 "to support quarter tone accidentals.  You must update the following constructs manually:\n"
@@ -179,76 +251,83 @@ msgid ""
 "* calls of ly:make-pitch and ly:pitch-alteration\n"
 "* keySignature settings made with \\property\n"
 msgstr ""
+"Il campo di alterazione delle altezze di Scheme è stato moltiplicato per 2\n"
+"per supportare le alterazioni di un quarto di tono.  È necessario aggiornare manualmente i seguenti costrutti:\n"
+"\n"
+"* chiamate a ly:make-pitch e ly:pitch-alteration\n"
+"* impostazioni di keySignature fatte con \\property\n"
 
-#: convertrules.py:1633
-msgid ""
-"use symbolic constants for alterations,\n"
-"remove \\outputproperty, move ly:verbose into ly:get-option"
-msgstr ""
-
-#: convertrules.py:1692
+#: convertrules.py:1493
 msgid "removal of automaticMelismata; use melismaBusyProperties instead."
-msgstr ""
+msgstr "eliminazione di automaticMelismata; al suo posto usare melismaBusyProperties."
 
-#: convertrules.py:1807
+#: convertrules.py:1600
 msgid "\\partcombine syntax change to \\newpartcombine"
+msgstr "cambio nella sintassi da \\partcombine a \\newpartcombine"
+
+#: convertrules.py:1628
+msgid ""
+"Drum notation changes, Removing \\chordmodifiers, \\notenames.\n"
+"Harmonic notes. Thread context removed. Lyrics context removed."
 msgstr ""
+"Cambiamenti della notazione per percussioni, eliminati \\chordmodifiers e \\notenames.\n"
+"Note armoniche. Eliminati i contesti Thread e Lyrics."
 
-#: convertrules.py:1824
+#: convertrules.py:1632
 msgid "Drums found. Enclose drum notes in \\drummode"
-msgstr ""
+msgstr "Trovate percussioni. Inserisci le note delle percussioni in \\drummode"
 
-#: convertrules.py:1835 convertrules.py:1842 convertrules.py:1853
+#: convertrules.py:1643 convertrules.py:1650 convertrules.py:1661
 #, python-format
 msgid ""
 "\n"
 "%s found. Check file manually!\n"
 msgstr ""
+"\n"
+"Si è trovato %s. Controlla il file manualmente!\n"
 
-#: convertrules.py:1835
+#: convertrules.py:1643
 msgid "Drum notation"
-msgstr ""
-
-#: convertrules.py:1863
-msgid ""
-"Drum notation changes, Removing \\chordmodifiers, \\notenames.\n"
-"Harmonic notes. Thread context removed. Lyrics context removed."
-msgstr ""
+msgstr "Notazione delle percussioni"
 
-#: convertrules.py:1924
+#: convertrules.py:1702
 msgid "new syntax for property settings:"
-msgstr ""
+msgstr "nuova sintassi per le impostazioni delle proprietà:"
 
-#: convertrules.py:1957
+#: convertrules.py:1728
 msgid "Property setting syntax in \\translator{ }"
-msgstr ""
-
-#: convertrules.py:1978
-#, fuzzy, python-format
-msgid "use %s"
-msgstr "attenzione: "
+msgstr "Sintassi per impostare una proprietà in \\translator{ }"
 
-#: convertrules.py:1995
+#: convertrules.py:1767
 msgid "Scheme grob function renaming"
-msgstr ""
+msgstr "Rinominare la funzione di grob di Scheme"
+
+#: convertrules.py:1780
+#, python-format
+msgid "use %s"
+msgstr "usa %s"
 
-#: convertrules.py:2008
+#: convertrules.py:1797
 msgid "More Scheme function renaming"
-msgstr ""
+msgstr "Rinominare altre funzioni di Scheme"
 
-#: convertrules.py:2140
+#: convertrules.py:1924
 msgid ""
 "Page layout has been changed, using paper size and margins.\n"
 "textheight is no longer used.\n"
 msgstr ""
+"La formattazione di pagina è stata modificata, usando la dimensione del foglio e i margini.\n"
+"textheight non è più usato.\n"
 
-#: convertrules.py:2259
+#: convertrules.py:2010
 msgid ""
 "\\foo -> \\foomode (for chords, notes, etc.)\n"
 "fold \\new FooContext \\foomode into \\foo."
 msgstr ""
+"\\foo -> \\foomode (per accordi, note, etc.)\n"
+"inserire \\new FooContext \\foomode in \\foo."
 
-#: convertrules.py:2285
+#: convertrules.py:2048
 msgid ""
 "staff size should be changed at top-level\n"
 "with\n"
@@ -256,1231 +335,1581 @@ msgid ""
 "  #(set-global-staff-size <STAFF-HEIGHT-IN-POINT>)\n"
 "\n"
 msgstr ""
+"la dimensione del rigo deve essere cambiata al livello superiore\n"
+"con\n"
+"\n"
+"  #(set-global-staff-size <ALTEZZA-DEL-RIGO-IN-PUNTI>)\n"
+"\n"
 
-#: convertrules.py:2320
+#: convertrules.py:2068
 msgid "regularize other identifiers"
-msgstr ""
+msgstr "normalizza altri identificatori"
+
+#: convertrules.py:2136
+msgid "\\encoding: smart recode latin1..utf-8. Remove ly:point-and-click"
+msgstr "\\encoding: ricodifica intelligente da latin1 a utf-8. Eliminazione di ly:point-and-click"
 
-#: convertrules.py:2411
+#: convertrules.py:2149
 msgid "LilyPond source must be UTF-8"
-msgstr ""
+msgstr "Il sorgente di LilyPond deve avere la codifica UTF-8"
 
-#: convertrules.py:2414
+#: convertrules.py:2152
 msgid "Try the texstrings backend"
-msgstr ""
+msgstr "Prova il backend textstrings"
 
-#: convertrules.py:2417
+#: convertrules.py:2155
 #, python-format
 msgid "Do something like: %s"
-msgstr ""
+msgstr "Fai qualcosa come: %s"
 
-#: convertrules.py:2420
+#: convertrules.py:2158
 msgid "Or save as UTF-8 in your editor"
-msgstr ""
+msgstr "O salva in formato UTF-8 nel tuo editor"
 
-#: convertrules.py:2452
-msgid "\\encoding: smart recode latin1..utf-8. Remove ly:point-and-click"
-msgstr ""
+#: convertrules.py:2212
+msgid "warn about auto beam settings"
+msgstr "attenzione alle impostazioni delle travature automatiche"
 
-#: convertrules.py:2485
+#: convertrules.py:2217
 msgid "auto beam settings"
-msgstr ""
+msgstr "impostazioni delle travature automatiche"
 
-#: convertrules.py:2487
+#: convertrules.py:2219
 msgid ""
 "\n"
 "Auto beam settings must now specify each interesting moment in a measure\n"
-"explicitely; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too.\n"
-msgstr ""
-
-#: convertrules.py:2498
-msgid "warn about auto beam settings"
+"explicitly; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too.\n"
 msgstr ""
+"\n"
+"Le impostazioni di travatura automatica ora devono specificare esplicitamente ogni momento\n"
+"interessante in una misura; 1/4 non viene più moltiplicato per coprire anche i momenti 1/2 e 3/4.\n"
 
-#: convertrules.py:2624
+#: convertrules.py:2333
 msgid "verticalAlignmentChildCallback has been deprecated"
-msgstr ""
+msgstr "verticalAlignmentChildCallback è deprecato"
 
-#: convertrules.py:2652
+#: convertrules.py:2337
 msgid "Remove callbacks property, deprecate XY-extent-callback."
-msgstr ""
+msgstr "Togli la proprietà di callback, XY-extent-callback è deprecato."
 
-#: convertrules.py:2663
+#: convertrules.py:2358
 msgid "Use grob closures iso. XY-offset-callbacks."
-msgstr ""
+msgstr "Usa le chiusure del grob al posto di XY-offset-callbacks."
 
-#: convertrules.py:2770
+#: convertrules.py:2420
 msgid "foobar -> foo-bar for \\paper, \\layout"
-msgstr ""
+msgstr "foobar -> foo-bar per \\paper, \\layout"
 
-#: convertrules.py:2877
+#: convertrules.py:2530
 msgid "deprecate \\tempo in \\midi"
-msgstr ""
+msgstr "\\tempo in un blocco \\midi è deprecato"
 
-#: convertrules.py:2912
+#: convertrules.py:2583
 msgid "deprecate cautionary-style. Use AccidentalCautionary properties"
-msgstr ""
+msgstr "cautionary-style è deprecato. Usa le proprietà di AccidentalCautionary"
 
-#: convertrules.py:2941
+#: convertrules.py:2596
 msgid "Rename accidental glyphs, use glyph-name-alist."
-msgstr ""
+msgstr "Rinomina i glifi delle alterazioni, usa glyph-name-alist."
 
-#: convertrules.py:2973
+#: convertrules.py:2651
 msgid "edge-text settings for TextSpanner."
-msgstr ""
+msgstr "Impostazioni di edge-text per TextSpanner."
 
-#: convertrules.py:2974
-#, fuzzy, python-format
+#: convertrules.py:2652
+#, python-format
 msgid ""
 "Use\n"
 "\n"
 "%s"
-msgstr "attenzione: "
+msgstr ""
+"Usa\n"
+"\n"
+"%s"
+
+#: convertrules.py:2685
+msgid "Use the `alignment-offsets' sub-property of\n"
+msgstr "Usa «alignment-offsets», sottoproprietà di\n"
+
+#: convertrules.py:2686
+msgid "NonMusicalPaperColumn #'line-break-system-details\n"
+msgstr "NonMusicalPaperColumn #'line-break-system-details\n"
+
+#: convertrules.py:2687
+msgid "to set fixed distances between staves.\n"
+msgstr "per impostare distanze fisse tra i righi.\n"
+
+#: convertrules.py:2699
+msgid "Use #'style not #'dash-fraction to select solid/dashed lines."
+msgstr "Usa #'style e non #'dash-fraction per ottenere linee continue o tratteggiate."
 
-#: convertrules.py:3020
+#: convertrules.py:2705
 msgid "all settings related to dashed lines.\n"
-msgstr ""
+msgstr "tutte le impostazioni relative alle linee tratteggiate.\n"
 
-#: convertrules.py:3021
+#: convertrules.py:2706
 msgid "Use \\override ... #'style = #'line for solid lines and\n"
-msgstr ""
+msgstr "Usa \\override ... #'style = #'line per le linee continue e\n"
 
-#: convertrules.py:3022
+#: convertrules.py:2707
 msgid "\t\\override ... #'style = #'dashed-line for dashed lines."
+msgstr "\t\\override ... #'style = #'dashed-line per le linee tratteggiate."
+
+#: convertrules.py:2743
+msgid ""
+"metronomeMarkFormatter uses text markup as second argument,\n"
+"fret diagram properties moved to fret-diagram-details."
 msgstr ""
+"il secondo argomento di metronomeMarkFormatter deve essere una marcatura di testo,\n"
+"le proprietà del diagramma dei tasti si trovano ora in fret-diagram-details."
 
-#: convertrules.py:3027
-msgid "Use #'style not #'dash-fraction to select solid/dashed lines."
+#: convertrules.py:2748
+msgid "metronomeMarkFormatter got an additional text argument.\n"
+msgstr "metronomeMarkFormatter prende un argomento testuale supplementare.\n"
+
+#: convertrules.py:2749
+#, python-format
+msgid ""
+"The function assigned to Score.metronomeMarkFunction now uses the signature\n"
+"%s"
 msgstr ""
+"La funzione assegnata a Score.metronomeMarkFunction ora usa l'indicazione\n"
+"%s"
+
+#: convertrules.py:2812
+msgid "\\put-adjacent argument order.\n"
+msgstr "ordine degli argomenti di \\put-adjacent.\n"
+
+#: convertrules.py:2813
+msgid "Axis and direction now come before markups:\n"
+msgstr "Asse e direzione ora devono precedere i marcatori:\n"
+
+#: convertrules.py:2814
+msgid "\\put-adjacent axis dir markup markup."
+msgstr "\\put-adjacent asse direzione marcatore marcatore."
+
+#: convertrules.py:2845
+msgid "re-definition of InnerStaffGroup.\n"
+msgstr "ridefinizione di InnerStaffGroup.\n"
 
-#: fontextract.py:26
-#, fuzzy, python-format
+#: convertrules.py:2851
+msgid "re-definition of InnerChoirStaff.\n"
+msgstr "ridefinizione di InnerChoirStaff.\n"
+
+#: convertrules.py:2861
+msgid "Syntax changes for \\addChordShape and \\chord-shape"
+msgstr "Cambiamenti di sintassi per \\addChordShape e \\chord-shape"
+
+#: convertrules.py:2866
+msgid "stringTuning must be added to addChordShape call.\n"
+msgstr "stringTuning deve essere aggiunto alla chiamata addChordShape.\n"
+
+#: convertrules.py:2872
+msgid "stringTuning must be added to chord-shape call.\n"
+msgstr "stringTuning deve essere aggiunto alla chiamata chord-shape.\n"
+
+#: convertrules.py:2879
+msgid "Remove oldaddlyrics"
+msgstr "Elimina oldaddlyrics"
+
+#: convertrules.py:2883
+msgid ""
+"oldaddlyrics is no longer supported. \n"
+"         Use addlyrics or lyrsicsto instead.\n"
+msgstr ""
+"oldaddlyrics non è più supportato.\n"
+"         Usa addlyrics o lyrsicsto al suo posto.\n"
+
+#: convertrules.py:2889
+msgid ""
+"keySignature property not reversed any more\n"
+"MIDI 47: orchestral strings -> orchestral harp"
+msgstr ""
+"la proprietà keySignature property non è più invertita\n"
+"MIDI 47: archi orchestrali -> arpa orchestrale"
+
+#: convertrules.py:2894
+msgid "The alist for Staff.keySignature is no longer in reversed order.\n"
+msgstr "L'alist (association list) di Staff.keySignature non è più in ordine invertito.\n"
+
+#: convertrules.py:2900
+msgid ""
+"\\bar \".\" now produces a thick barline\n"
+"ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n"
+"Dash parameters for slurs and ties are now in dash-definition"
+msgstr ""
+"\\bar \".\" ora crea una stanghetta spessa\n"
+"ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time\n"
+"I parametri del tratteggiato per le legature di portamento e di valore si trovano ora in dash-definition"
+
+#: convertrules.py:2906
+msgid "\\bar \".\" now produces a thick barline.\n"
+msgstr "\\bar \".\" ora crea una stanghetta spessa.\n"
+
+#: convertrules.py:2912
+msgid "Dash parameters for slurs and ties are now in 'dash-details.\n"
+msgstr "I parametri del tratteggiato per le legature di portamento e di valore si trovano ora in 'dash-details.\n"
+
+#: convertrules.py:2917
+msgid ""
+"Autobeaming rules have changed.  override-auto-beam-setting and\n"
+"revert-auto-beam-setting have been eliminated.\n"
+"\\overrideBeamSettings has been added.\n"
+"beatGrouping has been eliminated.\n"
+"Different settings for vertical layout.\n"
+"ly:system-start-text::print -> system-start-text::print\n"
+"Beam #'thickness -> Beam #'beam-thickness\n"
+"ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil\n"
+"ly:ambitus::print -> ambitus::print\n"
+"Explicit dynamics context definition from `Piano centered dynamics'\n"
+"template replaced by new `Dynamics' context."
+msgstr ""
+"Le regole per la disposizione automatica delle travature sono cambiate.  override-auto-beam-setting e\n"
+"revert-auto-beam-setting sono stati eliminati.\n"
+"\\overrideBeamSettings è stato aggiunto.\n"
+"beatGrouping è stato eliminato.\n"
+"Impostazioni diverse per la formattazione verticale.\n"
+"ly:system-start-text::print -> system-start-text::print\n"
+"Beam #'thickness -> Beam #'beam-thickness\n"
+"ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil\n"
+"ly:ambitus::print -> ambitus::print\n"
+"La definizione esplicita del contesto della dinamica presa dal modello «Piano centered dynamics»\n"
+"è stata sostituita dal nuovo contesto «Dynamics»."
+
+#: convertrules.py:2931
+msgid ""
+"override-auto-beam-setting.\n"
+"   Autobeam settings are now overriden with \\overrideBeamSettings.\n"
+msgstr ""
+"override-auto-beam-setting.\n"
+"   Le impostazioni della disposizione automatica delle travature vengono ora sovrascritte con \\overrideBeamSettings.\n"
+
+#: convertrules.py:2936
+msgid ""
+"override-auto-beam-setting.\n"
+"   Autobeam settings are now reverted with \\revertBeamSettings.\n"
+msgstr ""
+"override-auto-beam-setting.\n"
+"   Le impostazioni della disposizione automatica delle travature vengono ora ripristinate con \\revertBeamSettings.\n"
+
+#: convertrules.py:2941
+msgid ""
+"beatGrouping. \n"
+"   beatGrouping with a specified context must now be accomplished with\n"
+"   \\overrideBeamSettings.\n"
+msgstr ""
+"beatGrouping. \n"
+"   beatGrouping in un contesto specifico ora deve essere ottenuto con\n"
+"   \\overrideBeamSettings.\n"
+
+#: convertrules.py:2947
+msgid "alignment-offsets has been changed to alignment-distances: you must now specify the distances between staves rather than the offset of staves.\n"
+msgstr "alignment-offsets è diventato alignment-distances: ora occorre specificare le distanze tra i righi invece dello slittamento (offset) dei righi.\n"
+
+#: convertrules.py:2958
+msgid ""
+"Remove obsolete engravers/translators: Note_swallow_translator,\n"
+"Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n"
+"Swallow_performer and String_number_engraver.\n"
+"New vertical spacing variables."
+msgstr ""
+"Elimina gli incisori/traduttori obsoleti: Note_swallow_translator,\n"
+"Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,\n"
+"Swallow_performer e String_number_engraver.\n"
+"Nuove variabili per la spaziatura verticale."
+
+#: convertrules.py:2982
+msgid "vertical spacing has been changed; minimum-Y-extent is obsolete.\n"
+msgstr "la spaziatura verticale è cambiata; minimum-Y-extent è obsoleto.\n"
+
+#: convertrules.py:2988
+msgid "Unify fetaNumber and fetaDynamic encodings"
+msgstr "Unifica le codifiche di fetaNumber e fetaDynamic"
+
+#: convertrules.py:2993
+msgid "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves"
+msgstr "\\RemoveEmpty*StaffContext -> \\*Staff \\RemoveEmptyStaves"
+
+#: convertrules.py:3004
+msgid "\\cresc etc. are now postfix operators"
+msgstr "\\cresc etc. sono ora operatori suffissi"
+
+#: convertrules.py:3010
+msgid ""
+"Eliminate beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings and \\revertBeamSettings.\n"
+"\"accordion.accEtcbase\" -> \"accordion.etcbass\""
+msgstr ""
+"Elimina beamSettings, beatLength, \\setBeatGrouping, \\overrideBeamSettings e \\revertBeamSettings.\n"
+"\"accordion.accEtcbase\" -> \"accordion.etcbass\""
+
+#: convertrules.py:3028
+msgid "\\overrideBeamSettings.  Use \\set beamExceptions or \\overrideTimeSignatureSettings.\n"
+msgstr "\\overrideBeamSettings.  Usa \\set beamExceptions o \\overrideTimeSignatureSettings.\n"
+
+#: convertrules.py:3032
+msgid "\\revertBeamSettings. Use \\set beamExceptions or \\revertTimeSignatureSettings.\n"
+msgstr "\\revertBeamSettings. Usa \\set beamExceptions o \\revertTimeSignatureSettings.\n"
+
+#: convertrules.py:3036
+msgid "beamSettings. Use baseMoment, beatStructure, and beamExceptions.\n"
+msgstr "beamSettings. Usa baseMoment, beatStructure, e beamExceptions.\n"
+
+#: convertrules.py:3040
+msgid "beatLength. Use baseMoment and beatStructure.\n"
+msgstr "beatLength. Usa baseMoment e beatStructure.\n"
+
+#: convertrules.py:3044
+msgid "setbeatGrouping. Use baseMoment and beatStructure.\n"
+msgstr "setbeatGrouping. Usa baseMoment e beatStructure.\n"
+
+#: convertrules.py:3049
+msgid ""
+"Woodwind diagrams: Move size, thickness, and graphic from argument list to properties.\n"
+"Deprecate negative dash-period for hidden lines: use #'style = #'none instead."
+msgstr ""
+"Diagrammi dei legni: Spostare dimensione, spessore e grafico da lista di argomenti a proprietà.\n"
+"L'uso di dash-period con valori negativi per creare linee nascoste è deprecato: al suo posto usare #'style = #'none."
+
+#: convertrules.py:3054
+msgid "woodwind-diagrams.  Move size, thickness, and graphic to properties.  Argument should be just the key list.\n"
+msgstr "Diagrammi dei legni: Sposta dimensione, spessore e grafico in proprietà.  L'unico argomento deve essere la lista di chiavi.\n"
+
+#: convertrules.py:3062
+msgid ""
+"Rename vertical spacing variables.\n"
+"Add fretboard-table argument to savePredefinedFretboard."
+msgstr ""
+"Rinomina le variabili della spaziatura verticale.\n"
+"Aggiungi l'argomento fretboard-table a savePredefinedFretboard."
+
+#: convertrules.py:3080
+msgid "Rename vertical spacing grob properties."
+msgstr "Rinomina le proprietà di spaziatura verticale dei grob."
+
+#: convertrules.py:3096
+msgid "Remove \\paper variables head-separation and foot-separation."
+msgstr "Elimina le variabili di \\paper head-separation e foot-separation."
+
+#: convertrules.py:3101
+msgid "Adjust settings for top-system-spacing instead.\n"
+msgstr "Regola invece le impostazioni di top-system-spacing.\n"
+
+#: convertrules.py:3106
+msgid "Adjust settings for last-bottom-spacing instead.\n"
+msgstr "Regola invece le impostazioni di last-bottom-spacing.\n"
+
+#: fontextract.py:25
+#, python-format
 msgid "Scanning %s"
-msgstr "attenzione: "
+msgstr "Esame di %s"
 
-#: fontextract.py:71
+#: fontextract.py:70
 #, python-format
 msgid "Extracted %s"
-msgstr ""
+msgstr "Estratto %s"
 
-#: fontextract.py:86
-#, fuzzy, python-format
+#: fontextract.py:85
+#, python-format
 msgid "Writing fonts to %s"
-msgstr "non trovo e non posso creare `%s'"
+msgstr "Scrittura dei tipi di carattere su %s"
 
-#: lilylib.py:102 lilylib.py:153
+#: lilylib.py:81 musicxml.py:13 convert-ly.py:67 warn.cc:72 input.cc:115
+#: input.cc:123
+#, c-format, python-format
+msgid "error: %s"
+msgstr "errore: %s"
+
+#: lilylib.py:124 lilylib.py:175
 #, python-format
 msgid "Invoking `%s'"
-msgstr ""
+msgstr "Invocazione di «%s»"
 
-#: lilylib.py:104 lilylib.py:155
-#, fuzzy, python-format
+#: lilylib.py:126 lilylib.py:177
+#, python-format
 msgid "Running %s..."
-msgstr "Genero le voci..."
+msgstr "Esecuzione di %s..."
 
-#: lilylib.py:220
-#, fuzzy, python-format
+#: lilylib.py:253
+#, python-format
 msgid "Usage: %s"
-msgstr "attenzione: "
+msgstr "Uso: %s"
 
-#: musicexp.py:577
+#: musicexp.py:216 musicexp.py:221
+msgid "Language does not support microtones contained in the piece"
+msgstr "La lingua non supporta i microtoni presenti nel brano"
+
+#: musicexp.py:483
+msgid "Tuplet brackets of curved shape are not correctly implemented"
+msgstr "Le parentesi di forma curva per i gruppi irregolari non sono implementate correttamente"
+
+#: musicexp.py:669
 #, python-format
 msgid "unable to set the music %(music)s for the repeat %(repeat)s"
-msgstr ""
+msgstr "non è stato possibile impostare la musica %(music)s per la ripetizione %(repeat)s"
 
-#: musicexp.py:586
+#: musicexp.py:678
 msgid "encountered repeat without body"
-msgstr ""
+msgstr "si è incontrata una ripetizione senza corpo"
 
-#: musicxml.py:13 convert-ly.py:50 lilypond-book.py:85 warn.cc:54 input.cc:96
-#: input.cc:104
-#, fuzzy, c-format, python-format
-msgid "error: %s"
-msgstr "errore: "
+#. no self.elements!
+#: musicexp.py:848
+#, python-format
+msgid "Grace note with no following music: %s"
+msgstr "Nota di abbellimento non seguita da musica: %s"
 
-#: musicxml.py:272
-msgid "requested time signature, but time sig is unknown"
-msgstr ""
+#: musicexp.py:1010
+#, python-format
+msgid "Invalid octave shift size found: %s. Using no shift."
+msgstr "Trovata una dimensione di spostamento dell'ottava non valida: %s. Non si userà alcun spostamento."
 
-#: musicxml.py:338
+#: musicexp.py:1468
 #, python-format
-msgid "Encountered note at %s with %s duration (no <type> element):"
-msgstr ""
+msgid "Unable to convert alteration %s to a lilypond expression"
+msgstr "Non si può convertire l'alterazione %s in un'espressione lilypond"
+
+#. TODO: Handle pieces without a time signature!
+#: musicxml.py:358
+msgid "Senza-misura time signatures are not yet supported!"
+msgstr "I segni di tempo senza-misura non sono ancora supportati!"
 
-#: musicxml.py:372
+#: musicxml.py:376
+msgid "Unable to interpret time signature! Falling back to 4/4."
+msgstr "Non è stato possibile interpretare l'indicazione di tempo! Verrà usato il 4/4."
+
+#: musicxml.py:432
 #, python-format
-msgid "Unable to find find instrument for ID=%s\n"
-msgstr ""
+msgid "Key alteration octave given for a non-existing alteration nr. %s, available numbers: %s!"
+msgstr "Si è inserita un'ottava di alterazione di tonalità per un numero di alterazioni inesistente %s, numeri disponibili: %s!"
+
+#: musicxml.py:520
+#, python-format
+msgid "Unable to find instrument for ID=%s\n"
+msgstr "Impossibile trovare lo strumento con ID=%s\n"
 
-#: abc2ly.py:1342 convert-ly.py:71 lilypond-book.py:109 midi2ly.py:849
-#, fuzzy, python-format
+#: abc2ly.py:1373 convert-ly.py:87 lilypond-book.py:122 midi2ly.py:860
+#, python-format
 msgid "%s [OPTION]... FILE"
-msgstr "Uso: %s [OPZIONE]... [FILE]"
+msgstr "%s [OPZIONE]... FILE"
 
-#: abc2ly.py:1343
+#: abc2ly.py:1374
 #, python-format
 msgid ""
 "abc2ly converts ABC music files (see\n"
-"%s) to LilyPond input."
+"%s) to LilyPond input.\n"
 msgstr ""
+"abc2ly converte file musicali ABC (si veda\n"
+"%s) in input LilyPond.\n"
 
-#: abc2ly.py:1350 convert-ly.py:78 etf2ly.py:1190 lilypond-book.py:175
-#: midi2ly.py:885 musicxml2ly.py:1824 main.cc:161
+#: abc2ly.py:1382 convert-ly.py:94 etf2ly.py:1206 lilypond-book.py:212
+#: midi2ly.py:896 musicxml2ly.py:2683 main.cc:168
 msgid "show version number and exit"
-msgstr ""
+msgstr "mostra il numero di versione ed esce"
 
-#: abc2ly.py:1354 convert-ly.py:82 etf2ly.py:1186 lilypond-book.py:125
-#: midi2ly.py:864 musicxml2ly.py:1808 main.cc:150
+#: abc2ly.py:1386 convert-ly.py:98 etf2ly.py:1202 lilypond-book.py:140
+#: midi2ly.py:875 musicxml2ly.py:2665 main.cc:157
 msgid "show this help and exit"
-msgstr ""
+msgstr "mostra questo messaggio di aiuto ed esce"
 
-#: abc2ly.py:1356 etf2ly.py:1191 midi2ly.py:868
+#: abc2ly.py:1388 etf2ly.py:1207 midi2ly.py:879
 msgid "write output to FILE"
-msgstr ""
+msgstr "scrive l'output in FILE"
 
-#: abc2ly.py:1358
-msgid "be strict about succes"
-msgstr ""
+#: abc2ly.py:1390
+msgid "be strict about success"
+msgstr "è severo rispetto all'esito"
 
-#: abc2ly.py:1360
+#: abc2ly.py:1392
 msgid "preserve ABC's notion of beams"
-msgstr ""
-
-#: abc2ly.py:1361 convert-ly.py:111 etf2ly.py:1198 lilypond-book.py:180
-#: midi2ly.py:897 musicxml2ly.py:1872
-msgid "Bugs"
-msgstr ""
-
-#: abc2ly.py:1362 convert-ly.py:112 etf2ly.py:1199 lilypond-book.py:181
-#: midi2ly.py:898 musicxml2ly.py:1873
-msgid "Report bugs via"
-msgstr ""
+msgstr "preserva la nozione di travatura di ABC"
+
+#. Translators, please translate this string as
+#. "Report bugs in English via %s",
+#. or if there is a LilyPond users list or forum in your language
+#. "Report bugs in English via %s or in YOUR_LANG via URI"
+#: abc2ly.py:1395 convert-ly.py:144 etf2ly.py:1216 lilypond-book.py:234
+#: midi2ly.py:909 musicxml2ly.py:2751 main.cc:281
+#, c-format, python-format
+msgid "Report bugs via %s"
+msgstr "Segnalare i bug in inglese attraverso %s"
 
-#: convert-ly.py:32
+#: convert-ly.py:44
 msgid ""
 "Update LilyPond input to newer version.  By default, update from the\n"
 "version taken from the \\version command, to the current LilyPond version."
 msgstr ""
+"Aggiorna l'input LilyPond a una nuova versione.  Per impostazione predefinita aggiorna dalla\n"
+"versione presa dal comando \\version alla versione attuale di LilyPond."
 
-#: convert-ly.py:34 lilypond-book.py:59
+#: convert-ly.py:46 lilypond-book.py:82
 msgid "Examples:"
-msgstr ""
+msgstr "Esempi:"
 
-#: convert-ly.py:66 etf2ly.py:1174 lilypond-book.py:105 midi2ly.py:79
+#: convert-ly.py:81 etf2ly.py:1189 lilypond-book.py:116 midi2ly.py:90
+#, python-format
+msgid "Copyright (c) %s by"
+msgstr "Copyright (c) %s di"
+
+#: convert-ly.py:83 etf2ly.py:1191 lilypond-book.py:118 midi2ly.py:92
 msgid "Distributed under terms of the GNU General Public License."
-msgstr ""
+msgstr "Distribuito secondo i termini della GNU General Public License."
 
-#: convert-ly.py:67 etf2ly.py:1175 lilypond-book.py:106 midi2ly.py:80
+#: convert-ly.py:84 etf2ly.py:1192 lilypond-book.py:119 midi2ly.py:93
 msgid "It comes with NO WARRANTY."
-msgstr ""
+msgstr "È distribuito con NESSUNA GARANZIA."
 
-#: convert-ly.py:86 convert-ly.py:106
+#: convert-ly.py:102 convert-ly.py:135
 msgid "VERSION"
-msgstr ""
+msgstr "VERSIONE"
 
-#: convert-ly.py:88
+#: convert-ly.py:104
 msgid "start from VERSION [default: \\version found in file]"
-msgstr ""
+msgstr "parte dalla VERSIONE [predefinito: \\version del file]"
 
-#: convert-ly.py:91
+#: convert-ly.py:107
 msgid "edit in place"
-msgstr ""
+msgstr "modifica il file di input"
 
-#: convert-ly.py:94
+#: convert-ly.py:111
 msgid "do not add \\version command if missing"
-msgstr ""
+msgstr "non aggiunge il comando \\version se non è presente"
 
-#: convert-ly.py:100
-msgid "show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
-msgstr ""
+#: convert-ly.py:117
+#, python-format
+msgid "force updating \\version number to %s"
+msgstr "forza l'aggiornamento del numero di \\version a %s"
 
-#: convert-ly.py:105
-msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
-msgstr ""
+#: convert-ly.py:123
+msgid "only update \\version number if file is modified"
+msgstr "aggiorna il numero di \\version solo se il file è modificato"
 
-#: convert-ly.py:153
+#: convert-ly.py:129
+#, python-format
+msgid "show rules [default: -f 0, -t %s]"
+msgstr "mostra le regole [predefinito: -f 0, -t %s]"
+
+#: convert-ly.py:134
+#, python-format
+msgid "convert to VERSION [default: %s]"
+msgstr "converte a VERSIONE [predefinito: %s]"
+
+#: convert-ly.py:139 etf2ly.py:1210 lilypond-book.py:215 midi2ly.py:897
+#: main.cc:170
+msgid "show warranty and copyright"
+msgstr "mostra la garanzia e il copyright"
+
+#: convert-ly.py:184
 msgid "Applying conversion: "
-msgstr ""
+msgstr "Conversione in corso: "
 
-#: convert-ly.py:166
+#: convert-ly.py:197
 msgid "Error while converting"
-msgstr ""
+msgstr "Errore durante la conversione"
 
-#: convert-ly.py:168
-msgid "Stopping at last succesful rule"
-msgstr ""
+#: convert-ly.py:199
+msgid "Stopping at last successful rule"
+msgstr "Fermarsi all'ultima regola riuscita"
 
-#: convert-ly.py:190
-#, fuzzy, python-format
+#: convert-ly.py:224
+#, python-format
 msgid "Processing `%s'... "
-msgstr "Elaboro..."
+msgstr "Elaborazione di «%s»... "
 
-#: convert-ly.py:277 relocate.cc:362 source-file.cc:54
-#, c-format, python-format
-msgid "cannot open file: `%s'"
-msgstr "non posso aprire il file: `%s'"
+#: convert-ly.py:332
+#, python-format
+msgid "%s: Unable to open file"
+msgstr "%s: Impossibile aprire il file"
+
+#: convert-ly.py:339
+#, python-format
+msgid "%s: Unable to determine version.  Skipping"
+msgstr "%s: Impossibile determinare la versione. Tralasciato"
 
-#: convert-ly.py:284
-#, fuzzy, python-format
-msgid "cannot determine version for `%s'.  Skipping"
-msgstr "non trovo il file: `%s'"
+#: convert-ly.py:344
+#, python-format
+msgid ""
+"%s: Invalid version string `%s' \n"
+"Valid version strings consist of three numbers, separated by dots, e.g. `2.8.12'"
+msgstr ""
+"%s: Stringa di versione non valida `%s' \n"
+"Le stringhe di versione valide sono composte da tre numeri separati da punti, ad esempio «2.8.12»"
 
-#: etf2ly.py:1180
-#, fuzzy, python-format
+#: etf2ly.py:1195
+#, python-format
 msgid "%s [OPTION]... ETF-FILE"
-msgstr "Uso: %s [OPZIONE]... [FILE]"
+msgstr "%s [OPZIONE]... FILE-ETF"
 
-#: etf2ly.py:1181
+#: etf2ly.py:1196
 msgid ""
 "Enigma Transport Format is a format used by Coda Music Technology's\n"
-"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond file."
+"Finale product.  etf2ly converts a subset of ETF to a ready-to-use LilyPond file.\n"
 msgstr ""
+"Enigma Transport Format è un formato usato dal prodotto Finale di Coda Music Technology.\n"
+"etf2ly converte un sottoinsieme di ETF in un file LilyPond pronto da usare.\n"
 
-#: etf2ly.py:1192 midi2ly.py:869 musicxml2ly.py:1866 main.cc:154 main.cc:159
+#: etf2ly.py:1208 midi2ly.py:880 musicxml2ly.py:2743 main.cc:161 main.cc:166
 msgid "FILE"
-msgstr ""
+msgstr "FILE"
 
-#: etf2ly.py:1194 lilypond-book.py:178 midi2ly.py:886 main.cc:163
-#, fuzzy
-msgid "show warranty and copyright"
-msgstr "  -w, --warranty         mostra la garanzia e il copyright\n"
-
-#: lilypond-book.py:57
+#: lilypond-book.py:80
 msgid "Process LilyPond snippets in hybrid HTML, LaTeX, texinfo or DocBook document."
-msgstr ""
+msgstr "Elaborare i frammenti di codice LilyPond in un documento HTML ibrido, LaTeX, texinfo o DocBook."
 
-#: lilypond-book.py:64
+#: lilypond-book.py:87
 msgid "BOOK"
-msgstr ""
+msgstr "LIBRO"
 
-#: lilypond-book.py:72
-#, fuzzy, python-format
-msgid "Exiting (%d)..."
-msgstr "Genero le voci..."
-
-#: lilypond-book.py:103
+#: lilypond-book.py:95
 #, python-format
-msgid "Copyright (c) %s by"
-msgstr "Copyright (c) %s di"
+msgid "Exiting (%d)..."
+msgstr "Uscita (%d)..."
 
-#: lilypond-book.py:113
+#: lilypond-book.py:127
 msgid "FILTER"
-msgstr ""
+msgstr "FILTRO"
 
-#: lilypond-book.py:116
-msgid "pipe snippets through FILTER [convert-ly -n -]"
-msgstr ""
+#: lilypond-book.py:130
+msgid "pipe snippets through FILTER [default: `convert-ly -n -']"
+msgstr "redirige i frammenti di codice attraverso FILTRO [predefinito: `convert-ly -n -']"
 
-#: lilypond-book.py:120
+#: lilypond-book.py:134
 msgid "use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
-msgstr ""
+msgstr "usa il formato di output FORMATO (texi [predefinito], texi-html, latex, html, docbook)"
 
-#: lilypond-book.py:127
-#, fuzzy
+#: lilypond-book.py:135
+msgid "FORMAT"
+msgstr "FORMATO"
+
+#: lilypond-book.py:142
 msgid "add DIR to include path"
-msgstr "  -I, --include=DIR      aggiunge DIR ai path di ricerca\n"
+msgstr "aggiunge DIR al percorso di inclusione"
 
-#: lilypond-book.py:128 lilypond-book.py:135 lilypond-book.py:147 main.cc:153
+#: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:163
+#: lilypond-book.py:173 lilypond-book.py:189 lilypond-book.py:195 main.cc:160
 msgid "DIR"
-msgstr ""
+msgstr "DIR"
 
-#: lilypond-book.py:133
+#: lilypond-book.py:148
 msgid "format Texinfo output so that Info will look for images of music in DIR"
-msgstr ""
+msgstr "formatta l'output di Texinfo in modo che Info cerchi le immagini in DIR"
 
-#: lilypond-book.py:140
+#: lilypond-book.py:155
 msgid "PAD"
-msgstr ""
+msgstr "PAD"
 
-#: lilypond-book.py:142
+#: lilypond-book.py:157
 msgid "pad left side of music to align music inspite of uneven bar numbers (in mm)"
-msgstr ""
+msgstr "aumenta il lato sinistro della musica (in mm) per allinearla nonostante il numero irregolare di battute"
 
-#: lilypond-book.py:146
-msgid "write output to DIR"
+#: lilypond-book.py:162
+msgid "write lily-XXX files to DIR, link into --output dir"
 msgstr ""
+"scrive i file lily-XXX in DIR e crea un collegamento verso\n"
+"la directory specificata con --output"
 
-#: lilypond-book.py:151
-msgid "COMMAND"
-msgstr ""
+#: lilypond-book.py:167
+msgid "Load the additional python PACKAGE (containing e.g. a custom output format)"
+msgstr "Carica il PACCHETTO python supplementare (contenente ad esempio un formato di output personalizzato)"
 
-#: lilypond-book.py:152
-msgid "process ly_files using COMMAND FILE..."
-msgstr ""
+#: lilypond-book.py:168
+msgid "PACKAGE"
+msgstr "PACCHETTO"
 
-#: lilypond-book.py:159
-msgid "create PDF files for use with PDFTeX"
-msgstr ""
-
-#: lilypond-book.py:163
-msgid ""
-"extract all PostScript fonts into INPUT.psfonts for LaTeX\n"
-"must use this with dvips -h INPUT.psfonts"
-msgstr ""
-
-#: lilypond-book.py:167 midi2ly.py:879 musicxml2ly.py:1829 main.cc:162
-msgid "be verbose"
-msgstr ""
+#: lilypond-book.py:172
+msgid "write output to DIR"
+msgstr "scrive l'output in DIR"
 
-#: lilypond-book.py:788
-#, python-format
-msgid "file not found: %s"
-msgstr ""
+#: lilypond-book.py:177
+msgid "COMMAND"
+msgstr "COMANDO"
 
-#: lilypond-book.py:1022
-#, python-format
-msgid "deprecated ly-option used: %s=%s"
-msgstr ""
+#: lilypond-book.py:178
+msgid "process ly_files using COMMAND FILE..."
+msgstr "elabora ly_files con COMANDO FILE..."
 
-#: lilypond-book.py:1025
-#, python-format
-msgid "compatibility mode translation: %s=%s"
-msgstr ""
+#: lilypond-book.py:182
+msgid "Compile snippets in safe mode"
+msgstr "Compila i frammenti di codice in modalità sicura"
 
-#: lilypond-book.py:1029
-#, python-format
-msgid "deprecated ly-option used: %s"
-msgstr ""
+#: lilypond-book.py:188
+msgid "do not fail if no lilypond output is found"
+msgstr "non si interrompe se non si trova alcun output di lilypond"
 
-#: lilypond-book.py:1032
-#, python-format
-msgid "compatibility mode translation: %s"
-msgstr ""
+#: lilypond-book.py:194
+msgid "do not fail if no PNG images are found for EPS files"
+msgstr "non si interrompe se non si trovano immagini PNG per i file EPS"
 
-#: lilypond-book.py:1051
-#, python-format
-msgid "ignoring unknown ly option: %s"
-msgstr ""
+#: lilypond-book.py:200
+msgid "write snippet output files with the same base name as their source file"
+msgstr "scrive i file di output dei frammenti di codice con lo stesso nome di base dei file sorgenti"
 
-#: lilypond-book.py:1422
-#, fuzzy, python-format
-msgid "Opening filter `%s'"
-msgstr "Genero le voci..."
+#: lilypond-book.py:204 midi2ly.py:890 musicxml2ly.py:2688 main.cc:169
+msgid "be verbose"
+msgstr "passa in modalità prolissa"
 
-#: lilypond-book.py:1439
-#, python-format
-msgid "`%s' failed (%d)"
+#: lilypond-book.py:220
+msgid ""
+"run executable PROG instead of latex, or in\n"
+"case --pdf option is set instead of pdflatex"
 msgstr ""
+"eseguire il PROGRAMMA eseguibile invece di latex, o nel caso in\n"
+"cui viene impostata l'opzione --pdf invece di usare pdflatex"
 
-#: lilypond-book.py:1440
-msgid "The error log is as follows:"
-msgstr ""
+#: lilypond-book.py:222
+msgid "PROG"
+msgstr "PROGRAMMA"
 
-#: lilypond-book.py:1512
-msgid "cannot find \\begin{document} in LaTeX document"
-msgstr ""
+#: lilypond-book.py:228
+msgid "create PDF files for use with PDFTeX"
+msgstr "creare file PDF per l'utilizzo con PDFTeX"
 
-#: lilypond-book.py:1623
-#, fuzzy
+#: lilypond-book.py:419
 msgid "Writing snippets..."
-msgstr "Genero le voci..."
+msgstr "Scrittura dei frammenti di codice..."
 
-#: lilypond-book.py:1628
-#, fuzzy
+#: lilypond-book.py:425
 msgid "Processing..."
-msgstr "Elaboro..."
+msgstr "In elaborazione..."
 
-#: lilypond-book.py:1632
+#: lilypond-book.py:431
 msgid "All snippets are up to date..."
-msgstr ""
+msgstr "Tutti i frammenti di codice sono aggiornati..."
 
-#: lilypond-book.py:1642
-#, fuzzy, python-format
+#: lilypond-book.py:452
+#, python-format
 msgid "cannot determine format for: %s"
-msgstr "non trovo il file: `%s'"
+msgstr "impossibile determinare il formato per: %s"
 
-#: lilypond-book.py:1653
+#: lilypond-book.py:461
 #, python-format
 msgid "%s is up to date."
-msgstr ""
+msgstr "%s è aggiornato."
 
-#: lilypond-book.py:1659
-#, fuzzy, python-format
+#: lilypond-book.py:475
+#, python-format
 msgid "Writing `%s'..."
-msgstr "Genero le voci..."
+msgstr "Scrittura di «%s»..."
 
-#: lilypond-book.py:1714
+#: lilypond-book.py:537
 msgid "Output would overwrite input file; use --output."
-msgstr ""
+msgstr "L'output sovrascriverebbe il file di input; usare --output."
 
-#: lilypond-book.py:1718
-#, fuzzy, python-format
+#: lilypond-book.py:541
+#, python-format
 msgid "Reading %s..."
-msgstr "Genero le voci..."
+msgstr "Lettura di %s..."
 
-#: lilypond-book.py:1737
-#, fuzzy
+#: lilypond-book.py:549
 msgid "Dissecting..."
-msgstr "Genero le voci..."
+msgstr "Dissezione di..."
 
-#: lilypond-book.py:1753
-#, fuzzy, python-format
+#: lilypond-book.py:561
+#, python-format
 msgid "Compiling %s..."
-msgstr "Genero le voci..."
+msgstr "Compilazione di %s"
 
-#: lilypond-book.py:1762
-#, fuzzy, python-format
+#: lilypond-book.py:570
+#, python-format
 msgid "Processing include: %s"
-msgstr "Elaboro..."
+msgstr "Elaborazione di include: %s"
 
-#: lilypond-book.py:1776
-#, fuzzy, python-format
+#: lilypond-book.py:582
+#, python-format
 msgid "Removing `%s'"
-msgstr "Genero le voci..."
-
-#: lilypond-book.py:1809
-msgid "option --psfonts not used"
-msgstr ""
-
-#: lilypond-book.py:1810
-msgid "processing with dvips will have no fonts"
-msgstr ""
+msgstr "Eliminazione di «%s»"
 
-#: lilypond-book.py:1813
-msgid "DVIPS usage:"
-msgstr ""
-
-#: lilypond-book.py:1869
-#, fuzzy, python-format
-msgid "Writing fonts to %s..."
-msgstr "non trovo e non posso creare `%s'"
-
-#: midi2ly.py:87 lily-library.scm:615 lily-library.scm:624
+#: midi2ly.py:99
 msgid "warning: "
 msgstr "attenzione: "
 
-#: midi2ly.py:90 midi2ly.py:911
+#: midi2ly.py:102 midi2ly.py:922
 msgid "error: "
 msgstr "errore: "
 
-#: midi2ly.py:91
-#, fuzzy
+#: midi2ly.py:103
 msgid "Exiting... "
-msgstr "Genero le voci..."
+msgstr "Uscita... "
 
-#: midi2ly.py:837
-#, fuzzy, python-format
+#: midi2ly.py:848
+#, python-format
 msgid "%s output to `%s'..."
-msgstr "L'output MIDI è inviato a %s..."
+msgstr "%s output inviato a «%s»..."
 
-#: midi2ly.py:850 musicxml2ly.py:1803
+#: midi2ly.py:861
 #, python-format
-msgid "Convert %s to LilyPond input."
-msgstr ""
+msgid "Convert %s to LilyPond input.\n"
+msgstr "Converte %s in input LilyPond.\n"
 
-#: midi2ly.py:855
+#: midi2ly.py:866
 msgid "print absolute pitches"
-msgstr ""
+msgstr "stampa altezze assolute"
 
-#: midi2ly.py:857 midi2ly.py:872
+#: midi2ly.py:868 midi2ly.py:883
 msgid "DUR"
-msgstr ""
+msgstr "DURATA"
 
-#: midi2ly.py:858
+#: midi2ly.py:869
 msgid "quantise note durations on DUR"
-msgstr ""
+msgstr "quantificare la durata delle note in DURATA"
 
-#: midi2ly.py:861
+#: midi2ly.py:872
 msgid "print explicit durations"
-msgstr ""
+msgstr "stampa durate esplicite"
 
-#: midi2ly.py:865
-#, fuzzy
+#: midi2ly.py:876
 msgid "set key: ALT=+sharps|-flats; MINOR=1"
-msgstr " -k, --key=ACC[:MINOR]  imposta l'armatura: ACC +diesis/-bemolli; :1 minore\n"
+msgstr "imposta la tonalità: ALTERAZIONE=+diesis|-bemolle; MINORE=1"
 
-#: midi2ly.py:866
+#: midi2ly.py:877
 msgid "ALT[:MINOR]"
-msgstr ""
+msgstr "ALTERAZIONE[:MINORE]"
 
-#: midi2ly.py:871
+#: midi2ly.py:882
 msgid "quantise note starts on DUR"
-msgstr ""
+msgstr "quantifica l'inizio di una nota in DURATA"
 
-#: midi2ly.py:874
+#: midi2ly.py:885
 msgid "DUR*NUM/DEN"
-msgstr ""
+msgstr "DURATA*NUMERATORE/DENOMINATORE"
 
-#: midi2ly.py:877
+#: midi2ly.py:888
 msgid "allow tuplet durations DUR*NUM/DEN"
-msgstr ""
+msgstr "consente le durate DURATA*NUMERATORE/DENOMINATORE nei gruppi irregolari"
 
-#: midi2ly.py:889
+#: midi2ly.py:900
 msgid "treat every text as a lyric"
-msgstr ""
+msgstr "tratta ogni testo come il testo di una canzone"
 
-#: midi2ly.py:892
+#: midi2ly.py:903
 msgid "Examples"
-msgstr ""
+msgstr "Esempi"
 
-#: midi2ly.py:912
+#: midi2ly.py:923
 msgid "no files specified on command line."
-msgstr ""
+msgstr "nessun file specificato nella riga di comando."
 
-#: musicxml2ly.py:193 musicxml2ly.py:195
+#: musicxml2ly.py:324
+#, python-format
+msgid "Encountered file created by %s, containing wrong beaming information. All beaming information in the MusicXML file will be ignored"
+msgstr "Si è trovato un file creato da %s che contiene informazioni sbagliate sulla disposizione delle travature. Tutte le informazioni sulle travature presenti nel file MusicXML verranno ignorate"
+
+#: musicxml2ly.py:340 musicxml2ly.py:342
 #, python-format
 msgid "Unprocessed PartGroupInfo %s encountered"
-msgstr ""
+msgstr "PartGroupInfo %s rilevato ma non elaborato"
 
-#: musicxml2ly.py:426
+#: musicxml2ly.py:595
+#, python-format
+msgid "Encountered note at %s without type and duration (=%s)"
+msgstr "Trovata una nota in %s senza tipo e durata (=%s)"
+
+#: musicxml2ly.py:615
 #, python-format
 msgid "Encountered rational duration with denominator %s, unable to convert to lilypond duration"
-msgstr ""
+msgstr "Trovata una durata razionale con denominatore %s, impossibile convertire in una durata di lilypond"
+
+#: musicxml2ly.py:864
+msgid "Unable to extract key signature!"
+msgstr "Impossibile estrarre l'armatura di chiave!"
 
-#: musicxml2ly.py:609
+#: musicxml2ly.py:891
 #, python-format
-msgid "unknown mode %s, expecting 'major' or 'minor'"
-msgstr ""
+msgid "unknown mode %s, expecting 'major' or 'minor' or a church mode!"
+msgstr "modo %s sconosciuto, è richiesto \"major\" o \"minor\" o un modo ecclesiastico!"
 
-#: musicxml2ly.py:647
+#: musicxml2ly.py:1029
 #, python-format
 msgid "Encountered unprocessed marker %s\n"
-msgstr ""
+msgstr "Trovato un marcatore non elaborato %s\n"
 
-#: musicxml2ly.py:741
-#, fuzzy, python-format
+#: musicxml2ly.py:1123
+#, python-format
 msgid "unknown span event %s"
-msgstr "tipo di chiave sconosciuto"
+msgstr "evento di estensione %s sconosciuto"
 
-#: musicxml2ly.py:751
-#, fuzzy, python-format
+#: musicxml2ly.py:1133
+#, python-format
 msgid "unknown span type %s for %s"
-msgstr "traduttore sconosciuto `%s'"
+msgstr "tipo di estensione %s sconosciuto per %s"
+
+#: musicxml2ly.py:1553
+msgid "Unknown metronome mark, ignoring"
+msgstr "Indicazione metronomica sconosciuta, si ignora"
+
+#. TODO: Implement the other (more complex) way for tempo marks!
+#: musicxml2ly.py:1558
+msgid "Metronome marks with complex relations (<metronome-note> in MusicXML) are not yet implemented."
+msgstr "Indicazioni metronomiche con relazioni complesse (<metronome-note> in MusicXML) non sono ancora implementate."
 
-#: musicxml2ly.py:1259
+#: musicxml2ly.py:1760
+#, python-format
+msgid "Unable to convert chord type %s to lilypond."
+msgstr "Impossibile convertire l'accordo di tipo %s in un'espressione di lilypond."
+
+#: musicxml2ly.py:1909
 #, python-format
 msgid "drum %s type unknown, please add to instrument_drumtype_dict"
-msgstr ""
+msgstr "tipo di percussione %s sconosciuto, si prega di aggiungerlo a instrument_drumtype_dict"
 
-#: musicxml2ly.py:1263
-#, fuzzy
+#: musicxml2ly.py:1913
 msgid "cannot find suitable event"
-msgstr "non trovo il file: `%s'"
+msgstr "impossibile trovare un evento adatto"
 
-#: musicxml2ly.py:1346
+#: musicxml2ly.py:2061
 #, python-format
-msgid "Negative skip %s"
-msgstr ""
+msgid "Negative skip %s (from position %s to %s)"
+msgstr "Salto negativo %s (dalla posizione %s a %s)"
 
-#: musicxml2ly.py:1480
+#: musicxml2ly.py:2202
 #, python-format
 msgid "Negative skip found: from %s to %s, difference is %s"
-msgstr ""
+msgstr "Trovato un salto negativo: da %s a %s, la differenza è %s"
 
-#: musicxml2ly.py:1505
-#, fuzzy, python-format
+#: musicxml2ly.py:2283
+#, python-format
 msgid "unexpected %s; expected %s or %s or %s"
-msgstr "Errore non fatale: "
+msgstr "%s inaspettato; previsto %s o %s o %s"
 
-#: musicxml2ly.py:1583
-msgid "cannot have two simultaneous slurs"
-msgstr ""
+#: musicxml2ly.py:2389
+msgid "Encountered closing slur, but no slur is open"
+msgstr "Trovata la chiusura di una legatura di portamento, ma non ne è stata aperta alcuna"
+
+#: musicxml2ly.py:2392
+msgid "Cannot have two simultaneous (closing) slurs"
+msgstr "Due legature di portamento non possono chiudersi simultaneamente"
+
+#: musicxml2ly.py:2401
+msgid "Cannot have a slur inside another slur"
+msgstr "Due legature di portamento non possono sovrapporsi"
 
-#: musicxml2ly.py:1711
+#: musicxml2ly.py:2404
+msgid "Cannot have two simultaneous slurs"
+msgstr "Due legature di portamento non possono intervenire simultaneamente"
+
+#: musicxml2ly.py:2538
 #, python-format
 msgid "cannot simultaneously have more than one mode: %s"
-msgstr ""
+msgstr "non si può avere simultaneamente più di un modo: %s"
 
-#: musicxml2ly.py:1791
-#, fuzzy
+#: musicxml2ly.py:2646
 msgid "Converting to LilyPond expressions..."
-msgstr "Genero le voci..."
+msgstr "Conversione nelle espressioni di LilyPond..."
+
+#: musicxml2ly.py:2657
+msgid "musicxml2ly [OPTION]... FILE.xml"
+msgstr "musicxml2ly [OPZIONE]... FILE.xml"
 
-#: musicxml2ly.py:1802
-msgid "musicxml2ly [options] FILE.xml"
+#: musicxml2ly.py:2659
+msgid ""
+"Convert MusicXML from FILE.xml to LilyPond input.\n"
+"If the given filename is -, musicxml2ly reads from the command line.\n"
 msgstr ""
+"Converte FILE.xml (MusicXML) in input di LilyPond.\n"
+"Se il nome del file è -, musicxml2ly legge dalla riga di comando.\n"
 
-#: musicxml2ly.py:1812
-#, python-format
+#: musicxml2ly.py:2669
 msgid ""
-"This program is free software.  It is covered by the GNU General Public\n"
-"License and you are welcome to change it and/or distribute copies of it\n"
-"under certain conditions.  Invoke as `%s --warranty' for more\n"
-"information."
+"Copyright (c) 2005--2011 by\n"
+"    Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
+"    Jan Nieuwenhuizen <janneke@gnu.org> and\n"
+"    Reinhold Kainhofer <reinhold@kainhofer.com>\n"
 msgstr ""
+"Copyright (c) 2005--2011 di\n"
+"    Han-Wen Nienhuys <hanwen@xs4all.nl>,\n"
+"    Jan Nieuwenhuizen <janneke@gnu.org> e\n"
+"    Reinhold Kainhofer <reinhold@kainhofer.com>\n"
 
-#: musicxml2ly.py:1835
+#: musicxml2ly.py:2694
 msgid "use lxml.etree; uses less memory and cpu time"
-msgstr ""
+msgstr "usa lxml.etree per limitare il consumo di memoria e i tempi del processore"
 
-#: musicxml2ly.py:1841
+#: musicxml2ly.py:2700
 msgid "input file is a zip-compressed MusicXML file"
-msgstr ""
+msgstr "il file di input è un file MusicXML compresso in ZIP"
 
-#: musicxml2ly.py:1847
+#: musicxml2ly.py:2706
 msgid "convert pitches in relative mode (default)"
-msgstr ""
+msgstr "converte le altezze in modo relativo (predefinito)"
 
-#: musicxml2ly.py:1852
+#: musicxml2ly.py:2711
 msgid "convert pitches in absolute mode"
-msgstr ""
+msgstr "converte le altezze in modo assoluto"
 
-#: musicxml2ly.py:1855
+#: musicxml2ly.py:2714
 msgid "LANG"
-msgstr ""
+msgstr "LINGUA"
 
-#: musicxml2ly.py:1857
-msgid "use a different language file 'LANG.ly' and corresponding pitch names, e.g. 'deutsch' for deutsch.ly"
-msgstr ""
+#: musicxml2ly.py:2716
+msgid "use LANG for pitch names, e.g. 'deutsch' for note names in German"
+msgstr "usa LINGUA per i nomi delle altezze, ad esempio 'deutsch' per i nomi delle note in tedesco"
 
-#: musicxml2ly.py:1863
+#: musicxml2ly.py:2722
 msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc."
-msgstr ""
+msgstr "non converte le direzioni (^, _ o -) per articolazioni, dinamiche, etc."
 
-#: musicxml2ly.py:1871
-msgid "set output filename to FILE"
-msgstr ""
+#: musicxml2ly.py:2728
+msgid "do not convert exact vertical positions of rests"
+msgstr "non converte le esatte posizioni verticali delle pause"
+
+#: musicxml2ly.py:2734
+msgid "do not convert the exact page layout and breaks"
+msgstr "non converte l'esatta formattazione di pagina e gli a capo"
+
+#: musicxml2ly.py:2740
+msgid "do not convert beaming information, use lilypond's automatic beaming instead"
+msgstr "non converte le informazioni relative alle travature, usare invece la disposizione automatica delle travature di lilypond"
+
+#: musicxml2ly.py:2748
+msgid "set output filename to FILE, stdout if -"
+msgstr "imposta il nome del file di output su FILE (stdout se -)"
 
-#: musicxml2ly.py:1929
-#, fuzzy, python-format
+#: musicxml2ly.py:2831
+#, python-format
 msgid "unknown part in part-list: %s"
-msgstr "traduttore sconosciuto `%s'"
+msgstr "parte sconosciuta in part-list: %s"
+
+#: musicxml2ly.py:2893
+msgid "Input is compressed, extracting raw MusicXML data from stdin"
+msgstr "L'input è compresso. Estrazione dei dati MusicXML da stdin"
 
-#: musicxml2ly.py:1985
+#: musicxml2ly.py:2896
 #, python-format
 msgid "Input file %s is compressed, extracting raw MusicXML data"
-msgstr ""
+msgstr "Il file di input %s è compresso. Estrazione dei dati MusicXML"
+
+#: musicxml2ly.py:2926
+msgid "Reading MusicXML from Standard input ..."
+msgstr "Lettura di MusicXML da Standard input ..."
 
-#: musicxml2ly.py:2011
-#, fuzzy, python-format
+#: musicxml2ly.py:2928
+#, python-format
 msgid "Reading MusicXML from %s ..."
-msgstr "Genero le voci..."
+msgstr "Lettura di MusicXML da %s ..."
 
-#: musicxml2ly.py:2039 musicxml2ly.py:2053
-#, fuzzy, python-format
+#: musicxml2ly.py:2961
+#, python-format
 msgid "Output to `%s'"
-msgstr "L'output MIDI è inviato a %s..."
+msgstr "Output inviato a «%s»"
 
-#: musicxml2ly.py:2096
-#, fuzzy, python-format
+#: musicxml2ly.py:3028
+#, python-format
 msgid "Unable to find input file %s"
-msgstr "non trovo il file: `%s'"
+msgstr "Impossibile trovare il file di input %s"
+
+#: website_post.py:115
+msgid "English"
+msgstr "Inglese"
 
-#: getopt-long.cc:140
+#: website_post.py:118
+msgid "Other languages"
+msgstr "Altre lingue"
+
+#: getopt-long.cc:153
 #, c-format
 msgid "option `%s' requires an argument"
-msgstr "l'opzione `%s' richiede un argomento"
+msgstr "l'opzione «%s» richiede un argomento"
 
-#: getopt-long.cc:144
-#, fuzzy, c-format
+#: getopt-long.cc:157
+#, c-format
 msgid "option `%s' does not allow an argument"
-msgstr "opzione `%s' non accetta argomenti"
+msgstr "l'opzione «%s» non accetta argomenti"
 
-#: getopt-long.cc:148
+#: getopt-long.cc:161
 #, c-format
 msgid "unrecognized option: `%s'"
-msgstr "opzione non riconosciuta: `%s'"
+msgstr "opzione non riconosciuta: «%s»"
 
-#: getopt-long.cc:154
+#: getopt-long.cc:167
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
-msgstr "argomento `%s' non valido per l'opzione `%s'"
+msgstr "argomento «%s» non valido per l'opzione «%s»"
+
+#: warn.cc:59
+#, c-format
+msgid "success: %s"
+msgstr "riuscito: %s"
 
-#: warn.cc:68 grob.cc:566 input.cc:82
+#: warn.cc:86 grob.cc:617 input.cc:97
 #, c-format
 msgid "programming error: %s"
-msgstr ""
+msgstr "errore di programmazione: %s"
 
-#: warn.cc:69 input.cc:83
+#: warn.cc:87 input.cc:98
 msgid "continuing, cross fingers"
-msgstr ""
+msgstr "continua, incrociare le dita"
 
-#: accidental-engraver.cc:250
+#: accidental-engraver.cc:180
 #, c-format
 msgid "accidental typesetting list must begin with context-name: %s"
-msgstr ""
-
-#: accidental-engraver.cc:277
-#, fuzzy, c-format
-msgid "ignoring unknown accidental rule: %s"
-msgstr "stringa di escape sconosciuta: `\\%s'"
+msgstr "la lista tipografica delle alterazioni deve iniziare con context-name: %s"
 
-#: accidental-engraver.cc:293
+#: accidental-engraver.cc:210
 #, c-format
-msgid "pair or context-name expected for accidental rule, found %s"
-msgstr ""
+msgid "procedure or context-name expected for accidental rule, found %s"
+msgstr "si aspettava una procedura o un nome di contesto per la regola di alterazione accidentale, si è trovato %s"
 
-#: accidental.cc:187
+#: accidental.cc:200
 #, c-format
 msgid "Could not find glyph-name for alteration %s"
-msgstr ""
+msgstr "Non si è trovato il nome del glifo per l'alterazione %s"
 
-#: accidental.cc:202
+#: accidental.cc:215
 msgid "natural alteration glyph not found"
-msgstr ""
-
-#: align-interface.cc:325
-msgid "tried to get a translation for something that is no child of mine"
-msgstr ""
+msgstr "alterazione naturale del glifo non trovata"
 
-#: all-font-metrics.cc:143
-#, fuzzy, c-format
+#: all-font-metrics.cc:156
+#, c-format
 msgid "cannot find font: `%s'"
-msgstr "non trovo il file: `%s'"
+msgstr "impossibile trovare il tipo di carattere: «%s»"
 
-#: apply-context-iterator.cc:31
+#: apply-context-iterator.cc:42
 msgid "\\applycontext argument is not a procedure"
-msgstr ""
+msgstr "l'argomento di \\applycontext non è una procedura"
 
-#: auto-change-iterator.cc:63 change-iterator.cc:61
-#, fuzzy, c-format
+#: auto-change-iterator.cc:74 change-iterator.cc:72
+#, c-format
 msgid "cannot change, already in translator: %s"
-msgstr "non posso cambiare `%s' in `%s'"
+msgstr "impossibile cambiare, già nel traduttore: %s"
 
-#: axis-group-engraver.cc:78
+#: axis-group-engraver.cc:94
 msgid "Axis_group_engraver: vertical group already has a parent"
-msgstr ""
+msgstr "Axis_group_engraver: il gruppo verticale ha già un genitore"
 
-#: axis-group-engraver.cc:79
+#: axis-group-engraver.cc:95
 msgid "are there two Axis_group_engravers?"
-msgstr ""
+msgstr "ci sono due Axis_group_engravers?"
 
-#: axis-group-engraver.cc:80
+#: axis-group-engraver.cc:96
 msgid "removing this vertical group"
-msgstr ""
+msgstr "eliminazione di questo gruppo verticale"
 
-#: axis-group-interface.cc:524
+#: axis-group-interface.cc:611
 msgid "an outside-staff object should have a direction, defaulting to up"
-msgstr ""
+msgstr "un oggetto esterno al rigo dovrebbe avere una direzione, si imposta in su come da impostazione predefinita"
 
-#: bar-check-iterator.cc:73
-#, fuzzy, c-format
+#: bar-check-iterator.cc:84
+#, c-format
 msgid "barcheck failed at: %s"
-msgstr "controllo del battute fallito: %s"
+msgstr "controllo di battuta fallito a: %s"
 
-#: beam-engraver.cc:126
+#: beam-engraver.cc:147
 msgid "already have a beam"
-msgstr ""
+msgstr "travatura già presente"
 
-#: beam-engraver.cc:202
-#, fuzzy
+#: beam-engraver.cc:230
 msgid "unterminated beam"
-msgstr "beam non terminato"
+msgstr "travatura non terminata"
 
-#: beam-engraver.cc:244 chord-tremolo-engraver.cc:138
-#, fuzzy
+#: beam-engraver.cc:266 chord-tremolo-engraver.cc:150
 msgid "stem must have Rhythmic structure"
-msgstr "I gambi devono avere una struttura ritmica."
+msgstr "il gambo deve avere una struttura ritmica"
 
-#: beam-engraver.cc:252
-#, fuzzy
+#: beam-engraver.cc:274
 msgid "stem does not fit in beam"
-msgstr "il gambo non rientra nel beam"
+msgstr "il gambo non rientra nella travatura"
 
-#: beam-engraver.cc:253
+#: beam-engraver.cc:275
 msgid "beam was started here"
-msgstr ""
+msgstr "la travatura è iniziata qui"
 
-#: beam-quanting.cc:307
+#: beam-quanting.cc:314
 msgid "no feasible beam position"
-msgstr ""
+msgstr "nessuna posizione fattibile per la travatura"
 
-#: beam.cc:160
-#, fuzzy
+#: beam.cc:171
 msgid "removing beam with no stems"
-msgstr "beam con meno di due gambi"
+msgstr "rimozione delle travature senza gambi"
 
-#: beam.cc:1069
+#: beam.cc:1116
 msgid "no viable initial configuration found: may not find good beam slope"
-msgstr ""
+msgstr "nessuna configurazione iniziale fattibile trovata: si potrebbe non trovare una buona inclinazione delle travature"
 
-#: break-alignment-interface.cc:195
-#, fuzzy, c-format
+#: break-alignment-interface.cc:206
+#, c-format
 msgid "No spacing entry from %s to `%s'"
-msgstr "traduttore sconosciuto `%s'"
+msgstr "Nessuno spazio da %s a «%s»"
 
-#: change-iterator.cc:23
-#, fuzzy, c-format
+#: change-iterator.cc:34
+#, c-format
 msgid "cannot change `%s' to `%s'"
-msgstr "non posso cambiare `%s' in `%s'"
+msgstr "impossibile cambiare «%s» in «%s»"
 
 #. FIXME: constant error message.
-#: change-iterator.cc:82
-#, fuzzy
+#: change-iterator.cc:93
 msgid "cannot find context to switch to"
-msgstr "Non trovo il contesto dello Score"
+msgstr "impossibile trovare il contesto su cui spostarsi"
 
 #. We could change the current translator's id, but that would make
 #. errors hard to catch.
 #.
 #. last->translator_id_string () = get_change
 #. ()->change_to_id_string ();
-#: change-iterator.cc:91
-#, fuzzy, c-format
+#: change-iterator.cc:102
+#, c-format
 msgid "not changing to same context type: %s"
-msgstr "% strumento:"
+msgstr "non passare allo stesso tipo di contesto: %s"
 
 #. FIXME: uncomprehensable message
-#: change-iterator.cc:95
+#: change-iterator.cc:106
 msgid "none of these in my family"
-msgstr ""
+msgstr "nessuno di questi nella mia famiglia"
 
 #: chord-tremolo-engraver.cc:88
 msgid "No tremolo to end"
-msgstr ""
+msgstr "Nessun tremolo alla fine"
 
-#: chord-tremolo-engraver.cc:110
-#, fuzzy
+#: chord-tremolo-engraver.cc:109
 msgid "unterminated chord tremolo"
-msgstr "beam non terminato"
+msgstr "tremolo dell'accordo non terminato"
 
-#: chord-tremolo-iterator.cc:35
-#, c-format
-msgid "expect 2 elements for chord tremolo, found %d"
-msgstr ""
-
-#: clef.cc:54
+#: clef.cc:65
 #, c-format
 msgid "clef `%s' not found"
-msgstr ""
+msgstr "chiave «%s» non trovata"
 
-#: cluster.cc:110
-#, fuzzy, c-format
+#: cluster.cc:120
+#, c-format
 msgid "unknown cluster style `%s'"
-msgstr "tipo di chiave sconosciuto"
+msgstr "stile cluster sconosciuto «%s»"
 
-#: cluster.cc:147
+#: cluster.cc:157
 msgid "junking empty cluster"
-msgstr ""
+msgstr "eliminazione di cluster vuoti"
 
-#: coherent-ligature-engraver.cc:100
+#: coherent-ligature-engraver.cc:111
 #, c-format
 msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
-msgstr ""
+msgstr "Coherent_ligature_engraver: impostare `spacing-increment=0.01': ptr=%ul"
 
 #. if we get to here, just put everything on one line
-#: constrained-breaking.cc:167 constrained-breaking.cc:184
-#, fuzzy
+#: constrained-breaking.cc:189 constrained-breaking.cc:207
 msgid "cannot find line breaking that satisfies constraints"
-msgstr "la soluzione non soddisfa i vincoli"
+msgstr "impossibile trovare interruzioni di linea che soddisfino i vincoli"
 
-#: context-def.cc:130
-#, c-format
-msgid "program has no such type: `%s'"
-msgstr ""
-
-#: context-property.cc:30
+#: context-property.cc:42
 msgid "need symbol arguments for \\override and \\revert"
-msgstr ""
+msgstr "sono necessari argomenti simbolici per \\override e \\revert"
 
-#: context.cc:144
-#, fuzzy, c-format
+#: context.cc:149
+#, c-format
 msgid "cannot find or create new `%s'"
-msgstr "non trovo e non posso creare `%s'"
+msgstr "impossibile trovare o creare un nuovo «%s»"
 
-#: context.cc:206
-#, fuzzy, c-format
+#: context.cc:207
+#, c-format
 msgid "cannot find or create `%s' called `%s'"
-msgstr "non trovo e non posso creare '%s' chiamato '%s'"
+msgstr "impossibile trovare o creare «%s» chiamato «%s»"
 
-#: context.cc:268
+#: context.cc:269
 #, c-format
 msgid "Invalid CreateContext event: Cannot create %s context"
-msgstr ""
+msgstr "Evento CreateContext non valido: impossibile creare il contesto %s"
 
-#: context.cc:380
-#, fuzzy, c-format
+#: context.cc:400
+#, c-format
 msgid "cannot find or create: `%s'"
-msgstr "non trovo e non posso creare `%s'"
+msgstr "impossibile trovare o creare: «%s»"
 
-#: custos.cc:77
+#: custos.cc:88
 #, c-format
 msgid "custos `%s' not found"
-msgstr ""
+msgstr "custos «%s» non trovato"
 
-#: dispatcher.cc:71
+#: dispatcher.cc:82
 msgid "Event class should be a symbol"
-msgstr ""
+msgstr "La classe evento dovrebbe essere un simbolo"
 
-#: dispatcher.cc:78
-#, fuzzy, c-format
+#: dispatcher.cc:89
+#, c-format
 msgid "Unknown event class %s"
-msgstr "tipo di chiave sconosciuto"
+msgstr "Classe di evento %s sconosciuta"
 
-#: dots.cc:37
+#: dots.cc:48
 #, c-format
 msgid "dot `%s' not found"
-msgstr ""
+msgstr "punto «%s» non trovato"
 
-#: dynamic-engraver.cc:192
-#, fuzzy
+#: dynamic-engraver.cc:197
 msgid "cannot find start of (de)crescendo"
-msgstr "non trovo un (de)crescendo fino alla fine"
+msgstr "impossibile trovare l'inizio del (de)crescendo"
 
-#: dynamic-engraver.cc:201
-#, fuzzy
+#: dynamic-engraver.cc:206
 msgid "already have a decrescendo"
-msgstr "crescendo non terminato"
+msgstr "decrescendo già presente"
 
-#: dynamic-engraver.cc:203
-#, fuzzy
+#: dynamic-engraver.cc:208
 msgid "already have a crescendo"
-msgstr "crescendo non terminato"
+msgstr "crescendo già presente"
 
-#: dynamic-engraver.cc:206
-#, fuzzy
+#: dynamic-engraver.cc:211
 msgid "cresc starts here"
-msgstr "un cambio di tempo non è ammesso in questo punto"
+msgstr "cresc inizia qui"
 
-#: dynamic-engraver.cc:335
-#, fuzzy
+#: dynamic-engraver.cc:339
 msgid "unterminated (de)crescendo"
-msgstr "crescendo non terminato"
+msgstr "(de)crescendo non terminato"
 
-#: extender-engraver.cc:142 extender-engraver.cc:151
-msgid "unterminated extender"
-msgstr "extender non terminato"
+#: episema-engraver.cc:75
+msgid "already have an episema"
+msgstr "episema già presente"
 
-#: font-config.cc:28
-msgid "Initializing FontConfig..."
-msgstr ""
+#: episema-engraver.cc:88
+msgid "cannot find start of episema"
+msgstr "impossibile trovare l'inizio dell'episema"
 
-#: font-config.cc:44
-#, c-format
-msgid "Rebuilding FontConfig cache %s, this may take a while..."
-msgstr ""
+#: episema-engraver.cc:137
+msgid "unterminated episema"
+msgstr "episema non terminato"
 
-#: font-config.cc:57
-#, fuzzy, c-format
+#: extender-engraver.cc:170 extender-engraver.cc:179
+msgid "unterminated extender"
+msgstr "estensore non terminato"
+
+#: font-config-scheme.cc:152 font-config.cc:55
+#, c-format
 msgid "failed adding font directory: %s"
-msgstr "non trovo e non posso creare `%s'"
+msgstr "errore nell'aggiungere la directory dei tipi di carattere: %s"
 
-#: font-config.cc:59
-#, fuzzy, c-format
+#: font-config-scheme.cc:154 font-config.cc:57
+#, c-format
 msgid "adding font directory: %s"
-msgstr "non trovo e non posso creare `%s'"
+msgstr "aggiungere la directory dei tipi di carattere: %s"
 
-#: general-scheme.cc:201
+#: font-config-scheme.cc:168
+#, c-format
+msgid "failed adding font file: %s"
+msgstr "errore nell'aggiungere il file dei tipi di carattere: %s"
+
+#: font-config-scheme.cc:170
+#, c-format
+msgid "adding font file: %s"
+msgstr "aggiungere il file dei tipi di carattere: %s"
+
+#: font-config.cc:40
+msgid "Initializing FontConfig..."
+msgstr "Inizializzazione di FontConfig..."
+
+#: font-config.cc:61
+msgid "Building font database..."
+msgstr "Creazione del database dei tipi di carattere..."
+
+#: general-scheme.cc:305
 msgid "infinity or NaN encountered while converting Real number"
-msgstr ""
+msgstr "si è incontrato infinito o un valore non numerico durante la conversione di un numero reale"
 
-#: general-scheme.cc:202
+#: general-scheme.cc:306
 msgid "setting to zero"
-msgstr ""
+msgstr "impostato a zero"
 
-#: general-scheme.cc:421 output-ps.scm:61
+#: general-scheme.cc:542 output-ps.scm:48
 msgid "Found infinity or nan in output. Substituting 0.0"
-msgstr ""
+msgstr "Trovato infinito o un valore non numerico nell'output. Sostituito con 0.0"
 
-#: glissando-engraver.cc:94
-#, fuzzy
+#: glissando-engraver.cc:105
 msgid "unterminated glissando"
-msgstr "slur non terminato"
+msgstr "glissando non terminato"
 
-#: global-context-scheme.cc:85 global-context-scheme.cc:103
-#, fuzzy
+#: global-context-scheme.cc:96 global-context-scheme.cc:114
 msgid "no music found in score"
-msgstr "ho bisogno di musica nello spartito"
+msgstr "nessuna musica trovata nello spartito"
 
-#: global-context-scheme.cc:93
-#, fuzzy
+#: global-context-scheme.cc:104
 msgid "Interpreting music... "
 msgstr "Interpretazione della musica..."
 
-#: global-context-scheme.cc:116
-#, fuzzy, c-format
+#: global-context-scheme.cc:127
+#, c-format
 msgid "elapsed time: %.2f seconds"
-msgstr "durata: %.2f secondi"
+msgstr "tempo trascorso: %.2f secondi"
 
-#: gregorian-ligature-engraver.cc:59
+#: gregorian-ligature-engraver.cc:70
 #, c-format
 msgid "\\%s ignored"
-msgstr ""
+msgstr "\\%s ignorato"
 
-#: gregorian-ligature-engraver.cc:64
+#: gregorian-ligature-engraver.cc:75
 #, c-format
 msgid "implied \\%s added"
-msgstr ""
+msgstr "aggiunto il \\%s implicato"
 
 #. ligature may not start with 2nd head of pes or flexa
-#: gregorian-ligature-engraver.cc:212
-#, fuzzy
+#: gregorian-ligature-engraver.cc:224
 msgid "cannot apply `\\~' on first head of ligature"
-msgstr "non trovo le estremità di %s"
+msgstr "impossibile applicare «\\~» sulla prima testa della legatura"
 
 #. (pitch == prev_pitch)
-#: gregorian-ligature-engraver.cc:224
+#: gregorian-ligature-engraver.cc:236
 msgid "cannot apply `\\~' on heads with identical pitch"
-msgstr ""
+msgstr "impossibile applicare «\\~» su teste di identica altezza"
 
-#: grob-interface.cc:57
-#, fuzzy, c-format
+#: grob-interface.cc:68
+#, c-format
 msgid "Unknown interface `%s'"
-msgstr "tipo di chiave sconosciuto"
+msgstr "Interfaccia «%s» sconosciuta"
 
-#: grob-interface.cc:68
+#: grob-interface.cc:79
 #, c-format
 msgid "Grob `%s' has no interface for property `%s'"
-msgstr ""
+msgstr "Il grob «%s» non ha un'interfaccia per la proprietà «%s»"
 
 #: grob-property.cc:34
 #, c-format
 msgid "%d: %s"
-msgstr ""
+msgstr "%d: %s"
 
 #: grob-property.cc:173
 #, c-format
 msgid "cyclic dependency: calculation-in-progress encountered for #'%s (%s)"
-msgstr ""
+msgstr "dipendenza ciclica: calculation-in-progress incontrato per #'%s (%s)"
 
-#: grob.cc:251
+#: grob.cc:286
 msgid "Infinity or NaN encountered"
-msgstr ""
+msgstr "incontrato infinito o un valore non numerico"
 
-#: hairpin.cc:187
+#: hairpin.cc:186
 msgid "decrescendo too small"
-msgstr ""
+msgstr "decrescendo troppo piccolo"
 
-#: horizontal-bracket-engraver.cc:59
+#: horizontal-bracket-engraver.cc:78
 msgid "do not have that many brackets"
-msgstr ""
+msgstr "non ci sono così tante parentesi"
 
-#: horizontal-bracket-engraver.cc:68
-#, fuzzy
+#: horizontal-bracket-engraver.cc:87
 msgid "conflicting note group events"
-msgstr "richieste di timing in conflitto"
+msgstr "eventi di gruppi di note in conflitto"
 
-#: hyphen-engraver.cc:93
-#, fuzzy
+#: hyphen-engraver.cc:104
 msgid "removing unterminated hyphen"
-msgstr "beam non terminato"
+msgstr "eliminazione di un trattino non terminato"
 
-#: hyphen-engraver.cc:107
-#, fuzzy
+#: hyphen-engraver.cc:118
 msgid "unterminated hyphen; removing"
-msgstr "beam non terminato"
+msgstr "trattino non terminato; eliminazione"
 
-#: includable-lexer.cc:53 lily-guile.cc:76 lily-parser-scheme.cc:117
+#: includable-lexer.cc:71 lily-guile.cc:87 lily-parser-scheme.cc:109
 #, c-format
 msgid "cannot find file: `%s'"
-msgstr "non trovo il file: `%s'"
+msgstr "impossibile trovare il file: «%s»"
 
-#: includable-lexer.cc:55 lily-parser-scheme.cc:108
-#, fuzzy, c-format
+#: includable-lexer.cc:73 lily-parser-scheme.cc:100
+#, c-format
 msgid "(search path: `%s')"
-msgstr "(Il path di caricamento è `%s'"
+msgstr "(percorso di ricerca: «%s»)"
 
-#: input.cc:112 source-file.cc:168 source-file.cc:183
+#: input.cc:131 source-file.cc:179 source-file.cc:194
 msgid "position unknown"
 msgstr "posizione sconosciuta"
 
-#: key-signature-interface.cc:74
+#: key-signature-interface.cc:78
 #, c-format
 msgid "No glyph found for alteration: %s"
-msgstr ""
+msgstr "Nessun glifo trovato per l'alterazione: %s"
 
-#: key-signature-interface.cc:84
+#: key-signature-interface.cc:88
 msgid "alteration not found"
-msgstr ""
+msgstr "alterazione non trovata"
 
-#: ligature-bracket-engraver.cc:62 ligature-engraver.cc:93
-#, fuzzy
+#: ligature-bracket-engraver.cc:73 ligature-engraver.cc:104
 msgid "cannot find start of ligature"
-msgstr "non trovo le estremità di %s"
+msgstr "impossibile trovare l'inizio della legatura"
 
-#: ligature-bracket-engraver.cc:75 ligature-engraver.cc:120
-#, fuzzy
+#: ligature-bracket-engraver.cc:86 ligature-engraver.cc:131
 msgid "already have a ligature"
-msgstr "crescendo non terminato"
+msgstr "legatura già presente"
 
-#: ligature-engraver.cc:98
+#: ligature-engraver.cc:109
 msgid "no right bound"
-msgstr ""
+msgstr "manca il limite destro"
 
-#: ligature-engraver.cc:129
+#: ligature-engraver.cc:140
 msgid "no left bound"
-msgstr ""
+msgstr "manca il limite sinistro"
 
-#: ligature-engraver.cc:173
-#, fuzzy
+#: ligature-engraver.cc:185
 msgid "unterminated ligature"
-msgstr "slur non terminato"
+msgstr "legatura non terminata"
 
-#: ligature-engraver.cc:202
+#: ligature-engraver.cc:214
 msgid "ignoring rest: ligature may not contain rest"
-msgstr ""
+msgstr "pausa ignorata: la legatura non può contenere una pausa"
 
-#: ligature-engraver.cc:203
-#, fuzzy
+#: ligature-engraver.cc:215
 msgid "ligature was started here"
-msgstr "un cambio di tempo non è ammesso in questo punto"
+msgstr "la legatura è iniziata qui"
 
-#: lily-guile.cc:78
-#, fuzzy, c-format
+#: lily-guile.cc:89
+#, c-format
 msgid "(load path: `%s')"
-msgstr "(Il path di caricamento è `%s'"
+msgstr "(percorso di caricamento: «%s»)"
 
-#: lily-guile.cc:438
+#: lily-guile.cc:439
 #, c-format
 msgid "cannot find property type-check for `%s' (%s)."
-msgstr ""
+msgstr "impossibile trovare la proprietà type-check per «%s» (%s)."
 
-#: lily-guile.cc:441
+#: lily-guile.cc:442
 msgid "perhaps a typing error?"
-msgstr ""
+msgstr "forse un errore di digitazione?"
 
-#: lily-guile.cc:448
+#: lily-guile.cc:449
 msgid "doing assignment anyway"
-msgstr ""
+msgstr "compito comunque in corso"
 
-#: lily-guile.cc:460
+#: lily-guile.cc:461
 #, c-format
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
-msgstr ""
+msgstr "controllo del tipo per «%s» fallito; il valore «%s» deve essere del tipo «%s»"
 
-#: lily-lexer.cc:251
+#: lily-lexer.cc:264
 msgid "include files are not allowed in safe mode"
-msgstr ""
+msgstr "l'inclusione di file non è permessa in modalità sicura"
 
-#: lily-lexer.cc:270
-#, fuzzy, c-format
+#: lily-lexer.cc:291
+#, c-format
 msgid "identifier name is a keyword: `%s'"
-msgstr "Il nome dell'identificatore è una parola chiave (`%s')"
+msgstr "Il nome dell'identificatore è una parola chiave: «%s»"
 
-#: lily-lexer.cc:285
+#: lily-lexer.cc:312
 #, c-format
 msgid "error at EOF: %s"
-msgstr "errore alla fine del file: %s"
-
-#: lily-parser-scheme.cc:30
-#, fuzzy, c-format
-msgid "deprecated function called: %s"
-msgstr "non riesco a trovare il carattere `%s'"
+msgstr "errore alla fine del file (EOF): %s"
 
-#: lily-parser-scheme.cc:89
-#, fuzzy, c-format
+#: lily-parser-scheme.cc:82
+#, c-format
 msgid "Changing working directory to: `%s'"
-msgstr "non trovo e non posso creare `%s'"
+msgstr "Si cambia la directory di lavoro a: «%s»"
 
-#: lily-parser-scheme.cc:107
-#, fuzzy, c-format
+#: lily-parser-scheme.cc:99
+#, c-format
 msgid "cannot find init file: `%s'"
-msgstr "non trovo il file: `%s'"
+msgstr "impossibile trovare il file di init: «%s»"
 
-#: lily-parser-scheme.cc:126
-#, fuzzy, c-format
+#: lily-parser-scheme.cc:118
+#, c-format
 msgid "Processing `%s'"
-msgstr "Elaboro..."
+msgstr "Elaborazione di «%s»"
+
+#: lily-parser-scheme.cc:204
+msgid "ly:parser-parse-string is only valid with a new parser.  Use ly:parser-include-string instead."
+msgstr "ly:parser-parse-string è valido solo con un nuovo parser.  Usare ly:parser-include-string al suo posto."
 
-#: lily-parser.cc:99
+#: lily-parser.cc:106
 msgid "Parsing..."
 msgstr "Analisi..."
 
-#: lily-parser.cc:127
-#, fuzzy
+#: lily-parser.cc:134
 msgid "braces do not match"
-msgstr "le bretelle no si accoppiano"
+msgstr "le graffe non corrispondono"
 
-#: lyric-combine-music-iterator.cc:327
-#, fuzzy, c-format
+#: lyric-combine-music-iterator.cc:337
+#, c-format
 msgid "cannot find Voice `%s'"
-msgstr "Non trovo il file `%s'"
+msgstr "impossibile trovare la voce (Voice) «%s»"
 
-#: lyric-engraver.cc:158
+#: lyric-engraver.cc:175
 msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice."
-msgstr ""
+msgstr "Le sillabe del testo non hanno note. Usare \\lyricsto o associatedVoice."
 
-#: main.cc:100
+#: main.cc:109
 #, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -1488,9 +1917,11 @@ msgid ""
 "under certain conditions.  Invoke as `%s --warranty' for more\n"
 "information.\n"
 msgstr ""
+"Questo programma è software libero. È coperto dalla GNU General Public\n"
+"License che permette di modificarlo o distribuirne copie rispettando certe\n"
+"condizioni. Per maggiori informazioni, invocare «%s --warranty».\n"
 
-#: main.cc:106
-#, fuzzy
+#: main.cc:115
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License version 2\n"
@@ -1506,1085 +1937,1179 @@ msgid ""
 "the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
 "Boston, MA 02111-1307, USA.\n"
 msgstr ""
-"    Questo programma è free software; puoi ridistribuirlo e/o\n"
+"    Questo programma è software libero; puoi ridistribuirlo e/o\n"
 "modificarlo sotto le condizioni della GNU General Public License, versione 2,\n"
 "come pubblicata dalla Free Software Foundation.\n"
+"\n"
 "    Questo programma è distribuito nella speranza che possa essere utile,\n"
 "ma SENZA ALCUNA GARANZIA; è privo anche di garanzia implicita di\n"
-"COMMERCIABILITA' o della POSSIBILITA' D'USO A SCOPI PARTICOLARI. Si veda la GNU\n"
+"COMMERCIABILITÀ o della POSSIBILITÀ D'USO A SCOPI PARTICOLARI. Si veda la GNU\n"
 "General Public License per ulteriori dettagli.\n"
 "\n"
 "    Con questo programma dovresti aver ricevuto una copia della\n"
-"GNU General Public License (ci riferiamo al file COPYING); se ciò non èavvenuto, scrivi a: Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02136\n"
-"USA.\n"
+"GNU General Public License; se ciò non è avvenuto, scrivi a\n"
+"Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
+"Boston, MA 02111-1307, USA.\n"
 
-#: main.cc:137
+#: main.cc:146
 msgid "SYM[=VAL]"
-msgstr ""
+msgstr "SIMBOLO[=VALORE]"
 
-#: main.cc:138
+#: main.cc:147
 msgid ""
 "set Scheme option SYM to VAL (default: #t).\n"
 "Use -dhelp for help."
 msgstr ""
+"imposta l'opzione di Scheme SIMBOLO a VALORE (predefinito: #t).\n"
+"Usare -dhelp per ottenere aiuto."
 
-#: main.cc:141
+#: main.cc:150
 msgid "EXPR"
-msgstr ""
+msgstr "ESPRESSIONE"
 
-#: main.cc:141
+#: main.cc:150
 msgid "evaluate scheme code"
-msgstr ""
+msgstr "valuta il codice scheme"
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:144
+#: main.cc:153
 msgid "FORMATs"
-msgstr ""
+msgstr "FORMATO"
 
-#: main.cc:144
+#: main.cc:153
 msgid "dump FORMAT,...  Also as separate options:"
-msgstr ""
-
-#: main.cc:145
-#, fuzzy
-msgid "generate DVI (tex backend only)"
-msgstr "vincoli degenerati"
+msgstr "scarica FORMATO,...  Anche come opzioni separate:"
 
-#: main.cc:146
-#, fuzzy
+#: main.cc:154
 msgid "generate PDF (default)"
-msgstr "vincoli degenerati"
+msgstr "genera PDF (predefinito)"
 
-#: main.cc:147
-#, fuzzy
+#: main.cc:155
 msgid "generate PNG"
-msgstr "vincoli degenerati"
+msgstr "genera PNG"
 
-#: main.cc:148
-#, fuzzy
+#: main.cc:156
 msgid "generate PostScript"
-msgstr "vincoli degenerati"
-
-#: main.cc:149
-msgid "generate TeX (tex backend only)"
-msgstr ""
+msgstr "genera PostScript"
 
-#: main.cc:151
+#: main.cc:158
 msgid "FIELD"
-msgstr ""
+msgstr "CAMPO"
 
-#: main.cc:151
+#: main.cc:158
 msgid ""
 "dump header field FIELD to file\n"
 "named BASENAME.FIELD"
 msgstr ""
+"scrive il campo di intestazione CAMPO sul\n"
+"file chiamato BASENAME.CAMPO"
 
-#: main.cc:153
-#, fuzzy
+#: main.cc:160
 msgid "add DIR to search path"
-msgstr "  -I, --include=DIR      aggiunge DIR ai path di ricerca\n"
+msgstr "aggiunge DIRECTORY ai percorsi di ricerca"
 
-#: main.cc:154
-#, fuzzy
+#: main.cc:161
 msgid "use FILE as init file"
-msgstr "  -i, --init=NOMEFILE    usa NOMEFILE come file iniziale\n"
+msgstr "usa FILE come file di inizializzazione"
 
-#: main.cc:156
+#: main.cc:163
 msgid "USER, GROUP, JAIL, DIR"
-msgstr ""
+msgstr "UTENTE, GRUPPO, GABBIA, DIRECTORY"
 
-#: main.cc:156
+#: main.cc:163
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
 msgstr ""
+"chroot a GABBIA, diventa UTENTE:GRUPPO\n"
+"ed entra in DIRECTORY"
 
-#: main.cc:159
+#: main.cc:166
 msgid "write output to FILE (suffix will be added)"
-msgstr ""
+msgstr "scrive l'output su FILE (verrà aggiunto un suffisso)"
 
-#: main.cc:160
+#: main.cc:167
 msgid "relocate using directory of lilypond program"
-msgstr ""
+msgstr "trasferisce alla directory del programma lilypond"
 
-#: main.cc:203
-#, fuzzy, c-format
+#. Do not update the copyright years here, run `make grand-replace'
+#: main.cc:238
+#, c-format
 msgid ""
 "Copyright (c) %s by\n"
 "%s  and others."
-msgstr "Copyright (c) %s di"
+msgstr ""
+"Copyright (c) %s di\n"
+"%s e altri."
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:230
-#, fuzzy, c-format
+#: main.cc:265
+#, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr "Uso: %s [OPZIONE]... [FILE]..."
 
-#: main.cc:232
-#, fuzzy, c-format
+#: main.cc:267
 msgid "Typeset music and/or produce MIDI from FILE."
-msgstr "Stampa partitura oppure suona una song MIDI da FILE o <stdin>."
+msgstr "Stampa partitura oppure crea MIDI da FILE."
 
-#: main.cc:234
-#, c-format
+#: main.cc:269
 msgid "LilyPond produces beautiful music notation."
-msgstr ""
+msgstr "LilyPond produce bella notazione musicale."
 
-#: main.cc:236
+#: main.cc:271
 #, c-format
 msgid "For more information, see %s"
-msgstr ""
+msgstr "Per maggiori informazioni si veda %s"
 
-#: main.cc:238
-#, c-format
+#: main.cc:273
 msgid "Options:"
-msgstr "Opzioni: "
-
-#: main.cc:242
-#, c-format
-msgid "Report bugs via %s"
-msgstr ""
+msgstr "Opzioni:"
 
-#: main.cc:288
+#: main.cc:327
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
-msgstr ""
+msgstr "previsti gli argomenti %d per la gabbia, trovati: %u"
 
-#: main.cc:302
-#, fuzzy, c-format
+#: main.cc:341
+#, c-format
 msgid "no such user: %s"
-msgstr "% strumento:"
+msgstr "non esiste questo utente: %s"
 
-#: main.cc:304
+#: main.cc:343
 #, c-format
 msgid "cannot get user id from user name: %s: %s"
-msgstr ""
+msgstr "impossibile acquisire l'id dell'utente dal nome utente: %s: %s"
 
-#: main.cc:319
-#, fuzzy, c-format
+#: main.cc:358
+#, c-format
 msgid "no such group: %s"
-msgstr "% strumento:"
+msgstr "non esiste questo gruppo: %s"
 
-#: main.cc:321
-#, fuzzy, c-format
+#: main.cc:360
+#, c-format
 msgid "cannot get group id from group name: %s: %s"
-msgstr "non posso cambiare `%s' in `%s'"
+msgstr "impossibile acquisire l'id del gruppo dal nome del gruppo: %s:%s"
 
-#: main.cc:329
-#, fuzzy, c-format
+#: main.cc:368
+#, c-format
 msgid "cannot chroot to: %s: %s"
-msgstr "non trovo e non posso creare `%s'"
+msgstr "non si può fare il chroot a: %s: %s"
 
-#: main.cc:336
-#, fuzzy, c-format
+#: main.cc:375
+#, c-format
 msgid "cannot change group id to: %d: %s"
-msgstr "non posso cambiare `%s' in `%s'"
+msgstr "non si può cambiare l'id del gruppo in: %d: %s"
 
-#: main.cc:342
-#, fuzzy, c-format
+#: main.cc:381
+#, c-format
 msgid "cannot change user id to: %d: %s"
-msgstr "non posso cambiare `%s' in `%s'"
+msgstr "non si può cambiare l'id dell'utente in: %d: %s"
 
-#: main.cc:348
-#, fuzzy, c-format
+#: main.cc:387
+#, c-format
 msgid "cannot change working directory to: %s: %s"
-msgstr "non trovo e non posso creare `%s'"
+msgstr "non si può passare alla directory di lavoro: %s: %s"
 
-#: main.cc:594
+#: main.cc:628
 #, c-format
 msgid "exception caught: %s"
-msgstr ""
+msgstr "ricevuta un'eccezione: %s"
 
 #. FIXME: constant error message.
-#: mark-engraver.cc:129
+#: mark-engraver.cc:157
 msgid "rehearsalMark must have integer value"
-msgstr ""
+msgstr "rehearsalMark deve avere un valore intero"
 
-#: mark-engraver.cc:135
+#: mark-engraver.cc:163
 msgid "mark label must be a markup object"
-msgstr ""
+msgstr "l'etichetta del segno deve essere un oggetto di markup"
 
-#: mensural-ligature-engraver.cc:85
+#: mensural-ligature-engraver.cc:96
 msgid "ligature with less than 2 heads -> skipping"
-msgstr ""
+msgstr "legatura con meno di due teste -> si ignora"
 
-#: mensural-ligature-engraver.cc:112
+#: mensural-ligature-engraver.cc:123
 msgid "cannot determine pitch of ligature primitive -> skipping"
-msgstr ""
+msgstr "impossibile determinare l'altezza della legatura primitiva -> si ignora"
 
-#: mensural-ligature-engraver.cc:126
+#: mensural-ligature-engraver.cc:137
 msgid "single note ligature - skipping"
-msgstr ""
+msgstr "legatura di una nota singola - si ignora"
 
-#: mensural-ligature-engraver.cc:138
+#: mensural-ligature-engraver.cc:149
 msgid "prime interval within ligature -> skipping"
-msgstr ""
+msgstr "primo intervallo all'interno della legatura -> si ignora"
 
-#: mensural-ligature-engraver.cc:150
+#: mensural-ligature-engraver.cc:161
 msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
-msgstr ""
+msgstr "legatura mensurale: nessuna durata per Mx, L, B. S -> si ignora"
 
-#: mensural-ligature-engraver.cc:198
+#: mensural-ligature-engraver.cc:209
 msgid "semibrevis must be followed by another one -> skipping"
-msgstr ""
+msgstr "una semibreve deve essere seguita da un'altra semibreve -> si ignora"
 
-#: mensural-ligature-engraver.cc:209
+#: mensural-ligature-engraver.cc:220
 msgid ""
 "semibreves can only appear at the beginning of a ligature,\n"
 "and there may be only zero or two of them"
 msgstr ""
+"le semibrevi possono comparire solo all'inizio di una legatura,\n"
+"e ce ne possono essere due o nessuna"
 
-#: mensural-ligature-engraver.cc:236
+#: mensural-ligature-engraver.cc:247
 msgid ""
 "invalid ligatura ending:\n"
 "when the last note is a descending brevis,\n"
 "the penultimate note must be another one,\n"
 "or the ligatura must be LB or SSB"
 msgstr ""
+"fine della legatura non valido:\n"
+"se l'ultima nota è una breve discendente,\n"
+"lo deve essere anche la penultima nota,\n"
+"oppure la legatura deve essere LB o SSB"
 
-#: mensural-ligature-engraver.cc:356
+#: mensural-ligature-engraver.cc:367
 msgid "unexpected case fall-through"
-msgstr ""
+msgstr "caso inatteso e non interpretabile"
 
-#: mensural-ligature.cc:141
+#: mensural-ligature.cc:152
 msgid "Mensural_ligature: unexpected case fall-through"
-msgstr ""
+msgstr "Mensural_ligature: caso inatteso e non interpretabile"
 
-#: mensural-ligature.cc:192
+#: mensural-ligature.cc:203
 msgid "Mensural_ligature: (join_right == 0)"
-msgstr ""
+msgstr "Mensural_ligature: (join_right == 0)"
 
-#: midi-item.cc:81
-#, fuzzy, c-format
+#: midi-item.cc:92
+#, c-format
 msgid "no such MIDI instrument: `%s'"
-msgstr "% strumento:"
+msgstr "non esiste questo strumento MIDI: «%s»"
 
-#: midi-stream.cc:28
-#, fuzzy, c-format
+#: midi-stream.cc:39
+#, c-format
 msgid "cannot open for write: %s: %s"
-msgstr "non posso aprire il file: `%s'"
+msgstr "impossibile aprire il file con permesso di scrittura: %s: %s"
 
-#: midi-stream.cc:44
-#, fuzzy, c-format
+#: midi-stream.cc:55
+#, c-format
 msgid "cannot write to file: `%s'"
-msgstr "non posso aprire il file: `%s'"
+msgstr "impossibile scrivere su file: «%s»"
 
-#: minimal-page-breaking.cc:42
-#, fuzzy
-msgid "Computing page breaks..."
-msgstr "Calcolo delle posizioni della colonne..."
+#: minimal-page-breaking.cc:40 paper-score.cc:122
+msgid "Calculating line breaks..."
+msgstr "Calcolo delle interruzioni di linea..."
+
+#: minimal-page-breaking.cc:44
+msgid "Calculating page breaks..."
+msgstr "Calcolo delle interruzioni di pagina..."
 
-#: music-iterator.cc:171
+#: music-iterator.cc:182
 msgid "Sending non-event to context"
-msgstr ""
+msgstr "Invio di un non-evento al contesto"
 
-#: music.cc:140
+#: music.cc:151
 #, c-format
 msgid "octave check failed; expected \"%s\", found: \"%s\""
+msgstr "controllo dell'ottava fallito: previsto \"%s\", trovato: \"%s\""
+
+#: music.cc:219
+msgid "(normalized pitch)"
+msgstr "(altezza normalizzata)"
+
+#: music.cc:223
+#, c-format
+msgid "Transposing %s by %s makes alteration larger than double"
+msgstr "La trasposizione di %s da %s ingrandisce le alterazioni più del doppio"
+
+#: new-dynamic-engraver.cc:142
+#, c-format
+msgid ""
+"unknown crescendo style: %s\n"
+"defaulting to hairpin."
 msgstr ""
+"stile di crescendo sconosciuto: %s\n"
+"si usa la forcella predefinita."
 
-#: music.cc:203
-#, fuzzy, c-format
-msgid "transposition by %s makes alteration larger than double"
-msgstr "la trasposizine di %s rende le alterazioni più che doppie"
+#: new-dynamic-engraver.cc:200
+#, c-format
+msgid "unterminated %s"
+msgstr "%s non terminato"
 
-#: new-fingering-engraver.cc:96
+#: new-fingering-engraver.cc:106
 msgid "cannot add text scripts to individual note heads"
-msgstr ""
+msgstr "impossibile aggiungere delle scritte testuali alle teste delle note individuali"
 
-#: new-fingering-engraver.cc:239
+#: new-fingering-engraver.cc:250
 msgid "no placement found for fingerings"
-msgstr ""
+msgstr "nessuna posizione trovata per le diteggiature"
 
-#: new-fingering-engraver.cc:240
+#: new-fingering-engraver.cc:251
 msgid "placing below"
-msgstr ""
+msgstr "si colloca in basso"
 
-#: note-collision.cc:463
-#, fuzzy
+#: note-collision.cc:497
 msgid "ignoring too many clashing note columns"
-msgstr "Troppe collisioni tra colonne di note. Le ignoro."
+msgstr "troppe collisioni tra colonne di note, ignorate"
 
-#: note-column.cc:124
+#: note-column.cc:135
 msgid "cannot have note heads and rests together on a stem"
-msgstr ""
+msgstr "impossibile avere teste e pause insieme su un gambo"
 
-#: note-head.cc:63
+#: note-head.cc:76
 #, c-format
 msgid "none of note heads `%s' or `%s' found"
-msgstr ""
+msgstr "non si è trovata alcuna delle teste delle note «%s» o «%s»"
 
-#: note-heads-engraver.cc:64
+#: note-heads-engraver.cc:76
 msgid "NoteEvent without pitch"
-msgstr ""
+msgstr "NoteEvent senza altezza"
 
-#: open-type-font.cc:33
-#, fuzzy, c-format
+#: open-type-font.cc:44
+#, c-format
 msgid "cannot allocate %lu bytes"
-msgstr "non posso maneggiare %s"
+msgstr "impossibile allocare %lu byte"
 
-#: open-type-font.cc:37
-#, fuzzy, c-format
+#: open-type-font.cc:48
+#, c-format
 msgid "cannot load font table: %s"
-msgstr "non trovo il file: `%s'"
+msgstr "impossibile caricare la tabella dei tipi di carattere: %s"
 
-#: open-type-font.cc:42
-#, fuzzy, c-format
+#: open-type-font.cc:53
+#, c-format
 msgid "Free type error: %s"
-msgstr "errore: "
+msgstr "Errore FreeType: %s"
 
-#: open-type-font.cc:100
+#: open-type-font.cc:111
 #, c-format
 msgid "unsupported font format: %s"
-msgstr ""
+msgstr "formato di tipo di carattere non supportato: %s"
 
-#: open-type-font.cc:102
-#, fuzzy, c-format
+#: open-type-font.cc:113
+#, c-format
 msgid "error reading font file %s: %s"
-msgstr "non trovo e non posso creare `%s'"
+msgstr "errore nella lettura del file del tipo di carattere %s: %s"
 
-#: open-type-font.cc:177
+#: open-type-font.cc:188
 #, c-format
 msgid "FT_Get_Glyph_Name () Freetype error: %s"
-msgstr ""
+msgstr "errore di Freetype in FT_Get_Glyph_Name (): %s"
 
-#: open-type-font.cc:302 pango-font.cc:167
+#: open-type-font.cc:250
+msgid "Invalid index for character"
+msgstr "Indice non valido per il carattere"
+
+#: open-type-font.cc:319 pango-font.cc:187
 #, c-format
 msgid "FT_Get_Glyph_Name () error: %s"
-msgstr ""
+msgstr "errore in FT_Get_Glyph_Name (): %s"
 
 #. find out the ideal number of pages
-#: optimal-page-breaking.cc:56
+#: optimal-page-breaking.cc:60
 msgid "Finding the ideal number of pages..."
-msgstr ""
+msgstr "Determinazione del numero ottimale di pagine..."
 
-#: optimal-page-breaking.cc:71
+#: optimal-page-breaking.cc:87
 msgid "Fitting music on 1 page..."
-msgstr ""
+msgstr "Compressione della musica in una pagina..."
 
-#: optimal-page-breaking.cc:73
-#, fuzzy, c-format
+#: optimal-page-breaking.cc:89
+#, c-format
 msgid "Fitting music on %d pages..."
-msgstr "non trovo e non posso creare `%s'"
+msgstr "Compressione della musica in %d pagine..."
 
-#: optimal-page-breaking.cc:75
+#: optimal-page-breaking.cc:91
 #, c-format
 msgid "Fitting music on %d or %d pages..."
-msgstr ""
+msgstr "Compressione della musica in %d o %d pagine..."
 
-#: optimal-page-breaking.cc:152 page-turn-page-breaking.cc:226
-#: paper-score.cc:146
-#, fuzzy
+#: optimal-page-breaking.cc:101 optimal-page-breaking.cc:155
+#, c-format
+msgid "trying %d systems"
+msgstr "tentando %d sistemi"
+
+#: optimal-page-breaking.cc:120 optimal-page-breaking.cc:183
+#, c-format
+msgid "best score for this sys-count: %f"
+msgstr "miglior punteggio per questo numero di sistemi: %f"
+
+#: optimal-page-breaking.cc:190 page-turn-page-breaking.cc:248
+#: paper-score.cc:163
 msgid "Drawing systems..."
-msgstr "Genero le voci..."
+msgstr "Disegno dei sistemi..."
+
+#: output-def.cc:235
+msgid "margins do not fit with line-width, setting default values"
+msgstr "i margini non corrispondono con la larghezza del rigo, si impostano i valori predefiniti"
+
+#: output-def.cc:242
+msgid "systems run off the page due to improper paper settings, setting default values"
+msgstr "i sistemi escono fuori dalla pagina a causa di errate impostazioni del foglio, si impostano i valori predefiniti"
+
+#: page-breaking.cc:194
+msgid "ignoring min-systems-per-page and max-systems-per-page because systems-per-page was set"
+msgstr "si ignorano min-systems-per-page e max-systems-per-page perché è stato impostato systems-per-page"
+
+#: page-breaking.cc:199
+msgid "min-systems-per-page is larger than max-systems-per-page, ignoring both values"
+msgstr "min-systems-per-page è maggiore di max-systems-per-page, si ignorano entrambi i valori"
+
+#: page-layout-problem.cc:315
+#, c-format
+msgid "couldn't fit music on page: overflow is %f"
+msgstr "impossibile far entrare la musica nella pagina: l'eccesso è %f"
+
+#: page-layout-problem.cc:317
+msgid "compressing music to fit"
+msgstr "si comprime la musica per farla entrare"
 
-#: page-turn-page-breaking.cc:146
+#: page-layout-problem.cc:733
+msgid "staff-affinities should only decrease"
+msgstr "staff-affinities deve solo diminuire"
+
+#: page-turn-page-breaking.cc:168
 #, c-format
 msgid "page-turn-page-breaking: breaking from %d to %d"
-msgstr ""
+msgstr "page-turn-page-breaking: interruzione da %d a %d"
 
-#: page-turn-page-breaking.cc:195
+#: page-turn-page-breaking.cc:217
 msgid "cannot fit the first page turn onto a single page.  Consider setting first-page-number to an even number."
-msgstr ""
+msgstr "impossibile far entrare il primo cambio di pagina in una pagina singola.  Si consideri la possibilità di impostare first-page-number su un numero pari."
 
-#: page-turn-page-breaking.cc:208
+#: page-turn-page-breaking.cc:230
 #, c-format
 msgid "Calculating page and line breaks (%d possible page breaks)..."
-msgstr ""
+msgstr "Calcolo delle interruzioni di pagina e di linea (%d possibili interruzioni di pagina)..."
 
-#: page-turn-page-breaking.cc:275
+#: page-turn-page-breaking.cc:297
 #, c-format
 msgid "break starting at page %d"
-msgstr ""
+msgstr "l'interruzione comincia alla pagina %d"
 
-#: page-turn-page-breaking.cc:276
+#: page-turn-page-breaking.cc:298
 #, c-format
 msgid "\tdemerits: %f"
-msgstr ""
+msgstr "\tdemeriti: %f"
 
-#: page-turn-page-breaking.cc:277
+#: page-turn-page-breaking.cc:299
 #, c-format
 msgid "\tsystem count: %d"
-msgstr ""
+msgstr "\tnumero dei sistemi: %d"
 
-#: page-turn-page-breaking.cc:278
+#: page-turn-page-breaking.cc:300
 #, c-format
 msgid "\tpage count: %d"
-msgstr ""
+msgstr "\tnumero delle pagine: %d"
 
-#: page-turn-page-breaking.cc:279
+#: page-turn-page-breaking.cc:301
 #, c-format
 msgid "\tprevious break: %d"
-msgstr ""
+msgstr "\tinterruzione precedente: %d"
 
-#: pango-font.cc:184
+#: pango-font.cc:204
 #, c-format
 msgid ""
 "Glyph has no name, but font supports glyph naming.\n"
 "Skipping glyph U+%0X, file %s"
 msgstr ""
+"Il glifo non ha un nome, ma il tipo di carattere permette di dare un nome al glifo.\n"
+"Si salta il glifo U+%0X, file %s"
 
-#: pango-font.cc:229
-#, fuzzy, c-format
+#: pango-font.cc:241
+#, c-format
 msgid "no PostScript font name for font `%s'"
-msgstr "non posso aprire il file: `%s'"
+msgstr "nessun nome di tipo di carattere PostScript per «%s»"
 
-#: pango-font.cc:277
+#: pango-font.cc:290
 msgid "FreeType face has no PostScript font name"
-msgstr ""
+msgstr "Il tipo FreeType non ha un nome per il tipo di carattere PostScript"
+
+#: paper-book.cc:214
+#, c-format
+msgid "program option -dprint-pages not supported by backend `%s'"
+msgstr "l'opzione -dprint-pages del programma non è supportata dal backend «%s»"
+
+#: paper-book.cc:233
+#, c-format
+msgid "program option -dpreview not supported by backend `%s'"
+msgstr "l'opzione -dpreview del programma non è supportata dal backend «%s»"
 
-#: paper-column-engraver.cc:221
+#: paper-column-engraver.cc:233
 msgid "forced break was overridden by some other event, should you be using bar checks?"
-msgstr ""
+msgstr "l'interruzione forzata è stata sovrascritta da qualche altro evento, considerare l'uso dei controlli di battuta"
 
-#: paper-outputter-scheme.cc:30
-#, fuzzy, c-format
+#: paper-outputter-scheme.cc:41
+#, c-format
 msgid "Layout output to `%s'..."
-msgstr "L'output MIDI è inviato a %s..."
-
-#: paper-score.cc:105
-#, fuzzy
-msgid "Calculating line breaks..."
-msgstr "Calcolo delle posizioni della colonne..."
+msgstr "Output della formattazione inviato a «%s»..."
 
-#: paper-score.cc:118
+#: paper-score.cc:135
 #, c-format
 msgid "Element count %d (spanners %d) "
-msgstr ""
+msgstr "Conto degli elementi %d (spanner %d)."
 
-#: paper-score.cc:122
-#, fuzzy
+#: paper-score.cc:139
 msgid "Preprocessing graphical objects..."
-msgstr "Pre-elaborazione..."
+msgstr "Pre-elaborazione degli oggetti grafici..."
 
-#: parse-scm.cc:87
+#: parse-scm.cc:101
 msgid "GUILE signaled an error for the expression beginning here"
-msgstr ""
+msgstr "GUILE ha segnalato un errore per l'espressione che inizia qui"
 
-#: percent-repeat-engraver.cc:200
-#, fuzzy
+#: partial-iterator.cc:45
+msgid "trying to use \\partial after the start of a piece"
+msgstr "tentativo di usare \\partial all'inizio di un brano"
+
+#: percent-repeat-engraver.cc:213
 msgid "unterminated percent repeat"
-msgstr "beam non terminato"
+msgstr "ripetizione percentuale non terminata"
 
-#: performance.cc:43
-#, fuzzy
+#: performance.cc:54
 msgid "Track..."
-msgstr "traccia "
+msgstr "Traccia..."
 
-#: performance.cc:72
+#: performance.cc:83
 msgid "MIDI channel wrapped around"
-msgstr ""
+msgstr "Numerazione canale MIDI ricominciata"
 
-#: performance.cc:73
+#: performance.cc:84
 msgid "remapping modulo 16"
-msgstr ""
+msgstr "riassegnata con modulo 16"
 
-#: performance.cc:101
+#: performance.cc:111
 #, c-format
 msgid "MIDI output to `%s'..."
-msgstr "L'output MIDI è inviato a %s..."
+msgstr "L'output MIDI è inviato a «%s»..."
 
-#: phrasing-slur-engraver.cc:139
-#, fuzzy
+#: phrasing-slur-engraver.cc:157
 msgid "unterminated phrasing slur"
-msgstr "slur non terminato"
+msgstr "legatura di frase non terminata"
 
-#: piano-pedal-engraver.cc:286
+#: piano-pedal-engraver.cc:298
 #, c-format
 msgid "expect 3 strings for piano pedals, found: %ld"
-msgstr ""
+msgstr "previste tre corde per i pedali del pianoforte, trovate: %ld"
 
-#: piano-pedal-engraver.cc:301 piano-pedal-engraver.cc:312
-#: piano-pedal-performer.cc:93
-#, fuzzy, c-format
+#: piano-pedal-engraver.cc:313 piano-pedal-engraver.cc:324
+#: piano-pedal-performer.cc:104
+#, c-format
 msgid "cannot find start of piano pedal: `%s'"
-msgstr "non risco a trovare una ruling note a %s"
+msgstr "impossibile trovare l'inizio del pedale del pianoforte: «%s»"
 
-#: piano-pedal-engraver.cc:347
-#, fuzzy, c-format
+#: piano-pedal-engraver.cc:359
+#, c-format
 msgid "cannot find start of piano pedal bracket: `%s'"
-msgstr "non risco a trovare una ruling note a %s"
+msgstr "impossibile trovare la parentesi di apertura del pedale del pianoforte: «%s»"
 
-#: program-option-scheme.cc:215
-#, fuzzy, c-format
+#: program-option-scheme.cc:237
+#, c-format
 msgid "no such internal option: %s"
-msgstr "% strumento:"
+msgstr "opzione interna sconosciuta: %s"
 
-#: property-iterator.cc:74
+#: property-iterator.cc:85
 #, c-format
 msgid "not a grob name, `%s'"
-msgstr ""
+msgstr "non è il nome di un grob, «%s»"
 
-#: relative-octave-check.cc:38
+#: relative-octave-check.cc:49
 msgid "Failed octave check, got: "
-msgstr ""
+msgstr "Il controllo dell'ottava è fallito, si è ottenuto:"
 
-#: relocate.cc:44
-#, fuzzy, c-format
+#: relocate.cc:54
+#, c-format
 msgid "Setting %s to %s"
-msgstr "non trovo e non posso creare `%s'"
+msgstr "Si imposta %s su %s"
 
-#: relocate.cc:64
-#, fuzzy, c-format
+#: relocate.cc:74
+#, c-format
 msgid "no such file: %s for %s"
-msgstr "% strumento:"
+msgstr "file inesistente: %s per %s"
 
-#: relocate.cc:74 relocate.cc:92
-#, fuzzy, c-format
+#: relocate.cc:84 relocate.cc:102
+#, c-format
 msgid "no such directory: %s for %s"
-msgstr "% strumento:"
+msgstr "directory inesistente: %s per %s"
 
-#: relocate.cc:84
+#: relocate.cc:94
 #, c-format
 msgid "%s=%s (prepend)\n"
-msgstr ""
+msgstr "%s=%s (prefisso)\n"
 
-#: relocate.cc:114
+#: relocate.cc:124
 #, c-format
 msgid "not relocating, no %s/ or current/ found under %s"
-msgstr ""
+msgstr "non si riloca, non si è incontrato %s/ o current/ in %s"
 
-#: relocate.cc:125
+#: relocate.cc:135
 #, c-format
 msgid "Relocation: compile datadir=%s, new datadir=%s"
-msgstr ""
+msgstr "Rilocazione: compilare datadir=%s, nuova datadir=%s"
 
-#: relocate.cc:138
+#: relocate.cc:148
 #, c-format
 msgid "Relocation: framework_prefix=%s"
-msgstr ""
+msgstr "Rilocazione: framework_prefix=%s"
 
-#: relocate.cc:179
+#: relocate.cc:189
 #, c-format
 msgid "Relocation: is absolute: argv0=%s"
-msgstr ""
+msgstr "Rilocazione: è assoluta: argv0=%s"
 
-#: relocate.cc:186
+#: relocate.cc:196
 #, c-format
 msgid "Relocation: from cwd: argv0=%s"
-msgstr ""
+msgstr "Rilocazione: da cwd: argv0=%s"
 
-#: relocate.cc:195
+#: relocate.cc:205
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
 "argv0=%s"
 msgstr ""
+"Rilocazione: da PATH=%s\n"
+"argv0=%s"
 
-#: relocate.cc:229
+#: relocate.cc:239
 msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR"
-msgstr ""
+msgstr "LILYPONDPREFIX è obsoleto, usare LILYPOND_DATADIR"
 
-#: relocate.cc:356
-#, fuzzy, c-format
+#: relocate.cc:366
+#, c-format
 msgid "Relocation file: %s"
-msgstr "non posso aprire il file: `%s'"
+msgstr "File di rilocazione: %s"
+
+#: relocate.cc:372 source-file.cc:65
+#, c-format
+msgid "cannot open file: `%s'"
+msgstr "impossibile aprire il file: «%s»"
 
-#: relocate.cc:392
+#: relocate.cc:402
 #, c-format
 msgid "Unknown relocation command %s"
-msgstr ""
+msgstr "Comando di rilocazione sconosciuto %s"
+
+#: rest-collision-engraver.cc:70
+msgid "rhythmic head is not part of a rhythmic column"
+msgstr "la testa ritmica non fa parte di una colonna ritmica"
 
-#: rest-collision.cc:145
+#: rest-collision.cc:146
 msgid "cannot resolve rest collision: rest direction not set"
-msgstr ""
+msgstr "impossibile risolvere la collisione di pause: direzione delle pause non impostata"
 
-#: rest-collision.cc:159 rest-collision.cc:204
-#, fuzzy
+#: rest-collision.cc:160 rest-collision.cc:205
 msgid "too many colliding rests"
-msgstr "Troppi crescendi"
+msgstr "troppe collisioni tra pause"
 
-#: rest.cc:132
+#: rest.cc:159
 #, c-format
 msgid "rest `%s' not found"
-msgstr ""
+msgstr "pausa «%s» non trovata"
 
-#: score-engraver.cc:67
-#, fuzzy, c-format
+#: score-engraver.cc:78
+#, c-format
 msgid "cannot find `%s'"
-msgstr "non trovo `%s'"
+msgstr "impossibile trovare «%s»"
 
-#: score-engraver.cc:69
+#: score-engraver.cc:80
 msgid "Music font has not been installed properly."
-msgstr ""
+msgstr "Il tipo di carattere musicale non è stato installato correttamente."
 
-#: score-engraver.cc:71
-#, fuzzy, c-format
+#: score-engraver.cc:82
+#, c-format
 msgid "Search path `%s'"
-msgstr "(Il path di caricamento è `%s'"
+msgstr "Percorso di ricerca «%s»"
 
-#: score-engraver.cc:73
+#: score-engraver.cc:84
 msgid "Aborting"
-msgstr ""
+msgstr "Si sospende l'esecuzione"
 
-#: score.cc:167
-#, fuzzy
+#: score.cc:178
 msgid "already have music in score"
-msgstr "ho bisogno di musica nello spartito"
+msgstr "musica già presente nello spartito"
 
-#: score.cc:168
+#: score.cc:179
 msgid "this is the previous music"
-msgstr ""
+msgstr "questa è la musica precedente"
 
-#: score.cc:173
-#, fuzzy
+#: score.cc:184
 msgid "errors found, ignoring music expression"
-msgstr "ho trovato un errore, /*non sto elaborando lo spartito*/"
+msgstr "trovati degli errori, si ignora l'espressione musicale"
 
 #. FIXME:
-#: script-engraver.cc:102
-msgid "do not know how to interpret articulation: "
-msgstr ""
+#: script-engraver.cc:113
+msgid "do not know how to interpret articulation:"
+msgstr "non so come interpretare l'articolazione:"
 
-#: script-engraver.cc:103
-#, fuzzy
-msgid "scheme encoding: "
-msgstr "Opzioni: "
+#: script-engraver.cc:114
+msgid " scheme encoding: "
+msgstr " codifica di Scheme: "
 
-#: slur-engraver.cc:82
+#: slur-engraver.cc:93
 #, c-format
 msgid "direction of %s invalid: %d"
-msgstr ""
+msgstr "direzione di %s non valida: %d"
 
-#: slur-engraver.cc:151
+#: slur-engraver.cc:162
 msgid "unterminated slur"
-msgstr "slur non terminato"
+msgstr "legatura di portamento non terminata"
 
-#: slur-engraver.cc:163
-#, fuzzy
+#: slur-engraver.cc:174
 msgid "cannot end slur"
-msgstr "non posso maneggiare %s"
+msgstr "impossibile terminare la legatura di portamento"
 
-#: slur.cc:353
+#: slur.cc:369
 #, c-format
 msgid "Ignoring grob for slur: %s. avoid-slur not set?"
-msgstr ""
+msgstr "Si ignora il grob per la legatura di portamento: %s. Non si è impostato avoid-slur?"
 
-#: source-file.cc:74
+#: source-file.cc:85
 #, c-format
 msgid "expected to read %d characters, got %d"
-msgstr ""
+msgstr "si prevedeva di leggere %d caratteri, se ne sono ottenuti %d"
 
-#: spaceable-grob.cc:83
+#: spaceable-grob.cc:94
 #, c-format
 msgid "No spring between column %d and next one"
-msgstr ""
-
-#: staff-symbol-engraver.cc:62
-msgid "staff-span event has no direction"
-msgstr ""
+msgstr "Nessuna separazione tra la colonna %d e la successiva"
 
-#: stem-engraver.cc:92
+#: stem-engraver.cc:103
 msgid "tremolo duration is too long"
-msgstr ""
+msgstr "la durata del tremolo è troppo lunga"
 
 #. FIXME:
-#: stem-engraver.cc:129
+#: stem-engraver.cc:140
 #, c-format
 msgid "adding note head to incompatible stem (type = %d)"
-msgstr ""
+msgstr "si aggiunge la testa della nota a un gambo incompatibile (tipo = %d)"
 
-#: stem-engraver.cc:131
+#: stem-engraver.cc:142
 msgid "maybe input should specify polyphonic voices"
-msgstr ""
+msgstr "forse l'input dovrebbe specificare le voci polifoniche"
 
-#: stem.cc:105
-#, fuzzy
+#: stem.cc:116
 msgid "weird stem size, check for narrow beams"
-msgstr "dimensione del gambo poco ortodossa; check for narrow beams"
+msgstr "strana dimensione del gambo, controllare di non avere travature strette"
 
-#: stem.cc:627
+#: stem.cc:642
 #, c-format
 msgid "flag `%s' not found"
-msgstr ""
+msgstr "non si trova la coda uncinata «%s»"
 
-#: stem.cc:638
+#: stem.cc:658
 #, c-format
 msgid "flag stroke `%s' not found"
-msgstr ""
+msgstr "non si trova il tratto «%s» della coda uncinata"
 
-#: system.cc:179
+#: system.cc:197
 #, c-format
-msgid "Element count %d."
-msgstr ""
+msgid "Element count %d"
+msgstr "Numero degli elementi %d"
 
-#: system.cc:271
+#: system.cc:289
 #, c-format
 msgid "Grob count %d"
-msgstr ""
+msgstr "Numero degli oggetti grafici %d"
 
-#: text-spanner-engraver.cc:60
-#, fuzzy
+#: text-spanner-engraver.cc:73
 msgid "cannot find start of text spanner"
-msgstr "non trovo le estremità di %s"
+msgstr "impossibile trovare l'inizio di uno spanner testuale"
 
-#: text-spanner-engraver.cc:72
-#, fuzzy
+#: text-spanner-engraver.cc:86
 msgid "already have a text spanner"
-msgstr "crescendo non terminato"
+msgstr "spanner testuale già presente"
 
-#: text-spanner-engraver.cc:118
-#, fuzzy
+#: text-spanner-engraver.cc:132
 msgid "unterminated text spanner"
-msgstr "extender non terminato"
+msgstr "spanner testuale non terminato"
 
-#: tie-engraver.cc:262
+#: tie-engraver.cc:116
+msgid "unterminated tie"
+msgstr "legatura di valore non terminata"
+
+#: tie-engraver.cc:312
 msgid "lonely tie"
-msgstr ""
+msgstr "legatura di valore solitaria"
 
 #.
 #. Todo: should make typecheck?
 #.
 #. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
 #.
-#: time-signature-engraver.cc:64
+#: time-signature-engraver.cc:75
 #, c-format
 msgid "strange time signature found: %d/%d"
-msgstr ""
+msgstr "si è incontrato uno strano segno di tempo: %d/%d"
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:83
+#: time-signature.cc:94
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
-msgstr ""
+msgstr "non si è trovato il simbolo di tempo «%s»: si ritorna allo stile numerato"
 
-#: translator-ctors.cc:53
-#, fuzzy, c-format
+#: translator-ctors.cc:65
+#, c-format
 msgid "unknown translator: `%s'"
-msgstr "traduttore sconosciuto `%s'"
+msgstr "traduttore sconosciuto: «%s»"
 
-#: translator-group-ctors.cc:29
+#: translator-group-ctors.cc:40
 #, c-format
 msgid "fatal error. Couldn't find type: %s"
-msgstr ""
+msgstr "errore fatale. Impossibile trovare il tipo: %s"
 
-#: translator-group.cc:146
-#, fuzzy, c-format
+#: translator-group.cc:188
+#, c-format
 msgid "cannot find: `%s'"
-msgstr "non trovo `%s'"
+msgstr "impossibile trovare: «%s»"
 
-#: translator.cc:347
+#: translator.cc:359
 #, c-format
 msgid "Two simultaneous %s events, junking this one"
-msgstr ""
+msgstr "Due eventi %s simultanei, si butta via questo"
 
-#: translator.cc:348
+#: translator.cc:360
 #, c-format
 msgid "Previous %s event here"
-msgstr ""
+msgstr "L'evento %s precedente sta qui"
 
-#: trill-spanner-engraver.cc:84
-#, fuzzy
-msgid "cannot find start of trill spanner"
-msgstr "non trovo le estremità di %s"
+#: ttf.cc:481 ttf.cc:530
+#, c-format
+msgid "font index %d too large for font `%s', using index 0"
+msgstr "l'indice del tipo di carattere %d è troppo grande per il tipo di carattere «%s», si usa l'indice 0"
 
-#: trill-spanner-engraver.cc:96
-#, fuzzy
-msgid "already have a trill spanner"
-msgstr "crescendo non terminato"
+#: ttf.cc:513 ttf.cc:565
+msgid "font index must be non-negative, using index 0"
+msgstr "l'indice del tipo di carattere deve essere non negativo, si usa l'indice 0"
 
-#: tuplet-engraver.cc:96
+#: tuplet-engraver.cc:107
 msgid "No tuplet to end"
-msgstr ""
+msgstr "Nessun gruppo irregolare da terminare"
 
-#: vaticana-ligature-engraver.cc:389
+#: vaticana-ligature-engraver.cc:400
 #, c-format
-msgid "ignored prefix (es) `%s' of this head according to restrictions of the selected ligature style"
-msgstr ""
+msgid "ignored prefix(es) `%s' of this head according to restrictions of the selected ligature style"
+msgstr "prefisso/i «%s» di questa testa ignorato/i in base alle restrizioni dello stile di legatura scelto"
 
-#: vaticana-ligature-engraver.cc:718
+#: vaticana-ligature-engraver.cc:736
 #, c-format
 msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
-msgstr ""
+msgstr "Vaticana_ligature_engraver: si imposta `spacing-increment = %f': ptr =%ul"
 
-#: vaticana-ligature.cc:84
+#: vaticana-ligature.cc:95
 msgid "flexa-height undefined; assuming 0"
-msgstr ""
+msgstr "flexa-height non definito; si assume 0"
 
-#: vaticana-ligature.cc:89
+#: vaticana-ligature.cc:100
 msgid "ascending vaticana style flexa"
-msgstr ""
+msgstr "flexa ascendente in stile vaticana"
 
-#: vaticana-ligature.cc:177
+#: vaticana-ligature.cc:188
 msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
-msgstr ""
+msgstr "Vaticana_ligature: unione nulla (delta_pitch == 0)"
 
 #. fixme: be more verbose.
-#: volta-engraver.cc:100
-#, fuzzy
+#: volta-engraver.cc:111
 msgid "cannot end volta spanner"
-msgstr "non trovo le estremità di %s"
+msgstr "impossibile terminare lo spanner della volta"
 
-#: volta-engraver.cc:110
+#: volta-engraver.cc:121
 msgid "already have a volta spanner, ending that one prematurely"
-msgstr ""
+msgstr "spanner della volta già presente, si termina quello prematuramente"
 
-#: volta-engraver.cc:114
-#, fuzzy
+#: volta-engraver.cc:125
 msgid "also already have an ended spanner"
-msgstr "crescendo non terminato"
+msgstr "è già presente uno spanner terminato"
 
-#: volta-engraver.cc:115
+#: volta-engraver.cc:126
 msgid "giving up"
-msgstr ""
+msgstr "rinuncia"
 
-#: parser.yy:728
+#: parser.yy:816
 msgid "\\paper cannot be used in \\score, use \\layout instead"
-msgstr ""
+msgstr "non si può usare \\paper dentro \\score, usare \\layout al suo posto"
 
-#: parser.yy:752
+#: parser.yy:840
 msgid "need \\paper for paper block"
-msgstr ""
+msgstr "è necessario \\paper per il blocco \"paper\""
 
-#: parser.yy:1211
+#: parser.yy:1365
+msgid "only \\consists takes non-string argument."
+msgstr "solo \\consists prende un argomento diverso da una stringa"
+
+#: parser.yy:1378
 msgid "Grob name should be alphanumeric"
-msgstr ""
+msgstr "Il nome del grob deve essere alfanumerico"
 
-#: parser.yy:1509
+#: parser.yy:1687
 msgid "second argument must be pitch list"
-msgstr ""
+msgstr "il secondo argomento deve essere una lista di altezze"
 
-#: parser.yy:1536 parser.yy:1541 parser.yy:2006
-#, fuzzy
+#: parser.yy:1714 parser.yy:1719 parser.yy:2192
 msgid "have to be in Lyric mode for lyrics"
-msgstr "bisogna essere in Lyric mode per i testi"
+msgstr "bisogna essere in modo \"Lyric\" per i testi"
 
-#: parser.yy:1638
+#: parser.yy:1816
 msgid "expecting string as script definition"
-msgstr ""
+msgstr "ci si aspetta una stringa come definizione dello script"
 
-#: parser.yy:1793 parser.yy:1843
+#: parser.yy:1971 parser.yy:2022
 #, c-format
 msgid "not a duration: %d"
 msgstr "non è una durata: %d"
 
-#: parser.yy:1960
-#, fuzzy
+#: parser.yy:2146
 msgid "have to be in Note mode for notes"
-msgstr "bisogna essere in Note mode per le note"
+msgstr "bisogna essere in modo \"Note\" per le note"
 
-#: parser.yy:2021
-#, fuzzy
+#: parser.yy:2207
 msgid "have to be in Chord mode for chords"
-msgstr "bisogna essere in Chord mode per gli accordi"
+msgstr "bisogna essere in modo \"Chord\" per gli accordi"
 
-#: lexer.ll:179
+#: lexer.ll:190
 msgid "stray UTF-8 BOM encountered"
-msgstr ""
+msgstr "si è incontrato un segno BOM UTF-8 isolato"
 
-#: lexer.ll:183
+#: lexer.ll:194
 msgid "Skipping UTF-8 BOM"
-msgstr ""
+msgstr "Si ignora il BOM UTF-8"
 
-#: lexer.ll:238
-#, fuzzy, c-format
+#: lexer.ll:249
+#, c-format
 msgid "Renaming input to: `%s'"
-msgstr "Genero le voci..."
+msgstr "Si rinomina l'input in: «%s»"
 
-#: lexer.ll:255
+#: lexer.ll:266
 msgid "quoted string expected after \\version"
-msgstr ""
+msgstr "\\version deve essere seguito da una stringa compresa tra virgolette"
 
-#: lexer.ll:259
+#: lexer.ll:270
 msgid "quoted string expected after \\sourcefilename"
-msgstr ""
+msgstr "\\sourcefilename deve essere seguito da una stringa compresa tra virgolette"
 
-#: lexer.ll:263
+#: lexer.ll:274
 msgid "integer expected after \\sourcefileline"
-msgstr ""
+msgstr "\\sourcefileline deve essere seguito da un intero"
 
-#: lexer.ll:276
+#: lexer.ll:287
 msgid "EOF found inside a comment"
-msgstr "ho trovato un EOF in un commento"
+msgstr "fine del file (EOF) trovata in un commento"
 
-#: lexer.ll:291
+#: lexer.ll:302
 msgid "\\maininput not allowed outside init files"
-msgstr ""
+msgstr "\\maininput non permesso fuori dai file di inizializzazione"
 
-#: lexer.ll:315
-#, fuzzy, c-format
+#: lexer.ll:326
+#, c-format
 msgid "wrong or undefined identifier: `%s'"
-msgstr "indentificatore non definito: `%s'"
+msgstr "indentificatore errato o non definito: «%s»"
 
 #. backup rule
-#: lexer.ll:324
+#: lexer.ll:335
 msgid "end quote missing"
-msgstr ""
+msgstr "mancano le virgolette di chiusura"
 
-#: lexer.ll:469
+#: lexer.ll:485
 msgid "Brace found at end of lyric.  Did you forget a space?"
-msgstr ""
+msgstr "Trovata una parentesi alla fine del testo.  È stato dimenticato uno spazio?"
 
-#: lexer.ll:582
+#: lexer.ll:595
 msgid "Brace found at end of markup.  Did you forget a space?"
-msgstr ""
+msgstr "Trovata una parentesi alla fine della marcatura.  È stato dimenticato uno spazio?"
 
-#: lexer.ll:686
-#, fuzzy, c-format
+#: lexer.ll:699
+#, c-format
 msgid "invalid character: `%c'"
-msgstr "carattere illegale: `%c'"
+msgstr "carattere non valido: «%c»"
 
-#: lexer.ll:801 lexer.ll:802
+#: lexer.ll:814 lexer.ll:815
 #, c-format
 msgid "unknown escaped string: `\\%s'"
-msgstr "stringa di escape sconosciuta: `\\%s'"
+msgstr "stringa di escape sconosciuta: «\\%s»"
 
-#: lexer.ll:907 lexer.ll:908
+#: lexer.ll:924 lexer.ll:925
 #, c-format
 msgid "file too old: %s (oldest supported: %s)"
-msgstr ""
+msgstr "file troppo vecchio: %s (il più vecchio che si può gestire è: %s)"
 
-#: lexer.ll:908 lexer.ll:909
+#: lexer.ll:925 lexer.ll:926
 msgid "consider updating the input with the convert-ly script"
-msgstr ""
+msgstr "si consideri di aggiornare l'input con lo script convert-ly"
 
-#: lexer.ll:914 lexer.ll:915
+#: lexer.ll:931 lexer.ll:932
 #, c-format
 msgid "program too old: %s (file requires: %s)"
-msgstr ""
+msgstr "programma troppo vecchio: %s (il file richiede: %s)"
 
-#: backend-library.scm:19 lily.scm:767 ps-to-png.scm:58
-#, fuzzy, scheme-format
+#: backend-library.scm:35 ps-to-png.scm:66
+#, scheme-format
 msgid "Invoking `~a'..."
-msgstr "Genero le voci..."
+msgstr "Invocazione di «~a»..."
 
-#: backend-library.scm:28
+#: backend-library.scm:45
 #, scheme-format
 msgid "`~a' failed (~a)"
-msgstr ""
+msgstr "«~a» fallito (~a)"
 
-#: backend-library.scm:117 framework-tex.scm:344 framework-tex.scm:369
-#, fuzzy, scheme-format
+#: backend-library.scm:130
+#, scheme-format
 msgid "Converting to `~a'..."
-msgstr "Genero le voci..."
+msgstr "Conversione a «~a»..."
 
-#: backend-library.scm:130
-#, fuzzy, scheme-format
+#. Do not try to guess the name of the png file,
+#. GS produces PNG files like BASE-page%d.png.
+#: backend-library.scm:140
+#, scheme-format
 msgid "Converting to ~a..."
-msgstr "Genero le voci..."
+msgstr "Conversione a ~a..."
 
-#: backend-library.scm:168
-#, fuzzy, scheme-format
+#: backend-library.scm:178
+#, scheme-format
 msgid "Writing header field `~a' to `~a'..."
-msgstr "scrivo il file delle dipendenze: `%s'..."
+msgstr "Scrittura del campo di intestazione «~a» in «~a»..."
+
+#: backend-library.scm:228
+#, scheme-format
+msgid "missing stencil expression `~S'"
+msgstr "manca l'espressione di stencil «~S»"
+
+#: chord-entry.scm:50
+#, scheme-format
+msgid "Spurious garbage following chord: ~A"
+msgstr "Informazione incomprensibile dopo l'accordo: ~A"
 
-#: define-context-properties.scm:20 define-grob-properties.scm:10
-#: define-music-properties.scm:10
+#: define-context-properties.scm:31 define-grob-properties.scm:21
+#: define-music-properties.scm:21
 #, scheme-format
 msgid "symbol ~S redefined"
-msgstr ""
+msgstr "simbolo ~S ridefinito"
 
-#: define-event-classes.scm:119
+#: define-event-classes.scm:78
+msgid "All classes must be the last in their matrilineal line."
+msgstr "Tutte le classi devono essere le ultime della propria linea di discendenza."
+
+#: define-event-classes.scm:82
+msgid "All classes must have a well-defined pedigree in the existing class hierarchy."
+msgstr "Tutte le classi devono avere un'ascendenza ben definita nella gerarchia di classe esistente."
+
+#: define-event-classes.scm:148
 #, scheme-format
 msgid "event class ~A seems to be unused"
-msgstr ""
+msgstr "la classe di evento ~A sembra essere non utilizzata"
 
 #. should be programming-error
-#: define-event-classes.scm:125
+#: define-event-classes.scm:154
 #, scheme-format
 msgid "translator listens to nonexisting event class ~A"
-msgstr ""
+msgstr "il traduttore è in ascolto della classe di evento ~A inesistente"
 
-#: define-markup-commands.scm:296
+#: define-markup-commands.scm:803
 msgid "no systems found in \\score markup, does it have a \\layout block?"
-msgstr ""
+msgstr "non si è trovato alcun sistema nella marcatura \\score, contiene un blocco \\layout?"
+
+#: define-markup-commands.scm:2571
+#, scheme-format
+msgid "Cannot find glyph ~a"
+msgstr "Impossibile trovare il glifo ~a"
+
+#: define-markup-commands.scm:2831
+#, scheme-format
+msgid "no brace found for point size ~S "
+msgstr "non c'è una graffa che abbia una dimensione di ~S punti"
+
+#: define-markup-commands.scm:2832
+#, scheme-format
+msgid "defaulting to ~S pt"
+msgstr "si applica la dimensione predefinita ~S pt"
 
-#: define-markup-commands.scm:1310
-#, fuzzy, scheme-format
+#: define-markup-commands.scm:2985
+#, scheme-format
 msgid "not a valid duration string: ~a"
-msgstr "non è una durata: %d"
+msgstr "non è una durata valida per la stringa: ~a"
 
-#: define-music-types.scm:670
-#, fuzzy, scheme-format
+#: define-music-types.scm:725
+#, scheme-format
 msgid "symbol expected: ~S"
-msgstr "aspettavo %s"
+msgstr "simbolo atteso: ~S"
 
-#: define-music-types.scm:673
-#, fuzzy, scheme-format
+#: define-music-types.scm:728
+#, scheme-format
 msgid "cannot find music object: ~S"
-msgstr "non trovo `%s'"
+msgstr "impossibile trovare l'oggetto musicale: ~S"
 
-#: define-music-types.scm:692
-#, fuzzy, scheme-format
+#: define-music-types.scm:747
+#, scheme-format
 msgid "unknown repeat type `~S'"
-msgstr "tipo di chiave sconosciuto"
+msgstr "tipo di ripetizione sconosciuto «~S»"
 
-#: define-music-types.scm:693
-msgid "See music-types.scm for supported repeats"
-msgstr ""
+#: define-music-types.scm:748
+msgid "See define-music-types.scm for supported repeats"
+msgstr "Si veda define-music-types.scm per le ripetizioni supportate"
 
-#: document-backend.scm:91
+#: document-backend.scm:132
 #, scheme-format
 msgid "pair expected in doc ~s"
-msgstr ""
+msgstr "si aspettava una coppia nel documento ~s"
 
-#: document-backend.scm:135
-#, fuzzy, scheme-format
+#: document-backend.scm:189
+#, scheme-format
 msgid "cannot find interface for property: ~S"
-msgstr "non riesco a trovare il carattere `%s'"
+msgstr "impossibile trovare un'interfaccia per le proprietà: ~S"
 
-#: document-backend.scm:145
-#, fuzzy, scheme-format
+#: document-backend.scm:199
+#, scheme-format
 msgid "unknown Grob interface: ~S"
-msgstr "tipo di chiave sconosciuto"
+msgstr "interfaccia del Grob sconosciuta: ~S"
 
-#: documentation-lib.scm:45
-#, fuzzy, scheme-format
+#: documentation-lib.scm:59
+#, scheme-format
 msgid "Processing ~S..."
-msgstr "Elaboro..."
+msgstr "Elaborazione di ~S..."
 
-#: documentation-lib.scm:154
-#, fuzzy, scheme-format
+#: documentation-lib.scm:176
+#, scheme-format
 msgid "Writing ~S..."
-msgstr "Genero le voci..."
+msgstr "Scrittura di ~S..."
 
-#: documentation-lib.scm:176
-#, fuzzy, scheme-format
+#: documentation-lib.scm:198
+#, scheme-format
 msgid "cannot find description for property ~S (~S)"
-msgstr "non riesco a trovare il carattere `%s'"
+msgstr "impossibile trovare la descrizione per la proprietà ~S (~S)"
+
+#: flag-styles.scm:142
+#, scheme-format
+msgid "flag stroke `~a' or `~a' not found"
+msgstr "tipo di coda uncinata sconosciuto: «~a» o «~a»"
 
-#: framework-eps.scm:90
-#, fuzzy, scheme-format
+#: framework-eps.scm:108
+#, scheme-format
 msgid "Writing ~a..."
-msgstr "Genero le voci..."
+msgstr "Scrittura di ~a..."
 
-#: framework-ps.scm:282
+#: framework-ps.scm:250
 #, scheme-format
 msgid "cannot embed ~S=~S"
-msgstr ""
+msgstr "impossibile inserire ~S=~S"
 
-#: framework-ps.scm:335
+#: framework-ps.scm:291
 #, scheme-format
 msgid "cannot extract file matching ~a from ~a"
-msgstr ""
+msgstr "impossibile estrarre il file corrispondente a ~a a partire da ~a"
 
-#: framework-ps.scm:352
+#: framework-ps.scm:309
 #, scheme-format
 msgid "do not know how to embed ~S=~S"
-msgstr ""
+msgstr "impossibile realizzare l'integrazione ~S=~S"
 
-#: framework-ps.scm:383
+#: framework-ps.scm:334
 #, scheme-format
 msgid "do not know how to embed font ~s ~s ~s"
-msgstr ""
-
-#: framework-ps.scm:750
-#, scheme-format
-msgid "cannot convert <stdout> to ~S"
-msgstr ""
-
-#: framework-ps.scm:769 framework-ps.scm:772
-#, scheme-format
-msgid "cannot generate ~S using the postscript back-end"
-msgstr ""
+msgstr "non so come inserire il tipo di carattere ~s ~s ~s"
 
-#: framework-ps.scm:779
+#: framework-ps.scm:639
 msgid ""
 "\n"
-"The PostScript backend does not support the system-by-system \n"
-"output. For that, use the EPS backend instead,\n"
+"The PostScript backend does not support the\n"
+"system-by-system output.  For that, use the EPS backend instead,\n"
 "\n"
 "  lilypond -dbackend=eps FILE\n"
 "\n"
@@ -2595,200 +3120,270 @@ msgid ""
 "  %% Start cut-&-pastable-section\n"
 "  %% ****************************************************************\n"
 msgstr ""
+"\n"
+"Il backend PostScript non supporta l'output\n"
+"di sistemi individuali. Si usi il backend EPS al suo posto.\n"
+"\n"
+"  lilypond -dbackend=eps FILE\n"
+"\n"
+"Se avete tagliato e incollato un frammento di codice lilypond da una pagina web,\n"
+"assicuratevi di togliere soltanto ciò che precede\n"
+"\n"
+"  %% ****************************************************************\n"
+"  %% Start cut-&-pastable-section\n"
+"  %% ****************************************************************\n"
 
-#: framework-tex.scm:361
+#: framework-svg.scm:84
 #, scheme-format
-msgid "TeX file name must not contain whitespace: `~a'"
-msgstr ""
+msgid "Updating font into: ~a"
+msgstr "Aggiornamento dei tipi di carattere in: ~a"
 
-#: graphviz.scm:53
-#, fuzzy, scheme-format
+#: graphviz.scm:64
+#, scheme-format
 msgid "Writing graph `~a'..."
-msgstr "Genero le voci..."
+msgstr "Scrittura del grafico «~a»..."
 
-#: layout-beam.scm:29
+#: layout-beam.scm:38
 #, scheme-format
 msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
-msgstr ""
+msgstr "Errore nella definizione delle travature. Previste (~S,~S), trovate ~S."
 
-#: layout-beam.scm:46
+#: layout-beam.scm:52
 #, scheme-format
 msgid "Error in beam quanting.  Expected ~S 0, found ~S."
-msgstr ""
+msgstr "Errore nella definizione delle travature.  Previste ~S 0, trovate ~S."
 
-#: layout-page-layout.scm:124
-msgid "Can't fit systems on page -- ignoring between-system-padding"
+#: lily-library.scm:747
+msgid ""
+"Find the index between @var{start} and @var{end} (an integer)\n"
+"which will produce the closest match to @var{target-val} when\n"
+"applied to function @var{getter}."
 msgstr ""
+"Cerca un indice compreso tra @var{start} e @var{end} (un intero)\n"
+"che produrrà l'abbinamento più vicino al @var{target-val} quando\n"
+"applicato alla funzione @var{getter}."
 
-#: layout-page-layout.scm:458
-#, fuzzy
-msgid "Calculating page breaks..."
-msgstr "Calcolo delle posizioni della colonne..."
-
-#: lily-library.scm:583
-#, fuzzy, scheme-format
+#: lily-library.scm:821
+#, scheme-format
 msgid "unknown unit: ~S"
-msgstr "traduttore sconosciuto `%s'"
+msgstr "unità sconosciuta: ~S"
+
+#: lily-library.scm:847 lily-library.scm:856
+msgid "warning:"
+msgstr "attenzione:"
 
-#: lily-library.scm:617
+#: lily-library.scm:849
 #, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
-msgstr ""
+msgstr "dichiarazione di \\version assente; si aggiunga ~a per compatibilità futura"
 
-#: lily-library.scm:625
+#: lily-library.scm:857
 msgid "old relative compatibility not used"
-msgstr ""
+msgstr "compatibilità col vecchio modo relativo non utilizzata"
 
-#: lily.scm:177
-#, fuzzy, scheme-format
+#: lily.scm:282
+#, scheme-format
 msgid "cannot find: ~A"
-msgstr "non trovo"
+msgstr "impossibile trovare ~A"
 
-#: lily.scm:242
+#: lily.scm:342
 #, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
-msgstr ""
+msgstr "tipo di argomento errato per ~a. Previsto ~a, trovato ~s"
 
-#: lily.scm:634
+#: lily.scm:704
+msgid "Compilation successfully completed"
+msgstr "Compilazione completata con successo"
+
+#: lily.scm:705
+msgid "Compilation completed with warnings or errors"
+msgstr "Compilazione completata con avvertimenti o errori"
+
+#: lily.scm:767
 #, scheme-format
 msgid "job ~a terminated with signal: ~a"
-msgstr ""
+msgstr "il lavoro ~a è terminato col segnale ~a"
 
-#: lily.scm:637
+#: lily.scm:770
 #, scheme-format
 msgid ""
 "logfile ~a (exit ~a):\n"
 "~a"
 msgstr ""
+"file di registro ~a (uscita ~a):\n"
+"~a"
 
-#: lily.scm:664 lily.scm:757
+#: lily.scm:792 lily.scm:870
 #, scheme-format
 msgid "failed files: ~S"
-msgstr ""
+msgstr "errore nei file: ~S"
 
-#: lily.scm:747
-#, fuzzy, scheme-format
+#: lily.scm:861
+#, scheme-format
 msgid "Redirecting output to ~a..."
-msgstr "L'output stampato è inviato a %s..."
+msgstr "Redirezione dell'output verso ~a..."
+
+#: lily.scm:880
+#, scheme-format
+msgid "Invoking `~a'...\n"
+msgstr "Chiamata di «~a»...\n"
 
-#: ly-syntax-constructors.scm:40
+#: ly-syntax-constructors.scm:51
 msgid "Music head function must return Music object"
-msgstr ""
+msgstr "Una funzione musicale principale deve restituire un Oggetto musicale"
 
-#: ly-syntax-constructors.scm:139
+#: ly-syntax-constructors.scm:176
 #, scheme-format
 msgid "Invalid property operation ~a"
-msgstr ""
+msgstr "Operazione di proprietà non valida: ~a"
 
-#: markup.scm:124
+#: markup.scm:223
 #, scheme-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
-msgstr ""
+msgstr "Numero errato di argomenti. Attesi: ~A, trovati ~A: ~S"
 
-#: markup.scm:130
+#: markup.scm:229
 #, scheme-format
 msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
-msgstr ""
+msgstr "Argomento non valido in posizione ~A.  Atteso ~A, trovato ~S."
 
-#: music-functions.scm:228
+#: markup.scm:292
+#, scheme-format
+msgid "Not a markup command: ~A"
+msgstr "Non è un comando di tipo \"markup\": ~A"
+
+#: music-functions.scm:265
 msgid "More alternatives than repeats.  Junking excess alternatives"
-msgstr ""
+msgstr "Più alternative che ripetizioni.  Vengono tralasciate le alternative in eccesso"
 
-#: music-functions.scm:240
+#: music-functions.scm:294
 #, scheme-format
 msgid "invalid tremolo repeat count: ~a"
-msgstr ""
+msgstr "numero di ripetizioni di tremolo non valido: ~a"
 
-#: music-functions.scm:248
+#: music-functions.scm:601
 #, scheme-format
-msgid "expecting 2 elements for chord tremolo, found ~a"
-msgstr ""
-
-#: music-functions.scm:564
-#, fuzzy, scheme-format
 msgid "music expected: ~S"
-msgstr "aspettavo %s"
+msgstr "musica attesa: ~S"
 
 #. FIXME: uncomprehensable message
-#: music-functions.scm:614
+#: music-functions.scm:649
 #, scheme-format
 msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
-msgstr ""
+msgstr "Controllo di battuta fallito.  Avrebbe dovuto trovarsi a ~a invece che a ~a"
 
-#: music-functions.scm:764
-#, fuzzy, scheme-format
+#: music-functions.scm:828
+#, scheme-format
 msgid "cannot find quoted music: `~S'"
-msgstr "non trovo il file: `%s'"
+msgstr "impossibile trovare la musica citata: «~S»"
+
+#: music-functions.scm:964
+msgid "Add @var{octave-shift} to the octave of @var{pitch}."
+msgstr "Aggiungere @var{octave-shift} all'ottava di @var{altezza}."
+
+#: music-functions.scm:1019
+#, scheme-format
+msgid "Unknown octaveness type: ~S "
+msgstr "Tipo di ottava sconosciuto: ~S "
+
+#: music-functions.scm:1020
+msgid "Defaulting to 'any-octave."
+msgstr "Applicazione del valore predefinito 'any-octave."
 
-#: music-functions.scm:961
-#, fuzzy, scheme-format
+#: music-functions.scm:1355
+#, scheme-format
 msgid "unknown accidental style: ~S"
-msgstr "stringa di escape sconosciuta: `\\%s'"
+msgstr "stile di alterazione sconosciuto: ~S"
 
-#: output-ps.scm:276
-msgid "utf-8-string encountered in PS backend"
-msgstr ""
+#: output-ps.scm:289 output-svg.scm:550
+#, scheme-format
+msgid "unknown line-cap-style: ~S"
+msgstr "line-cap-style sconosciuto: ~S"
+
+#: output-ps.scm:294 output-svg.scm:556
+#, scheme-format
+msgid "unknown line-join-style: ~S"
+msgstr "line-join-style sconosciuto: ~S"
 
-#: output-svg.scm:45
+#: output-svg.scm:47
 #, scheme-format
 msgid "undefined: ~S"
-msgstr ""
+msgstr "~S indefinito"
 
-#: output-svg.scm:135
+#: output-svg.scm:151
 #, scheme-format
 msgid "cannot decypher Pango description: ~a"
-msgstr ""
+msgstr "impossibile decifrare la descrizione di Pango: ~a"
 
-#: output-tex.scm:96
-#, fuzzy, scheme-format
-msgid "cannot find ~a in ~a"
-msgstr "non trovo le estremità di %s"
+#: output-svg.scm:231
+msgid "Glyph must have a unicode value"
+msgstr "Un glifo deve avere un valore unicode"
 
-#: paper.scm:85
-#, fuzzy
+#: output-svg.scm:283 output-svg.scm:293
+#, scheme-format
+msgid "cannot find SVG font ~S"
+msgstr "impossibile trovare il tipo di carattere SVG ~S"
+
+#: paper.scm:115
 msgid "set-global-staff-size: not in toplevel scope"
-msgstr "non c'è un traduttore di livello massimo"
+msgstr "set-global-staff-size: non è nell'ambito di livello più alto"
 
-#: paper.scm:133
+#: paper.scm:296
 #, scheme-format
 msgid "This is not a \\layout {} object, ~S"
-msgstr ""
+msgstr "Questo non è un oggetto \\layout {}, ~S"
 
-#: paper.scm:145
-#, fuzzy, scheme-format
-msgid "Unknown papersize: ~a"
-msgstr "variabile paper sconosciuta: `%s'"
+#: paper.scm:308
+#, scheme-format
+msgid "Unknown paper size: ~a"
+msgstr "Dimensione del foglio sconosciuta: ~a"
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:160
+#: paper.scm:323
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
-msgstr ""
+msgstr "Si deve usare #(set-paper-size .. ) all'interno di \\paper { ... }"
 
-#: parser-clef.scm:129
-#, fuzzy, scheme-format
+#: parser-clef.scm:140
+#, scheme-format
 msgid "unknown clef type `~a'"
-msgstr "tipo di chiave sconosciuto"
+msgstr "tipo di chiave sconosciuto «~a»"
 
-#: parser-clef.scm:130
+#: parser-clef.scm:141
 #, scheme-format
 msgid "supported clefs: ~a"
-msgstr ""
+msgstr "chiavi supportate: ~a"
 
-#: ps-to-png.scm:64
+#: ps-to-png.scm:72
 #, scheme-format
 msgid "~a exited with status: ~S"
-msgstr ""
+msgstr "~a è terminato con stato ~S"
 
-#: to-xml.scm:180
+#: to-xml.scm:191
 #, scheme-format
 msgid "assertion failed: ~S"
-msgstr ""
+msgstr "errore di asserzione: ~S"
+
+#, fuzzy
+#~ msgid "deprecated function called: %s"
+#~ msgstr "non riesco a trovare il carattere `%s'"
+
+#, fuzzy
+#~ msgid "generate DVI (tex backend only)"
+#~ msgstr "vincoli degenerati"
 
 #, fuzzy
 #~ msgid "do not generate printed output"
 #~ msgstr "vincoli degenerati"
 
+#, fuzzy
+#~ msgid "cannot find start of trill spanner"
+#~ msgstr "non trovo le estremità di %s"
+
+#, fuzzy
+#~ msgid "already have a trill spanner"
+#~ msgstr "crescendo non terminato"
+
 #~ msgid "silly pitch"
 #~ msgstr "indicazione altezza priva di senso"
 
@@ -3109,10 +3704,6 @@ msgstr ""
 #~ msgid "unbound spanner `%s'"
 #~ msgstr "Spanner non legato `%s'"
 
-#, fuzzy
-#~ msgid "cannot find start of slur"
-#~ msgstr "non trovo le estremità di %s"
-
 #, fuzzy
 #~ msgid "Error syncing file (disk full?)"
 #~ msgstr "errore nel sincronizzare il file (disco pieno?)"
@@ -3419,9 +4010,6 @@ msgstr ""
 #~ msgid "cannot abbreviate tuplet"
 #~ msgstr "non posso abbreviare"
 
-#~ msgid "Invalid midi format"
-#~ msgstr "Formato midi non valido"
-
 #~ msgid "Parsing...\n"
 #~ msgstr "Interpreto...\n"
 
index 012983f152c319f87e03a3f08c2048accb6f35b6..82b5917d1c2730bc8b88d9adaa2621806e45e7f0 100644 (file)
              (exception-moments (ending-moments
                                   exception-grouping 0 grouping-moment)))
 
-        (if (= dir START)
+       (if (= dir START)
             ;; Start rules
-            (or (not (equal? time-signature-fraction '(3 . 4))) ;; start anywher if not 3/4
-                (beat-end? pos beat-endings)  ;; are we at start of beat?
-                (and (not (equal? test-beam base-moment)) ;; is beat split?
+            (or (not (equal? time-signature-fraction '(3 . 4))) ;; start anywhere if not 3/4
+                (= (ly:moment-main-numerator pos) 0) ;; start at beginning of measure
+               (not (null? exception-grouping)) ;; don't use special rules if exception
+               (beat-end? pos beat-endings)  ;; are we at start of beat?
+               (and (not (equal? test-beam base-moment)) ;; is beat split?
                      (not (beat-end? (ly:moment-add pos test-beam)
                                      beat-endings))))  ;; will this note end the beat
             ;; End rules
index 539288b8439f34bcc0dc2be517e9b6f882b92e3a..022ae640e1f208b82292ae682b88c72e274f502b 100644 (file)
@@ -50,8 +50,9 @@
     (break-span-event . (break-dynamic-span-event))
     (pedal-event . (sostenuto-event sustain-event una-corda-event))
     (rhythmic-event . (lyric-event melodic-event multi-measure-rest-event
-                                  percent-event
-                                  rest-event skip-event bass-figure-event))
+                                  double-percent-event percent-event
+                                  repeat-slash-event rest-event
+                                  skip-event bass-figure-event))
     (melodic-event . (cluster-note-event note-event))
     (() . (Announcement))
     (Announcement . (AnnounceNewContext))
index 59f756e8a0ccb709b0db7f39230f5a9d4c1550a0..15a2695e5f2283a21839234fd5efd07dd63580c5 100644 (file)
        (slope . 1.0)
        (stencil . ,ly:percent-repeat-item-interface::double-percent)
        (thickness . 0.48)
-       (width . 2.0)
        (meta . ((class . Item)
                 (interfaces . (break-aligned-interface
                                font-interface
                                side-position-interface
                                text-interface))))))
 
+    (DoubleRepeatSlash
+     . (
+       (dot-negative-kern . 0.75)
+       (font-encoding . fetaMusic)
+       (slash-negative-kern . 1.6)
+       (slope . 1.0)
+       (stencil . ,ly:percent-repeat-item-interface::beat-slash)
+       (thickness . 0.48)
+       (meta . ((class . Item)
+                (interfaces . (font-interface
+                               percent-repeat-interface
+                               percent-repeat-item-interface
+                               rhythmic-grob-interface))))))
+
     (DynamicLineSpanner
      . (
        (axes . (,Y))
                        (right-edge . (extra-space . 0.5))
                        (first-note . (fixed-space . 2.5))))
        (stencil . ,ly:key-signature-interface::print)
+       (extra-spacing-width . (0.0 . 0.5))
        (Y-offset . ,ly:staff-symbol-referencer::callback)
        (meta . ((class . Item)
                 (interfaces . (break-aligned-interface
                        (right-edge . (extra-space . 0.5))
                        (first-note . (fixed-space . 2.5))))
        (stencil . ,ly:key-signature-interface::print)
+       (extra-spacing-width . (0.0 . 0.5))
        (Y-offset . ,ly:staff-symbol-referencer::callback)
        (meta . ((class . Item)
                 (interfaces . (break-aligned-interface
        (before-line-breaking . ,ly:paper-column::before-line-breaking)
        (full-measure-extra-space . 1.0)
        (horizontal-skylines . ,ly:separation-item::calc-skylines)
-       (skyline-vertical-padding . 0.15)
+       ;; sufficient padding to prevent ledger lines from moving over/under
+       (skyline-vertical-padding . 0.6)
        ;;                    (stencil . ,ly:paper-column::print)
 
        (line-break-permission . allow)
 
     (RepeatSlash
      . (
+       (slash-negative-kern . 0.85)
        (slope . 1.7)
        (stencil . ,ly:percent-repeat-item-interface::beat-slash)
        (thickness . 0.48)
index b2db381b7e4f372da16c35a08650f90d83589430..b18a10f3adf551cdd0d6fd4adb8ec020fa31b2c0 100644 (file)
@@ -157,6 +157,8 @@ or down-stem?")
 
      (repeat-count ,integer? "Do a @code{\\repeat} how often?")
 
+     (slash-count ,integer? "The number of slashes in a single-beat repeat.
+If zero, signals a beat containing varying durations.")
      (span-direction ,ly:dir? "Does this start or stop a spanner?")
      (span-type ,symbol? "What kind of dynamic spanner should be created?
 Options are @code{'text} and @code{'hairpin}.")
index 43b826e8b8ab4d7a9ecf7a30c9412c718c0cdc94..cdf5c0a6a1e1e92b5a8ef2f301894e0a53a5f031 100644 (file)
@@ -175,6 +175,11 @@ An alternative syntax is @var{note}@code{\\decr} @dots{}
                  event))
        ))
 
+    (DoublePercentEvent
+     . ((description . "Used internally to signal double percent repeats.")
+       (types . (general-music event double-percent-event rhythmic-event))
+       ))
+
     (EpisemaEvent
      . ((description . "Begin or end an episema.")
        (types . (general-music span-event event episema-event))
@@ -375,7 +380,7 @@ as separate voices.")
        ))
 
     (PercentRepeatedMusic
-     . ((description . "Repeats encoded by percents.")
+     . ((description . "Repeats encoded by percents and slashes.")
        (iterator-ctor . ,ly:percent-repeat-iterator::constructor)
        (start-callback .  ,ly:repeated-music::first-start)
        (length-callback . ,ly:repeated-music::unfolded-music-length)
@@ -450,6 +455,11 @@ Syntax: @code{\\unset @var{context}.@var{prop}}")
        (types . (general-music repeated-music))
        ))
 
+    (RepeatSlashEvent
+     . ((description . "Used internally to signal beat repeats.")
+       (types . (general-music event repeat-slash-event rhythmic-event))
+       ))
+
     (RepeatTieEvent
      . ((description . "Ties for starting a second volta bracket.")
        (types . (general-music event repeat-tie-event))
index 08e656105873400de70aae5280f8768c3ceb1cac..97b6c34c267eed424d86bac2000cb524cffc79e4 100644 (file)
@@ -403,6 +403,7 @@ LilyPond safe mode.  The syntax is the same as `define*-public'."
     "chord-generic-names.scm"
     "stencil.scm"
     "markup.scm"
+    "modal-transforms.scm"
     "music-functions.scm"
     "part-combiner.scm"
     "autochange.scm"
diff --git a/scm/modal-transforms.scm b/scm/modal-transforms.scm
new file mode 100644 (file)
index 0000000..cdaa015
--- /dev/null
@@ -0,0 +1,222 @@
+;;; modal-transforms.scm --- Modal transposition, inversion, and retrograde.
+
+;; Copyright (C) 2011 Ellis & Grant, Inc.
+
+;; Author: Michael Ellis <michael.f.ellis@gmail.com>
+
+;; COPYRIGHT NOTICE
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+;; for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; if not, write to the Free Software
+;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
+
+
+(define (transposer-factory scale)
+  "Returns a transposer for the specified @var{scale}.
+It is an error if either argument to a transposer is not in the scale
+it was created with.  A transposer knows nothing about LilyPond
+internals.  It treats scales as an ordered list of arbitrary items and
+pitches as members of a scale.
+"
+
+  (define (index item lis)
+    (list-index (lambda (x) (equal? item x)) lis))
+
+  (lambda (from-pitch to-pitch pitch)
+    (cond
+     ((not (member from-pitch scale))
+      (ly:warning (_i "'from' pitch not in scale; ignoring"))
+      pitch)
+
+     ((not (member to-pitch scale))
+      (ly:warning (_i "'to' pitch not in scale; ignoring"))
+      pitch)
+
+     ((not (member pitch scale))
+      (ly:warning (_i "pitch to be transposed not in scale; ignoring"))
+      pitch)
+
+     (else
+      (list-ref scale
+               (modulo
+                (+ (index pitch scale)
+                   (- (index to-pitch scale)
+                      (index from-pitch scale)))
+                (length scale)))))))
+
+(define (inverter-factory scale)
+  "Returns an inverter for the specified @var{scale}.
+It is an error if either argument to an inverter
+is not in the scale it was created with.  An inverter knows nothing
+about LilyPond internals.  It treats scales as an ordered list of
+arbitrary items and pitches as members of a scale.
+"
+
+  (define (index item lis)
+    (list-index (lambda (x) (equal? item x)) lis))
+
+  (lambda (around-pitch to-pitch pitch)
+    (cond
+     ((not (member around-pitch scale))
+      (ly:warning (_i "'around' pitch not in scale; ignoring"))
+      pitch)
+
+     ((not (member to-pitch scale))
+      (ly:warning (_i "'to' pitch not in scale; ignoring"))
+      pitch)
+
+     ((not (member pitch scale))
+      (ly:warning (_i "pitch to be inverted not in scale; ignoring"))
+      pitch)
+
+     (else
+      (list-ref scale
+               (modulo
+                (+ (index to-pitch scale)
+                   (- (index around-pitch scale)
+                      (index pitch scale)))
+                (length scale)))))))
+
+(define (replicate-modify lis n mod-proc)
+  "Apply @code{(mod-proc lis n)} to each element of a list and
+concatenate the results.  Knows nothing of LilyPond internals."
+  (cond
+   ((< n 0)
+    (ly:warning (_i "negative replication count; ignoring")))
+   ((= n 0)
+    '())
+   ((= n 1)
+    (mod-proc lis 1))
+   ((> n 1)
+    (append
+     (replicate-modify lis (- n 1) mod-proc)
+     (mod-proc lis n)))))
+
+
+
+(define-public (change-pitches music converter)
+  "Recurse through @var{music}, applying @var{converter} to pitches.
+Converter is typically a transposer or an inverter as defined above in
+this module, but may be user-defined.  The converter function must take
+a single pitch as its argument and return a new pitch.  These are
+LilyPond scheme pitches, e.g. @code{(ly:make-pitch 0 2 0)}
+"
+  (let ((elements (ly:music-property music 'elements))
+       (element (ly:music-property music 'element))
+       (pitch (ly:music-property music 'pitch)))
+
+    (cond
+     ((ly:pitch? pitch)
+      (ly:music-set-property! music 'pitch (converter pitch)))
+
+     ((pair? elements)
+      (map (lambda (x) (change-pitches x converter)) elements))
+
+     ((ly:music? element)
+      (change-pitches element converter)))))
+
+
+(define (extract-pitch-sequence music)
+  "Recurse through @var{music}, extracting pitches.
+Returns a list of pitch objects, e.g
+@code{'((ly:make-pitch 0 2 0) (ly:make-pitch 0 4 0) ... )}
+Typically used to construct a scale for input to transposer-factory
+(see).
+"
+
+  (let ((elements (ly:music-property music 'elements))
+       (element (ly:music-property music 'element))
+       (pitch (ly:music-property music 'pitch)))
+
+    (cond
+     ((ly:pitch? pitch)
+      pitch)
+
+     ((pair? elements)
+      (map
+       (lambda (x) (extract-pitch-sequence x))
+       elements))
+
+     ((ly:music? element)
+      (extract-pitch-sequence element)))))
+
+(define (make-scale music)
+  "Convenience wrapper for extract-pitch-sequence."
+  (map car (extract-pitch-sequence music)))
+
+
+(define (make-extended-scale music)
+  "Extend scale given by @var{music} by 5 octaves up and down."
+  ;; This is a bit of a hack since, in theory, someone might want to
+  ;; transpose further than 5 octaves from the original scale
+  ;; definition.  In practice this seems unlikely to occur very often.
+  (define extender
+    (lambda (lis n)
+      (map
+       (lambda (i)
+        (ly:make-pitch
+         (+ (- n 6) (ly:pitch-octave i))
+         (ly:pitch-notename i)
+         (ly:pitch-alteration i)))
+       lis)))
+
+  (let ((scale (make-scale music)))
+    (replicate-modify scale 11 extender)))
+
+
+;; ------------- PUBLIC FUNCTIONS -----------------------------
+
+(define-public (make-modal-transposer from-pitch to-pitch scale)
+  "Wrapper function for transposer-factory."
+  (let ((transposer (transposer-factory (make-extended-scale scale)))
+       (from (car (extract-pitch-sequence from-pitch)))
+       (to (car (extract-pitch-sequence to-pitch))))
+
+    (lambda (p)
+      (transposer from to p))))
+
+(define-public (make-modal-inverter around-pitch to-pitch scale)
+  "Wrapper function for inverter-factory"
+  (let ((inverter (inverter-factory (make-extended-scale scale)))
+       (around (car (extract-pitch-sequence around-pitch)))
+       (to (car (extract-pitch-sequence to-pitch))))
+
+    (lambda (p)
+      (inverter around to p))))
+
+
+(define-public (retrograde-music music)
+  "Returns @var{music} in retrograde (reversed) order."
+  ;; Copied from LSR #105 and renamed.
+  ;; Included here to allow this module to provide a complete set of
+  ;; common formal operations on motives, i.e transposition,
+  ;; inversion and retrograding.
+
+  (let* ((elements (ly:music-property music 'elements))
+         (reversed (reverse elements))
+         (element (ly:music-property music 'element))
+         (span-dir (ly:music-property music 'span-direction)))
+
+    (ly:music-set-property! music 'elements reversed)
+
+    (if (ly:music? element)
+        (ly:music-set-property!
+         music 'element
+         (retrograde-music element)))
+
+    (if (ly:dir? span-dir)
+        (ly:music-set-property! music 'span-direction (- span-dir)))
+
+    (map retrograde-music reversed)
+
+    music))
index b015c536a6f07fd05e70b55a727f7830d3580621..ed96cfd8d21dcda0cf61430c1596ad2422b72b6b 100644 (file)
@@ -301,6 +301,20 @@ through MUSIC."
          (shift-duration-log r shift dots))
        r)))
 
+(define (calc-repeat-slash-count music)
+  "Given the child-list @var{music} in @code{PercentRepeatMusic},
+calculate the number of slashes based on the durations.  Returns @code{0}
+if durations in in @var{music} vary, allowing slash beats and double-percent
+beats to be distinguished."
+  (let* ((durs (map (lambda (elt)
+                     (duration-of-note elt))
+                   (extract-named-music music 'EventChord)))
+        (first-dur (car durs)))
+
+    (if (every (lambda (d) (equal? d first-dur)) durs)
+       (max (- (ly:duration-log first-dur) 2) 1)
+       0)))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; clusters.
 
@@ -1385,14 +1399,20 @@ as a context."
     skip))
 
 (define-public (pitch-of-note event-chord)
+  (let ((evs (filter (lambda (x)
+                      (music-has-type x 'note-event))
+                    (ly:music-property event-chord 'elements))))
 
-  (let*
-      ((evs (filter (lambda (x) (memq 'note-event (ly:music-property x 'types)))
-                   (ly:music-property event-chord 'elements))))
+    (and (pair? evs)
+        (ly:music-property (car evs) 'pitch))))
+
+(define-public (duration-of-note event-chord)
+  (let ((evs (filter (lambda (x)
+                      (music-has-type x 'rhythmic-event))
+                    (ly:music-property event-chord 'elements))))
 
-    (if (pair? evs)
-       (ly:music-property (car evs) 'pitch)
-       #f)))
+    (and (pair? evs)
+        (ly:music-property (car evs) 'duration))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;