From: Jean-Charles Malahieude Date: Tue, 8 Sep 2015 18:14:11 +0000 (+0200) Subject: Merge branch 'master' into translation X-Git-Tag: release/2.19.28-1~12 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=cee6cea4ed55eb4fa1f9d83c997ebc19744a6e1a;hp=8c59e9496cf80f99423dca2f6875db2a8c21f16c;p=lilypond.git Merge branch 'master' into translation --- diff --git a/Documentation/changes.tely b/Documentation/changes.tely index 6182a59323..ca142c3286 100644 --- a/Documentation/changes.tely +++ b/Documentation/changes.tely @@ -61,6 +61,19 @@ which scares away people. @end ignore +@item +When outputting MIDI, LilyPond will now store the @code{title} +defined in a score's @code{\header} block (or, if there is no +such definition on the @code{\score} level, the first such +definition found in a @code{\header} block of the score's +enclosing @code{\bookpart}, @code{\book}, or top-level scope) +as the name of the MIDI sequence in the MIDI file. Optionally, +the name of the MIDI sequence can be overridden using the new +@code{midititle} @code{\header} field independently of +@code{title} (for example, in case @code{title} contains markup +code which does not render as plain text in a satisfactory way +automatically). + @item Music (and scheme and void) functions and markup commands that just supply the final parameters to a chain of overrides, music diff --git a/Documentation/common-macros.itexi b/Documentation/common-macros.itexi index f3dac48c91..6d47ad9cf3 100644 --- a/Documentation/common-macros.itexi +++ b/Documentation/common-macros.itexi @@ -10,14 +10,6 @@ @set txicodequoteundirected @set txicodequotebacktick -@c Trick to use with proper font mappings the same NCSB fonts as -@c LilyPond instead of those provided by TeX distribution -@tex -\ifpdf - \pdfmapfile{=lilypond.map} -\fi -@end tex - @include cyrillic.itexi @c ***** Displaying text ***** diff --git a/Documentation/de/notation/ancient.itely b/Documentation/de/notation/ancient.itely index 9dcaa49973..4d777e2b92 100644 --- a/Documentation/de/notation/ancient.itely +++ b/Documentation/de/notation/ancient.itely @@ -2536,6 +2536,14 @@ die benötigten Kontexteigenschaften und Grob-Eigenschaften mit den richtigen Werten, sodass man sofort den Choral notieren kann: @lilypond[quote,ragged-right,verbatim] +% Font settings for Cyrillic +\paper { + #(define fonts + (set-global-fonts + #:roman "Linux Libertine O,serif" + )) +} + \score { << \new KievanVoice = "melody" \transpose c c' { diff --git a/Documentation/de/notation/input.itely b/Documentation/de/notation/input.itely index ec997b60ac..5879d98eb8 100644 --- a/Documentation/de/notation/input.itely +++ b/Documentation/de/notation/input.itely @@ -2202,6 +2202,17 @@ Heir ein Beispiel mit Kyrilliza, hebräischem und portugiesischem Text: @lilypond[quote] %c No verbatim here as the code does not display correctly in PDF +% Font settings for Cyrillic and Hebrew +% Linux Libertine fonts contain Cyrillic and Hebrew glyphs. +\paper { + #(define fonts + (set-global-fonts + #:roman "Linux Libertine O,serif" + #:sans "Linux Biolinum O,sans-serif" + #:typewriter "Linux Libertine Mono O,monospace" + )) +} + % Cyrillic bulgarian = \lyricmode { Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. diff --git a/Documentation/es/notation/ancient.itely b/Documentation/es/notation/ancient.itely index fcb7635fa9..072f9933ee 100644 --- a/Documentation/es/notation/ancient.itely +++ b/Documentation/es/notation/ancient.itely @@ -2472,6 +2472,14 @@ sus valores adecuados, de manera que pueda ponerse manos a la obra inmediatamente con la introducción del propio canto: @lilypond[quote,ragged-right,verbatim] +% Font settings for Cyrillic +\paper { + #(define fonts + (set-global-fonts + #:roman "Linux Libertine O,serif" + )) +} + \score { << \new KievanVoice = "melody" \relative c' { @@ -2655,6 +2663,14 @@ El ejemplo siguiente muestra el uso de las ligaduras del canto kievano: @lilypond[quote,ragged-right,verbatim] +% Font settings for Cyrillic +\paper { + #(define fonts + (set-global-fonts + #:roman "Linux Libertine O,serif" + )) +} + \score { << \new KievanVoice = "melody" \relative c' { diff --git a/Documentation/es/notation/input.itely b/Documentation/es/notation/input.itely index 4df2aae7b6..abe7941049 100644 --- a/Documentation/es/notation/input.itely +++ b/Documentation/es/notation/input.itely @@ -2475,6 +2475,17 @@ He aquí un ejemplo que muestra texto cirílico, hebreo y portugués: @lilypond[quote] %c No verbatim here as the code does not display correctly in PDF +% Font settings for Cyrillic and Hebrew +% Linux Libertine fonts contain Cyrillic and Hebrew glyphs. +\paper { + #(define fonts + (set-global-fonts + #:roman "Linux Libertine O,serif" + #:sans "Linux Biolinum O,sans-serif" + #:typewriter "Linux Libertine Mono O,monospace" + )) +} + % Cyrillic bulgarian = \lyricmode { Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. diff --git a/Documentation/fr/notation/ancient.itely b/Documentation/fr/notation/ancient.itely index 041a749b0c..2976478858 100644 --- a/Documentation/fr/notation/ancient.itely +++ b/Documentation/fr/notation/ancient.itely @@ -2463,6 +2463,14 @@ valeurs adéquates, de telle sorte que vous pouvez tout de suite vous lancer dans la saisie de votre chant, comme ci-dessous : @lilypond[quote,ragged-right,verbatim] +% Font settings for Cyrillic +\paper { + #(define fonts + (set-global-fonts + #:roman "Linux Libertine O,serif" + )) +} + \score { << \new KievanVoice = "melody" \relative c' { @@ -2641,6 +2649,14 @@ propriété @code{padding} de @code{KievanLigature}. Voici comment générer des ligatures en notation kiévienne : @lilypond[quote,ragged-right,verbatim] +% Font settings for Cyrillic +\paper { + #(define fonts + (set-global-fonts + #:roman "Linux Libertine O,serif" + )) +} + \score { << \new KievanVoice = "melody" \relative c' { diff --git a/Documentation/fr/notation/input.itely b/Documentation/fr/notation/input.itely index 2a31e40d2f..ac2b8ca0f3 100644 --- a/Documentation/fr/notation/input.itely +++ b/Documentation/fr/notation/input.itely @@ -2518,6 +2518,17 @@ portugais. @lilypond[quote] %c No verbatim here as the code does not display correctly in PDF +% Font settings for Cyrillic and Hebrew +% Linux Libertine fonts contain Cyrillic and Hebrew glyphs. +\paper { + #(define fonts + (set-global-fonts + #:roman "Linux Libertine O,serif" + #:sans "Linux Biolinum O,sans-serif" + #:typewriter "Linux Libertine Mono O,monospace" + )) +} + % Cyrillic bulgarian = \lyricmode { Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. diff --git a/Documentation/ja/notation/input.itely b/Documentation/ja/notation/input.itely index bf219e016a..dfd4584bdd 100644 --- a/Documentation/ja/notation/input.itely +++ b/Documentation/ja/notation/input.itely @@ -2216,6 +2216,17 @@ FT_Get_Glyph_Name () error: invalid argument @c KEEP LY @lilypond[quote] %c No verbatim here as the code does not display correctly in PDF +% Font settings for Cyrillic and Hebrew +% Linux Libertine fonts contain Cyrillic and Hebrew glyphs. +\paper { + #(define fonts + (set-global-fonts + #:roman "Linux Libertine O,serif" + #:sans "Linux Biolinum O,sans-serif" + #:typewriter "Linux Libertine Mono O,monospace" + )) +} + % キリル文字 bulgarian = \lyricmode { Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. diff --git a/Documentation/notation/ancient.itely b/Documentation/notation/ancient.itely index 685c3329f5..9f2f25690e 100644 --- a/Documentation/notation/ancient.itely +++ b/Documentation/notation/ancient.itely @@ -2408,6 +2408,14 @@ all relevant context properties and grob properties to proper values, so you can immediately go ahead entering the chant: @lilypond[quote,ragged-right,verbatim] +% Font settings for Cyrillic +\paper { + #(define fonts + (set-global-fonts + #:roman "Linux Libertine O,serif" + )) +} + \score { << \new KievanVoice = "melody" \relative c' { @@ -2578,6 +2586,14 @@ by setting the @code{padding} property of the @code{KievanLigature}. The following example demonstrates the use of Kievan ligatures: @lilypond[quote,ragged-right,verbatim] +% Font settings for Cyrillic +\paper { + #(define fonts + (set-global-fonts + #:roman "Linux Libertine O,serif" + )) +} + \score { << \new KievanVoice = "melody" \relative c' { diff --git a/Documentation/notation/changing-defaults.itely b/Documentation/notation/changing-defaults.itely index 4c000c565d..efcf8549b3 100644 --- a/Documentation/notation/changing-defaults.itely +++ b/Documentation/notation/changing-defaults.itely @@ -536,14 +536,19 @@ have to be referenced, for example, when changing staves with @code{\lyricsto} commands, or when adding further musical events to an earlier context. -There is an exception to this general rule: just one of the -@code{Voice} contexts in a @code{Staff} context or in a -@code{<<@dots{}>>} construct will always persist to the end of the -enclosing @code{Staff} context or @code{<<@dots{}>>} construct, even -though there may be periods when it has nothing to do. The context -to persist in this way will be the first one encountered in the -first enclosed @code{@{@dots{}@}} construct, ignoring any in enclosed -@code{<<@dots{}>>} constructs. +There is an exception to this general rule: inside of an +@code{@{@dots{}@}} construct (sequential music), the construct's +notion of the ``current context'' will descend whenever an element +of the sequence ends in a subcontext of the previous current +context. This avoids spurious creation of implicit contexts in a +number of situations but means that the first context descended +into will be kept alive until the end of the expression. + +In contrast, the contexts of a @code{<<@dots{}>>} construct's +(simultaneous music) expression are not carried forth, so +enclosing a context creating command in an extra pair of +@code{<<@dots{}>>} will keep the context from persisting through +all of the enclosing @code{@{@dots{}@}} sequence. Any context can be kept alive by ensuring it has something to do at every musical moment. @code{Staff} contexts are kept alive by @@ -1274,11 +1279,39 @@ contexts. Therefore, we modify the @code{Staff} definition with the @} @end example +@funindex \inherit-acceptability +Often when reusing an existing context definition, the resulting +context can be used anywhere where the original context would have +been useful. + +@example +\layout @{ + @dots{} + \inherit-acceptability @var{to} @var{from} +@} +@end example + +@noindent +will arrange to have contexts of type @var{to} accepted by all +contexts also accepting @var{from}. For example, using + +@example +\layout @{ + @dots{} + \inherit-acceptability "ImproVoice" "Voice" +@} +@end example + +@noindent +will add an @code{\accepts} for @code{ImproVoice} to both +@code{Staff} and @code{RhythmicStaff} definitions. + @funindex \denies The opposite of @code{\accepts} is @code{\denies}, which is sometimes needed when reusing existing context definitions. -Putting both into a @code{\layout} block, like +Arranging the required pieces into a @code{\layout} block leaves +us with @example \layout @{ @@ -1286,10 +1319,7 @@ Putting both into a @code{\layout} block, like \name ImproVoice @dots{} @} - \context @{ - \Staff - \accepts "ImproVoice" - @} + \inherit-acceptability "ImproVoice" "Voice" @} @end example diff --git a/Documentation/notation/input.itely b/Documentation/notation/input.itely index 2d946437fb..a5b04b4b24 100644 --- a/Documentation/notation/input.itely +++ b/Documentation/notation/input.itely @@ -2374,6 +2374,17 @@ text: @lilypond[quote] %c No verbatim here as the code does not display correctly in PDF +% Font settings for Cyrillic and Hebrew +% Linux Libertine fonts contain Cyrillic and Hebrew glyphs. +\paper { + #(define fonts + (set-global-fonts + #:roman "Linux Libertine O,serif" + #:sans "Linux Biolinum O,sans-serif" + #:typewriter "Linux Libertine Mono O,monospace" + )) +} + % Cyrillic bulgarian = \lyricmode { Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. diff --git a/Documentation/notation/spacing.itely b/Documentation/notation/spacing.itely index d88fa8b27e..e954e9b9a6 100644 --- a/Documentation/notation/spacing.itely +++ b/Documentation/notation/spacing.itely @@ -3484,11 +3484,11 @@ assignment will force a layout with 2 pages. @item Avoid (or reduce) objects that increase the vertical size of a -system. For example, volta repeats (or alternate repeats) require -extra space. If these repeats are spread over two systems, they -will take up more space than one system with the volta repeats and -another system without. For example, dynamics that @q{stick out} of -a system can be moved closer to the staff: +system. For example, volta brackets for alternative repeat endings +require extra space. If these endings are spread over two systems, +they take up more space than if they were on the same system. +As another example, dynamics that @q{stick out} of a system +can be moved closer to the staff: @lilypond[verbatim,quote] \relative e' { diff --git a/Documentation/snippets/defining-an-engraver-in-scheme--ambitus-engraver.ly b/Documentation/snippets/defining-an-engraver-in-scheme--ambitus-engraver.ly index 9f92c6f2ab..1e9e480261 100644 --- a/Documentation/snippets/defining-an-engraver-in-scheme--ambitus-engraver.ly +++ b/Documentation/snippets/defining-an-engraver-in-scheme--ambitus-engraver.ly @@ -4,7 +4,7 @@ %% and then run scripts/auxiliar/makelsr.py %% %% This file is in the public domain. -\version "2.19.7" +\version "2.18.0" \header { lsrtags = "contexts-and-engravers" @@ -294,23 +294,23 @@ position of middle C and key signature from @var{translator}'s context." (let ((ambitus #f)) ;; when music is processed: make the ambitus object, if not already built (make-engraver - ((process-music translator) - (if (not ambitus) - (set! ambitus (make-ambitus translator)))) - ;; set the ambitus clef and key signature state - ((stop-translation-timestep translator) - (if ambitus - (initialize-ambitus-state ambitus translator))) - ;; when a note-head grob is built, update the ambitus notes - (acknowledgers + ((process-music translator) + (if (not ambitus) + (set! ambitus (make-ambitus translator)))) + ;; set the ambitus clef and key signature state + ((stop-translation-timestep translator) + (if ambitus + (initialize-ambitus-state ambitus translator))) + ;; when a note-head grob is built, update the ambitus notes + (acknowledgers ((note-head-interface engraver grob source-engraver) - (if ambitus - (update-ambitus-notes ambitus grob)))) - ;; finally, typeset the ambitus according to its upper and lower notes - ;; (if any). - ((finalize translator) - (if ambitus - (typeset-ambitus ambitus translator))))))) + (if ambitus + (update-ambitus-notes ambitus grob)))) + ;; finally, typeset the ambitus according to its upper and lower notes + ;; (if any). + ((finalize translator) + (if ambitus + (typeset-ambitus ambitus translator))))))) %%% %%% Example diff --git a/Documentation/snippets/new/utf-8.ly b/Documentation/snippets/new/utf-8.ly new file mode 100644 index 0000000000..7dcb13ed67 --- /dev/null +++ b/Documentation/snippets/new/utf-8.ly @@ -0,0 +1,78 @@ +\version "2.19.12" + +\header { + lsrtags = "text" + + texidoc = " +Various scripts may be used for texts (like titles and lyrics) by +entering them in UTF-8 encoding, and using a Pango based backend. +Depending on the fonts installed, this fragment will render Bulgarian +(Cyrillic), Hebrew, Japanese and Portuguese. + +" + doctitle = "UTF-8" +} % begin verbatim + +% end verbatim - this comment is a hack to prevent texinfo.tex +% from choking on non-European UTF-8 subsets + +%% Edit this file using a Unicode aware editor, such as GVIM, GEDIT, Emacs + +%{ + +You may have to install additional fonts. + +Red Hat Fedora + + linux-libertine-fonts (Latin, Cyrillic, Hebrew) + ipa-mincho-fonts ipa-gothic-fonts (Japanese) + +Debian GNU/Linux, Ubuntu + + fonts-linuxlibertine (Latin, Cyrillic, Hebrew) + fonts-ipafont (Japanese) + +%} + +% Font settings for Cyrillic and Hebrew +% Linux Libertine fonts contain Cyrillic and Hebrew glyphs. +\paper { + #(define fonts + (set-global-fonts + #:roman "Linux Libertine O,serif" + #:sans "Linux Biolinum O,sans-serif" + #:typewriter "Linux Libertine Mono O,monospace" + )) +} + +% Cyrillic font +bulgarian = \lyricmode { + Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. +} + +hebrew = \lyricmode { + זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן. +} + +japanese = \lyricmode { + いろはにほへど ちりぬるを + わがよたれぞ つねならむ + うゐのおくや まけふこえて + あさきゆめみじ ゑひもせず +} + +% "a legal song to you" +portuguese = \lyricmode { + à vo -- cê uma can -- ção legal +} + +\relative c' { + c2 d + e2 f + g2 f + e1 +} +\addlyrics { \bulgarian } +\addlyrics { \hebrew } +\addlyrics { \japanese } +\addlyrics { \portuguese } diff --git a/Documentation/web/download.itexi b/Documentation/web/download.itexi index e4d872637e..589b8fdaf2 100644 --- a/Documentation/web/download.itexi +++ b/Documentation/web/download.itexi @@ -484,7 +484,8 @@ which contains LilyPond executable files like this: [@var{pre-set paths}];@var{DIR}\LilyPond\usr\bin @end example -@warning{@var{DIR} will generally be @code{C:@bs{}Program Files}.} +@warning{@var{DIR} will generally be @code{C:@bs{}Program Files (x86)} +for 64 bit or @code{C:@bs{}Program Files} for 32 bit systems.} @noindent and click @qq{OK} button to close the window. diff --git a/Documentation/web/news-front.itexi b/Documentation/web/news-front.itexi index 793c80377e..42893bedd6 100644 --- a/Documentation/web/news-front.itexi +++ b/Documentation/web/news-front.itexi @@ -9,10 +9,10 @@ @c used for news about the upcoming release; see CG 10.2 @newsItem -@subheading LilyPond 2.19.24 released @emph{July 26, 2015} +@subheading LilyPond 2.19.26 released @emph{August 27, 2015} We are happy to announce the release of LilyPond -2.19.24. This release includes a number of enhancements, and contains some +2.19.26. This release includes a number of enhancements, and contains some work in progress. You will have access to the very latest features, but some may be incomplete, and you may encounter bugs and crashes. If you require a stable version of Lilypond, we recommend using the 2.18 diff --git a/Documentation/web/news.itexi b/Documentation/web/news.itexi index 134c359434..300b4c076a 100644 --- a/Documentation/web/news.itexi +++ b/Documentation/web/news.itexi @@ -26,6 +26,30 @@ NOTE: * don't duplicate entries from news-front.itexi @end ignore +@newsItem +@subheading LilyPond 2.19.25 released @emph{August 9, 2015} + +We are happy to announce the release of LilyPond +2.19.25. This release includes a number of enhancements, and contains some +work in progress. You will have access to the very latest features, but +some may be incomplete, and you may encounter bugs and crashes. If you +require a stable version of Lilypond, we recommend using the 2.18 +version. + +@newsEnd + +@newsItem +@subheading LilyPond 2.19.24 released @emph{July 26, 2015} + +We are happy to announce the release of LilyPond +2.19.24. This release includes a number of enhancements, and contains some +work in progress. You will have access to the very latest features, but +some may be incomplete, and you may encounter bugs and crashes. If you +require a stable version of Lilypond, we recommend using the 2.18 +version. + +@newsEnd + @newsItem @subheading LilyPond 2.19.23 released @emph{July 12, 2015} diff --git a/GNUmakefile.in b/GNUmakefile.in index 749f27aaee..abc7ecaf6a 100644 --- a/GNUmakefile.in +++ b/GNUmakefile.in @@ -253,14 +253,18 @@ $(tree-share-prefix)/mf-link-tree: $(tree-share-prefix)/lilypond-force -rm -f $(tree-share-prefix)/fonts/otf/* && \ rm -f $(tree-share-prefix)/fonts/svg/* && \ rm -f $(tree-share-prefix)/fonts/fonts.conf && \ - rm -f $(tree-share-prefix)/fonts/lilypond-fonts.conf && \ + rm -f $(tree-share-prefix)/fonts/00-lilypond-fonts.conf && \ + rm -f $(tree-share-prefix)/fonts/99-lilypond-fonts.conf && \ rm -f $(tree-share-prefix)/fonts/tfm/* && \ rm -f $(tree-share-prefix)/fonts/type1/* && \ cd $(tree-share-prefix)/fonts/otf && \ - ln -s ../../../../../../mf/$(outconfbase)/*.otf . + ln -s ../../../../../../mf/$(outconfbase)/*.otf . && \ + $(foreach i,$(addprefix $(TEXGYRE_DIR)/,$(TEXGYRE_FILES)), \ + ln -s $i . && ) true -cd $(tree-share-prefix)/fonts && \ ln -s ../../../../../mf/$(outconfbase)/fonts.conf . && \ - ln -s ../../../../../mf/$(outconfbase)/lilypond-fonts.conf . + ln -s ../../../../../mf/$(outconfbase)/00-lilypond-fonts.conf . && \ + ln -s ../../../../../mf/$(outconfbase)/99-lilypond-fonts.conf . -cd $(tree-share-prefix)/fonts/svg && \ ln -s ../../../../../../mf/$(outconfbase)/*.svg . -cd $(tree-share-prefix)/fonts/svg && \ diff --git a/VERSION b/VERSION index e9f208740c..e233654b9d 100644 --- a/VERSION +++ b/VERSION @@ -1,7 +1,7 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=2 MINOR_VERSION=19 -PATCH_LEVEL=25 +PATCH_LEVEL=27 MY_PATCH_LEVEL= VERSION_STABLE=2.18.2 -VERSION_DEVEL=2.19.24 +VERSION_DEVEL=2.19.26 diff --git a/aclocal.m4 b/aclocal.m4 index 48d0b77b74..0037c58ca8 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -42,7 +42,8 @@ AC_DEFUN(STEPMAKE_GET_VERSION, [ if test -z "$_ver"; then ## If empty, try date [fontforge] - eval _ver=\"\`("$1" --version || "$1" -V) 2>&1 | grep '[0-9]\{6,8\}' \ + eval _ver=\"\`("$1" --version || "$1" -V) 2>&1 \ + | grep '\(^\|[^0-9a-f]\)[0-9]\{6,8\}\([^0-9a-f]\|$\)' \ | head -n 1 \ | sed -e 's/^[^.0-9]*//' -e 's/[^.0-9]*$//'\`\" fi diff --git a/config.make.in b/config.make.in index d5bf2b87b8..e915a0b3cd 100644 --- a/config.make.in +++ b/config.make.in @@ -90,11 +90,8 @@ lilypond_omfdir = $(local_package_omfdir) webdir = $(lilypond_docdir)/html vimdir = $(lilypond_datadir)/vim - -NCSB_SOURCE_FILES = @NCSB_SOURCE_FILES@ -NCSB_DIR = @NCSB_DIR@ -HELV_SOURCE_FILES = @HELV_SOURCE_FILES@ -COUR_SOURCE_FILES = @COUR_SOURCE_FILES@ +TEXGYRE_DIR = @TEXGYRE_DIR@ +TEXGYRE_FILES = @TEXGYRE_FILES@ ################################################################ ## PROGRAMS diff --git a/configure.ac b/configure.ac index a403e35c18..ca151e70f3 100644 --- a/configure.ac +++ b/configure.ac @@ -32,11 +32,11 @@ AC_ARG_ENABLE(guile2, [highly experimental GUILE 2 support. Default: off])], [GUILEv2=$enableval]) -AC_ARG_WITH(fonts-dir, - [AS_HELP_STRING([--with-fonts-dir=DIR], - [location of URW++ fonts.])], - [NCSB_DIR=$withval], - [NCSB_DIR=""]) +AC_ARG_WITH(texgyre-dir, + [AS_HELP_STRING([--with-texgyre-dir=DIR], + [location of TeX Gyre fonts.])], + [TEXGYRE_DIR=$withval], + [TEXGYRE_DIR=""]) reloc_b=no AC_ARG_ENABLE(relocation, @@ -61,104 +61,44 @@ AC_SUBST(LINK_GXX_STATICALLY) STEPMAKE_COMPILE AC_CHECK_PROG(FCLIST, fc-list, fc-list) -AC_MSG_CHECKING([for Century Schoolbook L PFB files]) -AC_SUBST(NCSB_SOURCE_FILES) -AC_SUBST(NCSB_DIR) -if test "$NCSB_DIR" = ""; then +AC_MSG_CHECKING([for TeX Gyre fonts OTF files]) +AC_SUBST(TEXGYRE_DIR) +AC_SUBST(TEXGYRE_FILES) +if test "$TEXGYRE_DIR" = ""; then if test "$FCLIST" != ""; then - NCSB_FILE=`$FCLIST "Century Schoolbook L:foundry=urw:fontformat=Type 1:lang=ru" file \ - | head -n 1` - if test "$NCSB_FILE" != ""; then - NCSB_FILE=`echo $NCSB_FILE | sed 's/\(:.*\)$//g'` - NCSB_FILE=`$PYTHON "$srcdir/scripts/auxiliar/readlink.py" $NCSB_FILE` - NCSB_DIR=`AS_DIRNAME($NCSB_FILE)` + TEXGYRE_FILE=`$FCLIST "TeX Gyre Schola:fontformat=CFF" file | head -n 1` + if test "$TEXGYRE_FILE" != ""; then + TEXGYRE_FILE=`echo $TEXGYRE_FILE | sed 's/\(:.*\)$//g'` + TEXGYRE_FILE=`$PYTHON "$srcdir/scripts/auxiliar/readlink.py" $TEXGYRE_FILE` + TEXGYRE_DIR=`AS_DIRNAME($TEXGYRE_FILE)` fi fi fi -if test "$NCSB_DIR" != "" ; then - for f in c059013l.pfb c059016l.pfb c059033l.pfb c059036l.pfb; do - if test ! -f "$NCSB_DIR/$f"; then - MISSING_NCSB_SOURCE_FILES="$f $MISSING_NCSB_SOURCE_FILES" +if test "$TEXGYRE_DIR" != "" ; then + for f in texgyreschola-regular.otf texgyreschola-italic.otf \ + texgyreschola-bold.otf texgyreschola-bolditalic.otf \ + texgyreheros-regular.otf texgyreheros-italic.otf \ + texgyreheros-bold.otf texgyreheros-bolditalic.otf \ + texgyrecursor-regular.otf texgyrecursor-italic.otf \ + texgyrecursor-bold.otf texgyrecursor-bolditalic.otf; do + if test ! -f "$TEXGYRE_DIR/$f"; then + MISSING_TEXGYRE_FILES="$MISSING_TEXGYRE_FILES $f" else - if test "`grep Cyrillic "$NCSB_DIR/$f"`" = ""; then - INCOMPLETE_NCSB_SOURCE_FILES="$f $INCOMPLETE_NCSB_SOURCE_FILES" - else - NCSB_SOURCE_FILES="$NCSB_DIR/$f $NCSB_SOURCE_FILES" - fi + TEXGYRE_FILES="$TEXGYRE_FILES $f" fi done fi -if test "$NCSB_DIR" = "" -o "$MISSING_NCSB_SOURCE_FILES" != "$INCOMPLETE_NCSB_SOURCE_FILES"; then +if test "$TEXGYRE_DIR" = "" -o "$MISSING_TEXGYRE_FILES" != ""; then AC_MSG_RESULT(no) - STEPMAKE_ADD_ENTRY(REQUIRED,International Century Schoolbook L fonts) - if test "$NCSB_DIR" = ""; then + STEPMAKE_ADD_ENTRY(REQUIRED,TeX Gyre fonts OTF) + if test "$TEXGYRE_DIR" = ""; then if test "$FCLIST" = ""; then - STEPMAKE_ADD_ENTRY(REQUIRED,'(install the fc-list utility from FontConfig, or use --with-fonts-dir)') + STEPMAKE_ADD_ENTRY(REQUIRED,'(install the fc-list utility from FontConfig, or use --with-texgyre-dir)') else - STEPMAKE_ADD_ENTRY(REQUIRED,'(make sure the fc-list utility can see them, or use --with-fonts-dir)') + STEPMAKE_ADD_ENTRY(REQUIRED,"(make sure the fc-list utility can see them, e.g. 'sudo apt-get install fonts-texgyre', or use --with-texgyre-dir)") fi - fi - if test "$MISSING_NCSB_SOURCE_FILES" != ""; then - STEPMAKE_ADD_ENTRY(REQUIRED,'(these files are missing: $MISSING_NCSB_SOURCE_FILES)') - fi - if test "$INCOMPLETE_NCSB_SOURCE_FILES" != ""; then - STEPMAKE_ADD_ENTRY(REQUIRED,'(these files do not contain Cyrillic characters: $INCOMPLETE_NCSB_SOURCE_FILES)') - fi -else - AC_MSG_RESULT(yes) -fi - -AC_MSG_CHECKING([for Nimbus Sans L (Helvetica) PFB files]) -AC_SUBST(HELV_SOURCE_FILES) -if test "$NCSB_DIR" != "" ; then - for f in n019003l.pfb n019004l.pfb n019023l.pfb n019024l.pfb; do - if test ! -f "$NCSB_DIR/$f"; then - MISSING_HELV_SOURCE_FILES="$f $MISSING_HELV_SOURCE_FILES" - else - if test "`grep Cyrillic "$NCSB_DIR/$f"`" = ""; then - INCOMPLETE_HELV_SOURCE_FILES="$f $INCOMPLETE_HELV_SOURCE_FILES" - else - HELV_SOURCE_FILES="$NCSB_DIR/$f $HELV_SOURCE_FILES" - fi - fi - done -fi -if test "$NCSB_DIR" = "" -o "$MISSING_HELV_SOURCE_FILES" != "$INCOMPLETE_HELV_SOURCE_FILES"; then - AC_MSG_RESULT(no) - STEPMAKE_ADD_ENTRY(REQUIRED,International Nimbus Sans L fonts) - if test "$MISSING_HELV_SOURCE_FILES" != ""; then - STEPMAKE_ADD_ENTRY(REQUIRED,'(these files are missing: $MISSING_HELV_SOURCE_FILES)') - fi - if test "$INCOMPLETE_HELV_SOURCE_FILES" != ""; then - STEPMAKE_ADD_ENTRY(REQUIRED,'(these files do not contain Cyrillic characters: $INCOMPLETE_HELV_SOURCE_FILES)') - fi -else - AC_MSG_RESULT(yes) -fi - -AC_MSG_CHECKING([for Nimbus Mono L (Courier) PFB files]) -AC_SUBST(COUR_SOURCE_FILES) -if test "$NCSB_DIR" != "" ; then - for f in n022003l.pfb n022004l.pfb n022023l.pfb n022024l.pfb; do - if test ! -f "$NCSB_DIR/$f"; then - MISSING_COUR_SOURCE_FILES="$f $MISSING_COUR_SOURCE_FILES" - else - if test "`grep Cyrillic "$NCSB_DIR/$f"`" = ""; then - INCOMPLETE_COUR_SOURCE_FILES="$f $INCOMPLETE_COUR_SOURCE_FILES" - else - COUR_SOURCE_FILES="$NCSB_DIR/$f $COUR_SOURCE_FILES" - fi - fi - done -fi -if test "$NCSB_DIR" = "" -o "$MISSING_COUR_SOURCE_FILES" != "$INCOMPLETE_COUR_SOURCE_FILES"; then - AC_MSG_RESULT(no) - STEPMAKE_ADD_ENTRY(REQUIRED,International Nimbus Mono L fonts) - if test "$MISSING_COUR_SOURCE_FILES" != ""; then - STEPMAKE_ADD_ENTRY(REQUIRED,'(these files are missing: $MISSING_COUR_SOURCE_FILES)') - fi - if test "$INCOMPLETE_COUR_SOURCE_FILES" != ""; then - STEPMAKE_ADD_ENTRY(REQUIRED,'(these files do not contain Cyrillic characters: $INCOMPLETE_COUR_SOURCE_FILES)') + else + STEPMAKE_ADD_ENTRY(REQUIRED,'(these files are missing: $MISSING_TEXGYRE_FILES)') fi else AC_MSG_RESULT(yes) diff --git a/flower/file-path.cc b/flower/file-path.cc index 09e9c4a2fa..65cd517e5a 100644 --- a/flower/file-path.cc +++ b/flower/file-path.cc @@ -39,13 +39,14 @@ #define PATHSEP ':' #endif +#include + vector File_path::directories () const { return dirs_; } -#include void File_path::parse_path (const string &p) { diff --git a/flower/include/compare.hh b/flower/include/compare.hh index 0b398aa18c..0ec1173951 100644 --- a/flower/include/compare.hh +++ b/flower/include/compare.hh @@ -37,10 +37,6 @@ prefix ONE_OPERATOR (type, function, !=) \ prefix ONE_OPERATOR (type, function, <) \ prefix ONE_OPERATOR (type, function, <=) \ - /* namespace std { */ \ - prefix inline type max (type t1, type t2) { return (t1 > t2) ? t1 : t2; } \ - prefix inline type min (type t1, type t2) { return (t1 < t2) ? t1 : t2; } \ - /* } */ \ /* stupid fix to allow ; */ \ prefix bool operator < (type t1, type t2) diff --git a/flower/include/direction.hh b/flower/include/direction.hh index f3b31e3811..0d36c0f7c7 100644 --- a/flower/include/direction.hh +++ b/flower/include/direction.hh @@ -20,6 +20,7 @@ #ifndef DIRECTION_HH #define DIRECTION_HH +#include #include "axis.hh" enum Direction @@ -49,26 +50,9 @@ enum Direction }; inline Direction -other_dir (Direction const d) +operator - (Direction d) { - return (Direction) (-d); -} - -inline Direction -operator - (Direction const d) -{ - return other_dir (d); -} - -// to be deleted soon (after coping with issues 2491 and 2493 -inline Direction -flip (Direction *i) -{ - if (*i == (Direction)1) - *i = (Direction) - 1; - else if (*i == (Direction) - 1) - *i = (Direction)1; - return *i; + return Direction (- static_cast (d)); // cast avoids recursion } #define UP_and_DOWN(d) \ @@ -92,6 +76,4 @@ template T minmax (Direction d, T a, T b) return min (a, b); } -// String direction_string (Direction, Axis); - #endif // DIRECTION_HH diff --git a/flower/include/offset.hh b/flower/include/offset.hh index cddec1fc00..8f395398b7 100644 --- a/flower/include/offset.hh +++ b/flower/include/offset.hh @@ -169,5 +169,13 @@ dot_product (Offset o1, Offset o2) return o1[X_AXIS] * o2[X_AXIS] + o1[Y_AXIS] * o2[Y_AXIS]; } +inline +Real +cross_product (Offset o1, Offset o2) +{ + return o1[X_AXIS] * o2[Y_AXIS] - o1[Y_AXIS] * o2[X_AXIS]; +} + + #endif /* OFFSET_HH */ diff --git a/flower/include/rational.hh b/flower/include/rational.hh index 253e09f4cc..f829e531ec 100644 --- a/flower/include/rational.hh +++ b/flower/include/rational.hh @@ -20,6 +20,7 @@ #ifndef RATIONAL_HH #define RATIONAL_HH +#include "compare.hh" #include "flower-proto.hh" #include "std-string.hh" #include diff --git a/flower/include/std-string.hh b/flower/include/std-string.hh index 651f3403a1..0a34d05049 100644 --- a/flower/include/std-string.hh +++ b/flower/include/std-string.hh @@ -20,7 +20,6 @@ #ifndef STD_STRING_HH #define STD_STRING_HH -#include "compare.hh" #include "flower-proto.hh" #if 0 @@ -55,8 +54,4 @@ string &replace_all (string *str, string const &find, string const &replace); string &replace_all (string *str, char find, char replace); char *string_copy (const string &s); -int string_compare (string const &, string const &); - -INSTANTIATE_COMPARE (string const &, string_compare); - #endif /* STD_STRING_HH */ diff --git a/flower/std-string.cc b/flower/std-string.cc index 347f0f3688..593a286d84 100644 --- a/flower/std-string.cc +++ b/flower/std-string.cc @@ -19,6 +19,7 @@ #include "std-string.hh" #include "string-convert.hh" +#include "std-vector.hh" string to_string (const string &s) @@ -116,14 +117,6 @@ string_copy (const string &s) return dest; } -int -string_compare (string const &a, string const &b) -{ - return a.compare (b); -} - -#include "std-vector.hh" - vector string_split (string str, char c) { diff --git a/flower/test-std.cc b/flower/test-std.cc index 8fce64abe1..4add05a625 100644 --- a/flower/test-std.cc +++ b/flower/test-std.cc @@ -1,9 +1,3 @@ -#define STD_VECTOR 1 - -#if !STD_VECTOR -#define Array flower_vector -#endif - #define HAVE_BOOST_LAMBDA 1 #include "std-vector.hh" @@ -12,10 +6,6 @@ #define YAFFUT_MAIN #include "yaffut.hh" -#if !STD_VECTOR -#define vector flower_vector -#endif - using namespace std; template @@ -27,17 +17,6 @@ print (vector v) cout << endl; } -#if !STD_VECTOR -template -void -print (Link_array v) -{ - for (vsize i = 0; i < v.size (); i++) - cout << "v[" << i << "] = " << *v[i] << endl; - cout << endl; -} -#endif - FUNC (vector_erase) { vector v; @@ -118,11 +97,7 @@ FUNC (vector_insert) FUNC (parray_concat) { -#if !STD_VECTOR - Link_array u, v; -#else vector u, v; -#endif int a[5] = { 0, 1, 2, 3, 4 }; u.push_back (&a[0]); u.push_back (&a[1]); diff --git a/flower/test-string.cc b/flower/test-string.cc index 5ed243fb08..1967d43751 100644 --- a/flower/test-string.cc +++ b/flower/test-string.cc @@ -1,5 +1,3 @@ -#define STD_VECTOR 1 - #define HAVE_BOOST_LAMBDA 1 #include "std-vector.hh" @@ -7,10 +5,6 @@ #include "yaffut.hh" -#if !STD_VECTOR -#define vector flower_vector -#endif - using namespace std; FUNC (string_split_join) diff --git a/input/regression/dynamics-broken-hairpin.ly b/input/regression/dynamics-broken-hairpin.ly index b412a7ea94..39d200cfcb 100644 --- a/input/regression/dynamics-broken-hairpin.ly +++ b/input/regression/dynamics-broken-hairpin.ly @@ -1,7 +1,7 @@ - \version "2.19.21" -\header{ -texidoc = "Broken crescendi should be open on one side." + +\header { + texidoc = "When a hairpin is broken, the broken parts should be open at the ‘breaking point’." } \layout { @@ -9,7 +9,11 @@ texidoc = "Broken crescendi should be open on one side." } -\relative { - c''1 \< \break c1\! \> \break c1\! +\relative { + c''1 \< \break + c + c\> \break + c + c\! } diff --git a/input/regression/inherit-acceptability.ly b/input/regression/inherit-acceptability.ly new file mode 100644 index 0000000000..caa31ed1fb --- /dev/null +++ b/input/regression/inherit-acceptability.ly @@ -0,0 +1,22 @@ +\version "2.19.26" + +\header { + texidoc = "@code{\\inherit-acceptability} allows for one context def to be accepted +wherever an existing one is." +} + +\new StaffGroup +<< + \new Staff { \time 3/4 c'2. } + \new TimeLess { \time 3/4 c'2. } +>> + +\layout { + ragged-right = ##t + \context { + \Staff + \name "TimeLess" + \remove "Time_signature_engraver" + } + \inherit-acceptability "TimeLess" "Staff" +} diff --git a/input/regression/kievan-notation.ly b/input/regression/kievan-notation.ly index fe78032044..127d3a647b 100644 --- a/input/regression/kievan-notation.ly +++ b/input/regression/kievan-notation.ly @@ -1,10 +1,21 @@ -\version "2.17.4" +\version "2.19.21" \header { texidoc = "LilyPond typesets Kievan notation. " } +% Font settings for Cyrillic +% Linux Libertine fonts contain Cyrillic glyphs. +\paper { + #(define fonts + (set-global-fonts + #:roman "Linux Libertine O,serif" + #:sans "Linux Biolinum O,sans-serif" + #:typewriter "Linux Libertine Mono O,monospace" + )) +} + \score { << \new KievanVoice = "melody" \transpose c c' { diff --git a/input/regression/markup-map.ly b/input/regression/markup-map.ly new file mode 100644 index 0000000000..dfa6984203 --- /dev/null +++ b/input/regression/markup-map.ly @@ -0,0 +1,19 @@ +\version "2.19.26" + +\header { + texidoc = "@code{\\markupMap} can be used for applying a markup function +to music properties throughout a music expressions, like the @code{text} of +all contained lyric events." +} + +\layout { ragged-right = ##t } + +\new Voice +\markupMap TextScriptEvent.text + #italic-markup +{ g'2^"See" c''^"this?" } +\addlyrics { + \markupMap text + \markup \fontsize #5 \with-color #red \rotate #30 \etc + { Oh yes! } +} diff --git a/input/regression/midi/sequence-name-scoping.ly b/input/regression/midi/sequence-name-scoping.ly new file mode 100644 index 0000000000..239d55c0bc --- /dev/null +++ b/input/regression/midi/sequence-name-scoping.ly @@ -0,0 +1,82 @@ +\version "2.19.25" + +\header { + texidoc="If a score has a @code{\header} block which defines a title, + this title should override any title defined in a @code{\header} block + of the score's enclosing @code{\bookpart} or @code{\book} (or a title + defined in a top-level @code{\header} block) when naming the MIDI + sequence generated from the score. Otherwise, if the score has no title + defined, the MIDI sequence generated from the score should get named + using the title defined in the @code{\header} block of the nearest + enclosing @code{\bookpart}, @code{\book}, or top-level scope that + contains a title definition." + title = "Top-level title" +} + +music = \new Staff { c1 } + +% Book with a title defined in a \header block, and book parts +\book { + \header { title = "Book" } + + % score without a \header block outside of any book part -- the MIDI + % sequence should get the title of the book as its name + \score { + \music + \layout { } + \midi { } + } + + % score with a \header and a title outside of any book part -- the MIDI + % sequence should be named with the title from this \header block + \score { + \music + \header { title = "Score in a \book" } + \layout { } + \midi { } + } + + % Book part with a \header block and a title + \bookpart { + \header { title = "Book part" } + + % score without a \header block -- the MIDI sequence should get its name + % from the title of the enclosing book part + \score { + \music + \layout { } + \midi { } + } + + % score with a \header (and a title) of its own -- the MIDI sequence + % should get its name from the title in this \header block + \score { + \music + \header { title = "Score in a book part (w/ a title) of a book" } + \layout { } + \midi { } + } + } + + % Book part without a \header block + \bookpart { + + % score without a \header block -- the MIDI sequence should be named + % using the title from the enclosing book + \score { + \music + \layout { } + \midi { } + } + + % score with a \header block and title -- the MIDI sequence should get + % its name from the title in this \header block + \score { + \music + \header { title = "Score in a book part (w/o a title) of a book" } + \layout { } + \midi { } + } + } + +} diff --git a/input/regression/midi/sequence-name.ly b/input/regression/midi/sequence-name.ly new file mode 100644 index 0000000000..f10590db16 --- /dev/null +++ b/input/regression/midi/sequence-name.ly @@ -0,0 +1,63 @@ +\version "2.19.25" + +\header { + texidoc="The MIDI sequence generated from a score should get its name + from the title defined in the score's @code{\header} block (if any). + The title used for layout can be overridden for MIDI output by + specifying a separate @code{midititle} in the @code{\header} block. + If the score does not define a title of its own, and has no enclosing + @code{\bookpart}, @code{\book}, or top-level scope with a @code{\header} + block that defines a title, either, the MIDI sequence should get the + default name." +} + +music = \new Staff { c1 } + +% Book without a \header block +\book { + + % score with a \header block including a title -- the MIDI sequence + % should get its name from this \header block + \score { + \music + \header { title = "Title shared between layout and MIDI" } + \layout { } + \midi { } + } + + % score with no title, but a midititle defined in a \header block -- + % the MIDI sequence should be named using the midititle in this \header + % block + \score { + \music + \header { midititle = "No title for layout, but a title for MIDI" } + \layout { } + \midi { } + } + + % score with a title and a midititle defined in a \header block -- the + % MIDI sequence should get the midititle in this \header block as its + % name + \score { + \music + \header { + title = "Title for layout" + midititle = "Title for MIDI" + } + \layout { } + \midi { } + } + + % Book part with no \header block + \bookpart { + + % score without a \header -- the MIDI sequence should get the default + % name + \score { + \music + \layout { } + \midi { } + } + } + +} diff --git a/input/regression/one-staff.ly b/input/regression/one-staff.ly new file mode 100644 index 0000000000..45ed449c2f --- /dev/null +++ b/input/regression/one-staff.ly @@ -0,0 +1,25 @@ +\version "2.19.26" + +\header { + texidoc = "@code{OneStaff} contexts can be used for letting several +contexts use the same vertical position. This example shows chords being +placed in a staff and immediately following it." +} + +\layout { + ragged-right = ##t +} + +\new OneStaff +{ + << % First element in <<>> so that it is not kept alive spuriously + \new Staff + { + c'4 d' e' f' + \chords \with { \override ChordName.Y-offset = -1 } + { d1:m7 b1:min7.5- } + } + >> + \chords \with { \override ChordName.Y-offset = -1 } + { d1:m7 b1:min7.5- } +} diff --git a/input/regression/typography-demo.ly b/input/regression/typography-demo.ly index c4cdb0b842..c915c7fe52 100644 --- a/input/regression/typography-demo.ly +++ b/input/regression/typography-demo.ly @@ -22,6 +22,15 @@ ignoreMelismaOff = \unset ignoreMelismata line-width = #(* mm 140) system-system-spacing.basic-distance = #10.3 ragged-bottom = ##t + + % Font settings for Cyrillic and Hebrew + % Linux Libertine fonts contain Cyrillic and Hebrew glyphs. + #(define fonts + (set-global-fonts + #:roman "Linux Libertine O,serif" + #:sans "Linux Biolinum O,sans-serif" + #:typewriter "Linux Libertine Mono O,monospace" + )) } modernAccidentals = { diff --git a/input/regression/utf-8-mixed-text.ly b/input/regression/utf-8-mixed-text.ly index 7f93917c2f..b0fba2c5d2 100644 --- a/input/regression/utf-8-mixed-text.ly +++ b/input/regression/utf-8-mixed-text.ly @@ -7,4 +7,15 @@ \version "2.16.0" +% Font settings for Cyrillic +% Linux Libertine fonts contain Cyrillic glyphs. +\paper { + #(define fonts + (set-global-fonts + #:roman "Linux Libertine O,serif" + #:sans "Linux Biolinum O,sans-serif" + #:typewriter "Linux Libertine Mono O,monospace" + )) +} + \markup { "Здравствуйте Hallo" } diff --git a/input/regression/utf-8.ly b/input/regression/utf-8.ly index bfcc8cb309..b5fefcf923 100644 --- a/input/regression/utf-8.ly +++ b/input/regression/utf-8.ly @@ -8,14 +8,14 @@ You may have to install additional fonts. Red Hat Fedora - taipeifonts fonts-xorg-truetype ttfonts-ja fonts-arabic \ - ttfonts-zh_CN fonts-ja fonts-hebrew + linux-libertine-fonts (Latin, Cyrillic, Hebrew) + ipa-mincho-fonts ipa-gothic-fonts (Japanese) -Debian GNU/Linux +Debian GNU/Linux, Ubuntu + + fonts-linuxlibertine (Latin, Cyrillic, Hebrew) + fonts-ipafont (Japanese) - apt-get install emacs-intl-fonts xfonts-intl-.* \ - ttf-kochi-gothic ttf-kochi-mincho \ - xfonts-bolkhov-75dpi xfonts-cronyx-100dpi xfonts-cronyx-75dpi %} \header { @@ -29,6 +29,17 @@ will render Bulgarian (Cyrillic), Hebrew, Japanese and Portuguese. } +% Font settings for Cyrillic and Hebrew +% Linux Libertine fonts contain Cyrillic and Hebrew glyphs. +\paper { + #(define fonts + (set-global-fonts + #:roman "Linux Libertine O,serif" + #:sans "Linux Biolinum O,sans-serif" + #:typewriter "Linux Libertine Mono O,monospace" + )) +} + % Cyrillic font bulgarian = \lyricmode { Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. diff --git a/lily/accidental-placement.cc b/lily/accidental-placement.cc index 3555435bea..f8a0967954 100644 --- a/lily/accidental-placement.cc +++ b/lily/accidental-placement.cc @@ -313,7 +313,7 @@ extract_heads_and_stems (vector const &apes) Grob *head = acc->get_parent (Y_AXIS); Grob *col = head->get_parent (X_AXIS); - if (Note_column::has_interface (col)) + if (has_interface (col)) note_cols.push_back (col); else ret.push_back (head); @@ -327,7 +327,7 @@ extract_heads_and_stems (vector const &apes) for (vsize i = note_cols.size (); i--;) { Grob *c = note_cols[i]->get_parent (X_AXIS); - if (Note_collision_interface::has_interface (c)) + if (has_interface (c)) { extract_grob_set (c, "elements", columns); concat (note_cols, columns); @@ -371,7 +371,7 @@ build_heads_skyline (vector const &heads_and_stems, vector head_extents; for (vsize i = heads_and_stems.size (); i--;) head_extents.push_back (Box (heads_and_stems[i]->extent (common[X_AXIS], X_AXIS), - heads_and_stems[i]->pure_height (common[Y_AXIS], 0, INT_MAX))); + heads_and_stems[i]->pure_y_extent (common[Y_AXIS], 0, INT_MAX))); return Skyline (head_extents, Y_AXIS, LEFT); } diff --git a/lily/align-interface.cc b/lily/align-interface.cc index 32eb1edace..80a9dd3c08 100644 --- a/lily/align-interface.cc +++ b/lily/align-interface.cc @@ -93,7 +93,7 @@ get_skylines (Grob *g, else { assert (a == Y_AXIS); - Interval extent = g->pure_height (g, start, end); + Interval extent = g->pure_y_extent (g, start, end); // This is a hack to get better accuracy on the pure-height of VerticalAlignment. // It's quite common for a treble clef to be the highest element of one system @@ -106,7 +106,7 @@ get_skylines (Grob *g, // of the system. This way, the tall treble clefs are only compared with the treble // clefs of the other staff and they will be ignored if the staff above is, for example, // lyrics. - if (Axis_group_interface::has_interface (g)) + if (has_interface (g)) { extent = Axis_group_interface::rest_of_line_pure_height (g, start, end); Interval begin_of_line_extent = Axis_group_interface::begin_of_line_pure_height (g, start); diff --git a/lily/axis-group-interface.cc b/lily/axis-group-interface.cc index 59d1d6ba24..c9c56858a1 100644 --- a/lily/axis-group-interface.cc +++ b/lily/axis-group-interface.cc @@ -101,7 +101,7 @@ Axis_group_interface::relative_maybe_bound_group_extent (vector const &e Grob *se = elts[i]; if (!to_boolean (se->get_property ("cross-staff"))) { - Interval dims = (bound && has_interface (se) + Interval dims = (bound && has_interface (se) ? generic_bound_extent (se, common, a) : se->extent (common, a)); if (!dims.is_empty ()) @@ -284,7 +284,7 @@ Axis_group_interface::adjacent_pure_heights (SCM smob) if (g->pure_is_visible (start, visibility_end)) { - Interval dims = g->pure_height (common, start, end); + Interval dims = g->pure_y_extent (common, start, end); if (!dims.is_empty ()) { if (rank_span[LEFT] <= start) @@ -330,7 +330,7 @@ Axis_group_interface::relative_pure_height (Grob *me, int start, int end) reasonably safe to assume that if our parent is a VerticalAlignment, we can assume additivity and cache things nicely. */ Grob *p = me->get_parent (Y_AXIS); - if (p && Align_interface::has_interface (p)) + if (has_interface (p)) return Axis_group_interface::sum_partial_pure_heights (me, start, end); Grob *common = unsmob (me->get_object ("pure-Y-common")); @@ -344,9 +344,9 @@ Axis_group_interface::relative_pure_height (Grob *me, int start, int end) if (rank_span[LEFT] <= end && rank_span[RIGHT] >= start && g->pure_is_visible (start, end) && !(to_boolean (g->get_property ("cross-staff")) - && Stem::has_interface (g))) + && has_interface (g))) { - Interval dims = g->pure_height (common, start, end); + Interval dims = g->pure_y_extent (common, start, end); if (!dims.is_empty ()) r.unite (dims); } @@ -443,7 +443,7 @@ Axis_group_interface::generic_group_extent (Grob *me, Axis a) /* trigger the callback to do skyline-spacing on the children */ if (a == Y_AXIS) for (vsize i = 0; i < elts.size (); i++) - if (!(Stem::has_interface (elts[i]) + if (!(has_interface (elts[i]) && to_boolean (elts[i]->get_property ("cross-staff")))) (void) elts[i]->get_property ("vertical-skylines"); @@ -535,7 +535,7 @@ Axis_group_interface::calc_pure_y_common (SCM smob) extract_grob_set (me, "pure-relevant-grobs", elts); Grob *common = common_refpoint_of_array (elts, me, Y_AXIS); - if (common != me && Align_interface::has_interface (common)) + if (common != me && has_interface (common)) { me->programming_error("My pure_y_common is a VerticalAlignment," " which might contain several staves."); @@ -599,7 +599,7 @@ Axis_group_interface::get_children (Grob *me, vector *found) { found->push_back (me); - if (!has_interface (me)) + if (!has_interface (me)) return; extract_grob_set (me, "elements", elements); diff --git a/lily/balloon.cc b/lily/balloon.cc index 7e8067a577..d8519f6e39 100644 --- a/lily/balloon.cc +++ b/lily/balloon.cc @@ -33,7 +33,6 @@ class Balloon_interface public: DECLARE_SCHEME_CALLBACK (print, (SCM)); DECLARE_SCHEME_CALLBACK (print_spanner, (SCM)); - DECLARE_GROB_INTERFACE (); static SCM internal_balloon_print (Grob *me, Grob *p, Offset off); }; diff --git a/lily/beam-collision-engraver.cc b/lily/beam-collision-engraver.cc index bb8e42e1cf..151ffacf16 100644 --- a/lily/beam-collision-engraver.cc +++ b/lily/beam-collision-engraver.cc @@ -115,12 +115,12 @@ Beam_collision_engraver::finalize () if ((covered_grob_spanned_rank[RIGHT] >= beam_spanned_rank_[LEFT]) && !(to_boolean (beam_grob->get_property ("collision-voice-only")) && (covered_grob_context != beam_context)) - && !(Beam::has_interface (covered_grob) + && !(has_interface (covered_grob) && (covered_grob_spanned_rank[LEFT] <= beam_spanned_rank_[LEFT])) && covered_grob_has_interface (covered_grob, beam_grob)) { // Do not consider note heads attached to the beam. - if (Stem::has_interface (covered_grob)) + if (has_interface (covered_grob)) if (unsmob (covered_grob->get_object ("beam"))) continue; diff --git a/lily/beam-quanting.cc b/lily/beam-quanting.cc index 856d8be0b6..f3505772f1 100644 --- a/lily/beam-quanting.cc +++ b/lily/beam-quanting.cc @@ -305,7 +305,7 @@ void Beam_scoring_problem::init_instance_variables (Grob *me, Drul_array y edge_dirs_ = Drul_array (stem_infos_[0].dir_, stem_infos_.back ().dir_); - is_xstaff_ = Align_interface::has_interface (common[Y_AXIS]); + is_xstaff_ = has_interface (common[Y_AXIS]); is_knee_ |= dirs_found[DOWN] && dirs_found[UP]; staff_radius_ = Staff_symbol_referencer::staff_radius (beams[i]); @@ -343,7 +343,7 @@ void Beam_scoring_problem::init_instance_variables (Grob *me, Drul_array y if (!collisions[j]->is_live ()) continue; - if (Beam::has_interface (collisions[j]) && Beam::is_cross_staff (collisions[j])) + if (has_interface (collisions[j]) && Beam::is_cross_staff (collisions[j])) continue; Box b; @@ -364,7 +364,7 @@ void Beam_scoring_problem::init_instance_variables (Grob *me, Drul_array y add_collision (b[X_AXIS][d], b[Y_AXIS], width_factor); Grob *stem = unsmob (collisions[j]->get_object ("stem")); - if (stem && Stem::has_interface (stem) && Stem::is_normal_stem (stem)) + if (has_interface (stem) && Stem::is_normal_stem (stem)) { colliding_stems.insert (stem); } diff --git a/lily/beam.cc b/lily/beam.cc index c18c3d8430..206f6e9f4d 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -1232,7 +1232,7 @@ Beam::rest_collision_callback (SCM smob, SCM prev_offset) return scm_from_double (0.0); Grob *beam = unsmob (stem->get_object ("beam")); if (!beam - || !Beam::has_interface (beam) + || !has_interface (beam) || !Beam::normal_stem_count (beam)) return scm_from_double (0.0); diff --git a/lily/beaming-pattern.cc b/lily/beaming-pattern.cc index cb8c91dbec..f205df8d78 100644 --- a/lily/beaming-pattern.cc +++ b/lily/beaming-pattern.cc @@ -165,7 +165,7 @@ Beaming_pattern::beamify (Beaming_options const &options) for (int i = 0; i < 2; i++) for (vsize i = 1; i < infos_.size () - 1; i++) { - Direction non_flag_dir = other_dir (flag_directions[i]); + Direction non_flag_dir = -flag_directions[i]; if (non_flag_dir) { int importance = infos_[i + 1].rhythmic_importance_; diff --git a/lily/book.cc b/lily/book.cc index cb145f0436..c7f5dd0237 100644 --- a/lily/book.cc +++ b/lily/book.cc @@ -229,7 +229,18 @@ Book::process_score (SCM s, Paper_book *output_paper_book, Output_def *layout) Music_output *output = unsmob (scm_car (outputs)); if (Performance *perf = dynamic_cast (output)) - output_paper_book->add_performance (perf->self_scm ()); + { + output_paper_book->add_performance (perf->self_scm ()); + // Associate the performance with a \header block (if there is + // one in effect in the scope of the current score), to make the + // header metadata accessible when outputting the performance. + if (ly_is_module (score->get_header ())) + perf->set_header (score->get_header ()); + else if (ly_is_module (output_paper_book->header_)) + perf->set_header (output_paper_book->header_); + else if (ly_is_module (output_paper_book->header_0_)) + perf->set_header (output_paper_book->header_0_); + } else if (Paper_score *pscore = dynamic_cast (output)) { if (ly_is_module (score->get_header ())) diff --git a/lily/break-alignment-interface.cc b/lily/break-alignment-interface.cc index 58cb488d6b..e2a546f6a6 100644 --- a/lily/break-alignment-interface.cc +++ b/lily/break-alignment-interface.cc @@ -263,7 +263,7 @@ Break_alignable_interface::self_align_callback (SCM grob) { Grob *me = unsmob (grob); Item *alignment = dynamic_cast (me->get_parent (X_AXIS)); - if (!Break_alignment_interface::has_interface (alignment)) + if (!has_interface (alignment)) return scm_from_int (0); SCM symbol_list = me->get_property ("break-align-symbols"); diff --git a/lily/change-iterator.cc b/lily/change-iterator.cc index 5cf07bf0e2..0f8823d484 100644 --- a/lily/change-iterator.cc +++ b/lily/change-iterator.cc @@ -78,7 +78,7 @@ Change_iterator::change_to (Music_iterator &it, result = _f ("not changing to same context type: %s", ly_symbol2string (to_type).c_str ()); } else - /* FIXME: uncomprehensable message */ + /* FIXME: incomprehensible message */ result = _ ("none of these in my family"); return result; diff --git a/lily/clef-modifier.cc b/lily/clef-modifier.cc index 4c24dd356e..c6ce950fc0 100644 --- a/lily/clef-modifier.cc +++ b/lily/clef-modifier.cc @@ -22,7 +22,6 @@ struct Clef_modifier { DECLARE_SCHEME_CALLBACK (calc_parent_alignment, (SCM)); - DECLARE_GROB_INTERFACE (); }; MAKE_SCHEME_CALLBACK (Clef_modifier, calc_parent_alignment, 1) diff --git a/lily/cluster-engraver.cc b/lily/cluster-engraver.cc index 8af3137f90..bb5ed0dc54 100644 --- a/lily/cluster-engraver.cc +++ b/lily/cluster-engraver.cc @@ -135,7 +135,7 @@ Cluster_spanner_engraver::stop_translation_timestep () void Cluster_spanner_engraver::acknowledge_note_column (Grob_info info) { - if (!beacon_ && Note_column::has_interface (info.grob ())) + if (!beacon_ && has_interface (info.grob ())) { finished_spanner_ = spanner_; spanner_ = 0; diff --git a/lily/cluster.cc b/lily/cluster.cc index 694da482a5..9c160fd8cc 100644 --- a/lily/cluster.cc +++ b/lily/cluster.cc @@ -228,7 +228,6 @@ struct Cluster_beacon { public: DECLARE_SCHEME_CALLBACK (height, (SCM)); - DECLARE_GROB_INTERFACE (); }; MAKE_SCHEME_CALLBACK (Cluster_beacon, height, 1); diff --git a/lily/collision-engraver.cc b/lily/collision-engraver.cc index d2cf95e1e8..d1eb2dd3c0 100644 --- a/lily/collision-engraver.cc +++ b/lily/collision-engraver.cc @@ -23,6 +23,8 @@ #include "axis-group-interface.hh" #include "item.hh" +#include "translator.icc" + class Collision_engraver : public Engraver { Item *col_; @@ -51,7 +53,7 @@ Collision_engraver::process_acknowledged () void Collision_engraver::acknowledge_note_column (Grob_info i) { - if (Note_column::has_interface (i.grob ())) + if (has_interface (i.grob ())) { /*should check Y axis? */ if (Note_column::has_rests (i.grob ()) || i.grob ()->get_parent (X_AXIS)) @@ -76,8 +78,6 @@ Collision_engraver::Collision_engraver () col_ = 0; } -#include "translator.icc" - ADD_ACKNOWLEDGER (Collision_engraver, note_column); ADD_TRANSLATOR (Collision_engraver, diff --git a/lily/control-track-performer.cc b/lily/control-track-performer.cc index 9b0d676870..82beebe122 100644 --- a/lily/control-track-performer.cc +++ b/lily/control-track-performer.cc @@ -52,11 +52,15 @@ Control_track_performer::add_text (Audio_text::Type text_type, const string &str void Control_track_performer::initialize () { - control_track_ = new Audio_staff; + control_track_ = new Audio_control_track_staff; announce_element (Audio_element_info (control_track_, 0)); string id_string = String_convert::pad_to (gnu_lilypond_version_string (), 30); + // The first audio element in the control track is a placeholder for the + // name of the MIDI sequence. The actual name is stored in the element + // later before outputting the track (in Performance::output, see + // performance.cc). add_text (Audio_text::TRACK_NAME, "control track"); add_text (Audio_text::TEXT, "creator: "); add_text (Audio_text::TEXT, id_string); diff --git a/lily/dot-column.cc b/lily/dot-column.cc index b8f1663b10..7ac3140141 100644 --- a/lily/dot-column.cc +++ b/lily/dot-column.cc @@ -95,12 +95,12 @@ Dot_column::calc_positioning_done (SCM smob) Rest collisions should wait after line breaking. */ Interval y; - if (Rest::has_interface (s)) + if (has_interface (s)) { base_x.unite (s->extent (commonx, X_AXIS)); continue; } - else if (Stem::has_interface (s)) + else if (has_interface (s)) { Real y1 = Stem::head_positions (s)[-get_grob_direction (s)]; Real y2 = y1 + get_grob_direction (s) * 7; @@ -110,7 +110,7 @@ Dot_column::calc_positioning_done (SCM smob) stems.insert (s); } - else if (Note_head::has_interface (s)) + else if (has_interface (s)) y = Interval (-1.1, 1.1); else { @@ -200,7 +200,7 @@ Dot_column::calc_positioning_done (SCM smob) Grob *note = dots[i]->get_parent (Y_AXIS); if (note) { - if (Note_head::has_interface (note)) + if (has_interface (note)) dp.dir_ = to_dir (dp.dot_->get_property ("direction")); dp.x_extent_ = note->extent (commonx, X_AXIS); @@ -252,7 +252,7 @@ Dot_column::add_head (Grob *me, Grob *head) // correct X-offset of the dots for horizontal collision avoidance. // The translation here is undone in calc_positioning_done, where we // do the X-offset properly. - if (Rest::has_interface (head)) + if (has_interface (head)) d->translate_axis (head->extent (head, X_AXIS).length (), X_AXIS); else d->set_property ("X-offset", Grob::x_parent_positioning_proc); diff --git a/lily/dynamic-align-engraver.cc b/lily/dynamic-align-engraver.cc index 4a443dec5c..0abb39a7f2 100644 --- a/lily/dynamic-align-engraver.cc +++ b/lily/dynamic-align-engraver.cc @@ -80,7 +80,7 @@ Dynamic_align_engraver::create_line_spanner (Grob *cause) void Dynamic_align_engraver::acknowledge_end_dynamic (Grob_info info) { - if (Spanner::has_interface (info.grob ())) + if (has_interface (info.grob ())) ended_.push_back (info.spanner ()); /* If the break flag is set, store the current spanner and let new dynamics @@ -141,7 +141,7 @@ Dynamic_align_engraver::acknowledge_dynamic (Grob_info info) } create_line_spanner (info.grob ()); - if (Spanner::has_interface (info.grob ())) + if (has_interface (info.grob ())) { started_.push_back (info.spanner ()); current_dynamic_spanner_ = info.spanner (); diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index 4b51d90414..edfd35fcb5 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -179,11 +179,11 @@ Dynamic_engraver::process_music () } if (finished_spanner_) { - if (Hairpin::has_interface (finished_spanner_)) + if (has_interface (finished_spanner_)) Pointer_group_interface::add_grob (finished_spanner_, ly_symbol2scm ("adjacent-spanners"), current_spanner_); - if (Hairpin::has_interface (current_spanner_)) + if (has_interface (current_spanner_)) Pointer_group_interface::add_grob (current_spanner_, ly_symbol2scm ("adjacent-spanners"), finished_spanner_); diff --git a/lily/enclosing-bracket.cc b/lily/enclosing-bracket.cc index 57593649d3..dd551e3841 100644 --- a/lily/enclosing-bracket.cc +++ b/lily/enclosing-bracket.cc @@ -26,7 +26,6 @@ struct Enclosing_bracket { - DECLARE_GROB_INTERFACE (); public: DECLARE_SCHEME_CALLBACK (print, (SCM)); diff --git a/lily/figured-bass-continuation.cc b/lily/figured-bass-continuation.cc index 371c4d24ba..bb84bb3c3e 100644 --- a/lily/figured-bass-continuation.cc +++ b/lily/figured-bass-continuation.cc @@ -30,7 +30,6 @@ struct Figured_bass_continuation { - DECLARE_GROB_INTERFACE (); public: DECLARE_SCHEME_CALLBACK (print, (SCM)); diff --git a/lily/flag.cc b/lily/flag.cc index 1e1ba55ffe..4b90be8be0 100644 --- a/lily/flag.cc +++ b/lily/flag.cc @@ -38,7 +38,6 @@ public: DECLARE_SCHEME_CALLBACK (calc_y_offset, (SCM)); DECLARE_SCHEME_CALLBACK (pure_calc_y_offset, (SCM, SCM, SCM)); DECLARE_SCHEME_CALLBACK (calc_x_offset, (SCM)); - DECLARE_GROB_INTERFACE (); static SCM internal_calc_y_offset (SCM smob, bool pure); }; @@ -187,7 +186,7 @@ Flag::internal_calc_y_offset (SCM smob, bool pure) = me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter")); Interval stem_extent = pure - ? stem->pure_height (stem, 0, INT_MAX) + ? stem->pure_y_extent (stem, 0, INT_MAX) : stem->extent (stem, Y_AXIS); return scm_from_double (stem_extent.is_empty () diff --git a/lily/font-config.cc b/lily/font-config.cc index 26a9799b76..74e591254f 100644 --- a/lily/font-config.cc +++ b/lily/font-config.cc @@ -38,7 +38,41 @@ init_fontconfig () debug_output (_ ("Initializing FontConfig...")); /* TODO: Find a way for Fontconfig to update its cache, if needed. */ - font_config_global = FcInitLoadConfig (); + FcInitLoadConfig (); + + /* Create an empty configuration */ + font_config_global = FcConfigCreate (); + + /* fontconfig conf files */ + vector confs; + + /* LilyPond local fontconfig conf file 00 + This file is loaded *before* fontconfig's default conf. */ + confs.push_back (lilypond_datadir + "/fonts/00-lilypond-fonts.conf"); + + /* fontconfig's default conf file */ + void *default_conf = FcConfigFilename (NULL); + confs.push_back (static_cast(default_conf)); + FcStrFree(static_cast(default_conf)); + + /* LilyPond local fontconfig conf file 99 + This file is loaded *after* fontconfig's default conf. */ + confs.push_back (lilypond_datadir + "/fonts/99-lilypond-fonts.conf"); + + /* Load fontconfig conf files */ + for (vector::const_iterator it = confs.begin (); + it != confs.end (); + it++) + { + if (!FcConfigParseAndLoad (font_config_global, + (FcChar8 *)it->c_str (), + FcFalse)) + error (_f ("failed to add fontconfig configuration file `%s'", + it->c_str ())); + else + debug_output (_f ("Adding fontconfig configuration file: %s", + it->c_str ())); + } /* Extra trailing slash suddenly breaks fontconfig (fc-cache 2.5.0) on windows. */ @@ -49,17 +83,6 @@ init_fontconfig () else debug_output (_f ("Adding font directory: %s", dir.c_str ())); - string conf (lilypond_datadir + "/fonts/lilypond-fonts.conf"); - - if (!FcConfigParseAndLoad (font_config_global, - (FcChar8 *)conf.c_str (), - FcFalse)) - error (_f ("failed adding fontconfig configuration file: %s", - conf.c_str ())); - else - debug_output (_f ("Adding fontconfig configuration file: %s", - conf.c_str ())); - debug_output (_ ("Building font database...")); FcConfigBuildFonts (font_config_global); diff --git a/lily/function-documentation.cc b/lily/function-documentation.cc index 8535f7f2a6..756f174512 100644 --- a/lily/function-documentation.cc +++ b/lily/function-documentation.cc @@ -18,12 +18,25 @@ */ #include +#include using namespace std; #include "std-string.hh" #include "lily-guile.hh" #include "warn.hh" +/* type predicates. */ +#include "global-context.hh" +#include "input.hh" +#include "item.hh" +#include "music.hh" +#include "music-function.hh" +#include "paper-score.hh" +#include "performance.hh" +#include "spanner.hh" +#include "stream-event.hh" +#include "unpure-pure-container.hh" + static SCM doc_hash_table; void @@ -64,8 +77,6 @@ LY_DEFINE (ly_get_all_function_documentation, "ly:get-all-function-documentation return doc_hash_table; } -#include - map type_names; void @@ -87,18 +98,6 @@ predicate_to_typename (void *ptr) return type_names[ptr]; } -/* type predicates. */ -#include "global-context.hh" -#include "input.hh" -#include "item.hh" -#include "music.hh" -#include "music-function.hh" -#include "paper-score.hh" -#include "performance.hh" -#include "spanner.hh" -#include "stream-event.hh" -#include "unpure-pure-container.hh" - void init_func_doc () { diff --git a/lily/grid-line-span-engraver.cc b/lily/grid-line-span-engraver.cc index d51236b681..a61f61df78 100644 --- a/lily/grid-line-span-engraver.cc +++ b/lily/grid-line-span-engraver.cc @@ -21,6 +21,8 @@ #include "item.hh" #include "grid-line-interface.hh" +#include "translator.icc" + class Grid_line_span_engraver : public Engraver { Item *spanline_; @@ -68,7 +70,6 @@ Grid_line_span_engraver::stop_translation_timestep () lines_.resize (0); } -#include "translator.icc" ADD_ACKNOWLEDGER (Grid_line_span_engraver, grid_point); ADD_TRANSLATOR (Grid_line_span_engraver, /* doc */ diff --git a/lily/grob-pq-engraver.cc b/lily/grob-pq-engraver.cc index 8644f6f083..45b4ff2b35 100644 --- a/lily/grob-pq-engraver.cc +++ b/lily/grob-pq-engraver.cc @@ -22,6 +22,8 @@ #include "grob.hh" #include "warn.hh" +#include "translator.icc" + struct Grob_pq_entry { Grob *grob_; @@ -146,7 +148,6 @@ Grob_pq_engraver::start_translation_timestep () context ()->set_property ("busyGrobs", busy); } -#include "translator.icc" ADD_ACKNOWLEDGER (Grob_pq_engraver, grob); ADD_TRANSLATOR (Grob_pq_engraver, /* doc */ diff --git a/lily/grob-scheme.cc b/lily/grob-scheme.cc index b6d07cb8c4..0924b0a58d 100644 --- a/lily/grob-scheme.cc +++ b/lily/grob-scheme.cc @@ -120,7 +120,7 @@ LY_DEFINE (ly_grob_pure_height, "ly:grob-pure-height", if (SCM_UNBNDP (val)) val = SCM_EOL; - Interval retval = sc->pure_height (ref, scm_to_int (beg), scm_to_int (end)); + Interval retval = sc->pure_y_extent (ref, scm_to_int (beg), scm_to_int (end)); return ly_interval2scm (retval); } diff --git a/lily/grob.cc b/lily/grob.cc index d5dcf6794d..2f1bd8aa9f 100644 --- a/lily/grob.cc +++ b/lily/grob.cc @@ -157,10 +157,14 @@ Grob::get_print_stencil () const } /* Calls the scheme procedure stencil-whiteout-box in scm/stencils.scm */ - if (!transparent && to_boolean (get_property ("whiteout-box"))) + if (!transparent && (scm_is_number (get_property("whiteout-box")) + || to_boolean (get_property ("whiteout-box")))) { + Real thickness = robust_scm2double (get_property("whiteout-box"), 0.0) + * layout ()->get_dimension (ly_symbol2scm ("line-thickness")); retval = *unsmob - (Lily::stencil_whiteout_box (retval.smobbed_copy ())); + (Lily::stencil_whiteout_box (retval.smobbed_copy (), + scm_from_double (thickness))); } if (transparent) @@ -391,7 +395,7 @@ Grob::pure_relative_y_coordinate (Grob const *refp, int start, int end) if (Grob *p = get_parent (Y_AXIS)) { Real trans = 0; - if (Align_interface::has_interface (p) && !dim_cache_[Y_AXIS].offset_) + if (has_interface (p) && !dim_cache_[Y_AXIS].offset_) trans = Align_interface::get_pure_child_y_translation (p, this, start, end); return off + trans + p->pure_relative_y_coordinate (refp, start, end); @@ -496,7 +500,7 @@ Grob::extent (Grob *refp, Axis a) const } Interval -Grob::pure_height (Grob *refp, int start, int end) +Grob::pure_y_extent (Grob *refp, int start, int end) { SCM iv_scm = get_pure_property ("Y-extent", start, end); Interval iv = robust_scm2interval (iv_scm, Interval ()); @@ -518,7 +522,7 @@ Grob::pure_height (Grob *refp, int start, int end) Interval Grob::maybe_pure_extent (Grob *refp, Axis a, bool pure, int start, int end) { - return (pure && a == Y_AXIS) ? pure_height (refp, start, end) : extent (refp, a); + return (pure && a == Y_AXIS) ? pure_y_extent (refp, start, end) : extent (refp, a); } Interval_t @@ -638,7 +642,7 @@ get_maybe_root_vertical_alignment (Grob *g, Grob *maybe) { if (!g) return maybe; - if (Align_interface::has_interface (g)) + if (has_interface (g)) return get_maybe_root_vertical_alignment (g->get_parent (Y_AXIS), g); return get_maybe_root_vertical_alignment (g->get_parent (Y_AXIS), maybe); @@ -657,8 +661,8 @@ Grob::get_vertical_axis_group (Grob *g) return 0; if (!g->get_parent (Y_AXIS)) return 0; - if (Axis_group_interface::has_interface (g) - && Align_interface::has_interface (g->get_parent (Y_AXIS))) + if (has_interface (g) + && has_interface (g->get_parent (Y_AXIS))) return g; return get_vertical_axis_group (g->get_parent (Y_AXIS)); @@ -965,11 +969,11 @@ robust_relative_extent (Grob *me, Grob *refpoint, Axis a) bool Grob::check_cross_staff (Grob *commony) { - if (Align_interface::has_interface (commony)) + if (has_interface (commony)) return true; for (Grob *g = this; g && g != commony; g = g->get_parent (Y_AXIS)) - if (Align_interface::has_interface (g)) + if (has_interface (g)) return true; return false; diff --git a/lily/hairpin.cc b/lily/hairpin.cc index a083062e39..01d8fd93de 100644 --- a/lily/hairpin.cc +++ b/lily/hairpin.cc @@ -185,7 +185,7 @@ Hairpin::print (SCM smob) } else { - if (Text_interface::has_interface (b)) + if (has_interface (b)) { if (!e.is_empty ()) x_points[d] = e[-d] - d * padding; @@ -214,7 +214,7 @@ Hairpin::print (SCM smob) if (neighbor_found) { - if (Hairpin::has_interface (adjacent)) + if (has_interface (adjacent)) { /* Handle back-to-back hairpins with a circle in the middle @@ -237,7 +237,7 @@ Hairpin::print (SCM smob) else { if (d == RIGHT // end at the left edge of a rest - && Note_column::has_interface (b) + && has_interface (b) && Note_column::has_rests (b)) x_points[d] = e[-d]; else diff --git a/lily/include/accidental-interface.hh b/lily/include/accidental-interface.hh index f5c36c5583..ef5e07ea66 100644 --- a/lily/include/accidental-interface.hh +++ b/lily/include/accidental-interface.hh @@ -34,7 +34,6 @@ public: DECLARE_SCHEME_CALLBACK (height, (SCM)); DECLARE_SCHEME_CALLBACK (remove_tied, (SCM)); - DECLARE_GROB_INTERFACE (); static SCM get_stencil (Grob *me); }; diff --git a/lily/include/accidental-placement.hh b/lily/include/accidental-placement.hh index bb47efdb0a..4c362cbd93 100644 --- a/lily/include/accidental-placement.hh +++ b/lily/include/accidental-placement.hh @@ -35,7 +35,6 @@ public: vector *real_acc); DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM)); - DECLARE_GROB_INTERFACE (); }; #endif /* ACCIDENTAL_PLACEMENT_HH */ diff --git a/lily/include/align-interface.hh b/lily/include/align-interface.hh index 66548410f4..612c31c0d5 100644 --- a/lily/include/align-interface.hh +++ b/lily/include/align-interface.hh @@ -40,7 +40,6 @@ public: static void add_element (Grob *, Grob *); static int get_count (Grob *, Grob *); - DECLARE_GROB_INTERFACE (); static Real get_pure_child_y_translation (Grob *, Grob *child, int start, int end); diff --git a/lily/include/arpeggio.hh b/lily/include/arpeggio.hh index 6a59b56000..4624529098 100644 --- a/lily/include/arpeggio.hh +++ b/lily/include/arpeggio.hh @@ -34,7 +34,6 @@ public: DECLARE_SCHEME_CALLBACK (brew_chord_slur, (SCM)); DECLARE_SCHEME_CALLBACK (width, (SCM)); DECLARE_SCHEME_CALLBACK (pure_height, (SCM, SCM, SCM)); - DECLARE_GROB_INTERFACE (); }; #endif /* ARPEGGIO_HH */ diff --git a/lily/include/audio-staff.hh b/lily/include/audio-staff.hh index 13124cfc09..a4a9d8a0d1 100644 --- a/lily/include/audio-staff.hh +++ b/lily/include/audio-staff.hh @@ -36,4 +36,10 @@ struct Audio_staff : public Audio_element vector audio_items_; }; +// Subtype to identify a staff that represents the "control track" of a MIDI +// sequence (created by Control_track_performer). +struct Audio_control_track_staff : public Audio_staff +{ +}; + #endif // AUDIO_STAFF_HH diff --git a/lily/include/axis-group-interface.hh b/lily/include/axis-group-interface.hh index 1987d9289b..5e5152d237 100644 --- a/lily/include/axis-group-interface.hh +++ b/lily/include/axis-group-interface.hh @@ -69,7 +69,6 @@ class Axis_group_interface static SCM calc_common (Grob *, Axis); static Real minimum_distance (Grob *, Grob *, Axis); static SCM calc_maybe_pure_staff_staff_spacing (Grob *, bool, int, int); - DECLARE_GROB_INTERFACE (); }; #endif /* AXIS_GROUP_INTERFACE_HH */ diff --git a/lily/include/bar-line.hh b/lily/include/bar-line.hh index 1a157f3c44..ef3739faf0 100644 --- a/lily/include/bar-line.hh +++ b/lily/include/bar-line.hh @@ -26,7 +26,6 @@ class Bar_line { public: - DECLARE_GROB_INTERFACE (); static bool non_empty_barline (Grob *me); }; diff --git a/lily/include/beam.hh b/lily/include/beam.hh index afa3a805ab..6dbdf4b23f 100644 --- a/lily/include/beam.hh +++ b/lily/include/beam.hh @@ -57,7 +57,6 @@ public: static int normal_stem_count (Grob *); static Grob *first_normal_stem (Grob *); static Grob *last_normal_stem (Grob *); - DECLARE_GROB_INTERFACE (); static void add_stem (Grob *, Grob *); static bool is_cross_staff (Grob *); static bool is_knee (Grob *); diff --git a/lily/include/break-align-interface.hh b/lily/include/break-align-interface.hh index 5eba16efee..cbb7f00c74 100644 --- a/lily/include/break-align-interface.hh +++ b/lily/include/break-align-interface.hh @@ -27,7 +27,6 @@ class Break_alignment_interface { public: static vector ordered_elements (Grob *me); - DECLARE_GROB_INTERFACE (); static void add_element (Grob *me, Grob *add); static SCM break_align_order (Item *me); DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM element)); @@ -38,13 +37,11 @@ struct Break_aligned_interface DECLARE_SCHEME_CALLBACK (calc_average_anchor, (SCM)); DECLARE_SCHEME_CALLBACK (calc_extent_aligned_anchor, (SCM)); DECLARE_SCHEME_CALLBACK (calc_break_visibility, (SCM)); - DECLARE_GROB_INTERFACE (); }; struct Break_alignable_interface { DECLARE_SCHEME_CALLBACK (self_align_callback, (SCM element)); - DECLARE_GROB_INTERFACE (); }; #endif // BREAK_ALIGN_INTERFACE_HH diff --git a/lily/include/breathing-sign.hh b/lily/include/breathing-sign.hh index 5718bf2473..84b33cd1b3 100644 --- a/lily/include/breathing-sign.hh +++ b/lily/include/breathing-sign.hh @@ -27,7 +27,6 @@ public: DECLARE_SCHEME_CALLBACK (finalis, (SCM)); DECLARE_SCHEME_CALLBACK (offset_callback, (SCM element)); - DECLARE_GROB_INTERFACE (); }; #endif // BREATHING_SIGN_HH diff --git a/lily/include/chord-name.hh b/lily/include/chord-name.hh index 5a289e223f..0df71f2fb4 100644 --- a/lily/include/chord-name.hh +++ b/lily/include/chord-name.hh @@ -27,7 +27,6 @@ class Chord_name { public: DECLARE_SCHEME_CALLBACK (after_line_breaking, (SCM)); - DECLARE_GROB_INTERFACE (); }; #endif // CHORD_NAME_HH diff --git a/lily/include/clef.hh b/lily/include/clef.hh index 240086ce8b..8e3d10c0d3 100644 --- a/lily/include/clef.hh +++ b/lily/include/clef.hh @@ -27,7 +27,6 @@ struct Clef { DECLARE_SCHEME_CALLBACK (calc_glyph_name, (SCM)); DECLARE_SCHEME_CALLBACK (print, (SCM)); - DECLARE_GROB_INTERFACE (); }; #endif /* CLEF_HH */ diff --git a/lily/include/cluster.hh b/lily/include/cluster.hh index b9d6cf0e07..81aec746f9 100644 --- a/lily/include/cluster.hh +++ b/lily/include/cluster.hh @@ -28,7 +28,6 @@ class Cluster public: DECLARE_SCHEME_CALLBACK (print, (SCM)); DECLARE_SCHEME_CALLBACK (calc_cross_staff, (SCM)); - DECLARE_GROB_INTERFACE (); }; #endif // CLUSTER_HH diff --git a/lily/include/custos.hh b/lily/include/custos.hh index fcb9e9e146..ddf38b0b8a 100644 --- a/lily/include/custos.hh +++ b/lily/include/custos.hh @@ -26,7 +26,6 @@ struct Custos { DECLARE_SCHEME_CALLBACK (print, (SCM)); - DECLARE_GROB_INTERFACE (); private: static void add_streepjes (Grob *me, int pos, int interspaces, Stencil *custos_); diff --git a/lily/include/dot-column.hh b/lily/include/dot-column.hh index a816f426ae..6c975b1c56 100644 --- a/lily/include/dot-column.hh +++ b/lily/include/dot-column.hh @@ -34,7 +34,6 @@ public: static int compare (Grob *const &, Grob *const &); static void add_head (Grob *dotcol, Grob *rh); - DECLARE_GROB_INTERFACE (); DECLARE_SCHEME_CALLBACK (side_position, (SCM)); DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM)); }; diff --git a/lily/include/dots.hh b/lily/include/dots.hh index fdd0673af9..7e1a1f6b52 100644 --- a/lily/include/dots.hh +++ b/lily/include/dots.hh @@ -27,7 +27,6 @@ class Dots { public: DECLARE_SCHEME_CALLBACK (print, (SCM)); - DECLARE_GROB_INTERFACE (); }; #endif // DOTS_HH diff --git a/lily/include/fingering-column.hh b/lily/include/fingering-column.hh index e7d47c0b43..f422da99eb 100644 --- a/lily/include/fingering-column.hh +++ b/lily/include/fingering-column.hh @@ -28,7 +28,6 @@ struct Fingering_column { static void add_fingering (Grob *, Grob *); DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM)); - DECLARE_GROB_INTERFACE (); static void do_x_positioning (Grob *me); static void do_y_positioning (Grob *me); }; diff --git a/lily/include/font-interface.hh b/lily/include/font-interface.hh index 96b6b0b8d9..43fd271dd6 100644 --- a/lily/include/font-interface.hh +++ b/lily/include/font-interface.hh @@ -28,7 +28,6 @@ struct Font_interface static SCM text_font_alist_chain (Grob *); static SCM music_font_alist_chain (Grob *); static Font_metric *get_default_font (Grob *); - DECLARE_GROB_INTERFACE (); }; #endif /* FONT_INTERFACE_HH */ diff --git a/lily/include/gregorian-ligature.hh b/lily/include/gregorian-ligature.hh index b0cfd7afda..0089434163 100644 --- a/lily/include/gregorian-ligature.hh +++ b/lily/include/gregorian-ligature.hh @@ -27,7 +27,6 @@ class Grob; class Gregorian_ligature { public: - DECLARE_GROB_INTERFACE (); static string prefixes_to_str (Grob *); }; diff --git a/lily/include/grid-line-interface.hh b/lily/include/grid-line-interface.hh index 75ed7a7cdf..2a4760a717 100644 --- a/lily/include/grid-line-interface.hh +++ b/lily/include/grid-line-interface.hh @@ -29,13 +29,11 @@ public: static void add_grid_point (Grob *me, Grob *b); DECLARE_SCHEME_CALLBACK (print, (SCM)); DECLARE_SCHEME_CALLBACK (width, (SCM)); - DECLARE_GROB_INTERFACE (); }; class Grid_point_interface { public: - DECLARE_GROB_INTERFACE (); }; #endif /* GRID_LINE_INTERFACE_HH */ diff --git a/lily/include/grob-interface.hh b/lily/include/grob-interface.hh index fc9e58c4a2..9c3eadb4b0 100644 --- a/lily/include/grob-interface.hh +++ b/lily/include/grob-interface.hh @@ -22,21 +22,13 @@ #include "lily-guile.hh" -#define DECLARE_GROB_INTERFACE() \ - static SCM interface_symbol_; \ - static bool has_interface (Grob*) - -#define ADD_INTERFACE(cl, b, c) \ - SCM cl::interface_symbol_; \ - bool cl::has_interface (Grob *me) \ - { \ - return me->internal_has_interface (interface_symbol_); \ - } \ - void cl ## _init_ifaces () \ - { \ - cl::interface_symbol_ = add_interface (#cl, b, c); \ - } \ - ADD_SCM_INIT_FUNC (cl ## ifaces, cl ## _init_ifaces); +class Grob; + +#define ADD_INTERFACE(cl, b, c) \ + Grob_interface cl ## _interface_initializer; \ + template <> char const *Grob_interface::cxx_name_ (#cl); \ + template <> char const *Grob_interface::description_ (b); \ + template <> char const *Grob_interface::variables_ (c); SCM add_interface (char const *cxx_name, char const *descr, @@ -46,5 +38,33 @@ SCM ly_add_interface (SCM, SCM, SCM); void internal_add_interface (SCM, SCM, SCM); SCM ly_all_grob_interfaces (); +template +class Grob_interface +{ +public: + Grob_interface () + { + add_scm_init_func (Grob_interface::init); + } + +private: + static void init () + { + interface_symbol_ = ::add_interface (cxx_name_, description_, variables_); + } + + template + friend bool has_interface(Grob *); + +private: + static SCM interface_symbol_; + static char const *cxx_name_; + static char const *description_; + static char const *variables_; +}; + +template +SCM Grob_interface::interface_symbol_; + #endif /* INTERFACE_HH */ diff --git a/lily/include/grob.hh b/lily/include/grob.hh index 819c86c287..db51e02e73 100644 --- a/lily/include/grob.hh +++ b/lily/include/grob.hh @@ -137,7 +137,6 @@ public: /* interfaces */ bool internal_has_interface (SCM intf); - DECLARE_GROB_INTERFACE (); /* offsets */ void translate_axis (Real, Axis); @@ -148,7 +147,7 @@ public: /* extents */ Interval extent (Grob *refpoint, Axis) const; void flush_extent_cache (Axis); - virtual Interval pure_height (Grob *refpoint, int start_col, int end_col); + virtual Interval pure_y_extent (Grob *refpoint, int start, int end); Interval maybe_pure_extent (Grob *refpoint, Axis, bool pure, int start, int end); /* refpoints */ @@ -175,6 +174,12 @@ public: static SCM internal_skylines_from_element_stencils (SCM, Axis); }; +template +inline bool has_interface(Grob *g) +{ + return g && g->internal_has_interface (Grob_interface::interface_symbol_); +} + /* unification */ void uniquify (vector &); diff --git a/lily/include/hairpin.hh b/lily/include/hairpin.hh index 8807bc8cc8..a2e2f8bf9e 100644 --- a/lily/include/hairpin.hh +++ b/lily/include/hairpin.hh @@ -30,7 +30,6 @@ public: DECLARE_SCHEME_CALLBACK (print, (SCM)); DECLARE_SCHEME_CALLBACK (broken_bound_padding, (SCM)); DECLARE_SCHEME_CALLBACK (pure_height, (SCM, SCM, SCM)); - DECLARE_GROB_INTERFACE (); }; #endif // HAIRPIN_HH diff --git a/lily/include/hara-kiri-group-spanner.hh b/lily/include/hara-kiri-group-spanner.hh index b8ccba5bee..ad5c1d64a2 100644 --- a/lily/include/hara-kiri-group-spanner.hh +++ b/lily/include/hara-kiri-group-spanner.hh @@ -31,7 +31,6 @@ public: DECLARE_SCHEME_CALLBACK (calc_skylines, (SCM smob)); DECLARE_SCHEME_CALLBACK (pure_height, (SCM smob, SCM start, SCM end)); DECLARE_SCHEME_CALLBACK (force_hara_kiri_in_y_parent_callback, (SCM)); - DECLARE_GROB_INTERFACE (); static bool request_suicide (Grob *me, int start, int end); static bool request_suicide_alone (Grob *me, int start, int end); static void consider_suicide (Grob *me); diff --git a/lily/include/horizontal-bracket.hh b/lily/include/horizontal-bracket.hh index e2fbb22b09..3a1692fc11 100644 --- a/lily/include/horizontal-bracket.hh +++ b/lily/include/horizontal-bracket.hh @@ -31,7 +31,6 @@ struct Horizontal_bracket static Stencil make_enclosing_bracket (Grob *me, Grob *refpoint, vector grobs, Axis a, Direction dir); - DECLARE_GROB_INTERFACE (); }; #endif /* HORIZONTAL_BRACKET_HH */ diff --git a/lily/include/item.hh b/lily/include/item.hh index 3b13ed8477..07f1261a52 100644 --- a/lily/include/item.hh +++ b/lily/include/item.hh @@ -52,9 +52,8 @@ public: virtual Paper_column *get_column () const; virtual void handle_prebroken_dependencies (); virtual Interval_t spanned_rank_interval () const; - virtual Interval pure_height (Grob *ref, int start, int end); + virtual Interval pure_y_extent (Grob *ref, int start, int end); virtual void cache_pure_height (Interval height); - DECLARE_GROB_INTERFACE (); protected: virtual void discretionary_processing (); void copy_breakable_items (); diff --git a/lily/include/kievan-ligature.hh b/lily/include/kievan-ligature.hh index a74387a89b..d3d425a515 100644 --- a/lily/include/kievan-ligature.hh +++ b/lily/include/kievan-ligature.hh @@ -26,7 +26,6 @@ struct Kievan_ligature { DECLARE_SCHEME_CALLBACK (print, (SCM)); - DECLARE_GROB_INTERFACE (); }; #endif /* KIEVAN_LIGATURE_HH */ diff --git a/lily/include/lily-proto.hh b/lily/include/lily-proto.hh index afb6beba2a..f574b39c3f 100644 --- a/lily/include/lily-proto.hh +++ b/lily/include/lily-proto.hh @@ -86,7 +86,6 @@ class Ligature_engraver; class Lily_lexer; class Lily_parser; class Listener; -class Lookup; class Lyric_combine_music; class Lyric_combine_music_iterator; class Lyric_engraver; diff --git a/lily/include/line-interface.hh b/lily/include/line-interface.hh index f45aca5b22..b805f7262a 100644 --- a/lily/include/line-interface.hh +++ b/lily/include/line-interface.hh @@ -26,7 +26,6 @@ struct Line_interface { static Stencil line (Grob *me, Offset from, Offset to); - DECLARE_GROB_INTERFACE (); static Stencil make_zigzag_line (Grob *me, Offset from, Offset to); diff --git a/lily/include/lookup.hh b/lily/include/lookup.hh index 3c9c19d7de..5b76145316 100644 --- a/lily/include/lookup.hh +++ b/lily/include/lookup.hh @@ -24,25 +24,25 @@ #include "stencil.hh" #include "std-vector.hh" -struct Lookup +namespace Lookup { - static Stencil bracket (Axis a, Interval iv, Real thick, Real protrude, Real blot); - static Stencil circle (Real rad, Real thick, bool filled); - static Stencil rotated_box (Real slope, Real width, Real thick, Real blot); - static Stencil round_filled_polygon (vector const &points, Real blotdiameter); - static Stencil frame (Box b, Real thick, Real blot); - static Stencil slur (Bezier controls, Real cthick, Real thick, + Stencil bracket (Axis a, Interval iv, Real thick, Real protrude, Real blot); + Stencil circle (Real rad, Real thick, bool filled); + Stencil rotated_box (Real slope, Real width, Real thick, Real blot); + Stencil round_filled_polygon (vector const &points, Real blotdiameter); + Stencil frame (Box b, Real thick, Real blot); + Stencil slur (Bezier controls, Real cthick, Real thick, SCM dash_definition); - static Stencil bezier_sandwich (Bezier top_curve, Bezier bottom_curve, + Stencil bezier_sandwich (Bezier top_curve, Bezier bottom_curve, Real thickness); - static Stencil beam (Real slope, Real width, Real thick, Real blot); - static Stencil blank (Box b); - static Stencil filled_box (Box b); - static Stencil round_filled_box (Box b, Real blotdiameter); - static Stencil repeat_slash (Real w, Real slope, Real th); - static Stencil horizontal_line (Interval w, Real th); - static Stencil triangle (Interval iv, Real thick, Real protrude); - static Stencil points_to_line_stencil (Real thick, vector const &points); + Stencil beam (Real slope, Real width, Real thick, Real blot); + Stencil blank (Box b); + Stencil filled_box (Box b); + Stencil round_filled_box (Box b, Real blotdiameter); + Stencil repeat_slash (Real w, Real slope, Real th); + Stencil horizontal_line (Interval w, Real th); + Stencil triangle (Interval iv, Real thick, Real protrude); + Stencil points_to_line_stencil (Real thick, vector const &points); }; #endif // LOOKUP_HH diff --git a/lily/include/lyric-extender.hh b/lily/include/lyric-extender.hh index 88135421e4..8ae8c97553 100644 --- a/lily/include/lyric-extender.hh +++ b/lily/include/lyric-extender.hh @@ -27,7 +27,6 @@ class Lyric_extender { public: - DECLARE_GROB_INTERFACE (); DECLARE_SCHEME_CALLBACK (print, (SCM)); }; diff --git a/lily/include/lyric-hyphen.hh b/lily/include/lyric-hyphen.hh index 95418bc36a..fb03c6df51 100644 --- a/lily/include/lyric-hyphen.hh +++ b/lily/include/lyric-hyphen.hh @@ -27,7 +27,6 @@ struct Lyric_hyphen { public: DECLARE_SCHEME_CALLBACK (set_spacing_rods, (SCM)); - DECLARE_GROB_INTERFACE (); DECLARE_SCHEME_CALLBACK (print, (SCM)); }; diff --git a/lily/include/measure-grouping-spanner.hh b/lily/include/measure-grouping-spanner.hh index 44eb334b17..0e67f22822 100644 --- a/lily/include/measure-grouping-spanner.hh +++ b/lily/include/measure-grouping-spanner.hh @@ -28,7 +28,6 @@ class Measure_grouping public: DECLARE_SCHEME_CALLBACK (print, (SCM)); - DECLARE_GROB_INTERFACE (); }; #endif /* MEASURE_GROUPING_SPANNER_HH */ diff --git a/lily/include/melody-spanner.hh b/lily/include/melody-spanner.hh index 4609a4c90d..6ce6a2733b 100644 --- a/lily/include/melody-spanner.hh +++ b/lily/include/melody-spanner.hh @@ -26,7 +26,6 @@ class Melody_spanner { public: - DECLARE_GROB_INTERFACE (); static void add_stem (Grob *, Grob *); DECLARE_SCHEME_CALLBACK (calc_neutral_stem_direction, (SCM)); }; diff --git a/lily/include/mensural-ligature.hh b/lily/include/mensural-ligature.hh index 97b8e2e216..3e4e46a641 100644 --- a/lily/include/mensural-ligature.hh +++ b/lily/include/mensural-ligature.hh @@ -45,7 +45,6 @@ struct Mensural_ligature { DECLARE_SCHEME_CALLBACK (brew_ligature_primitive, (SCM)); DECLARE_SCHEME_CALLBACK (print, (SCM)); - DECLARE_GROB_INTERFACE (); }; #endif /* MENSURAL_LIGATURE_HH */ diff --git a/lily/include/multi-measure-rest.hh b/lily/include/multi-measure-rest.hh index bf3c7083a7..f4d379ade4 100644 --- a/lily/include/multi-measure-rest.hh +++ b/lily/include/multi-measure-rest.hh @@ -26,7 +26,6 @@ class Multi_measure_rest { public: - DECLARE_GROB_INTERFACE (); DECLARE_SCHEME_CALLBACK (print, (SCM)); DECLARE_SCHEME_CALLBACK (height, (SCM)); DECLARE_SCHEME_CALLBACK (percent, (SCM)); diff --git a/lily/include/note-collision.hh b/lily/include/note-collision.hh index fcdece0a59..ad2ed5345d 100644 --- a/lily/include/note-collision.hh +++ b/lily/include/note-collision.hh @@ -44,6 +44,5 @@ public: static Drul_array > get_clash_groups (Grob *me); DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM smob)); static void add_column (Grob *me, Grob *ncol); - DECLARE_GROB_INTERFACE (); }; #endif // COLLISION_HH diff --git a/lily/include/note-column.hh b/lily/include/note-column.hh index cd09b076af..1cf08545bf 100644 --- a/lily/include/note-column.hh +++ b/lily/include/note-column.hh @@ -43,7 +43,6 @@ public: static bool has_rests (Grob *me); static Grob *dot_column (Grob *me); static Interval cross_staff_extent (Grob *me, Grob *refp); - DECLARE_GROB_INTERFACE (); static Item *get_stem (Grob *); static Item *get_flag (Grob *); diff --git a/lily/include/note-head.hh b/lily/include/note-head.hh index d14fbcfe77..1e167d58b2 100644 --- a/lily/include/note-head.hh +++ b/lily/include/note-head.hh @@ -30,7 +30,6 @@ public: DECLARE_SCHEME_CALLBACK (stem_x_shift, (SCM)); DECLARE_SCHEME_CALLBACK (calc_stem_attachment, (SCM)); DECLARE_SCHEME_CALLBACK (include_ledger_line_height, (SCM)); - DECLARE_GROB_INTERFACE (); static Real stem_attachment_coordinate (Grob *, Axis a); static int get_balltype (Grob *); diff --git a/lily/include/note-spacing.hh b/lily/include/note-spacing.hh index 7fde934f51..df063b382e 100644 --- a/lily/include/note-spacing.hh +++ b/lily/include/note-spacing.hh @@ -27,7 +27,6 @@ class Note_spacing { public: - DECLARE_GROB_INTERFACE (); static Spring get_spacing (Grob *me, Item *, Spring, Real); static void stem_dir_correction (Grob *me, Item *next_col, Real incr, diff --git a/lily/include/paper-column.hh b/lily/include/paper-column.hh index 03c503f9a8..f1cb01e740 100644 --- a/lily/include/paper-column.hh +++ b/lily/include/paper-column.hh @@ -50,7 +50,6 @@ public: DECLARE_SCHEME_CALLBACK (print, (SCM)); DECLARE_SCHEME_CALLBACK (before_line_breaking, (SCM)); - DECLARE_GROB_INTERFACE (); static int get_rank (Grob const *); static bool is_musical (Grob *); static Moment when_mom (Grob *); diff --git a/lily/include/percent-repeat-item.hh b/lily/include/percent-repeat-item.hh index 448b811034..85b1cdb446 100644 --- a/lily/include/percent-repeat-item.hh +++ b/lily/include/percent-repeat-item.hh @@ -26,7 +26,6 @@ class Percent_repeat_item_interface { public: - DECLARE_GROB_INTERFACE (); DECLARE_SCHEME_CALLBACK (beat_slash, (SCM)); DECLARE_SCHEME_CALLBACK (double_percent, (SCM)); static Stencil x_percent (Grob *, int); diff --git a/lily/include/performance.hh b/lily/include/performance.hh index 3f9c5d6f1b..f9c53ff2e8 100644 --- a/lily/include/performance.hh +++ b/lily/include/performance.hh @@ -31,19 +31,25 @@ public: ~Performance (); DECLARE_CLASSNAME (Performance); + SCM get_header () const; + void set_header (SCM header); + + virtual void derived_mark () const; + void add_element (Audio_element *p); virtual void process (); void remap_grace_durations (); - void output (Midi_stream &midi_stream) const; + void output (Midi_stream &midi_stream, const string &performance_name) const; void output_header_track (Midi_stream &midi_stream) const; void print () const; - void write_output (string filename) const; + void write_output (string filename, const string &performance_name) const; vector audio_staffs_; vector audio_elements_; Output_def *midi_; bool ports_; + SCM header_; }; #endif /* PERFORMANCE_HH */ diff --git a/lily/include/pure-from-neighbor-interface.hh b/lily/include/pure-from-neighbor-interface.hh index ec53a97f47..f125d217e4 100644 --- a/lily/include/pure-from-neighbor-interface.hh +++ b/lily/include/pure-from-neighbor-interface.hh @@ -27,7 +27,6 @@ class Pure_from_neighbor_interface { public: DECLARE_SCHEME_CALLBACK (calc_pure_relevant_grobs, (SCM)); - DECLARE_GROB_INTERFACE (); }; diff --git a/lily/include/rest-collision.hh b/lily/include/rest-collision.hh index b9cfc17b8e..3946f9b933 100644 --- a/lily/include/rest-collision.hh +++ b/lily/include/rest-collision.hh @@ -28,7 +28,6 @@ class Rest_collision public: static void add_column (Grob *me, Grob *); - DECLARE_GROB_INTERFACE (); DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM element)); DECLARE_SCHEME_CALLBACK (force_shift_callback_rest, (SCM element, SCM off)); static SCM do_shift (Grob *); diff --git a/lily/include/rest.hh b/lily/include/rest.hh index 548e031e55..644aa1450c 100644 --- a/lily/include/rest.hh +++ b/lily/include/rest.hh @@ -29,7 +29,6 @@ class Rest public: DECLARE_SCHEME_CALLBACK (y_offset_callback, (SCM)); DECLARE_SCHEME_CALLBACK (calc_cross_staff, (SCM)); - DECLARE_GROB_INTERFACE (); static string glyph_name (Grob *, int durlog, const string &style, bool, Real); static Real staff_position_internal (Grob *, int /* duration_log */, int /* dir */); diff --git a/lily/include/rhythmic-head.hh b/lily/include/rhythmic-head.hh index e7cb7cfc4a..17eecd4f22 100644 --- a/lily/include/rhythmic-head.hh +++ b/lily/include/rhythmic-head.hh @@ -32,7 +32,6 @@ public: static Item *get_dots (Grob *); static int dot_count (Grob *); DECLARE_SCHEME_CALLBACK (after_line_breaking, (SCM)); - DECLARE_GROB_INTERFACE (); }; #endif // RHYTHMIC_HEAD_HH diff --git a/lily/include/script-column.hh b/lily/include/script-column.hh index 51f2eb9206..fe4816eae1 100644 --- a/lily/include/script-column.hh +++ b/lily/include/script-column.hh @@ -30,7 +30,6 @@ public: static void add_side_positioned (Grob *, Grob *); DECLARE_SCHEME_CALLBACK (before_line_breaking, (SCM)); DECLARE_SCHEME_CALLBACK (row_before_line_breaking, (SCM)); - DECLARE_GROB_INTERFACE (); static void order_grobs (vector grobs); }; diff --git a/lily/include/script-interface.hh b/lily/include/script-interface.hh index 2839010b0d..9154aea6cc 100644 --- a/lily/include/script-interface.hh +++ b/lily/include/script-interface.hh @@ -34,7 +34,6 @@ public: static Stencil get_stencil (Grob *, Direction d); static Direction get_direction (Grob *); - DECLARE_GROB_INTERFACE (); DECLARE_SCHEME_CALLBACK (print, (SCM)); DECLARE_SCHEME_CALLBACK (calc_direction, (SCM)); DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM)); diff --git a/lily/include/self-alignment-interface.hh b/lily/include/self-alignment-interface.hh index ffdfb82501..4cf683fd36 100644 --- a/lily/include/self-alignment-interface.hh +++ b/lily/include/self-alignment-interface.hh @@ -25,7 +25,6 @@ struct Self_alignment_interface { - DECLARE_GROB_INTERFACE (); static SCM aligned_on_self (Grob *me, Axis a, bool pure, int start, int end); static SCM centered_on_object (Grob *me, Axis a); diff --git a/lily/include/semi-tie-column.hh b/lily/include/semi-tie-column.hh index 7ad63e80d1..e02b57a11e 100644 --- a/lily/include/semi-tie-column.hh +++ b/lily/include/semi-tie-column.hh @@ -26,7 +26,6 @@ struct Semi_tie_column { - DECLARE_GROB_INTERFACE (); DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM)); DECLARE_SCHEME_CALLBACK (calc_head_direction, (SCM)); diff --git a/lily/include/semi-tie.hh b/lily/include/semi-tie.hh index 97a3dcbe04..1e8db8bdb8 100644 --- a/lily/include/semi-tie.hh +++ b/lily/include/semi-tie.hh @@ -25,7 +25,6 @@ struct Semi_tie { - DECLARE_GROB_INTERFACE (); DECLARE_SCHEME_CALLBACK (calc_control_points, (SCM)); static bool less (Grob *s1, Grob *s2); diff --git a/lily/include/separation-item.hh b/lily/include/separation-item.hh index f78fd0d6a9..81ea523fe2 100644 --- a/lily/include/separation-item.hh +++ b/lily/include/separation-item.hh @@ -27,7 +27,6 @@ struct Separation_item { - DECLARE_GROB_INTERFACE (); DECLARE_SCHEME_CALLBACK (calc_skylines, (SCM)); DECLARE_SCHEME_CALLBACK (print, (SCM)); diff --git a/lily/include/side-position-interface.hh b/lily/include/side-position-interface.hh index c98189f087..c0330e795d 100644 --- a/lily/include/side-position-interface.hh +++ b/lily/include/side-position-interface.hh @@ -42,7 +42,6 @@ public: static Axis get_axis (Grob *); static void set_axis (Grob *, Axis); - DECLARE_GROB_INTERFACE (); static void add_support (Grob *, Grob *); static void recursive_add_support (Grob *, Grob *); static void add_staff_support (Grob *); diff --git a/lily/include/slur.hh b/lily/include/slur.hh index 000c07dce8..ae85ac24d3 100644 --- a/lily/include/slur.hh +++ b/lily/include/slur.hh @@ -41,7 +41,6 @@ public: DECLARE_SCHEME_CALLBACK (pure_outside_slur_callback, (SCM, SCM, SCM, SCM)); DECLARE_SCHEME_CALLBACK (outside_slur_cross_staff, (SCM, SCM)); DECLARE_SCHEME_CALLBACK (calc_cross_staff, (SCM)); - DECLARE_GROB_INTERFACE (); static Bezier get_curve (Grob *me); }; diff --git a/lily/include/spaceable-grob.hh b/lily/include/spaceable-grob.hh index ba219c28a9..5c6427e658 100644 --- a/lily/include/spaceable-grob.hh +++ b/lily/include/spaceable-grob.hh @@ -31,7 +31,6 @@ struct Spaceable_grob static void add_spring (Grob *me, Grob *to, Spring sp); static Spring get_spring (Grob *me, Grob *other); - DECLARE_GROB_INTERFACE (); static SCM get_minimum_distances (Grob *); static SCM get_ideal_distances (Grob *); }; diff --git a/lily/include/spacing-interface.hh b/lily/include/spacing-interface.hh index 2ade005a22..ddfe2efb1c 100644 --- a/lily/include/spacing-interface.hh +++ b/lily/include/spacing-interface.hh @@ -32,7 +32,6 @@ struct Spacing_interface static Drul_array skylines (Grob *me, Grob *right_col); static Grob *extremal_break_aligned_grob (Grob *me, Direction, Direction, Interval *); - DECLARE_GROB_INTERFACE (); }; #endif /* SPACING_INTERFACE_HH */ diff --git a/lily/include/spacing-spanner.hh b/lily/include/spacing-spanner.hh index 61ed8dc4ac..fcfba90417 100644 --- a/lily/include/spacing-spanner.hh +++ b/lily/include/spacing-spanner.hh @@ -50,7 +50,6 @@ public: DECLARE_SCHEME_CALLBACK (set_springs, (SCM)); DECLARE_SCHEME_CALLBACK (calc_common_shortest_duration, (SCM)); - DECLARE_GROB_INTERFACE (); }; #endif /* SPACING_SPANNER_HH */ diff --git a/lily/include/spanner.hh b/lily/include/spanner.hh index 7ee27abcb1..79032dfb30 100644 --- a/lily/include/spanner.hh +++ b/lily/include/spanner.hh @@ -76,7 +76,6 @@ public: static bool less (Spanner *const &, Spanner *const &); virtual Grob *find_broken_piece (System *) const; virtual void derived_mark () const; - DECLARE_GROB_INTERFACE (); virtual System *get_system () const; SCM get_cached_pure_property (SCM sym, int start, int end); diff --git a/lily/include/staff-grouper-interface.hh b/lily/include/staff-grouper-interface.hh index 3ad0ccf568..0e00d4280f 100644 --- a/lily/include/staff-grouper-interface.hh +++ b/lily/include/staff-grouper-interface.hh @@ -25,7 +25,6 @@ class Staff_grouper_interface { public: - DECLARE_GROB_INTERFACE (); static bool maybe_pure_within_group (Grob *, Grob *child, bool, int, int); }; diff --git a/lily/include/staff-spacing.hh b/lily/include/staff-spacing.hh index 521be99d19..11a81a998e 100644 --- a/lily/include/staff-spacing.hh +++ b/lily/include/staff-spacing.hh @@ -30,7 +30,6 @@ class Staff_spacing static Real next_notes_correction (Grob *, Grob *); public: - DECLARE_GROB_INTERFACE (); static Spring get_spacing (Grob *, Grob *, Real); static Interval bar_y_positions (Grob *); }; diff --git a/lily/include/staff-symbol-referencer.hh b/lily/include/staff-symbol-referencer.hh index 3c5f55b836..64d41014d7 100644 --- a/lily/include/staff-symbol-referencer.hh +++ b/lily/include/staff-symbol-referencer.hh @@ -30,7 +30,6 @@ class Staff_symbol_referencer { public: - DECLARE_GROB_INTERFACE (); static bool ugly_hack (Grob *); static void set_position (Grob *, Real); static void pure_set_position (Grob *, Real); diff --git a/lily/include/staff-symbol.hh b/lily/include/staff-symbol.hh index 19e826d3d0..9454ebe7f4 100644 --- a/lily/include/staff-symbol.hh +++ b/lily/include/staff-symbol.hh @@ -40,6 +40,5 @@ public: static Interval line_span (Grob *); DECLARE_SCHEME_CALLBACK (print, (SCM)); DECLARE_SCHEME_CALLBACK (height, (SCM)); - DECLARE_GROB_INTERFACE (); }; #endif // STAFF_SYMBOL_HH diff --git a/lily/include/stem-tremolo.hh b/lily/include/stem-tremolo.hh index 2495bb695a..ead984dc38 100644 --- a/lily/include/stem-tremolo.hh +++ b/lily/include/stem-tremolo.hh @@ -27,7 +27,6 @@ class Stem_tremolo { public: - DECLARE_GROB_INTERFACE (); DECLARE_SCHEME_CALLBACK (calc_slope, (SCM)); DECLARE_SCHEME_CALLBACK (calc_width, (SCM)); DECLARE_SCHEME_CALLBACK (calc_y_offset, (SCM)); diff --git a/lily/include/stem.hh b/lily/include/stem.hh index 0aeb83ee6a..7c4612552a 100644 --- a/lily/include/stem.hh +++ b/lily/include/stem.hh @@ -58,7 +58,6 @@ public: static Real internal_calc_stem_end_position (Grob *, bool); static Real internal_calc_stem_begin_position (Grob *, bool); - DECLARE_GROB_INTERFACE (); static void set_spacing_hints (Grob *); static Grob *flag (Grob *); diff --git a/lily/include/system-start-delimiter.hh b/lily/include/system-start-delimiter.hh index 3e1848c530..bf1fd0d28c 100644 --- a/lily/include/system-start-delimiter.hh +++ b/lily/include/system-start-delimiter.hh @@ -31,7 +31,6 @@ class System_start_delimiter public: DECLARE_SCHEME_CALLBACK (print, (SCM)); - DECLARE_GROB_INTERFACE (); static void try_collapse (Grob *); static Stencil staff_bracket (Grob *, Real); static Stencil old_staff_bracket (Grob *, Real); diff --git a/lily/include/system.hh b/lily/include/system.hh index 84b39bd02f..4e402ffeca 100644 --- a/lily/include/system.hh +++ b/lily/include/system.hh @@ -74,7 +74,6 @@ public: int spanner_count () const; void break_into_pieces (vector const &); - DECLARE_GROB_INTERFACE (); vector broken_col_range (Item const *, Item const *) const; vector used_columns () const; diff --git a/lily/include/text-interface.hh b/lily/include/text-interface.hh index f8f86d6f33..c653495be8 100644 --- a/lily/include/text-interface.hh +++ b/lily/include/text-interface.hh @@ -30,7 +30,6 @@ public: DECLARE_SCHEME_CALLBACK (print, (SCM)); DECLARE_SCHEME_CALLBACK (interpret_markup, (SCM, SCM, SCM)); DECLARE_SCHEME_CALLBACK (interpret_string, (SCM, SCM, SCM)); - DECLARE_GROB_INTERFACE (); static bool is_markup (SCM); static bool is_markup_list (SCM); }; diff --git a/lily/include/tie-column.hh b/lily/include/tie-column.hh index 0485cd0bcf..025cf8433a 100644 --- a/lily/include/tie-column.hh +++ b/lily/include/tie-column.hh @@ -26,7 +26,6 @@ class Tie_column { public: - DECLARE_GROB_INTERFACE (); static void add_tie (Grob *me, Spanner *); DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM)); DECLARE_SCHEME_CALLBACK (before_line_breaking, (SCM)); diff --git a/lily/include/tie.hh b/lily/include/tie.hh index 186c0a4d38..e92ca61947 100644 --- a/lily/include/tie.hh +++ b/lily/include/tie.hh @@ -28,7 +28,6 @@ class Tie { public: static void set_head (Spanner *, Direction, Grob *head); - DECLARE_GROB_INTERFACE (); static Item *head (Spanner *, Direction); static int get_column_rank (Spanner *, Direction); static int get_position (Spanner *); diff --git a/lily/include/tuplet-bracket.hh b/lily/include/tuplet-bracket.hh index 72daae4da9..1e41154fbf 100644 --- a/lily/include/tuplet-bracket.hh +++ b/lily/include/tuplet-bracket.hh @@ -34,7 +34,6 @@ public: DECLARE_SCHEME_CALLBACK (calc_connect_to_neighbors, (SCM smob)); DECLARE_SCHEME_CALLBACK (calc_cross_staff, (SCM)); - DECLARE_GROB_INTERFACE (); static Grob *get_common_x (Spanner *); static void add_tuplet_bracket (Grob *me, Grob *smaller_bracket); static void get_bounds (Grob *, Grob **, Grob **); diff --git a/lily/include/tuplet-number.hh b/lily/include/tuplet-number.hh index 9780beefb2..24ba77a377 100644 --- a/lily/include/tuplet-number.hh +++ b/lily/include/tuplet-number.hh @@ -30,7 +30,6 @@ struct Tuplet_number DECLARE_SCHEME_CALLBACK (calc_x_offset, (SCM)); DECLARE_SCHEME_CALLBACK (calc_y_offset, (SCM)); DECLARE_SCHEME_CALLBACK (calc_cross_staff, (SCM)); - DECLARE_GROB_INTERFACE (); static Real calc_offset (Spanner *me, Axis a); // not used diff --git a/lily/include/vaticana-ligature.hh b/lily/include/vaticana-ligature.hh index 912b54dece..25e994753f 100644 --- a/lily/include/vaticana-ligature.hh +++ b/lily/include/vaticana-ligature.hh @@ -27,7 +27,6 @@ struct Vaticana_ligature { DECLARE_SCHEME_CALLBACK (brew_ligature_primitive, (SCM)); DECLARE_SCHEME_CALLBACK (print, (SCM)); - DECLARE_GROB_INTERFACE (); }; /* diff --git a/lily/include/volta-bracket.hh b/lily/include/volta-bracket.hh index 1a934d4a4a..ffde225d2f 100644 --- a/lily/include/volta-bracket.hh +++ b/lily/include/volta-bracket.hh @@ -26,7 +26,6 @@ class Volta_bracket_interface { public: - DECLARE_GROB_INTERFACE (); DECLARE_SCHEME_CALLBACK (print, (SCM)); static void modify_edge_height (Spanner *); static void add_bar (Grob *me, Item *bar); diff --git a/lily/instrument-name-engraver.cc b/lily/instrument-name-engraver.cc index 8b1a4c3003..d339fbce61 100644 --- a/lily/instrument-name-engraver.cc +++ b/lily/instrument-name-engraver.cc @@ -133,7 +133,7 @@ Instrument_name_engraver::acknowledge_axis_group (Grob_info info) && !info.grob ()->internal_has_interface (ly_symbol2scm ("dynamic-interface")) && !info.grob ()->internal_has_interface (ly_symbol2scm ("piano-pedal-interface")) && !info.grob ()->internal_has_interface (ly_symbol2scm ("volta-interface")) - && (!Align_interface::has_interface (info.grob ()))) + && (!has_interface (info.grob ()))) { if (Page_layout_problem::is_spaceable (info.grob ())) axis_groups_.push_back (info.grob ()); diff --git a/lily/item.cc b/lily/item.cc index 220176e55b..f90b29d30a 100644 --- a/lily/item.cc +++ b/lily/item.cc @@ -224,7 +224,7 @@ Item::derived_mark () const } Interval -Item::pure_height (Grob *g, int start, int end) +Item::pure_y_extent (Grob *g, int start, int end) { if (cached_pure_height_valid_) return cached_pure_height_ + pure_relative_y_coordinate (g, start, end); @@ -232,7 +232,7 @@ Item::pure_height (Grob *g, int start, int end) assuming that Items' pure_heights do not depend on 'start' or 'end'. */ - cache_pure_height (Grob::pure_height (this, start, end)); + cache_pure_height (Grob::pure_y_extent (this, start, end)); return cached_pure_height_ + pure_relative_y_coordinate (g, start, end); } diff --git a/lily/key-signature-interface.cc b/lily/key-signature-interface.cc index 56af49da39..3249a736c3 100644 --- a/lily/key-signature-interface.cc +++ b/lily/key-signature-interface.cc @@ -32,7 +32,6 @@ struct Key_signature_interface { DECLARE_SCHEME_CALLBACK (print, (SCM)); - DECLARE_GROB_INTERFACE (); }; /* diff --git a/lily/ledger-line-engraver.cc b/lily/ledger-line-engraver.cc index 40ef019d23..8e871c1abf 100644 --- a/lily/ledger-line-engraver.cc +++ b/lily/ledger-line-engraver.cc @@ -22,6 +22,8 @@ #include "engraver.hh" #include "staff-symbol.hh" +#include "translator.icc" + class Ledger_line_engraver : public Engraver { Spanner *span_; @@ -118,8 +120,6 @@ Ledger_line_engraver::acknowledge_ledgered (Grob_info s) ledgered_grobs_.push_back (s.grob ()); } -#include "translator.icc" - ADD_ACKNOWLEDGER (Ledger_line_engraver, ledgered); ADD_ACKNOWLEDGER (Ledger_line_engraver, staff_symbol); ADD_TRANSLATOR (Ledger_line_engraver, diff --git a/lily/ledger-line-spanner.cc b/lily/ledger-line-spanner.cc index 5cb5462351..b0e8fee3c2 100644 --- a/lily/ledger-line-spanner.cc +++ b/lily/ledger-line-spanner.cc @@ -32,7 +32,6 @@ struct Ledger_line_spanner { DECLARE_SCHEME_CALLBACK (print, (SCM)); DECLARE_SCHEME_CALLBACK (set_spacing_rods, (SCM)); - DECLARE_GROB_INTERFACE (); }; static void @@ -339,7 +338,6 @@ ADD_INTERFACE (Ledger_line_spanner, struct Ledgered_interface { - DECLARE_GROB_INTERFACE (); }; ADD_INTERFACE (Ledgered_interface, diff --git a/lily/line-interface-scheme.cc b/lily/line-interface-scheme.cc new file mode 100644 index 0000000000..dee6a15d15 --- /dev/null +++ b/lily/line-interface-scheme.cc @@ -0,0 +1,44 @@ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2010--2015 Han-Wen Nienhuys + + 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 . +*/ + +#include "line-interface.hh" + +#include "stencil.hh" +#include "grob.hh" + +LY_DEFINE (ly_line_interface__line, "ly:line-interface::line", + 5, 0, 0, (SCM grob, SCM startx, SCM starty, SCM endx, SCM endy), + "Make a line using layout information from grob @var{grob}.") +{ + LY_ASSERT_SMOB (Grob, grob, 1); + + Grob *me = unsmob (grob); + + LY_ASSERT_TYPE (scm_is_number, startx, 2); + LY_ASSERT_TYPE (scm_is_number, starty, 3); + LY_ASSERT_TYPE (scm_is_number, endx, 4); + LY_ASSERT_TYPE (scm_is_number, endy, 5); + + Offset from = Offset (scm_to_double (startx), scm_to_double (starty)); + Offset to = Offset (scm_to_double (endx), scm_to_double (endy)); + + Stencil stil = Line_interface::line (me, from, to); + + return stil.smobbed_copy (); +} diff --git a/lily/line-interface.cc b/lily/line-interface.cc index 056587a1d9..b90be8c04c 100644 --- a/lily/line-interface.cc +++ b/lily/line-interface.cc @@ -30,7 +30,7 @@ Line_interface::make_arrow (Offset begin, Offset end, Real thick, Real length, Real width) { - Real angle = (end - begin).arg (); + Offset dir = (end - begin).direction (); vector points; points.push_back (Offset (0, 0)); @@ -38,7 +38,7 @@ Line_interface::make_arrow (Offset begin, Offset end, points.push_back (Offset (-length, -width)); for (vsize i = 0; i < points.size (); i++) - points[i] = points[i] * complex_exp (Offset (0, angle)) + end; + points[i] = points[i] * dir + end; return Lookup::round_filled_polygon (points, thick); } @@ -95,7 +95,7 @@ Line_interface::make_zigzag_line (Grob *me, Real l = robust_scm2double (me->get_property ("zigzag-length"), 1) * w; Real h = l > w / 2 ? sqrt (l * l - w * w / 4) : 0; - Offset rotation_factor = complex_exp (Offset (0, dz.arg ())); + Offset rotation_factor = dz.direction (); Offset points[3]; points[0] = Offset (0, -h / 2); diff --git a/lily/line-spanner.cc b/lily/line-spanner.cc index be20f25d98..84c43ccf81 100644 --- a/lily/line-spanner.cc +++ b/lily/line-spanner.cc @@ -43,12 +43,11 @@ public: DECLARE_SCHEME_CALLBACK (calc_left_bound_info_and_text, (SCM)); DECLARE_SCHEME_CALLBACK (calc_right_bound_info, (SCM)); DECLARE_SCHEME_CALLBACK (calc_bound_info, (SCM, Direction)); - DECLARE_GROB_INTERFACE (); }; Spanner *parent_spanner (Grob *g) { - if (Spanner::has_interface (g)) + if (has_interface (g)) return dynamic_cast (g); return parent_spanner (g->get_parent (Y_AXIS)); } @@ -110,7 +109,7 @@ Line_spanner::calc_bound_info (SCM smob, Direction dir) ? columns[0] : columns.back (); } - Real x_coord = (Paper_column::has_interface (bound_grob) + Real x_coord = (has_interface (bound_grob) ? Axis_group_interface::generic_bound_extent (bound_grob, commonx, X_AXIS) : robust_relative_extent (bound_grob, commonx, X_AXIS)).linear_combination (attach); @@ -169,7 +168,7 @@ Line_spanner::calc_bound_info (SCM smob, Direction dir) VerticalAxisGroup of a staff) that extends over the break. */ Spanner *next_bound_parent_on_this_line - = next_bound_parent->broken_neighbor (other_dir (dir)); + = next_bound_parent->broken_neighbor (-dir); if (next_bound_parent_on_this_line) { diff --git a/lily/lookup.cc b/lily/lookup.cc index 280b85bcfa..4f9d0bbbde 100644 --- a/lily/lookup.cc +++ b/lily/lookup.cc @@ -88,11 +88,8 @@ Stencil Lookup::rotated_box (Real slope, Real width, Real thick, Real blot) { vector pts; - Offset rot (1, slope); + Offset rot = Offset (1, slope).direction (); - thick -= 2 * blot; - width -= 2 * blot; - rot /= sqrt (1 + slope * slope); pts.push_back (Offset (0, -thick / 2) * rot); pts.push_back (Offset (width, -thick / 2) * rot); pts.push_back (Offset (width, thick / 2) * rot); @@ -268,9 +265,36 @@ Lookup::round_filled_polygon (vector const &points, return Line_interface::make_line (blotdiameter, points[0], points[1]); /* shrink polygon in size by 0.5 * blotdiameter */ + + // first we need to determine the orientation of the polygon in + // order to decide whether shrinking means moving the polygon to the + // left or to the right of the outline. We do that by calculating + // (double) the oriented area of the polygon. We first determine the + // center and do the area calculations relative to it. + // Mathematically, the result is not affected by this shift, but + // numerically a lot of cancellation is going on and this keeps its + // effects in check. + + Offset center; + for (vsize i = 0; i < points.size (); i++) + center += points[i]; + center /= points.size (); + + Real area = 0.0; + Offset last = points.back () - center; + + for (vsize i = 0; i < points.size (); i++) + { + Offset here = points[i] - center; + area += cross_product (last, here); + last = here; + } + + bool ccw = area >= 0.0; // true if whole shape is counterclockwise oriented + vector shrunk_points; shrunk_points.resize (points.size ()); - bool ccw = 1; // true, if three adjacent points are counterclockwise ordered + for (vsize i = 0; i < points.size (); i++) { int i0 = i; @@ -279,39 +303,43 @@ Lookup::round_filled_polygon (vector const &points, Offset p0 = points[i0]; Offset p1 = points[i1]; Offset p2 = points[i2]; - Offset p10 = p0 - p1; + Offset p01 = p1 - p0; Offset p12 = p2 - p1; - if (p10.length () != 0.0) - { - // recompute ccw - Real phi = p10.arg (); - // rotate (p2 - p0) by (-phi) - Offset q = complex_multiply (p2 - p0, complex_exp (Offset (1.0, -phi))); - - if (q[Y_AXIS] > 0) - ccw = 1; - else if (q[Y_AXIS] < 0) - ccw = 0; - else {} // keep ccw unchanged - } - else {} // keep ccw unchanged - Offset p10n = (1.0 / p10.length ()) * p10; // normalize length to 1.0 - Offset p12n = (1.0 / p12.length ()) * p12; - Offset p13n = 0.5 * (p10n + p12n); - Offset p14n = 0.5 * (p10n - p12n); - Offset p13; - Real d = p13n.length () * p14n.length (); // distance p3n to line (p1..p0) - if (d < epsilon) - // special case: p0, p1, p2 are on a single line => build - // vector orthogonal to (p2-p0) of length 0.5 blotdiameter + Offset inward0 = Offset(-p01[Y_AXIS], p01[X_AXIS]).direction (); + Offset inward2 = Offset(-p12[Y_AXIS], p12[X_AXIS]).direction (); + + if (!ccw) { - p13[X_AXIS] = p10[Y_AXIS]; - p13[Y_AXIS] = -p10[X_AXIS]; - p13 = (0.5 * blotdiameter / p13.length ()) * p13; + inward0 = -inward0; + inward2 = -inward2; } - else - p13 = (0.5 * blotdiameter / d) * p13n; - shrunk_points[i1] = p1 + ((ccw) ? p13 : -p13); + + Offset middle = 0.5*(inward0 + inward2); + + // "middle" now is a vector in the right direction for the + // shrinkage. Its size needs to be large enough that the + // projection on either of the inward vectors has a size of 1. + + Real proj = dot_product (middle, inward0); + + // What's the size of proj? Assuming that we have a corner + // angle of phi where 0 corresponds to a continuing line, the + // length of middle is 0.5 |(1+cos phi, sin phi)| = cos (phi/2), + // so its projection has length + // cos^2 (phi/2) = 0.5 + 0.5 cos (phi). + // We don't really want to move inwards more than 3 blob + // diameters corresponding to 6 blob radii. So + // cos (phi/2) = 1/6 gives phi ~ 161, meaning that a 20 degree + // corner necessitates moving 3 blob diameters from the corner + // in order to stay inside the lines. Ruler and circle agree. + // 0.03 is close enough to 1/36. Basically we want to keep the + // shape from inverting from pulling too far inward. + // 3 diameters is pretty much a handwaving guess. + + if (abs (proj) < 0.03) + proj = proj < 0 ? -0.03 : 0.03; + + shrunk_points[i1] = p1 + (0.5 * blotdiameter / proj) * middle; } /* build scm expression and bounding box */ diff --git a/lily/lyric-engraver.cc b/lily/lyric-engraver.cc index bc576bf3cc..cdee61517e 100644 --- a/lily/lyric-engraver.cc +++ b/lily/lyric-engraver.cc @@ -158,7 +158,7 @@ get_current_note_head (Context *voice) // here. Not with this mechanism. if ((*end_mom == end_from_now) && dynamic_cast (g) - && Note_head::has_interface (g)) + && has_interface (g)) { return g; } diff --git a/lily/note-collision.cc b/lily/note-collision.cc index 0ef6b7b4e0..f98cb5a3a0 100644 --- a/lily/note-collision.cc +++ b/lily/note-collision.cc @@ -309,14 +309,14 @@ check_meshing_chords (Grob *me, { Grob *d = unsmob (head_up->get_object ("dot")); Grob *parent = d->get_parent (X_AXIS); - if (Dot_column::has_interface (parent)) + if (has_interface (parent)) Side_position_interface::add_support (parent, head_down); } else if (Rhythmic_head::dot_count (head_down)) { Grob *d = unsmob (head_down->get_object ("dot")); Grob *parent = d->get_parent (X_AXIS); - if (Dot_column::has_interface (parent)) + if (has_interface (parent)) { Grob *stem = unsmob (head_up->get_object ("stem")); // Loop over all heads on an up-pointing-stem to see if dots @@ -433,7 +433,7 @@ Note_collision_interface::get_clash_groups (Grob *me) for (vsize i = 0; i < elements.size (); i++) { Grob *se = elements[i]; - if (Note_column::has_interface (se)) + if (has_interface (se)) { if (!Note_column::dir (se)) se->programming_error ("note-column has no direction"); diff --git a/lily/note-column.cc b/lily/note-column.cc index f5b6f35e90..1d79fee652 100644 --- a/lily/note-column.cc +++ b/lily/note-column.cc @@ -98,7 +98,7 @@ Direction Note_column::dir (Grob *me) { Grob *stem = unsmob (me->get_object ("stem")); - if (stem && Stem::has_interface (stem)) + if (has_interface (stem)) return get_grob_direction (stem); else { @@ -107,7 +107,7 @@ Note_column::dir (Grob *me) return (Direction)sign (head_positions_interval (me).center ()); } - if (has_interface (me)) + if (has_interface (me)) programming_error ("Note_column without heads and stem"); else programming_error ("dir() given grob without Note_column interface"); @@ -131,7 +131,7 @@ void Note_column::add_head (Grob *me, Grob *h) { bool both = false; - if (Rest::has_interface (h)) + if (has_interface (h)) { extract_grob_set (me, "note-heads", heads); if (heads.size ()) @@ -139,7 +139,7 @@ Note_column::add_head (Grob *me, Grob *h) else me->set_object ("rest", h->self_scm ()); } - else if (Note_head::has_interface (h)) + else if (has_interface (h)) { if (unsmob (me->get_object ("rest"))) both = true; @@ -205,7 +205,7 @@ Note_column::accidentals (Grob *me) if (!acc) return 0; - if (Accidental_placement::has_interface (acc->get_parent (X_AXIS))) + if (has_interface (acc->get_parent (X_AXIS))) return acc->get_parent (X_AXIS); /* compatibility. */ diff --git a/lily/note-spacing.cc b/lily/note-spacing.cc index fcd1523d2f..a894be2539 100644 --- a/lily/note-spacing.cc +++ b/lily/note-spacing.cc @@ -228,7 +228,7 @@ Note_spacing::stem_dir_correction (Grob *me, Item *rcolumn, for (vsize i = 0; i < items.size (); i++) { Item *it = dynamic_cast (items[i]); - if (!Note_column::has_interface (it)) + if (!has_interface (it)) continue; if (d == RIGHT && it->get_column () != rcolumn) continue; @@ -265,7 +265,7 @@ Note_spacing::stem_dir_correction (Grob *me, Item *rcolumn, if (!hp.is_empty ()) { Real ss = Staff_symbol_referencer::staff_space (stem); - stem_posns[d] = stem->pure_height (stem, 0, INT_MAX) * (2 / ss); + stem_posns[d] = stem->pure_y_extent (stem, 0, INT_MAX) * (2 / ss); head_posns[d].unite (hp); } } diff --git a/lily/ottava-bracket.cc b/lily/ottava-bracket.cc index 5e962a6bb3..63a9d3ebca 100644 --- a/lily/ottava-bracket.cc +++ b/lily/ottava-bracket.cc @@ -35,7 +35,6 @@ struct Ottava_bracket { DECLARE_SCHEME_CALLBACK (print, (SCM)); - DECLARE_GROB_INTERFACE (); }; /* @@ -61,7 +60,7 @@ Ottava_bracket::print (SCM smob) Item *b = me->get_bound (d); broken[d] = (b->break_status_dir () != CENTER); - if (Note_column::has_interface (b)) + if (has_interface (b)) { extract_grob_set (b, "note-heads", heads); common = common_refpoint_of_array (heads, common, X_AXIS); @@ -94,7 +93,7 @@ Ottava_bracket::print (SCM smob) Item *b = me->get_bound (d); Interval ext; - if (Note_column::has_interface (b)) + if (has_interface (b)) { extract_grob_set (b, "note-heads", heads); for (vsize i = 0; i < heads.size (); i++) diff --git a/lily/page-layout-problem.cc b/lily/page-layout-problem.cc index 3f4fca05f1..8f1951223c 100644 --- a/lily/page-layout-problem.cc +++ b/lily/page-layout-problem.cc @@ -1232,7 +1232,7 @@ Page_layout_problem::filter_dead_elements (vector const &input) vector output; for (vsize i = 0; i < input.size (); ++i) { - if (Hara_kiri_group_spanner::has_interface (input[i])) + if (has_interface (input[i])) Hara_kiri_group_spanner::consider_suicide (input[i]); if (input[i]->is_live ()) diff --git a/lily/paper-column-engraver.cc b/lily/paper-column-engraver.cc index 334861844c..7c44f173d7 100644 --- a/lily/paper-column-engraver.cc +++ b/lily/paper-column-engraver.cc @@ -241,10 +241,10 @@ Paper_column_engraver::stop_translation_timestep () if (!unsmob (elem->get_object ("axis-group-parent-X"))) elem->set_object ("axis-group-parent-X", col->self_scm ()); - if (Accidental_placement::has_interface (elem) - || Arpeggio::has_interface (elem)) + if (has_interface (elem) + || has_interface (elem)) Separation_item::add_conditional_item (col, elem); - else if (!Accidental_interface::has_interface (elem)) + else if (!has_interface (elem)) Separation_item::add_item (col, elem); } items_.clear (); diff --git a/lily/paper-column.cc b/lily/paper-column.cc index d907acdf24..3ea5a89f05 100644 --- a/lily/paper-column.cc +++ b/lily/paper-column.cc @@ -203,7 +203,7 @@ Paper_column::break_align_width (Grob *me, SCM align_syms) (me, ly_symbol2scm ("elements"), (scm_is_eq (align_sym, ly_symbol2scm ("staff-bar")) ? Bar_line::non_empty_barline - : Break_alignment_interface::has_interface)); + : has_interface)); else { extract_grob_set (me, "elements", elts); @@ -440,7 +440,7 @@ Paper_column::is_extraneous_column_from_ligature (Grob *me) bool has_notehead = false; for (vsize i = 0; i < elts.size (); i++) { - if (Rhythmic_head::has_interface (elts[i])) + if (has_interface (elts[i])) { has_notehead = true; if (dynamic_cast (elts[i])->get_column () == me) diff --git a/lily/performance-scheme.cc b/lily/performance-scheme.cc index 9ab087a2c3..4d3c1e6512 100644 --- a/lily/performance-scheme.cc +++ b/lily/performance-scheme.cc @@ -19,14 +19,38 @@ #include "performance.hh" +LY_DEFINE (ly_performance_header, "ly:performance-header", + 1, 0, 0, (SCM performance), + "Return header of performance.") +{ + LY_ASSERT_SMOB (Performance, performance, 1); + Performance *p = unsmob (performance); + return p->get_header (); +} + +LY_DEFINE (ly_performance_set_header_x, "ly:performance-set-header!", + 2, 0, 0, (SCM performance, SCM module), + "Set the performance header.") +{ + LY_ASSERT_SMOB (Performance, performance, 1); + SCM_ASSERT_TYPE (ly_is_module (module), module, SCM_ARG2, __FUNCTION__, + "module"); + + Performance *p = unsmob (performance); + p->set_header (module); + return SCM_UNSPECIFIED; +} + LY_DEFINE (ly_performance_write, "ly:performance-write", - 2, 0, 0, (SCM performance, SCM filename), - "Write @var{performance} to @var{filename}.") + 3, 0, 0, (SCM performance, SCM filename, SCM name), + "Write @var{performance} to @var{filename} storing @var{name} as " + "the name of the performance in the file metadata.") { LY_ASSERT_SMOB (Performance, performance, 1); LY_ASSERT_TYPE (scm_is_string, filename, 2); + LY_ASSERT_TYPE (scm_is_string, name, 3); - unsmob (performance)->write_output (ly_scm2string (filename)); + unsmob (performance)->write_output (ly_scm2string (filename), + ly_scm2string (name)); return SCM_UNSPECIFIED; } - diff --git a/lily/performance.cc b/lily/performance.cc index f462c33229..9f840efd25 100644 --- a/lily/performance.cc +++ b/lily/performance.cc @@ -37,7 +37,8 @@ using namespace std; Performance::Performance (bool ports) : midi_ (0), - ports_ (ports) + ports_ (ports), + header_ (SCM_EOL) { } @@ -47,7 +48,27 @@ Performance::~Performance () } void -Performance::output (Midi_stream &midi_stream) const +Performance::derived_mark () const +{ + scm_gc_mark (header_); +} + +SCM +Performance::get_header () const +{ + return header_; +} + +void +Performance::set_header (SCM module) +{ + assert (ly_is_module (module)); + header_ = module; +} + +void +Performance::output (Midi_stream &midi_stream, + const string &performance_name) const { int tracks_ = audio_staffs_.size (); @@ -64,6 +85,21 @@ Performance::output (Midi_stream &midi_stream) const for (vsize i = 0; i < audio_staffs_.size (); i++) { Audio_staff *s = audio_staffs_[i]; + if (Audio_control_track_staff *c = + dynamic_cast(s)) + { + // The control track, created by Control_track_performer, should + // contain a placeholder for the name of the MIDI sequence as its + // initial audio element. Fill in the name of the sequence to + // this element before outputting MIDI. + assert (!c->audio_items_.empty ()); + Audio_text *text = + dynamic_cast(c->audio_items_.front ()); + assert (text != 0); + assert (text->type_ == Audio_text::TRACK_NAME); + assert (text->text_string_ == "control track"); + text->text_string_ = performance_name; + } debug_output ("[" + ::to_string (i), true); s->output (midi_stream, i, ports_, moment_to_ticks (start_mom)); debug_output ("]", false); @@ -77,7 +113,7 @@ Performance::add_element (Audio_element *p) } void -Performance::write_output (string out) const +Performance::write_output (string out, const string &performance_name) const { if (out == "-") out = "lelie.midi"; @@ -89,7 +125,7 @@ Performance::write_output (string out) const Midi_stream midi_stream (out); message (_f ("MIDI output to `%s'...", out)); - output (midi_stream); + output (midi_stream, performance_name); progress_indication ("\n"); } diff --git a/lily/piano-pedal-align-engraver.cc b/lily/piano-pedal-align-engraver.cc index 0be5ff4b17..7134a6cfc7 100644 --- a/lily/piano-pedal-align-engraver.cc +++ b/lily/piano-pedal-align-engraver.cc @@ -27,6 +27,8 @@ #include "warn.hh" #include "axis-group-interface.hh" +#include "translator.icc" + /* TODO: @@ -246,8 +248,6 @@ Piano_pedal_align_engraver::finalize () } } -#include "translator.icc" - ADD_ACKNOWLEDGER (Piano_pedal_align_engraver, note_column); ADD_ACKNOWLEDGER (Piano_pedal_align_engraver, piano_pedal_bracket); ADD_ACKNOWLEDGER (Piano_pedal_align_engraver, piano_pedal_script); diff --git a/lily/piano-pedal-bracket.cc b/lily/piano-pedal-bracket.cc index f58a130f75..b47e5e3b6d 100644 --- a/lily/piano-pedal-bracket.cc +++ b/lily/piano-pedal-bracket.cc @@ -26,7 +26,6 @@ struct Piano_pedal_bracket { DECLARE_SCHEME_CALLBACK (print, (SCM)); - DECLARE_GROB_INTERFACE (); }; MAKE_SCHEME_CALLBACK (Piano_pedal_bracket, print, 1); diff --git a/lily/pitched-trill-engraver.cc b/lily/pitched-trill-engraver.cc index ac9e4dfd4d..30d734346e 100644 --- a/lily/pitched-trill-engraver.cc +++ b/lily/pitched-trill-engraver.cc @@ -30,6 +30,8 @@ #include "stream-event.hh" #include "warn.hh" +#include "translator.icc" + class Pitched_trill_engraver : public Engraver { public: @@ -167,8 +169,6 @@ Pitched_trill_engraver::stop_translation_timestep () trill_accidental_ = 0; } -#include "translator.icc" - ADD_ACKNOWLEDGER (Pitched_trill_engraver, note_head); ADD_ACKNOWLEDGER (Pitched_trill_engraver, dots); ADD_ACKNOWLEDGER (Pitched_trill_engraver, stem); diff --git a/lily/pure-from-neighbor-engraver.cc b/lily/pure-from-neighbor-engraver.cc index 7061a92684..e147f53cca 100644 --- a/lily/pure-from-neighbor-engraver.cc +++ b/lily/pure-from-neighbor-engraver.cc @@ -26,6 +26,8 @@ #include "pure-from-neighbor-interface.hh" #include "engraver.hh" +#include "translator.icc" + class Pure_from_neighbor_engraver : public Engraver { vector pure_relevants_; @@ -46,7 +48,7 @@ Pure_from_neighbor_engraver::Pure_from_neighbor_engraver () void Pure_from_neighbor_engraver::acknowledge_item (Grob_info i) { - if (!Pure_from_neighbor_interface::has_interface (i.item ())) + if (!has_interface (i.item ())) pure_relevants_.push_back (i.item ()); } @@ -134,8 +136,6 @@ Pure_from_neighbor_engraver::finalize () pure_relevants_.clear (); } -#include "translator.icc" - ADD_ACKNOWLEDGER (Pure_from_neighbor_engraver, item); ADD_ACKNOWLEDGER (Pure_from_neighbor_engraver, pure_from_neighbor); ADD_TRANSLATOR (Pure_from_neighbor_engraver, diff --git a/lily/relocate.cc b/lily/relocate.cc index 73fde03f15..879377a1cc 100644 --- a/lily/relocate.cc +++ b/lily/relocate.cc @@ -39,6 +39,10 @@ #include "version.hh" #include "warn.hh" +#ifdef __MINGW32__ +#include +#endif + #define FRAMEWORKDIR ".." int @@ -103,10 +107,6 @@ prepend_env_path (char const *key, string value) return -1; } -#ifdef __MINGW32__ -#include -#endif - static void prefix_relocation (const string &prefix) { diff --git a/lily/rest-collision-engraver.cc b/lily/rest-collision-engraver.cc index 20e7eb9fc7..a70641cfd0 100644 --- a/lily/rest-collision-engraver.cc +++ b/lily/rest-collision-engraver.cc @@ -32,6 +32,8 @@ #include "stream-event.hh" #include "warn.hh" +#include "translator.icc" + class Rest_collision_engraver : public Engraver { protected: @@ -62,7 +64,7 @@ Rest_collision_engraver::process_acknowledged () if (!g || !m) continue; - if (Rhythmic_head::has_interface (g) && (*m) > now) + if (has_interface (g) && (*m) > now) { Grob *column = g->get_parent (X_AXIS); if (!column) @@ -70,7 +72,7 @@ Rest_collision_engraver::process_acknowledged () // Only include rests that start now. Include notes that started any time. Paper_column *paper_column = dynamic_cast (column)->get_column (); - if (!Rest::has_interface (g) || !paper_column || Paper_column::when_mom (paper_column) == now) + if (!has_interface (g) || !paper_column || Paper_column::when_mom (paper_column) == now) { columns.insert (column); rest_count += Note_column::has_rests (column); @@ -92,8 +94,6 @@ Rest_collision_engraver::stop_translation_timestep () rest_collision_ = 0; } -#include "translator.icc" - ADD_TRANSLATOR (Rest_collision_engraver, /* doc */ "Handle collisions of rests.", diff --git a/lily/rest-collision.cc b/lily/rest-collision.cc index 300dcfc3c4..536ced40e5 100644 --- a/lily/rest-collision.cc +++ b/lily/rest-collision.cc @@ -52,7 +52,7 @@ Rest_collision::force_shift_callback_rest (SCM rest, SCM offset) if (scm_is_number (offset)) rest_grob->translate_axis (scm_to_double (offset), Y_AXIS); - if (Note_column::has_interface (parent) && Note_column::has_rests (parent)) + if (has_interface (parent) && Note_column::has_rests (parent)) { Grob *collision = unsmob (parent->get_object ("rest-collision")); @@ -109,7 +109,7 @@ Rest_collision::calc_positioning_done (SCM smob) for (vsize i = 0; i < elts.size (); i++) { Grob *e = elts[i]; - if (Note_column::has_interface (e)) + if (has_interface (e)) { if (unsmob (e->get_object ("rest"))) rests.push_back (e); diff --git a/lily/script-column.cc b/lily/script-column.cc index 3a288dac72..94aa8908e7 100644 --- a/lily/script-column.cc +++ b/lily/script-column.cc @@ -72,8 +72,8 @@ Script_column::row_before_line_breaking (SCM smob) /* Don't want to consider scripts horizontally next to notes. */ - if (Accidental_placement::has_interface (sc) - || Arpeggio::has_interface (sc)) + if (has_interface (sc) + || has_interface (sc)) { affect_all_grobs.push_back (sc); } diff --git a/lily/script-interface.cc b/lily/script-interface.cc index eaba157f34..24fe4dc082 100644 --- a/lily/script-interface.cc +++ b/lily/script-interface.cc @@ -131,7 +131,6 @@ Script_interface::print (SCM smob) struct Text_script { - DECLARE_GROB_INTERFACE (); }; ADD_INTERFACE (Text_script, diff --git a/lily/script-row-engraver.cc b/lily/script-row-engraver.cc index dc81f38b7f..35b5038020 100644 --- a/lily/script-row-engraver.cc +++ b/lily/script-row-engraver.cc @@ -56,7 +56,7 @@ Script_row_engraver::stop_translation_timestep () if (script_row_) { for (vsize i = 0; i < scripts_.size (); i++) - if (Accidental_placement::has_interface (scripts_[i]) + if (has_interface (scripts_[i]) || Side_position_interface::get_axis (scripts_[i]) == X_AXIS) Script_column::add_side_positioned (script_row_, scripts_[i]); } diff --git a/lily/self-alignment-interface.cc b/lily/self-alignment-interface.cc index 49b4125364..512f970e0e 100644 --- a/lily/self-alignment-interface.cc +++ b/lily/self-alignment-interface.cc @@ -104,7 +104,7 @@ Self_alignment_interface::aligned_on_parent (Grob *me, Axis a) { Grob *him = me->get_parent (a); Interval he; - if (Paper_column::has_interface (him)) + if (has_interface (him)) /* PaperColumn extents aren't reliable (they depend on size and alignment of PaperColumn's children), so we align on NoteColumn instead. @@ -115,7 +115,7 @@ Self_alignment_interface::aligned_on_parent (Grob *me, Axis a) else { if (to_boolean (me->get_property ("X-align-on-main-noteheads")) - && Note_column::has_interface (him)) + && has_interface (him)) he = Note_column::calc_main_extent(him); else he = him->extent (him, a); diff --git a/lily/semi-tie.cc b/lily/semi-tie.cc index 049cd029d6..0d31a2e073 100644 --- a/lily/semi-tie.cc +++ b/lily/semi-tie.cc @@ -60,7 +60,7 @@ Semi_tie::calc_control_points (SCM smob) (void) me->get_property ("direction"); Grob *yparent = me->get_parent (Y_AXIS); - if (Semi_tie_column::has_interface (yparent)) + if (has_interface (yparent)) { /* trigger positioning. */ yparent->get_property ("positioning-done"); @@ -89,13 +89,20 @@ bool Semi_tie::less (Grob *g1, Grob *g2) { Item *i1 = dynamic_cast (g1); + if (!i1) + { + g1->programming_error ("grob is not a semi-tie"); + return false; + } + Item *i2 = dynamic_cast (g2); - if (i1 && i2) { - return get_position (i1) < get_position (i2); - } + if (!i2) + { + g2->programming_error ("grob is not a semi-tie"); + return true; + } - programming_error ("grob is not a semi-tie"); - return false; + return get_position (i1) < get_position (i2); } Item * diff --git a/lily/separating-line-group-engraver.cc b/lily/separating-line-group-engraver.cc index 5355f5cc43..08069afda8 100644 --- a/lily/separating-line-group-engraver.cc +++ b/lily/separating-line-group-engraver.cc @@ -78,7 +78,7 @@ Separating_line_group_engraver::acknowledge_item (Grob_info i) { Item *it = i.item (); - if (Note_spacing::has_interface (it)) + if (has_interface (it)) { current_spacings_.note_spacings_.push_back (it); return; diff --git a/lily/separation-item.cc b/lily/separation-item.cc index d0cad83d8e..e29b8a9129 100644 --- a/lily/separation-item.cc +++ b/lily/separation-item.cc @@ -129,7 +129,7 @@ Separation_item::boxes (Grob *me, Grob *left) vector other_elts; // for now only arpeggios for (vsize i = 0; i < read_only_elts.size (); i++) { - if (Accidental_placement::has_interface (read_only_elts[i])) + if (has_interface (read_only_elts[i])) accidental_elts.push_back (read_only_elts[i]); else other_elts.push_back (read_only_elts[i]); @@ -153,11 +153,11 @@ Separation_item::boxes (Grob *me, Grob *left) bounds all of them). However, we can't exclude an axis-group that adds to its childrens' stencil. Currently, this is just TrillPitchGroup; hence the check for note-head-interface. */ - if (Axis_group_interface::has_interface (il) - && !Note_head::has_interface (il)) + if (has_interface (il) + && !has_interface (il)) continue; - Interval y (il->pure_height (ycommon, 0, very_large)); + Interval y (il->pure_y_extent (ycommon, 0, very_large)); Interval x (il->extent (pc, X_AXIS)); Interval extra_width = robust_scm2interval (elts[i]->get_property ("extra-spacing-width"), diff --git a/lily/side-position-interface.cc b/lily/side-position-interface.cc index 08ac17285d..16e2929a66 100644 --- a/lily/side-position-interface.cc +++ b/lily/side-position-interface.cc @@ -65,7 +65,7 @@ get_support_set (Grob *me) for (vsize i = 0; i < proto_support.size (); i++) { - if (Accidental_placement::has_interface (proto_support[i])) + if (has_interface (proto_support[i])) { Grob *accs = proto_support[i]; for (SCM acs = accs->get_object ("accidental-grobs"); scm_is_pair (acs); @@ -252,7 +252,7 @@ Side_position_interface::aligned_side (Grob *me, Axis a, bool pure, int start, i continue; // so 'me' may not move in response to 'e' if (a == Y_AXIS - && Stem::has_interface (e)) + && has_interface (e)) { // If called as 'pure' we may not force a stem to set its direction, if (pure && !is_direction (e->get_property_data ("direction"))) @@ -283,7 +283,7 @@ Side_position_interface::aligned_side (Grob *me, Axis a, bool pure, int start, i : e->maybe_pure_coordinate (common[Y_AXIS], Y_AXIS, pure, start, end); Skyline_pair copy = *unsmob (sp); if (a == Y_AXIS - && Stem::has_interface (e) + && has_interface (e) && to_boolean (me->get_maybe_pure_property ("add-stem-support", pure, start, end))) copy[dir].set_minimum_height (copy[dir].max_height ()); copy.shift (a == X_AXIS ? yc : xc); @@ -381,7 +381,7 @@ Side_position_interface::aligned_side (Grob *me, Axis a, bool pure, int start, i staff_span.widen (1); if (staff_span.contains (position) /* If we are between notehead and staff, quantize for ledger lines. */ - || (Note_head::has_interface (head) + || (has_interface (head) && dir * position < 0)) { total_off += (rounded - position) * 0.5 * ss; diff --git a/lily/slur-configuration.cc b/lily/slur-configuration.cc index 8e1db97d84..dc453a9729 100644 --- a/lily/slur-configuration.cc +++ b/lily/slur-configuration.cc @@ -334,7 +334,7 @@ Slur_configuration::score_extra_encompass (Slur_score_state const &state) // we find forbidden attachments vector forbidden_attachments; for (vsize i = 0; i < state.extra_encompass_infos_.size (); i++) - if (Tie::has_interface (state.extra_encompass_infos_[i].grob_)) + if (has_interface (state.extra_encompass_infos_[i].grob_)) { Grob *t = state.extra_encompass_infos_[i].grob_; Grob *common_x = Grob::get_vertical_axis_group (t); diff --git a/lily/slur-scoring.cc b/lily/slur-scoring.cc index cca56781aa..edd45f6427 100644 --- a/lily/slur-scoring.cc +++ b/lily/slur-scoring.cc @@ -161,7 +161,7 @@ Slur_score_state::get_bound_info () const for (LEFT_and_RIGHT (d)) { extremes[d].bound_ = slur_->get_bound (d); - if (Note_column::has_interface (extremes[d].bound_)) + if (has_interface (extremes[d].bound_)) { extremes[d].note_column_ = extremes[d].bound_; extremes[d].stem_ = Note_column::get_stem (extremes[d].note_column_); @@ -285,7 +285,7 @@ Slur_score_state::fill (Grob *me) ly_symbol2scm ("inside")) && minmax (dir_, encompass_place, y_place) == encompass_place && (!extra_encompass_infos_[i].grob_->internal_has_interface (ly_symbol2scm ("key-signature-interface")) - && !Clef::has_interface (extra_encompass_infos_[i].grob_) + && !has_interface (extra_encompass_infos_[i].grob_) && !extra_encompass_infos_[i].grob_->internal_has_interface (ly_symbol2scm ("time-signature-interface")))) { for (LEFT_and_RIGHT (d)) @@ -627,7 +627,7 @@ Slur_score_state::generate_avoid_offsets () const extract_grob_set (slur_, "encompass-objects", extra_encompasses); for (vsize i = 0; i < extra_encompasses.size (); i++) { - if (Slur::has_interface (extra_encompasses[i])) + if (has_interface (extra_encompasses[i])) { Grob *small_slur = extra_encompasses[i]; Bezier b = Slur::get_curve (small_slur); @@ -756,7 +756,7 @@ Slur_score_state::get_extra_encompass_infos () const vector collision_infos; for (vsize i = encompasses.size (); i--;) { - if (Slur::has_interface (encompasses[i])) + if (has_interface (encompasses[i])) { Spanner *small_slur = dynamic_cast (encompasses[i]); Bezier b = Slur::get_curve (small_slur); @@ -797,12 +797,12 @@ Slur_score_state::get_extra_encompass_infos () const Grob *g = encompasses [i]; Interval xe = g->extent (common_[X_AXIS], X_AXIS); Interval ye = g->extent (common_[Y_AXIS], Y_AXIS); - if (Dots::has_interface (g)) + if (has_interface (g)) ye.widen (0.2); Real xp = 0.0; Real penalty = parameters_.extra_object_collision_penalty_; - if (Accidental_interface::has_interface (g)) + if (has_interface (g)) { penalty = parameters_.accidental_collision_; diff --git a/lily/slur.cc b/lily/slur.cc index 93f5492b66..a11a30258e 100644 --- a/lily/slur.cc +++ b/lily/slur.cc @@ -99,7 +99,7 @@ Slur::pure_height (SCM smob, SCM start_scm, SCM end_scm) for (vsize i = 0; i < encompasses.size (); i++) { - Interval d = encompasses[i]->pure_height (parent, start, end); + Interval d = encompasses[i]->pure_y_extent (parent, start, end); if (!d.is_empty ()) { for (DOWN_and_UP (downup)) @@ -204,7 +204,7 @@ Slur::replace_breakable_encompass_objects (Grob *me) { Grob *g = extra_objects[i]; - if (Separation_item::has_interface (g)) + if (has_interface (g)) { extract_grob_set (g, "elements", breakables); for (vsize j = 0; j < breakables.size (); j++) @@ -271,7 +271,7 @@ Slur::pure_outside_slur_callback (SCM grob, SCM start_scm, SCM end_scm, SCM offs Real offset = robust_scm2double (offset_scm, 0.0); Direction dir = get_grob_direction (script); - return scm_from_double (offset + dir * slur->pure_height (slur, start, end).length () / 4); + return scm_from_double (offset + dir * slur->pure_y_extent (slur, start, end).length () / 4); } MAKE_SCHEME_CALLBACK_WITH_OPTARGS (Slur, outside_slur_callback, 2, 1, ""); @@ -409,7 +409,7 @@ Slur::auxiliary_acknowledge_extra_object (Grob_info const &info, else slur = slurs[0]; - if (Tie::has_interface (e) + if (has_interface (e) || scm_is_eq (avoid, ly_symbol2scm ("inside"))) { for (vsize i = slurs.size (); i--;) @@ -478,7 +478,7 @@ Slur::calc_cross_staff (SCM smob) so we can ignore them here */ vector non_sep_extras; for (vsize i = 0; i < extras.size (); i++) - if (!Separation_item::has_interface (extras[i])) + if (!has_interface (extras[i])) non_sep_extras.push_back (extras[i]); Grob *common = common_refpoint_of_array (cols, me, Y_AXIS); diff --git a/lily/spacing-determine-loose-columns.cc b/lily/spacing-determine-loose-columns.cc index c7990558dd..4be23042ad 100644 --- a/lily/spacing-determine-loose-columns.cc +++ b/lily/spacing-determine-loose-columns.cc @@ -108,7 +108,7 @@ is_loose_column (Grob *l, Grob *col, Grob *r, Spacing_options const *options) for (vsize i = elts.size (); i--;) { Grob *g = elts[i]; - if (g && Break_alignment_interface::has_interface (g)) + if (has_interface (g)) { extract_grob_set (g, "elements", gelts); for (vsize j = gelts.size (); j--;) @@ -150,7 +150,7 @@ Spacing_spanner::set_distances_for_loose_col (Grob *me, Grob *c, || Spacing_interface::right_column (sp) != rc) continue; - if (Note_spacing::has_interface (sp)) + if (has_interface (sp)) { /* The note spacing should be taken from the musical @@ -161,7 +161,7 @@ Spacing_spanner::set_distances_for_loose_col (Grob *me, Grob *c, dists[d] = max (dists[d], spring.min_distance ()); } - else if (Staff_spacing::has_interface (sp)) + else if (has_interface (sp)) { Spring spring = Staff_spacing::get_spacing (sp, rc, 0.0); diff --git a/lily/spacing-interface.cc b/lily/spacing-interface.cc index 1ade62b0e5..030d02e727 100644 --- a/lily/spacing-interface.cc +++ b/lily/spacing-interface.cc @@ -64,7 +64,7 @@ Spacing_interface::skylines (Grob *me, Grob *right_col) if (Item *piece = g->find_prebroken_piece (break_dirs[d])) g = piece; - if (g && Separation_item::has_interface (g) && g->get_column () == columns[d]) + if (has_interface (g) && g->get_column () == columns[d]) { SCM sky_scm = g->get_property ("horizontal-skylines"); Skyline_pair *sky = unsmob (sky_scm); @@ -144,9 +144,9 @@ get_note_columns (vector const &elts) for (vsize i = 0; i < elts.size (); i++) { - if (Note_column::has_interface (elts[i])) + if (has_interface (elts[i])) ret.push_back (dynamic_cast (elts[i])); - else if (Separation_item::has_interface (elts[i])) + else if (has_interface (elts[i])) { extract_grob_set (elts[i], "elements", more_elts); vector ncs = get_note_columns (more_elts); diff --git a/lily/spacing-loose-columns.cc b/lily/spacing-loose-columns.cc index c3846e694d..15f77f34a0 100644 --- a/lily/spacing-loose-columns.cc +++ b/lily/spacing-loose-columns.cc @@ -155,7 +155,7 @@ set_loose_columns (System *which, Column_x_positions const *posns) { Spring spring = Spacing_spanner::note_spacing (spacing, loose_col, next_col, &options); - if (Note_spacing::has_interface (spacing)) + if (has_interface (spacing)) spring = Note_spacing::get_spacing (spacing, next_col, spring, options.increment_); diff --git a/lily/spacing-spanner.cc b/lily/spacing-spanner.cc index f6f532125a..cc353bc365 100644 --- a/lily/spacing-spanner.cc +++ b/lily/spacing-spanner.cc @@ -351,7 +351,7 @@ Spacing_spanner::musical_column_spacing (Grob *me, /* This is probably a waste of time in the case of polyphonic music. */ - if (found_matching_column && Note_spacing::has_interface (wish)) + if (found_matching_column && has_interface (wish)) { Real inc = options->increment_; Grob *gsp = unsmob (left_col->get_object ("grace-spacing")); @@ -489,7 +489,7 @@ Spacing_spanner::breakable_column_spacing (Grob *me, Item *l, Item *r, { Item *spacing_grob = dynamic_cast (wishes[i]); - if (!spacing_grob || !Staff_spacing::has_interface (spacing_grob)) + if (!spacing_grob || !has_interface (spacing_grob)) continue; /* diff --git a/lily/span-arpeggio-engraver.cc b/lily/span-arpeggio-engraver.cc index e81dcfe258..f66c8770b5 100644 --- a/lily/span-arpeggio-engraver.cc +++ b/lily/span-arpeggio-engraver.cc @@ -27,6 +27,8 @@ #include "side-position-interface.hh" #include "staff-symbol-referencer.hh" +#include "translator.icc" + /** Make arpeggios that span multiple staves. Catch arpeggios, and span a Span_arpeggio over them if we find more than two arpeggios. @@ -123,8 +125,6 @@ Span_arpeggio_engraver::stop_translation_timestep () note_columns_.clear (); } -#include "translator.icc" - ADD_ACKNOWLEDGER (Span_arpeggio_engraver, arpeggio); ADD_ACKNOWLEDGER (Span_arpeggio_engraver, note_column); ADD_TRANSLATOR (Span_arpeggio_engraver, diff --git a/lily/span-bar-engraver.cc b/lily/span-bar-engraver.cc index d8f7590ea5..63c245e70c 100644 --- a/lily/span-bar-engraver.cc +++ b/lily/span-bar-engraver.cc @@ -22,6 +22,8 @@ #include "pointer-group-interface.hh" #include "lily-imports.hh" +#include "translator.icc" + /** Make bars that span multiple "staves". Catch bars, and span a @@ -92,8 +94,6 @@ Span_bar_engraver::stop_translation_timestep () bars_.resize (0); } -#include "translator.icc" - ADD_ACKNOWLEDGER (Span_bar_engraver, bar_line); ADD_TRANSLATOR (Span_bar_engraver, /* doc */ diff --git a/lily/span-bar-stub-engraver.cc b/lily/span-bar-stub-engraver.cc index 0f1df50b6e..3517c3f5fd 100644 --- a/lily/span-bar-stub-engraver.cc +++ b/lily/span-bar-stub-engraver.cc @@ -27,6 +27,8 @@ #include "pointer-group-interface.hh" #include "engraver.hh" +#include "translator.icc" + /* The Span_bar_stub_engraver creates SpanBarStub grobs in the contexts that a grouping context contains. For example, if a PianoStaff contains @@ -174,8 +176,6 @@ Span_bar_stub_engraver::stop_translation_timestep () axis_groups_ = axis_groups; } -#include "translator.icc" - ADD_ACKNOWLEDGER (Span_bar_stub_engraver, span_bar); ADD_ACKNOWLEDGER (Span_bar_stub_engraver, hara_kiri_group_spanner); ADD_TRANSLATOR (Span_bar_stub_engraver, diff --git a/lily/staff-performer.cc b/lily/staff-performer.cc index 7874e50db3..0648d0aae8 100644 --- a/lily/staff-performer.cc +++ b/lily/staff-performer.cc @@ -29,6 +29,8 @@ #include "warn.hh" #include "lily-imports.hh" +#include "translator.icc" + /* Perform a staff. Individual notes should have their instrument (staff-wide) set, so we override play_element () */ @@ -77,8 +79,6 @@ map Staff_performer::static_channel_map_; int Staff_performer::channel_count_ = 0; int Staff_performer::staff_performer_count_ = 0; -#include "translator.icc" - ADD_TRANSLATOR (Staff_performer, /* doc */ "", diff --git a/lily/staff-spacing.cc b/lily/staff-spacing.cc index c414268f26..c8e51f56f8 100644 --- a/lily/staff-spacing.cc +++ b/lily/staff-spacing.cc @@ -44,7 +44,7 @@ using namespace std; Real Staff_spacing::optical_correction (Grob *me, Grob *g, Interval bar_height) { - if (!g || !Note_column::has_interface (g)) + if (!g || !has_interface (g)) return 0; Grob *stem = Note_column::get_stem (g); @@ -55,7 +55,7 @@ Staff_spacing::optical_correction (Grob *me, Grob *g, Interval bar_height) Direction d = get_grob_direction (stem); if (Stem::is_normal_stem (stem) && d == DOWN) { - Interval stem_posns = stem->pure_height (stem, 0, INT_MAX); + Interval stem_posns = stem->pure_y_extent (stem, 0, INT_MAX); stem_posns.intersect (bar_height); diff --git a/lily/staff-symbol-referencer.cc b/lily/staff-symbol-referencer.cc index 2f245fda9b..09b3d2856e 100644 --- a/lily/staff-symbol-referencer.cc +++ b/lily/staff-symbol-referencer.cc @@ -48,7 +48,7 @@ Staff_symbol_referencer::on_staff_line (Grob *me, int pos) Grob * Staff_symbol_referencer::get_staff_symbol (Grob *me) { - if (Staff_symbol::has_interface (me)) + if (has_interface (me)) return me; SCM st = me->get_object ("staff-symbol"); diff --git a/lily/stem-engraver.cc b/lily/stem-engraver.cc index a84dd701bd..2f2eaf82da 100644 --- a/lily/stem-engraver.cc +++ b/lily/stem-engraver.cc @@ -158,7 +158,8 @@ Stem_engraver::acknowledge_rhythmic_head (Grob_info gi) Stem::add_head (stem_, gi.grob ()); if (Stem::is_normal_stem (stem_) - && Stem::duration_log (stem_) > 2) + && Stem::duration_log (stem_) > 2 + && !(unsmob (stem_->get_object ("flag")))) { Item *flag = make_item ("Flag", stem_->self_scm ()); flag->set_parent (stem_, X_AXIS); diff --git a/lily/stem-tremolo.cc b/lily/stem-tremolo.cc index 8cb60db078..5f71607a37 100644 --- a/lily/stem-tremolo.cc +++ b/lily/stem-tremolo.cc @@ -172,7 +172,7 @@ Stem_tremolo::pure_height (SCM smob, SCM, SCM) if (!beam) return ly_interval2scm (s1.extent (Y_AXIS)); - Interval ph = stem->pure_height (stem, 0, INT_MAX); + Interval ph = stem->pure_y_extent (stem, 0, INT_MAX); Stem_info si = Stem::get_stem_info (stem); ph[-dir] = si.shortest_y_; int beam_count = Stem::beam_multiplicity (stem).length () + 1; @@ -261,7 +261,7 @@ Stem_tremolo::calc_direction (SCM smob) */ Grob *maybe_nc = stem->get_parent (X_AXIS)->get_parent (X_AXIS); bool whole_note = Stem::duration_log (stem) <= 0; - if (whole_note && Note_collision_interface::has_interface (maybe_nc)) + if (whole_note && has_interface (maybe_nc)) { Drul_array avoid_me (false, false); vector all_nhps = Note_collision_interface::note_head_positions (maybe_nc); @@ -298,16 +298,16 @@ Stem_tremolo::y_offset (Grob *me, bool pure) if (pure && beam) { - Interval ph = stem->pure_height (stem, 0, INT_MAX); + Interval ph = stem->pure_y_extent (stem, 0, INT_MAX); Stem_info si = Stem::get_stem_info (stem); ph[-dir] = si.shortest_y_; - return (ph - dir * max (beam_count, 1) * beam_translation)[dir] - dir * 0.5 * me->pure_height (me, 0, INT_MAX).length (); + return (ph - dir * max (beam_count, 1) * beam_translation)[dir] - dir * 0.5 * me->pure_y_extent (me, 0, INT_MAX).length (); } Real end_y = (pure - ? stem->pure_height (stem, 0, INT_MAX)[dir] + ? stem->pure_y_extent (stem, 0, INT_MAX)[dir] : stem->extent (stem, Y_AXIS)[dir]) - dir * max (beam_count, 1) * beam_translation - Stem::beam_end_corrective (stem); diff --git a/lily/stem.cc b/lily/stem.cc index 2fad60d105..9cb84f57fa 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -266,9 +266,9 @@ Stem::add_head (Grob *me, Grob *n) { n->set_object ("stem", me->self_scm ()); - if (Note_head::has_interface (n)) + if (has_interface (n)) Pointer_group_interface::add_grob (me, ly_symbol2scm ("note-heads"), n); - else if (Rest::has_interface (n)) + else if (has_interface (n)) Pointer_group_interface::add_grob (me, ly_symbol2scm ("rests"), n); } diff --git a/lily/stencil-integral.cc b/lily/stencil-integral.cc index f11858baa5..747217c847 100644 --- a/lily/stencil-integral.cc +++ b/lily/stencil-integral.cc @@ -190,8 +190,7 @@ make_draw_line_boxes (vector &boxes, vector > &buildings Offset left (x0, y0); Offset right (x1, y1); Offset dir = (right - left).direction (); - Direction d = DOWN; - do + for (DOWN_and_UP (d)) { Offset outward = d * get_normal ((thick / 2) * dir); Offset inter_l = left + outward; @@ -231,7 +230,6 @@ make_draw_line_boxes (vector &boxes, vector > &buildings } } } - while (flip (&d) != DOWN); if (thick > 0.0) { @@ -280,9 +278,8 @@ make_partial_ellipse_boxes (vector &boxes, Offset ep (cos (end) * x_rad, sin (end) * y_rad); ////////////////////// Drul_array > points; - Direction d = DOWN; int quantization = max (1, (int) (((x_rad * trans.xx) + (y_rad * trans.yy)) * M_PI / QUANTIZATION_UNIT)); - do + for (DOWN_and_UP (d)) { for (vsize i = 0; i < 1 + (vsize) quantization; i++) { @@ -293,17 +290,15 @@ make_partial_ellipse_boxes (vector &boxes, points[d].push_back (inter); } } - while (flip (&d) != DOWN); for (vsize i = 0; i < points[DOWN].size () - 1; i++) { Box b; - do + for (DOWN_and_UP (d)) { b.add_point (points[d][i]); b.add_point (points[d][i + 1]); } - while (flip (&d) != DOWN); boxes.push_back (b); } @@ -421,12 +416,11 @@ make_draw_bezier_boxes (vector &boxes, pango_matrix_transform_point (&trans, &temp3[X_AXIS], &temp3[Y_AXIS]); ////////////////////// Drul_array > points; - Direction d = DOWN; int quantization = int (((temp1 - temp0).length () + (temp2 - temp1).length () + (temp3 - temp2).length ()) / QUANTIZATION_UNIT); - do + for (DOWN_and_UP (d)) { Offset first = curve.control_[0] + d * get_normal ((th / 2) * curve.dir_at_point (0.0)); @@ -445,17 +439,15 @@ make_draw_bezier_boxes (vector &boxes, pango_matrix_transform_point (&trans, &last[X_AXIS], &last[Y_AXIS]); points[d].push_back (last); } - while (flip (&d) != DOWN); for (vsize i = 0; i < points[DOWN].size () - 1; i++) { Box b; - do + for (DOWN_and_UP (d)) { b.add_point (points[d][i]); b.add_point (points[d][i + 1]); } - while (flip (&d) != DOWN); boxes.push_back (b); } diff --git a/lily/system-start-delimiter-engraver.cc b/lily/system-start-delimiter-engraver.cc index a37c520dfc..7eadbb0eec 100644 --- a/lily/system-start-delimiter-engraver.cc +++ b/lily/system-start-delimiter-engraver.cc @@ -26,6 +26,8 @@ #include "staff-symbol.hh" #include "system-start-delimiter.hh" +#include "translator.icc" + struct Bracket_nesting_node { public: @@ -227,8 +229,6 @@ System_start_delimiter_engraver::acknowledge_system_start_delimiter (Grob_info i nesting_->add_support (inf.grob ()); } -#include "translator.icc" - ADD_ACKNOWLEDGER (System_start_delimiter_engraver, staff_symbol); ADD_ACKNOWLEDGER (System_start_delimiter_engraver, system_start_delimiter); diff --git a/lily/system.cc b/lily/system.cc index 91e3f08181..4a18ab52b7 100644 --- a/lily/system.cc +++ b/lily/system.cc @@ -414,7 +414,7 @@ System::vertical_skyline_elements (SCM smob) vector vertical_skyline_grobs; extract_grob_set (me_grob, "elements", my_elts); for (vsize i = 0; i < my_elts.size (); i++) - if (System_start_delimiter::has_interface (my_elts[i])) + if (has_interface (my_elts[i])) vertical_skyline_grobs.push_back (my_elts[i]); System *me = dynamic_cast (me_grob); @@ -429,7 +429,7 @@ System::vertical_skyline_elements (SCM smob) extract_grob_set (align, "elements", elts); for (vsize i = 0; i < elts.size (); i++) - if (Hara_kiri_group_spanner::has_interface (elts[i])) + if (has_interface (elts[i])) vertical_skyline_grobs.push_back (elts[i]); SCM grobs_scm = Grob_array::make_array (); @@ -450,7 +450,7 @@ System::break_into_pieces (vector const &breaking) int st = Paper_column::get_rank (c[0]); int end = Paper_column::get_rank (c.back ()); - Interval iv (pure_height (this, st, end)); + Interval iv (pure_y_extent (this, st, end)); system->set_property ("pure-Y-extent", ly_interval2scm (iv)); system->set_bound (LEFT, c[0]); @@ -763,7 +763,7 @@ System::get_vertical_alignment (SCM smob) extract_grob_set (me, "elements", elts); Grob *ret = 0; for (vsize i = 0; i < elts.size (); i++) - if (Align_interface::has_interface (elts[i])) + if (has_interface (elts[i])) { if (ret) me->programming_error ("found multiple vertical alignments in this system"); @@ -792,7 +792,7 @@ System::get_extremal_staff (Direction dir, Interval const &iv) vsize end = (dir == UP) ? elts.size () : VPOS; for (vsize i = start; i != end; i += dir) { - if (Hara_kiri_group_spanner::has_interface (elts[i])) + if (has_interface (elts[i])) Hara_kiri_group_spanner::consider_suicide (elts[i]); Interval intersection = elts[i]->extent (this, X_AXIS); @@ -822,7 +822,7 @@ System::get_neighboring_staff (Direction dir, Grob *vertical_axis_group, Interva if (elts[i] == vertical_axis_group) return out; - if (Hara_kiri_group_spanner::has_interface (elts[i])) + if (has_interface (elts[i])) Hara_kiri_group_spanner::consider_suicide (elts[i]); bounds.intersect (elts[i]->spanned_rank_interval ()); @@ -917,7 +917,7 @@ System::calc_pure_relevant_grobs (SCM smob) for (vsize i = 0; i < elts.size (); ++i) { - if (!Axis_group_interface::has_interface (elts[i])) + if (!has_interface (elts[i])) { relevant_grobs.push_back (elts[i]); diff --git a/lily/tie-column.cc b/lily/tie-column.cc index 8a0ef24139..5f111a8581 100644 --- a/lily/tie-column.cc +++ b/lily/tie-column.cc @@ -40,7 +40,7 @@ Tie_column::add_tie (Grob *tc, Spanner *tie) Spanner *me = dynamic_cast (tc); if (tie->get_parent (Y_AXIS) - && Tie_column::has_interface (tie->get_parent (Y_AXIS))) + && has_interface (tie->get_parent (Y_AXIS))) return; if (!me->get_bound (LEFT) diff --git a/lily/tie-formatting-problem.cc b/lily/tie-formatting-problem.cc index ad08638ebb..905718469c 100644 --- a/lily/tie-formatting-problem.cc +++ b/lily/tie-formatting-problem.cc @@ -99,7 +99,7 @@ Tie_formatting_problem::set_column_chord_outline (vector bounds, for (vsize i = 0; i < bounds.size (); i++) { Grob *head = bounds[i]; - if (!Note_head::has_interface (head)) + if (!has_interface (head)) continue; if (!stem) diff --git a/lily/tie.cc b/lily/tie.cc index ae81317e39..dcc53ad44e 100644 --- a/lily/tie.cc +++ b/lily/tie.cc @@ -45,13 +45,20 @@ bool Tie::less (Grob *g1, Grob *g2) { Spanner *s1 = dynamic_cast (g1); + if (!s1) + { + g1->programming_error ("grob is not a tie"); + return false; + } + Spanner *s2 = dynamic_cast (g2); - if (s1 && s2) { - return get_position (s1) < get_position (s2); - } + if (!s2) + { + g2->programming_error ("grob is not a tie"); + return true; + } - programming_error ("grob is not a tie"); - return false; + return get_position (s1) < get_position (s2); } void @@ -64,7 +71,7 @@ Item * Tie::head (Spanner *me, Direction d) { Item *it = me->get_bound (d); - return Note_head::has_interface (it) ? it : 0; + return has_interface (it) ? it : 0; } int @@ -146,8 +153,8 @@ Tie::calc_direction (SCM smob) // types. It might be clearer to use a template. Grob *me = unsmob (smob); Grob *yparent = me->get_parent (Y_AXIS); - if ((Tie_column::has_interface (yparent) - || Semi_tie_column::has_interface (yparent)) + if ((has_interface (yparent) + || has_interface (yparent)) && unsmob (yparent->get_object ("ties")) // && unsmob (yparent->get_object ("ties"))->size () > 1 ) @@ -209,8 +216,8 @@ Tie::calc_control_points (SCM smob) Spanner *me = LY_ASSERT_SMOB(Spanner, smob, 1); Grob *yparent = me->get_parent (Y_AXIS); - if ((Tie_column::has_interface (yparent) - || Semi_tie_column::has_interface (yparent)) + if ((has_interface (yparent) + || has_interface (yparent)) && unsmob (yparent->get_object ("ties"))) { extract_grob_set (yparent, "ties", ties); diff --git a/lily/tuplet-bracket.cc b/lily/tuplet-bracket.cc index a1ad69c72a..17e1194de8 100644 --- a/lily/tuplet-bracket.cc +++ b/lily/tuplet-bracket.cc @@ -64,7 +64,7 @@ get_x_bound_item (Grob *me_grob, Direction hdir, Direction my_dir) { Spanner *me = dynamic_cast (me_grob); Item *g = me->get_bound (hdir); - if (Note_column::has_interface (g) + if (has_interface (g) && Note_column::get_stem (g) && Note_column::dir (g) == my_dir) g = Note_column::get_stem (g); diff --git a/lily/tuplet-number.cc b/lily/tuplet-number.cc index c8781ca14d..4d879ade4c 100644 --- a/lily/tuplet-number.cc +++ b/lily/tuplet-number.cc @@ -272,7 +272,7 @@ Tuplet_number::calc_x_offset (SCM smob) for (LEFT_and_RIGHT (d)) { - if (Note_column::has_interface (bounds[d]) + if (has_interface (bounds[d]) && Note_column::get_stem (bounds[d])) bounds[d] = Note_column::get_stem (bounds[d]); bound_poss[d] = Axis_group_interface::generic_bound_extent (bounds[d], commonx, X_AXIS)[-d]; diff --git a/lily/vertical-align-engraver.cc b/lily/vertical-align-engraver.cc index d28d0d74a3..6a47809fd7 100644 --- a/lily/vertical-align-engraver.cc +++ b/lily/vertical-align-engraver.cc @@ -120,7 +120,7 @@ Vertical_align_engraver::qualifies (Grob_info i) const { int sz = i.origin_contexts ((Translator *)this).size (); - return sz > 0 && Axis_group_interface::has_interface (i.grob ()) + return sz > 0 && has_interface (i.grob ()) && !i.grob ()->get_parent (Y_AXIS) && !to_boolean (i.grob ()->get_property ("no-alignment")) && Axis_group_interface::has_axis (i.grob (), Y_AXIS); diff --git a/ly/Welcome-to-LilyPond-MacOS.ly b/ly/Welcome-to-LilyPond-MacOS.ly index 0ce1b463a8..b58a5d6935 100644 --- a/ly/Welcome-to-LilyPond-MacOS.ly +++ b/ly/Welcome-to-LilyPond-MacOS.ly @@ -23,7 +23,7 @@ That's it. For more information, visit http://lilypond.org . %} -\version "2.19.24" % necessary for upgrading to future LilyPond versions. +\version "2.19.26" % necessary for upgrading to future LilyPond versions. \header{ title = "A scale in LilyPond" diff --git a/ly/Welcome_to_LilyPond.ly b/ly/Welcome_to_LilyPond.ly index 3664ef258c..4bd39226b5 100644 --- a/ly/Welcome_to_LilyPond.ly +++ b/ly/Welcome_to_LilyPond.ly @@ -32,7 +32,7 @@ Good luck with LilyPond! Happy engraving. %} -\version "2.19.24" % necessary for upgrading to future LilyPond versions. +\version "2.19.26" % necessary for upgrading to future LilyPond versions. \header{ title = "A scale in LilyPond" diff --git a/ly/articulate.ly b/ly/articulate.ly index 98e90347ad..78acdbfe1f 100644 --- a/ly/articulate.ly +++ b/ly/articulate.ly @@ -29,10 +29,10 @@ % is much scope for improvement. % See: http://nicta.com.au/people/chubbp/articulate for additional - % information about how the articulate function works. %%% Supported items: +% Articulations on a single note (staccato, staccatissimo, portato, tenuto). % Slurs and phrasing slurs. % Ornaments (i.e. mordents, trills, turns). % Rallentando, accelerando, ritard and 'a tempo'. @@ -41,20 +41,28 @@ % Manual for a more detailed list of supported items. %%% Technical Details: -% * Any note not under a slur or phrasing mark, and not marked with an -% explicit articulation, is shortened by ac:normalFactor (default 7/8) -% * Any note marked staccato is shortened by ac:staccatoFactor. -% (default 1/2). -% * Any note marked tenuto gets its full value. +% * Any note not under a slur or phrasing slur, and not marked with an +% explicit articulation, is shortened by ac:normalFactor (default 7/8). +% (Shortening a note means replacing the note with a note of a smaller +% duration, and a rest to make up for the difference between the durations +% of the original and the shortened note.) +% * Notes marked with articulations are shortened by factors specific to the +% articulation as follows: +% staccato not under a slur: ac:staccatoFactor (default 1/2) +% under a slur: ac:portatoFactor (default 3/4) +% staccatissimo ac:staccatissimoFactor (default 1/4) +% portato ac:portatoFactor (default 3/4) +% tenuto ac:tenutoFactor (default 1/1 - by default, notes marked +% tenuto are not shortened) % * Appogiaturas are made to take half the value of the note following, -% without taking dots into account (so in \appoggiatura c8 d2. the c -% will take the time of a crotchet). +% without taking dots into account (so in \appoggiatura c8 d2. the c +% will take the time of a crotchet). % * Trills and turns are expanded. The algorithm tries to choose notes -% within the time of the current tempo that lead to each twiddle being -% around 1/8 seconds; this can be adjusted with the ac:maxTwiddleTime -% variable. +% within the time of the current tempo that lead to each twiddle being +% around 1/8 seconds; this can be adjusted with the ac:maxTwiddleTime +% variable. % * Rall, poco rall and a tempo are observed. It'd be fairly trivial to -% make accel. and stringendo and so on work too. +% make accel. and stringendo and so on work too. % %%%USAGE @@ -92,7 +100,6 @@ % * Cope with more ornaments/articulations. % inverted-turns, etc. % -- accent needs better control of dynamics. -% -- Articulations: mezzo-staccato, portato. % -- Handling of generic ornaments (in lily, `\stopped'; in % most early music: ornament this note (trill, turn % or mordent as the player wishes)) @@ -108,6 +115,9 @@ % * accidentals for trills and turns % CHANGELOG +% * Heikki Tauriainen: handle also the \portato articulation (both as an +% explicit articulation, and as the articulation to use for slurred +% notes marked \staccato). % * David Kastrup: remove redefinitions of \afterGrace and \appoggiatura % and let their actions be performed when \articulate is called by % recognizing and replacing LilyPond's default code for these constructs. @@ -139,6 +149,10 @@ % How much to compress notes marked staccatissimo. #(define ac:staccatissimoFactor '(1 . 4)) +% Shortening factor for notes marked portato (or slurred notes marked +% staccato). +#(define ac:portatoFactor '(3 . 4)) + % And tenuto (if we ever implement time stealing, this should be >1.0) #(define ac:tenutoFactor '(1 . 1)) @@ -527,9 +541,9 @@ (unfold-repeats music))) % If there's an articulation, use it. -% If in a slur, use (1 . 1) instead. +% If in a slur, use (1 . 1) instead (unless the note is marked staccato, +% in which case use ac:portatoFactor). % Treat phrasing slurs as slurs, but allow explicit articulation. -% (Maybe should treat staccato under a phrasing slur as mezzo-staccato?) % % Expect an EventChord. % @@ -540,108 +554,114 @@ % ac:articulate-chord applies the actions to each NoteEvent in % the EventChord. #(define (ac:getactions music) - (let loop ((factor ac:normalFactor) - (newelements '()) - (es (ly:music-property music 'elements)) - (actions '())) - (if (null? es) - (begin - (set! (ly:music-property music 'elements) (reverse newelements)) - (if - (not (any (lambda (m) (music-is-of-type? m 'rhythmic-event)) - newelements)) - actions - (append - (let ((st ac:stealForward)) - (if (= st 0) - '() - (begin - (set! ac:stealForward 0) - (list 'steal st)))) + (let ((at-end-of-slur #f)) + (let loop ((factor ac:normalFactor) + (newelements '()) + (es (ly:music-property music 'elements)) + (actions '())) + (if (null? es) + (begin + (set! (ly:music-property music 'elements) (reverse newelements)) + (if + (not (any (lambda (m) (music-is-of-type? m 'rhythmic-event)) + newelements)) actions - (cond - (ac:inTrill '(trill)) - ((and (eq? factor ac:normalFactor) (or ac:inSlur ac:inPhrasingSlur)) - (list 'articulation '(1 . 1))) - (else (list 'articulation factor)))))) - ; else part - (let ((e (car es)) - (tail (cdr es))) - (case (ly:music-property e 'name) - - ((BeamEvent) ; throw away beam events, or they'll be duplicated by turn or trill - (loop factor newelements tail actions)) - - ((LineBreakEvent FingeringEvent MarkEvent BreathingEvent TieEvent SkipEvent RestEvent) ; pass through some events. - (loop (cons 1 1) (cons e newelements) tail actions)) - - ((ArticulationEvent) - (let ((articname (ly:music-property e 'articulation-type))) - ; TODO: add more here + (append + (let ((st ac:stealForward)) + (if (= st 0) + '() + (begin + (set! ac:stealForward 0) + (list 'steal st)))) + actions (cond - ((string= articname "staccato") - (loop ac:staccatoFactor newelements tail actions)) - ((string= articname "staccatissimo") - (loop ac:staccatissimoFactor newelements tail actions)) - ((string= articname "tenuto") - (loop ac:tenutoFactor newelements tail actions)) - ((string= articname "mordent") - (loop (cons 1 1) newelements tail (cons 'mordent actions))) - ((string= articname "prall") - (loop (cons 1 1) newelements tail (cons 'prall actions))) - ((string= articname "trill") - (loop (cons 1 1) newelements tail (cons 'trill actions))) - ((string= articname "turn") - (loop (cons 1 1) newelements tail (cons 'turn actions))) - (else (loop factor (cons e newelements) tail actions))))) - - ((TextScriptEvent) - (let ((t (ly:music-property e 'text))) - (if (not (string? t)) - (loop factor (cons e newelements) tail actions) - (begin - (cond - ((or - (string= t "rall") - (string= t "Rall") - (string= t "rit.") - (string= t "rall.")) - (loop factor (cons e newelements) tail (cons 'rall actions))) - ((or - (string= t "accelerando") - (string= t "accel") - (string= t "accel.")) - (loop factor (cons e newelements) tail (cons 'accel actions))) - ((or - (string= t "poco accel.")) - (loop factor (cons e newelements) tail (cons 'pocoAccel actions))) - ((or - (string= t "poco rall.") - (string= t "poco rit.")) - (loop factor (cons e newelements) tail (cons 'pocoRall actions))) - ((or (string= t "a tempo") - (string= t "tempo I")) - (loop factor (cons e newelements) tail (cons 'aTempo actions))) - (else (loop factor (cons e newelements) tail actions))))))) - - ((SlurEvent) - (let ((direction (ly:music-property e 'span-direction))) - (set! ac:inSlur (eq? direction -1)) - (loop factor newelements tail actions))) - - ((TrillSpanEvent) - (let ((direction (ly:music-property e 'span-direction))) - (set! ac:inTrill (eq? direction -1)) - (if ac:inTrill - (loop factor newelements tail (cons 'trill actions)) - (loop factor (cons e newelements) tail actions)))) - - ((PhrasingSlurEvent) - (let ((direction (ly:music-property e 'span-direction))) - (set! ac:inPhrasingSlur (eq? direction -1)) - (loop factor newelements tail actions))) - - (else (loop factor (cons e newelements) tail actions))))))) + (ac:inTrill '(trill)) + ((and (eq? factor ac:normalFactor) (or ac:inSlur ac:inPhrasingSlur)) + (list 'articulation '(1 . 1))) + ((and (eq? factor ac:staccatoFactor) (or ac:inSlur at-end-of-slur)) + (list 'articulation ac:portatoFactor)) + (else (list 'articulation factor)))))) + ; else part + (let ((e (car es)) + (tail (cdr es))) + (case (ly:music-property e 'name) + + ((BeamEvent) ; throw away beam events, or they'll be duplicated by turn or trill + (loop factor newelements tail actions)) + + ((LineBreakEvent FingeringEvent MarkEvent BreathingEvent TieEvent SkipEvent RestEvent) ; pass through some events. + (loop (cons 1 1) (cons e newelements) tail actions)) + + ((ArticulationEvent) + (let ((articname (ly:music-property e 'articulation-type))) + ; TODO: add more here + (cond + ((string= articname "staccato") + (loop ac:staccatoFactor newelements tail actions)) + ((string= articname "staccatissimo") + (loop ac:staccatissimoFactor newelements tail actions)) + ((string= articname "portato") + (loop ac:portatoFactor newelements tail actions)) + ((string= articname "tenuto") + (loop ac:tenutoFactor newelements tail actions)) + ((string= articname "mordent") + (loop (cons 1 1) newelements tail (cons 'mordent actions))) + ((string= articname "prall") + (loop (cons 1 1) newelements tail (cons 'prall actions))) + ((string= articname "trill") + (loop (cons 1 1) newelements tail (cons 'trill actions))) + ((string= articname "turn") + (loop (cons 1 1) newelements tail (cons 'turn actions))) + (else (loop factor (cons e newelements) tail actions))))) + + ((TextScriptEvent) + (let ((t (ly:music-property e 'text))) + (if (not (string? t)) + (loop factor (cons e newelements) tail actions) + (begin + (cond + ((or + (string= t "rall") + (string= t "Rall") + (string= t "rit.") + (string= t "rall.")) + (loop factor (cons e newelements) tail (cons 'rall actions))) + ((or + (string= t "accelerando") + (string= t "accel") + (string= t "accel.")) + (loop factor (cons e newelements) tail (cons 'accel actions))) + ((or + (string= t "poco accel.")) + (loop factor (cons e newelements) tail (cons 'pocoAccel actions))) + ((or + (string= t "poco rall.") + (string= t "poco rit.")) + (loop factor (cons e newelements) tail (cons 'pocoRall actions))) + ((or (string= t "a tempo") + (string= t "tempo I")) + (loop factor (cons e newelements) tail (cons 'aTempo actions))) + (else (loop factor (cons e newelements) tail actions))))))) + + ((SlurEvent) + (let ((direction (ly:music-property e 'span-direction))) + (set! ac:inSlur (eq? direction -1)) + (set! at-end-of-slur (eq? direction 1)) + (loop factor newelements tail actions))) + + ((TrillSpanEvent) + (let ((direction (ly:music-property e 'span-direction))) + (set! ac:inTrill (eq? direction -1)) + (if ac:inTrill + (loop factor newelements tail (cons 'trill actions)) + (loop factor (cons e newelements) tail actions)))) + + ((PhrasingSlurEvent) + (let ((direction (ly:music-property e 'span-direction))) + (set! ac:inPhrasingSlur (eq? direction -1)) + (loop factor newelements tail actions))) + + (else (loop factor (cons e newelements) tail actions)))))))) diff --git a/ly/context-mods-init.ly b/ly/context-mods-init.ly index e8b9602577..24b8ce0558 100644 --- a/ly/context-mods-init.ly +++ b/ly/context-mods-init.ly @@ -23,3 +23,26 @@ RemoveEmptyStaves = \with { \description "Remove staves which are considered to be empty according to the list of interfaces set by @code{keepAliveInterfaces}." } + +inherit-acceptability = +#(define-void-function (to from) + (symbol? symbol?) + (_i "When used in an output definition, will modify all context +definitions such that context @var{to} is accepted as a child by all +contexts that also accept @var{from}.") + (let* ((module (current-module)) + (cmod (ly:make-context-mod))) + (ly:add-context-mod cmod (list 'accepts to)) + (if (output-module? module) + (module-map + (lambda (_sym var) + (if (variable-bound? var) + (let ((cdef (variable-ref var))) + (if (ly:context-def? cdef) + (let ((accepts (ly:context-def-lookup cdef 'accepts))) + (if (and (memq from accepts) + (not (memq to accepts))) + (variable-set! var + (ly:context-def-modify cdef cmod)))))))) + module) + (ly:parser-error (_ "Not in an output definition"))))) diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index 2ea76ac646..62559ca40f 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -150,6 +150,7 @@ \accepts "FiguredBass" \accepts "GrandStaff" \accepts "Lyrics" + \accepts "OneStaff" \accepts "PianoStaff" \accepts "RhythmicStaff" \accepts "Staff" @@ -385,6 +386,7 @@ together, never separately." \accepts "FretBoards" \accepts "GrandStaff" \accepts "Lyrics" + \accepts "OneStaff" \accepts "PianoStaff" \accepts "RhythmicStaff" \accepts "Staff" @@ -397,6 +399,35 @@ staves are connected vertically. @code{StaffGroup} only consists of a collection of staves, with a bracket in front and spanning bar lines." } +\context { + \type "Engraver_group" + \name "OneStaff" + \accepts "ChordNames" + \accepts "DrumStaff" + \accepts "Dynamics" + \accepts "FiguredBass" + \accepts "FretBoards" + \accepts "GregorianTranscriptionStaff" + \accepts "KievanStaff" + \accepts "Lyrics" + \accepts "MensuralStaff" + \accepts "NoteNames" + \accepts "PetrucciStaff" + \accepts "RhythmicStaff" + \accepts "Staff" + \accepts "TabStaff" + \accepts "VaticanaStaff" + \defaultchild "Staff" + \consists "Axis_group_engraver" + + \description "Provides a common axis for the contained staves, +making all of them appear in the same vertical space. This can be +useful for typesetting staves of different types in immediate succession +or for temporarily changing the character of one staff or overlaying +it with a different one. Often used with @code{\\stopStaff} and +@code{\\startStaff} for best results." +} + \context { \type "Engraver_group" \name "Dynamics" @@ -571,6 +602,7 @@ automatically when an output definition (a @code{\\score} or \accepts "ChordNames" \accepts "Devnull" \accepts "DrumStaff" + \accepts "Dynamics" \accepts "FiguredBass" \accepts "FretBoards" \accepts "GrandStaff" @@ -579,6 +611,7 @@ automatically when an output definition (a @code{\\score} or \accepts "Lyrics" \accepts "MensuralStaff" \accepts "NoteNames" + \accepts "OneStaff" \accepts "PetrucciStaff" \accepts "PianoStaff" \accepts "RhythmicStaff" diff --git a/ly/music-functions-init.ly b/ly/music-functions-init.ly index 9af5c88539..5e04d325cf 100644 --- a/ly/music-functions-init.ly +++ b/ly/music-functions-init.ly @@ -29,8 +29,6 @@ #(use-modules (srfi srfi-1) (ice-9 optargs)) -%% TODO: using define-music-function in a .scm causes crash. - absolute = #(define-music-function (music) (ly:music?) @@ -189,19 +187,17 @@ pitch where to switch staves may be specified. The clefs for the staves are optional as well. Setting clefs works only for implicitly instantiated staves.") (let ;; keep the contexts alive for the full duration - ((skip (make-skip-music (make-duration-of-length - (ly:music-length music))))) - #{ - << - \context Staff = "up" $(or clef-1 #{ \with { \clef "treble" } #}) - << - #(make-autochange-music pitch music) - \new Voice { #skip } - >> - \context Staff = "down" $(or clef-2 #{ \with { \clef "bass" } #}) - \new Voice { #skip } - >> - #})) + ((skip (make-duration-of-length (ly:music-length music))) + (clef-1 (or clef-1 #{ \with { \clef "treble" } #})) + (clef-2 (or clef-2 #{ \with { \clef "bass" } #}))) + (make-simultaneous-music + (list + (descend-to-context (make-autochange-music pitch music) 'Staff + "up" clef-1) + (context-spec-music (make-skip-music skip) 'Staff + "up" clef-1) + (context-spec-music (make-skip-music skip) 'Staff + "down" clef-2))))) balloonGrobText = #(define-music-function (grob-name offset text) @@ -844,6 +840,37 @@ mark = (if label (set! (ly:music-property ev 'label) label)) ev)))) +markupMap = +#(define-music-function (path markupfun music) + (symbol-list-or-symbol? markup-function? ly:music?) + (_i "This applies the given markup function @var{markupfun} to all markup +music properties matching @var{path} in @var{music}. + +For example, +@example +\\new Voice @{ g'2 c'' @} +\\addlyrics @{ + \\markupMap LyricEvent.text + \\markup \\with-color #red \\etc + @{ Oh yes! @} +@} +@end example +") + (let* ((p (check-music-path path (*location*))) + (name (and p (car p))) + (prop (and p (cadr p)))) + (if p + (for-some-music + (lambda (m) + (if (or (not name) (eq? (ly:music-property m 'name) name)) + (let ((text (ly:music-property m prop))) + (if (markup? text) + (set! (ly:music-property m prop) + (list markupfun text))))) + #f) + music))) + music) + musicMap = #(define-music-function (proc mus) (procedure? ly:music?) (_i "Apply @var{proc} to @var{mus} and all of the music it contains.") diff --git a/ly/performer-init.ly b/ly/performer-init.ly index 0c4a03af59..00c4bdf3da 100644 --- a/ly/performer-init.ly +++ b/ly/performer-init.ly @@ -238,6 +238,7 @@ \accepts ChordNames \accepts Devnull \accepts DrumStaff + \accepts Dynamics \accepts FiguredBass \accepts GrandStaff \accepts GregorianTranscriptionStaff @@ -246,6 +247,7 @@ \accepts MensuralStaff \accepts NoteNames \accepts NullVoice + \accepts OneStaff \accepts PetrucciStaff \accepts PianoStaff \accepts RhythmicStaff @@ -311,6 +313,7 @@ \accepts DrumStaff \accepts GrandStaff \accepts Lyrics + \accepts OneStaff \accepts PianoStaff \accepts RhythmicStaff \accepts Staff @@ -342,6 +345,7 @@ \accepts FretBoards \accepts GrandStaff \accepts Lyrics + \accepts OneStaff \accepts PianoStaff \accepts RhythmicStaff \accepts Staff @@ -350,6 +354,27 @@ \defaultchild Staff } +\context { + \type "Performer_group" + \name "OneStaff" + \accepts "ChordNames" + \accepts "DrumStaff" + \accepts "Dynamics" + \accepts "FiguredBass" + \accepts "FretBoards" + \accepts "GregorianTranscriptionStaff" + \accepts "KievanStaff" + \accepts "Lyrics" + \accepts "MensuralStaff" + \accepts "NoteNames" + \accepts "PetrucciStaff" + \accepts "RhythmicStaff" + \accepts "Staff" + \accepts "TabStaff" + \accepts "VaticanaStaff" + \defaultchild "Staff" +} + \context { \Staff \name RhythmicStaff diff --git a/ly/titling-init.ly b/ly/titling-init.ly index eb9ced5375..f397ad6bd9 100644 --- a/ly/titling-init.ly +++ b/ly/titling-init.ly @@ -76,14 +76,8 @@ scoreTitleMarkup = \markup { \column { #(define (book-first-page? layout props) "Return #t iff the current page number, got from @code{props}, is the book first one." - (define (ancestor layout) - "Return the topmost layout ancestor" - (let ((parent (ly:output-def-parent layout))) - (if (not (ly:output-def? parent)) - layout - (ancestor parent)))) (= (chain-assoc-get 'page:page-number props -1) - (ly:output-def-lookup (ancestor layout) 'first-page-number))) + (book-first-page layout props))) #(define (book-last-page? layout props) "Return #t iff the current page number, got from @code{props}, is the diff --git a/mf/00-lilypond-fonts.conf.in b/mf/00-lilypond-fonts.conf.in new file mode 100644 index 0000000000..899db67172 --- /dev/null +++ b/mf/00-lilypond-fonts.conf.in @@ -0,0 +1,44 @@ + + + + + + + + LilyPond Serif + + TeX Gyre Schola + DejaVu Serif + + + serif + + + + + LilyPond Sans Serif + + TeX Gyre Heros + DejaVu Sans + + + sans-serif + + + + + LilyPond Monospace + + TeX Gyre Cursor + DejaVu Sans Mono + + + monospace + + + + diff --git a/mf/99-lilypond-fonts.conf.in b/mf/99-lilypond-fonts.conf.in new file mode 100644 index 0000000000..83f8b5376e --- /dev/null +++ b/mf/99-lilypond-fonts.conf.in @@ -0,0 +1,19 @@ + + + + + + + + + + false + + + + + diff --git a/mf/GNUmakefile b/mf/GNUmakefile index 5550eaf06b..4860f65f6e 100644 --- a/mf/GNUmakefile +++ b/mf/GNUmakefile @@ -35,22 +35,10 @@ OTF_TABLES = $(STAFF_SIZES:%=$(outdir)/feta%.otf-table) \ SVG_FILES = $(OTF_FILES:%.otf=%.svg) WOFF_FILES = $(OTF_FILES:%.otf=%.woff) -NCSB_OTFS = $(addprefix $(outdir)/,CenturySchL-Ital.otf \ - CenturySchL-BoldItal.otf \ - CenturySchL-Roma.otf \ - CenturySchL-Bold.otf) +TEXGYRE_OTFS = $(addprefix $(TEXGYRE_DIR)/,$(TEXGYRE_FILES)) -HELV_OTFS = $(addprefix $(outdir)/,NimbusSanL-ReguItal.otf \ - NimbusSanL-BoldItal.otf \ - NimbusSanL-Regu.otf \ - NimbusSanL-Bold.otf) - -COUR_OTFS = $(addprefix $(outdir)/,NimbusMonL-ReguObli.otf \ - NimbusMonL-BoldObli.otf \ - NimbusMonL-Regu.otf \ - NimbusMonL-Bold.otf) - -LILYPOND_FONTS_CONF = $(outdir)/lilypond-fonts.conf +LILYPOND_FONTS_CONF = $(outdir)/00-lilypond-fonts.conf \ + $(outdir)/99-lilypond-fonts.conf LOG_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.log) LISP_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.lisp) @@ -85,9 +73,6 @@ $(outdir)/emmentaler-%.genpe: $(buildscript-dir)/gen-emmentaler-scripts $< --dir=$(outdir) --design-size=$(patsubst emmentaler-%.genpe,%,$(notdir $@)) ALL_GEN_FILES = $(ENC_FILES) \ - $(NCSB_OTFS) \ - $(HELV_OTFS) \ - $(COUR_OTFS) \ $(OTF_FILES) \ $(SVG_FILES) \ $(WOFF_FILES) \ @@ -102,7 +87,7 @@ INSTALLATION_OUT_SUFFIXES = 1 2 3 INSTALLATION_OUT_DIR1 = $(local_lilypond_datadir)/fonts/otf INSTALLATION_OUT_FILES1 = $(OTF_FILES) \ - $(NCSB_OTFS) $(HELV_OTFS) $(COUR_OTFS) + $(TEXGYRE_OTFS) INSTALLATION_OUT_DIR2 = $(local_lilypond_datadir)/fonts/svg INSTALLATION_OUT_FILES2 = $(SVG_FILES) $(WOFF_FILES) @@ -178,37 +163,3 @@ local-clean: $(outdir)/fonts.conf: echo ''$(shell cd $(outdir); pwd)'' > $@ - - -$(outdir)/CenturySchL-Roma.otf: $(NCSB_SOURCE_FILES) \ - $(auxscript-dir)/pfx2ttf.fontforge - $(foreach i, $(basename $(NCSB_SOURCE_FILES)), \ - $(FONTFORGE) -script $(auxscript-dir)/pfx2ttf.fontforge \ - $(i).pfb $(i).afm $(outdir)/ && ) true - -$(addprefix $(outdir)/,CenturySchL-Ital.otf \ - CenturySchL-Bold.otf \ - CenturySchL-BoldItal.otf): $(outdir)/CenturySchL-Roma.otf - $(UPDATE_TARGET) - -$(outdir)/NimbusSanL-Regu.otf: $(HELV_SOURCE_FILES) \ - $(auxscript-dir)/pfx2ttf.fontforge - $(foreach i, $(basename $(HELV_SOURCE_FILES)), \ - $(FONTFORGE) -script $(auxscript-dir)/pfx2ttf.fontforge \ - $(i).pfb $(i).afm $(outdir)/ && ) true - -$(addprefix $(outdir)/,NimbusSanL-ReguItal.otf \ - NimbusSanL-Bold.otf \ - NimbusSanL-BoldItal.otf): $(outdir)/NimbusSanL-Regu.otf - $(UPDATE_TARGET) - -$(outdir)/NimbusMonL-Regu.otf: $(COUR_SOURCE_FILES) \ - $(auxscript-dir)/pfx2ttf-mono.fontforge - $(foreach i, $(basename $(COUR_SOURCE_FILES)), \ - $(FONTFORGE) -script $(auxscript-dir)/pfx2ttf-mono.fontforge \ - $(i).pfb $(i).afm $(outdir)/ && ) true - -$(addprefix $(outdir)/,NimbusMonL-ReguObli.otf \ - NimbusMonL-Bold.otf \ - NimbusMonL-BoldObli.otf): $(outdir)/NimbusMonL-Regu.otf - $(UPDATE_TARGET) diff --git a/mf/lilypond-fonts.conf.in b/mf/lilypond-fonts.conf.in deleted file mode 100644 index e32baf8147..0000000000 --- a/mf/lilypond-fonts.conf.in +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - LilyPond Serif - - Century Schoolbook L - DejaVu Serif - - - serif - - - - - LilyPond Sans Serif - - Nimbus Sans L - DejaVu Sans - - - sans-serif - - - - - LilyPond Monospace - - Nimbus Mono L - DejaVu Sans Mono - - - monospace - - - - - - - - - false - - - - - diff --git a/po/fr.po b/po/fr.po index 6f0c9cc16d..fa700548d1 100644 --- a/po/fr.po +++ b/po/fr.po @@ -7,10 +7,10 @@ # msgid "" msgstr "" -"Project-Id-Version: lilypond 2.19.16\n" +"Project-Id-Version: lilypond 2.19.26\n" "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n" -"POT-Creation-Date: 2015-02-28 14:31+0000\n" -"PO-Revision-Date: 2015-03-02 13:28+0100\n" +"POT-Creation-Date: 2015-08-27 10:48+0100\n" +"PO-Revision-Date: 2015-08-31 18:53+0200\n" "Last-Translator: Jean-Charles Malahieude \n" "Language-Team: French \n" "Language: fr\n" @@ -172,7 +172,7 @@ msgstr "\\textstyle est obsolète ; utiliser désormais la syntaxe \\key" #: convertrules.py:82 convertrules.py:1856 convertrules.py:2032 #: convertrules.py:2175 convertrules.py:2506 convertrules.py:2801 -#: convertrules.py:3151 convertrules.py:3385 convertrules.py:3697 +#: convertrules.py:3151 convertrules.py:3388 convertrules.py:3700 msgid "bump version for release" msgstr "sauter de version pour mise à jour" @@ -597,7 +597,7 @@ msgstr "Suppression de oldaddlyrics" #: convertrules.py:2820 msgid "" "oldaddlyrics is no longer supported. \n" -" Use addlyrics or lyrsicsto instead.\n" +" Use addlyrics or lyricsto instead.\n" msgstr "" "oldaddlyrics n'est désormais plus pris en charge.\n" " Utilisez maintenant addlyrics ou lyricsto.\n" @@ -859,15 +859,15 @@ msgstr "" "input/regression/beam-broken-classic.ly indique comment sont désormais\n" "gérées les ligatures tronquées.\n" -#: convertrules.py:3369 +#: convertrules.py:3372 msgid "beamExceptions controls whole-measure beaming." msgstr "Une ligature sur la mesure est gérée par beamExceptions" -#: convertrules.py:3606 +#: convertrules.py:3609 msgid "Flag.transparent and Flag.color inherit from Stem" msgstr "Flag.transparent et Flag.color héritent de Stem" -#: convertrules.py:3672 +#: convertrules.py:3675 msgid "Staff-padding now controls the distance to the baseline, not the nearest point." msgstr "" "Staff-padding contrôle désormais la distance par rapport à la ligne de\n" @@ -977,12 +977,12 @@ msgstr "" msgid "Unable to find instrument for ID=%s\n" msgstr "Aucun instrument ne correspond à l'ID %s\n" -#: abc2ly.py:1386 convert-ly.py:85 lilypond-book.py:122 midi2ly.py:1044 +#: abc2ly.py:1389 convert-ly.py:85 lilypond-book.py:122 midi2ly.py:1044 #, python-format msgid "%s [OPTION]... FILE" msgstr "%s [OPTIONS]... FICHIER" -#: abc2ly.py:1387 +#: abc2ly.py:1390 #, python-format msgid "" "abc2ly converts ABC music files (see\n" @@ -991,29 +991,29 @@ msgstr "" "abc2ly convertit les fichiers musicaux ABC (voir\n" "%s) au format LilyPond.\n" -#: abc2ly.py:1395 convert-ly.py:92 etf2ly.py:1208 lilypond-book.py:231 -#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:183 +#: abc2ly.py:1398 convert-ly.py:92 etf2ly.py:1208 lilypond-book.py:231 +#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:184 msgid "show version number and exit" msgstr "affiche le numéro de version et quitte" -#: abc2ly.py:1398 convert-ly.py:96 etf2ly.py:1204 lilypond-book.py:140 -#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:162 +#: abc2ly.py:1401 convert-ly.py:96 etf2ly.py:1204 lilypond-book.py:140 +#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:163 msgid "show this help and exit" msgstr "visualiser cette aide et quitter" -#: abc2ly.py:1401 etf2ly.py:1209 midi2ly.py:1071 +#: abc2ly.py:1404 etf2ly.py:1209 midi2ly.py:1071 msgid "write output to FILE" msgstr "produit la sortie dans le FICHIER" -#: abc2ly.py:1404 +#: abc2ly.py:1407 msgid "be strict about success" msgstr "être strict sur la réussite" -#: abc2ly.py:1407 +#: abc2ly.py:1410 msgid "preserve ABC's notion of beams" msgstr "préserver la notion de ligature propre à ABC" -#: abc2ly.py:1410 +#: abc2ly.py:1413 msgid "suppress progress messages" msgstr "n'affiche pas les messages de progression" @@ -1021,8 +1021,8 @@ msgstr "n'affiche pas les messages de progression" #. "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:1413 convert-ly.py:157 etf2ly.py:1218 lilypond-book.py:258 -#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:317 +#: abc2ly.py:1416 convert-ly.py:157 etf2ly.py:1218 lilypond-book.py:258 +#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:318 #, c-format, python-format msgid "Report bugs via %s" msgstr "" @@ -1080,7 +1080,7 @@ msgstr "" "(NONE, ERROR, WARNING, PROGRESS (par défaut), DEBUG)" #: convert-ly.py:111 lilypond-book.py:163 lilypond-book.py:181 -#: musicxml2ly.py:2629 main.cc:176 +#: musicxml2ly.py:2629 main.cc:177 msgid "LOGLEVEL" msgstr "LOGLEVEL" @@ -1112,7 +1112,7 @@ msgid "make a numbered backup [default: filename.ext~]" msgstr "effectue un archivage numéroté [par défaut : nomfichier.etx~]" #: convert-ly.py:152 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096 -#: main.cc:185 +#: main.cc:186 msgid "show warranty and copyright" msgstr "affiche les notices de garantie et du droit d'auteur" @@ -1133,19 +1133,19 @@ msgstr "Arrêt à la dernière règle appliquée avec succès" msgid "Processing `%s'... " msgstr "Traitement de « %s »..." -#: convert-ly.py:368 +#: convert-ly.py:366 #, python-format msgid "%s: Unable to open file" msgstr "impossible d'ouvrir le fichier « %s »" -#: convert-ly.py:374 +#: convert-ly.py:372 #, python-format msgid "%s: Unable to determine version. Skipping" msgstr "" "impossible de déterminer la version de « %s ».\n" " Au suivant !" -#: convert-ly.py:380 +#: convert-ly.py:378 #, python-format msgid "" "%s: Invalid version string `%s' \n" @@ -1155,7 +1155,7 @@ msgstr "" "Un numéro de version valide est formé de trois nombres séparés par un point,\n" "comme par exemple « 2.8.12 »" -#: convert-ly.py:386 +#: convert-ly.py:384 #, python-format msgid "There was %d error." msgid_plural "There were %d errors." @@ -1177,7 +1177,7 @@ msgstr "" "exploitable.\n" #: etf2ly.py:1210 midi2ly.py:1067 midi2ly.py:1072 musicxml2ly.py:2659 -#: main.cc:168 main.cc:180 +#: main.cc:169 main.cc:181 msgid "FILE" msgstr "FICHIER" @@ -1219,7 +1219,7 @@ msgid "add DIR to include path" msgstr "ajoute le RÉP au chemin de recherche des inclusions" #: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:169 -#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:167 +#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:168 msgid "DIR" msgstr "RÉP" @@ -1232,7 +1232,7 @@ msgid "PAD" msgstr "PAD" #: lilypond-book.py:157 -msgid "pad left side of music to align music inspite of uneven bar numbers (in mm)" +msgid "pad left side of music to align music in spite of uneven bar numbers (in mm)" msgstr "" "tasse la musique par la gauche pour la répartir en dépit du nombre irrégulier\n" "de mesures (en mm)" @@ -1808,7 +1808,7 @@ msgstr "" "La saisie d'une liste d'altérations accidentelles doit débuter\n" "par un nom de contexte : %s" -#: accidental-engraver.cc:210 +#: accidental-engraver.cc:207 #, c-format msgid "procedure or context-name expected for accidental rule, found %s" msgstr "" @@ -1824,7 +1824,7 @@ msgstr "Aucun nom de glyphe ne correspond à l'altération %s" msgid "natural alteration glyph not found" msgstr "pas de glyphe correspondant au bécarre" -#: all-font-metrics.cc:149 +#: all-font-metrics.cc:159 #, c-format msgid "cannot find font: `%s'" msgstr "fonte « %s » introuvable" @@ -1837,11 +1837,6 @@ msgstr "l'argument \\applycontext n'est pas une procédure" msgid "no heads for arpeggio found?" msgstr "arpeggio sans tête de note ?" -#: 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 translateur : %s" - #: axis-group-engraver.cc:149 msgid "Axis_group_engraver: vertical group already has a parent" msgstr "Axis_group_engraver : le groupe vertical a déjà un parent" @@ -1854,14 +1849,14 @@ msgstr "Axis_group_engraver redondant" msgid "removing this vertical group" msgstr "retrait de ce groupe vertical" -#: axis-group-interface.cc:714 +#: axis-group-interface.cc:716 #, c-format msgid "\"%s\" is not a valid outside-staff-placement-directive" msgstr "" "on ne peut positionner un objet externe à la portée avec \"%s\"\n" " (outside-staff-position-directive)" -#: axis-group-interface.cc:786 +#: axis-group-interface.cc:788 msgid "an outside-staff object should have a direction, defaulting to up" msgstr "" "un objet externe à la portée devrait avoir un positionnement.\n" @@ -1893,13 +1888,13 @@ msgid "beam was started here" msgstr "la ligature a débuté ici" #. We are completely screwed. -#: beam-quanting.cc:839 +#: beam-quanting.cc:850 msgid "no viable initial configuration found: may not find good beam slope" msgstr "" "pas de configuration initiale viable repérée :\n" "la pente de la ligature pourrait être inesthétique." -#: beam.cc:181 +#: beam.cc:183 msgid "removing beam with no stems" msgstr "suppression d'une ligature ayant moins de deux hampes" @@ -1909,22 +1904,24 @@ msgid "cannot change `%s' to `%s'" msgstr "impossible de changer « %s » en « %s »" #. FIXME: constant error message. -#: change-iterator.cc:93 +#: change-iterator.cc:67 msgid "cannot find context to switch to" msgstr "impossible de repérer le contexte vers lequel commuter" +#. No enclosing context was found because the iterator's immediate +#. context is the kind that was sought. #. 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:102 +#: change-iterator.cc:78 #, c-format msgid "not changing to same context type: %s" msgstr "pas de changement vers le même type de contexte : %s" -#. FIXME: uncomprehensable message -#: change-iterator.cc:106 +#. FIXME: incomprehensible message +#: change-iterator.cc:82 msgid "none of these in my family" msgstr "aucun de ceux-ci dans ma famille" @@ -1963,22 +1960,22 @@ msgstr "impossible de trouver un saut de ligne qui satisfasse aux contraintes" msgid "need symbol arguments for \\override and \\revert" msgstr "\\override et \\revert requièrent des arguments symboliques" -#: context.cc:143 +#: context.cc:144 #, c-format msgid "cannot find or create new `%s'" msgstr "impossible de trouver ou créer un nouveau « %s »" -#: context.cc:222 +#: context.cc:223 #, c-format msgid "cannot find or create `%s' called `%s'" msgstr "impossible de trouver ou créer « %s » dénommé(e) « %s »" -#: context.cc:419 +#: context.cc:416 #, c-format msgid "cannot find or create: `%s'" msgstr "impossible de trouver ou créer « %s »" -#: context.cc:433 +#: context.cc:430 #, c-format msgid "cannot find or create new Bottom = \"%s\"" msgstr "impossible de trouver ou créer un nouveau « %s »" @@ -1988,20 +1985,20 @@ msgstr "impossible de trouver ou créer un nouveau « %s »" msgid "custos `%s' not found" msgstr "custode « %s » introuvable" -#: dispatcher.cc:83 +#: dispatcher.cc:82 msgid "Event class should be a list" msgstr "La classe d'événement devrait être une liste" -#: dispatcher.cc:166 +#: dispatcher.cc:165 #, c-format msgid "Junking event: %s" msgstr "Événement escamoté : « %s »" -#: dispatcher.cc:271 +#: dispatcher.cc:279 msgid "Attempting to remove nonexisting listener." msgstr "Tentative de suppression d'un écouteur inexistant." -#: dispatcher.cc:297 +#: dispatcher.cc:305 msgid "Already listening to dispatcher, ignoring request" msgstr "Déjà à l'écoute du dispatcheur ; requête ignorée." @@ -2010,7 +2007,7 @@ msgstr "Déjà à l'écoute du dispatcheur ; requête ignorée." msgid "dot `%s' not found" msgstr "point « %s » introuvable" -#: dynamic-engraver.cc:168 +#: dynamic-engraver.cc:169 #, c-format msgid "" "unknown crescendo style: %s\n" @@ -2019,7 +2016,7 @@ msgstr "" "style de crescendo inconnu : %s\n" "retour à la valeur par défaut (soufflet)." -#: dynamic-engraver.cc:233 slur-proto-engraver.cc:119 +#: dynamic-engraver.cc:234 slur-proto-engraver.cc:119 #, c-format msgid "unterminated %s" msgstr "%s non terminé(e)" @@ -2047,22 +2044,22 @@ msgstr "épisème non terminé" msgid "unterminated extender" msgstr "prolongation ou extenseur non terminé" -#: flag.cc:134 +#: flag.cc:133 #, c-format msgid "flag `%s' not found" msgstr "crochet inconnu : « %s »" -#: flag.cc:154 +#: flag.cc:153 #, c-format msgid "flag stroke `%s' not found" msgstr "type de crochet inconnu : « %s »" -#: font-config-scheme.cc:151 font-config.cc:53 +#: font-config-scheme.cc:151 font-config.cc:82 #, c-format msgid "failed adding font directory: %s" msgstr "échec lors de l'ajout d'un répertoire de fontes : « %s »" -#: font-config-scheme.cc:153 font-config.cc:55 +#: font-config-scheme.cc:153 font-config.cc:84 #, c-format msgid "Adding font directory: %s" msgstr "Ajout d'un répertoire de fontes : « %s »" @@ -2081,7 +2078,17 @@ msgstr "Ajout d'un fichier de fontes : « %s »" msgid "Initializing FontConfig..." msgstr "Initialisation de FontConfig..." -#: font-config.cc:58 +#: font-config.cc:70 +#, c-format +msgid "failed to add fontconfig configuration file `%s'" +msgstr "échec lors de l'ajout du fichier de configuration de fontconfig « %s »" + +#: font-config.cc:73 +#, c-format +msgid "Adding fontconfig configuration file: %s" +msgstr "Ajout du fichier de configuration de fontconfig : « %s »" + +#: font-config.cc:86 msgid "Building font database..." msgstr "Construction de la base de donnée des fontes..." @@ -2147,12 +2154,12 @@ msgstr "" "L'objet graphique (Grob) « %s »\n" " n'a pas d'interface pour la propriété « %s »" -#: grob-property.cc:35 +#: grob-property.cc:33 #, c-format msgid "%d: %s" msgstr "%d : %s" -#: grob.cc:481 +#: grob.cc:492 #, c-format msgid "ignored infinite %s-offset" msgstr "%s-offset infini ignoré" @@ -2181,7 +2188,7 @@ msgstr "retrait du trait d'union sans suite" msgid "unterminated hyphen; removing" msgstr "trait d'union sans suite ; escamoté" -#: includable-lexer.cc:71 lily-guile.cc:91 lily-parser-scheme.cc:108 +#: includable-lexer.cc:71 lily-guile.cc:92 lily-parser-scheme.cc:108 #, c-format msgid "cannot find file: `%s'" msgstr "fichier non trouvé : « %s »" @@ -2191,11 +2198,11 @@ msgstr "fichier non trouvé : « %s »" msgid "(search path: `%s')" msgstr "(chemin de recherche : « %s »)" -#: input.cc:138 source-file.cc:177 source-file.cc:192 +#: input.cc:138 source-file.cc:180 source-file.cc:195 msgid "position unknown" msgstr "position inconnue" -#: key-engraver.cc:198 +#: key-engraver.cc:197 msgid "Incomplete keyAlterationOrder for key signature" msgstr "Propriété keyAlterationOrder incomplète pour cette armure." @@ -2236,21 +2243,21 @@ msgstr "le silence est ignoré : une ligature ne peut contenir de silence" msgid "ligature was started here" msgstr "la ligature a débuté ici" -#: lily-guile.cc:93 +#: lily-guile.cc:94 #, c-format msgid "(load path: `%s')" msgstr "(chemin de chargement : « %s »)" -#: lily-guile.cc:412 +#: lily-guile.cc:413 #, c-format msgid "cannot find property type-check for `%s' (%s)." msgstr "vérification du type de propriété pour « %s » (%s) non trouvée" -#: lily-guile.cc:415 +#: lily-guile.cc:416 msgid "perhaps a typing error?" msgstr "Probable faute de frappe" -#: lily-guile.cc:422 +#: lily-guile.cc:423 msgid "skipping assignment" msgstr "affectation ignorée" @@ -2261,20 +2268,33 @@ msgstr "" "la vérification du type de « %s » a échoué ; \n" " la valeur « %s » doit être du type « %s »" -#: lily-lexer.cc:249 +#. Uh oh. unsmob delivered 0, yet +#. unsmob delivers true. This means that unsmob is a +#. matching check from a base class of T, but var is of an +#. incompatible derived type. +#: lily-guile.cc:462 +msgid "Wrong kind of " +msgstr "Mauvais genre de " + +#: lily-lexer.cc:251 msgid "include files are not allowed in safe mode" msgstr "l'inclusion de fichiers n'est pas permise en mode sans échec" -#: lily-lexer.cc:276 +#: lily-lexer.cc:278 #, c-format msgid "identifier name is a keyword: `%s'" msgstr "Le nom de l'identificateur est un mot clé : « %s »" -#: lily-lexer.cc:297 lily-lexer.cc:310 +#: lily-lexer.cc:299 lily-lexer.cc:312 #, c-format msgid "%s:EOF" msgstr "%s:EOF" +#: lily-modules.cc:81 +#, c-format +msgid "Uninitialized variable `%s' in module (%s)" +msgstr "Variable « %s » dans le module « %s » non initialisée" + #: lily-parser-scheme.cc:80 #, c-format msgid "Changing working directory to: `%s'" @@ -2301,23 +2321,23 @@ msgstr "" msgid "Processing `%s'" msgstr "Traitement de « %s »" -#: lily-parser-scheme.cc:209 +#: lily-parser-scheme.cc:210 msgid "ly:parser-parse-string is only valid with a new parser. Use ly:parser-include-string instead." msgstr "" "ly:parser-parse-string ne peut foncionner qu'avec un nouvel analyseur.\n" "Utilisez plutôt ly:parser-include-string" -#: lily-parser-scheme.cc:240 +#: lily-parser-scheme.cc:241 msgid "ly:parse-string-expression is only valid with a new parser. Use ly:parser-include-string instead." msgstr "" "ly:parse-string-expression ne peut foncionner qu'avec un nouvel analyseur.\n" "Utilisez plutôt ly:parser-include-string" -#: lily-parser.cc:107 +#: lily-parser.cc:106 msgid "Parsing..." msgstr "Analyse..." -#: lookup.cc:181 +#: lookup.cc:178 #, c-format msgid "Not drawing a box with negative dimension, %.2f by %.2f." msgstr "La boîte aux dimensions négatives, %.2f par %.2f, ne sera pas dessinée." @@ -2326,12 +2346,12 @@ msgstr "La boîte aux dimensions négatives, %.2f par %.2f, ne sera pas dessiné msgid "argument of \\lyricsto should contain Lyrics context" msgstr "les arguments de \\lyricsto doivent comporter un contexte Lyrics." -#: lyric-combine-music-iterator.cc:349 +#: lyric-combine-music-iterator.cc:344 #, c-format msgid "cannot find %s `%s'" msgstr "le contexte %s « %s » n'existe pas" -#: main.cc:105 +#: main.cc:106 #, c-format msgid "" "This program is free software. It is covered by the GNU General Public\n" @@ -2344,7 +2364,7 @@ msgstr "" "sous certaines conditions.\n" "Invoquez « %s --warranty » pour plus d'informations.\n" -#: main.cc:111 +#: main.cc:112 msgid "" " This program is free software; you can redistribute it and/or\n" "modify it under the terms of the GNU General Public License as \n" @@ -2375,11 +2395,11 @@ msgstr "" "écrire à la Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n" "Boston, MA 02111-1307, USA.\n" -#: main.cc:149 +#: main.cc:150 msgid "SYM[=VAL]" msgstr "SYM[=VAL]" -#: main.cc:150 +#: main.cc:151 msgid "" "set Scheme option SYM to VAL (default: #t).\n" "Use -dhelp for help." @@ -2387,47 +2407,47 @@ msgstr "" "affecte VAL (par défaut #t) à l'option Scheme SYM.\n" "Utiliser -dhelp pour avoir de l'aide." -#: main.cc:154 +#: main.cc:155 msgid "EXPR" msgstr "EXPR" -#: main.cc:154 +#: main.cc:155 msgid "evaluate scheme code" msgstr "évaluation du code Scheme" #. Bug in option parser: --output =foe is taken as an abbreviation #. for --output-format. -#: main.cc:157 +#: main.cc:158 msgid "FORMATs" msgstr "FORMATs" -#: main.cc:157 +#: main.cc:158 msgid "dump FORMAT,... Also as separate options:" msgstr "" "produire FORMAT...\n" "Aussi comme options séparées :" -#: main.cc:158 +#: main.cc:159 msgid "generate PDF (default)" msgstr "générer le PDF (par défaut)" -#: main.cc:159 +#: main.cc:160 msgid "generate PNG" msgstr "générer le PNG" -#: main.cc:160 +#: main.cc:161 msgid "generate PostScript" msgstr "générer le PostScript" -#: main.cc:161 +#: main.cc:162 msgid "generate big PDF files" msgstr "générer de gros fichiers PDF" -#: main.cc:164 +#: main.cc:165 msgid "FIELD" msgstr "CHAMP" -#: main.cc:164 +#: main.cc:165 msgid "" "dump header field FIELD to file\n" "named BASENAME.FIELD" @@ -2435,21 +2455,21 @@ msgstr "" "écrire le champ d'entête CHAMP dans le\n" "fichier nommé RACINE.CHAMP" -#: main.cc:167 +#: main.cc:168 msgid "add DIR to search path" msgstr "ajouter RÉPERTOIRE au chemin de recherche" -#: main.cc:168 +#: main.cc:169 msgid "use FILE as init file" msgstr "" "utiliser FICHIER comme\n" "fichier d'initialisation" -#: main.cc:171 +#: main.cc:172 msgid "USER, GROUP, JAIL, DIR" msgstr "USER, GROUP, CAGE, RÉP" -#: main.cc:171 +#: main.cc:172 msgid "" "chroot to JAIL, become USER:GROUP\n" "and cd into DIR" @@ -2457,7 +2477,7 @@ msgstr "" "chroot dans CAGE, devenir UTILISATEUR:GROUPE\n" "et cd dans RÉPERTOIRE" -#: main.cc:176 +#: main.cc:177 msgid "" "print log messages according to LOGLEVEL. Possible values are:\n" "NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (default) and DEBUG." @@ -2465,30 +2485,30 @@ msgstr "" "affiche les informations selon le niveau de LOGLEVEL :\n" "NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (défaut) ou DEBUG." -#: main.cc:180 +#: main.cc:181 msgid "write output to FILE (suffix will be added)" msgstr "" "produire la sortie dans FICHIER \n" "(adjonction automatique du suffixe)" -#: main.cc:181 +#: main.cc:182 msgid "relocate using directory of lilypond program" msgstr "" "redétermine le chemin d'exécution\n" "des composants de LilyPond" -#: main.cc:182 +#: main.cc:183 msgid "no progress, only error messages (equivalent to loglevel=ERROR)" msgstr "" "pas de progression, seulement les messages d'erreur\n" "(équivalent à loglevel=ERROR)" -#: main.cc:184 +#: main.cc:185 msgid "be verbose (equivalent to loglevel=DEBUG)" msgstr "état verbeux (équivalent à loglevel=DEBUG)" #. Do not update the copyright years here, run `make grand-replace' -#: main.cc:263 +#: main.cc:264 #, c-format msgid "" "Copyright (c) %s by\n" @@ -2498,88 +2518,88 @@ msgstr "" "%s et autres." #. No version number or newline here. It confuses help2man. -#: main.cc:301 +#: main.cc:302 #, c-format msgid "Usage: %s [OPTION]... FILE..." msgstr "Utilisation : %s [OPTIONS]... FICHIER..." -#: main.cc:303 +#: main.cc:304 msgid "Typeset music and/or produce MIDI from FILE." msgstr "Composer la musique ou jouer en format MIDI à partir du FICHIER" -#: main.cc:305 +#: main.cc:306 msgid "LilyPond produces beautiful music notation." msgstr "LilyPond produit une jolie notation musicale" -#: main.cc:307 +#: main.cc:308 #, c-format msgid "For more information, see %s" msgstr "Pour plus d'informations, voir %s" -#: main.cc:309 +#: main.cc:310 msgid "Options:" msgstr "Options :" -#: main.cc:376 +#: main.cc:377 #, c-format msgid "expected %d arguments with jail, found: %u" msgstr "une cage requiert %d arguments, il y en a %u" -#: main.cc:390 +#: main.cc:391 #, c-format msgid "no such user: %s" msgstr "utilisateur inconnu : « %s »" -#: main.cc:392 +#: main.cc:393 #, c-format msgid "cannot get user id from user name: %s: %s" msgstr "" "impossible de repérer l'identifiant utilisateur à partir du nom d'utilisateur :\n" "%s : %s" -#: main.cc:407 +#: main.cc:408 #, c-format msgid "no such group: %s" msgstr "groupe inconnu : %s" -#: main.cc:409 +#: main.cc:410 #, c-format msgid "cannot get group id from group name: %s: %s" msgstr "" "impossible de repérer l'identifiant groupe à partir du nom de groupe :\n" "%s : %s " -#: main.cc:417 +#: main.cc:418 #, c-format msgid "cannot chroot to: %s: %s" msgstr "impossible de chrooter vers : %s : %s" -#: main.cc:424 +#: main.cc:425 #, c-format msgid "cannot change group id to: %d: %s" msgstr "impossible de changer l'identifiant de groupe en %d : %s" -#: main.cc:430 +#: main.cc:431 #, c-format msgid "cannot change user id to: %d: %s" msgstr "impossible de changer l'identifiant utilisateur en %d : %s" -#: main.cc:436 +#: main.cc:437 #, c-format msgid "cannot change working directory to: %s: %s" msgstr "impossible de changer le répertoire de travail en %s : %s" -#: main.cc:825 +#: main.cc:826 #, c-format msgid "exception caught: %s" msgstr "exception capturée : %s" #. FIXME: constant error message. -#: mark-engraver.cc:156 +#: mark-engraver.cc:150 msgid "rehearsalMark must have integer value" msgstr "rehearsalMark doit être un entier" -#: mark-engraver.cc:162 +#: mark-engraver.cc:156 msgid "mark label must be a markup object" msgstr "les étiquettes de marque doivent être des objets de type « markup »." @@ -2631,7 +2651,7 @@ msgstr "" msgid "unexpected case fall-through" msgstr "cas inattendu et non interprétable" -#: midi-control-function-performer.cc:109 staff-performer.cc:152 +#: midi-control-function-performer.cc:107 staff-performer.cc:153 #, c-format msgid "ignoring out-of-range value change for MIDI property `%s'" msgstr "propriété MIDI « %s » : modification de valeur hors limite donc ignorée" @@ -2671,7 +2691,7 @@ msgstr "" "usable-duration-logs ne peut être constitué d'une liste vide.\n" "Retour à des pauses." -#: music.cc:149 +#: music.cc:150 #, c-format msgid "octave check failed; expected \"%s\", found: \"%s\"" msgstr "" @@ -2707,37 +2727,37 @@ msgstr "tête de note « %s » ou « %s » non trouvée" msgid "NoteEvent without pitch" msgstr "NoteEvent sans hauteur" -#: open-type-font.cc:46 +#: open-type-font.cc:45 #, c-format msgid "cannot allocate %lu bytes" msgstr "impossible d'allouer %lu octets" -#: open-type-font.cc:50 +#: open-type-font.cc:49 #, c-format msgid "cannot load font table: %s" msgstr "impossible de charger la table des fontes : %s" -#: open-type-font.cc:55 +#: open-type-font.cc:54 #, c-format msgid "FreeType error: %s" msgstr "Erreur FreeType : %s" -#: open-type-font.cc:112 +#: open-type-font.cc:115 #, c-format msgid "unsupported font format: %s" msgstr "format de police non supporté : %s" -#: open-type-font.cc:114 +#: open-type-font.cc:117 #, c-format msgid "error reading font file %s: %s" msgstr "erreur de lecture du fichier de fontes %s : %s" -#: open-type-font.cc:189 +#: open-type-font.cc:192 #, c-format msgid "FT_Get_Glyph_Name () Freetype error: %s" msgstr "erreur Freetype FT_Get_Glyph_Name () : %s" -#: open-type-font.cc:337 pango-font.cc:257 +#: open-type-font.cc:340 pango-font.cc:258 #, c-format msgid "FT_Get_Glyph_Name () error: %s" msgstr "Erreur FT_Get_Glyph_Name () : %s" @@ -2775,18 +2795,18 @@ msgstr "tentative pour %d systèmes" msgid "best score for this sys-count: %f" msgstr "meilleur résultat pour cette configuration « sys-count » : %f" -#: optimal-page-breaking.cc:216 page-turn-page-breaking.cc:248 +#: optimal-page-breaking.cc:216 page-turn-page-breaking.cc:249 #: paper-score.cc:156 msgid "Drawing systems..." msgstr "Dessin des systèmes..." -#: output-def.cc:230 +#: output-def.cc:229 msgid "margins do not fit with line-width, setting default values" msgstr "" "les marges ne sont pas en cohérence avec la longueur de ligne ;\n" "retour aux valeurs par défaut" -#: output-def.cc:237 +#: output-def.cc:236 msgid "systems run off the page due to improper paper settings, setting default values" msgstr "" "les systèmes débordent de la page en raison de réglages de papier erronés ;\n" @@ -2809,72 +2829,72 @@ msgstr "" msgid "page %d has been compressed" msgstr "la page %d a été comprimée" -#: page-layout-problem.cc:402 +#: page-layout-problem.cc:400 msgid "A page layout problem has been initiated that cannot accommodate footnotes." msgstr "Un défaut de mise en page perturbe la gestion des notes de bas de page." -#: page-layout-problem.cc:731 +#: page-layout-problem.cc:729 msgid "ragged-bottom was specified, but page must be compressed" msgstr "ragged-bottom spécifié, mais la page doit être comprimée" -#: page-layout-problem.cc:734 +#: page-layout-problem.cc:732 #, c-format msgid "compressing over-full page by %.1f staff-spaces" msgstr "compression du débordement de page de %.1f espace de portée" -#: page-layout-problem.cc:1199 +#: page-layout-problem.cc:1197 msgid "staff-affinities should only decrease" msgstr "staff-affinities devraient aller en ordre décroissant" -#: page-turn-page-breaking.cc:168 +#: page-turn-page-breaking.cc:169 #, c-format msgid "page-turn-page-breaking: breaking from %d to %d" msgstr "" "Saut de page et tourne (page-turn-page-breaking) :\n" "coupure entre %d et %d" -#: page-turn-page-breaking.cc:217 +#: page-turn-page-breaking.cc:218 msgid "cannot fit the first page turn onto a single page. Consider setting first-page-number to an even number." msgstr "" "Impossible de cadrer sur une seule page ce qui précède la première tourne.\n" "Envisagez de définir un numéro pair pour first-page-number." -#: page-turn-page-breaking.cc:230 +#: page-turn-page-breaking.cc:231 #, c-format msgid "Calculating page and line breaks (%d possible page breaks)..." msgstr "Calcul des sauts de page et de ligne (%d sauts de pages possibles)..." -#: page-turn-page-breaking.cc:300 +#: page-turn-page-breaking.cc:301 #, c-format msgid "break starting at page %d" msgstr "saut intervenant à la page %d" -#: page-turn-page-breaking.cc:301 +#: page-turn-page-breaking.cc:302 #, c-format msgid "\tdemerits: %f" msgstr " démérites : %f" -#: page-turn-page-breaking.cc:302 +#: page-turn-page-breaking.cc:303 #, c-format msgid "\tsystem count: %d" msgstr " nombre de systèmes : %d" -#: page-turn-page-breaking.cc:303 +#: page-turn-page-breaking.cc:304 #, c-format msgid "\tpage count: %d" msgstr " nombre de pages : %d" -#: page-turn-page-breaking.cc:304 +#: page-turn-page-breaking.cc:305 #, c-format msgid "\tprevious break: %d" msgstr " coupure précédente : %d" -#: pango-font.cc:246 +#: pango-font.cc:247 #, c-format msgid "no glyph for character U+%0X in font `%s'" msgstr "aucun glyphe ne correspond au caractère U+%0X dans la fonte « %s »" -#: pango-font.cc:273 +#: pango-font.cc:274 #, c-format msgid "" "Glyph has no name, but font supports glyph naming.\n" @@ -2883,21 +2903,21 @@ msgstr "" "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:323 +#: pango-font.cc:324 #, c-format msgid "no PostScript font name for font `%s'" msgstr "« %s » n'est pas un fichier de fonte PostScript" -#: pango-font.cc:373 +#: pango-font.cc:374 msgid "FreeType face has no PostScript font name" msgstr "Caractère FreeType sans nom de police PostScript" -#: paper-book.cc:201 +#: paper-book.cc:200 #, c-format msgid "program option -dprint-pages not supported by backend `%s'" msgstr "l'option -dprint-pages n'est pas opérationnelle avec le moteur %s" -#: paper-book.cc:220 +#: paper-book.cc:219 #, c-format msgid "program option -dpreview not supported by backend `%s'" msgstr "l'option -dpreview n'est pas opérationnelle avec le moteur %s" @@ -2922,7 +2942,7 @@ msgstr "%d éléments dénombrés (%d extensions)" msgid "Preprocessing graphical objects..." msgstr "Pré-traitement des éléments graphiques..." -#: parse-scm.cc:128 +#: parse-scm.cc:124 msgid "GUILE signaled an error for the expression beginning here" msgstr "GUILE a signalé une erreur pour l'expression débutant ici" @@ -2937,11 +2957,11 @@ msgstr "" msgid "unterminated percent repeat" msgstr "répétition en pourcent non terminée" -#: performance.cc:55 +#: performance.cc:76 msgid "Track..." msgstr "Piste..." -#: performance.cc:90 +#: performance.cc:126 #, c-format msgid "MIDI output to `%s'..." msgstr "Sortie MIDI vers « %s »..." @@ -2976,25 +2996,25 @@ msgstr "« %s » n'est pas un nom d'objet graphique (grob)" msgid "Failed octave check, got: " msgstr "échec de la vérification d'octave, a obtenu : " -#: relocate.cc:52 +#: relocate.cc:56 #, c-format msgid "Setting %s to %s" msgstr "%s fixé à %s" #. this warning should only be printed in debug mode! -#: relocate.cc:73 +#: relocate.cc:77 #, c-format msgid "no such file: %s for %s" msgstr "fichier inexistant : %s pour %s" #. this warning should only be printed in debug mode! #. this warning should only be printed in debug mode -#: relocate.cc:84 relocate.cc:102 +#: relocate.cc:88 relocate.cc:106 #, c-format msgid "no such directory: %s for %s" msgstr "répertoire inexistant : %s pour %s" -#: relocate.cc:93 +#: relocate.cc:97 #, c-format msgid "%s=%s (prepend)\n" msgstr "%s=%s (ajout)\n" @@ -3024,7 +3044,7 @@ msgstr "Relocalisation absolue : argv0=%s\n" msgid "Relocation : from cwd: argv0=%s\n" msgstr "Relocalisation à partir du répertoire courant : argv0=%s\n" -#: relocate.cc:194 +#: relocate.cc:196 #, c-format msgid "" "Relocation: from PATH=%s\n" @@ -3033,30 +3053,30 @@ msgstr "" "Relocalisation : à partir de PATH=%s\n" "argv0=%s\n" -#: relocate.cc:220 +#: relocate.cc:222 msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR" msgstr "LILYPONDPREFIX est obsolète, utiliser LILYPOND_DATADIR" -#: relocate.cc:345 +#: relocate.cc:347 #, c-format msgid "Relocation file: %s" msgstr "Fichier de relocalisation : %s" -#: relocate.cc:349 source-file.cc:65 +#: relocate.cc:351 source-file.cc:65 #, c-format msgid "cannot open file: `%s'" msgstr "Impossible d'ouvrir le fichier « %s »" -#: relocate.cc:379 +#: relocate.cc:381 #, c-format msgid "Unknown relocation command %s" msgstr "Commande de relocalisation inconnue : %s" -#: rest-collision.cc:153 +#: rest-collision.cc:154 msgid "cannot resolve rest collision: rest direction not set" msgstr "collision de silences insoluble : positionnement du silence indéterminée" -#: rest-collision.cc:164 rest-collision.cc:273 +#: rest-collision.cc:165 rest-collision.cc:274 msgid "too many colliding rests" msgstr "trop de silences se chevauchent" @@ -3065,33 +3085,33 @@ msgstr "trop de silences se chevauchent" msgid "rest `%s' not found" msgstr "silence « %s » inconnu" -#: score-engraver.cc:79 +#: score-engraver.cc:77 #, c-format msgid "cannot find `%s'" msgstr "impossible de trouver « %s »" -#: score-engraver.cc:81 +#: score-engraver.cc:79 msgid "Music font has not been installed properly." msgstr "Les fontes musicales n'ont pas été installées correctement." -#: score-engraver.cc:83 +#: score-engraver.cc:81 #, c-format msgid "Search path `%s'" msgstr "Chemin de recherche : « %s »" -#: score-engraver.cc:85 +#: score-engraver.cc:83 msgid "Aborting" msgstr "Abandon" -#: score.cc:160 +#: score.cc:161 msgid "already have music in score" msgstr "il y a déjà de la musique dans la partition" -#: score.cc:161 +#: score.cc:163 msgid "this is the previous music" msgstr "voici la musique précédente" -#: score.cc:166 +#: score.cc:169 msgid "errors found, ignoring music expression" msgstr "suite à des erreurs répétées, l'expression musicale sera ignorée" @@ -3130,7 +3150,7 @@ msgstr "%s san origine" msgid "cannot end %s" msgstr "impossible de terminer %s" -#: slur.cc:434 +#: slur.cc:436 #, c-format msgid "Ignoring grob for slur: %s. avoid-slur not set?" msgstr "" @@ -3167,18 +3187,18 @@ msgstr "la source devrait spécifier des voix polyphoniques" msgid "weird stem size, check for narrow beams" msgstr "taille de hampe bizarre ; vérifier la présence de liens étroits" -#: system.cc:201 +#: system.cc:202 #, c-format msgid "Element count %d" msgstr "%d éléments dénombrés." -#: system.cc:512 +#: system.cc:513 #, c-format msgid "Grob count %d" msgstr "%d objet graphiques (grob) dénombrés." #. TODO: Also print the arguments of the markup! -#: text-interface.cc:138 +#: text-interface.cc:139 #, c-format msgid "Markup depth exceeds maximal value of %d; Markup: %s" msgstr "" @@ -3201,7 +3221,7 @@ msgstr "extension de texte non terminée" msgid "unterminated tie" msgstr "liaison de prolongation non terminée" -#: tie-engraver.cc:373 +#: tie-engraver.cc:377 msgid "lonely tie" msgstr "liaison de prolongation orpheline" @@ -3215,7 +3235,7 @@ msgstr "liaison de prolongation orpheline" msgid "strange time signature found: %d/%d" msgstr "Chiffrage de mesure inhabituel : %d/%d" -#: translator-ctors.cc:65 +#: translator-ctors.cc:68 #, c-format msgid "unknown translator: `%s'" msgstr "translateur inconnu : « %s »" @@ -3225,17 +3245,17 @@ msgstr "translateur inconnu : « %s »" msgid "fatal error. Couldn't find type: %s" msgstr "Erreur fatale. Type inconnu : %s" -#: translator-group.cc:188 +#: translator-group.cc:187 #, c-format msgid "cannot find: `%s'" msgstr "« %s » inconnu(e)" -#: translator.cc:320 +#: translator.cc:310 #, c-format msgid "Two simultaneous %s events, junking this one" msgstr "Deux événements %s simultanés, rejet de celui-ci" -#: translator.cc:321 +#: translator.cc:311 #, c-format msgid "Previous %s event here" msgstr "Événement %s précédent ici" @@ -3308,208 +3328,208 @@ msgstr "a déjà une extension terminée" msgid "giving up" msgstr "abandon" -#: parser.yy:463 parser.yy:847 parser.yy:928 parser.yy:1150 +#: parser.yy:476 parser.yy:947 parser.yy:1028 parser.yy:1248 msgid "bad expression type" msgstr "type d'expression erroné" -#: parser.yy:759 parser.yy:1361 parser.yy:1406 +#: parser.yy:859 parser.yy:1458 parser.yy:1503 msgid "not a context mod" msgstr "ceci n'est pas un module de contexte" -#: parser.yy:954 +#: parser.yy:1054 msgid "Missing music in \\score" msgstr "Il n'y a pas de musique dans ce \\score" -#: parser.yy:991 +#: parser.yy:1091 msgid "\\paper cannot be used in \\score, use \\layout instead" msgstr "dans la section \\score, utiliser \\layout au lieu de \\paper" -#: parser.yy:1027 +#: parser.yy:1126 msgid "Spurious expression in \\score" msgstr "Expression invalide dans \\score" -#: parser.yy:1057 +#: parser.yy:1156 msgid "need \\paper for paper block" msgstr "\\paper est nécessaire pour définir les paramètres de la page" -#: parser.yy:1234 +#: parser.yy:1331 msgid "music expected" msgstr "On attendait de la musique" -#: parser.yy:1244 parser.yy:1278 +#: parser.yy:1341 parser.yy:1375 msgid "unexpected post-event" msgstr "« post-event » inattendu" -#: parser.yy:1286 +#: parser.yy:1383 msgid "Ignoring non-music expression" msgstr "Expression non musicale ignorée" -#: parser.yy:1587 +#: parser.yy:1691 msgid "not a symbol" msgstr "n'est pas un symbole" -#: parser.yy:2337 parser.yy:2451 parser.yy:2464 parser.yy:2473 +#: parser.yy:2491 parser.yy:2605 parser.yy:2618 parser.yy:2627 msgid "bad grob property path" msgstr "chemin erroné d'accès à la propriété de « grob »" -#: parser.yy:2431 +#: parser.yy:2585 msgid "only \\consists and \\remove take non-string argument." msgstr "seuls \\consists et \\remove peuvent prendre un argument autre qu'une chaîne." -#: parser.yy:2492 +#: parser.yy:2646 msgid "bad context property path" msgstr "chemin erroné d'accès à la propriété de contexte" -#: parser.yy:2593 +#: parser.yy:2733 msgid "simple string expected" msgstr "On attendait une chaîne simple" -#: parser.yy:2611 +#: parser.yy:2750 msgid "symbol expected" msgstr "symbole requis" -#: parser.yy:2747 +#: parser.yy:2886 msgid "not a rhythmic event" msgstr "événement non rythmique" -#: parser.yy:2797 +#: parser.yy:2936 msgid "post-event expected" msgstr "On attendait un « post-event »" -#: parser.yy:2806 parser.yy:2811 +#: parser.yy:2945 parser.yy:2950 msgid "have to be in Lyric mode for lyrics" msgstr "Des paroles requièrent d'utiliser le mode Lyric." -#: parser.yy:2887 +#: parser.yy:3026 msgid "expecting string or post-event as script definition" msgstr "chaîne ou « post-event » requis pour définir un script" -#: parser.yy:2991 +#: parser.yy:3130 msgid "not an articulation" msgstr "n'est pas une articulation" -#: parser.yy:3063 parser.yy:3106 +#: parser.yy:3202 parser.yy:3245 msgid "not a duration" msgstr "ceci n'est pas une durée" -#: parser.yy:3127 +#: parser.yy:3266 msgid "bass number expected" msgstr "On attendait un numéro de basse" -#: parser.yy:3219 +#: parser.yy:3358 msgid "have to be in Note mode for notes" msgstr "Des notes requièrent d'utiliser le mode Note." -#: parser.yy:3258 +#: parser.yy:3397 msgid "have to be in Chord mode for chords" msgstr "Des accords requièrent d'utiliser le mode Chord." -#: parser.yy:3301 +#: parser.yy:3440 msgid "markup outside of text script or \\lyricmode" msgstr "« markup » en dehors d'un script textuel ou de \\lyricmode" -#: parser.yy:3306 +#: parser.yy:3445 msgid "unrecognized string, not in text script or \\lyricmode" msgstr "chaîne non reconnue ; en dehors d'un script textuel ou de \\lyricmode" -#: parser.yy:3458 parser.yy:3467 +#: parser.yy:3597 parser.yy:3606 msgid "not an unsigned integer" msgstr "n'est pas un entier sans signe" -#: parser.yy:3541 +#: parser.yy:3693 msgid "not a markup" msgstr "n'est pas un « markup »" -#: lexer.ll:192 +#: lexer.ll:193 msgid "stray UTF-8 BOM encountered" msgstr "parasitage par UTF-8 BOM" -#: lexer.ll:195 +#: lexer.ll:196 msgid "Skipping UTF-8 BOM" msgstr "Escamotage d'UTF-8 BOM" -#: lexer.ll:247 +#: lexer.ll:248 #, c-format msgid "Renaming input to: `%s'" msgstr "L'entrée a été renommée en « %s »" -#: lexer.ll:264 +#: lexer.ll:265 msgid "quoted string expected after \\version" msgstr "\\version doit être suivi d'une chaîne entre guillemets" -#: lexer.ll:268 +#: lexer.ll:269 msgid "quoted string expected after \\sourcefilename" msgstr "\\sourcefilename doit être suivi d'une chaîne entre guillemets" -#: lexer.ll:272 +#: lexer.ll:273 msgid "integer expected after \\sourcefileline" msgstr "\\sourcefilename doit être suivi d'un nombre entier" -#: lexer.ll:299 +#: lexer.ll:300 msgid "\\maininput not allowed outside init files" msgstr "\\maininput n'est pas permis en dehors des fichiers d'initialisation" -#: lexer.ll:323 +#: lexer.ll:324 #, c-format msgid "wrong or undefined identifier: `%s'" msgstr "identificateur erroné ou non défini : « %s »" -#: lexer.ll:348 +#: lexer.ll:349 msgid "string expected after \\include" msgstr "\\include doit être suivi d'une chaîne entre guillemets" -#: lexer.ll:358 +#: lexer.ll:359 msgid "end quote missing" msgstr "absence de guillemet fermant" -#: lexer.ll:713 +#: lexer.ll:714 msgid "EOF found inside a comment" msgstr "Fin de fichier (EOF) à l'intérieur du commentaire" -#: lexer.ll:718 +#: lexer.ll:719 msgid "EOF found inside string" msgstr "Fin de fichier (EOF) à l'intérieur d'une chaîne" -#: lexer.ll:733 +#: lexer.ll:734 msgid "Unfinished main input" msgstr "Fichier principal non fini" -#: lexer.ll:804 +#: lexer.ll:805 #, c-format msgid "invalid character: `%s'" msgstr "caractère invalide : « %s »" -#: lexer.ll:924 +#: lexer.ll:925 #, c-format msgid "unknown escaped string: `\\%s'" msgstr "chaîne d'échappement inconnue : « \\%s »" -#: lexer.ll:944 +#: lexer.ll:945 #, c-format msgid "undefined character or shorthand: %s" msgstr "caractère ou raccourci non défini : %s" -#: lexer.ll:1235 +#: lexer.ll:1236 msgid "non-UTF-8 input" msgstr "la source n'est pas en UTF-8" -#: lexer.ll:1279 +#: lexer.ll:1280 #, c-format msgid "Invalid version string \"%s\"" msgstr "Numérotation de version \"%s\" invalide" -#: lexer.ll:1284 +#: lexer.ll:1285 #, c-format msgid "file too old: %s (oldest supported: %s)" msgstr "" "%s est plus qu'obsolète ;\n" "le plus ancien pouvant être supporté est %s" -#: lexer.ll:1285 +#: lexer.ll:1286 msgid "consider updating the input with the convert-ly script" msgstr "Envisagez la mise à jour de la source à l'aide du script convert-ly" -#: lexer.ll:1291 +#: lexer.ll:1292 #, c-format msgid "program too old: %s (file requires: %s)" msgstr "Programme plus qu'obsolète : %s (le fichier requiert %s)" @@ -3528,24 +3548,34 @@ msgstr "Appel de « ~a »..." msgid "`~a' failed (~a)\n" msgstr "échec de « ~a » (~a)\n" -#: backend-library.scm:94 +#: backend-library.scm:108 #, scheme-format msgid "Converting to `~a'...\n" msgstr "Conversion à « ~a »...\n" #. Do not try to guess the name of the png file, #. GS produces PNG files like BASE-page%d.png. -#: backend-library.scm:103 +#: backend-library.scm:118 #, scheme-format msgid "Converting to ~a..." msgstr "Conversion à « ~a »..." -#: backend-library.scm:141 +#: backend-library.scm:134 +#, scheme-format +msgid "Copying to `~a'...\n" +msgstr "Copie vers « ~a »...\n" + +#: backend-library.scm:200 +#, scheme-format +msgid "Deleting `~a'...\n" +msgstr "Suppression de « ~a »...\n" + +#: backend-library.scm:219 #, scheme-format msgid "Writing header field `~a' to `~a'..." msgstr "écriture du champ d'entête « ~a » dans « ~a »..." -#: backend-library.scm:190 +#: backend-library.scm:268 #, scheme-format msgid "missing stencil expression `~S'" msgstr "absence d'expression stencil « ~S »" @@ -3609,62 +3639,62 @@ msgstr "Impossible de redéfinir la classe d'événement « ~S »" msgid "Undefined parent event class `~S'" msgstr "Classe d'événement parente « ~a » non définie" -#: define-markup-commands.scm:1062 +#: define-markup-commands.scm:1098 msgid "no systems found in \\score markup, does it have a \\layout block?" msgstr "" "pas de système trouvé dans le bloc \\score du « markup » ;\n" " contient-il un bloc \\layout ?" -#: define-markup-commands.scm:2886 +#: define-markup-commands.scm:2922 #, scheme-format msgid "Cannot find glyph ~a" msgstr "impossible de trouver le glyphe « ~a »" -#: define-markup-commands.scm:3362 +#: define-markup-commands.scm:3398 #, scheme-format msgid "no brace found for point size ~S " msgstr "il n'y a pas d'accolade qui fasse ~S points" -#: define-markup-commands.scm:3363 +#: define-markup-commands.scm:3399 #, scheme-format msgid "defaulting to ~S pt" msgstr "application de la taille par défaut (~S pt)" -#: define-markup-commands.scm:3615 +#: define-markup-commands.scm:3643 #, scheme-format msgid "not a valid duration string: ~a" msgstr "chaîne de durée invalide : ~a" -#: define-markup-commands.scm:3826 +#: define-markup-commands.scm:3854 #, scheme-format msgid "not a valid duration string: ~a - ignoring" msgstr "chaîne de durée invalide : ~a -- ignorée" -#: define-music-types.scm:797 +#: define-music-types.scm:803 #, scheme-format msgid "symbol expected: ~S" msgstr "symbole requis : ~S" -#: define-music-types.scm:800 +#: define-music-types.scm:806 #, scheme-format msgid "cannot find music object: ~S" msgstr "impossible de trouver l'objet de type musique : ~S" -#: define-music-types.scm:820 +#: define-music-types.scm:826 #, scheme-format msgid "bad make-music argument: ~S" msgstr "argument de make-music erronné : ~S" -#: define-note-names.scm:972 +#: define-note-names.scm:1000 msgid "Select note names language." msgstr "Sélection de la langue des noms de note." -#: define-note-names.scm:978 +#: define-note-names.scm:1006 #, scheme-format msgid "Using `~a' note names..." msgstr "Utilisation de « ~a » pour le nom des notes..." -#: define-note-names.scm:981 +#: define-note-names.scm:1009 #, scheme-format msgid "Could not find language `~a'. Ignoring." msgstr "" @@ -3710,12 +3740,12 @@ msgstr "" "impossible de trouver une description de la propriété « ~S »\n" " (~S)" -#: flag-styles.scm:162 +#: flag-styles.scm:155 #, scheme-format msgid "flag stroke `~a' or `~a' not found" msgstr "type de crochet inconnu : « ~a » ou « ~a »" -#: framework-eps.scm:108 +#: framework-eps.scm:112 #, scheme-format msgid "Writing ~a..." msgstr "Écriture de « ~a »..." @@ -3740,7 +3770,7 @@ msgstr "imposible de réaliser l'intégration ~S=~S" msgid "do not know how to embed font ~s ~s ~s" msgstr "impossible d'intégrer les fontes ~s ~s ~s" -#: framework-ps.scm:729 +#: framework-ps.scm:723 msgid "" "\n" "The PostScript backend does not support the\n" @@ -3788,20 +3818,20 @@ msgstr "Erreur de définition de ligature : attendait (~S,~S), ~S trouvé." msgid "Error in beam quanting. Expected ~S 0, found ~S." msgstr "Erreur de définition de ligature : attendait ~S 0, repéré ~S." -#: lily-library.scm:350 +#: lily-library.scm:333 msgid "Music unsuitable for context-mod" msgstr "Inadéquation entre la musique et le context-mod" -#: lily-library.scm:405 +#: lily-library.scm:388 #, scheme-format msgid "Cannot find context-def \\~a" msgstr "Impossible de repérer un context-def (définition de contexte) \\~a" -#: lily-library.scm:421 +#: lily-library.scm:404 msgid "Music unsuitable for output-def" msgstr "Inadéquation entre la musique et le output-def" -#: lily-library.scm:921 +#: lily-library.scm:904 msgid "" "Find the index between @var{start} and @var{end} (an integer)\n" "which produces the closest match to @var{target-val} if\n" @@ -3811,53 +3841,53 @@ msgstr "" "(nombre entier) qui soit le plus proche de @var{valeur-cible}\n" "lorsqu'appliqué à la fonction @var{appelant}." -#: lily-library.scm:1015 +#: lily-library.scm:998 #, scheme-format msgid "unknown unit: ~S" msgstr "unité inconnue : ~S" -#: lily-library.scm:1040 +#: lily-library.scm:1023 #, scheme-format msgid "no \\version statement found, please add~afor future compatibility" msgstr "" "déclaration de \\version absente ;\n" " ajoutez ~a pour une compatibilité future" -#: lily.scm:75 +#: lily.scm:93 msgid "call-after-session used after session start" msgstr "call-after-session utilisé après le début de la session" -#: lily.scm:93 +#: lily.scm:111 msgid "define-session used after session start" msgstr "define-session utilisé après le début de la session" -#: lily.scm:399 +#: lily.scm:417 msgid "Using (ice-9 curried-definitions) module\n" msgstr "Utilisation du module (ice-9 curried-definitions)\n" -#: lily.scm:402 +#: lily.scm:420 msgid "Guile 1.8\n" msgstr "Guile 1.8\n" -#: lily.scm:459 +#: lily.scm:477 #, scheme-format msgid "cannot find: ~A" msgstr "impossible de trouver « ~A »" -#: lily.scm:886 +#: lily.scm:903 msgid "Success: compilation successfully completed" msgstr "Compilation menée à son terme, avec succès." -#: lily.scm:887 +#: lily.scm:904 msgid "Compilation completed with warnings or errors" msgstr "Compilation menée à son terme, avec des avertissements ou erreurs." -#: lily.scm:948 +#: lily.scm:965 #, scheme-format msgid "job ~a terminated with signal: ~a" msgstr "le travail « ~a » s'est terminé avec le signal ~a" -#: lily.scm:951 +#: lily.scm:968 #, scheme-format msgid "" "logfile ~a (exit ~a):\n" @@ -3866,38 +3896,33 @@ msgstr "" "fichier journal « ~a » (sortie ~a) :\n" "~a" -#: lily.scm:973 lily.scm:1062 +#: lily.scm:990 lily.scm:1079 #, scheme-format msgid "failed files: ~S" msgstr "erreur sur les fichiers ~S" -#: lily.scm:1053 +#: lily.scm:1070 #, scheme-format msgid "Redirecting output to ~a..." msgstr "Redirection de la sortie vers « ~a »..." -#: lily.scm:1072 ps-to-png.scm:66 +#: lily.scm:1089 #, scheme-format msgid "Invoking `~a'...\n" msgstr "Appel de « ~a »...\n" -#: ly-syntax-constructors.scm:66 +#: ly-syntax-constructors.scm:27 #, scheme-format msgid "~a function cannot return ~a" msgstr "La fonction ~a ne peut retourner ~a." -#: ly-syntax-constructors.scm:76 +#: ly-syntax-constructors.scm:60 #, scheme-format msgid "wrong type for argument ~a. Expecting ~a, found ~s" msgstr "" "type d'argument erroné pour ~a.\n" " Attendait ~a, ~s trouvé" -#: ly-syntax-constructors.scm:200 -#, scheme-format -msgid "Invalid property operation ~a" -msgstr "Opération de propriété invalide : ~a" - #: markup-macros.scm:331 #, scheme-format msgid "Wrong number of arguments. Expect: ~A, found ~A: ~S" @@ -3941,69 +3966,79 @@ msgstr "hauteur d'inversion absente de la gamme : rien à transposer" msgid "negative replication count; ignoring" msgstr "compteur de réplication négatif : rien à transposer" -#: music-functions.scm:311 +#: music-functions.scm:319 #, scheme-format msgid "invalid tremolo repeat count: ~a" msgstr "nombre de répétition en trémolo invalide : ~a" -#: music-functions.scm:340 +#: music-functions.scm:348 #, scheme-format msgid "unknown repeat type `~S': must be volta, unfold, percent, or tremolo" msgstr "type de répétition « ~S » inconnu : doit être volta, unfold, percent ou tremolo" -#: music-functions.scm:344 +#: music-functions.scm:352 msgid "More alternatives than repeats. Junking excess alternatives" msgstr "" "Plus d'alternatives que de répétitions.\n" " Escamotage des alternatives surnuméraires." -#: music-functions.scm:480 +#: music-functions.scm:487 #, scheme-format msgid "bad grob property path ~a" msgstr "chemin d'accès au « grob » erroné : ~a" -#: music-functions.scm:779 +#: music-functions.scm:511 +#, scheme-format +msgid "bad context property ~a" +msgstr "propriété de contexte ~a erronée" + +#: music-functions.scm:534 +#, scheme-format +msgid "bad music property ~a" +msgstr "propriété musicale ~a erronée" + +#: music-functions.scm:840 msgid "Bad chord repetition" msgstr "Mauvaise répétition d'accord" -#: music-functions.scm:884 +#: music-functions.scm:945 #, scheme-format msgid "music expected: ~S" msgstr "~S requiert de la musique" -#: music-functions.scm:1226 +#: music-functions.scm:1295 #, scheme-format msgid "cannot find quoted music: `~S'" msgstr "impossible de trouver la citation de musique « ~S »" -#: music-functions.scm:1366 +#: music-functions.scm:1432 msgid "Add @var{octave-shift} to the octave of @var{pitch}." msgstr "Ajoute @var{octave-shift} à l'octave de @var{hauteur}." -#: music-functions.scm:1429 +#: music-functions.scm:1495 #, scheme-format msgid "Unknown octaveness type: ~S " msgstr "Octave inconnue : « ~S »" -#: music-functions.scm:1430 +#: music-functions.scm:1496 msgid "Defaulting to 'any-octave." msgstr "Application de la valeur par défaut 'any-octave." -#: music-functions.scm:1822 +#: music-functions.scm:1888 #, scheme-format msgid "unknown accidental style: ~S" msgstr "style d'altération inconnu : ~S" -#: music-functions.scm:2040 +#: music-functions.scm:2098 msgid "Missing duration" msgstr "Durée absente" -#: music-functions.scm:2549 +#: music-functions.scm:2626 #, scheme-format msgid "not a symbol list: ~a" msgstr "n'est pas une liste de symboles : ~a" -#: music-functions.scm:2552 +#: music-functions.scm:2629 #, scheme-format msgid "conflicting tag group ~a" msgstr "groupe de balises (tag) ~a conflictuel" @@ -4032,23 +4067,23 @@ msgstr "Un glyphe doit avoir une valeur unicode" msgid "cannot find SVG font ~S" msgstr "fonte SVG « ~S » introuvable." -#: paper.scm:122 +#: paper.scm:121 msgid "set-global-staff-size: not in toplevel scope" msgstr "set-global-staff-size n'est pas à un niveau de portée globale" -#: paper.scm:322 +#: paper.scm:321 #, scheme-format msgid "This is not a \\layout {} object, ~S" msgstr "~S n'est pas un objet de \\layout {}" -#: paper.scm:330 +#: paper.scm:329 #, scheme-format msgid "Unknown paper size: ~a" msgstr "Format de papier inconnu : ~a" #. TODO: should raise (generic) exception with throw, and catch #. that in parse-scm.cc -#: paper.scm:349 +#: paper.scm:348 msgid "Must use #(set-paper-size .. ) within \\paper { ... }" msgstr "#(set-paper-size ..) doit être dans la section \\paper { ... }" @@ -4062,19 +4097,24 @@ msgstr "type de clef inconnu : « ~a »" msgid "supported clefs: ~a" msgstr "clefs reconnues : ~a" -#: parser-ly-from-scheme.scm:74 +#: parser-ly-from-scheme.scm:73 msgid "error in #{ ... #}" msgstr "erreur dans #{ ... #}" -#: part-combiner.scm:748 +#: part-combiner.scm:894 #, scheme-format msgid "quoted music `~a' is empty" msgstr "il n'y a rien à reproduire dans « ~a »" -#: ps-to-png.scm:70 +#: ps-to-png.scm:72 ps-to-png.scm:75 +#, scheme-format +msgid "Copying `~a' to `~a'..." +msgstr "Copie de « ~a » en « ~a »..." + +#: ps-to-png.scm:77 ps-to-png.scm:79 #, scheme-format -msgid "~a exited with status: ~S" -msgstr "~a s'est terminé avec le statut ~S" +msgid "Deleting `~a'..." +msgstr "Suppression de « ~a »..." #: to-xml.scm:190 #, scheme-format diff --git a/po/it.po b/po/it.po index 5f23b17f12..01ed7f9a84 100644 --- a/po/it.po +++ b/po/it.po @@ -4,22 +4,22 @@ # # Tineke de Munnik , 1998. # Maurizio Umberto Puxeddu , 1999 -# Federico Bruni , 2009-2012, 2012, 2013, 2015. +# Federico Bruni , 2009-2012, 2012, 2013, 2015. # msgid "" msgstr "" -"Project-Id-Version: lilypond 2.19.16\n" +"Project-Id-Version: lilypond 2.19.26\n" "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n" -"POT-Creation-Date: 2015-02-28 14:31+0000\n" -"PO-Revision-Date: 2015-03-02 20:06+0100\n" -"Last-Translator: Federico Bruni \n" +"POT-Creation-Date: 2015-08-27 10:48+0100\n" +"PO-Revision-Date: 2015-09-02 05:46+0200\n" +"Last-Translator: Federico Bruni \n" "Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n!=1);\n" -"X-Generator: Gtranslator 2.91.6\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Gtranslator 2.91.7\n" #: book_base.py:26 #, python-format @@ -170,7 +170,7 @@ msgstr "\\textstyle deprecato, nuova sintassi per \\key" #: convertrules.py:82 convertrules.py:1856 convertrules.py:2032 #: convertrules.py:2175 convertrules.py:2506 convertrules.py:2801 -#: convertrules.py:3151 convertrules.py:3385 convertrules.py:3697 +#: convertrules.py:3151 convertrules.py:3388 convertrules.py:3700 msgid "bump version for release" msgstr "aumentare il numero di versione per il rilascio" @@ -590,10 +590,10 @@ msgstr "Elimina oldaddlyrics" #: convertrules.py:2820 msgid "" "oldaddlyrics is no longer supported. \n" -" Use addlyrics or lyrsicsto instead.\n" +" Use addlyrics or lyricsto instead.\n" msgstr "" "oldaddlyrics non è più supportato.\n" -" Usa addlyrics o lyrsicsto al suo posto.\n" +" Usare addlyrics o lyrsicsto al suo posto.\n" #: convertrules.py:2826 msgid "" @@ -833,15 +833,15 @@ msgstr "consistent-broken-slope viene ora gestito attraverso la callback delle p msgid "input/regression/beam-broken-classic.ly shows how broken beams are now handled.\n" msgstr "input/regression/beam-broken-classic.ly mostra come vengono gestite ora le travature spezzate.\n" -#: convertrules.py:3369 +#: convertrules.py:3372 msgid "beamExceptions controls whole-measure beaming." msgstr "beamExceptions controlla la disposizione delle travature sull'intera misura." -#: convertrules.py:3606 +#: convertrules.py:3609 msgid "Flag.transparent and Flag.color inherit from Stem" msgstr "Flag.transparent e Flag.color ereditano da Stem" -#: convertrules.py:3672 +#: convertrules.py:3675 msgid "Staff-padding now controls the distance to the baseline, not the nearest point." msgstr "La spaziatura del rigo (padding) ora controlla la distanza rispetto alla linea di base, non più rispetto al punto più vicino." @@ -947,12 +947,12 @@ msgstr "Si è inserita un'ottava di alterazione di tonalità per un numero di al msgid "Unable to find instrument for ID=%s\n" msgstr "Impossibile trovare lo strumento con ID=%s\n" -#: abc2ly.py:1386 convert-ly.py:85 lilypond-book.py:122 midi2ly.py:1044 +#: abc2ly.py:1389 convert-ly.py:85 lilypond-book.py:122 midi2ly.py:1044 #, python-format msgid "%s [OPTION]... FILE" msgstr "%s [OPZIONE]... FILE" -#: abc2ly.py:1387 +#: abc2ly.py:1390 #, python-format msgid "" "abc2ly converts ABC music files (see\n" @@ -961,29 +961,29 @@ msgstr "" "abc2ly converte file musicali ABC (si veda\n" "%s) in input LilyPond.\n" -#: abc2ly.py:1395 convert-ly.py:92 etf2ly.py:1208 lilypond-book.py:231 -#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:183 +#: abc2ly.py:1398 convert-ly.py:92 etf2ly.py:1208 lilypond-book.py:231 +#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:184 msgid "show version number and exit" msgstr "mostra il numero di versione ed esce" -#: abc2ly.py:1398 convert-ly.py:96 etf2ly.py:1204 lilypond-book.py:140 -#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:162 +#: abc2ly.py:1401 convert-ly.py:96 etf2ly.py:1204 lilypond-book.py:140 +#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:163 msgid "show this help and exit" msgstr "mostra questo messaggio di aiuto ed esce" -#: abc2ly.py:1401 etf2ly.py:1209 midi2ly.py:1071 +#: abc2ly.py:1404 etf2ly.py:1209 midi2ly.py:1071 msgid "write output to FILE" msgstr "scrive l'output in FILE" -#: abc2ly.py:1404 +#: abc2ly.py:1407 msgid "be strict about success" msgstr "è severo rispetto all'esito" -#: abc2ly.py:1407 +#: abc2ly.py:1410 msgid "preserve ABC's notion of beams" msgstr "preserva la nozione di travatura di ABC" -#: abc2ly.py:1410 +#: abc2ly.py:1413 msgid "suppress progress messages" msgstr "sopprime i messaggi di avanzamento" @@ -991,8 +991,8 @@ msgstr "sopprime i messaggi di avanzamento" #. "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:1413 convert-ly.py:157 etf2ly.py:1218 lilypond-book.py:258 -#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:317 +#: abc2ly.py:1416 convert-ly.py:157 etf2ly.py:1218 lilypond-book.py:258 +#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:318 #, c-format, python-format msgid "Report bugs via %s" msgstr "Segnalare i bug in inglese attraverso %s" @@ -1043,7 +1043,7 @@ msgid "Print log messages according to LOGLEVEL (NONE, ERROR, WARNING, PROGRESS msgstr "Mostra i messaggi di log in base a LOGLEVEL (NONE, ERROR, WARNING, PROGRESS (default), DEBUG)" #: convert-ly.py:111 lilypond-book.py:163 lilypond-book.py:181 -#: musicxml2ly.py:2629 main.cc:176 +#: musicxml2ly.py:2629 main.cc:177 msgid "LOGLEVEL" msgstr "LOGLEVEL" @@ -1075,7 +1075,7 @@ msgid "make a numbered backup [default: filename.ext~]" msgstr "crea un file di backup numerato (predefinito: nomefile.est~)" #: convert-ly.py:152 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096 -#: main.cc:185 +#: main.cc:186 msgid "show warranty and copyright" msgstr "mostra la garanzia e il copyright" @@ -1096,17 +1096,17 @@ msgstr "Fermarsi all'ultima regola riuscita" msgid "Processing `%s'... " msgstr "Elaborazione di «%s»... " -#: convert-ly.py:368 +#: convert-ly.py:366 #, python-format msgid "%s: Unable to open file" msgstr "%s: Impossibile aprire il file" -#: convert-ly.py:374 +#: convert-ly.py:372 #, python-format msgid "%s: Unable to determine version. Skipping" msgstr "%s: Impossibile determinare la versione. Tralasciato" -#: convert-ly.py:380 +#: convert-ly.py:378 #, python-format msgid "" "%s: Invalid version string `%s' \n" @@ -1115,7 +1115,7 @@ 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»" -#: convert-ly.py:386 +#: convert-ly.py:384 #, python-format msgid "There was %d error." msgid_plural "There were %d errors." @@ -1136,7 +1136,7 @@ msgstr "" "etf2ly converte un sottoinsieme di ETF in un file LilyPond pronto da usare.\n" #: etf2ly.py:1210 midi2ly.py:1067 midi2ly.py:1072 musicxml2ly.py:2659 -#: main.cc:168 main.cc:180 +#: main.cc:169 main.cc:181 msgid "FILE" msgstr "FILE" @@ -1174,7 +1174,7 @@ msgid "add DIR to include path" msgstr "aggiunge DIR al percorso di inclusione" #: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:169 -#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:167 +#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:168 msgid "DIR" msgstr "DIR" @@ -1184,10 +1184,10 @@ msgstr "formatta l'output di Texinfo in modo che Info cerchi le immagini in DIR" #: lilypond-book.py:155 msgid "PAD" -msgstr "PAD" +msgstr "SPAZIATURA" #: lilypond-book.py:157 -msgid "pad left side of music to align music inspite of uneven bar numbers (in mm)" +msgid "pad left side of music to align music in spite of uneven bar numbers (in mm)" msgstr "aumenta il lato sinistro della musica (in mm) per allinearla nonostante il numero irregolare di battute" #: lilypond-book.py:162 @@ -1726,7 +1726,7 @@ msgstr "avvertimento soppresso: %s" msgid "accidental typesetting list must begin with context-name: %s" msgstr "la lista tipografica delle alterazioni deve iniziare con context-name: %s" -#: accidental-engraver.cc:210 +#: accidental-engraver.cc:207 #, c-format msgid "procedure or context-name expected for accidental rule, found %s" msgstr "si aspettava una procedura o context-name per la regola di alterazione accidentale, si è trovato %s" @@ -1740,7 +1740,7 @@ msgstr "Non si è trovato il nome del glifo per l'alterazione %s" msgid "natural alteration glyph not found" msgstr "alterazione naturale del glifo non trovata" -#: all-font-metrics.cc:149 +#: all-font-metrics.cc:159 #, c-format msgid "cannot find font: `%s'" msgstr "impossibile trovare il tipo di carattere: «%s»" @@ -1753,11 +1753,6 @@ msgstr "l'argomento di \\applycontext non è una procedura" msgid "no heads for arpeggio found?" msgstr "non sono state trovate teste per l'arpeggio?" -#: auto-change-iterator.cc:74 change-iterator.cc:72 -#, c-format -msgid "cannot change, already in translator: %s" -msgstr "impossibile cambiare, già nel traduttore: %s" - #: axis-group-engraver.cc:149 msgid "Axis_group_engraver: vertical group already has a parent" msgstr "Axis_group_engraver: il gruppo verticale ha già un genitore" @@ -1770,12 +1765,12 @@ msgstr "ci sono due Axis_group_engravers?" msgid "removing this vertical group" msgstr "eliminazione di questo gruppo verticale" -#: axis-group-interface.cc:714 +#: axis-group-interface.cc:716 #, c-format msgid "\"%s\" is not a valid outside-staff-placement-directive" msgstr "non si può posizionare un oggetto fuori dal rigo con \"%s\" (outside-staff-placement-directive)" -#: axis-group-interface.cc:786 +#: axis-group-interface.cc:788 msgid "an outside-staff object should have a direction, defaulting to up" msgstr "un oggetto esterno al rigo dovrebbe avere una direzione, si imposta in su come da impostazione predefinita" @@ -1805,11 +1800,11 @@ msgid "beam was started here" msgstr "la travatura è iniziata qui" #. We are completely screwed. -#: beam-quanting.cc:839 +#: beam-quanting.cc:850 msgid "no viable initial configuration found: may not find good beam slope" msgstr "nessuna configurazione iniziale fattibile trovata: si potrebbe non trovare una buona inclinazione delle travature" -#: beam.cc:181 +#: beam.cc:183 msgid "removing beam with no stems" msgstr "rimozione delle travature senza gambi" @@ -1819,22 +1814,24 @@ msgid "cannot change `%s' to `%s'" msgstr "impossibile cambiare «%s» in «%s»" #. FIXME: constant error message. -#: change-iterator.cc:93 +#: change-iterator.cc:67 msgid "cannot find context to switch to" msgstr "impossibile trovare il contesto su cui spostarsi" +#. No enclosing context was found because the iterator's immediate +#. context is the kind that was sought. #. 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:102 +#: change-iterator.cc:78 #, c-format msgid "not changing to same context type: %s" msgstr "non passare allo stesso tipo di contesto: %s" -#. FIXME: uncomprehensable message -#: change-iterator.cc:106 +#. FIXME: incomprehensible message +#: change-iterator.cc:82 msgid "none of these in my family" msgstr "nessuno di questi nella mia famiglia" @@ -1873,22 +1870,22 @@ msgstr "impossibile trovare interruzioni di linea che soddisfino i vincoli" msgid "need symbol arguments for \\override and \\revert" msgstr "sono necessari argomenti simbolici per \\override e \\revert" -#: context.cc:143 +#: context.cc:144 #, c-format msgid "cannot find or create new `%s'" msgstr "impossibile trovare o creare un nuovo «%s»" -#: context.cc:222 +#: context.cc:223 #, c-format msgid "cannot find or create `%s' called `%s'" msgstr "impossibile trovare o creare «%s» chiamato «%s»" -#: context.cc:419 +#: context.cc:416 #, c-format msgid "cannot find or create: `%s'" msgstr "impossibile trovare o creare: «%s»" -#: context.cc:433 +#: context.cc:430 #, c-format msgid "cannot find or create new Bottom = \"%s\"" msgstr "impossibile trovare o creare un nuovo Bottom = «%s»" @@ -1898,20 +1895,20 @@ msgstr "impossibile trovare o creare un nuovo Bottom = «%s»" msgid "custos `%s' not found" msgstr "custos «%s» non trovato" -#: dispatcher.cc:83 +#: dispatcher.cc:82 msgid "Event class should be a list" msgstr "La classe evento dovrebbe essere una lista" -#: dispatcher.cc:166 +#: dispatcher.cc:165 #, c-format msgid "Junking event: %s" msgstr "Eliminazione dell'evento: %s" -#: dispatcher.cc:271 +#: dispatcher.cc:279 msgid "Attempting to remove nonexisting listener." msgstr "Tentativo di togliere un ascoltatore non esistente." -#: dispatcher.cc:297 +#: dispatcher.cc:305 msgid "Already listening to dispatcher, ignoring request" msgstr "Già in ascolto del controllore, si ignora la richiesta" @@ -1920,7 +1917,7 @@ msgstr "Già in ascolto del controllore, si ignora la richiesta" msgid "dot `%s' not found" msgstr "punto «%s» non trovato" -#: dynamic-engraver.cc:168 +#: dynamic-engraver.cc:169 #, c-format msgid "" "unknown crescendo style: %s\n" @@ -1929,7 +1926,7 @@ msgstr "" "stile di crescendo sconosciuto: %s\n" "si usa la forcella predefinita." -#: dynamic-engraver.cc:233 slur-proto-engraver.cc:119 +#: dynamic-engraver.cc:234 slur-proto-engraver.cc:119 #, c-format msgid "unterminated %s" msgstr "%s non terminato" @@ -1957,22 +1954,22 @@ msgstr "episema non terminato" msgid "unterminated extender" msgstr "estensore non terminato" -#: flag.cc:134 +#: flag.cc:133 #, c-format msgid "flag `%s' not found" msgstr "non si trova la coda uncinata «%s»" -#: flag.cc:154 +#: flag.cc:153 #, c-format msgid "flag stroke `%s' not found" msgstr "non si trova il tratto «%s» della coda uncinata" -#: font-config-scheme.cc:151 font-config.cc:53 +#: font-config-scheme.cc:151 font-config.cc:82 #, c-format msgid "failed adding font directory: %s" msgstr "errore nell'aggiungere la directory dei tipi di carattere: %s" -#: font-config-scheme.cc:153 font-config.cc:55 +#: font-config-scheme.cc:153 font-config.cc:84 #, c-format msgid "Adding font directory: %s" msgstr "Si aggiunge la directory dei tipi di carattere: %s" @@ -1991,7 +1988,17 @@ msgstr "Si aggiunge il file dei tipi di carattere: %s" msgid "Initializing FontConfig..." msgstr "Inizializzazione di FontConfig..." -#: font-config.cc:58 +#: font-config.cc:70 +#, c-format +msgid "failed to add fontconfig configuration file `%s'" +msgstr "errore nell'aggiungere il file di configurazione di fontconfig: «%s»" + +#: font-config.cc:73 +#, c-format +msgid "Adding fontconfig configuration file: %s" +msgstr "Si aggiunge il file di configurazione di fontconfig: %s" + +#: font-config.cc:86 msgid "Building font database..." msgstr "Creazione del database dei tipi di carattere..." @@ -2055,12 +2062,12 @@ msgstr "Interfaccia «%s» sconosciuta" msgid "Grob `%s' has no interface for property `%s'" msgstr "Il grob «%s» non ha un'interfaccia per la proprietà «%s»" -#: grob-property.cc:35 +#: grob-property.cc:33 #, c-format msgid "%d: %s" msgstr "%d: %s" -#: grob.cc:481 +#: grob.cc:492 #, c-format msgid "ignored infinite %s-offset" msgstr "%s-offset infinito ignorato" @@ -2089,7 +2096,7 @@ msgstr "eliminazione di un trattino non terminato" msgid "unterminated hyphen; removing" msgstr "trattino non terminato; eliminazione" -#: includable-lexer.cc:71 lily-guile.cc:91 lily-parser-scheme.cc:108 +#: includable-lexer.cc:71 lily-guile.cc:92 lily-parser-scheme.cc:108 #, c-format msgid "cannot find file: `%s'" msgstr "impossibile trovare il file: «%s»" @@ -2099,11 +2106,11 @@ msgstr "impossibile trovare il file: «%s»" msgid "(search path: `%s')" msgstr "(percorso di ricerca: «%s»)" -#: input.cc:138 source-file.cc:177 source-file.cc:192 +#: input.cc:138 source-file.cc:180 source-file.cc:195 msgid "position unknown" msgstr "posizione sconosciuta" -#: key-engraver.cc:198 +#: key-engraver.cc:197 msgid "Incomplete keyAlterationOrder for key signature" msgstr "keyAlterationOrder incompleto per l'armatura di chiave" @@ -2144,21 +2151,21 @@ msgstr "pausa ignorata: la legatura non può contenere una pausa" msgid "ligature was started here" msgstr "la legatura è iniziata qui" -#: lily-guile.cc:93 +#: lily-guile.cc:94 #, c-format msgid "(load path: `%s')" msgstr "(percorso di caricamento: «%s»)" -#: lily-guile.cc:412 +#: lily-guile.cc:413 #, c-format msgid "cannot find property type-check for `%s' (%s)." msgstr "impossibile trovare la proprietà type-check per «%s» (%s)." -#: lily-guile.cc:415 +#: lily-guile.cc:416 msgid "perhaps a typing error?" msgstr "forse un errore di digitazione?" -#: lily-guile.cc:422 +#: lily-guile.cc:423 msgid "skipping assignment" msgstr "assegnazione saltata" @@ -2167,20 +2174,33 @@ msgstr "assegnazione saltata" msgid "type check for `%s' failed; value `%s' must be of type `%s'" msgstr "controllo del tipo per «%s» fallito; il valore «%s» deve essere del tipo «%s»" -#: lily-lexer.cc:249 +#. Uh oh. unsmob delivered 0, yet +#. unsmob delivers true. This means that unsmob is a +#. matching check from a base class of T, but var is of an +#. incompatible derived type. +#: lily-guile.cc:462 +msgid "Wrong kind of " +msgstr "Tipo errato di" + +#: lily-lexer.cc:251 msgid "include files are not allowed in safe mode" msgstr "l'inclusione di file non è permessa in modalità sicura" -#: lily-lexer.cc:276 +#: lily-lexer.cc:278 #, c-format msgid "identifier name is a keyword: `%s'" msgstr "Il nome dell'identificatore è una parola chiave: «%s»" -#: lily-lexer.cc:297 lily-lexer.cc:310 +#: lily-lexer.cc:299 lily-lexer.cc:312 #, c-format msgid "%s:EOF" msgstr "%s:EOF" +#: lily-modules.cc:81 +#, c-format +msgid "Uninitialized variable `%s' in module (%s)" +msgstr "Variabile «%s» non inizializzata nel modulo (%s)" + #: lily-parser-scheme.cc:80 #, c-format msgid "Changing working directory to: `%s'" @@ -2201,19 +2221,19 @@ msgstr "impossibile trovare il file di init: «%s»" msgid "Processing `%s'" msgstr "Elaborazione di «%s»" -#: lily-parser-scheme.cc:209 +#: lily-parser-scheme.cc:210 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-scheme.cc:240 +#: lily-parser-scheme.cc:241 msgid "ly:parse-string-expression is only valid with a new parser. Use ly:parser-include-string instead." msgstr "ly:parse-string-expression è valido solo con un nuovo parser. Usare ly:parser-include-string al suo posto." -#: lily-parser.cc:107 +#: lily-parser.cc:106 msgid "Parsing..." msgstr "Analisi..." -#: lookup.cc:181 +#: lookup.cc:178 #, c-format msgid "Not drawing a box with negative dimension, %.2f by %.2f." msgstr "Il riquadro con dimensioni negative, %.2f per %.2f, non verrà disegnato." @@ -2222,12 +2242,12 @@ msgstr "Il riquadro con dimensioni negative, %.2f per %.2f, non verrà disegnato msgid "argument of \\lyricsto should contain Lyrics context" msgstr "l'argomento di \\lyricsto deve contenere il contesto Lyrics" -#: lyric-combine-music-iterator.cc:349 +#: lyric-combine-music-iterator.cc:344 #, c-format msgid "cannot find %s `%s'" msgstr "impossibile trovare %s «%s»" -#: main.cc:105 +#: main.cc:106 #, c-format msgid "" "This program is free software. It is covered by the GNU General Public\n" @@ -2239,7 +2259,7 @@ msgstr "" "License che permette di modificarlo o distribuirne copie rispettando certe\n" "condizioni. Per maggiori informazioni, invocare «%s --warranty».\n" -#: main.cc:111 +#: main.cc:112 msgid "" " This program is free software; you can redistribute it and/or\n" "modify it under the terms of the GNU General Public License as \n" @@ -2271,11 +2291,11 @@ msgstr "" "Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n" "Boston, MA 02111-1307, USA.\n" -#: main.cc:149 +#: main.cc:150 msgid "SYM[=VAL]" msgstr "SIMBOLO[=VALORE]" -#: main.cc:150 +#: main.cc:151 msgid "" "set Scheme option SYM to VAL (default: #t).\n" "Use -dhelp for help." @@ -2283,45 +2303,45 @@ msgstr "" "imposta l'opzione di Scheme SIMBOLO a VALORE (predefinito: #t).\n" "Usare -dhelp per ottenere aiuto." -#: main.cc:154 +#: main.cc:155 msgid "EXPR" msgstr "ESPRESSIONE" -#: main.cc:154 +#: main.cc:155 msgid "evaluate scheme code" msgstr "valuta il codice scheme" #. Bug in option parser: --output =foe is taken as an abbreviation #. for --output-format. -#: main.cc:157 +#: main.cc:158 msgid "FORMATs" msgstr "FORMATO" -#: main.cc:157 +#: main.cc:158 msgid "dump FORMAT,... Also as separate options:" msgstr "scarica FORMATO,... Anche come opzioni separate:" -#: main.cc:158 +#: main.cc:159 msgid "generate PDF (default)" msgstr "genera PDF (predefinito)" -#: main.cc:159 +#: main.cc:160 msgid "generate PNG" msgstr "genera PNG" -#: main.cc:160 +#: main.cc:161 msgid "generate PostScript" msgstr "genera PostScript" -#: main.cc:161 +#: main.cc:162 msgid "generate big PDF files" msgstr "genera grandi file PDF" -#: main.cc:164 +#: main.cc:165 msgid "FIELD" msgstr "CAMPO" -#: main.cc:164 +#: main.cc:165 msgid "" "dump header field FIELD to file\n" "named BASENAME.FIELD" @@ -2329,19 +2349,19 @@ msgstr "" "scrive il campo di intestazione CAMPO sul\n" "file chiamato BASENAME.CAMPO" -#: main.cc:167 +#: main.cc:168 msgid "add DIR to search path" msgstr "aggiunge DIRECTORY ai percorsi di ricerca" -#: main.cc:168 +#: main.cc:169 msgid "use FILE as init file" msgstr "usa FILE come file di inizializzazione" -#: main.cc:171 +#: main.cc:172 msgid "USER, GROUP, JAIL, DIR" msgstr "UTENTE, GRUPPO, GABBIA, DIRECTORY" -#: main.cc:171 +#: main.cc:172 msgid "" "chroot to JAIL, become USER:GROUP\n" "and cd into DIR" @@ -2349,7 +2369,7 @@ msgstr "" "chroot a GABBIA, diventa UTENTE:GRUPPO\n" "ed entra in DIRECTORY" -#: main.cc:176 +#: main.cc:177 msgid "" "print log messages according to LOGLEVEL. Possible values are:\n" "NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (default) and DEBUG." @@ -2357,24 +2377,24 @@ msgstr "" "mostra i messaggi di log in base a LOGLEVEL. I valori possibili sono:\n" "NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (default) e DEBUG." -#: main.cc:180 +#: main.cc:181 msgid "write output to FILE (suffix will be added)" msgstr "scrive l'output su FILE (verrà aggiunto un suffisso)" -#: main.cc:181 +#: main.cc:182 msgid "relocate using directory of lilypond program" msgstr "trasferisce alla directory del programma lilypond" -#: main.cc:182 +#: main.cc:183 msgid "no progress, only error messages (equivalent to loglevel=ERROR)" msgstr "nessun progresso, solo messaggi di errore (equivalente al loglevel=ERROR)" -#: main.cc:184 +#: main.cc:185 msgid "be verbose (equivalent to loglevel=DEBUG)" msgstr "output dettagliato (equivalente al loglevel=DEBUG)" #. Do not update the copyright years here, run `make grand-replace' -#: main.cc:263 +#: main.cc:264 #, c-format msgid "" "Copyright (c) %s by\n" @@ -2384,84 +2404,84 @@ msgstr "" "%s e altri." #. No version number or newline here. It confuses help2man. -#: main.cc:301 +#: main.cc:302 #, c-format msgid "Usage: %s [OPTION]... FILE..." msgstr "Uso: %s [OPZIONE]... [FILE]..." -#: main.cc:303 +#: main.cc:304 msgid "Typeset music and/or produce MIDI from FILE." msgstr "Stampa partitura oppure crea MIDI da FILE." -#: main.cc:305 +#: main.cc:306 msgid "LilyPond produces beautiful music notation." msgstr "LilyPond produce bella notazione musicale." -#: main.cc:307 +#: main.cc:308 #, c-format msgid "For more information, see %s" msgstr "Per maggiori informazioni si veda %s" -#: main.cc:309 +#: main.cc:310 msgid "Options:" msgstr "Opzioni:" -#: main.cc:376 +#: main.cc:377 #, c-format msgid "expected %d arguments with jail, found: %u" msgstr "previsti gli argomenti %d per la gabbia, trovati: %u" -#: main.cc:390 +#: main.cc:391 #, c-format msgid "no such user: %s" msgstr "non esiste questo utente: %s" -#: main.cc:392 +#: main.cc:393 #, c-format msgid "cannot get user id from user name: %s: %s" msgstr "impossibile acquisire l'id dell'utente dal nome utente: %s: %s" -#: main.cc:407 +#: main.cc:408 #, c-format msgid "no such group: %s" msgstr "non esiste questo gruppo: %s" -#: main.cc:409 +#: main.cc:410 #, c-format msgid "cannot get group id from group name: %s: %s" msgstr "impossibile acquisire l'id del gruppo dal nome del gruppo: %s:%s" -#: main.cc:417 +#: main.cc:418 #, c-format msgid "cannot chroot to: %s: %s" msgstr "non si può fare il chroot a: %s: %s" -#: main.cc:424 +#: main.cc:425 #, c-format msgid "cannot change group id to: %d: %s" msgstr "non si può cambiare l'id del gruppo in: %d: %s" -#: main.cc:430 +#: main.cc:431 #, c-format msgid "cannot change user id to: %d: %s" msgstr "non si può cambiare l'id dell'utente in: %d: %s" -#: main.cc:436 +#: main.cc:437 #, c-format msgid "cannot change working directory to: %s: %s" msgstr "non si può passare alla directory di lavoro: %s: %s" -#: main.cc:825 +#: main.cc:826 #, c-format msgid "exception caught: %s" msgstr "ricevuta un'eccezione: %s" #. FIXME: constant error message. -#: mark-engraver.cc:156 +#: mark-engraver.cc:150 msgid "rehearsalMark must have integer value" msgstr "rehearsalMark deve avere un valore intero" -#: mark-engraver.cc:162 +#: mark-engraver.cc:156 msgid "mark label must be a markup object" msgstr "l'etichetta del segno deve essere un oggetto di markup" @@ -2513,7 +2533,7 @@ msgstr "" msgid "unexpected case fall-through" msgstr "caso inatteso e non interpretabile" -#: midi-control-function-performer.cc:109 staff-performer.cc:152 +#: midi-control-function-performer.cc:107 staff-performer.cc:153 #, c-format msgid "ignoring out-of-range value change for MIDI property `%s'" msgstr "si ignora il cambio in un valore fuori dai limiti per la proprietà MIDI «%s»" @@ -2549,7 +2569,7 @@ msgstr "Calcolo delle interruzioni di pagina..." msgid "usable-duration-logs must be a non-empty list. Falling back to whole rests." msgstr "usable-duration-logs deve essere una lista non vuota. Si ricorre alle pause di semibreve." -#: music.cc:149 +#: music.cc:150 #, c-format msgid "octave check failed; expected \"%s\", found: \"%s\"" msgstr "controllo dell'ottava fallito: previsto \"%s\", trovato: \"%s\"" @@ -2583,37 +2603,37 @@ msgstr "non si è trovata alcuna delle teste delle note «%s» o «%s»" msgid "NoteEvent without pitch" msgstr "NoteEvent senza altezza" -#: open-type-font.cc:46 +#: open-type-font.cc:45 #, c-format msgid "cannot allocate %lu bytes" msgstr "impossibile allocare %lu byte" -#: open-type-font.cc:50 +#: open-type-font.cc:49 #, c-format msgid "cannot load font table: %s" msgstr "impossibile caricare la tabella dei tipi di carattere: %s" -#: open-type-font.cc:55 +#: open-type-font.cc:54 #, c-format msgid "FreeType error: %s" msgstr "Errore FreeType: %s" -#: open-type-font.cc:112 +#: open-type-font.cc:115 #, c-format msgid "unsupported font format: %s" msgstr "formato di tipo di carattere non supportato: %s" -#: open-type-font.cc:114 +#: open-type-font.cc:117 #, c-format msgid "error reading font file %s: %s" msgstr "errore nella lettura del file del tipo di carattere %s: %s" -#: open-type-font.cc:189 +#: open-type-font.cc:192 #, c-format msgid "FT_Get_Glyph_Name () Freetype error: %s" msgstr "errore di Freetype in FT_Get_Glyph_Name (): %s" -#: open-type-font.cc:337 pango-font.cc:257 +#: open-type-font.cc:340 pango-font.cc:258 #, c-format msgid "FT_Get_Glyph_Name () error: %s" msgstr "errore in FT_Get_Glyph_Name (): %s" @@ -2651,16 +2671,16 @@ msgstr "tentando %d sistemi" msgid "best score for this sys-count: %f" msgstr "miglior punteggio per questo numero di sistemi: %f" -#: optimal-page-breaking.cc:216 page-turn-page-breaking.cc:248 +#: optimal-page-breaking.cc:216 page-turn-page-breaking.cc:249 #: paper-score.cc:156 msgid "Drawing systems..." msgstr "Disegno dei sistemi..." -#: output-def.cc:230 +#: output-def.cc:229 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:237 +#: output-def.cc:236 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" @@ -2677,68 +2697,68 @@ msgstr "min-systems-per-page è maggiore di max-systems-per-page, si ignorano en msgid "page %d has been compressed" msgstr "la pagina %d è stata compressa" -#: page-layout-problem.cc:402 +#: page-layout-problem.cc:400 msgid "A page layout problem has been initiated that cannot accommodate footnotes." msgstr "Si è creato un problema di formattazione della pagina che impedisce di ospitare le note a pié di pagina." -#: page-layout-problem.cc:731 +#: page-layout-problem.cc:729 msgid "ragged-bottom was specified, but page must be compressed" msgstr "è stato specificato ragged-bottom, ma la pagina deve essere compressa" -#: page-layout-problem.cc:734 +#: page-layout-problem.cc:732 #, c-format msgid "compressing over-full page by %.1f staff-spaces" msgstr "compressione di una pagina strapiena di %.1f spazi rigo" -#: page-layout-problem.cc:1199 +#: page-layout-problem.cc:1197 msgid "staff-affinities should only decrease" msgstr "staff-affinities deve solo diminuire" -#: page-turn-page-breaking.cc:168 +#: page-turn-page-breaking.cc:169 #, c-format msgid "page-turn-page-breaking: breaking from %d to %d" msgstr "page-turn-page-breaking: interruzione da %d a %d" -#: page-turn-page-breaking.cc:217 +#: page-turn-page-breaking.cc:218 msgid "cannot fit the first page turn onto a single page. Consider setting first-page-number to an even number." 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:230 +#: page-turn-page-breaking.cc:231 #, c-format msgid "Calculating page and line breaks (%d possible page breaks)..." msgstr "Calcolo delle interruzioni di pagina e di linea (%d possibili interruzioni di pagina)..." -#: page-turn-page-breaking.cc:300 +#: page-turn-page-breaking.cc:301 #, c-format msgid "break starting at page %d" msgstr "l'interruzione comincia alla pagina %d" -#: page-turn-page-breaking.cc:301 +#: page-turn-page-breaking.cc:302 #, c-format msgid "\tdemerits: %f" msgstr "\tdemeriti: %f" -#: page-turn-page-breaking.cc:302 +#: page-turn-page-breaking.cc:303 #, c-format msgid "\tsystem count: %d" msgstr "\tnumero dei sistemi: %d" -#: page-turn-page-breaking.cc:303 +#: page-turn-page-breaking.cc:304 #, c-format msgid "\tpage count: %d" msgstr "\tnumero delle pagine: %d" -#: page-turn-page-breaking.cc:304 +#: page-turn-page-breaking.cc:305 #, c-format msgid "\tprevious break: %d" msgstr "\tinterruzione precedente: %d" -#: pango-font.cc:246 +#: pango-font.cc:247 #, c-format msgid "no glyph for character U+%0X in font `%s'" msgstr "manca il glifo per il carattere U+%0X del tipo \"%s\"" -#: pango-font.cc:273 +#: pango-font.cc:274 #, c-format msgid "" "Glyph has no name, but font supports glyph naming.\n" @@ -2747,21 +2767,21 @@ 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:323 +#: pango-font.cc:324 #, c-format msgid "no PostScript font name for font `%s'" msgstr "nessun nome di tipo di carattere PostScript per «%s»" -#: pango-font.cc:373 +#: pango-font.cc:374 msgid "FreeType face has no PostScript font name" msgstr "Il tipo FreeType non ha un nome per il tipo di carattere PostScript" -#: paper-book.cc:201 +#: paper-book.cc:200 #, 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:220 +#: paper-book.cc:219 #, c-format msgid "program option -dpreview not supported by backend `%s'" msgstr "l'opzione -dpreview del programma non è supportata dal backend «%s»" @@ -2784,7 +2804,7 @@ msgstr "Conto degli elementi %d (spanner %d)." msgid "Preprocessing graphical objects..." msgstr "Pre-elaborazione degli oggetti grafici..." -#: parse-scm.cc:128 +#: parse-scm.cc:124 msgid "GUILE signaled an error for the expression beginning here" msgstr "GUILE ha segnalato un errore per l'espressione che inizia qui" @@ -2797,11 +2817,11 @@ msgstr "Fallita la conversione della stringa \"%s\" in UTF-16be: %s" msgid "unterminated percent repeat" msgstr "ripetizione percentuale non terminata" -#: performance.cc:55 +#: performance.cc:76 msgid "Track..." msgstr "Traccia..." -#: performance.cc:90 +#: performance.cc:126 #, c-format msgid "MIDI output to `%s'..." msgstr "L'output MIDI è inviato a «%s»..." @@ -2836,25 +2856,25 @@ msgstr "non è il nome di un grob, «%s»" msgid "Failed octave check, got: " msgstr "Il controllo dell'ottava è fallito, si è ottenuto:" -#: relocate.cc:52 +#: relocate.cc:56 #, c-format msgid "Setting %s to %s" msgstr "Si imposta %s su %s" #. this warning should only be printed in debug mode! -#: relocate.cc:73 +#: relocate.cc:77 #, c-format msgid "no such file: %s for %s" msgstr "file inesistente: %s per %s" #. this warning should only be printed in debug mode! #. this warning should only be printed in debug mode -#: relocate.cc:84 relocate.cc:102 +#: relocate.cc:88 relocate.cc:106 #, c-format msgid "no such directory: %s for %s" msgstr "directory inesistente: %s per %s" -#: relocate.cc:93 +#: relocate.cc:97 #, c-format msgid "%s=%s (prepend)\n" msgstr "%s=%s (prefisso)\n" @@ -2884,7 +2904,7 @@ msgstr "Rilocazione: è assoluta: argv0=%s\n" msgid "Relocation : from cwd: argv0=%s\n" msgstr "Rilocazione: da cwd: argv0=%s\n" -#: relocate.cc:194 +#: relocate.cc:196 #, c-format msgid "" "Relocation: from PATH=%s\n" @@ -2893,30 +2913,30 @@ msgstr "" "Rilocazione: da PATH=%s\n" "argv0=%s\n" -#: relocate.cc:220 +#: relocate.cc:222 msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR" msgstr "LILYPONDPREFIX è obsoleto, usare LILYPOND_DATADIR" -#: relocate.cc:345 +#: relocate.cc:347 #, c-format msgid "Relocation file: %s" msgstr "File di rilocazione: %s" -#: relocate.cc:349 source-file.cc:65 +#: relocate.cc:351 source-file.cc:65 #, c-format msgid "cannot open file: `%s'" msgstr "impossibile aprire il file: «%s»" -#: relocate.cc:379 +#: relocate.cc:381 #, c-format msgid "Unknown relocation command %s" msgstr "Comando di rilocazione sconosciuto %s" -#: rest-collision.cc:153 +#: rest-collision.cc:154 msgid "cannot resolve rest collision: rest direction not set" msgstr "impossibile risolvere la collisione di pause: direzione delle pause non impostata" -#: rest-collision.cc:164 rest-collision.cc:273 +#: rest-collision.cc:165 rest-collision.cc:274 msgid "too many colliding rests" msgstr "troppe collisioni tra pause" @@ -2925,33 +2945,33 @@ msgstr "troppe collisioni tra pause" msgid "rest `%s' not found" msgstr "pausa «%s» non trovata" -#: score-engraver.cc:79 +#: score-engraver.cc:77 #, c-format msgid "cannot find `%s'" msgstr "impossibile trovare «%s»" -#: score-engraver.cc:81 +#: score-engraver.cc:79 msgid "Music font has not been installed properly." msgstr "Il tipo di carattere musicale non è stato installato correttamente." -#: score-engraver.cc:83 +#: score-engraver.cc:81 #, c-format msgid "Search path `%s'" msgstr "Percorso di ricerca «%s»" -#: score-engraver.cc:85 +#: score-engraver.cc:83 msgid "Aborting" msgstr "Si sospende l'esecuzione" -#: score.cc:160 +#: score.cc:161 msgid "already have music in score" msgstr "musica già presente nello spartito" -#: score.cc:161 +#: score.cc:163 msgid "this is the previous music" msgstr "questa è la musica precedente" -#: score.cc:166 +#: score.cc:169 msgid "errors found, ignoring music expression" msgstr "trovati degli errori, si ignora l'espressione musicale" @@ -2990,7 +3010,7 @@ msgstr "%s senza una causa" msgid "cannot end %s" msgstr "impossibile terminare %s" -#: slur.cc:434 +#: slur.cc:436 #, c-format msgid "Ignoring grob for slur: %s. avoid-slur not set?" msgstr "Si ignora il grob per la legatura di portamento: %s. Non si è impostato avoid-slur?" @@ -3025,18 +3045,18 @@ msgstr "forse l'input dovrebbe specificare le voci polifoniche" msgid "weird stem size, check for narrow beams" msgstr "strana dimensione del gambo, controllare di non avere travature strette" -#: system.cc:201 +#: system.cc:202 #, c-format msgid "Element count %d" msgstr "Numero degli elementi %d" -#: system.cc:512 +#: system.cc:513 #, c-format msgid "Grob count %d" msgstr "Numero degli oggetti grafici %d" #. TODO: Also print the arguments of the markup! -#: text-interface.cc:138 +#: text-interface.cc:139 #, c-format msgid "Markup depth exceeds maximal value of %d; Markup: %s" msgstr "La profondità di markup eccede il valore massimo di %d; Markup: %s" @@ -3057,7 +3077,7 @@ msgstr "spanner testuale non terminato" msgid "unterminated tie" msgstr "legatura di valore non terminata" -#: tie-engraver.cc:373 +#: tie-engraver.cc:377 msgid "lonely tie" msgstr "legatura di valore solitaria" @@ -3071,7 +3091,7 @@ msgstr "legatura di valore solitaria" msgid "strange time signature found: %d/%d" msgstr "si è incontrato uno strano segno di tempo: %d/%d" -#: translator-ctors.cc:65 +#: translator-ctors.cc:68 #, c-format msgid "unknown translator: `%s'" msgstr "traduttore sconosciuto: «%s»" @@ -3081,17 +3101,17 @@ msgstr "traduttore sconosciuto: «%s»" msgid "fatal error. Couldn't find type: %s" msgstr "errore fatale. Impossibile trovare il tipo: %s" -#: translator-group.cc:188 +#: translator-group.cc:187 #, c-format msgid "cannot find: `%s'" msgstr "impossibile trovare: «%s»" -#: translator.cc:320 +#: translator.cc:310 #, c-format msgid "Two simultaneous %s events, junking this one" msgstr "Due eventi %s simultanei, si butta via questo" -#: translator.cc:321 +#: translator.cc:311 #, c-format msgid "Previous %s event here" msgstr "L'evento %s precedente sta qui" @@ -3156,206 +3176,206 @@ msgstr "è già presente uno spanner terminato" msgid "giving up" msgstr "rinuncia" -#: parser.yy:463 parser.yy:847 parser.yy:928 parser.yy:1150 +#: parser.yy:476 parser.yy:947 parser.yy:1028 parser.yy:1248 msgid "bad expression type" msgstr "tipo d'espressione non corretto" -#: parser.yy:759 parser.yy:1361 parser.yy:1406 +#: parser.yy:859 parser.yy:1458 parser.yy:1503 msgid "not a context mod" msgstr "non è una modalità di contesto" -#: parser.yy:954 +#: parser.yy:1054 msgid "Missing music in \\score" msgstr "Nessuna musica trovata in \\score" -#: parser.yy:991 +#: parser.yy:1091 msgid "\\paper cannot be used in \\score, use \\layout instead" msgstr "non si può usare \\paper dentro \\score, usare \\layout al suo posto" -#: parser.yy:1027 +#: parser.yy:1126 msgid "Spurious expression in \\score" msgstr "Espressione spuria in \\score" -#: parser.yy:1057 +#: parser.yy:1156 msgid "need \\paper for paper block" msgstr "è necessario \\paper per il blocco \"paper\"" -#: parser.yy:1234 +#: parser.yy:1331 msgid "music expected" msgstr "attesa la musica" -#: parser.yy:1244 parser.yy:1278 +#: parser.yy:1341 parser.yy:1375 msgid "unexpected post-event" msgstr "«post-event» inatteso" -#: parser.yy:1286 +#: parser.yy:1383 msgid "Ignoring non-music expression" msgstr "Si ignora l'espressione non musicale" -#: parser.yy:1587 +#: parser.yy:1691 msgid "not a symbol" msgstr "non è un simbolo" -#: parser.yy:2337 parser.yy:2451 parser.yy:2464 parser.yy:2473 +#: parser.yy:2491 parser.yy:2605 parser.yy:2618 parser.yy:2627 msgid "bad grob property path" msgstr "percorso sbagliato alla proprietà del «grob»" -#: parser.yy:2431 +#: parser.yy:2585 msgid "only \\consists and \\remove take non-string argument." msgstr "solo \\consists e \\remove prendono un argomento diverso da una stringa" -#: parser.yy:2492 +#: parser.yy:2646 msgid "bad context property path" msgstr "percorso sbagliato alla proprietà di contesto" -#: parser.yy:2593 +#: parser.yy:2733 msgid "simple string expected" msgstr "attesa una stringa semplice" -#: parser.yy:2611 +#: parser.yy:2750 msgid "symbol expected" msgstr "simbolo atteso" -#: parser.yy:2747 +#: parser.yy:2886 msgid "not a rhythmic event" msgstr "non è un evento ritmico" -#: parser.yy:2797 +#: parser.yy:2936 msgid "post-event expected" msgstr "atteso un post-event" -#: parser.yy:2806 parser.yy:2811 +#: parser.yy:2945 parser.yy:2950 msgid "have to be in Lyric mode for lyrics" msgstr "bisogna essere in modo \"Lyric\" per i testi" -#: parser.yy:2887 +#: parser.yy:3026 msgid "expecting string or post-event as script definition" msgstr "ci si aspetta una stringa o un post-event come definizione dello script" -#: parser.yy:2991 +#: parser.yy:3130 msgid "not an articulation" msgstr "non è un'articolazione" -#: parser.yy:3063 parser.yy:3106 +#: parser.yy:3202 parser.yy:3245 msgid "not a duration" msgstr "non è una durata" -#: parser.yy:3127 +#: parser.yy:3266 msgid "bass number expected" msgstr "atteso un numero di basso" -#: parser.yy:3219 +#: parser.yy:3358 msgid "have to be in Note mode for notes" msgstr "bisogna essere in modo \"Note\" per le note" -#: parser.yy:3258 +#: parser.yy:3397 msgid "have to be in Chord mode for chords" msgstr "bisogna essere in modo \"Chord\" per gli accordi" -#: parser.yy:3301 +#: parser.yy:3440 msgid "markup outside of text script or \\lyricmode" msgstr "testo fuori da una scritta testuale o da \\lyricmode" -#: parser.yy:3306 +#: parser.yy:3445 msgid "unrecognized string, not in text script or \\lyricmode" msgstr "stringa non riconosciuta, non si trova in una scritta testuale o in \\lyricmode" -#: parser.yy:3458 parser.yy:3467 +#: parser.yy:3597 parser.yy:3606 msgid "not an unsigned integer" msgstr "non è un intero non negativo" -#: parser.yy:3541 +#: parser.yy:3693 msgid "not a markup" msgstr "non è un markup" -#: lexer.ll:192 +#: lexer.ll:193 msgid "stray UTF-8 BOM encountered" msgstr "si è incontrato un segno BOM UTF-8 isolato" -#: lexer.ll:195 +#: lexer.ll:196 msgid "Skipping UTF-8 BOM" msgstr "Si ignora il BOM UTF-8" -#: lexer.ll:247 +#: lexer.ll:248 #, c-format msgid "Renaming input to: `%s'" msgstr "Si rinomina l'input in: «%s»" -#: lexer.ll:264 +#: lexer.ll:265 msgid "quoted string expected after \\version" msgstr "\\version deve essere seguito da una stringa compresa tra virgolette" -#: lexer.ll:268 +#: lexer.ll:269 msgid "quoted string expected after \\sourcefilename" msgstr "\\sourcefilename deve essere seguito da una stringa compresa tra virgolette" -#: lexer.ll:272 +#: lexer.ll:273 msgid "integer expected after \\sourcefileline" msgstr "\\sourcefileline deve essere seguito da un intero" -#: lexer.ll:299 +#: lexer.ll:300 msgid "\\maininput not allowed outside init files" msgstr "\\maininput non permesso fuori dai file di inizializzazione" -#: lexer.ll:323 +#: lexer.ll:324 #, c-format msgid "wrong or undefined identifier: `%s'" msgstr "indentificatore errato o non definito: «%s»" -#: lexer.ll:348 +#: lexer.ll:349 msgid "string expected after \\include" msgstr "stringa prevista dopo \\include" -#: lexer.ll:358 +#: lexer.ll:359 msgid "end quote missing" msgstr "mancano le virgolette di chiusura" -#: lexer.ll:713 +#: lexer.ll:714 msgid "EOF found inside a comment" msgstr "fine del file (EOF) trovata in un commento" -#: lexer.ll:718 +#: lexer.ll:719 msgid "EOF found inside string" msgstr "fine del file (EOF) trovata in una stringa" -#: lexer.ll:733 +#: lexer.ll:734 msgid "Unfinished main input" msgstr "Input principale non finito" -#: lexer.ll:804 +#: lexer.ll:805 #, c-format msgid "invalid character: `%s'" msgstr "carattere non valido: «%s»" -#: lexer.ll:924 +#: lexer.ll:925 #, c-format msgid "unknown escaped string: `\\%s'" msgstr "stringa di escape sconosciuta: «\\%s»" -#: lexer.ll:944 +#: lexer.ll:945 #, c-format msgid "undefined character or shorthand: %s" msgstr "carattere o abbreviazione non riconosciuti: %s" -#: lexer.ll:1235 +#: lexer.ll:1236 msgid "non-UTF-8 input" msgstr "input non UTF-8" -#: lexer.ll:1279 +#: lexer.ll:1280 #, c-format msgid "Invalid version string \"%s\"" msgstr "Stringa di versione \"%s\" non valida" -#: lexer.ll:1284 +#: lexer.ll:1285 #, c-format msgid "file too old: %s (oldest supported: %s)" msgstr "file troppo vecchio: %s (il più vecchio che si può gestire è: %s)" -#: lexer.ll:1285 +#: lexer.ll:1286 msgid "consider updating the input with the convert-ly script" msgstr "si consideri di aggiornare l'input con lo script convert-ly" -#: lexer.ll:1291 +#: lexer.ll:1292 #, c-format msgid "program too old: %s (file requires: %s)" msgstr "programma troppo vecchio: %s (il file richiede: %s)" @@ -3374,24 +3394,34 @@ msgstr "Invocazione di «~a»..." msgid "`~a' failed (~a)\n" msgstr "«~a» fallito (~a)\n" -#: backend-library.scm:94 +#: backend-library.scm:108 #, scheme-format msgid "Converting to `~a'...\n" msgstr "Conversione a «~a»...\n" #. Do not try to guess the name of the png file, #. GS produces PNG files like BASE-page%d.png. -#: backend-library.scm:103 +#: backend-library.scm:118 #, scheme-format msgid "Converting to ~a..." msgstr "Conversione a ~a..." -#: backend-library.scm:141 +#: backend-library.scm:134 +#, scheme-format +msgid "Copying to `~a'...\n" +msgstr "Copia su «~a»...\n" + +#: backend-library.scm:200 +#, scheme-format +msgid "Deleting `~a'...\n" +msgstr "Eliminazione di «~a»...\n" + +#: backend-library.scm:219 #, scheme-format msgid "Writing header field `~a' to `~a'..." msgstr "Scrittura del campo di intestazione «~a» in «~a»..." -#: backend-library.scm:190 +#: backend-library.scm:268 #, scheme-format msgid "missing stencil expression `~S'" msgstr "manca l'espressione di stencil «~S»" @@ -3447,60 +3477,60 @@ msgstr "Impossibile ridefinire la classe di evento «~S»" msgid "Undefined parent event class `~S'" msgstr "Classe di evento genitore «~S» sconosciuta" -#: define-markup-commands.scm:1062 +#: define-markup-commands.scm:1098 msgid "no systems found in \\score markup, does it have a \\layout block?" msgstr "non si è trovato alcun sistema nell'oggetto markup in cui è inserito \\score: contiene un blocco \\layout?" -#: define-markup-commands.scm:2886 +#: define-markup-commands.scm:2922 #, scheme-format msgid "Cannot find glyph ~a" msgstr "Impossibile trovare il glifo ~a" -#: define-markup-commands.scm:3362 +#: define-markup-commands.scm:3398 #, 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:3363 +#: define-markup-commands.scm:3399 #, scheme-format msgid "defaulting to ~S pt" msgstr "si applica la dimensione predefinita ~S pt" -#: define-markup-commands.scm:3615 +#: define-markup-commands.scm:3643 #, scheme-format msgid "not a valid duration string: ~a" msgstr "non è una durata valida per la stringa: ~a" -#: define-markup-commands.scm:3826 +#: define-markup-commands.scm:3854 #, scheme-format msgid "not a valid duration string: ~a - ignoring" msgstr "non è una durata valida per la stringa: ~a -- si ignora" -#: define-music-types.scm:797 +#: define-music-types.scm:803 #, scheme-format msgid "symbol expected: ~S" msgstr "simbolo atteso: ~S" -#: define-music-types.scm:800 +#: define-music-types.scm:806 #, scheme-format msgid "cannot find music object: ~S" msgstr "impossibile trovare l'oggetto musicale: ~S" -#: define-music-types.scm:820 +#: define-music-types.scm:826 #, scheme-format msgid "bad make-music argument: ~S" msgstr "argomento di make-music non valido: ~S" -#: define-note-names.scm:972 +#: define-note-names.scm:1000 msgid "Select note names language." msgstr "Selezione della lingua dei nomi delle note." -#: define-note-names.scm:978 +#: define-note-names.scm:1006 #, scheme-format msgid "Using `~a' note names..." msgstr "Utilizzo di \"~a\" per i nomi delle note..." -#: define-note-names.scm:981 +#: define-note-names.scm:1009 #, scheme-format msgid "Could not find language `~a'. Ignoring." msgstr "Impossibile trovare il linguaggio \"~a\". Si ignora." @@ -3540,12 +3570,12 @@ msgstr "impossibile trovare la descrizione per la proprietà \"~S\" (~S)" msgid "cannot find description for property ~S (~S)" msgstr "impossibile trovare la descrizione per la proprietà ~S (~S)" -#: flag-styles.scm:162 +#: flag-styles.scm:155 #, scheme-format msgid "flag stroke `~a' or `~a' not found" msgstr "tipo di coda uncinata sconosciuto: «~a» o «~a»" -#: framework-eps.scm:108 +#: framework-eps.scm:112 #, scheme-format msgid "Writing ~a..." msgstr "Scrittura di ~a..." @@ -3570,7 +3600,7 @@ msgstr "impossibile realizzare l'integrazione ~S=~S" msgid "do not know how to embed font ~s ~s ~s" msgstr "non so come inserire il tipo di carattere ~s ~s ~s" -#: framework-ps.scm:729 +#: framework-ps.scm:723 msgid "" "\n" "The PostScript backend does not support the\n" @@ -3618,20 +3648,20 @@ msgstr "Errore nella definizione delle travature. Previste (~S,~S), trovate ~S." msgid "Error in beam quanting. Expected ~S 0, found ~S." msgstr "Errore nella definizione delle travature. Previste ~S 0, trovate ~S." -#: lily-library.scm:350 +#: lily-library.scm:333 msgid "Music unsuitable for context-mod" msgstr "Musica non adatta per context-mod" -#: lily-library.scm:405 +#: lily-library.scm:388 #, scheme-format msgid "Cannot find context-def \\~a" msgstr "Impossibile trovare context-def \\~a" -#: lily-library.scm:421 +#: lily-library.scm:404 msgid "Music unsuitable for output-def" msgstr "Musica non adatta per output-def" -#: lily-library.scm:921 +#: lily-library.scm:904 msgid "" "Find the index between @var{start} and @var{end} (an integer)\n" "which produces the closest match to @var{target-val} if\n" @@ -3641,51 +3671,51 @@ msgstr "" "che produca l'abbinamento più vicino al @var{target-val} quando\n" "applicato alla funzione @var{getter}." -#: lily-library.scm:1015 +#: lily-library.scm:998 #, scheme-format msgid "unknown unit: ~S" msgstr "unità sconosciuta: ~S" -#: lily-library.scm:1040 +#: lily-library.scm:1023 #, scheme-format msgid "no \\version statement found, please add~afor future compatibility" msgstr "dichiarazione di \\version assente; si aggiunga ~a per compatibilità futura" -#: lily.scm:75 +#: lily.scm:93 msgid "call-after-session used after session start" msgstr "call-after-session usato dopo l'inizio di una sessione" -#: lily.scm:93 +#: lily.scm:111 msgid "define-session used after session start" msgstr "define-session usato dopo l'inizio di una sessione" -#: lily.scm:399 +#: lily.scm:417 msgid "Using (ice-9 curried-definitions) module\n" msgstr "Utilizzazione del modulo (ice-9 curried-definitions)\n" -#: lily.scm:402 +#: lily.scm:420 msgid "Guile 1.8\n" msgstr "Guile 1.8\n" -#: lily.scm:459 +#: lily.scm:477 #, scheme-format msgid "cannot find: ~A" msgstr "impossibile trovare ~A" -#: lily.scm:886 +#: lily.scm:903 msgid "Success: compilation successfully completed" msgstr "Successo: compilazione completata con successo" -#: lily.scm:887 +#: lily.scm:904 msgid "Compilation completed with warnings or errors" msgstr "Compilazione completata con avvertimenti o errori" -#: lily.scm:948 +#: lily.scm:965 #, scheme-format msgid "job ~a terminated with signal: ~a" msgstr "il lavoro ~a è terminato col segnale ~a" -#: lily.scm:951 +#: lily.scm:968 #, scheme-format msgid "" "logfile ~a (exit ~a):\n" @@ -3694,36 +3724,31 @@ msgstr "" "file di registro ~a (uscita ~a):\n" "~a" -#: lily.scm:973 lily.scm:1062 +#: lily.scm:990 lily.scm:1079 #, scheme-format msgid "failed files: ~S" msgstr "errore nei file: ~S" -#: lily.scm:1053 +#: lily.scm:1070 #, scheme-format msgid "Redirecting output to ~a..." msgstr "Redirezione dell'output verso ~a..." -#: lily.scm:1072 ps-to-png.scm:66 +#: lily.scm:1089 #, scheme-format msgid "Invoking `~a'...\n" msgstr "Chiamata di «~a»...\n" -#: ly-syntax-constructors.scm:66 +#: ly-syntax-constructors.scm:27 #, scheme-format msgid "~a function cannot return ~a" msgstr "la funzione ~a non può restituire ~a" -#: ly-syntax-constructors.scm:76 +#: ly-syntax-constructors.scm:60 #, scheme-format msgid "wrong type for argument ~a. Expecting ~a, found ~s" msgstr "tipo di argomento errato per ~a. Previsto ~a, trovato ~s" -#: ly-syntax-constructors.scm:200 -#, scheme-format -msgid "Invalid property operation ~a" -msgstr "Operazione di proprietà non valida: ~a" - #: markup-macros.scm:331 #, scheme-format msgid "Wrong number of arguments. Expect: ~A, found ~A: ~S" @@ -3763,67 +3788,77 @@ msgstr "altezza da invertire non presente nella scala; si ignora" msgid "negative replication count; ignoring" msgstr "conto di riproduzione negativo; si ignora" -#: music-functions.scm:311 +#: music-functions.scm:319 #, scheme-format msgid "invalid tremolo repeat count: ~a" msgstr "numero di ripetizioni di tremolo non valido: ~a" -#: music-functions.scm:340 +#: music-functions.scm:348 #, scheme-format msgid "unknown repeat type `~S': must be volta, unfold, percent, or tremolo" msgstr "tipo di ripetizione «~S» sconosciuto: deve essere volta, unfold, percent o tremolo" -#: music-functions.scm:344 +#: music-functions.scm:352 msgid "More alternatives than repeats. Junking excess alternatives" msgstr "Più alternative che ripetizioni. Vengono tralasciate le alternative in eccesso" -#: music-functions.scm:480 +#: music-functions.scm:487 #, scheme-format msgid "bad grob property path ~a" msgstr "percorso sbagliato alla proprietà del «grob»: ~a" -#: music-functions.scm:779 +#: music-functions.scm:511 +#, scheme-format +msgid "bad context property ~a" +msgstr "proprietà di contesto ~a sbagliata" + +#: music-functions.scm:534 +#, scheme-format +msgid "bad music property ~a" +msgstr "proprietà ~a della musica sbagliata" + +#: music-functions.scm:840 msgid "Bad chord repetition" msgstr "Ripetizione di accordi sbagliata" -#: music-functions.scm:884 +#: music-functions.scm:945 #, scheme-format msgid "music expected: ~S" msgstr "musica attesa: ~S" -#: music-functions.scm:1226 +#: music-functions.scm:1295 #, scheme-format msgid "cannot find quoted music: `~S'" msgstr "impossibile trovare la musica citata: «~S»" -#: music-functions.scm:1366 +#: music-functions.scm:1432 msgid "Add @var{octave-shift} to the octave of @var{pitch}." msgstr "Aggiungere @var{octave-shift} all'ottava di @var{altezza}." -#: music-functions.scm:1429 +#: music-functions.scm:1495 #, scheme-format msgid "Unknown octaveness type: ~S " msgstr "Tipo di ottava sconosciuto: ~S " -#: music-functions.scm:1430 +#: music-functions.scm:1496 msgid "Defaulting to 'any-octave." msgstr "Applicazione del valore predefinito 'any-octave." -#: music-functions.scm:1822 +#: music-functions.scm:1888 #, scheme-format msgid "unknown accidental style: ~S" msgstr "stile di alterazione sconosciuto: ~S" -#: music-functions.scm:2040 +#: music-functions.scm:2098 msgid "Missing duration" msgstr "Durata mancante" -#: music-functions.scm:2549 +#: music-functions.scm:2626 #, scheme-format msgid "not a symbol list: ~a" msgstr "non è una lista di simboli: ~a" -#: music-functions.scm:2552 +#: music-functions.scm:2629 #, scheme-format msgid "conflicting tag group ~a" msgstr "gruppo di etichette (tag) ~a in conflitto" @@ -3852,23 +3887,23 @@ msgstr "Un glifo deve avere un valore unicode" msgid "cannot find SVG font ~S" msgstr "impossibile trovare il tipo di carattere SVG ~S" -#: paper.scm:122 +#: paper.scm:121 msgid "set-global-staff-size: not in toplevel scope" msgstr "set-global-staff-size: non è nell'ambito di livello più alto" -#: paper.scm:322 +#: paper.scm:321 #, scheme-format msgid "This is not a \\layout {} object, ~S" msgstr "Questo non è un oggetto \\layout {}, ~S" -#: paper.scm:330 +#: paper.scm:329 #, 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:349 +#: paper.scm:348 msgid "Must use #(set-paper-size .. ) within \\paper { ... }" msgstr "Si deve usare #(set-paper-size .. ) all'interno di \\paper { ... }" @@ -3882,19 +3917,24 @@ msgstr "tipo di chiave sconosciuto «~a»" msgid "supported clefs: ~a" msgstr "chiavi supportate: ~a" -#: parser-ly-from-scheme.scm:74 +#: parser-ly-from-scheme.scm:73 msgid "error in #{ ... #}" msgstr "errore in #{ ... #}" -#: part-combiner.scm:748 +#: part-combiner.scm:894 #, scheme-format msgid "quoted music `~a' is empty" msgstr "la musica quotata «~a» è vuota" -#: ps-to-png.scm:70 +#: ps-to-png.scm:72 ps-to-png.scm:75 +#, scheme-format +msgid "Copying `~a' to `~a'..." +msgstr "Copia di «~a» su «~a»..." + +#: ps-to-png.scm:77 ps-to-png.scm:79 #, scheme-format -msgid "~a exited with status: ~S" -msgstr "~a è terminato con stato ~S" +msgid "Deleting `~a'..." +msgstr "Eliminazione di di ~a..." #: to-xml.scm:190 #, scheme-format diff --git a/po/lilypond.pot b/po/lilypond.pot index 6bc2060218..b616c043bc 100644 --- a/po/lilypond.pot +++ b/po/lilypond.pot @@ -6,10 +6,10 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: lilypond 2.19.24\n" +"Project-Id-Version: lilypond 2.19.26\n" "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu." "lilypond.bugs\n" -"POT-Creation-Date: 2015-07-26 11:43+0100\n" +"POT-Creation-Date: 2015-08-27 10:48+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -545,7 +545,7 @@ msgstr "" #: convertrules.py:2820 msgid "" "oldaddlyrics is no longer supported. \n" -" Use addlyrics or lyrsicsto instead.\n" +" Use addlyrics or lyricsto instead.\n" msgstr "" #: convertrules.py:2826 @@ -889,41 +889,41 @@ msgstr "" msgid "Unable to find instrument for ID=%s\n" msgstr "" -#: abc2ly.py:1386 convert-ly.py:85 lilypond-book.py:122 midi2ly.py:1044 +#: abc2ly.py:1389 convert-ly.py:85 lilypond-book.py:122 midi2ly.py:1044 #, python-format msgid "%s [OPTION]... FILE" msgstr "" -#: abc2ly.py:1387 +#: abc2ly.py:1390 #, python-format msgid "" "abc2ly converts ABC music files (see\n" "%s) to LilyPond input.\n" msgstr "" -#: abc2ly.py:1395 convert-ly.py:92 etf2ly.py:1208 lilypond-book.py:231 +#: abc2ly.py:1398 convert-ly.py:92 etf2ly.py:1208 lilypond-book.py:231 #: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:184 msgid "show version number and exit" msgstr "" -#: abc2ly.py:1398 convert-ly.py:96 etf2ly.py:1204 lilypond-book.py:140 +#: abc2ly.py:1401 convert-ly.py:96 etf2ly.py:1204 lilypond-book.py:140 #: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:163 msgid "show this help and exit" msgstr "" -#: abc2ly.py:1401 etf2ly.py:1209 midi2ly.py:1071 +#: abc2ly.py:1404 etf2ly.py:1209 midi2ly.py:1071 msgid "write output to FILE" msgstr "" -#: abc2ly.py:1404 +#: abc2ly.py:1407 msgid "be strict about success" msgstr "" -#: abc2ly.py:1407 +#: abc2ly.py:1410 msgid "preserve ABC's notion of beams" msgstr "" -#: abc2ly.py:1410 +#: abc2ly.py:1413 msgid "suppress progress messages" msgstr "" @@ -931,7 +931,7 @@ msgstr "" #. "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:1413 convert-ly.py:157 etf2ly.py:1218 lilypond-book.py:258 +#: abc2ly.py:1416 convert-ly.py:157 etf2ly.py:1218 lilypond-book.py:258 #: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:318 #, c-format, python-format msgid "Report bugs via %s" @@ -1128,7 +1128,7 @@ msgstr "" #: lilypond-book.py:157 msgid "" -"pad left side of music to align music inspite of uneven bar numbers (in mm)" +"pad left side of music to align music in spite of uneven bar numbers (in mm)" msgstr "" #: lilypond-book.py:162 @@ -1772,7 +1772,7 @@ msgstr "" msgid "not changing to same context type: %s" msgstr "" -#. FIXME: uncomprehensable message +#. FIXME: incomprehensible message #: change-iterator.cc:82 msgid "none of these in my family" msgstr "" @@ -1894,22 +1894,22 @@ msgstr "" msgid "unterminated extender" msgstr "" -#: flag.cc:134 +#: flag.cc:133 #, c-format msgid "flag `%s' not found" msgstr "" -#: flag.cc:154 +#: flag.cc:153 #, c-format msgid "flag stroke `%s' not found" msgstr "" -#: font-config-scheme.cc:151 font-config.cc:48 +#: font-config-scheme.cc:151 font-config.cc:82 #, c-format msgid "failed adding font directory: %s" msgstr "" -#: font-config-scheme.cc:153 font-config.cc:50 +#: font-config-scheme.cc:153 font-config.cc:84 #, c-format msgid "Adding font directory: %s" msgstr "" @@ -1928,17 +1928,17 @@ msgstr "" msgid "Initializing FontConfig..." msgstr "" -#: font-config.cc:57 +#: font-config.cc:70 #, c-format -msgid "failed adding fontconfig configuration file: %s" +msgid "failed to add fontconfig configuration file `%s'" msgstr "" -#: font-config.cc:60 +#: font-config.cc:73 #, c-format msgid "Adding fontconfig configuration file: %s" msgstr "" -#: font-config.cc:63 +#: font-config.cc:86 msgid "Building font database..." msgstr "" @@ -2054,12 +2054,12 @@ msgstr "" msgid "Incomplete keyAlterationOrder for key signature" msgstr "" -#: key-signature-interface.cc:78 +#: key-signature-interface.cc:77 #, c-format msgid "No glyph found for alteration: %s" msgstr "" -#: key-signature-interface.cc:88 +#: key-signature-interface.cc:87 msgid "alteration not found" msgstr "" @@ -2136,6 +2136,11 @@ msgstr "" msgid "%s:EOF" msgstr "" +#: lily-modules.cc:81 +#, c-format +msgid "Uninitialized variable `%s' in module (%s)" +msgstr "" + #: lily-parser-scheme.cc:80 #, c-format msgid "Changing working directory to: `%s'" @@ -2172,7 +2177,7 @@ msgstr "" msgid "Parsing..." msgstr "" -#: lookup.cc:181 +#: lookup.cc:178 #, c-format msgid "Not drawing a box with negative dimension, %.2f by %.2f." msgstr "" @@ -2735,11 +2740,11 @@ msgstr "" msgid "unterminated percent repeat" msgstr "" -#: performance.cc:55 +#: performance.cc:76 msgid "Track..." msgstr "" -#: performance.cc:90 +#: performance.cc:126 #, c-format msgid "MIDI output to `%s'..." msgstr "" @@ -2774,25 +2779,25 @@ msgstr "" msgid "Failed octave check, got: " msgstr "" -#: relocate.cc:52 +#: relocate.cc:56 #, c-format msgid "Setting %s to %s" msgstr "" #. this warning should only be printed in debug mode! -#: relocate.cc:73 +#: relocate.cc:77 #, c-format msgid "no such file: %s for %s" msgstr "" #. this warning should only be printed in debug mode! #. this warning should only be printed in debug mode -#: relocate.cc:84 relocate.cc:102 +#: relocate.cc:88 relocate.cc:106 #, c-format msgid "no such directory: %s for %s" msgstr "" -#: relocate.cc:93 +#: relocate.cc:97 #, c-format msgid "%s=%s (prepend)\n" msgstr "" @@ -3098,115 +3103,115 @@ msgstr "" msgid "giving up" msgstr "" -#: parser.yy:476 parser.yy:907 parser.yy:988 parser.yy:1208 +#: parser.yy:476 parser.yy:947 parser.yy:1028 parser.yy:1248 msgid "bad expression type" msgstr "" -#: parser.yy:819 parser.yy:1418 parser.yy:1463 +#: parser.yy:859 parser.yy:1458 parser.yy:1503 msgid "not a context mod" msgstr "" -#: parser.yy:1014 +#: parser.yy:1054 msgid "Missing music in \\score" msgstr "" -#: parser.yy:1051 +#: parser.yy:1091 msgid "\\paper cannot be used in \\score, use \\layout instead" msgstr "" -#: parser.yy:1086 +#: parser.yy:1126 msgid "Spurious expression in \\score" msgstr "" -#: parser.yy:1116 +#: parser.yy:1156 msgid "need \\paper for paper block" msgstr "" -#: parser.yy:1291 +#: parser.yy:1331 msgid "music expected" msgstr "" -#: parser.yy:1301 parser.yy:1335 +#: parser.yy:1341 parser.yy:1375 msgid "unexpected post-event" msgstr "" -#: parser.yy:1343 +#: parser.yy:1383 msgid "Ignoring non-music expression" msgstr "" -#: parser.yy:1643 +#: parser.yy:1691 msgid "not a symbol" msgstr "" -#: parser.yy:2443 parser.yy:2557 parser.yy:2570 parser.yy:2579 +#: parser.yy:2491 parser.yy:2605 parser.yy:2618 parser.yy:2627 msgid "bad grob property path" msgstr "" -#: parser.yy:2537 +#: parser.yy:2585 msgid "only \\consists and \\remove take non-string argument." msgstr "" -#: parser.yy:2598 +#: parser.yy:2646 msgid "bad context property path" msgstr "" -#: parser.yy:2694 +#: parser.yy:2733 msgid "simple string expected" msgstr "" -#: parser.yy:2711 +#: parser.yy:2750 msgid "symbol expected" msgstr "" -#: parser.yy:2847 +#: parser.yy:2886 msgid "not a rhythmic event" msgstr "" -#: parser.yy:2897 +#: parser.yy:2936 msgid "post-event expected" msgstr "" -#: parser.yy:2906 parser.yy:2911 +#: parser.yy:2945 parser.yy:2950 msgid "have to be in Lyric mode for lyrics" msgstr "" -#: parser.yy:2987 +#: parser.yy:3026 msgid "expecting string or post-event as script definition" msgstr "" -#: parser.yy:3091 +#: parser.yy:3130 msgid "not an articulation" msgstr "" -#: parser.yy:3163 parser.yy:3206 +#: parser.yy:3202 parser.yy:3245 msgid "not a duration" msgstr "" -#: parser.yy:3227 +#: parser.yy:3266 msgid "bass number expected" msgstr "" -#: parser.yy:3319 +#: parser.yy:3358 msgid "have to be in Note mode for notes" msgstr "" -#: parser.yy:3358 +#: parser.yy:3397 msgid "have to be in Chord mode for chords" msgstr "" -#: parser.yy:3401 +#: parser.yy:3440 msgid "markup outside of text script or \\lyricmode" msgstr "" -#: parser.yy:3406 +#: parser.yy:3445 msgid "unrecognized string, not in text script or \\lyricmode" msgstr "" -#: parser.yy:3558 parser.yy:3567 +#: parser.yy:3597 parser.yy:3606 msgid "not an unsigned integer" msgstr "" -#: parser.yy:3654 +#: parser.yy:3693 msgid "not a markup" msgstr "" @@ -3404,31 +3409,31 @@ msgstr "" msgid "Undefined parent event class `~S'" msgstr "" -#: define-markup-commands.scm:1089 +#: define-markup-commands.scm:1098 msgid "no systems found in \\score markup, does it have a \\layout block?" msgstr "" -#: define-markup-commands.scm:2913 +#: define-markup-commands.scm:2922 #, scheme-format msgid "Cannot find glyph ~a" msgstr "" -#: define-markup-commands.scm:3389 +#: define-markup-commands.scm:3398 #, scheme-format msgid "no brace found for point size ~S " msgstr "" -#: define-markup-commands.scm:3390 +#: define-markup-commands.scm:3399 #, scheme-format msgid "defaulting to ~S pt" msgstr "" -#: define-markup-commands.scm:3642 +#: define-markup-commands.scm:3643 #, scheme-format msgid "not a valid duration string: ~a" msgstr "" -#: define-markup-commands.scm:3853 +#: define-markup-commands.scm:3854 #, scheme-format msgid "not a valid duration string: ~a - ignoring" msgstr "" @@ -3448,16 +3453,16 @@ msgstr "" msgid "bad make-music argument: ~S" msgstr "" -#: define-note-names.scm:972 +#: define-note-names.scm:1000 msgid "Select note names language." msgstr "" -#: define-note-names.scm:978 +#: define-note-names.scm:1006 #, scheme-format msgid "Using `~a' note names..." msgstr "" -#: define-note-names.scm:981 +#: define-note-names.scm:1009 #, scheme-format msgid "Could not find language `~a'. Ignoring." msgstr "" @@ -3497,7 +3502,7 @@ msgstr "" msgid "cannot find description for property ~S (~S)" msgstr "" -#: flag-styles.scm:162 +#: flag-styles.scm:155 #, scheme-format msgid "flag stroke `~a' or `~a' not found" msgstr "" @@ -3563,32 +3568,32 @@ msgstr "" msgid "Error in beam quanting. Expected ~S 0, found ~S." msgstr "" -#: lily-library.scm:344 +#: lily-library.scm:333 msgid "Music unsuitable for context-mod" msgstr "" -#: lily-library.scm:399 +#: lily-library.scm:388 #, scheme-format msgid "Cannot find context-def \\~a" msgstr "" -#: lily-library.scm:415 +#: lily-library.scm:404 msgid "Music unsuitable for output-def" msgstr "" -#: lily-library.scm:915 +#: lily-library.scm:904 msgid "" "Find the index between @var{start} and @var{end} (an integer)\n" "which produces the closest match to @var{target-val} if\n" "applied to function @var{getter}." msgstr "" -#: lily-library.scm:1009 +#: lily-library.scm:998 #, scheme-format msgid "unknown unit: ~S" msgstr "" -#: lily-library.scm:1034 +#: lily-library.scm:1023 #, scheme-format msgid "no \\version statement found, please add~afor future compatibility" msgstr "" @@ -3659,11 +3664,6 @@ msgstr "" msgid "wrong type for argument ~a. Expecting ~a, found ~s" msgstr "" -#: ly-syntax-constructors.scm:229 -#, scheme-format -msgid "Invalid property operation ~a" -msgstr "" - #: markup-macros.scm:331 #, scheme-format msgid "Wrong number of arguments. Expect: ~A, found ~A: ~S" @@ -3727,48 +3727,53 @@ msgstr "" msgid "bad context property ~a" msgstr "" -#: music-functions.scm:812 +#: music-functions.scm:534 +#, scheme-format +msgid "bad music property ~a" +msgstr "" + +#: music-functions.scm:840 msgid "Bad chord repetition" msgstr "" -#: music-functions.scm:917 +#: music-functions.scm:945 #, scheme-format msgid "music expected: ~S" msgstr "" -#: music-functions.scm:1267 +#: music-functions.scm:1295 #, scheme-format msgid "cannot find quoted music: `~S'" msgstr "" -#: music-functions.scm:1404 +#: music-functions.scm:1432 msgid "Add @var{octave-shift} to the octave of @var{pitch}." msgstr "" -#: music-functions.scm:1467 +#: music-functions.scm:1495 #, scheme-format msgid "Unknown octaveness type: ~S " msgstr "" -#: music-functions.scm:1468 +#: music-functions.scm:1496 msgid "Defaulting to 'any-octave." msgstr "" -#: music-functions.scm:1860 +#: music-functions.scm:1888 #, scheme-format msgid "unknown accidental style: ~S" msgstr "" -#: music-functions.scm:2069 +#: music-functions.scm:2098 msgid "Missing duration" msgstr "" -#: music-functions.scm:2578 +#: music-functions.scm:2626 #, scheme-format msgid "not a symbol list: ~a" msgstr "" -#: music-functions.scm:2581 +#: music-functions.scm:2629 #, scheme-format msgid "conflicting tag group ~a" msgstr "" diff --git a/python/convertrules.py b/python/convertrules.py index fd33dce1d1..03670e02cc 100644 --- a/python/convertrules.py +++ b/python/convertrules.py @@ -2818,7 +2818,7 @@ def conv(str): if re.search(r'\\oldaddlyrics', str): stderr_write (NOT_SMART % "oldaddlyrics") stderr_write (_ ("oldaddlyrics is no longer supported. \n \ - Use addlyrics or lyrsicsto instead.\n")) + Use addlyrics or lyricsto instead.\n")) stderr_write (UPDATE_MANUALLY) raise FatalConversionError () return str diff --git a/scm/define-grob-properties.scm b/scm/define-grob-properties.scm index 8649a67117..fc8c86c5a3 100644 --- a/scm/define-grob-properties.scm +++ b/scm/define-grob-properties.scm @@ -1146,9 +1146,11 @@ if the grob is visible. A number sets the thickness of the outline as a multiple of the staff-line thickness. For compatibility with former behavior (now available with @code{whiteout-box}) the value @code{#t} is treated as @code{3.0}. Usually @code{#f} by default.") - (whiteout-box ,boolean? "If true, the grob is printed over a -rounded rectangular white background to white-out underlying material, -if the grob is visible. Usually @code{#f} by default.") + (whiteout-box ,boolean-or-number? "If a number or true, the grob +is printed over a rectangular white background to white-out underlying +material, if the grob is visible. A number indicates how far the +outline extends beyond the bounding box of the grob as a multiple of +the staff-line thickness. Usually @code{#f} by default.") (width ,ly:dimension? "The width of a grob measured in staff space.") (word-space ,ly:dimension? "Space to insert between words in diff --git a/scm/define-markup-commands.scm b/scm/define-markup-commands.scm index d7c0f22e46..505ca246c7 100644 --- a/scm/define-markup-commands.scm +++ b/scm/define-markup-commands.scm @@ -509,6 +509,16 @@ in the PDF backend. (ly:stencil-add (ly:make-stencil link-expr xextent yextent) stil))) +(define-public (book-first-page layout props) + "Return the @code{'first-page-number} of the entire book" + (define (ancestor layout) + "Return the topmost layout ancestor" + (let ((parent (ly:output-def-parent layout))) + (if (not (ly:output-def? parent)) + layout + (ancestor parent)))) + (ly:output-def-lookup (ancestor layout) 'first-page-number)) + (define-markup-command (with-link layout props label arg) (symbol? markup?) #:category other @@ -536,8 +546,7 @@ only works in the PDF backend. (if (list? table) (assoc-get label table) #f)) - (first-page-number - (ly:output-def-lookup layout 'first-page-number)) + (first-page-number (book-first-page layout props)) (current-page-number (if table-page-number (1+ (- table-page-number first-page-number)) @@ -734,19 +743,23 @@ Provide a white background for @var{arg}. (define-markup-command (whiteout-box layout props arg) (markup?) #:category other + #:properties ((thickness 0)) " -@cindex adding a rounded rectangular white background to text +@cindex adding a rectangular white background to text -Provide a rounded rectangular white background for @var{arg}. +Provide a rectangular white background for @var{arg}. @lilypond[verbatim,quote] \\markup { \\combine \\filled-box #'(-1 . 10) #'(-3 . 4) #1 - \\whiteout-box whiteout-box + \\override #'(thickness . 1.5) \\whiteout-box whiteout-box } @end lilypond" - (stencil-whiteout-box (interpret-markup layout props arg))) + (stencil-whiteout-box + (interpret-markup layout props arg) + (* thickness + (ly:output-def-lookup layout 'line-thickness)))) (define-markup-command (pad-markup layout props amount arg) (number? markup?) @@ -3495,18 +3508,10 @@ Supported flag-styles are @code{default}, @code{old-straight-flag}, (thickness-offset (cons 0 (* -1 thickness dir))) (spacing (* -1 flag-spacing factor dir)) (start (cons (- half-stem-thickness) (* half-stem-thickness dir))) - ;; The points of a round-filled-polygon need to be given in - ;; clockwise order, otherwise the polygon will be enlarged by - ;; blot-size*2! - (points (if stem-up - (list start - flag-end - (offset-add flag-end thickness-offset) - (offset-add start thickness-offset)) - (list start - (offset-add start thickness-offset) - (offset-add flag-end thickness-offset) - flag-end))) + (points (list start + flag-end + (offset-add flag-end thickness-offset) + (offset-add start thickness-offset))) (stencil (ly:round-filled-polygon points half-stem-thickness)) ;; Log for 1/8 is 3, so we need to subtract 3 (flag-stencil (buildflags stencil (- log 3) stencil spacing))) diff --git a/scm/define-music-display-methods.scm b/scm/define-music-display-methods.scm index c1ee87bbf8..0b9cb54fbb 100644 --- a/scm/define-music-display-methods.scm +++ b/scm/define-music-display-methods.scm @@ -1119,7 +1119,10 @@ Otherwise, return #f." elements ((music 'ContextSpeccedMusic context-id "up" context-type 'Staff - element (music 'SimultaneousMusic elements (?ac-music))) + element ?ac-music) + (music 'ContextSpeccedMusic + context-id "up" + context-type 'Staff) (music 'ContextSpeccedMusic context-id "down" context-type 'Staff)))) diff --git a/scm/flag-styles.scm b/scm/flag-styles.scm index 01fe315da0..2b52f44cb2 100644 --- a/scm/flag-styles.scm +++ b/scm/flag-styles.scm @@ -90,17 +90,10 @@ All lengths are scaled according to the font size of the note." (thickness-offset (cons 0 (* -1 thickness dir))) (spacing (* -1 flag-spacing factor dir )) (start (cons (- half-stem-thickness) (* half-stem-thickness dir))) - ;; The points of a round-filled-polygon need to be given in clockwise - ;; order, otherwise the polygon will be enlarged by blot-size*2! - (points (if stem-up - (list start - flag-end - (offset-add flag-end thickness-offset) - (offset-add start thickness-offset)) - (list start - (offset-add start thickness-offset) - (offset-add flag-end thickness-offset) - flag-end))) + (points (list start + flag-end + (offset-add flag-end thickness-offset) + (offset-add start thickness-offset))) (stencil (ly:round-filled-polygon points half-stem-thickness)) ;; Log for 1/8 is 3, so we need to subtract 3 (flag-stencil (buildflag stencil (- log 3) stencil spacing)) diff --git a/scm/font.scm b/scm/font.scm index cad14c9ec5..5adf258831 100644 --- a/scm/font.scm +++ b/scm/font.scm @@ -251,8 +251,8 @@ used. This is used to select the proper design size for the text fonts. ; 'typewriter. ; ; Note that 'LilyPond Serif', 'LilyPond Sans Serif' and 'Lilypond Monospace' -; are aliases that are defined in mf/lilypond-fonts.conf.in (source file) -; or fonts/lilypond-fonts.conf (installed file). +; are aliases that are defined in mf/00-lilypond-fonts.conf.in (source file) +; or fonts/00-lilypond-fonts.conf (installed file). (define*-public (set-global-fonts #:key (music "emmentaler") diff --git a/scm/framework-ps.scm b/scm/framework-ps.scm index 96c584d34f..60d7bb3fc0 100644 --- a/scm/framework-ps.scm +++ b/scm/framework-ps.scm @@ -459,7 +459,7 @@ (if val (format port "/~a (~a)\n" field (metadata-encode (markup->string val (list header))))))) (display "[ " port) - (metadata-lookup-output 'pdfcomposer 'composer "Author") + (metadata-lookup-output 'pdfauthor 'author "Author") (format port "/Creator (LilyPond ~a)\n" (lilypond-version)) (metadata-lookup-output 'pdftitle 'title "Title") (metadata-lookup-output 'pdfsubject 'subject "Subject") diff --git a/scm/fret-diagrams.scm b/scm/fret-diagrams.scm index 041d180c04..85cfbb9b36 100644 --- a/scm/fret-diagrams.scm +++ b/scm/fret-diagrams.scm @@ -44,7 +44,15 @@ to end-point." (define (get-numeric-from-key keystring) "Get the numeric value from a key of the form k:val" - (string->number (substring keystring 2 (string-length keystring)))) + (let* ((entry (substring keystring 2 (string-length keystring))) + (numeric-entry (string->number entry))) + ;; throw an error, if `entry' can't be transformed into a number + (if numeric-entry + numeric-entry + (ly:error + "Unhandled entry in fret-diagram \"~a\" in \"~a\"" + entry + keystring)))) (define (numerify mylist) "Convert string values to numeric or character" @@ -245,7 +253,11 @@ with magnification @var{mag} of the string @var{text}." ((or (eq? my-code 'open)(eq? my-code 'mute)) (set! xo-list (cons* my-item xo-list))) ((eq? my-code 'barre) - (set! barre-list (cons* (cdr my-item) barre-list))) + (if (every number? (cdr my-item)) + (set! barre-list (cons* (cdr my-item) barre-list)) + (ly:error + "barre-indications should contain only numbers: ~a" + (cdr my-item)))) ((eq? my-code 'capo) (set! capo-fret (cadr my-item))) ((eq? my-code 'place-fret) @@ -923,7 +935,9 @@ a fret-indication list with the appropriate values" (output-list '()) (new-props '()) (details (merge-details 'fret-diagram-details props '())) - (items (string-split definition-string #\;))) + ;; remove whitespace-characters from definition-string + (cleared-string (remove-whitespace definition-string)) + (items (string-split cleared-string #\;))) (let parse-item ((myitems items)) (if (not (null? (cdr myitems))) (let ((test-string (car myitems))) @@ -959,7 +973,15 @@ a fret-indication list with the appropriate values" (set! details (acons 'dot-position dot-position details)))) (else - (let ((this-list (string-split test-string #\-))) + (let* ((this-list (string-split test-string #\-)) + (fret-number (string->number (car this-list)))) + ;; If none of the above applies, `fret-number' needs to be a + ;; number. Throw an error, if not. + (if (not fret-number) + (ly:error + "Unhandled entry in fret-diagrams \"~a\" in \"~a\"" + (car this-list) + test-string)) (if (string->number (cadr this-list)) (set! output-list (cons-fret @@ -968,11 +990,11 @@ a fret-indication list with the appropriate values" (if (equal? (cadr this-list) "x" ) (set! output-list (cons-fret - (list 'mute (string->number (car this-list))) + (list 'mute fret-number) output-list)) (set! output-list (cons-fret - (list 'open (string->number (car this-list))) + (list 'open fret-number) output-list))))))) (parse-item (cdr myitems))))) ;; add the modified details diff --git a/scm/harp-pedals.scm b/scm/harp-pedals.scm index a6c93774d3..9365f0a034 100644 --- a/scm/harp-pedals.scm +++ b/scm/harp-pedals.scm @@ -132,6 +132,7 @@ spacing after the divider). stencils))) ;; Parse the harp pedal definition string into list of directions (-1/0/1), #\o and #\| +;; Whitespace is removed from definition string before the procedure applies. (define (harp-pedals-parse-string definition-string) "Parse a harp pedals diagram string and return a list containing 1, 0, -1, #\\o or #\\|" (map (lambda (c) @@ -141,7 +142,7 @@ spacing after the divider). ((#\-) 0) ((#\| #\o) c) (else c))) - (string->list definition-string))) + (string->list (remove-whitespace definition-string)))) ;; Analyze the pedal-list: Return (pedalcount . (divider positions)) diff --git a/scm/lily-library.scm b/scm/lily-library.scm index d413aceca5..c5bf8cc59d 100644 --- a/scm/lily-library.scm +++ b/scm/lily-library.scm @@ -786,6 +786,12 @@ as rectangular coordinates @ode{(x-length . y-length)}." (define-public (string-startswith s prefix) (equal? prefix (substring s 0 (min (string-length s) (string-length prefix))))) +(define-public (remove-whitespace strg) +"Remove characters satisfying @code{char-whitespace?} from string @var{strg}" + (string-delete + strg + char-whitespace?)) + (define-public (string-encode-integer i) (cond ((= i 0) "o") @@ -1022,3 +1028,10 @@ print a warning and set an optional @var{default}." (ly:format "~a:1" input-file-name) (_ "no \\version statement found, please add~afor future compatibility") (format #f "\n\n\\version ~s\n\n" (lilypond-version)))) + +(define-public (output-module? module) + "Returns @code{#t} if @var{module} belongs to an output module +usually carrying context definitions (@code{\\midi} or +@code{\\layout})." + (or (module-ref module 'is-midi #f) + (module-ref module 'is-layout #f))) diff --git a/scm/markup-macros.scm b/scm/markup-macros.scm index 09ab0fc8f2..6c50ec5128 100644 --- a/scm/markup-macros.scm +++ b/scm/markup-macros.scm @@ -236,11 +236,11 @@ interpreted, returns a list of stencils instead of a single one" ;;;;;;;;;;;;;;;;;;;;;; ;;; markup type predicates -(define (markup-function? x) +(define-public (markup-function? x) (and (markup-command-signature x) (not (object-property x 'markup-list-command)))) -(define (markup-list-function? x) +(define-public (markup-list-function? x) (and (markup-command-signature x) (object-property x 'markup-list-command))) diff --git a/scm/midi.scm b/scm/midi.scm index a3ca13f3fd..3564a709b3 100644 --- a/scm/midi.scm +++ b/scm/midi.scm @@ -290,6 +290,17 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; +;;; Adapted from the handle-metadata function in framework-ps.scm +(define (performance-name-from-header header) + (define (metadata-lookup-output overridevar fallbackvar) + (let* ((overrideval (ly:modules-lookup (list header) overridevar)) + (fallbackval (ly:modules-lookup (list header) fallbackvar)) + (val (if overrideval overrideval fallbackval))) + (if val (ly:encode-string-for-pdf (markup->string val)) ""))) + (if (null? header) + "" + (metadata-lookup-output 'midititle 'title))) + (define-public (write-performances-midis performances basename . rest) (let ((midi-ext (ly:get-option 'midi-extension))) (let @@ -297,10 +308,11 @@ ((perfs performances) (count (if (null? rest) 0 (car rest)))) (if (pair? perfs) - (begin + (let ((perf (car perfs))) (ly:performance-write - (car perfs) + perf (if (> count 0) (format #f "~a-~a.~a" basename count midi-ext) - (format #f "~a.~a" basename midi-ext))) + (format #f "~a.~a" basename midi-ext)) + (performance-name-from-header (ly:performance-header perf))) (loop (cdr perfs) (1+ count))))))) diff --git a/scm/music-functions.scm b/scm/music-functions.scm index 8b3647923d..fd3d4ddb00 100644 --- a/scm/music-functions.scm +++ b/scm/music-functions.scm @@ -513,6 +513,29 @@ error (using optionally @code{location})." location) #f)))) +(define-safe-public (check-music-path path #:optional location #:key default) + "Check a music property path specification @var{path}, a symbol +list (or a single symbol), for validity and possibly complete it. +Returns the completed specification, or @code{#f} when rising an +error (using optionally @code{location})." + (let* ((path (if (symbol? path) (list path) path))) + ;; A Guile 1.x bug specific to optargs precludes moving the + ;; defines out of the let + (define (property? s) + (object-property s 'music-type?)) + (define (unspecial? s) + (not (property? s))) + (or (case (length path) + ((1) (and (property? (car path)) (cons default path))) + ((2) (and (unspecial? (car path)) (property? (cadr path)) path)) + (else #f)) + (begin + (ly:parser-error + (format #f (_ "bad music property ~a") + path) + location) + #f)))) + (define-public (make-grob-property-set grob gprop val) "Make a @code{Music} expression that sets @var{gprop} to @var{val} in @var{grob}. Does a pop first, i.e., this is not an override." @@ -614,18 +637,23 @@ in @var{grob}." (make-grob-property-revert 'NoteColumn 'horizontal-shift))))) -(define-safe-public (context-spec-music m context #:optional id) - "Add \\context CONTEXT = ID to M." +(define-safe-public (context-spec-music m context #:optional id mods) + "Add \\context @var{context} = @var{id} \\with @var{mods} to @var{m}." (let ((cm (make-music 'ContextSpeccedMusic 'element m 'context-type context))) (if (string? id) (set! (ly:music-property cm 'context-id) id)) + (if mods + (set! (ly:music-property cm 'property-operations) + (if (ly:context-mod? mods) + (ly:get-context-mods mods) + mods))) cm)) -(define-public (descend-to-context m context) +(define-safe-public (descend-to-context m context #:optional id mods) "Like @code{context-spec-music}, but only descending." - (let ((cm (context-spec-music m context))) + (let ((cm (context-spec-music m context id mods))) (ly:music-set-property! cm 'descend-only #t) cm)) diff --git a/scm/stencil.scm b/scm/stencil.scm index f73b081630..fb2809e9fd 100644 --- a/scm/stencil.scm +++ b/scm/stencil.scm @@ -737,15 +737,17 @@ we make between 0 and 2*pi." `(delay-stencil-evaluation ,(delay whiteout-expr))) stil))))) -(define-public (stencil-whiteout-box stencil) +(define*-public (stencil-whiteout-box stencil + #:optional (thickness 0) (blot 0) (color white)) + "@var{thickness} is how far in staff-spaces the white outline +extends past the extents of @var{stencil}." (let* - ((x-ext (ly:stencil-extent stencil X)) - (y-ext (ly:stencil-extent stencil Y))) + ((x-ext (interval-widen (ly:stencil-extent stencil X) thickness)) + (y-ext (interval-widen (ly:stencil-extent stencil Y) thickness))) - (ly:stencil-add - (stencil-with-color (ly:round-filled-box x-ext y-ext 0.0) - white) - stencil))) + (ly:stencil-add + (stencil-with-color (ly:round-filled-box x-ext y-ext blot) color) + stencil))) (define-public (arrow-stencil-maker start? end?) "Return a function drawing a line from current point to @code{destination}, diff --git a/scripts/auxiliar/pfx2ttf-mono.fontforge b/scripts/auxiliar/pfx2ttf-mono.fontforge deleted file mode 100644 index 7b804949ba..0000000000 --- a/scripts/auxiliar/pfx2ttf-mono.fontforge +++ /dev/null @@ -1,36 +0,0 @@ -Open($1); -MergeKern($2) - - -# The AFM files of `New Century Schoolbook' family as distributed within the -# urw-fonts-1.0.7pre41.tar.bz2 archive contain a bunch of ligatures which -# shouldn't be active by default: -# -# T + M -> trademark -# N + o -> afii61352 -# i + j -> ij -# I + J -> IJ -# -# This font bundle is shipped by Fedora Core 6 and other GNU/Linux -# distributions; we simply remove those ligatures. - -# Monospace font shouldn't have these ligature. -# -# f + i -> fi -# f + l -> fl - -SelectIf("trademark", "trademark", \ - "afii61352", "afii61352", \ - "ij", "ij", \ - "IJ", "IJ", \ - "fi", "fi", \ - "fl", "fl"); -if (Strtol($version) < 20070501) - RemoveATT("Ligature", "*", "*"); -else - RemovePosSub("*"); -endif - -Generate($3 + $fontname + ".otf"); - -# EOF diff --git a/scripts/auxiliar/pfx2ttf.fontforge b/scripts/auxiliar/pfx2ttf.fontforge deleted file mode 100644 index 7d87fae17a..0000000000 --- a/scripts/auxiliar/pfx2ttf.fontforge +++ /dev/null @@ -1,29 +0,0 @@ -Open($1); -MergeKern($2) - - -# The AFM files of `New Century Schoolbook' family as distributed within the -# urw-fonts-1.0.7pre41.tar.bz2 archive contain a bunch of ligatures which -# shouldn't be active by default: -# -# T + M -> trademark -# N + o -> afii61352 -# i + j -> ij -# I + J -> IJ -# -# This font bundle is shipped by Fedora Core 6 and other GNU/Linux -# distributions; we simply remove those ligatures. - -SelectIf("trademark", "trademark", \ - "afii61352", "afii61352", \ - "ij", "ij", \ - "IJ", "IJ"); -if (Strtol($version) < 20070501) - RemoveATT("Ligature", "*", "*"); -else - RemovePosSub("*"); -endif - -Generate($3 + $fontname + ".otf"); - -# EOF diff --git a/scripts/build/lys-to-tely.py b/scripts/build/lys-to-tely.py index 33e9f76f3d..cab59d9148 100644 --- a/scripts/build/lys-to-tely.py +++ b/scripts/build/lys-to-tely.py @@ -68,14 +68,6 @@ template = '''\input texinfo @finalout @c we do not want black boxes. -@c Trick to use with proper font mappings the same NCSB fonts as -@c LilyPond instead of those provided by TeX distribution -@tex -\\ifpdf - \\pdfmapfile{=lilypond.map} -\\fi -@end tex - @c fool ls-latex @ignore @author %%(author)s diff --git a/scripts/lilypond-book.py b/scripts/lilypond-book.py index 73b1cd9464..16f1241af0 100644 --- a/scripts/lilypond-book.py +++ b/scripts/lilypond-book.py @@ -154,7 +154,7 @@ def get_option_parser (): p.add_option ('--left-padding', metavar=_ ("PAD"), dest="padding_mm", - help=_ ("pad left side of music to align music inspite of uneven bar numbers (in mm)"), + help=_ ("pad left side of music to align music in spite of uneven bar numbers (in mm)"), type="float", default=3.0) diff --git a/tex/GNUmakefile b/tex/GNUmakefile index 5fa66c910f..51a54a43aa 100644 --- a/tex/GNUmakefile +++ b/tex/GNUmakefile @@ -14,5 +14,3 @@ local-uninstall: -rmdir $(DESTDIR)$(local_lilypond_datadir)/tex all: $(INSTALLATION_FILES) - -local-WWW-1: $(outdir)/lilypond.map diff --git a/tex/lilypond.map.in b/tex/lilypond.map.in deleted file mode 100644 index 1e6e17869e..0000000000 --- a/tex/lilypond.map.in +++ /dev/null @@ -1,4 +0,0 @@ -pncr8r CenturySchL-Roma <@NCSB_DIR@/c059013l.pfb -pncb8r CenturySchL-Bold <@NCSB_DIR@/c059016l.pfb -pncri8r CenturySchL-Ital <@NCSB_DIR@/c059033l.pfb -pncbi8r CenturySchL-BoldItal <@NCSB_DIR@/c059036l.pfb diff --git a/tex/texinfo.tex b/tex/texinfo.tex index a616aac5de..11838b48b0 100644 --- a/tex/texinfo.tex +++ b/tex/texinfo.tex @@ -1,17 +1,15 @@ % texinfo.tex -- TeX macros to handle Texinfo files. -% +% % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % -\def\texinfoversion{2015-04-30.19} +\def\texinfoversion{2015-08-17.16} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, % 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 % Free Software Foundation, Inc. % -% Modified version used in LilyPond, changed in 2012. -% % This texinfo.tex file 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 @@ -239,7 +237,7 @@ % @errormsg{MSG}. Do the index-like expansions on MSG, but if things % aren't perfect, it's not the end of the world, being an error message, % after all. -% +% \def\errormsg{\begingroup \indexnofonts \doerrormsg} \def\doerrormsg#1{\errmessage{#1}} @@ -279,6 +277,7 @@ % described on page 260 of The TeXbook. It involves outputting two % marks for the sectioning macros, one before the section break, and % one after. I won't pretend I can describe this better than DEK... +% \def\domark{% \toks0=\expandafter{\lastchapterdefs}% \toks2=\expandafter{\lastsectiondefs}% @@ -306,6 +305,7 @@ % Avoid "undefined control sequence" errors. \def\lastchapterdefs{} \def\lastsectiondefs{} +\def\lastsection{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\lastcolordefs{} @@ -1107,7 +1107,7 @@ where each line of input produces a line of output.} % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. -% +% % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and % related messages. The final outcome is that it is up to the TeX user % to double the backslashes and otherwise make the string valid, so @@ -1348,7 +1348,7 @@ output) for that.)} % their "best" equivalent, based on the @documentencoding. Too % much work for too little return. Just use the ASCII equivalents % we use for the index sort strings. - % + % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike @@ -1884,6 +1884,7 @@ end % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1}{OT1} +\setfont\secrmnotbold\rmshape{12}{\magstep1}{OT1} \setfont\secit\itbshape{10}{\magstep2}{OT1IT} \setfont\secsl\slbshape{10}{\magstep2}{OT1} \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} @@ -2319,7 +2320,7 @@ end } % Commands to set the quote options. -% +% \parseargdef\codequoteundirected{% \def\temp{#1}% \ifx\temp\onword @@ -2360,7 +2361,7 @@ end % If we are in a monospaced environment, however, 1) always use \ttsl, % and 2) do not add an italic correction. \def\dosmartslant#1#2{% - \ifusingtt + \ifusingtt {{\ttsl #2}\let\next=\relax}% {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% \next @@ -2508,14 +2509,14 @@ end \gdef\codedash{\futurelet\next\codedashfinish} \gdef\codedashfinish{% \normaldash % always output the dash character itself. - % + % % Now, output a discretionary to allow a line break, unless % (a) the next character is a -, or % (b) the preceding character is a -. % E.g., given --posix, we do not want to allow a break after either -. % Given --foo-bar, we do want to allow a break between the - and the b. \ifx\next\codedash \else - \ifx\codedashprev\codedash + \ifx\codedashprev\codedash \else \discretionary{}{}{}\fi \fi % we need the space after the = for the case when \next itself is a @@ -2596,7 +2597,7 @@ end \ifpdf \ifurefurlonlylink % PDF plus option to not display url, show just arg - \unhbox0 + \unhbox0 \else % PDF, normally display both arg and url for consistency, % visibility, if the pdf is eventually used to print, etc. @@ -2666,7 +2667,7 @@ end % One more complication: by default we'll break after the special % characters, but some people like to break before the special chars, so % allow that. Also allow no breaking at all, for manual control. -% +% \parseargdef\urefbreakstyle{% \def\txiarg{#1}% \ifx\txiarg\wordnone @@ -2881,13 +2882,10 @@ end \def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi} \def\finishsup#1{$\ptexsp{\hbox{\selectfonts\lllsize #1}}$}% -% ctrl is no longer a Texinfo command, but leave this definition for fun. -\def\ctrl #1{{\tt \rawbackslash \hat}#1} - % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. % Ignore unless FMTNAME == tex; then it is like @iftex and @tex, % except specified as a normal braced arg, so no newlines to worry about. -% +% \def\outfmtnametex{tex} % \long\def\inlinefmt#1{\doinlinefmt #1,\finish} @@ -2895,7 +2893,7 @@ end \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi } -% +% % @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if % FMTNAME is tex, else ELSE-TEXT. \long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish} @@ -2911,7 +2909,7 @@ end % *right* brace they would have to use a command anyway, so they may as % well use a command to get a left brace too. We could re-use the % delimiter character idea from \verb, but it seems like overkill. -% +% \long\def\inlineraw{\tex \doinlineraw} \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} \def\doinlinerawtwo#1,#2,\finish{% @@ -3024,11 +3022,16 @@ end \TeX } -% Some math mode symbols. -\def\bullet{$\ptexbullet$} -\def\geq{\ifmmode \ge\else $\ge$\fi} -\def\leq{\ifmmode \le\else $\le$\fi} -\def\minus{\ifmmode -\else $-$\fi} +% Some math mode symbols. Define \ensuremath to switch into math mode +% unless we are already there. Expansion tricks may not be needed here, +% but safer, and can't hurt. +\def\ensuremath{\ifmmode \expandafter\asis \else\expandafter\ensuredmath \fi} +\def\ensuredmath#1{$\relax#1$} +% +\def\bullet{\ensuremath\ptexbullet} +\def\geq{\ensuremath\ge} +\def\leq{\ensuremath\le} +\def\minus{\ensuremath-} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in the cm @@ -3192,8 +3195,15 @@ end \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % -% Use the ec* fonts (cm-super in outline format) for non-CM glyphs. -\def\ecfont{% +% Use the European Computer Modern fonts (cm-super in outline format) +% for non-CM glyphs. That is ec* for regular text and tc* for the text +% companion symbols (LaTeX TS1 encoding). Both are part of the ec +% package and follow the same conventions. +% +\def\ecfont{\etcfont{e}} +\def\tcfont{\etcfont{t}} +% +\def\etcfont#1{% % We can't distinguish serif/sans and italic/slanted, but this % is used for crude hacks anyway (like adding French and German % quotes to documents typeset with CM, where we lose kerning), so @@ -3202,14 +3212,14 @@ end \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% \ifmonospace % typewriter: - \font\thisecfont = ectt\ecsize \space at \nominalsize + \font\thisecfont = #1ctt\ecsize \space at \nominalsize \else \ifx\curfontstyle\bfstylename % bold: - \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize + \font\thisecfont = #1cb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: - \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize + \font\thisecfont = #1c\ifusingit{ti}{rm}\ecsize \space at \nominalsize \fi \fi \thisecfont @@ -3328,7 +3338,7 @@ end % inside a \vbox, and fonts need to be set appropriately first. Because % it is always used for titles, nothing else, we call \rmisbold. \par % should be specified before the end of the \vbox, since a vbox is a group. -% +% \def\raggedtitlesettings{% \rmisbold \hyphenpenalty=10000 @@ -3942,7 +3952,7 @@ end } % multitable-only commands. -% +% % @headitem starts a heading row, which we typeset in bold. Assignments % have to be global since we are inside the implicit group of an % alignment entry. \everycr below resets \everytab so we don't have to @@ -4256,12 +4266,12 @@ end % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). -% +% % Unfortunately, this has the consequence that when _ is in the *value* % of an @set, it does not print properly in the roman fonts (get the cmr % dot accent at position 126 instead). No fix comes to mind, and it's % been this way since 2003 or earlier, so just ignore it. -% +% \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% @@ -4273,7 +4283,7 @@ end % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. -% +% % To get the special treatment we need for `@end ifset,' we call % \makecond and then redefine. % @@ -4306,7 +4316,7 @@ end % without the @) is in fact defined. We can only feasibly check at the % TeX level, so something like `mathcode' is going to considered % defined even though it is not a Texinfo command. -% +% \makecond{ifcommanddefined} \def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} % @@ -5014,10 +5024,39 @@ end % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. -\def\initial#1{{% - % Some minor font changes for the special characters. - \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt - % +\let\normalhyphen=- +{\catcode`\/=13 \catcode`\-=13 \catcode`\^=13 \catcode`\~=13 \catcode`\_=13 +\catcode`\|=13 \catcode`\<=13 \catcode`\>=13 \catcode`\+=13 \catcode`\"=13 +\catcode`\$=3 +\gdef\initialfonts{% + \usemathbackslash + \secfonts + % Some changes for non-alphabetic characters. Using the glyphs from the + % math fonts looks more consistent than the typewriter font used elsewhere + % for these characters. + % Can't get bold backslash so don't use bold forward slash + \catcode`\/=13 + \def/{{\secrmnotbold \normalslash}} + \catcode`\-=13 + \def-{{\normalhyphen\normalhyphen}} + \let^=\normalcaret + \let~=\normaltilde + \def\_{% + \leavevmode \kern.07em \vbox{\hrule width.33em height.06ex}\kern .07em } + \def|{$\vert$} + \def<{$\less$} + \def>{$\gtr$} + \def+{$\normalplus$} + \let"=\normaldoublequote +}} + +\def\initial{% + \bgroup + \initialfonts + \initialx +} + +\def\initialx#1{% % Remove any glue we may have, we'll be inserting our own. \removelastskip % @@ -5038,7 +5077,8 @@ end % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip -}} + \egroup % \initialfonts +} % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index @@ -5595,7 +5635,7 @@ end \let\top\unnumbered % Sections. -% +% \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 @@ -5618,7 +5658,7 @@ end } % Subsections. -% +% % normally calls numberedsubseczzz: \outer\parseargdef\numberedsubsec{\numhead2{#1}} \def\numberedsubseczzz#1{% @@ -5643,7 +5683,7 @@ end } % Subsubsections. -% +% % normally numberedsubsubseczzz: \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} \def\numberedsubsubseczzz#1{% @@ -6689,7 +6729,7 @@ end % @indentedblock is like @quotation, but indents only on the left and % has no optional argument. -% +% \makedispenvdef{indentedblock}{\indentedblockstart} % \def\indentedblockstart{% @@ -6870,7 +6910,7 @@ end % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as -% possible is very desirable. +% possible is desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} @@ -6986,7 +7026,7 @@ end % @deftypefnnewline on|off says whether the return type of typed functions % are printed on their own line. This affects @deftypefn, @deftypefun, % @deftypeop, and @deftypemethod. -% +% \parseargdef\deftypefnnewline{% \def\temp{#1}% \ifx\temp\onword @@ -7167,7 +7207,7 @@ end \tclose{\temp}% typeset the return type \ifrettypeownline % put return type on its own line; prohibit line break following: - \hfil\vadjust{\nobreak}\break + \hfil\vadjust{\nobreak}\break \else \space % type on same line, so just followed by a space \fi @@ -7303,6 +7343,11 @@ end } \fi +% Used to remove a category 13 newline, added to the end of the last +% line read in by \scantokens. +{\catcode`\^^M=13 \gdef\gobblecr^^M{}} + +% Argument is macro body with arguments substituted \def\scanmacro#1{\begingroup \newlinechar`\^^M \let\xeatspaces\eatspaces @@ -7317,15 +7362,14 @@ end % ... and for \example: \spaceisspace % - % The \empty here causes a following catcode 5 newline to be eaten as - % part of reading whitespace after a control sequence. It does not - % eat a catcode 13 newline. There's no good way to handle the two - % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX - % would then have different behavior). See the Macro Details node in - % the manual for the workaround we recommend for macros and - % line-oriented commands. - % - \scantokens{#1\empty}% + \ifnum\catcode`\^^M=5 + % The \empty here causes a following catcode 5 newline to be eaten as + % part of reading whitespace after a control sequence. + \scantokens{#1\empty}% + \else + \catcode`\^^M=13 + \scantokens{#1\gobblecr}% + \fi \endgroup} \def\scanexp#1{% @@ -7412,36 +7456,28 @@ end \def\macrobodyctxt{% used for @macro definitions \scanctxt + \catcode`\ =\other \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } -% LilyPond CHANGE: The following definition has been reverted to the -% original definition since it was problematic in the context of -% indexing. - -\def\macroargctxt{% used when scanning invocations +% Used when scanning braced macro arguments. Note, however, that catcode +% changes here are ineffectual if the macro invocation was nested inside +% an argument to another Texinfo command. +\def\macroargctxt{% \scanctxt -% \catcode`\\=0 - \catcode`\\=\other + \catcode`\\=\active } -% why catcode 0 for \ in the above? To recognize \\ \{ \} as "escapes" -% for the single characters \ { }. Thus, we end up with the "commands" -% that would be written @\ @{ @} in a Texinfo document. -% -% We already have @{ and @}. For @\, we define it here, and only for -% this purpose, to produce a typewriter backslash (so, the @\ that we -% define for @math can't be used with @macro calls): -% + \def\\{\normalbackslash}% -% -% We would like to do this for \, too, since that is what makeinfo does. -% But it is not possible, because Texinfo already has a command @, for a -% cedilla accent. Documents must use @comma{} instead. -% -% \anythingelse will almost certainly be an error of some kind. + +\def\macrolineargctxt{% used for whole-line arguments without braces + \scanctxt + \catcode`\{=\other + \catcode`\}=\other +} % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N @@ -7516,12 +7552,14 @@ end % This makes use of the obscure feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. +% \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname#1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} -% For macro processing make @ a letter so that we can make Texinfo private macro names. +% For macro processing make @ a letter so that we can make +% private-to-Texinfo macro names. \edef\texiatcatcode{\the\catcode`\@} \catcode `@=11\relax @@ -7530,7 +7568,7 @@ end % in the params list to some hook where the argument is to be expanded. If % there are less than 10 arguments that hook is to be replaced by ##N where N % is the position in that list, that is to say the macro arguments are to be -% defined `a la TeX in the macro body. +% defined `a la TeX in the macro body. % % That gets used by \mbodybackslash (above). % @@ -7552,6 +7590,7 @@ end % % If you compile with TeX (not eTeX), and you have macros with 10 or more % arguments, no macro can have more than 256 arguments (else error). +% \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax @@ -7579,7 +7618,7 @@ end \def\parsemmanyargdef@@#1,{% \if#1;\let\next=\relax - \else + \else \let\next=\parsemmanyargdef@@ \edef\tempb{\eatspaces{#1}}% \expandafter\def\expandafter\tempa @@ -7594,13 +7633,12 @@ end % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) -% - +% Set \temp to the body of the macro, and call \defmacro. \catcode `\@\texiatcatcode -\long\def\parsemacbody#1@end macro% -{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% -\long\def\parsermacbody#1@end rmacro% -{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% +{\catcode`\ =\other\long\gdef\parsemacbody#1@end macro{% +\xdef\temp{\eatcr{#1}}\endgroup\defmacro}}% +{\catcode`\ =\other\long\gdef\parsermacbody#1@end rmacro{% +\xdef\temp{\eatcr{#1}}\endgroup\defmacro}}% \catcode `\@=11\relax \let\endargs@\relax @@ -7609,7 +7647,7 @@ end \long\def\nillm@{\nil@}% % This macro is expanded during the Texinfo macro expansion, not during its -% definition. It gets all the arguments values and assigns them to macros +% definition. It gets all the arguments' values and assigns them to macros % macarg.ARGNAME % % #1 is the macro name @@ -7631,7 +7669,8 @@ end \fi } -% +% Internal for \getargsval@. +% \def\getargvals@@{% \ifx\paramlist\nilm@ % Some sanity check needed here that \argvaluelist is also empty. @@ -7675,7 +7714,8 @@ end } % Replace arguments by their values in the macro body, and place the result -% in macro \@tempa +% in macro \@tempa. +% \def\macvalstoargs@{% % To do this we use the property that token registers that are \the'ed % within an \edef expand only once. So we are going to place all argument @@ -7699,8 +7739,9 @@ end \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% } -\def\macargexpandinbody@{% - %% Define the named-macro outside of this group and then close this group. +% Define the named-macro outside of this group and then close this group. +% +\def\macargexpandinbody@{% \expandafter \endgroup \macargdeflist@ @@ -7737,14 +7778,17 @@ end \next } -% Save the token stack pointer into macro #1 +% Save the token stack pointer into macro #1: \def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}} -% Restore the token stack pointer from number in macro #1 -\def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax} -% newtoks that can be used non \outer . +% +% Restore the token stack pointer from number in macro #1: +\def\texirestoretoksstackpoint#1{\expandafter\mathchardef + \expandafter\@cclvi#1\relax} +% Variant \newtoks that can be used non-\outer: \def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi} -% Tailing missing arguments are set to empty +% Tailing missing arguments are set to empty. +% \def\setemptyargvalues@{% \ifx\paramlist\nilm@ \let\next\macargexpandinbody@ @@ -7774,8 +7818,9 @@ end \long\def#2{#4}% } -% This defines a Texinfo @macro. There are eight cases: recursive and -% nonrecursive macros of zero, one, up to nine, and many arguments. +% This defines a Texinfo @macro. \temp has the body of the macro in it. +% There are eight cases: recursive and nonrecursive macros of zero, one, +% up to nine, and many arguments. % Much magic with \expandafter here. % \xdef is used so that macro definitions will survive the file % they're defined in; @include reads the file inside a group. @@ -7789,7 +7834,7 @@ end \noexpand\scanmacro{\temp}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt + \bgroup \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% @@ -7809,7 +7854,7 @@ end \else % 10 or more \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% - }% + }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble \fi @@ -7822,7 +7867,7 @@ end \noexpand\scanmacro{\temp}\egroup}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt + \bgroup \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% @@ -7854,19 +7899,90 @@ end \fi \fi} -\catcode `\@\texiatcatcode\relax +\catcode `\@\texiatcatcode\relax % end private-to-Texinfo catcodes \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} -% \braceorline decides whether the next nonwhitespace character is a -% {. If so it reads up to the closing }, if not, it reads the whole -% line. Whatever was read is then fed to the next control sequence -% as an argument (by \parsebrace or \parsearg). -% + +{\catcode`\@=0 \catcode`\\=13 +@catcode`@_=11 + +% Call #1 with a list of tokens #2, with any doubled backslashes in #2 +% compressed to one. +@gdef@passargtomacro#1#2{% + @def@the_macro{#1}% + @def@pending_backslash{}% + @def@finish{@finish}% + @def@arg_result{}% + @let@next_token=@relax + @add_segment#2\@finish\% +} + +% Input stream is just after a backslash. If the next token is not a +% backslash, process the rest of the argument; otherwise, remove the next +% token. +@gdef@look_ahead{% + @futurelet@next_token@look_aheadzzz} +@gdef@look_aheadzzz{% + @ifx@next_token\% + @let@next=@gobble_and_check_finish + @else + @let@next=@add_segment + @fi@next +} + +% Double backslash found. Add a single backslash here. +@gdef@gobble_and_check_finish#1{% + @add_the_backslash + @def@pending_backslash{}% + @futurelet@next_token@add_segment +} + +% append a backslash to \arg_result +@gdef@add_the_backslash{% + @expandafter@gdef@expandafter@arg_result@expandafter{@arg_result\}% +} + +% Input stream is either at the start of the argument, or just after a +% backslash sequence, either a lone backslash, or a doubled backslash. +% \next_token contains the first token in the input stream: if it is \finish, +% finish; otherwise, append to \arg_result the segment of the argument up until +% the next backslash. \pending_backslash contains a backslash to represent +% a backslash just before the start of the input stream that has not been +% added to \arg_result. +@gdef@add_segment#1\{% +@ifx@next_token@finish + @let@next=@call_the_macro% +@else + @let@next=@look_ahead + % + % append to @arg_result + % token list registers might be better + @expandafter@expandafter@expandafter@gdef + @expandafter@expandafter@expandafter@arg_result + @expandafter@expandafter@expandafter{% + @expandafter@arg_result + @pending_backslash#1}% + @def@pending_backslash{\}% +@fi@next} + +@gdef@call_the_macro{@expandafter@the_macro@expandafter{@arg_result}} + +} + +% \braceorline MAC is used for a one-argument macro MAC. It checks +% whether the next non-whitespace character is a {. It sets the context +% for reading the argument (slightly different in the two cases). Then, +% to read the argument, in the whole-line case, it then calls the regular +% \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC. +% \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% - \ifx\nchar\bgroup\else - \expandafter\parsearg + \ifx\nchar\bgroup + \macroargctxt + \expandafter\passargtomacro + \else + \macrolineargctxt\expandafter\parsearg \fi \macnamexxx} @@ -7965,7 +8081,7 @@ end % automatically in xrefs, if the third arg is not explicitly specified. % This was provided as a "secret" @set xref-automatic-section-title % variable, now it's official. -% +% \parseargdef\xrefautomaticsectiontitle{% \def\temp{#1}% \ifx\temp\onword @@ -8091,24 +8207,24 @@ end \fi \else % node/anchor (non-float) references. - % + % % If we use \unhbox to print the node names, TeX does not insert % empty discretionaries after hyphens, which means that it will not % find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, % this is a loss. Therefore, we give the text of the node name % again, so it is as if TeX is seeing it for the first time. - % + % \ifdim \wd\printedmanualbox > 0pt % Cross-manual reference with a printed manual name. - % + % \crossmanualxref{\cite{\printedmanual\unskip}}% % \else\ifdim \wd\infofilenamebox > 0pt % Cross-manual reference with only an info filename (arg 4), no % printed manual name (arg 5). This is essentially the same as % the case above; we output the filename, since we have nothing else. - % + % \crossmanualxref{\code{\infofilename\unskip}}% % \else @@ -8139,20 +8255,20 @@ end \endgroup} % Output a cross-manual xref to #1. Used just above (twice). -% +% % Only include the text "Section ``foo'' in" if the foo is neither % missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply % "see The Foo Manual", the idea being to refer to the whole manual. -% +% % But, this being TeX, we can't easily compare our node name against the % string "Top" while ignoring the possible spaces before and after in % the input. By adding the arbitrary 7sp below, we make it much less % likely that a real node name would have the same width as "Top" (e.g., % in a monospaced font). Hopefully it will never happen in practice. -% +% % For the same basic reason, we retypeset the "Top" at every % reference, since the current font is indeterminate. -% +% \def\crossmanualxref#1{% \setbox\toprefbox = \hbox{Top\kern7sp}% \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% @@ -8598,7 +8714,7 @@ end % \ifimagevmode \medskip % space after a standalone image - \fi + \fi \ifx\centersub\centerV \egroup \fi \endgroup} @@ -9022,17 +9138,17 @@ directory should work if nowhere else does.} \def\latonechardefs{% \gdef^^a0{\tie} \gdef^^a1{\exclamdown} - \gdef^^a2{\missingcharmsg{CENT SIGN}} - \gdef^^a3{{\pounds}} - \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} - \gdef^^a5{\missingcharmsg{YEN SIGN}} - \gdef^^a6{\missingcharmsg{BROKEN BAR}} + \gdef^^a2{{\tcfont \char162}} % cent + \gdef^^a3{\pounds} + \gdef^^a4{{\tcfont \char164}} % currency + \gdef^^a5{{\tcfont \char165}} % yen + \gdef^^a6{{\tcfont \char166}} % broken bar \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\copyright} \gdef^^aa{\ordf} \gdef^^ab{\guillemetleft} - \gdef^^ac{$\lnot$} + \gdef^^ac{\ensuremath\lnot} \gdef^^ad{\-} \gdef^^ae{\registeredsymbol} \gdef^^af{\={}} @@ -9044,7 +9160,7 @@ directory should work if nowhere else does.} \gdef^^b4{\'{}} \gdef^^b5{$\mu$} \gdef^^b6{\P} - \gdef^^b7{\ifmmode\cdot\else $\cdot$\fi} + \gdef^^b7{\ensuremath\cdot} \gdef^^b8{\cedilla\ } \gdef^^b9{$^1$} \gdef^^ba{\ordm} @@ -9307,7 +9423,7 @@ directory should work if nowhere else does.} % @U{xxxx} to produce U+xxxx, if we support it. \def\U#1{% \expandafter\ifx\csname uni:#1\endcsname \relax - \errhelp = \EMsimple + \errhelp = \EMsimple \errmessage{Unicode character U+#1 not supported, sorry}% \else \csname uni:#1\endcsname @@ -9336,7 +9452,7 @@ directory should work if nowhere else does.} \expandafter\expandafter\expandafter\expandafter \expandafter\expandafter\expandafter \gdef\UTFviiiTmp{#2}% - % + % \expandafter\ifx\csname uni:#1\endcsname \relax \else \errmessage{Internal error, already defined: #1}% \fi @@ -9385,7 +9501,7 @@ directory should work if nowhere else does.} % U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block) % U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A % U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B -% +% % Many of our renditions are less than wonderful, and all the missing % characters are available somewhere. Loading the necessary fonts % awaits user request. We can't truly support Unicode without @@ -9397,25 +9513,29 @@ directory should work if nowhere else does.} \def\utfeightchardefs{% \DeclareUnicodeCharacter{00A0}{\tie} \DeclareUnicodeCharacter{00A1}{\exclamdown} + \DeclareUnicodeCharacter{00A2}{{\tcfont \char162}}% 0242=cent \DeclareUnicodeCharacter{00A3}{\pounds} + \DeclareUnicodeCharacter{00A4}{{\tcfont \char164}}% 0244=currency + \DeclareUnicodeCharacter{00A5}{{\tcfont \char165}}% 0245=yen + \DeclareUnicodeCharacter{00A6}{{\tcfont \char166}}% 0246=brokenbar \DeclareUnicodeCharacter{00A7}{\S} \DeclareUnicodeCharacter{00A8}{\"{ }} \DeclareUnicodeCharacter{00A9}{\copyright} \DeclareUnicodeCharacter{00AA}{\ordf} \DeclareUnicodeCharacter{00AB}{\guillemetleft} - \DeclareUnicodeCharacter{00AC}{\ifmmode\lnot\else $\lnot$\fi} + \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot} \DeclareUnicodeCharacter{00AD}{\-} \DeclareUnicodeCharacter{00AE}{\registeredsymbol} \DeclareUnicodeCharacter{00AF}{\={ }} \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} - \DeclareUnicodeCharacter{00B1}{\ifmmode\pm\else $\pm$\fi} + \DeclareUnicodeCharacter{00B1}{\ensuremath\pm} \DeclareUnicodeCharacter{00B2}{$^2$} \DeclareUnicodeCharacter{00B3}{$^3$} \DeclareUnicodeCharacter{00B4}{\'{ }} \DeclareUnicodeCharacter{00B5}{$\mu$} \DeclareUnicodeCharacter{00B6}{\P} - \DeclareUnicodeCharacter{00B7}{\ifmmode\cdot\else $\cdot$\fi} + \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot} \DeclareUnicodeCharacter{00B8}{\cedilla{ }} \DeclareUnicodeCharacter{00B9}{$^1$} \DeclareUnicodeCharacter{00BA}{\ordm} @@ -9449,7 +9569,7 @@ directory should work if nowhere else does.} \DeclareUnicodeCharacter{00D4}{\^O} \DeclareUnicodeCharacter{00D5}{\~O} \DeclareUnicodeCharacter{00D6}{\"O} - \DeclareUnicodeCharacter{00D7}{\ifmmode\times\else $\times$\fi} + \DeclareUnicodeCharacter{00D7}{\ensuremath\times} \DeclareUnicodeCharacter{00D8}{\O} \DeclareUnicodeCharacter{00D9}{\`U} \DeclareUnicodeCharacter{00DA}{\'U} @@ -9483,7 +9603,7 @@ directory should work if nowhere else does.} \DeclareUnicodeCharacter{00F4}{\^o} \DeclareUnicodeCharacter{00F5}{\~o} \DeclareUnicodeCharacter{00F6}{\"o} - \DeclareUnicodeCharacter{00F7}{\ifmmode\div\else $\div$\fi} + \DeclareUnicodeCharacter{00F7}{\ensuremath\div} \DeclareUnicodeCharacter{00F8}{\o} \DeclareUnicodeCharacter{00F9}{\`u} \DeclareUnicodeCharacter{00FA}{\'u} @@ -9552,7 +9672,7 @@ directory should work if nowhere else does.} \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} \DeclareUnicodeCharacter{0136}{\cedilla{K}} \DeclareUnicodeCharacter{0137}{\cedilla{k}} - \DeclareUnicodeCharacter{0138}{\ifmmode\kappa\else $\kappa$\fi} + \DeclareUnicodeCharacter{0138}{\ensuremath\kappa} \DeclareUnicodeCharacter{0139}{\'L} \DeclareUnicodeCharacter{013A}{\'l} \DeclareUnicodeCharacter{013B}{\cedilla{L}} @@ -9819,6 +9939,8 @@ directory should work if nowhere else does.} \DeclareUnicodeCharacter{201C}{\quotedblleft} \DeclareUnicodeCharacter{201D}{\quotedblright} \DeclareUnicodeCharacter{201E}{\quotedblbase} + \DeclareUnicodeCharacter{2020}{\ensuremath\dagger} + \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger} \DeclareUnicodeCharacter{2022}{\bullet} \DeclareUnicodeCharacter{2026}{\dots} \DeclareUnicodeCharacter{2039}{\guilsinglleft} @@ -9830,6 +9952,7 @@ directory should work if nowhere else does.} \DeclareUnicodeCharacter{2212}{\minus} \DeclareUnicodeCharacter{2217}{\point} + \DeclareUnicodeCharacter{2225}{\ensuremath\parallel} \DeclareUnicodeCharacter{2261}{\equiv} }% end of \utfeightchardefs @@ -10157,8 +10280,8 @@ directory should work if nowhere else does.} \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde -\chardef\hat=`\^ -\catcode`\^=\active \def\activehat{{\tt \hat}} \let^ = \activehat +\chardef\hatchar=`\^ +\catcode`\^=\active \def\activehat{{\tt \hatchar}} \let^ = \activehat \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} @@ -10181,9 +10304,9 @@ directory should work if nowhere else does.} \def\texinfochars{% \let< = \activeless \let> = \activegtr - \let~ = \activetilde + \let~ = \activetilde \let^ = \activehat - \markupsetuplqdefault \markupsetuprqdefault + \markupsetuplqdefault \markupsetuprqdefault \let\b = \strong \let\i = \smartitalic % in principle, all other definitions in \tex have to be undone too. @@ -10236,6 +10359,8 @@ directory should work if nowhere else does.} @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} +@gdef@usemathbackslash{@def@backslashcurfont{@math{@backslash}}} + % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. Also revert - to its normal character, in % case the active - from code has slipped in. diff --git a/tex/txi-de.tex b/tex/txi-de.tex index 3745ebbe5b..bde98db4c5 100644 --- a/tex/txi-de.tex +++ b/tex/txi-de.tex @@ -1,4 +1,4 @@ -% $Id: txi-de.tex,v 1.9 2008/10/16 17:13:10 karl Exp $ +% $Id$ % txi-de.tex -- German translations for texinfo.tex. % % Copyright 1999, 2007, 2008 Free Software Foundation, Inc. diff --git a/tex/txi-en.tex b/tex/txi-en.tex index 6d556b1758..00dde4f8d9 100644 --- a/tex/txi-en.tex +++ b/tex/txi-en.tex @@ -1,4 +1,4 @@ -% $Id: txi-en.tex,v 1.7 2008/10/16 17:13:10 karl Exp $ +% $Id$ % txi.en.tex -- English non-translations for texinfo.tex. This is read % when a source document says @documentlanguage en (which might happen % after another @documentlanguage). The actual values are the same as @@ -25,6 +25,7 @@ \gdef\putwordAppendix{Appendix} \gdef\putwordChapter{Chapter} +\gdef\putworderror{error} \gdef\putwordfile{file} \gdef\putwordin{in} \gdef\putwordIndexIsEmpty{(Index is empty)} diff --git a/tex/txi-es.tex b/tex/txi-es.tex index ace59e345d..44bda35980 100644 --- a/tex/txi-es.tex +++ b/tex/txi-es.tex @@ -1,7 +1,7 @@ -% $Id: txi-es.tex,v 1.6 2008/10/16 17:13:10 karl Exp $ +% $Id$ % txi-es.tex -- Spanish translations for texinfo.tex. % -% Copyright (C) 1999, 2007, 2008 by Adrian Perez Jorge. +% Copyright 1999, 2007, 2008, 2015 by Adrian Perez Jorge. % % This txi-es.tex file is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License as @@ -28,6 +28,7 @@ \gdef\putwordIndexIsEmpty{(El \'Indice est\'a vac\'{\char16{}}o)} \gdef\putwordIndexNonexistent{(No existe el \'Indice)} \gdef\putwordInfo{Info} +\gdef\putwordin{en} \gdef\putwordMethodon{M\'etodo de} \gdef\putwordNoTitle{Sin T\'{\char{16}}tulo} \gdef\putwordof{de} diff --git a/tex/txi-fr.tex b/tex/txi-fr.tex index 4badeddcb8..6e8a6bacb3 100644 --- a/tex/txi-fr.tex +++ b/tex/txi-fr.tex @@ -1,4 +1,4 @@ -% $Id: txi-fr.tex,v 1.8 2008/10/21 23:51:37 karl Exp $ +% $Id$ % txi-fr.tex -- French translations for texinfo.tex. % % Copyright (C) 1999, 2007, 2008 Free Software Foundation. diff --git a/tex/txi-hu.tex b/tex/txi-hu.tex index bf5f05929a..0722595b78 100644 --- a/tex/txi-hu.tex +++ b/tex/txi-hu.tex @@ -1,3 +1,6 @@ +% $Id$ +% txi-hu.tex -- Hungarian translations for texinfo.tex. +% % Copyright 1999, 2007, 2008 Free Software Foundation, Inc. % % This program is free software; you can redistribute it and/or modify diff --git a/tex/txi-it.tex b/tex/txi-it.tex index 06f4f1d6b4..ae2fed409e 100644 --- a/tex/txi-it.tex +++ b/tex/txi-it.tex @@ -1,4 +1,4 @@ -% $Id: txi-it.tex,v 1.7 2008/10/16 17:13:10 karl Exp $ +% $Id$ % txi-it.tex -- Italian translations for texinfo.tex % % Copyright 1999, 2007, 2008 Free Software Foundation. diff --git a/tex/txi-nl.tex b/tex/txi-nl.tex index e5263e18f1..a60edf4b55 100644 --- a/tex/txi-nl.tex +++ b/tex/txi-nl.tex @@ -1,4 +1,4 @@ -% $Id: txi-nl.tex,v 1.7 2008/10/16 17:13:10 karl Exp $ +% $Id$ % txi-nl.tex -- Dutch translations for texinfo.tex. % % Copyright 1999, 2007, 2008 Free Software Foundation.